Name: series-workflowwmjwd Phase: Failed StartedAt: 2026-08-07 02:26:01 +0000 UTC FinishedAt: 2026-08-07 02:29:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmjwd[0] Phase: Succeeded StartedAt: 2026-08-07 02:26:01 +0000 UTC FinishedAt: 2026-08-07 02:29:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmjwd[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 02:26:01 +0000 UTC FinishedAt: 2026-08-07 02:29:20 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwIGVmZm9ydC4gSXQgcmVwbGFjZXMgcGFnZS1iYXNlZCBmdW5jdGlvbnMgYW5kIGZsYWdzIHdpdGggdGhlaXIgZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4sIGNoYW5naW5nIFBBR0VGTEFHIHRvIEZPTElPX0ZMQUcgZm9yICYjMzk7cmVjbGFpbSYjMzk7LCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCwgYW5kIG9wdGltaXppbmcgYSBsb29wIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIgdG8gYXZvaWQgcmVkdW5kYW50IHBhZ2UvZm9saW8gY29udmVyc2lvbnMpLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTI5MDZmMTVmZjI3ZTQ3NWYyMWRiNWQ4MjlkNzlhYzRiYTViNzc4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDI6Mjc6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uNGNjODNmNDFlZjA5NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTU5Myw4ICYjNDM7NTkzLDggQEAgVEVTVFBBR0VGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKVxuIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpXG4gXG4gLyogUEdfcmVhZGFoZWFkIGlzIG9ubHkgdXNlZCBmb3IgcmVhZHM7IFBHX3JlY2xhaW0gaXMgb25seSBmb3Igd3JpdGVzICovXG4tUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcbi1cdFRFU1RDTEVBUkZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcbiYjNDM7Rk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpXG4mIzQzO1x0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlcbiBGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuIFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uY1xuaW5kZXggZTRmYTdmZmZmZThiYi4uZTJhMjY5NDI1YWM1ZSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pby5jXG5AQCAtMTU5LDcgJiM0MzsxNTksNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4tXHRzd3BfZW50cnlfdCBlbnRyeTtcbiYjNDM7XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG5AQCAtMTY3LDggJiM0MzsxNjcsOCBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpJiM0MzsmIzQzOykge1xuLVx0XHRlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7XG4gXHRcdF9fc3dhcF90YWJsZV9zZXRfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7XG4mIzQzO1x0XHRlbnRyeS52YWwmIzQzOyYjNDM7O1xuIFx0fVxuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXG5AQCAtMTgyLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbi1cdHN3cF9lbnRyeV90IGVudHJ5O1xuJiM0MztcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcbkBAIC0xOTAsOCAmIzQzOzE5MCw4IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19jbGVhcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xuIFx0XHRfX3N3YXBfdGFibGVfY2xlYXJfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7XG4mIzQzO1x0XHRlbnRyeS52YWwmIzQzOyYjNDM7O1xuIFx0fVxuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gfVxuQEAgLTIwOCw3ICYjNDM7MjA4LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qXG4tXHQgKiBBcmNoIGNvZGUgbWF5IGhhdmUgdG8gcHJlc2VydmUgbW9yZSBkYXRhIHRoYW4ganVzdCB0aGUgcGFnZVxuJiM0MztcdCAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBmb2xpb1xuIFx0ICogY29udGVudHMsIGUuZy4gbWVtb3J5IHRhZ3MuXG4gXHQgKi9cbiBcdHJldCA9IGFyY2hfcHJlcGFyZV90b19zd2FwKGZvbGlvKTtcbkBAIC0yMTksNyAmIzQzOzIxOSw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0LypcbiBcdCAqIFVzZSB0aGUgc3dhcCB0YWJsZSB6ZXJvIG1hcmsgdG8gYXZvaWQgZG9pbmcgSU8gZm9yIHplcm8tZmlsbGVkXG4tXHQgKiBwYWdlcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXNcbiYjNDM7XHQgKiBmb2xpb3MuIFRoZSB6ZXJvIG1hcmsgaXMgcHJvdGVjdGVkIGJ5IHRoZSBjbHVzdGVyIGxvY2ssIHdoaWNoIGlzXG4gXHQgKiBhY3F1aXJlZCBpbnRlcm5hbGx5IGJ5IHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIuXG4gXHQgKi9cbiBcdGlmIChpc19mb2xpb196ZXJvX2ZpbGxlZChmb2xpbykpIHtcbkBAIC0yNDcsNyAmIzQzOzI0Nyw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0fVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tXHRfX3N3YXBfd3JpdGVwYWdlKGN0eCwgZm9saW8pO1xuJiM0MztcdF9fc3dhcF93cml0ZW91dChjdHgsIGZvbGlvKTtcbiBcdHJldHVybiAwO1xuIG91dF91bmxvY2s6XG4gXHRmb2xpb191bmxvY2soZm9saW8pO1xuQEAgLTI3Niw3ICYjNDM7Mjc2LDcgQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuIFx0cmV0dXJuIGNhbl9tZXJnZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzO1xuIFxuQEAgLTI5Nyw3ICYjNDM7Mjk3LDkgQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuIH1cbi0jZGVmaW5lIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbylcdFx0ZG8geyB9IHdoaWxlICgwKVxuJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7fVxuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgXHUwMDI2XHUwMDI2IENPTkZJR19CTEtfQ0dST1VQICovXG4gXG4gc3RydWN0IHN3YXBfaW9jYiB7XG5AQCAtMzY2LDcgJiM0MzszNjgsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJ3KVxuIFx0fVxuIH1cbiBcbi12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXG5AQCAtNDk2LDEzICYjNDM7NDk4LDEzIEBAIHN0YXRpYyB2b2lkIHN3YXBfd3JpdGVfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpXG4gXHRpbnQgcDtcbiBcbiBcdGZvciAocCA9IDA7IHAgXHUwMDNjIHNpby1cdTAwM2Vucl9idmVjczsgcCYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbcF0uYnZfcGFnZTtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFx1MDAyNnNpby1cdTAwM2VidmVjc1twXSk7XG4gXG4gXHRcdGlmIChmYWlsZWQpIHtcbi1cdFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbi1cdFx0XHRDbGVhclBhZ2VSZWNsYWltKHBhZ2UpO1xuJiM0MztcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4gXHRcdH1cbi1cdFx0ZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpO1xuJiM0MztcdFx0Zm9saW9fZW5kX3dyaXRlYmFjayhmb2xpbyk7XG4gXHR9XG4gXHRtZW1wb29sX2ZyZWUoc2lvLCBzaW9fcG9vbCk7XG4gfVxuQEAgLTUxMywxNiAmIzQzOzUxNSwxNiBAQCBzdGF0aWMgdm9pZCBzd2FwX2ZzX3dyaXRlX2NvbXBsZXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgbG9uZyByZXQpXG4gXHRib29sIGZhaWxlZCA9IHJldCAhPSBzaW8tXHUwMDNlbGVuO1xuIFxuIFx0aWYgKGZhaWxlZCkge1xuLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNpby1cdTAwM2VidmVjc1swXS5idl9wYWdlO1xuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzWzBdKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogSW4gdGhlIGNhc2Ugb2Ygc3dhcC1vdmVyLW5mcywgdGhpcyBjYW4gYmUgYSB0ZW1wb3JhcnkgZmFpbHVyZVxuIFx0XHQgKiBpZiB0aGUgc3lzdGVtIGhhcyBsaW1pdGVkIG1lbW9yeSBmb3IgYWxsb2NhdGluZyB0cmFuc21pdFxuLVx0XHQgKiBidWZmZXJzLiAgTWFyayB0aGUgcGFnZSBkaXJ0eSBhbmQgYXZvaWRcbiYjNDM7XHRcdCAqIGJ1ZmZlcnMuICBNYXJrIHRoZSBmb2xpbyBkaXJ0eSBhbmQgYXZvaWRcbiBcdFx0ICogZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlIGJ1dCByYXRlLWxpbWl0IHRoZSBtZXNzYWdlcy5cbiBcdFx0ICovXG4gXHRcdHByX2Vycl9yYXRlbGltaXRlZChcJiMzNDtXcml0ZSBlcnJvciAlbGQgb24gZGlvIHN3YXBmaWxlICglbGx1KVxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgIHJldCwgc3dhcF9kZXZfcG9zKHBhZ2Vfc3dhcF9lbnRyeShwYWdlKSkpO1xuJiM0MztcdFx0XHRcdCAgIHJldCwgc3dhcF9kZXZfcG9zKGZvbGlvLVx1MDAzZXN3YXApKTtcbiBcdH1cbiBcbiBcdHN3YXBfd3JpdGVfZW5kKHNpbywgZmFpbGVkKTtcbkBAIC01OTUsNyAmIzQzOzU5Nyw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfYmRldl9zdWJtaXRfd3JpdGUoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpXG4gXHRcdFx0UkVRX09QX1dSSVRFIHwgUkVRX1NXQVApO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IHNpby1cdTAwM2VsZW47XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBzd2FwX2ZvbGlvX3NlY3RvcihiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuLVx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShiaW8sIGJpb19maXJzdF9mb2xpb19hbGwoYmlvKSk7XG4mIzQzO1x0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VzaXMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTykge1xuIFx0XHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IGVjNTgwYzcxMzIwNDIuLmMzZmY5MTMyZGU1ZTAgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTI3OSw3ICYjNDM7Mjc5LDcgQEAgdm9pZCBzd2FwX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHZvaWQgc3dhcF9yZWFkX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XG4gdm9pZCBzd2FwX3dyaXRlX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XG4gaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAvKiBsaW51eC9tbS9zd2FwX3N0YXRlLmMgKi9cbiBleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Ugc3dhcF9zcGFjZSBfX3JlYWRfbW9zdGx5O1xuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCBkZWEyZDNiMzZlMDZmLi4yZmY2ZGUwYThjMzZhIDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuY1xuQEAgLTI5ODIsNyAmIzQzOzI5ODIsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfc3dhcF9leHRlbnQpO1xuIC8qXG4gICogQSBgc3dhcCBleHRlbnQmIzM5OyBpcyBhIHNpbXBsZSB0aGluZyB3aGljaCBtYXBzIGEgY29udGlndW91cyByYW5nZSBvZiBwYWdlc1xuICAqIG9udG8gYSBjb250aWd1b3VzIHJhbmdlIG9mIGRpc2sgYmxvY2tzLiAgQSByYnRyZWUgb2Ygc3dhcCBleHRlbnRzIGlzXG4tICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlcGFnZS9zd2FwX3JlYWRfZm9saW9cbiYjNDM7ICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlb3V0L3N3YXBfcmVhZF9mb2xpb1xuICAqIHRpbWUgZm9yIGxvY2F0aW5nIHdoZXJlIG9uIGRpc2sgYSBwYWdlIGJlbG9uZ3MuXG4gICpcbiAgKiBJZiB0aGUgc3dhcGZpbGUgaXMgYW4gU19JU0JMSyBibG9jayBkZXZpY2UsIGEgc2luZ2xlIGV4dGVudCBpcyBpbnN0YWxsZWQuXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGY3YzljODlmNjQ0OWMuLjM4Y2I2YTgzMThhNTQgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMTA1MCw3ICYjNDM7MTA1MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7XG4gXG4gXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cbi1cdF9fc3dhcF93cml0ZXBhZ2UoXHUwMDI2Y3R4LCBmb2xpbyk7XG4mIzQzO1x0X19zd2FwX3dyaXRlb3V0KFx1MDAyNmN0eCwgZm9saW8pO1xuIFx0c3dhcF93cml0ZV9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcbiBvdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwIGVmZm9ydC4gSXQgcmVwbGFjZXMgcGFnZS1iYXNlZCBmdW5jdGlvbnMgYW5kIGZsYWdzIHdpdGggdGhlaXIgZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4sIGNoYW5naW5nIFBBR0VGTEFHIHRvIEZPTElPX0ZMQUcgZm9yICYjMzk7cmVjbGFpbSYjMzk7LCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCwgYW5kIG9wdGltaXppbmcgYSBsb29wIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIgdG8gYXZvaWQgcmVkdW5kYW50IHBhZ2UvZm9saW8gY29udmVyc2lvbnMpLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI5MDZmMTVmZjI3ZTQ3NWYyMWRiNWQ4MjlkNzlhYzRiYTViNzc4NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMDI6Mjc6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IDdhODYzNTcyYWRjZTcuLjRjYzgzZjQxZWYwOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC01OTMsOCAmIzQzOzU5Myw4IEBAIFRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTCkKIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpCiAKIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqLwotUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTCkKLQlURVNUQ0xFQVJGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpCiYjNDM7Rk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpCiYjNDM7CUZPTElPX1RFU1RfQ0xFQVJfRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpCiBGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKQogCUZPTElPX1RFU1RfQ0xFQVJfRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSkKIApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jCmluZGV4IGU0ZmE3ZmZmZmU4YmIuLmUyYTI2OTQyNWFjNWUgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lvLmMKQEAgLTE1OSw3ICYjNDM7MTU5LDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pOwogCWludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwotCXN3cF9lbnRyeV90IGVudHJ5OwomIzQzOwlzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLSZndDtzd2FwOwogCXVuc2lnbmVkIGludCBpOwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKQEAgLTE2Nyw4ICYjNDM7MTY3LDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpJiM0MzsmIzQzOykgewotCQllbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7CiAJCV9fc3dhcF90YWJsZV9zZXRfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7CiYjNDM7CQllbnRyeS52YWwmIzQzOyYjNDM7OwogCX0KIAlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKIApAQCAtMTgyLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pCiBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwotCXN3cF9lbnRyeV90IGVudHJ5OwomIzQzOwlzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLSZndDtzd2FwOwogCXVuc2lnbmVkIGludCBpOwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKQEAgLTE5MCw4ICYjNDM7MTkwLDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIAljaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pOwogCWZvciAoaSA9IDA7IGkgJmx0OyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkmIzQzOyYjNDM7KSB7Ci0JCWVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTsKIAkJX19zd2FwX3RhYmxlX2NsZWFyX3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpOwomIzQzOwkJZW50cnkudmFsJiM0MzsmIzQzOzsKIAl9CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiB9CkBAIC0yMDgsNyAmIzQzOzIwOCw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKgotCSAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBwYWdlCiYjNDM7CSAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBmb2xpbwogCSAqIGNvbnRlbnRzLCBlLmcuIG1lbW9yeSB0YWdzLgogCSAqLwogCXJldCA9IGFyY2hfcHJlcGFyZV90b19zd2FwKGZvbGlvKTsKQEAgLTIxOSw3ICYjNDM7MjE5LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIAkvKgogCSAqIFVzZSB0aGUgc3dhcCB0YWJsZSB6ZXJvIG1hcmsgdG8gYXZvaWQgZG9pbmcgSU8gZm9yIHplcm8tZmlsbGVkCi0JICogcGFnZXMuIFRoZSB6ZXJvIG1hcmsgaXMgcHJvdGVjdGVkIGJ5IHRoZSBjbHVzdGVyIGxvY2ssIHdoaWNoIGlzCiYjNDM7CSAqIGZvbGlvcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXMKIAkgKiBhY3F1aXJlZCBpbnRlcm5hbGx5IGJ5IHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIuCiAJICovCiAJaWYgKGlzX2ZvbGlvX3plcm9fZmlsbGVkKGZvbGlvKSkgewpAQCAtMjQ3LDcgJiM0MzsyNDcsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlfX3N3YXBfd3JpdGVwYWdlKGN0eCwgZm9saW8pOwomIzQzOwlfX3N3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7CiAJcmV0dXJuIDA7CiBvdXRfdW5sb2NrOgogCWZvbGlvX3VubG9jayhmb2xpbyk7CkBAIC0yNzYsNyAmIzQzOzI3Niw3IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbykKIAlyZXR1cm4gY2FuX21lcmdlOwogfQogCi1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIApAQCAtMjk3LDcgJiM0MzsyOTcsOSBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pCiB7CiAJcmV0dXJuIHRydWU7CiB9Ci0jZGVmaW5lIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbykJCWRvIHsgfSB3aGlsZSAoMCkKJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzO30KICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgJmFtcDsmYW1wOyBDT05GSUdfQkxLX0NHUk9VUCAqLwogCiBzdHJ1Y3Qgc3dhcF9pb2NiIHsKQEAgLTM2Niw3ICYjNDM7MzY4LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9hZGRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBydykKIAl9CiB9CiAKLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pOwogCkBAIC00OTYsMTMgJiM0Mzs0OTgsMTMgQEAgc3RhdGljIHZvaWQgc3dhcF93cml0ZV9lbmQoc3RydWN0IHN3YXBfaW9jYiAqc2lvLCBib29sIGZhaWxlZCkKIAlpbnQgcDsKIAogCWZvciAocCA9IDA7IHAgJmx0OyBzaW8tJmd0O25yX2J2ZWNzOyBwJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNpby0mZ3Q7YnZlY3NbcF0uYnZfcGFnZTsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKCZhbXA7c2lvLSZndDtidmVjc1twXSk7CiAKIAkJaWYgKGZhaWxlZCkgewotCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCQlDbGVhclBhZ2VSZWNsYWltKHBhZ2UpOwomIzQzOwkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwomIzQzOwkJCWZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pOwogCQl9Ci0JCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKJiM0MzsJCWZvbGlvX2VuZF93cml0ZWJhY2soZm9saW8pOwogCX0KIAltZW1wb29sX2ZyZWUoc2lvLCBzaW9fcG9vbCk7CiB9CkBAIC01MTMsMTYgJiM0Mzs1MTUsMTYgQEAgc3RhdGljIHZvaWQgc3dhcF9mc193cml0ZV9jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KQogCWJvb2wgZmFpbGVkID0gcmV0ICE9IHNpby0mZ3Q7bGVuOwogCiAJaWYgKGZhaWxlZCkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNpby0mZ3Q7YnZlY3NbMF0uYnZfcGFnZTsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKCZhbXA7c2lvLSZndDtidmVjc1swXSk7CiAKIAkJLyoKIAkJICogSW4gdGhlIGNhc2Ugb2Ygc3dhcC1vdmVyLW5mcywgdGhpcyBjYW4gYmUgYSB0ZW1wb3JhcnkgZmFpbHVyZQogCQkgKiBpZiB0aGUgc3lzdGVtIGhhcyBsaW1pdGVkIG1lbW9yeSBmb3IgYWxsb2NhdGluZyB0cmFuc21pdAotCQkgKiBidWZmZXJzLiAgTWFyayB0aGUgcGFnZSBkaXJ0eSBhbmQgYXZvaWQKJiM0MzsJCSAqIGJ1ZmZlcnMuICBNYXJrIHRoZSBmb2xpbyBkaXJ0eSBhbmQgYXZvaWQKIAkJICogZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlIGJ1dCByYXRlLWxpbWl0IHRoZSBtZXNzYWdlcy4KIAkJICovCiAJCXByX2Vycl9yYXRlbGltaXRlZCgmIzM0O1dyaXRlIGVycm9yICVsZCBvbiBkaW8gc3dhcGZpbGUgKCVsbHUpXG4mIzM0OywKLQkJCQkgICByZXQsIHN3YXBfZGV2X3BvcyhwYWdlX3N3YXBfZW50cnkocGFnZSkpKTsKJiM0MzsJCQkJICAgcmV0LCBzd2FwX2Rldl9wb3MoZm9saW8tJmd0O3N3YXApKTsKIAl9CiAKIAlzd2FwX3dyaXRlX2VuZChzaW8sIGZhaWxlZCk7CkBAIC01OTUsNyAmIzQzOzU5Nyw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfYmRldl9zdWJtaXRfd3JpdGUoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpCiAJCQlSRVFfT1BfV1JJVEUgfCBSRVFfU1dBUCk7CiAJYmlvLSZndDtiaV9pdGVyLmJpX3NpemUgPSBzaW8tJmd0O2xlbjsKIAliaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTsKLQliaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTsKJiM0MzsJYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpOwogCiAJaWYgKGN0eC0mZ3Q7c2lzLSZndDtmbGFncyAmYW1wOyBTV1BfU1lOQ0hST05PVVNfSU8pIHsKIAkJc3VibWl0X2Jpb193YWl0KGJpbyk7CmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggZWM1ODBjNzEzMjA0Mi4uYzNmZjkxMzJkZTVlMCAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMjc5LDcgJiM0MzsyNzksNyBAQCB2b2lkIHN3YXBfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiB2b2lkIHN3YXBfcmVhZF9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpOwogdm9pZCBzd2FwX3dyaXRlX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7CiBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7Ci12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAogLyogbGludXgvbW0vc3dhcF9zdGF0ZS5jICovCiBleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Ugc3dhcF9zcGFjZSBfX3JlYWRfbW9zdGx5OwpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggZGVhMmQzYjM2ZTA2Zi4uMmZmNmRlMGE4YzM2YSAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jCkBAIC0yOTgyLDcgJiM0MzsyOTgyLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3N3YXBfZXh0ZW50KTsKIC8qCiAgKiBBIGBzd2FwIGV4dGVudCYjMzk7IGlzIGEgc2ltcGxlIHRoaW5nIHdoaWNoIG1hcHMgYSBjb250aWd1b3VzIHJhbmdlIG9mIHBhZ2VzCiAgKiBvbnRvIGEgY29udGlndW91cyByYW5nZSBvZiBkaXNrIGJsb2Nrcy4gIEEgcmJ0cmVlIG9mIHN3YXAgZXh0ZW50cyBpcwotICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlcGFnZS9zd2FwX3JlYWRfZm9saW8KJiM0MzsgKiBidWlsdCBhdCBzd2Fwb24gdGltZSBhbmQgaXMgdGhlbiB1c2VkIGF0IHN3YXBfd3JpdGVvdXQvc3dhcF9yZWFkX2ZvbGlvCiAgKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLgogICoKICAqIElmIHRoZSBzd2FwZmlsZSBpcyBhbiBTX0lTQkxLIGJsb2NrIGRldmljZSwgYSBzaW5nbGUgZXh0ZW50IGlzIGluc3RhbGxlZC4KZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IGY3YzljODlmNjQ0OWMuLjM4Y2I2YTgzMThhNTQgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMTA1MCw3ICYjNDM7MTA1MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJZm9saW9fc2V0X3JlY2xhaW0oZm9saW8pOwogCiAJLyogc3RhcnQgd3JpdGViYWNrICovCi0JX19zd2FwX3dyaXRlcGFnZSgmYW1wO2N0eCwgZm9saW8pOwomIzQzOwlfX3N3YXBfd3JpdGVvdXQoJmFtcDtjdHgsIGZvbGlvKTsKIAlzd2FwX3dyaXRlX3N1Ym1pdCgmYW1wO2N0eCk7CiAKIG91dDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGb2xpby1SZWxhdGVkIFN3YXAgRW50cnkgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCYjMzk7cyByZW5hbWluZyBzb21lIGZsYWdzLCBjbGVhbmluZyB1cCBzb21lIGNvZGUgYXJvdW5kIGZvbGlvcyBpbiBgbW0vcGFnZV9pby5jYCBhbmQgYG1tL3pzd2FwLmNgLCBub3RoaW5nIHRvbyBleGNpdGluZyB0aGVyZS4gQnV0LCB3YWl0LCBJIHNlZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBzd2FwX3plcm9tYXBfZm9saW9fc2V0YCBhbmQgYHN3YXBfemVyb21hcF9mb2xpb19jbGVhcmAuIFRoZXkmIzM5O3ZlIGNoYW5nZWQgaG93IHRoZSBgc3dwX2VudHJ5X3QgZW50cnlgIGlzIGhhbmRsZWQuIEJlZm9yZSwgaXQgbG9va2VkIGxpa2UgdGhpczoKCmBgYGMKLQlzd3BfZW50cnlfdCBlbnRyeTsKJiM0MzsJc3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby0mZ3Q7c3dhcDsKLi4uCi0JCWVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTsKIAkJX19zd2FwX3RhYmxlX3NldF96ZXJvKGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpKTsKJiM0MzsJCWVudHJ5LnZhbCYjNDM7JiM0Mzs7CmBgYAoKVGhleSYjMzk7cmUgbm93IGluaXRpYWxpemluZyBgZW50cnlgIHdpdGggYGZvbGlvLSZndDtzd2FwYCBhbmQgaW5jcmVtZW50aW5nIGl0IGluIHRoZSBsb29wIHdpdGggYGVudHJ5LnZhbCYjNDM7JiM0MztgLCBpbnN0ZWFkIG9mIGdldHRpbmcgdGhlIGBlbnRyeWAgd2l0aCBhIGNhbGwgdG8gYHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSlgLiBJcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEl0IGhhcyB0aGUgcG90ZW50aWFsIHRvIGJlIGEgc2lnbmlmaWNhbnQgb25lIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4KCkxldCYjMzk7cyBsb29rIGF0IGBwYWdlX3N3YXBfZW50cnlgIHRvIHNlZSB3aGF0IGl0IGRvZXMuCgpgYGBjCnN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgcGFnZV9zd2FwX2VudHJ5KHN0cnVjdCBwYWdlICpwYWdlKQp7CglzdHJ1Y3Qgc3dwX2VudHJ5X3QgZW50cnk7CgllbnRyeS52YWwgPSBwYWdlX3ByaXZhdGUocGFnZSk7CglyZXR1cm4gZW50cnk7Cn0KYGBgCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBwYWdlX3N3YXBfZW50cnlgIGp1c3QgZ2V0cyB0aGUgYHBhZ2VfcHJpdmF0ZShwYWdlKWAgYW5kIHNldHMgaXQgaW50byB0aGUgYGVudHJ5LnZhbGAgZmllbGQuIEZvciBhIGZvbGlvLCBpc24mIzM5O3QgYGZvbGlvLSZndDtzd2FwYCB0aGUgc3dhcCBlbnRyeSBmb3IgdGhlIGZpcnN0IHBhZ2U/CgpJZiB0aGlzIGlzIGEgbGFyZ2UgZm9saW8sIGRvZXMgYHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSlgIHJldHVybiBgZm9saW8tJmd0O3N3YXAudmFsICYjNDM7IGlgPyBMZXQmIzM5O3MgYXNzdW1lIHRoYXQgbGFyZ2UgZm9saW9zIGFyZSB1c3VhbGx5IGFzc2lnbmVkIGEgY29udGlndW91cyByYW5nZSBvZiBzd2FwIGVudHJpZXMuIEluIHRoaXMgY2FzZSwgaW5jcmVtZW50aW5nIGBlbnRyeS52YWwmIzQzOyYjNDM7YCBzaG91bGQgYmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIHNpbmNlIGBmb2xpby0mZ3Q7c3dhcGAgd291bGQgcG9pbnQgdG8gdGhlIGZpcnN0IGVudHJ5IGFuZCBzdWNjZXNzaXZlIHBhZ2VzIHdpdGhpbiB0aGUgZm9saW8gc2hvdWxkIGhhdmUgc3dhcCBlbnRyaWVzIHdpdGggaW5jcmVtZW50aW5nIHZhbHVlcy4KCkhvd2V2ZXIsIHRoZSBwcm9ibGVtIGlzIHRoYXQgYHBhZ2VfcHJpdmF0ZShwYWdlKWAgZm9yIHRhaWwgcGFnZXMgbWlnaHQgKm5vdCogYmUgc2V0IHRvIHRoZSBzd2FwIGVudHJ5ISBJIG5lZWQgdG8gY2hlY2sgaWYgYHBhZ2VfcHJpdmF0ZWAgaXMgc2V0IGNvcnJlY3RseSBmb3IgdGFpbCBwYWdlcyBpbiB0aGUgc3dhcCBjYWNoZS4gSSYjMzk7bSBnb2luZyB0byBncmVwIGZvciBgcGFnZV9zd2FwX2VudHJ5YCBhbmQgYGZvbGlvLSZndDtzd2FwYCBpbiB0aGUgY29kZSB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgc2FmZS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IGlmIHRoZXJlJiMzOTtzIGFueSBjb2RlIHRoYXQgYXNzdW1lcyBgcGFnZV9wcml2YXRlYCBpcyBjb3JyZWN0bHkgc2V0IGZvciB0aGVzZSB0YWlsIHBhZ2VzLCBiZWNhdXNlIGlmIHRoZXJlIGlzLCB0aGlzIGNoYW5nZSBjb3VsZCBicmVhayBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3N3YXBfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTIxNDI9c3RhdGljIGJvb2wgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjE0Ny1cdFx0XHRcdCAgICBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcbm1tL3JtYXAuYzoyMTQ4Olx0c3dwX2VudHJ5X3QgZW50cnkgPSBwYWdlX3N3YXBfZW50cnkocGFnZSk7XG5tbS9ybWFwLmMtMjE0OS1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuLS1cbm1tL3pzd2FwLmM9MTM5OD1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3pzd2FwLmMtMTQwMS17XG5tbS96c3dhcC5jOjE0MDI6XHRzd3BfZW50cnlfdCBwYWdlX3N3cGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHBhZ2UpO1xubW0venN3YXAuYy0xNDAzLVx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgKm9sZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTE5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIExpbnV4IFN3YXAgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgc3dhcCBtZWNoYW5pc20sIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgcGFnZV9zd2FwX2VudHJ5YCBpcyBkZWZpbmVkLiBJJiMzOTt2ZSBiZWVuIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBpdCYjMzk7cyBsZWFkaW5nIG1lIGludG8gdGhlIGtlcm5lbCBoZWFkZXJzLiBOb3csIGxldCYjMzk7cyBzZWUuLi4gV2FpdCBhIG1pbnV0ZSwgSSByZW1lbWJlciBub3chIGBwYWdlX3N3YXBfZW50cnlgIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBzd2FwLXJlbGF0ZWQgc3RydWN0dXJlcyB3b3VsZCBuYXR1cmFsbHkgcmVzaWRlIHRoZXJlLiBHb3QgaXQuIE5vdyBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gVGhpcyBzaG91bGQgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHBhZ2Ugc3dhcHBpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9zd2FwX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmg9MjQyPXN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0yODAtXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDoyODE6c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBwYWdlX3N3YXBfZW50cnkoc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0yODIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MjIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHBhZ2Vfc3dhcF9lbnRyeWAgRGVmaW5pdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHBhZ2Vfc3dhcF9lbnRyeWAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlLCBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgY3VycmVudCBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgcHJvYmFibHkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBhbmQgcGVyaGFwcyB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBwYWdpbmcgb3Igc3dhcCBzcGFjZSBtYW5hZ2VtZW50IG1vZHVsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBrZXkgZmllbGRzLiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIGRhdGEgaXQmIzM5O3Mgc3RvcmluZyDigJMgbGlrZSB0aGUgcGh5c2ljYWwgcGFnZSBudW1iZXIsIGl0cyBzdGF0dXMgKHByZXNlbnQsIHN3YXBwZWQgb3V0LCBldGMuKSwgYW5kIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhLCBtYXliZSBhIHJlZmVyZW5jZSBjb3VudC4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIG92ZXJhbGwgZGVzaWduLiBEb2VzIGl0IGltcGxlbWVudCBhIHNwZWNpZmljIHBhZ2UgcmVwbGFjZW1lbnQgYWxnb3JpdGhtPyBJcyBpdCB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIHN3YXAgc3BhY2Ugb3JnYW5pemF0aW9uPyBUaGUgZGV0YWlscyBhcmUgY3J1Y2lhbCBoZXJlIOKAkyBldmVyeSBiaXQgaW4gdGhhdCBzdHJ1Y3R1cmUgaGFzIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5LiBVbHRpbWF0ZWx5IEkmIzM5O20gYXNzZXNzaW5nIHRvIHNlZSBpZiBteSBleGlzdGluZyBrbm93bGVkZ2UgYWxpZ25zIHdpdGggdGhpcyBjdXJyZW50IGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFxuIDI4MTpcdHN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgcGFnZV9zd2FwX2VudHJ5KHN0cnVjdCBwYWdlICpwYWdlKVxuIDI4MjpcdHtcbiAyODM6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuIDI4NDpcdFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIDI4NTpcdFxuIDI4NjpcdFx0ZW50cnkudmFsICYjNDM7PSBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSk7XG4gMjg3Olx0XHRyZXR1cm4gZW50cnk7XG4gMjg4Olx0fVxuIDI4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTd2FwIFdyaXRlIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBgcGFnZV9zd2FwX2VudHJ5YCBkb2VzIHByZWNpc2VseSB3aGF0IEkgZXhwZWN0ZWQgd2l0aCBgZm9saW8tJmd0O3N3YXAudmFsICYjNDM7PSBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSlgLiBFc3NlbnRpYWxseSwgaW5jcmVtZW50aW5nIGBlbnRyeS52YWwmIzQzOyYjNDM7YCB3aXRoaW4gYSBsb29wIHRoYXQgaXRlcmF0ZXMgZnJvbSBgMGAgdG8gYGZvbGlvX25yX3BhZ2VzKGZvbGlvKWAgc2hvdWxkIGFjaGlldmUgdGhlIGV4YWN0IHNhbWUgcmVzdWx0LiBJdCYjMzk7cyBhIHZhbGlkIG9wdGltaXphdGlvbiEKCkhtbSwgYnV0IHdoYXQgYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgQ2xlYXJQYWdlUmVjbGFpbShwYWdlKWAgYW5kIGBmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKWA/IGBDbGVhclBhZ2VSZWNsYWltKHBhZ2UpYCBvcGVyYXRlcyBvbiBhIHNwZWNpZmljIHBhZ2UsIHdoaWxlIGBmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKWAgdGFyZ2V0cyB0aGUgZW50aXJlIGZvbGlvLCBzcGVjaWZpY2FsbHkgdGhlIGhlYWQgcGFnZS4KCkkgc2VlIHRoZSByZWNlbnQgY2hhbmdlIGluIGBzd2FwX3dyaXRlX2VuZGA6IHRoZSBjb2RlIHNoaWZ0ZWQgZnJvbSBgc3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tJmd0O2J2ZWNzW3BdLmJ2X3BhZ2U7YCB0byBgc3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oJmFtcDtzaW8tJmd0O2J2ZWNzW3BdKTtgLiBDb25zZXF1ZW50bHksIGBDbGVhclBhZ2VSZWNsYWltKHBhZ2UpYCB3YXMgcmVwbGFjZWQgd2l0aCBgZm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbylgLgoKTm93LCB0aGUgY3J1Y2lhbCBwb2ludDogYFJlY2xhaW1gIHdhcyBkZWZpbmVkIGFzIGBQQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKWAuIEFuZCB0aGUgaW1wbGljYXRpb24gaXMgdGhhdCB0aGlzIGZsYWcgd291bGQgb25seSBiZSBzZXQgb24gdGhlIGhlYWQgcGFnZSEgTGV0JiMzOTtzIHZlcmlmeSB0aGlzIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAuIEFoLCB5ZXM6CgpgYGBjCi1QQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKQotCVRFU1RDTEVBUkZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTCkKJiM0MztGT0xJT19GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSkKJiM0MzsJRk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSkKYGBgCgpUaGUgZGVmaW5pdGlvbiBlbmZvcmNlcyB0aGF0IHRoaXMgZmxhZyBpcyBzZXQgb24gdGhlIGhlYWQgcGFnZS4gSWYgY2FsbGVkIG9uIGEgdGFpbCBwYWdlLCB0aGVyZSB3b3VsZCBiZSBhIGBWTV9CVUdfT05gLgoKVGhlcmVmb3JlLCB0aGUgb3JpZ2luYWwgYENsZWFyUGFnZVJlY2xhaW0ocGFnZSlgICptdXN0KiBoYXZlIGJlZW4gY2FsbGVkIG9uIGEgaGVhZCBwYWdlLCBvdGhlcndpc2UsIGl0IHdvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gYSBjcmFzaCEgVGhlIGNoYW5nZSBpcyB2YWxpZCBiZWNhdXNlIHRoZSBmbGFnJiMzOTtzIHNjb3BlIG1hdGNoZXMgdGhlIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLgoKV2FpdCBhIG1pbnV0ZS4uLiBjb3VsZCBgc2lvLSZndDtidmVjc1twXS5idl9wYWdlYCBhY3R1YWxseSBwb2ludCB0byBhIHRhaWwgcGFnZSBpZiB0aGUgYmlvIHZlY3RvciBkb2VzIGluZGVlZCBwb2ludCB0byBhIHRhaWwgcGFnZT8gVGhhdCYjMzk7cyB0aGUgb25lIHRoaW5nIHRoYXQgY291bGQgZGlzcnVwdCB0aGlzIGxvZ2ljLiBCdXQgYHN3YXBfd3JpdGVfZW5kYCBpcyBpbnZva2VkIGFmdGVyIHRoZSBzd2FwIHdyaXRlIGNvbXBsZXRlcywgYW5kIEkmIzM5O2QgYmUgdmVyeSBzdXJwcmlzZWQgaWYgYW55IGJpbyB2ZWN0b3IgZXZlciBwb2ludHMgdG8gYSB0YWlsIHBhZ2UgZm9yIHRoYXQgb3BlcmF0aW9uLiBMZXQmIzM5O3MgY2hlY2sgaG93IGBzaW8tJmd0O2J2ZWNzYCBhcmUgcG9wdWxhdGVkIHRvIG1ha2Ugc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2lvLVx1MDAzZWJ2ZWNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9pby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfaW8uYz0zMjk9c3RhdGljIGJvb2wgc3dhcF9jYW5fbWVyZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcGFnZV9pby5jLTMzMi1cdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhmb2xpby1cdTAwM2Vzd2FwKTtcbm1tL3BhZ2VfaW8uYzozMzM6XHRzdHJ1Y3QgYmlvX3ZlYyAqbGFzdF9idiA9IFx1MDAyNmN0eC1cdTAwM2VzaW8tXHUwMDNlYnZlY3NbY3R4LVx1MDAzZXNpby1cdTAwM2Vucl9idmVjcyAtIDFdO1xubW0vcGFnZV9pby5jLTMzNC1cdHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbyA9IGJ2ZWNfZm9saW8obGFzdF9idik7XG4tLVxubW0vcGFnZV9pby5jPTM0Mj1zdGF0aWMgdm9pZCBzd2FwX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJ3KVxuLS1cbm1tL3BhZ2VfaW8uYy0zNjAtXHR9XG5tbS9wYWdlX2lvLmM6MzYxOlx0YnZlY19zZXRfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzW3Npby1cdTAwM2Vucl9idmVjc10sIGZvbGlvLCBmb2xpb19zaXplKGZvbGlvKSwgMCk7XG5tbS9wYWdlX2lvLmMtMzYyLVx0c2lvLVx1MDAzZWxlbiAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG5tbS9wYWdlX2lvLmM6MzYzOlx0aWYgKCYjNDM7JiM0MztzaW8tXHUwMDNlbnJfYnZlY3MgPT0gQVJSQVlfU0laRShzaW8tXHUwMDNlYnZlY3MpKSB7XG5tbS9wYWdlX2lvLmMtMzY0LVx0XHRpZiAocncgPT0gV1JJVEUpXG4tLVxubW0vcGFnZV9pby5jPTQ5Nj1zdGF0aWMgdm9pZCBzd2FwX3dyaXRlX2VuZChzdHJ1Y3Qgc3dhcF9pb2NiICpzaW8sIGJvb2wgZmFpbGVkKVxuLS1cbm1tL3BhZ2VfaW8uYy01MDAtXHRmb3IgKHAgPSAwOyBwIFx1MDAzYyBzaW8tXHUwMDNlbnJfYnZlY3M7IHAmIzQzOyYjNDM7KSB7XG5tbS9wYWdlX2lvLmM6NTAxOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbyhcdTAwMjZzaW8tXHUwMDNlYnZlY3NbcF0pO1xubW0vcGFnZV9pby5jLTUwMi1cbi0tXG5tbS9wYWdlX2lvLmM9NTEyPXN0YXRpYyB2b2lkIHN3YXBfZnNfd3JpdGVfY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldClcbi0tXG5tbS9wYWdlX2lvLmMtNTE3LVx0aWYgKGZhaWxlZCkge1xubW0vcGFnZV9pby5jOjUxODpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzWzBdKTtcbm1tL3BhZ2VfaW8uYy01MTktXG4tLVxubW0vcGFnZV9pby5jPTU0Nj1zdGF0aWMgdm9pZCBzd2FwX3JlYWRfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpXG4tLVxubW0vcGFnZV9pby5jLTU1MC1cdGZvciAocCA9IDA7IHAgXHUwMDNjIHNpby1cdTAwM2Vucl9idmVjczsgcCYjNDM7JiM0MzspIHtcbm1tL3BhZ2VfaW8uYzo1NTE6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFx1MDAyNnNpby1cdTAwM2VidmVjc1twXSk7XG5tbS9wYWdlX2lvLmMtNTUyLVxuLS1cbm1tL3BhZ2VfaW8uYz01OTE9c3RhdGljIHZvaWQgc3dhcF9iZGV2X3N1Ym1pdF93cml0ZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eClcbi0tXG5tbS9wYWdlX2lvLmMtNTk1LVxubW0vcGFnZV9pby5jOjU5NjpcdGJpb19pbml0KGJpbywgY3R4LVx1MDAzZXNpcy1cdTAwM2ViZGV2LCBzaW8tXHUwMDNlYnZlY3MsIEFSUkFZX1NJWkUoc2lvLVx1MDAzZWJ2ZWNzKSxcbm1tL3BhZ2VfaW8uYy01OTctXHRcdFx0UkVRX09QX1dSSVRFIHwgUkVRX1NXQVApO1xuLS1cbm1tL3BhZ2VfaW8uYz02MTE9c3RhdGljIHZvaWQgc3dhcF9iZGV2X3N1Ym1pdF9yZWFkKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KVxuLS1cbm1tL3BhZ2VfaW8uYy02MTUtXG5tbS9wYWdlX2lvLmM6NjE2Olx0YmlvX2luaXQoYmlvLCBjdHgtXHUwMDNlc2lzLVx1MDAzZWJkZXYsIHNpby1cdTAwM2VidmVjcywgQVJSQVlfU0laRShzaW8tXHUwMDNlYnZlY3MpLFxubW0vcGFnZV9pby5jLTYxNy1cdFx0XHRSRVFfT1BfUkVBRCk7XG4tLVxubW0vcGFnZV9pby5jPTY1ND1zdGF0aWMgdm9pZCBzd2FwX2ZzX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgaW50IHJ3KVxuLS1cbm1tL3BhZ2VfaW8uYy02NjAtXHRpbml0X3N5bmNfa2lvY2IoXHUwMDI2c2lvLVx1MDAzZWlvY2IsIGN0eC1cdTAwM2VzaXMtXHUwMDNlc3dhcF9maWxlKTtcbm1tL3BhZ2VfaW8uYzo2NjE6XHRzaW8tXHUwMDNlaW9jYi5raV9wb3MgPSBzd2FwX2Rldl9wb3MoYnZlY19mb2xpbyhcdTAwMjZzaW8tXHUwMDNlYnZlY3NbMF0pLVx1MDAzZXN3YXApO1xubW0vcGFnZV9pby5jLTY2Mi1cdGlmIChydyA9PSBXUklURSlcbi0tXG5tbS9wYWdlX2lvLmMtNjY3LVx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBydyA9PSBXUklURSA/IElURVJfU09VUkNFIDogSVRFUl9ERVNULFxubW0vcGFnZV9pby5jOjY2ODpcdFx0XHRzaW8tXHUwMDNlYnZlY3MsIHNpby1cdTAwM2Vucl9idmVjcywgc2lvLVx1MDAzZWxlbik7XG5tbS9wYWdlX2lvLmMtNjY5LVx0cmV0ID0gc2lvLVx1MDAzZWlvY2Iua2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlc3dhcF9ydyhcdTAwMjZzaW8tXHUwMDNlaW9jYiwgXHUwMDI2aXRlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyBgQ2xlYXJQYWdlUmVjbGFpbWAgYW5kIGBmb2xpb19jbGVhcl9yZWNsYWltYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoaXMgYGJ2ZWNfc2V0X2ZvbGlvYCBmdW5jdGlvbiBpcyBzZXR0aW5nIHRoZSBgYnZfcGFnZWAgZmllbGQgdG8gdGhlIGZvbGlvJiMzOTtzIGhlYWQgcGFnZS4gVGhhdCBtZWFucyB0aGUgYHNpby0mZ3Q7YnZlY3NbcF0uYnZfcGFnZWAgcG9pbnRlciAqYWxyZWFkeSogcG9pbnRlZCB0byB0aGF0IHNhbWUgaGVhZCBwYWdlLiBTbywgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgaGVhZCBwYWdlLCBgQ2xlYXJQYWdlUmVjbGFpbShwYWdlKWAgYW5kIGBmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKWAgc2hvdWxkIGVzc2VudGlhbGx5IGJlIGRvaW5nIHRoZSBleGFjdCBzYW1lIHRoaW5nOyB0aGVyZSYjMzk7cyBubyByZWFsIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZSB0aGVyZS4gVGhleSYjMzk7cmUganVzdCBjbGVhcmluZyB0aGUgcmVjbGFpbSBiaXQgb24gdGhlIHNhbWUgdW5kZXJseWluZyBwYWdlLgoKQnV0LCBoYW5nIG9uIGEgc2Vjb25kLi4uIFRoaXMgbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSB0cmFuc2l0aW9uIHRvIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpb2AuIFdl4oCZdmUgY2hhbmdlZCB0aGUgY29kZSB0byBhc3NvY2lhdGUgYmxrZ3MgZnJvbSB0aGUgZm9saW8gaW5zdGVhZCBvZiB0aGUgcGFnZS4gTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZWAgdG8gbWFrZSBzdXJlIG5vdGhpbmcgY3J1Y2lhbCBpcyBiZWluZyBtaXNzZWQgZHVyaW5nIHRoZSB0cmFuc2l0aW9uIHRvIGZvbGlvcy4gTmVlZCB0byBjb25maXJtIHRoZSBibGtnIGFzc29jaWF0aW9uIGlzIHRoZSBzYW1lIGluIGJvdGggY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBhIFJlY2VudCBDb2RlIENoYW5nZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBTb21ldGhpbmcmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBNeSBndXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbmFsaXR5LCB3aGF0ZXZlciBpdCBpcywgd2FzIGFjdHVhbGx5ICpyZW1vdmVkKiBpbiB0aGlzIGxhdGVzdCBwYXRjaC4gSXQmIzM5O3MgdGhhdCBuYWdnaW5nIGZlZWxpbmcgeW91IGdldCB3aGVuIHlvdSYjMzk7dmUgYmVlbiB3b3JraW5nIHdpdGggdGhpcyBjb2RlIGJhc2UgZm9yIGEgd2hpbGUuIExldCBtZSBkb3VibGUtY2hlY2suIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IG1vZHVsZXMsIHRoZSBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdvdWxkIGJlIGluIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpb2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHRoZSBrZXkgbG9naWMgaWYgaXQgKndhcyogcmVtb3ZlZCwgb3Igd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHNvbWUgaW5kaWNhdGlvbiBvZiBob3cgaXQgd2FzIGFsdGVyZWQsIG9yIG1vdmVkLiBHb3R0YSBjb25maXJtIHRoYXQgYXNzdW1wdGlvbiBiZWZvcmUgSSBnbyBkb3duIGFueSByYWJiaXQgaG9sZXMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9pby5jPTI2Mz1zdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4tLVxubW0vcGFnZV9pby5jLTI3OC1cbm1tL3BhZ2VfaW8uYzoyNzk6c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vcGFnZV9pby5jLTI4MC17XG4tLVxubW0vcGFnZV9pby5jPTI5Nj1zdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4tLVxubW0vcGFnZV9pby5jLTI5OS19XG5tbS9wYWdlX2lvLmM6MzAwOnN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3BhZ2VfaW8uYy0zMDEte1xuLS1cbm1tL3BhZ2VfaW8uYz01OTE9c3RhdGljIHZvaWQgc3dhcF9iZGV2X3N1Ym1pdF93cml0ZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eClcbi0tXG5tbS9wYWdlX2lvLmMtNTk5LVx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbm1tL3BhZ2VfaW8uYzo2MDA6XHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhiaW8sIGJpb19maXJzdF9mb2xpb19hbGwoYmlvKSk7XG5tbS9wYWdlX2lvLmMtNjAxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpb2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uIOKAkyB3aGF04oCZcyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtPyBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIGJpb2xvZ2ljYWwgYXNzb2NpYXRpb24sIGxpa2VseSBkYXRhIGxpbmthZ2UsIGNvbnNpZGVyaW5nIHRoZSAmIzM0O2JpbyYjMzQ7IGFuZCAmIzM0O2Fzc29jaWF0ZSYjMzQ7IGtleXdvcmRzLiBUaGUgJiMzNDtibGtnJiMzNDsgYW5kICYjMzQ7Zm9saW8mIzM0OyBwYXJ0cyBzdWdnZXN0IGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIG9yIHJlY29yZC1rZWVwaW5nIGZvcm1hdCwgbWF5YmUgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgYmFja2luZyBzdG9yYWdlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgYXNzb2NpYXRpb25zIGl0JiMzOTtzIGJ1aWxkaW5nLiBJcyBpdCBsaW5raW5nIGJpb2xvZ2ljYWwgZW50aXRpZXMgKGdlbmVzLCBwcm90ZWlucywgcGF0aHdheXMsIGV0Yy4pPyBJcyBpdCBhc3NvY2lhdGluZyBkYXRhIHdpdGggYSBmb2xpby1iYXNlZCBzeXN0ZW0gZm9yIHRyYWNraW5nL21hbmFnZW1lbnQ/IFRoaXMgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwb3RlbnRpYWwgdXNlIGNhc2VzIGFuZCBsaW1pdGF0aW9ucy4gSSBuZWVkIHRvIGFzc2VzcyBob3cgaXQgZml0cyB3aXRoaW4gdGhlIHdvcmtmbG93IOKAkyBpcyBpdCBhIGNyaXRpY2FsIHN0ZXAsIGEgaGVscGVyIGZ1bmN0aW9uLCBvciBwYXJ0IG9mIGEgbGFyZ2VyIHByb2Nlc3M/IExldCYjMzk7cyBnZXQgdG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQgaXQmIzM5O3MgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9pby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzk6XHRzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gMjgwOlx0e1xuIDI4MTpcdFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcbiAyODI6XHRcbiAyODM6XHRcdGlmICghZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXG4gMjg0Olx0XHRcdHJldHVybjtcbiAyODU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAyODY6XHRcdGNzcyA9IGZvbGlvX21lbWNnX2Jsa2dfY3NzKGZvbGlvKTtcbiAyODc6XHRcdGlmIChjc3MgXHUwMDI2XHUwMDI2ICFjc3NfdHJ5Z2V0KGNzcykpXG4gMjg4Olx0XHRcdGNzcyA9IE5VTEw7XG4gMjg5Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAyOTA6XHRcbiAyOTE6XHRcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyhiaW8sIGNzcyk7XG4gMjkyOlx0XHRpZiAoY3NzKVxuIDI5MzpcdFx0XHRjc3NfcHV0KGNzcyk7XG4gMjk0Olx0fVxuIDI5NTpcdCNlbHNlXG4gMjk2Olx0c3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuIDI5NzpcdHtcbiAyOTg6XHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY4MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDU3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlY2VudCBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBhIHN0cmFpZ2h0Zm9yd2FyZCByZW5hbWU6IGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlYCB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbHNpdGUgdXBkYXRlLiBUaGF0JiMzOTtzIGp1c3QgdGlkeWluZyB1cCwgbGlrZWx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgRm9saW8gdHJhbnNpdGlvbiwgbm90IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBvbiBpdHMgb3duLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgYF9fc3dhcF93cml0ZXBhZ2VgIHRvIGBfX3N3YXBfd3JpdGVvdXRgIHJlbmFtZSwgYWdhaW4sIHNlZW1zIGZhaXJseSBpbm5vY3VvdXMuIEp1c3QgYSBuYW1lIGNoYW5nZS4KCk5vdywgdGhpcyBgUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClgIHRvIGBGT0xJT19GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlgIGNoYW5nZSBpcyBhIGJpdCBtb3JlIHN1YnN0YW50aWFsLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBtb3ZpbmcgZnJvbSBwYWdlLWxldmVsIGZsYWdzIHRvIGZvbGlvLWxldmVsIGZsYWdzLCB3aGljaCBpcyBhYnNvbHV0ZWx5IHRoZSBkaXJlY3Rpb24gd2UmIzM5O3JlIGhlYWRlZC4gVGhpcyB0cmFuc2Zvcm1zIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGZyb20gYFBhZ2VSZWNsYWltYCwgYFNldFBhZ2VSZWNsYWltYCwgYW5kIHNvIG9uLCB0byB0aGUgZm9saW8tYmFzZWQgY291bnRlcnBhcnRzLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIGNhbGxlcnMgaW4gYG1tL3BhZ2VfaW8uY2AsIGBtbS96c3dhcC5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vc3dhcC5oYCwgYW5kIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAgdG8gdXNlIHRoZSBuZXcgYGZvbGlvXypgIGZ1bmN0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7YXJlIHRoZXJlIG90aGVyIGNhbGxlcnMgb2YgYFBhZ2VSZWNsYWltYCB0aGF0IGFyZW4mIzM5O3QgYWRkcmVzc2VkIGJ5IHRoaXMgcGF0Y2g/JiMzNDsgSSBxdWlja2x5IHJlYWxpemVkIHRoZSBkaWZmIEkmIzM5O20gbG9va2luZyBhdCAqaXMqIHRoZSBlbnRpcmUgcGF0Y2gsIHdoaWNoIG1ha2VzIG15IGxpZmUgYSBsaXR0bGUgZWFzaWVyLgoKV2FpdCBhIHNlY29uZC4uLkkmIzM5O20gcHJldHR5IHN1cmUgYFBhZ2VSZWNsYWltYCBpcyBhbHNvIHVzZWQgaW4gYG1tL3Ztc2Nhbi5jYCEgRGlkIHRoZSBwYXRjaCBhY2NvdW50IGZvciB0aGF0PyAqUXVpY2tseSBjaGVja2luZy4uLiogSG1tLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBwYXRjaCBhbHNvIHVwZGF0ZWQgYG1tL3Ztc2Nhbi5jYC4uLgoKT2theSwgSSBuZWVkIHRvIGdvIHNlZSBpZiB0aGUgZnVuY3Rpb24gYFBhZ2VSZWNsYWltYCBpcyBzdGlsbCBpbiB0aGUgdHJlZSwgYmVjYXVzZSwgYnkgdGhlIGxvb2tzIG9mIGl0LCBpdCBtYXkgbm90IGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BhZ2VSZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MjIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIE1pc3NpbmcgYFBhZ2VSZWNsYWltYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBgUGFnZVJlY2xhaW1gIG1vZHVsZSB3YXMgc3RpbGwgcGFydCBvZiB0aGUgdHJlZS4gQnV0IHNvbWV0aGluZyYjMzk7cyBjbGVhcmx5IHNoaWZ0ZWQsIGJlY2F1c2UgaXQmIzM5O3Mgbm8gbG9uZ2VyIGFwcGVhcmluZyB3aGVyZSBJIGV4cGVjdGVkIGl0IHRvIGJlLiBUaGlzIHdhcnJhbnRzIGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZGV0ZXJtaW5lIGl0cyBjdXJyZW50IHN0YXR1cyBpcyB0aGF0IGBmb2xpb190ZXN0X3JlY2xhaW1gIHdoaWNoIHNob3VsZCBpbnRlcmFjdCB3aXRoIGBQYWdlUmVjbGFpbWAuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoYXQgdGVsbHMgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3Rlc3RfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTIyMT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9mb2xpb19zZXEoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjQ1LVx0ZWxzZSBpZiAoKCFmb2xpb19pc19maWxlX2xydShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHx8XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjI0NjpcdFx0IChmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yNDctXHRcdCAgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkpKVxuLS1cbm1tL2ZpbGVtYXAuYz0xNjU2PXZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZmlsZW1hcC5jLTE2NjYtXHQgKi9cbm1tL2ZpbGVtYXAuYzoxNjY3Olx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpIHtcbm1tL2ZpbGVtYXAuYy0xNjY4LVx0XHRmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTtcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jPTI3Njg9Ym9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0yNzgzLVx0XHQgKi9cbm1tL3BhZ2Utd3JpdGViYWNrLmM6Mjc4NDpcdFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3ODUtXHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9MTA1Nz1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTEzNi1cdFx0ICovXG5tbS92bXNjYW4uYzoxMTM3Olx0XHRpZiAod3JpdGViYWNrIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pKVxubW0vdm1zY2FuLmMtMTEzOC1cdFx0XHRzdGF0LVx1MDAzZW5yX2Nvbmdlc3RlZCAmIzQzOz0gbnJfcGFnZXM7XG4tLVxubW0vdm1zY2FuLmMtMTE5MC1cdFx0XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jOjExOTE6XHRcdFx0ICAgIGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy0xMTkyLVx0XHRcdCAgICB0ZXN0X2JpdChQR0RBVF9XUklURUJBQ0ssIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKSkge1xuLS1cbm1tL3Ztc2Nhbi5jLTExOTctXHRcdFx0fSBlbHNlIGlmICh3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHNjKSB8fFxubW0vdm1zY2FuLmM6MTE5ODpcdFx0XHQgICAgIWZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykgfHxcbm1tL3Ztc2Nhbi5jLTExOTktXHRcdFx0ICAgICFtYXlfZW50ZXJfZnMoZm9saW8sIHNjLVx1MDAzZWdmcF9tYXNrKSB8fFxuLS1cbm1tL3Ztc2Nhbi5jLTEzNzgtXHRcdFx0XHRcdFx0bnJfcGFnZXMpO1xubW0vdm1zY2FuLmM6MTM3OTpcdFx0XHRcdGlmICghZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSlcbm1tL3Ztc2Nhbi5jLTEzODAtXHRcdFx0XHRcdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGZvbGlvX3Rlc3RfcmVjbGFpbWAgVXNhZ2UqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZm9saW9fdGVzdF9yZWNsYWltYCBpcyBiZWluZyB1c2VkIHdpdGhpbiBgbW0vdm1zY2FuLmNgIGFuZCBlbHNld2hlcmUuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCB3ZXJlIHByaW1hcmlseSBmb2N1c2VkIG9uIGBtbS9wYWdlX2lvLmNgLCBgbW0venN3YXAuY2AsIGBtbS9zd2FwZmlsZS5jYCwgYW5kIHJlbGF0ZWQgaGVhZGVycy4gSXQgc2VlbXMgb2RkIHRoYXQgYG1tL3Ztc2Nhbi5jYCB3b3VsZCBiZSB0b3VjaGVkIGlmIHRoZSBwcmltYXJ5IHRhcmdldCB3YXNuJiMzOTt0IGV4cGxpY2l0bHkgcmVsYXRlZC4KClRoZSBtb3JlIEkgdGhpbmsgYWJvdXQgaXQsIHRoZSBtb3JlIEkgc3VzcGVjdCB0aGF0IGBQYWdlUmVjbGFpbWAgbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gY29udmVydGVkIHRvIGBmb2xpb190ZXN0X3JlY2xhaW1gIGluIGEgc2VyaWVzIG9mIHByaW9yIHBhdGNoZXMuIFBlcmhhcHMgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoIGlzIHNpbXBseSB0aGUgY3VsbWluYXRpb24gb2YgdGhhdCBjb252ZXJzaW9uLCBjbGVhbmluZyB1cCB0aGUgb2xkIGBQQUdFRkxBR2AgZGVmaW5pdGlvbiBhbmQgZnVsbHkgdHJhbnNpdGlvbmluZyB0byB0aGUgYEZPTElPX0ZMQUdgIG1lY2hhbmlzbS4gSXQgY291bGQgYmUgZmluaXNoaW5nIHRoZSBqb2IgYW5kIHRoaXMgaXMgdGhlIGZpbmFsIHN0ZXAuCgpUbyBjb25maXJtIHRoaXMgaHlwb3RoZXNpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBnaXQgaGlzdG9yeS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGVuIHRoZSBgUGFnZVJlY2xhaW1gIHRvIGBmb2xpb190ZXN0X3JlY2xhaW1gIHRyYW5zaXRpb24gYmVnYW4gYW5kIHdoZW4gaXQgbWlnaHQgaGF2ZSBmdWxseSBsYW5kZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEFHRUZMQUdcXChSZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA4MAoJCQkJCQkJb3V0cHV0OiAxMjYKCQkJCQkJCXRob3VnaHRzOiAxNzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGFuZCBDbGVhbnVwOiBBIENsb3NlciBMb29rKioKCk9rYXksIHNvIHRoZSBwcm92aWRlZCBwYXRjaOKAlHllYWgsIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQgd2FzIGFwcGxpZWQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdlbnQgbGlrZSB0aGlzOiBzaW5jZSBgUGFnZVJlY2xhaW1gIHdhcyBhbHJlYWR5IGJlaW5nIHRyYW5zaXRpb25lZCB0byBgZm9saW9fdGVzdF9yZWNsYWltYCBpbiB0aGUgZXhpc3RpbmcgY29kZWJhc2UsIEkgaGFkIHRvIGVuc3VyZSB0aGUgbWFjcm8gZXhwYW5zaW9uIHdhcyBjb25zaXN0ZW50LiBSaWdodCwgdGhlIGBQQUdFRkxBR2AgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBnZW5lcmF0ZXMgKmJvdGgqIHRoZSBgUGFnZS4uLmAgYW5kIGBmb2xpb190ZXN0Xy4uLmAgZnVuY3Rpb25zLiBJdCB1c2VzIGBURVNUUEFHRUZMQUdgLCBgU0VUUEFHRUZMQUdgLCBhbmQgYENMRUFSUEFHRUZMQUdgIGludGVybmFsbHkuIEFuZCBiZWNhdXNlIGBURVNUUEFHRUZMQUdgIGdlbmVyYXRlcyBib3RoIGZ1bmN0aW9uIHZhcmlhbnRzLCBgUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClgIHdhcyBkZWZpbml0ZWx5IGNyZWF0aW5nIGJvdGggYFBhZ2VSZWNsYWltYCBhbmQgYGZvbGlvX3Rlc3RfcmVjbGFpbWAuCgpOb3csIGNoYW5naW5nIGl0IHRvIGBGT0xJT19GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlgLi4uIHRoYXQgKm9ubHkqIGdlbmVyYXRlcyB0aGUgYGZvbGlvX3Rlc3RfcmVjbGFpbWAsIGBmb2xpb19zZXRfcmVjbGFpbWAsIGBmb2xpb19jbGVhcl9yZWNsYWltYCwgYW5kIHJlbW92ZXMgdGhlIG9sZGVyIGBQYWdlUmVjbGFpbWAgZXF1aXZhbGVudHMuIFRoaXMgbWVhbnMsIHVuZGVuaWFibHksIHRoaXMgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwIGV4ZXJjaXNlLiBJdCYjMzk7cyBhYm91dCByZW1vdmluZyB0aGUgYFBhZ2VgIHZhcmlhbnRzIG9mIHRoZSBgUmVjbGFpbWAgZmxhZy4gSXQgYWxzbyByZW5hbWVzIGBfX3N3YXBfd3JpdGVwYWdlYCB0byBgX19zd2FwX3dyaXRlb3V0YCwgYW5kIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlYCB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLiBBbGwgY29zbWV0aWMuCgpMb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIGBzd2FwX3plcm9tYXBfZm9saW9fc2V0YCBhbmQgYHN3YXBfemVyb21hcF9mb2xpb19jbGVhcmAuLi4gSSYjMzk7ZCBhbHJlYWR5IGFuYWx5emVkIGl0IGVhcmxpZXIgYW5kIGtuZXcgdGhhdCBgcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKWAgaXMgdGhlIHNhbWUgdGhpbmcgYXMgYGZvbGlvLSZndDtzd2FwLnZhbCAmIzQzOyBpYC4gU28sIGluY3JlbWVudGluZyBgZW50cnkudmFsJiM0MzsmIzQzO2AgaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbC4gSXQmIzM5O3MgYW4gb3B0aW1pemF0aW9uIHRoYXQgY2xlYW5zIHVwIHJlZHVuZGFudCBjYWxscy4KClNvLCBpcyB0aGVyZSBhbnkgYWN0dWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmU/IE5vLiBJdCYjMzk7cyBhIHN0cmFpZ2h0LXVwIHJlZmFjdG9yaW5nOiBzd2FwcGluZyBgUGFnZWAgZnVuY3Rpb25zIHdpdGggYGZvbGlvYCBmdW5jdGlvbnMsIHJlbmFtaW5nLCBhbmQgdGhhdCBsaXR0bGUgb3B0aW1pemF0aW9uIGluIHRoZSBsb29wLgoKTGV0IG1lIGRvdWJsZS1jaGVjayBgc3dhcF93cml0ZV9lbmRgLiBUaGUgYGJ2ZWNfZm9saW9gIGNhbGxzIGRvIHRoZSBgcGFnZV9mb2xpb2Agb24gdGhlIGBidl9wYWdlYC4gQnV0LCBgYnZfcGFnZWAgaXMgYWxyZWFkeSB0aGUgaGVhZCBwYWdlIChzZXQgYnkgYGJ2ZWNfc2V0X2ZvbGlvYCksIHNvIGBwYWdlX2ZvbGlvYCBpcyBlZmZlY3RpdmVseSBkb2luZyBub3RoaW5nIGFuZCByZXR1cm5zIHRoZSBleGFjdCBzYW1lIGFkZHJlc3MgYXMgYmVmb3JlIChidXQgY2FzdCB0byBhIGBzdHJ1Y3QgZm9saW8gKmApLiBUaGVuLCBhbGwgdGhlIGBzZXRfcGFnZV9kaXJ0eWAsIGBDbGVhclBhZ2VSZWNsYWltYCwgYW5kIGBlbmRfcGFnZV93cml0ZWJhY2tgIGNhbGxzIGp1c3QgZ2V0IG1hcHBlZCB0byBgZm9saW9fbWFya19kaXJ0eWAsIGBmb2xpb19jbGVhcl9yZWNsYWltYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gRXhhY3Qgc2FtZSBiZWhhdmlvci4KCk9rLCBsZXQgbWUgcXVpY2tseSBnbGFuY2UgYXQgYHN3YXBfZnNfd3JpdGVfY29tcGxldGVgLiBIZXJlIHRoZSBgcGFnZV9zd2FwX2VudHJ5YCBvbiB0aGUgaGVhZCBwYWdlIGp1c3QgcmV0dXJucyBgZm9saW8tJmd0O3N3YXBgLCB3aGljaCBpcyBpZGVudGljYWwsIGFuZCB0aHVzIGBzd2FwX2Rldl9wb3MoZm9saW8tJmd0O3N3YXApYCBhbHNvIHN0YXlzIHRoZSBzYW1lLgoKQW5kIGZpbmFsbHksIGBzd2FwX2JkZXZfc3VibWl0X3dyaXRlYCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWA6IHRob3NlIGFyZSBwdXJlIGZ1bmN0aW9uIHJlbmFtZXMuCgpTbywgeWVhaCwgKmZpbmFsKiBjb25jbHVzaW9uOiBUaGlzIHBhdGNoIGlzIGEgKnB1cmUqIHJlZmFjdG9yaW5nL2NsZWFudXAuIEl0JiMzOTtzIHJlbW92aW5nIHVudXNlZCBtYWNyb3MsIHJlbmFtaW5nIGZ1bmN0aW9ucyB0byB1c2UgYGZvbGlvYCBjb252ZW50aW9ucywgYW5kIG9wdGltaXppbmcgdGhhdCBvbmUgbG9vcCBieSBhdm9pZGluZyByZXBlYXRlZCBmb2xpby9wYWdlIGNvbnZlcnNpb25zLiBUaGVyZSYjMzk7cyB6ZXJvIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwgbG9naWMuIFdvcnRoRnV6emluZz1mYWxzZS4gTm8gbmVlZCB0byB3YXN0ZSB0aW1lIGZ1enppbmcgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBhbmQgY2xlYW51cCBlZmZvcnQuIEl0IHJlcGxhY2VzIHBhZ2UtYmFzZWQgZnVuY3Rpb25zIGFuZCBmbGFncyB3aXRoIHRoZWlyIGZvbGlvLWJhc2VkIGVxdWl2YWxlbnRzIChlLmcuLCBjaGFuZ2luZyBQQUdFRkxBRyB0byBGT0xJT19GTEFHIGZvciAmIzM5O3JlY2xhaW0mIzM5OywgcmVuYW1pbmcgX19zd2FwX3dyaXRlcGFnZSB0byBfX3N3YXBfd3JpdGVvdXQsIGFuZCBvcHRpbWl6aW5nIGEgbG9vcCBpbiBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyIHRvIGF2b2lkIHJlZHVuZGFudCBwYWdlL2ZvbGlvIGNvbnZlcnNpb25zKS4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcgYW5kIGNsZWFudXAgZWZmb3J0LiBJdCByZXBsYWNlcyBwYWdlLWJhc2VkIGZ1bmN0aW9ucyBhbmQgZmxhZ3Mgd2l0aCB0aGVpciBmb2xpby1iYXNlZCBlcXVpdmFsZW50cyAoZS5nLiwgY2hhbmdpbmcgUEFHRUZMQUcgdG8gRk9MSU9fRkxBRyBmb3IgJiMzOTtyZWNsYWltJiMzOTssIHJlbmFtaW5nIF9fc3dhcF93cml0ZXBhZ2UgdG8gX19zd2FwX3dyaXRlb3V0LCBhbmQgb3B0aW1pemluZyBhIGxvb3AgaW4gc3dhcF96ZXJvbWFwX2ZvbGlvX3NldC9jbGVhciB0byBhdm9pZCByZWR1bmRhbnQgcGFnZS9mb2xpbyBjb252ZXJzaW9ucykuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gZmxvdyBvciBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyNzo1Mi44MTk4NDM4NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQ2MTYyMDMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcgYW5kIGNsZWFudXAgZWZmb3J0LiBJdCByZXBsYWNlcyBwYWdlLWJhc2VkIGZ1bmN0aW9ucyBhbmQgZmxhZ3Mgd2l0aCB0aGVpciBmb2xpby1iYXNlZCBlcXVpdmFsZW50cyAoZS5nLiwgY2hhbmdpbmcgUEFHRUZMQUcgdG8gRk9MSU9fRkxBRyBmb3IgJ3JlY2xhaW0nLCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCwgYW5kIG9wdGltaXppbmcgYSBsb29wIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIgdG8gYXZvaWQgcmVkdW5kYW50IHBhZ2UvZm9saW8gY29udmVyc2lvbnMpLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBleGVjdXRpb24gZmxvdyBvciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI3OjUyLjgxOTg1MDQ3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4MTM4NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTI5MDZmMTVmZjI3ZTQ3NWYyMWRiNWQ4MjlkNzlhYzRiYTViNzc4NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDAyOjI3OjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcXG5pbmRleCA3YTg2MzU3MmFkY2U3Li40Y2M4M2Y0MWVmMDk0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcXG5AQCAtNTkzLDggKzU5Myw4IEBAIFRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClcXG4gRk9MSU9fRkxBRyhtYXBwZWR0b2Rpc2ssIEZPTElPX0hFQURfUEFHRSlcXG4gXFxuIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqL1xcbi1QQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKVxcbi1cXHRURVNUQ0xFQVJGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpXFxuK0ZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxcbitcXHRGT0xJT19URVNUX0NMRUFSX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxcbiBGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiBcXHRGT0xJT19URVNUX0NMRUFSX0ZMQUcocmVhZGFoZWFkLCBGT0xJT19IRUFEX1BBR0UpXFxuIFxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lvLmMgYi9tbS9wYWdlX2lvLmNcXG5pbmRleCBlNGZhN2ZmZmZlOGJiLi5lMmEyNjk0MjVhYzVlIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfaW8uY1xcbisrKyBiL21tL3BhZ2VfaW8uY1xcbkBAIC0xNTksNyArMTU5LDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gXFx0aW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiBcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbi1cXHRzd3BfZW50cnlfdCBlbnRyeTtcXG4rXFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xcbkBAIC0xNjcsOCArMTY3LDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXG4gXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XFxuLVxcdFxcdGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTtcXG4gXFx0XFx0X19zd2FwX3RhYmxlX3NldF96ZXJvKGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpKTtcXG4rXFx0XFx0ZW50cnkudmFsKys7XFxuIFxcdH1cXG4gXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIFxcbkBAIC0xODIsNyArMTgyLDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbi1cXHRzd3BfZW50cnlfdCBlbnRyeTtcXG4rXFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xcbkBAIC0xOTAsOCArMTkwLDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcbiBcXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcXG4tXFx0XFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xcbiBcXHRcXHRfX3N3YXBfdGFibGVfY2xlYXJfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7XFxuK1xcdFxcdGVudHJ5LnZhbCsrO1xcbiBcXHR9XFxuIFxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcbiB9XFxuQEAgLTIwOCw3ICsyMDgsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQXJjaCBjb2RlIG1heSBoYXZlIHRvIHByZXNlcnZlIG1vcmUgZGF0YSB0aGFuIGp1c3QgdGhlIHBhZ2VcXG4rXFx0ICogQXJjaCBjb2RlIG1heSBoYXZlIHRvIHByZXNlcnZlIG1vcmUgZGF0YSB0aGFuIGp1c3QgdGhlIGZvbGlvXFxuIFxcdCAqIGNvbnRlbnRzLCBlLmcuIG1lbW9yeSB0YWdzLlxcbiBcXHQgKi9cXG4gXFx0cmV0ID0gYXJjaF9wcmVwYXJlX3RvX3N3YXAoZm9saW8pO1xcbkBAIC0yMTksNyArMjE5LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBVc2UgdGhlIHN3YXAgdGFibGUgemVybyBtYXJrIHRvIGF2b2lkIGRvaW5nIElPIGZvciB6ZXJvLWZpbGxlZFxcbi1cXHQgKiBwYWdlcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXNcXG4rXFx0ICogZm9saW9zLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpc1xcbiBcXHQgKiBhY3F1aXJlZCBpbnRlcm5hbGx5IGJ5IHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIuXFxuIFxcdCAqL1xcbiBcXHRpZiAoaXNfZm9saW9femVyb19maWxsZWQoZm9saW8pKSB7XFxuQEAgLTI0Nyw3ICsyNDcsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0fVxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuLVxcdF9fc3dhcF93cml0ZXBhZ2UoY3R4LCBmb2xpbyk7XFxuK1xcdF9fc3dhcF93cml0ZW91dChjdHgsIGZvbGlvKTtcXG4gXFx0cmV0dXJuIDA7XFxuIG91dF91bmxvY2s6XFxuIFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuQEAgLTI3Niw3ICsyNzYsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXFxuIFxcdHJldHVybiBjYW5fbWVyZ2U7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcXG4gXFxuQEAgLTI5Nyw3ICsyOTcsOSBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4tI2RlZmluZSBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pXFx0XFx0ZG8geyB9IHdoaWxlICgwKVxcbitzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rfVxcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHIFxcdTAwMjZcXHUwMDI2IENPTkZJR19CTEtfQ0dST1VQICovXFxuIFxcbiBzdHJ1Y3Qgc3dhcF9pb2NiIHtcXG5AQCAtMzY2LDcgKzM2OCw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcncpXFxuIFxcdH1cXG4gfVxcbiBcXG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xcbiBcXG5AQCAtNDk2LDEzICs0OTgsMTMgQEAgc3RhdGljIHZvaWQgc3dhcF93cml0ZV9lbmQoc3RydWN0IHN3YXBfaW9jYiAqc2lvLCBib29sIGZhaWxlZClcXG4gXFx0aW50IHA7XFxuIFxcbiBcXHRmb3IgKHAgPSAwOyBwIFxcdTAwM2Mgc2lvLVxcdTAwM2Vucl9idmVjczsgcCsrKSB7XFxuLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gc2lvLVxcdTAwM2VidmVjc1twXS5idl9wYWdlO1xcbitcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbyhcXHUwMDI2c2lvLVxcdTAwM2VidmVjc1twXSk7XFxuIFxcbiBcXHRcXHRpZiAoZmFpbGVkKSB7XFxuLVxcdFxcdFxcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbi1cXHRcXHRcXHRDbGVhclBhZ2VSZWNsYWltKHBhZ2UpO1xcbitcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0ZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpO1xcbitcXHRcXHRmb2xpb19lbmRfd3JpdGViYWNrKGZvbGlvKTtcXG4gXFx0fVxcbiBcXHRtZW1wb29sX2ZyZWUoc2lvLCBzaW9fcG9vbCk7XFxuIH1cXG5AQCAtNTEzLDE2ICs1MTUsMTYgQEAgc3RhdGljIHZvaWQgc3dhcF9mc193cml0ZV9jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxcbiBcXHRib29sIGZhaWxlZCA9IHJldCAhPSBzaW8tXFx1MDAzZWxlbjtcXG4gXFxuIFxcdGlmIChmYWlsZWQpIHtcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXFx1MDAzZWJ2ZWNzWzBdLmJ2X3BhZ2U7XFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFxcdTAwMjZzaW8tXFx1MDAzZWJ2ZWNzWzBdKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEluIHRoZSBjYXNlIG9mIHN3YXAtb3Zlci1uZnMsIHRoaXMgY2FuIGJlIGEgdGVtcG9yYXJ5IGZhaWx1cmVcXG4gXFx0XFx0ICogaWYgdGhlIHN5c3RlbSBoYXMgbGltaXRlZCBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgdHJhbnNtaXRcXG4tXFx0XFx0ICogYnVmZmVycy4gIE1hcmsgdGhlIHBhZ2UgZGlydHkgYW5kIGF2b2lkXFxuK1xcdFxcdCAqIGJ1ZmZlcnMuICBNYXJrIHRoZSBmb2xpbyBkaXJ0eSBhbmQgYXZvaWRcXG4gXFx0XFx0ICogZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlIGJ1dCByYXRlLWxpbWl0IHRoZSBtZXNzYWdlcy5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdHByX2Vycl9yYXRlbGltaXRlZChcXFwiV3JpdGUgZXJyb3IgJWxkIG9uIGRpbyBzd2FwZmlsZSAoJWxsdSlcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgIHJldCwgc3dhcF9kZXZfcG9zKHBhZ2Vfc3dhcF9lbnRyeShwYWdlKSkpO1xcbitcXHRcXHRcXHRcXHQgICByZXQsIHN3YXBfZGV2X3Bvcyhmb2xpby1cXHUwMDNlc3dhcCkpO1xcbiBcXHR9XFxuIFxcbiBcXHRzd2FwX3dyaXRlX2VuZChzaW8sIGZhaWxlZCk7XFxuQEAgLTU5NSw3ICs1OTcsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2JkZXZfc3VibWl0X3dyaXRlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KVxcbiBcXHRcXHRcXHRSRVFfT1BfV1JJVEUgfCBSRVFfU1dBUCk7XFxuIFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplID0gc2lvLVxcdTAwM2VsZW47XFxuIFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBzd2FwX2ZvbGlvX3NlY3RvcihiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xcbi1cXHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcXG4rXFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xcbiBcXG4gXFx0aWYgKGN0eC1cXHUwMDNlc2lzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTykge1xcbiBcXHRcXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXFxuaW5kZXggZWM1ODBjNzEzMjA0Mi4uYzNmZjkxMzJkZTVlMCAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwLmhcXG4rKysgYi9tbS9zd2FwLmhcXG5AQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgc3dhcF9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gdm9pZCBzd2FwX3JlYWRfc3VibWl0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTtcXG4gdm9pZCBzd2FwX3dyaXRlX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XFxuIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rdm9pZCBfX3N3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBcXG4gLyogbGludXgvbW0vc3dhcF9zdGF0ZS5jICovXFxuIGV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZSBzd2FwX3NwYWNlIF9fcmVhZF9tb3N0bHk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXFxuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uMmZmNmRlMGE4YzM2YSAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwZmlsZS5jXFxuKysrIGIvbW0vc3dhcGZpbGUuY1xcbkBAIC0yOTgyLDcgKzI5ODIsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfc3dhcF9leHRlbnQpO1xcbiAvKlxcbiAgKiBBIGBzd2FwIGV4dGVudCcgaXMgYSBzaW1wbGUgdGhpbmcgd2hpY2ggbWFwcyBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgcGFnZXNcXG4gICogb250byBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgZGlzayBibG9ja3MuICBBIHJidHJlZSBvZiBzd2FwIGV4dGVudHMgaXNcXG4tICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlcGFnZS9zd2FwX3JlYWRfZm9saW9cXG4rICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlb3V0L3N3YXBfcmVhZF9mb2xpb1xcbiAgKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLlxcbiAgKlxcbiAgKiBJZiB0aGUgc3dhcGZpbGUgaXMgYW4gU19JU0JMSyBibG9jayBkZXZpY2UsIGEgc2luZ2xlIGV4dGVudCBpcyBpbnN0YWxsZWQuXFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggZjdjOWM4OWY2NDQ5Yy4uMzhjYjZhODMxOGE1NCAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHRmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7XFxuIFxcbiBcXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cXG4tXFx0X19zd2FwX3dyaXRlcGFnZShcXHUwMDI2Y3R4LCBmb2xpbyk7XFxuK1xcdF9fc3dhcF93cml0ZW91dChcXHUwMDI2Y3R4LCBmb2xpbyk7XFxuIFxcdHN3YXBfd3JpdGVfc3VibWl0KFxcdTAwMjZjdHgpO1xcbiBcXG4gb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyNzo1My4yNDg2OTM2MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NjAzMjc2NTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcgYW5kIGNsZWFudXAgZWZmb3J0LiBJdCByZXBsYWNlcyBwYWdlLWJhc2VkIGZ1bmN0aW9ucyBhbmQgZmxhZ3Mgd2l0aCB0aGVpciBmb2xpby1iYXNlZCBlcXVpdmFsZW50cyAoZS5nLiwgY2hhbmdpbmcgUEFHRUZMQUcgdG8gRk9MSU9fRkxBRyBmb3IgJ3JlY2xhaW0nLCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCwgYW5kIG9wdGltaXppbmcgYSBsb29wIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIgdG8gYXZvaWQgcmVkdW5kYW50IHBhZ2UvZm9saW8gY29udmVyc2lvbnMpLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBleGVjdXRpb24gZmxvdyBvciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUyOTA2ZjE1ZmYyN2U0NzVmMjFkYjVkODI5ZDc5YWM0YmE1Yjc3ODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDAyOjI3OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uNGNjODNmNDFlZjA5NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTU5Myw4ICs1OTMsOCBAQCBURVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpXG4gRk9MSU9fRkxBRyhtYXBwZWR0b2Rpc2ssIEZPTElPX0hFQURfUEFHRSlcbiBcbiAvKiBQR19yZWFkYWhlYWQgaXMgb25seSB1c2VkIGZvciByZWFkczsgUEdfcmVjbGFpbSBpcyBvbmx5IGZvciB3cml0ZXMgKi9cbi1QQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKVxuLVx0VEVTVENMRUFSRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKVxuK0ZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxuK1x0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlcbiBGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuIFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uY1xuaW5kZXggZTRmYTdmZmZmZThiYi4uZTJhMjY5NDI1YWM1ZSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfaW8uY1xuKysrIGIvbW0vcGFnZV9pby5jXG5AQCAtMTU5LDcgKzE1OSw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIFx0aW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbi1cdHN3cF9lbnRyeV90IGVudHJ5O1xuK1x0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuQEAgLTE2Nyw4ICsxNjcsOCBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcbi1cdFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0X3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpO1xuK1x0XHRlbnRyeS52YWwrKztcbiBcdH1cbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuQEAgLTE4Miw3ICsxODIsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbi1cdHN3cF9lbnRyeV90IGVudHJ5O1xuK1x0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuQEAgLTE5MCw4ICsxOTAsOCBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkrKykge1xuLVx0XHRlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7XG4gXHRcdF9fc3dhcF90YWJsZV9jbGVhcl96ZXJvKGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpKTtcbitcdFx0ZW50cnkudmFsKys7XG4gXHR9XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiB9XG5AQCAtMjA4LDcgKzIwOCw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKlxuLVx0ICogQXJjaCBjb2RlIG1heSBoYXZlIHRvIHByZXNlcnZlIG1vcmUgZGF0YSB0aGFuIGp1c3QgdGhlIHBhZ2VcbitcdCAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBmb2xpb1xuIFx0ICogY29udGVudHMsIGUuZy4gbWVtb3J5IHRhZ3MuXG4gXHQgKi9cbiBcdHJldCA9IGFyY2hfcHJlcGFyZV90b19zd2FwKGZvbGlvKTtcbkBAIC0yMTksNyArMjE5LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHQvKlxuIFx0ICogVXNlIHRoZSBzd2FwIHRhYmxlIHplcm8gbWFyayB0byBhdm9pZCBkb2luZyBJTyBmb3IgemVyby1maWxsZWRcbi1cdCAqIHBhZ2VzLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpc1xuK1x0ICogZm9saW9zLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpc1xuIFx0ICogYWNxdWlyZWQgaW50ZXJuYWxseSBieSBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyLlxuIFx0ICovXG4gXHRpZiAoaXNfZm9saW9femVyb19maWxsZWQoZm9saW8pKSB7XG5AQCAtMjQ3LDcgKzI0Nyw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0fVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tXHRfX3N3YXBfd3JpdGVwYWdlKGN0eCwgZm9saW8pO1xuK1x0X19zd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pO1xuIFx0cmV0dXJuIDA7XG4gb3V0X3VubG9jazpcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG5AQCAtMjc2LDcgKzI3Niw3IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiBcdHJldHVybiBjYW5fbWVyZ2U7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzO1xuIFxuQEAgLTI5Nyw3ICsyOTcsOSBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4ge1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuLSNkZWZpbmUgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShiaW8sIGZvbGlvKVx0XHRkbyB7IH0gd2hpbGUgKDApXG4rc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbit9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyBcdTAwMjZcdTAwMjYgQ09ORklHX0JMS19DR1JPVVAgKi9cbiBcbiBzdHJ1Y3Qgc3dhcF9pb2NiIHtcbkBAIC0zNjYsNyArMzY4LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9hZGRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBydylcbiBcdH1cbiB9XG4gXG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXG5AQCAtNDk2LDEzICs0OTgsMTMgQEAgc3RhdGljIHZvaWQgc3dhcF93cml0ZV9lbmQoc3RydWN0IHN3YXBfaW9jYiAqc2lvLCBib29sIGZhaWxlZClcbiBcdGludCBwO1xuIFxuIFx0Zm9yIChwID0gMDsgcCBcdTAwM2Mgc2lvLVx1MDAzZW5yX2J2ZWNzOyBwKyspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbcF0uYnZfcGFnZTtcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzW3BdKTtcbiBcbiBcdFx0aWYgKGZhaWxlZCkge1xuLVx0XHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuLVx0XHRcdENsZWFyUGFnZVJlY2xhaW0ocGFnZSk7XG4rXHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4gXHRcdH1cbi1cdFx0ZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpO1xuK1x0XHRmb2xpb19lbmRfd3JpdGViYWNrKGZvbGlvKTtcbiBcdH1cbiBcdG1lbXBvb2xfZnJlZShzaW8sIHNpb19wb29sKTtcbiB9XG5AQCAtNTEzLDE2ICs1MTUsMTYgQEAgc3RhdGljIHZvaWQgc3dhcF9mc193cml0ZV9jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxuIFx0Ym9vbCBmYWlsZWQgPSByZXQgIT0gc2lvLVx1MDAzZWxlbjtcbiBcbiBcdGlmIChmYWlsZWQpIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbMF0uYnZfcGFnZTtcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzWzBdKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogSW4gdGhlIGNhc2Ugb2Ygc3dhcC1vdmVyLW5mcywgdGhpcyBjYW4gYmUgYSB0ZW1wb3JhcnkgZmFpbHVyZVxuIFx0XHQgKiBpZiB0aGUgc3lzdGVtIGhhcyBsaW1pdGVkIG1lbW9yeSBmb3IgYWxsb2NhdGluZyB0cmFuc21pdFxuLVx0XHQgKiBidWZmZXJzLiAgTWFyayB0aGUgcGFnZSBkaXJ0eSBhbmQgYXZvaWRcbitcdFx0ICogYnVmZmVycy4gIE1hcmsgdGhlIGZvbGlvIGRpcnR5IGFuZCBhdm9pZFxuIFx0XHQgKiBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUgYnV0IHJhdGUtbGltaXQgdGhlIG1lc3NhZ2VzLlxuIFx0XHQgKi9cbiBcdFx0cHJfZXJyX3JhdGVsaW1pdGVkKFwiV3JpdGUgZXJyb3IgJWxkIG9uIGRpbyBzd2FwZmlsZSAoJWxsdSlcXG5cIixcbi1cdFx0XHRcdCAgIHJldCwgc3dhcF9kZXZfcG9zKHBhZ2Vfc3dhcF9lbnRyeShwYWdlKSkpO1xuK1x0XHRcdFx0ICAgcmV0LCBzd2FwX2Rldl9wb3MoZm9saW8tXHUwMDNlc3dhcCkpO1xuIFx0fVxuIFxuIFx0c3dhcF93cml0ZV9lbmQoc2lvLCBmYWlsZWQpO1xuQEAgLTU5NSw3ICs1OTcsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2JkZXZfc3VibWl0X3dyaXRlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KVxuIFx0XHRcdFJFUV9PUF9XUklURSB8IFJFUV9TV0FQKTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgPSBzaW8tXHUwMDNlbGVuO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbi1cdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuK1x0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VzaXMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTykge1xuIFx0XHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IGVjNTgwYzcxMzIwNDIuLmMzZmY5MTMyZGU1ZTAgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTI3OSw3ICsyNzksNyBAQCB2b2lkIHN3YXBfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gdm9pZCBzd2FwX3JlYWRfc3VibWl0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTtcbiB2b2lkIHN3YXBfd3JpdGVfc3VibWl0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTtcbiBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gLyogbGludXgvbW0vc3dhcF9zdGF0ZS5jICovXG4gZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHN3YXBfc3BhY2UgX19yZWFkX21vc3RseTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uMmZmNmRlMGE4YzM2YSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0yOTgyLDcgKzI5ODIsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfc3dhcF9leHRlbnQpO1xuIC8qXG4gICogQSBgc3dhcCBleHRlbnQnIGlzIGEgc2ltcGxlIHRoaW5nIHdoaWNoIG1hcHMgYSBjb250aWd1b3VzIHJhbmdlIG9mIHBhZ2VzXG4gICogb250byBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgZGlzayBibG9ja3MuICBBIHJidHJlZSBvZiBzd2FwIGV4dGVudHMgaXNcbi0gKiBidWlsdCBhdCBzd2Fwb24gdGltZSBhbmQgaXMgdGhlbiB1c2VkIGF0IHN3YXBfd3JpdGVwYWdlL3N3YXBfcmVhZF9mb2xpb1xuKyAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZW91dC9zd2FwX3JlYWRfZm9saW9cbiAgKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLlxuICAqXG4gICogSWYgdGhlIHN3YXBmaWxlIGlzIGFuIFNfSVNCTEsgYmxvY2sgZGV2aWNlLCBhIHNpbmdsZSBleHRlbnQgaXMgaW5zdGFsbGVkLlxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBmN2M5Yzg5ZjY0NDljLi4zOGNiNmE4MzE4YTU0IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTEwNTAsNyArMTA1MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7XG4gXG4gXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cbi1cdF9fc3dhcF93cml0ZXBhZ2UoXHUwMDI2Y3R4LCBmb2xpbyk7XG4rXHRfX3N3YXBfd3JpdGVvdXQoXHUwMDI2Y3R4LCBmb2xpbyk7XG4gXHRzd2FwX3dyaXRlX3N1Ym1pdChcdTAwMjZjdHgpO1xuIFxuIG91dDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI3OjUzLjI0ODY5NTAxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjkxNDU4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRm9saW8tUmVsYXRlZCBTd2FwIEVudHJ5IENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0J3MgcmVuYW1pbmcgc29tZSBmbGFncywgY2xlYW5pbmcgdXAgc29tZSBjb2RlIGFyb3VuZCBmb2xpb3MgaW4gYG1tL3BhZ2VfaW8uY2AgYW5kIGBtbS96c3dhcC5jYCwgbm90aGluZyB0b28gZXhjaXRpbmcgdGhlcmUuIEJ1dCwgd2FpdCwgSSBzZWUgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldGAgYW5kIGBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXJgLiBUaGV5J3ZlIGNoYW5nZWQgaG93IHRoZSBgc3dwX2VudHJ5X3QgZW50cnlgIGlzIGhhbmRsZWQuIEJlZm9yZSwgaXQgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgY1xuLVx0c3dwX2VudHJ5X3QgZW50cnk7XG4rXHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4uLi5cbi1cdFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0X3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpO1xuK1x0XHRlbnRyeS52YWwrKztcbmBgYFxuXG5UaGV5J3JlIG5vdyBpbml0aWFsaXppbmcgYGVudHJ5YCB3aXRoIGBmb2xpby1cdTAwM2Vzd2FwYCBhbmQgaW5jcmVtZW50aW5nIGl0IGluIHRoZSBsb29wIHdpdGggYGVudHJ5LnZhbCsrYCwgaW5zdGVhZCBvZiBnZXR0aW5nIHRoZSBgZW50cnlgIHdpdGggYSBjYWxsIHRvIGBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpYC4gSXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCBoYXMgdGhlIHBvdGVudGlhbCB0byBiZSBhIHNpZ25pZmljYW50IG9uZSBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuXG5cbkxldCdzIGxvb2sgYXQgYHBhZ2Vfc3dhcF9lbnRyeWAgdG8gc2VlIHdoYXQgaXQgZG9lcy5cblxuYGBgY1xuc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBwYWdlX3N3YXBfZW50cnkoc3RydWN0IHBhZ2UgKnBhZ2UpXG57XG5cdHN0cnVjdCBzd3BfZW50cnlfdCBlbnRyeTtcblx0ZW50cnkudmFsID0gcGFnZV9wcml2YXRlKHBhZ2UpO1xuXHRyZXR1cm4gZW50cnk7XG59XG5gYGBcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgcGFnZV9zd2FwX2VudHJ5YCBqdXN0IGdldHMgdGhlIGBwYWdlX3ByaXZhdGUocGFnZSlgIGFuZCBzZXRzIGl0IGludG8gdGhlIGBlbnRyeS52YWxgIGZpZWxkLiBGb3IgYSBmb2xpbywgaXNuJ3QgYGZvbGlvLVx1MDAzZXN3YXBgIHRoZSBzd2FwIGVudHJ5IGZvciB0aGUgZmlyc3QgcGFnZT9cblxuSWYgdGhpcyBpcyBhIGxhcmdlIGZvbGlvLCBkb2VzIGBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpYCByZXR1cm4gYGZvbGlvLVx1MDAzZXN3YXAudmFsICsgaWA/IExldCdzIGFzc3VtZSB0aGF0IGxhcmdlIGZvbGlvcyBhcmUgdXN1YWxseSBhc3NpZ25lZCBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2Ygc3dhcCBlbnRyaWVzLiBJbiB0aGlzIGNhc2UsIGluY3JlbWVudGluZyBgZW50cnkudmFsKytgIHNob3VsZCBiZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgc2luY2UgYGZvbGlvLVx1MDAzZXN3YXBgIHdvdWxkIHBvaW50IHRvIHRoZSBmaXJzdCBlbnRyeSBhbmQgc3VjY2Vzc2l2ZSBwYWdlcyB3aXRoaW4gdGhlIGZvbGlvIHNob3VsZCBoYXZlIHN3YXAgZW50cmllcyB3aXRoIGluY3JlbWVudGluZyB2YWx1ZXMuXG5cbkhvd2V2ZXIsIHRoZSBwcm9ibGVtIGlzIHRoYXQgYHBhZ2VfcHJpdmF0ZShwYWdlKWAgZm9yIHRhaWwgcGFnZXMgbWlnaHQgKm5vdCogYmUgc2V0IHRvIHRoZSBzd2FwIGVudHJ5ISBJIG5lZWQgdG8gY2hlY2sgaWYgYHBhZ2VfcHJpdmF0ZWAgaXMgc2V0IGNvcnJlY3RseSBmb3IgdGFpbCBwYWdlcyBpbiB0aGUgc3dhcCBjYWNoZS4gSSdtIGdvaW5nIHRvIGdyZXAgZm9yIGBwYWdlX3N3YXBfZW50cnlgIGFuZCBgZm9saW8tXHUwMDNlc3dhcGAgaW4gdGhlIGNvZGUgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIHNhZmUuIEknbGwgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgYW55IGNvZGUgdGhhdCBhc3N1bWVzIGBwYWdlX3ByaXZhdGVgIGlzIGNvcnJlY3RseSBzZXQgZm9yIHRoZXNlIHRhaWwgcGFnZXMsIGJlY2F1c2UgaWYgdGhlcmUgaXMsIHRoaXMgY2hhbmdlIGNvdWxkIGJyZWFrIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzYwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MDEuMzE3ODQyODA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTA2MTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2Vfc3dhcF9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTIxNDI9c3RhdGljIGJvb2wgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMTQ3LVxcdFxcdFxcdFxcdCAgICBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcXG5tbS9ybWFwLmM6MjE0ODpcXHRzd3BfZW50cnlfdCBlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShwYWdlKTtcXG5tbS9ybWFwLmMtMjE0OS1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cXHUwMDNldm1fbW07XFxuLS1cXG5tbS96c3dhcC5jPTEzOTg9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3pzd2FwLmMtMTQwMS17XFxubW0venN3YXAuYzoxNDAyOlxcdHN3cF9lbnRyeV90IHBhZ2Vfc3dwZW50cnkgPSBwYWdlX3N3YXBfZW50cnkocGFnZSk7XFxubW0venN3YXAuYy0xNDAzLVxcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksICpvbGQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjAxLjM3Mjc1NDg0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Njg5MjMzMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBMaW51eCBTd2FwIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBzd2FwIG1lY2hhbmlzbSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBwYWdlX3N3YXBfZW50cnlgIGlzIGRlZmluZWQuIEkndmUgYmVlbiB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaXQncyBsZWFkaW5nIG1lIGludG8gdGhlIGtlcm5lbCBoZWFkZXJzLiBOb3csIGxldCdzIHNlZS4uLiBXYWl0IGEgbWludXRlLCBJIHJlbWVtYmVyIG5vdyEgYHBhZ2Vfc3dhcF9lbnRyeWAgaXMgYWN0dWFsbHkgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHN3YXAtcmVsYXRlZCBzdHJ1Y3R1cmVzIHdvdWxkIG5hdHVyYWxseSByZXNpZGUgdGhlcmUuIEdvdCBpdC4gTm93IEkgY2FuIG1vdmUgZm9yd2FyZCB3aXRoIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gVGhpcyBzaG91bGQgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHBhZ2Ugc3dhcHBpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODowNC4zNDE2ODAzODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NzA5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9zd2FwX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oPTI0Mj1zdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0yODAtXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6MjgxOnN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgcGFnZV9zd2FwX2VudHJ5KHN0cnVjdCBwYWdlICpwYWdlKVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTI4Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjA0LjM4NzM1NTA5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzg1MDQxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgcGFnZV9zd2FwX2VudHJ5YCBEZWZpbml0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHBhZ2Vfc3dhcF9lbnRyeWAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlLCBob3cgaXQncyBkZWZpbmVkIGFuZCB1c2VkIGluIHJlbGF0aW9uIHRvIHRoZSBjdXJyZW50IHN5c3RlbSdzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHByb2JhYmx5IG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywgYW5kIHBlcmhhcHMgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgcGFnaW5nIG9yIHN3YXAgc3BhY2UgbWFuYWdlbWVudCBtb2R1bGVzLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBrZXkgZmllbGRzLiBJJ2xsIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgZGF0YSBpdCdzIHN0b3Jpbmcg4oCTIGxpa2UgdGhlIHBoeXNpY2FsIHBhZ2UgbnVtYmVyLCBpdHMgc3RhdHVzIChwcmVzZW50LCBzd2FwcGVkIG91dCwgZXRjLiksIGFuZCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YSwgbWF5YmUgYSByZWZlcmVuY2UgY291bnQuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIG92ZXJhbGwgZGVzaWduLiBEb2VzIGl0IGltcGxlbWVudCBhIHNwZWNpZmljIHBhZ2UgcmVwbGFjZW1lbnQgYWxnb3JpdGhtPyBJcyBpdCB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIHN3YXAgc3BhY2Ugb3JnYW5pemF0aW9uPyBUaGUgZGV0YWlscyBhcmUgY3J1Y2lhbCBoZXJlIOKAkyBldmVyeSBiaXQgaW4gdGhhdCBzdHJ1Y3R1cmUgaGFzIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5LiBVbHRpbWF0ZWx5IEknbSBhc3Nlc3NpbmcgdG8gc2VlIGlmIG15IGV4aXN0aW5nIGtub3dsZWRnZSBhbGlnbnMgd2l0aCB0aGlzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MjIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODowNy43MjU4NjIzMjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjgwOlxcdFxcbiAyODE6XFx0c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBwYWdlX3N3YXBfZW50cnkoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIDI4MjpcXHR7XFxuIDI4MzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4gMjg0OlxcdFxcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdGVudHJ5LnZhbCArPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSk7XFxuIDI4NzpcXHRcXHRyZXR1cm4gZW50cnk7XFxuIDI4ODpcXHR9XFxuIDI4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MDcuNzI2MDI0NjgzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU3OTY4Mzc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXAgV3JpdGUgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gYHBhZ2Vfc3dhcF9lbnRyeWAgZG9lcyBwcmVjaXNlbHkgd2hhdCBJIGV4cGVjdGVkIHdpdGggYGZvbGlvLVx1MDAzZXN3YXAudmFsICs9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKWAuIEVzc2VudGlhbGx5LCBpbmNyZW1lbnRpbmcgYGVudHJ5LnZhbCsrYCB3aXRoaW4gYSBsb29wIHRoYXQgaXRlcmF0ZXMgZnJvbSBgMGAgdG8gYGZvbGlvX25yX3BhZ2VzKGZvbGlvKWAgc2hvdWxkIGFjaGlldmUgdGhlIGV4YWN0IHNhbWUgcmVzdWx0LiBJdCdzIGEgdmFsaWQgb3B0aW1pemF0aW9uIVxuXG5IbW0sIGJ1dCB3aGF0IGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYENsZWFyUGFnZVJlY2xhaW0ocGFnZSlgIGFuZCBgZm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbylgPyBgQ2xlYXJQYWdlUmVjbGFpbShwYWdlKWAgb3BlcmF0ZXMgb24gYSBzcGVjaWZpYyBwYWdlLCB3aGlsZSBgZm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbylgIHRhcmdldHMgdGhlIGVudGlyZSBmb2xpbywgc3BlY2lmaWNhbGx5IHRoZSBoZWFkIHBhZ2UuXG5cbkkgc2VlIHRoZSByZWNlbnQgY2hhbmdlIGluIGBzd2FwX3dyaXRlX2VuZGA6IHRoZSBjb2RlIHNoaWZ0ZWQgZnJvbSBgc3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbcF0uYnZfcGFnZTtgIHRvIGBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbyhcdTAwMjZzaW8tXHUwMDNlYnZlY3NbcF0pO2AuIENvbnNlcXVlbnRseSwgYENsZWFyUGFnZVJlY2xhaW0ocGFnZSlgIHdhcyByZXBsYWNlZCB3aXRoIGBmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKWAuXG5cbk5vdywgdGhlIGNydWNpYWwgcG9pbnQ6IGBSZWNsYWltYCB3YXMgZGVmaW5lZCBhcyBgUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClgLiBBbmQgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhpcyBmbGFnIHdvdWxkIG9ubHkgYmUgc2V0IG9uIHRoZSBoZWFkIHBhZ2UhIExldCdzIHZlcmlmeSB0aGlzIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAuIEFoLCB5ZXM6XG5cbmBgYGNcbi1QQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKVxuLVx0VEVTVENMRUFSRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKVxuK0ZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxuK1x0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlcbmBgYFxuXG5UaGUgZGVmaW5pdGlvbiBlbmZvcmNlcyB0aGF0IHRoaXMgZmxhZyBpcyBzZXQgb24gdGhlIGhlYWQgcGFnZS4gSWYgY2FsbGVkIG9uIGEgdGFpbCBwYWdlLCB0aGVyZSB3b3VsZCBiZSBhIGBWTV9CVUdfT05gLlxuXG5UaGVyZWZvcmUsIHRoZSBvcmlnaW5hbCBgQ2xlYXJQYWdlUmVjbGFpbShwYWdlKWAgKm11c3QqIGhhdmUgYmVlbiBjYWxsZWQgb24gYSBoZWFkIHBhZ2UsIG90aGVyd2lzZSwgaXQgd291bGQgaGF2ZSByZXN1bHRlZCBpbiBhIGNyYXNoISBUaGUgY2hhbmdlIGlzIHZhbGlkIGJlY2F1c2UgdGhlIGZsYWcncyBzY29wZSBtYXRjaGVzIHRoZSBmdW5jdGlvbidzIHNjb3BlLlxuXG5XYWl0IGEgbWludXRlLi4uIGNvdWxkIGBzaW8tXHUwMDNlYnZlY3NbcF0uYnZfcGFnZWAgYWN0dWFsbHkgcG9pbnQgdG8gYSB0YWlsIHBhZ2UgaWYgdGhlIGJpbyB2ZWN0b3IgZG9lcyBpbmRlZWQgcG9pbnQgdG8gYSB0YWlsIHBhZ2U/IFRoYXQncyB0aGUgb25lIHRoaW5nIHRoYXQgY291bGQgZGlzcnVwdCB0aGlzIGxvZ2ljLiBCdXQgYHN3YXBfd3JpdGVfZW5kYCBpcyBpbnZva2VkIGFmdGVyIHRoZSBzd2FwIHdyaXRlIGNvbXBsZXRlcywgYW5kIEknZCBiZSB2ZXJ5IHN1cnByaXNlZCBpZiBhbnkgYmlvIHZlY3RvciBldmVyIHBvaW50cyB0byBhIHRhaWwgcGFnZSBmb3IgdGhhdCBvcGVyYXRpb24uIExldCdzIGNoZWNrIGhvdyBgc2lvLVx1MDAzZWJ2ZWNzYCBhcmUgcG9wdWxhdGVkIHRvIG1ha2Ugc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjE1LjMwNTcxMTAwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxNDU4MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNpby1cXHUwMDNlYnZlY3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfaW8uYz0zMjk9c3RhdGljIGJvb2wgc3dhcF9jYW5fbWVyZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9wYWdlX2lvLmMtMzMyLVxcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhmb2xpby1cXHUwMDNlc3dhcCk7XFxubW0vcGFnZV9pby5jOjMzMzpcXHRzdHJ1Y3QgYmlvX3ZlYyAqbGFzdF9idiA9IFxcdTAwMjZjdHgtXFx1MDAzZXNpby1cXHUwMDNlYnZlY3NbY3R4LVxcdTAwM2VzaW8tXFx1MDAzZW5yX2J2ZWNzIC0gMV07XFxubW0vcGFnZV9pby5jLTMzNC1cXHRzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8gPSBidmVjX2ZvbGlvKGxhc3RfYnYpO1xcbi0tXFxubW0vcGFnZV9pby5jPTM0Mj1zdGF0aWMgdm9pZCBzd2FwX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJ3KVxcbi0tXFxubW0vcGFnZV9pby5jLTM2MC1cXHR9XFxubW0vcGFnZV9pby5jOjM2MTpcXHRidmVjX3NldF9mb2xpbyhcXHUwMDI2c2lvLVxcdTAwM2VidmVjc1tzaW8tXFx1MDAzZW5yX2J2ZWNzXSwgZm9saW8sIGZvbGlvX3NpemUoZm9saW8pLCAwKTtcXG5tbS9wYWdlX2lvLmMtMzYyLVxcdHNpby1cXHUwMDNlbGVuICs9IGZvbGlvX3NpemUoZm9saW8pO1xcbm1tL3BhZ2VfaW8uYzozNjM6XFx0aWYgKCsrc2lvLVxcdTAwM2Vucl9idmVjcyA9PSBBUlJBWV9TSVpFKHNpby1cXHUwMDNlYnZlY3MpKSB7XFxubW0vcGFnZV9pby5jLTM2NC1cXHRcXHRpZiAocncgPT0gV1JJVEUpXFxuLS1cXG5tbS9wYWdlX2lvLmM9NDk2PXN0YXRpYyB2b2lkIHN3YXBfd3JpdGVfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpXFxuLS1cXG5tbS9wYWdlX2lvLmMtNTAwLVxcdGZvciAocCA9IDA7IHAgXFx1MDAzYyBzaW8tXFx1MDAzZW5yX2J2ZWNzOyBwKyspIHtcXG5tbS9wYWdlX2lvLmM6NTAxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFxcdTAwMjZzaW8tXFx1MDAzZWJ2ZWNzW3BdKTtcXG5tbS9wYWdlX2lvLmMtNTAyLVxcbi0tXFxubW0vcGFnZV9pby5jPTUxMj1zdGF0aWMgdm9pZCBzd2FwX2ZzX3dyaXRlX2NvbXBsZXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgbG9uZyByZXQpXFxuLS1cXG5tbS9wYWdlX2lvLmMtNTE3LVxcdGlmIChmYWlsZWQpIHtcXG5tbS9wYWdlX2lvLmM6NTE4OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFxcdTAwMjZzaW8tXFx1MDAzZWJ2ZWNzWzBdKTtcXG5tbS9wYWdlX2lvLmMtNTE5LVxcbi0tXFxubW0vcGFnZV9pby5jPTU0Nj1zdGF0aWMgdm9pZCBzd2FwX3JlYWRfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpXFxuLS1cXG5tbS9wYWdlX2lvLmMtNTUwLVxcdGZvciAocCA9IDA7IHAgXFx1MDAzYyBzaW8tXFx1MDAzZW5yX2J2ZWNzOyBwKyspIHtcXG5tbS9wYWdlX2lvLmM6NTUxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFxcdTAwMjZzaW8tXFx1MDAzZWJ2ZWNzW3BdKTtcXG5tbS9wYWdlX2lvLmMtNTUyLVxcbi0tXFxubW0vcGFnZV9pby5jPTU5MT1zdGF0aWMgdm9pZCBzd2FwX2JkZXZfc3VibWl0X3dyaXRlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KVxcbi0tXFxubW0vcGFnZV9pby5jLTU5NS1cXG5tbS9wYWdlX2lvLmM6NTk2OlxcdGJpb19pbml0KGJpbywgY3R4LVxcdTAwM2VzaXMtXFx1MDAzZWJkZXYsIHNpby1cXHUwMDNlYnZlY3MsIEFSUkFZX1NJWkUoc2lvLVxcdTAwM2VidmVjcyksXFxubW0vcGFnZV9pby5jLTU5Ny1cXHRcXHRcXHRSRVFfT1BfV1JJVEUgfCBSRVFfU1dBUCk7XFxuLS1cXG5tbS9wYWdlX2lvLmM9NjExPXN0YXRpYyB2b2lkIHN3YXBfYmRldl9zdWJtaXRfcmVhZChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eClcXG4tLVxcbm1tL3BhZ2VfaW8uYy02MTUtXFxubW0vcGFnZV9pby5jOjYxNjpcXHRiaW9faW5pdChiaW8sIGN0eC1cXHUwMDNlc2lzLVxcdTAwM2ViZGV2LCBzaW8tXFx1MDAzZWJ2ZWNzLCBBUlJBWV9TSVpFKHNpby1cXHUwMDNlYnZlY3MpLFxcbm1tL3BhZ2VfaW8uYy02MTctXFx0XFx0XFx0UkVRX09QX1JFQUQpO1xcbi0tXFxubW0vcGFnZV9pby5jPTY1ND1zdGF0aWMgdm9pZCBzd2FwX2ZzX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgaW50IHJ3KVxcbi0tXFxubW0vcGFnZV9pby5jLTY2MC1cXHRpbml0X3N5bmNfa2lvY2IoXFx1MDAyNnNpby1cXHUwMDNlaW9jYiwgY3R4LVxcdTAwM2VzaXMtXFx1MDAzZXN3YXBfZmlsZSk7XFxubW0vcGFnZV9pby5jOjY2MTpcXHRzaW8tXFx1MDAzZWlvY2Iua2lfcG9zID0gc3dhcF9kZXZfcG9zKGJ2ZWNfZm9saW8oXFx1MDAyNnNpby1cXHUwMDNlYnZlY3NbMF0pLVxcdTAwM2Vzd2FwKTtcXG5tbS9wYWdlX2lvLmMtNjYyLVxcdGlmIChydyA9PSBXUklURSlcXG4tLVxcbm1tL3BhZ2VfaW8uYy02NjctXFx0aW92X2l0ZXJfYnZlYyhcXHUwMDI2aXRlciwgcncgPT0gV1JJVEUgPyBJVEVSX1NPVVJDRSA6IElURVJfREVTVCxcXG5tbS9wYWdlX2lvLmM6NjY4OlxcdFxcdFxcdHNpby1cXHUwMDNlYnZlY3MsIHNpby1cXHUwMDNlbnJfYnZlY3MsIHNpby1cXHUwMDNlbGVuKTtcXG5tbS9wYWdlX2lvLmMtNjY5LVxcdHJldCA9IHNpby1cXHUwMDNlaW9jYi5raV9maWxwLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWFfb3BzLVxcdTAwM2Vzd2FwX3J3KFxcdTAwMjZzaW8tXFx1MDAzZWlvY2IsIFxcdTAwMjZpdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MTUuNTk3MTc4NzE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTgwNTAyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipBbmFseXppbmcgYENsZWFyUGFnZVJlY2xhaW1gIGFuZCBgZm9saW9fY2xlYXJfcmVjbGFpbWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGlzIGBidmVjX3NldF9mb2xpb2AgZnVuY3Rpb24gaXMgc2V0dGluZyB0aGUgYGJ2X3BhZ2VgIGZpZWxkIHRvIHRoZSBmb2xpbydzIGhlYWQgcGFnZS4gVGhhdCBtZWFucyB0aGUgYHNpby1cdTAwM2VidmVjc1twXS5idl9wYWdlYCBwb2ludGVyICphbHJlYWR5KiBwb2ludGVkIHRvIHRoYXQgc2FtZSBoZWFkIHBhZ2UuIFNvLCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGhlYWQgcGFnZSwgYENsZWFyUGFnZVJlY2xhaW0ocGFnZSlgIGFuZCBgZm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbylgIHNob3VsZCBlc3NlbnRpYWxseSBiZSBkb2luZyB0aGUgZXhhY3Qgc2FtZSB0aGluZzsgdGhlcmUncyBubyByZWFsIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZSB0aGVyZS4gVGhleSdyZSBqdXN0IGNsZWFyaW5nIHRoZSByZWNsYWltIGJpdCBvbiB0aGUgc2FtZSB1bmRlcmx5aW5nIHBhZ2UuXG5cbkJ1dCwgaGFuZyBvbiBhIHNlY29uZC4uLiBUaGlzIG1ha2VzIG1lIHdvbmRlciBhYm91dCB0aGUgdHJhbnNpdGlvbiB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLiBXZeKAmXZlIGNoYW5nZWQgdGhlIGNvZGUgdG8gYXNzb2NpYXRlIGJsa2dzIGZyb20gdGhlIGZvbGlvIGluc3RlYWQgb2YgdGhlIHBhZ2UuIExldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2VgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGNydWNpYWwgaXMgYmVpbmcgbWlzc2VkIGR1cmluZyB0aGUgdHJhbnNpdGlvbiB0byBmb2xpb3MuIE5lZWQgdG8gY29uZmlybSB0aGUgYmxrZyBhc3NvY2lhdGlvbiBpcyB0aGUgc2FtZSBpbiBib3RoIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDcxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjE5LjI1NTIzMjk0NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTQ2MjA4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjIwLjg3NDcwMTkzNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYxMTc5NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBhIFJlY2VudCBDb2RlIENoYW5nZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZydzIG5vdCBxdWl0ZSByaWdodC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb25hbGl0eSwgd2hhdGV2ZXIgaXQgaXMsIHdhcyBhY3R1YWxseSAqcmVtb3ZlZCogaW4gdGhpcyBsYXRlc3QgcGF0Y2guIEl0J3MgdGhhdCBuYWdnaW5nIGZlZWxpbmcgeW91IGdldCB3aGVuIHlvdSd2ZSBiZWVuIHdvcmtpbmcgd2l0aCB0aGlzIGNvZGUgYmFzZSBmb3IgYSB3aGlsZS4gTGV0IG1lIGRvdWJsZS1jaGVjay4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgbW9kdWxlcywgdGhlIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgd291bGQgYmUgaW4gYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gc2VlIHRoZSBrZXkgbG9naWMgaWYgaXQgKndhcyogcmVtb3ZlZCwgb3Igd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgc29tZSBpbmRpY2F0aW9uIG9mIGhvdyBpdCB3YXMgYWx0ZXJlZCwgb3IgbW92ZWQuIEdvdHRhIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uIGJlZm9yZSBJIGdvIGRvd24gYW55IHJhYmJpdCBob2xlcy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODoyMy45MzU4ODM4NDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg4NjEwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfaW8uYz0yNjM9c3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxcbi0tXFxubW0vcGFnZV9pby5jLTI3OC1cXG5tbS9wYWdlX2lvLmM6Mjc5OnN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9wYWdlX2lvLmMtMjgwLXtcXG4tLVxcbm1tL3BhZ2VfaW8uYz0yOTY9c3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxcbi0tXFxubW0vcGFnZV9pby5jLTI5OS19XFxubW0vcGFnZV9pby5jOjMwMDpzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vcGFnZV9pby5jLTMwMS17XFxuLS1cXG5tbS9wYWdlX2lvLmM9NTkxPXN0YXRpYyB2b2lkIHN3YXBfYmRldl9zdWJtaXRfd3JpdGUoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpXFxuLS1cXG5tbS9wYWdlX2lvLmMtNTk5LVxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBzd2FwX2ZvbGlvX3NlY3RvcihiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xcbm1tL3BhZ2VfaW8uYzo2MDA6XFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xcbm1tL3BhZ2VfaW8uYy02MDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjI1LjYyNDc1MDExMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQyNjA0NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgZnVuY3Rpb24g4oCTIHdoYXTigJlzIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0/IEknbSBhc3N1bWluZyBpdCdzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIGJpb2xvZ2ljYWwgYXNzb2NpYXRpb24sIGxpa2VseSBkYXRhIGxpbmthZ2UsIGNvbnNpZGVyaW5nIHRoZSBcImJpb1wiIGFuZCBcImFzc29jaWF0ZVwiIGtleXdvcmRzLiBUaGUgXCJibGtnXCIgYW5kIFwiZm9saW9cIiBwYXJ0cyBzdWdnZXN0IGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIG9yIHJlY29yZC1rZWVwaW5nIGZvcm1hdCwgbWF5YmUgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgYmFja2luZyBzdG9yYWdlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgYXNzb2NpYXRpb25zIGl0J3MgYnVpbGRpbmcuIElzIGl0IGxpbmtpbmcgYmlvbG9naWNhbCBlbnRpdGllcyAoZ2VuZXMsIHByb3RlaW5zLCBwYXRod2F5cywgZXRjLik/IElzIGl0IGFzc29jaWF0aW5nIGRhdGEgd2l0aCBhIGZvbGlvLWJhc2VkIHN5c3RlbSBmb3IgdHJhY2tpbmcvbWFuYWdlbWVudD8gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHBvdGVudGlhbCB1c2UgY2FzZXMgYW5kIGxpbWl0YXRpb25zLiBJIG5lZWQgdG8gYXNzZXNzIGhvdyBpdCBmaXRzIHdpdGhpbiB0aGUgd29ya2Zsb3cg4oCTIGlzIGl0IGEgY3JpdGljYWwgc3RlcCwgYSBoZWxwZXIgZnVuY3Rpb24sIG9yIHBhcnQgb2YgYSBsYXJnZXIgcHJvY2Vzcz8gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDc0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MjkuNzY3MzU3Njc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzk6XFx0c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAyODA6XFx0e1xcbiAyODE6XFx0XFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0aWYgKCFmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSlcXG4gMjg0OlxcdFxcdFxcdHJldHVybjtcXG4gMjg1OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMjg2OlxcdFxcdGNzcyA9IGZvbGlvX21lbWNnX2Jsa2dfY3NzKGZvbGlvKTtcXG4gMjg3OlxcdFxcdGlmIChjc3MgXFx1MDAyNlxcdTAwMjYgIWNzc190cnlnZXQoY3NzKSlcXG4gMjg4OlxcdFxcdFxcdGNzcyA9IE5VTEw7XFxuIDI4OTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKGJpbywgY3NzKTtcXG4gMjkyOlxcdFxcdGlmIChjc3MpXFxuIDI5MzpcXHRcXHRcXHRjc3NfcHV0KGNzcyk7XFxuIDI5NDpcXHR9XFxuIDI5NTpcXHQjZWxzZVxcbiAyOTY6XFx0c3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxcbiAyOTc6XFx0e1xcbiAyOTg6XFx0XFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjI5Ljc2NzQzOTI3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mzk3OTQwMDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVjZW50IENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBhIHN0cmFpZ2h0Zm9yd2FyZCByZW5hbWU6IGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlYCB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbHNpdGUgdXBkYXRlLiBUaGF0J3MganVzdCB0aWR5aW5nIHVwLCBsaWtlbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBGb2xpbyB0cmFuc2l0aW9uLCBub3QgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIG9uIGl0cyBvd24uXG5cblRoZW4gdGhlcmUncyB0aGUgYF9fc3dhcF93cml0ZXBhZ2VgIHRvIGBfX3N3YXBfd3JpdGVvdXRgIHJlbmFtZSwgYWdhaW4sIHNlZW1zIGZhaXJseSBpbm5vY3VvdXMuIEp1c3QgYSBuYW1lIGNoYW5nZS5cblxuTm93LCB0aGlzIGBQQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKWAgdG8gYEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKWAgY2hhbmdlIGlzIGEgYml0IG1vcmUgc3Vic3RhbnRpYWwuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIG1vdmluZyBmcm9tIHBhZ2UtbGV2ZWwgZmxhZ3MgdG8gZm9saW8tbGV2ZWwgZmxhZ3MsIHdoaWNoIGlzIGFic29sdXRlbHkgdGhlIGRpcmVjdGlvbiB3ZSdyZSBoZWFkZWQuIFRoaXMgdHJhbnNmb3JtcyB0aGUgZ2VuZXJhdGVkIGZ1bmN0aW9ucyBmcm9tIGBQYWdlUmVjbGFpbWAsIGBTZXRQYWdlUmVjbGFpbWAsIGFuZCBzbyBvbiwgdG8gdGhlIGZvbGlvLWJhc2VkIGNvdW50ZXJwYXJ0cy4gVGhlIHBhdGNoIGFsc28gdXBkYXRlcyBjYWxsZXJzIGluIGBtbS9wYWdlX2lvLmNgLCBgbW0venN3YXAuY2AsIGBtbS9zd2FwZmlsZS5jYCwgYG1tL3N3YXAuaGAsIGFuZCBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIHRvIHVzZSB0aGUgbmV3IGBmb2xpb18qYCBmdW5jdGlvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiYXJlIHRoZXJlIG90aGVyIGNhbGxlcnMgb2YgYFBhZ2VSZWNsYWltYCB0aGF0IGFyZW4ndCBhZGRyZXNzZWQgYnkgdGhpcyBwYXRjaD9cIiBJIHF1aWNrbHkgcmVhbGl6ZWQgdGhlIGRpZmYgSSdtIGxvb2tpbmcgYXQgKmlzKiB0aGUgZW50aXJlIHBhdGNoLCB3aGljaCBtYWtlcyBteSBsaWZlIGEgbGl0dGxlIGVhc2llci5cblxuV2FpdCBhIHNlY29uZC4uLkknbSBwcmV0dHkgc3VyZSBgUGFnZVJlY2xhaW1gIGlzIGFsc28gdXNlZCBpbiBgbW0vdm1zY2FuLmNgISBEaWQgdGhlIHBhdGNoIGFjY291bnQgZm9yIHRoYXQ/ICpRdWlja2x5IGNoZWNraW5nLi4uKiBIbW0uIExldCdzIHNlZSBpZiB0aGUgcGF0Y2ggYWxzbyB1cGRhdGVkIGBtbS92bXNjYW4uY2AuLi5cblxuT2theSwgSSBuZWVkIHRvIGdvIHNlZSBpZiB0aGUgZnVuY3Rpb24gYFBhZ2VSZWNsYWltYCBpcyBzdGlsbCBpbiB0aGUgdHJlZSwgYmVjYXVzZSwgYnkgdGhlIGxvb2tzIG9mIGl0LCBpdCBtYXkgbm90IGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjM5LjE2NTM4MjA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU4MzU0MjEwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQYWdlUmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjQwLjgyMzc0OTkyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjY0NDgxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTWlzc2luZyBgUGFnZVJlY2xhaW1gKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgYFBhZ2VSZWNsYWltYCBtb2R1bGUgd2FzIHN0aWxsIHBhcnQgb2YgdGhlIHRyZWUuIEJ1dCBzb21ldGhpbmcncyBjbGVhcmx5IHNoaWZ0ZWQsIGJlY2F1c2UgaXQncyBubyBsb25nZXIgYXBwZWFyaW5nIHdoZXJlIEkgZXhwZWN0ZWQgaXQgdG8gYmUuIFRoaXMgd2FycmFudHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIExldCdzIHNlZS4uLiB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIGRldGVybWluZSBpdHMgY3VycmVudCBzdGF0dXMgaXMgdGhhdCBgZm9saW9fdGVzdF9yZWNsYWltYCB3aGljaCBzaG91bGQgaW50ZXJhY3Qgd2l0aCBgUGFnZVJlY2xhaW1gLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoYXQgdGVsbHMgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzIyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6NDQuMDkwMjAxMjkxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM5MjQxMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3Rlc3RfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yMjE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydV9nZW5fZm9saW9fc2VxKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjQ1LVxcdGVsc2UgaWYgKCghZm9saW9faXNfZmlsZV9scnUoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHx8XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoyNDY6XFx0XFx0IChmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yNDctXFx0XFx0ICAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHwgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSkpXFxuLS1cXG5tbS9maWxlbWFwLmM9MTY1Nj12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE2NjYtXFx0ICovXFxubW0vZmlsZW1hcC5jOjE2Njc6XFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpIHtcXG5tbS9maWxlbWFwLmMtMTY2OC1cXHRcXHRmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTtcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjc2OD1ib29sIGZvbGlvX21hcmtfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjc4My1cXHRcXHQgKi9cXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI3ODQ6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpXFxubW0vcGFnZS13cml0ZWJhY2suYy0yNzg1LVxcdFxcdFxcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xcbi0tXFxubW0vdm1zY2FuLmM9MTA1Nz1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMTM2LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjExMzc6XFx0XFx0aWYgKHdyaXRlYmFjayBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pKVxcbm1tL3Ztc2Nhbi5jLTExMzgtXFx0XFx0XFx0c3RhdC1cXHUwMDNlbnJfY29uZ2VzdGVkICs9IG5yX3BhZ2VzO1xcbi0tXFxubW0vdm1zY2FuLmMtMTE5MC1cXHRcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jOjExOTE6XFx0XFx0XFx0ICAgIGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy0xMTkyLVxcdFxcdFxcdCAgICB0ZXN0X2JpdChQR0RBVF9XUklURUJBQ0ssIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpKSB7XFxuLS1cXG5tbS92bXNjYW4uYy0xMTk3LVxcdFxcdFxcdH0gZWxzZSBpZiAod3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzYykgfHxcXG5tbS92bXNjYW4uYzoxMTk4OlxcdFxcdFxcdCAgICAhZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSB8fFxcbm1tL3Ztc2Nhbi5jLTExOTktXFx0XFx0XFx0ICAgICFtYXlfZW50ZXJfZnMoZm9saW8sIHNjLVxcdTAwM2VnZnBfbWFzaykgfHxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEzNzgtXFx0XFx0XFx0XFx0XFx0XFx0bnJfcGFnZXMpO1xcbm1tL3Ztc2Nhbi5jOjEzNzk6XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pKVxcbm1tL3Ztc2Nhbi5jLTEzODAtXFx0XFx0XFx0XFx0XFx0Zm9saW9fc2V0X3JlY2xhaW0oZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODo0NS42Mjk0NDc0MjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExNDUzNDU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgZm9saW9fdGVzdF9yZWNsYWltYCBVc2FnZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGZvbGlvX3Rlc3RfcmVjbGFpbWAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgZWxzZXdoZXJlLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCB3ZXJlIHByaW1hcmlseSBmb2N1c2VkIG9uIGBtbS9wYWdlX2lvLmNgLCBgbW0venN3YXAuY2AsIGBtbS9zd2FwZmlsZS5jYCwgYW5kIHJlbGF0ZWQgaGVhZGVycy4gSXQgc2VlbXMgb2RkIHRoYXQgYG1tL3Ztc2Nhbi5jYCB3b3VsZCBiZSB0b3VjaGVkIGlmIHRoZSBwcmltYXJ5IHRhcmdldCB3YXNuJ3QgZXhwbGljaXRseSByZWxhdGVkLlxuXG5UaGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCB0aGUgbW9yZSBJIHN1c3BlY3QgdGhhdCBgUGFnZVJlY2xhaW1gIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGNvbnZlcnRlZCB0byBgZm9saW9fdGVzdF9yZWNsYWltYCBpbiBhIHNlcmllcyBvZiBwcmlvciBwYXRjaGVzLiBQZXJoYXBzIHRoaXMgcGFydGljdWxhciBwYXRjaCBpcyBzaW1wbHkgdGhlIGN1bG1pbmF0aW9uIG9mIHRoYXQgY29udmVyc2lvbiwgY2xlYW5pbmcgdXAgdGhlIG9sZCBgUEFHRUZMQUdgIGRlZmluaXRpb24gYW5kIGZ1bGx5IHRyYW5zaXRpb25pbmcgdG8gdGhlIGBGT0xJT19GTEFHYCBtZWNoYW5pc20uIEl0IGNvdWxkIGJlIGZpbmlzaGluZyB0aGUgam9iIGFuZCB0aGlzIGlzIHRoZSBmaW5hbCBzdGVwLlxuXG5UbyBjb25maXJtIHRoaXMgaHlwb3RoZXNpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBnaXQgaGlzdG9yeS4gTGV0J3Mgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoZW4gdGhlIGBQYWdlUmVjbGFpbWAgdG8gYGZvbGlvX3Rlc3RfcmVjbGFpbWAgdHJhbnNpdGlvbiBiZWdhbiBhbmQgd2hlbiBpdCBtaWdodCBoYXZlIGZ1bGx5IGxhbmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6NTAuNzQzOTg0MzQ5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyNjE2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEFHRUZMQUdcXFxcKFJlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjUwLjc5MTIxNjU2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODQ5MDIwODE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBhbmQgQ2xlYW51cDogQSBDbG9zZXIgTG9vayoqXG5cbk9rYXksIHNvIHRoZSBwcm92aWRlZCBwYXRjaOKAlHllYWgsIHRoYXQncyBwcmVjaXNlbHkgd2hhdCB3YXMgYXBwbGllZC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2VudCBsaWtlIHRoaXM6IHNpbmNlIGBQYWdlUmVjbGFpbWAgd2FzIGFscmVhZHkgYmVpbmcgdHJhbnNpdGlvbmVkIHRvIGBmb2xpb190ZXN0X3JlY2xhaW1gIGluIHRoZSBleGlzdGluZyBjb2RlYmFzZSwgSSBoYWQgdG8gZW5zdXJlIHRoZSBtYWNybyBleHBhbnNpb24gd2FzIGNvbnNpc3RlbnQuIFJpZ2h0LCB0aGUgYFBBR0VGTEFHYCBtYWNybyBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIGdlbmVyYXRlcyAqYm90aCogdGhlIGBQYWdlLi4uYCBhbmQgYGZvbGlvX3Rlc3RfLi4uYCBmdW5jdGlvbnMuIEl0IHVzZXMgYFRFU1RQQUdFRkxBR2AsIGBTRVRQQUdFRkxBR2AsIGFuZCBgQ0xFQVJQQUdFRkxBR2AgaW50ZXJuYWxseS4gQW5kIGJlY2F1c2UgYFRFU1RQQUdFRkxBR2AgZ2VuZXJhdGVzIGJvdGggZnVuY3Rpb24gdmFyaWFudHMsIGBQQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKWAgd2FzIGRlZmluaXRlbHkgY3JlYXRpbmcgYm90aCBgUGFnZVJlY2xhaW1gIGFuZCBgZm9saW9fdGVzdF9yZWNsYWltYC5cblxuTm93LCBjaGFuZ2luZyBpdCB0byBgRk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpYC4uLiB0aGF0ICpvbmx5KiBnZW5lcmF0ZXMgdGhlIGBmb2xpb190ZXN0X3JlY2xhaW1gLCBgZm9saW9fc2V0X3JlY2xhaW1gLCBgZm9saW9fY2xlYXJfcmVjbGFpbWAsIGFuZCByZW1vdmVzIHRoZSBvbGRlciBgUGFnZVJlY2xhaW1gIGVxdWl2YWxlbnRzLiBUaGlzIG1lYW5zLCB1bmRlbmlhYmx5LCB0aGlzIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgY2xlYW51cCBleGVyY2lzZS4gSXQncyBhYm91dCByZW1vdmluZyB0aGUgYFBhZ2VgIHZhcmlhbnRzIG9mIHRoZSBgUmVjbGFpbWAgZmxhZy4gSXQgYWxzbyByZW5hbWVzIGBfX3N3YXBfd3JpdGVwYWdlYCB0byBgX19zd2FwX3dyaXRlb3V0YCwgYW5kIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlYCB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLiBBbGwgY29zbWV0aWMuXG5cbkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgaW4gYHN3YXBfemVyb21hcF9mb2xpb19zZXRgIGFuZCBgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyYC4uLiBJJ2QgYWxyZWFkeSBhbmFseXplZCBpdCBlYXJsaWVyIGFuZCBrbmV3IHRoYXQgYHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSlgIGlzIHRoZSBzYW1lIHRoaW5nIGFzIGBmb2xpby1cdTAwM2Vzd2FwLnZhbCArIGlgLiBTbywgaW5jcmVtZW50aW5nIGBlbnRyeS52YWwrK2AgaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbC4gSXQncyBhbiBvcHRpbWl6YXRpb24gdGhhdCBjbGVhbnMgdXAgcmVkdW5kYW50IGNhbGxzLlxuXG5TbywgaXMgdGhlcmUgYW55IGFjdHVhbCBmdW5jdGlvbmFsIGNoYW5nZSBoZXJlPyBOby4gSXQncyBhIHN0cmFpZ2h0LXVwIHJlZmFjdG9yaW5nOiBzd2FwcGluZyBgUGFnZWAgZnVuY3Rpb25zIHdpdGggYGZvbGlvYCBmdW5jdGlvbnMsIHJlbmFtaW5nLCBhbmQgdGhhdCBsaXR0bGUgb3B0aW1pemF0aW9uIGluIHRoZSBsb29wLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIGBzd2FwX3dyaXRlX2VuZGAuIFRoZSBgYnZlY19mb2xpb2AgY2FsbHMgZG8gdGhlIGBwYWdlX2ZvbGlvYCBvbiB0aGUgYGJ2X3BhZ2VgLiBCdXQsIGBidl9wYWdlYCBpcyBhbHJlYWR5IHRoZSBoZWFkIHBhZ2UgKHNldCBieSBgYnZlY19zZXRfZm9saW9gKSwgc28gYHBhZ2VfZm9saW9gIGlzIGVmZmVjdGl2ZWx5IGRvaW5nIG5vdGhpbmcgYW5kIHJldHVybnMgdGhlIGV4YWN0IHNhbWUgYWRkcmVzcyBhcyBiZWZvcmUgKGJ1dCBjYXN0IHRvIGEgYHN0cnVjdCBmb2xpbyAqYCkuIFRoZW4sIGFsbCB0aGUgYHNldF9wYWdlX2RpcnR5YCwgYENsZWFyUGFnZVJlY2xhaW1gLCBhbmQgYGVuZF9wYWdlX3dyaXRlYmFja2AgY2FsbHMganVzdCBnZXQgbWFwcGVkIHRvIGBmb2xpb19tYXJrX2RpcnR5YCwgYGZvbGlvX2NsZWFyX3JlY2xhaW1gLCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgLiBFeGFjdCBzYW1lIGJlaGF2aW9yLlxuXG5PaywgbGV0IG1lIHF1aWNrbHkgZ2xhbmNlIGF0IGBzd2FwX2ZzX3dyaXRlX2NvbXBsZXRlYC4gSGVyZSB0aGUgYHBhZ2Vfc3dhcF9lbnRyeWAgb24gdGhlIGhlYWQgcGFnZSBqdXN0IHJldHVybnMgYGZvbGlvLVx1MDAzZXN3YXBgLCB3aGljaCBpcyBpZGVudGljYWwsIGFuZCB0aHVzIGBzd2FwX2Rldl9wb3MoZm9saW8tXHUwMDNlc3dhcClgIGFsc28gc3RheXMgdGhlIHNhbWUuXG5cbkFuZCBmaW5hbGx5LCBgc3dhcF9iZGV2X3N1Ym1pdF93cml0ZWAgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgOiB0aG9zZSBhcmUgcHVyZSBmdW5jdGlvbiByZW5hbWVzLlxuXG5TbywgeWVhaCwgKmZpbmFsKiBjb25jbHVzaW9uOiBUaGlzIHBhdGNoIGlzIGEgKnB1cmUqIHJlZmFjdG9yaW5nL2NsZWFudXAuIEl0J3MgcmVtb3ZpbmcgdW51c2VkIG1hY3JvcywgcmVuYW1pbmcgZnVuY3Rpb25zIHRvIHVzZSBgZm9saW9gIGNvbnZlbnRpb25zLCBhbmQgb3B0aW1pemluZyB0aGF0IG9uZSBsb29wIGJ5IGF2b2lkaW5nIHJlcGVhdGVkIGZvbGlvL3BhZ2UgY29udmVyc2lvbnMuIFRoZXJlJ3MgemVybyBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsIGxvZ2ljLiBXb3J0aEZ1enppbmc9ZmFsc2UuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSBmdXp6aW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDgwLCJPdXRwdXRUb2tlbnMiOjEyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjk6MDkuMjgxNDM0Nzg5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcgYW5kIGNsZWFudXAgZWZmb3J0LiBJdCByZXBsYWNlcyBwYWdlLWJhc2VkIGZ1bmN0aW9ucyBhbmQgZmxhZ3Mgd2l0aCB0aGVpciBmb2xpby1iYXNlZCBlcXVpdmFsZW50cyAoZS5nLiwgY2hhbmdpbmcgUEFHRUZMQUcgdG8gRk9MSU9fRkxBRyBmb3IgJ3JlY2xhaW0nLCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCwgYW5kIG9wdGltaXppbmcgYSBsb29wIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIgdG8gYXZvaWQgcmVkdW5kYW50IHBhZ2UvZm9saW8gY29udmVyc2lvbnMpLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBleGVjdXRpb24gZmxvdyBvciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwIGVmZm9ydC4gSXQgcmVwbGFjZXMgcGFnZS1iYXNlZCBmdW5jdGlvbnMgYW5kIGZsYWdzIHdpdGggdGhlaXIgZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4sIGNoYW5naW5nIFBBR0VGTEFHIHRvIEZPTElPX0ZMQUcgZm9yICdyZWNsYWltJywgcmVuYW1pbmcgX19zd2FwX3dyaXRlcGFnZSB0byBfX3N3YXBfd3JpdGVvdXQsIGFuZCBvcHRpbWl6aW5nIGEgbG9vcCBpbiBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyIHRvIGF2b2lkIHJlZHVuZGFudCBwYWdlL2ZvbGlvIGNvbnZlcnNpb25zKS4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmjwd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 02:26:01 +0000 UTC FinishedAt: 2026-08-07 02:29:11 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwIGVmZm9ydC4gSXQgcmVwbGFjZXMgcGFnZS1iYXNlZCBmdW5jdGlvbnMgYW5kIGZsYWdzIHdpdGggdGhlaXIgZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4sIGNoYW5naW5nIFBBR0VGTEFHIHRvIEZPTElPX0ZMQUcgZm9yICYjMzk7cmVjbGFpbSYjMzk7LCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCwgYW5kIG9wdGltaXppbmcgYSBsb29wIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIgdG8gYXZvaWQgcmVkdW5kYW50IHBhZ2UvZm9saW8gY29udmVyc2lvbnMpLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTI5MDZmMTVmZjI3ZTQ3NWYyMWRiNWQ4MjlkNzlhYzRiYTViNzc4NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDI6Mjc6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uNGNjODNmNDFlZjA5NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTU5Myw4ICYjNDM7NTkzLDggQEAgVEVTVFBBR0VGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKVxuIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpXG4gXG4gLyogUEdfcmVhZGFoZWFkIGlzIG9ubHkgdXNlZCBmb3IgcmVhZHM7IFBHX3JlY2xhaW0gaXMgb25seSBmb3Igd3JpdGVzICovXG4tUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcbi1cdFRFU1RDTEVBUkZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcbiYjNDM7Rk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpXG4mIzQzO1x0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlcbiBGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuIFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uY1xuaW5kZXggZTRmYTdmZmZmZThiYi4uZTJhMjY5NDI1YWM1ZSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pby5jXG5AQCAtMTU5LDcgJiM0MzsxNTksNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4tXHRzd3BfZW50cnlfdCBlbnRyeTtcbiYjNDM7XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG5AQCAtMTY3LDggJiM0MzsxNjcsOCBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpJiM0MzsmIzQzOykge1xuLVx0XHRlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7XG4gXHRcdF9fc3dhcF90YWJsZV9zZXRfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7XG4mIzQzO1x0XHRlbnRyeS52YWwmIzQzOyYjNDM7O1xuIFx0fVxuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXG5AQCAtMTgyLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbi1cdHN3cF9lbnRyeV90IGVudHJ5O1xuJiM0MztcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcbkBAIC0xOTAsOCAmIzQzOzE5MCw4IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19jbGVhcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xuIFx0XHRfX3N3YXBfdGFibGVfY2xlYXJfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7XG4mIzQzO1x0XHRlbnRyeS52YWwmIzQzOyYjNDM7O1xuIFx0fVxuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gfVxuQEAgLTIwOCw3ICYjNDM7MjA4LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qXG4tXHQgKiBBcmNoIGNvZGUgbWF5IGhhdmUgdG8gcHJlc2VydmUgbW9yZSBkYXRhIHRoYW4ganVzdCB0aGUgcGFnZVxuJiM0MztcdCAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBmb2xpb1xuIFx0ICogY29udGVudHMsIGUuZy4gbWVtb3J5IHRhZ3MuXG4gXHQgKi9cbiBcdHJldCA9IGFyY2hfcHJlcGFyZV90b19zd2FwKGZvbGlvKTtcbkBAIC0yMTksNyAmIzQzOzIxOSw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0LypcbiBcdCAqIFVzZSB0aGUgc3dhcCB0YWJsZSB6ZXJvIG1hcmsgdG8gYXZvaWQgZG9pbmcgSU8gZm9yIHplcm8tZmlsbGVkXG4tXHQgKiBwYWdlcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXNcbiYjNDM7XHQgKiBmb2xpb3MuIFRoZSB6ZXJvIG1hcmsgaXMgcHJvdGVjdGVkIGJ5IHRoZSBjbHVzdGVyIGxvY2ssIHdoaWNoIGlzXG4gXHQgKiBhY3F1aXJlZCBpbnRlcm5hbGx5IGJ5IHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIuXG4gXHQgKi9cbiBcdGlmIChpc19mb2xpb196ZXJvX2ZpbGxlZChmb2xpbykpIHtcbkBAIC0yNDcsNyAmIzQzOzI0Nyw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0fVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tXHRfX3N3YXBfd3JpdGVwYWdlKGN0eCwgZm9saW8pO1xuJiM0MztcdF9fc3dhcF93cml0ZW91dChjdHgsIGZvbGlvKTtcbiBcdHJldHVybiAwO1xuIG91dF91bmxvY2s6XG4gXHRmb2xpb191bmxvY2soZm9saW8pO1xuQEAgLTI3Niw3ICYjNDM7Mjc2LDcgQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuIFx0cmV0dXJuIGNhbl9tZXJnZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzO1xuIFxuQEAgLTI5Nyw3ICYjNDM7Mjk3LDkgQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuIH1cbi0jZGVmaW5lIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbylcdFx0ZG8geyB9IHdoaWxlICgwKVxuJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7fVxuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgXHUwMDI2XHUwMDI2IENPTkZJR19CTEtfQ0dST1VQICovXG4gXG4gc3RydWN0IHN3YXBfaW9jYiB7XG5AQCAtMzY2LDcgJiM0MzszNjgsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJ3KVxuIFx0fVxuIH1cbiBcbi12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXG5AQCAtNDk2LDEzICYjNDM7NDk4LDEzIEBAIHN0YXRpYyB2b2lkIHN3YXBfd3JpdGVfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpXG4gXHRpbnQgcDtcbiBcbiBcdGZvciAocCA9IDA7IHAgXHUwMDNjIHNpby1cdTAwM2Vucl9idmVjczsgcCYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbcF0uYnZfcGFnZTtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFx1MDAyNnNpby1cdTAwM2VidmVjc1twXSk7XG4gXG4gXHRcdGlmIChmYWlsZWQpIHtcbi1cdFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbi1cdFx0XHRDbGVhclBhZ2VSZWNsYWltKHBhZ2UpO1xuJiM0MztcdFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4gXHRcdH1cbi1cdFx0ZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpO1xuJiM0MztcdFx0Zm9saW9fZW5kX3dyaXRlYmFjayhmb2xpbyk7XG4gXHR9XG4gXHRtZW1wb29sX2ZyZWUoc2lvLCBzaW9fcG9vbCk7XG4gfVxuQEAgLTUxMywxNiAmIzQzOzUxNSwxNiBAQCBzdGF0aWMgdm9pZCBzd2FwX2ZzX3dyaXRlX2NvbXBsZXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgbG9uZyByZXQpXG4gXHRib29sIGZhaWxlZCA9IHJldCAhPSBzaW8tXHUwMDNlbGVuO1xuIFxuIFx0aWYgKGZhaWxlZCkge1xuLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNpby1cdTAwM2VidmVjc1swXS5idl9wYWdlO1xuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzWzBdKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogSW4gdGhlIGNhc2Ugb2Ygc3dhcC1vdmVyLW5mcywgdGhpcyBjYW4gYmUgYSB0ZW1wb3JhcnkgZmFpbHVyZVxuIFx0XHQgKiBpZiB0aGUgc3lzdGVtIGhhcyBsaW1pdGVkIG1lbW9yeSBmb3IgYWxsb2NhdGluZyB0cmFuc21pdFxuLVx0XHQgKiBidWZmZXJzLiAgTWFyayB0aGUgcGFnZSBkaXJ0eSBhbmQgYXZvaWRcbiYjNDM7XHRcdCAqIGJ1ZmZlcnMuICBNYXJrIHRoZSBmb2xpbyBkaXJ0eSBhbmQgYXZvaWRcbiBcdFx0ICogZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlIGJ1dCByYXRlLWxpbWl0IHRoZSBtZXNzYWdlcy5cbiBcdFx0ICovXG4gXHRcdHByX2Vycl9yYXRlbGltaXRlZChcJiMzNDtXcml0ZSBlcnJvciAlbGQgb24gZGlvIHN3YXBmaWxlICglbGx1KVxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgIHJldCwgc3dhcF9kZXZfcG9zKHBhZ2Vfc3dhcF9lbnRyeShwYWdlKSkpO1xuJiM0MztcdFx0XHRcdCAgIHJldCwgc3dhcF9kZXZfcG9zKGZvbGlvLVx1MDAzZXN3YXApKTtcbiBcdH1cbiBcbiBcdHN3YXBfd3JpdGVfZW5kKHNpbywgZmFpbGVkKTtcbkBAIC01OTUsNyAmIzQzOzU5Nyw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfYmRldl9zdWJtaXRfd3JpdGUoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpXG4gXHRcdFx0UkVRX09QX1dSSVRFIHwgUkVRX1NXQVApO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IHNpby1cdTAwM2VsZW47XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBzd2FwX2ZvbGlvX3NlY3RvcihiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuLVx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShiaW8sIGJpb19maXJzdF9mb2xpb19hbGwoYmlvKSk7XG4mIzQzO1x0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VzaXMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTykge1xuIFx0XHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IGVjNTgwYzcxMzIwNDIuLmMzZmY5MTMyZGU1ZTAgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTI3OSw3ICYjNDM7Mjc5LDcgQEAgdm9pZCBzd2FwX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHZvaWQgc3dhcF9yZWFkX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XG4gdm9pZCBzd2FwX3dyaXRlX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XG4gaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAvKiBsaW51eC9tbS9zd2FwX3N0YXRlLmMgKi9cbiBleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Ugc3dhcF9zcGFjZSBfX3JlYWRfbW9zdGx5O1xuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCBkZWEyZDNiMzZlMDZmLi4yZmY2ZGUwYThjMzZhIDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuY1xuQEAgLTI5ODIsNyAmIzQzOzI5ODIsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfc3dhcF9leHRlbnQpO1xuIC8qXG4gICogQSBgc3dhcCBleHRlbnQmIzM5OyBpcyBhIHNpbXBsZSB0aGluZyB3aGljaCBtYXBzIGEgY29udGlndW91cyByYW5nZSBvZiBwYWdlc1xuICAqIG9udG8gYSBjb250aWd1b3VzIHJhbmdlIG9mIGRpc2sgYmxvY2tzLiAgQSByYnRyZWUgb2Ygc3dhcCBleHRlbnRzIGlzXG4tICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlcGFnZS9zd2FwX3JlYWRfZm9saW9cbiYjNDM7ICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlb3V0L3N3YXBfcmVhZF9mb2xpb1xuICAqIHRpbWUgZm9yIGxvY2F0aW5nIHdoZXJlIG9uIGRpc2sgYSBwYWdlIGJlbG9uZ3MuXG4gICpcbiAgKiBJZiB0aGUgc3dhcGZpbGUgaXMgYW4gU19JU0JMSyBibG9jayBkZXZpY2UsIGEgc2luZ2xlIGV4dGVudCBpcyBpbnN0YWxsZWQuXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGY3YzljODlmNjQ0OWMuLjM4Y2I2YTgzMThhNTQgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMTA1MCw3ICYjNDM7MTA1MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7XG4gXG4gXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cbi1cdF9fc3dhcF93cml0ZXBhZ2UoXHUwMDI2Y3R4LCBmb2xpbyk7XG4mIzQzO1x0X19zd2FwX3dyaXRlb3V0KFx1MDAyNmN0eCwgZm9saW8pO1xuIFx0c3dhcF93cml0ZV9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcbiBvdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwIGVmZm9ydC4gSXQgcmVwbGFjZXMgcGFnZS1iYXNlZCBmdW5jdGlvbnMgYW5kIGZsYWdzIHdpdGggdGhlaXIgZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4sIGNoYW5naW5nIFBBR0VGTEFHIHRvIEZPTElPX0ZMQUcgZm9yICYjMzk7cmVjbGFpbSYjMzk7LCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCwgYW5kIG9wdGltaXppbmcgYSBsb29wIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIgdG8gYXZvaWQgcmVkdW5kYW50IHBhZ2UvZm9saW8gY29udmVyc2lvbnMpLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTI5MDZmMTVmZjI3ZTQ3NWYyMWRiNWQ4MjlkNzlhYzRiYTViNzc4NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMDI6Mjc6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IDdhODYzNTcyYWRjZTcuLjRjYzgzZjQxZWYwOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC01OTMsOCAmIzQzOzU5Myw4IEBAIFRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTCkKIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpCiAKIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqLwotUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTCkKLQlURVNUQ0xFQVJGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpCiYjNDM7Rk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpCiYjNDM7CUZPTElPX1RFU1RfQ0xFQVJfRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpCiBGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKQogCUZPTElPX1RFU1RfQ0xFQVJfRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSkKIApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jCmluZGV4IGU0ZmE3ZmZmZmU4YmIuLmUyYTI2OTQyNWFjNWUgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lvLmMKQEAgLTE1OSw3ICYjNDM7MTU5LDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pOwogCWludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwotCXN3cF9lbnRyeV90IGVudHJ5OwomIzQzOwlzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLSZndDtzd2FwOwogCXVuc2lnbmVkIGludCBpOwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKQEAgLTE2Nyw4ICYjNDM7MTY3LDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpJiM0MzsmIzQzOykgewotCQllbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7CiAJCV9fc3dhcF90YWJsZV9zZXRfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7CiYjNDM7CQllbnRyeS52YWwmIzQzOyYjNDM7OwogCX0KIAlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKIApAQCAtMTgyLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pCiBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwotCXN3cF9lbnRyeV90IGVudHJ5OwomIzQzOwlzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLSZndDtzd2FwOwogCXVuc2lnbmVkIGludCBpOwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKQEAgLTE5MCw4ICYjNDM7MTkwLDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIAljaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pOwogCWZvciAoaSA9IDA7IGkgJmx0OyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkmIzQzOyYjNDM7KSB7Ci0JCWVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTsKIAkJX19zd2FwX3RhYmxlX2NsZWFyX3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpOwomIzQzOwkJZW50cnkudmFsJiM0MzsmIzQzOzsKIAl9CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiB9CkBAIC0yMDgsNyAmIzQzOzIwOCw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKgotCSAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBwYWdlCiYjNDM7CSAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBmb2xpbwogCSAqIGNvbnRlbnRzLCBlLmcuIG1lbW9yeSB0YWdzLgogCSAqLwogCXJldCA9IGFyY2hfcHJlcGFyZV90b19zd2FwKGZvbGlvKTsKQEAgLTIxOSw3ICYjNDM7MjE5LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIAkvKgogCSAqIFVzZSB0aGUgc3dhcCB0YWJsZSB6ZXJvIG1hcmsgdG8gYXZvaWQgZG9pbmcgSU8gZm9yIHplcm8tZmlsbGVkCi0JICogcGFnZXMuIFRoZSB6ZXJvIG1hcmsgaXMgcHJvdGVjdGVkIGJ5IHRoZSBjbHVzdGVyIGxvY2ssIHdoaWNoIGlzCiYjNDM7CSAqIGZvbGlvcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXMKIAkgKiBhY3F1aXJlZCBpbnRlcm5hbGx5IGJ5IHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIuCiAJICovCiAJaWYgKGlzX2ZvbGlvX3plcm9fZmlsbGVkKGZvbGlvKSkgewpAQCAtMjQ3LDcgJiM0MzsyNDcsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlfX3N3YXBfd3JpdGVwYWdlKGN0eCwgZm9saW8pOwomIzQzOwlfX3N3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7CiAJcmV0dXJuIDA7CiBvdXRfdW5sb2NrOgogCWZvbGlvX3VubG9jayhmb2xpbyk7CkBAIC0yNzYsNyAmIzQzOzI3Niw3IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbykKIAlyZXR1cm4gY2FuX21lcmdlOwogfQogCi1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIApAQCAtMjk3LDcgJiM0MzsyOTcsOSBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pCiB7CiAJcmV0dXJuIHRydWU7CiB9Ci0jZGVmaW5lIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbykJCWRvIHsgfSB3aGlsZSAoMCkKJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzO30KICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgJmFtcDsmYW1wOyBDT05GSUdfQkxLX0NHUk9VUCAqLwogCiBzdHJ1Y3Qgc3dhcF9pb2NiIHsKQEAgLTM2Niw3ICYjNDM7MzY4LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9hZGRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBydykKIAl9CiB9CiAKLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pOwogCkBAIC00OTYsMTMgJiM0Mzs0OTgsMTMgQEAgc3RhdGljIHZvaWQgc3dhcF93cml0ZV9lbmQoc3RydWN0IHN3YXBfaW9jYiAqc2lvLCBib29sIGZhaWxlZCkKIAlpbnQgcDsKIAogCWZvciAocCA9IDA7IHAgJmx0OyBzaW8tJmd0O25yX2J2ZWNzOyBwJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNpby0mZ3Q7YnZlY3NbcF0uYnZfcGFnZTsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKCZhbXA7c2lvLSZndDtidmVjc1twXSk7CiAKIAkJaWYgKGZhaWxlZCkgewotCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCQlDbGVhclBhZ2VSZWNsYWltKHBhZ2UpOwomIzQzOwkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwomIzQzOwkJCWZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pOwogCQl9Ci0JCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKJiM0MzsJCWZvbGlvX2VuZF93cml0ZWJhY2soZm9saW8pOwogCX0KIAltZW1wb29sX2ZyZWUoc2lvLCBzaW9fcG9vbCk7CiB9CkBAIC01MTMsMTYgJiM0Mzs1MTUsMTYgQEAgc3RhdGljIHZvaWQgc3dhcF9mc193cml0ZV9jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KQogCWJvb2wgZmFpbGVkID0gcmV0ICE9IHNpby0mZ3Q7bGVuOwogCiAJaWYgKGZhaWxlZCkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNpby0mZ3Q7YnZlY3NbMF0uYnZfcGFnZTsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKCZhbXA7c2lvLSZndDtidmVjc1swXSk7CiAKIAkJLyoKIAkJICogSW4gdGhlIGNhc2Ugb2Ygc3dhcC1vdmVyLW5mcywgdGhpcyBjYW4gYmUgYSB0ZW1wb3JhcnkgZmFpbHVyZQogCQkgKiBpZiB0aGUgc3lzdGVtIGhhcyBsaW1pdGVkIG1lbW9yeSBmb3IgYWxsb2NhdGluZyB0cmFuc21pdAotCQkgKiBidWZmZXJzLiAgTWFyayB0aGUgcGFnZSBkaXJ0eSBhbmQgYXZvaWQKJiM0MzsJCSAqIGJ1ZmZlcnMuICBNYXJrIHRoZSBmb2xpbyBkaXJ0eSBhbmQgYXZvaWQKIAkJICogZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlIGJ1dCByYXRlLWxpbWl0IHRoZSBtZXNzYWdlcy4KIAkJICovCiAJCXByX2Vycl9yYXRlbGltaXRlZCgmIzM0O1dyaXRlIGVycm9yICVsZCBvbiBkaW8gc3dhcGZpbGUgKCVsbHUpXG4mIzM0OywKLQkJCQkgICByZXQsIHN3YXBfZGV2X3BvcyhwYWdlX3N3YXBfZW50cnkocGFnZSkpKTsKJiM0MzsJCQkJICAgcmV0LCBzd2FwX2Rldl9wb3MoZm9saW8tJmd0O3N3YXApKTsKIAl9CiAKIAlzd2FwX3dyaXRlX2VuZChzaW8sIGZhaWxlZCk7CkBAIC01OTUsNyAmIzQzOzU5Nyw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfYmRldl9zdWJtaXRfd3JpdGUoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpCiAJCQlSRVFfT1BfV1JJVEUgfCBSRVFfU1dBUCk7CiAJYmlvLSZndDtiaV9pdGVyLmJpX3NpemUgPSBzaW8tJmd0O2xlbjsKIAliaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTsKLQliaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTsKJiM0MzsJYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpOwogCiAJaWYgKGN0eC0mZ3Q7c2lzLSZndDtmbGFncyAmYW1wOyBTV1BfU1lOQ0hST05PVVNfSU8pIHsKIAkJc3VibWl0X2Jpb193YWl0KGJpbyk7CmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggZWM1ODBjNzEzMjA0Mi4uYzNmZjkxMzJkZTVlMCAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMjc5LDcgJiM0MzsyNzksNyBAQCB2b2lkIHN3YXBfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiB2b2lkIHN3YXBfcmVhZF9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpOwogdm9pZCBzd2FwX3dyaXRlX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7CiBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7Ci12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAogLyogbGludXgvbW0vc3dhcF9zdGF0ZS5jICovCiBleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Ugc3dhcF9zcGFjZSBfX3JlYWRfbW9zdGx5OwpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggZGVhMmQzYjM2ZTA2Zi4uMmZmNmRlMGE4YzM2YSAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jCkBAIC0yOTgyLDcgJiM0MzsyOTgyLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3N3YXBfZXh0ZW50KTsKIC8qCiAgKiBBIGBzd2FwIGV4dGVudCYjMzk7IGlzIGEgc2ltcGxlIHRoaW5nIHdoaWNoIG1hcHMgYSBjb250aWd1b3VzIHJhbmdlIG9mIHBhZ2VzCiAgKiBvbnRvIGEgY29udGlndW91cyByYW5nZSBvZiBkaXNrIGJsb2Nrcy4gIEEgcmJ0cmVlIG9mIHN3YXAgZXh0ZW50cyBpcwotICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlcGFnZS9zd2FwX3JlYWRfZm9saW8KJiM0MzsgKiBidWlsdCBhdCBzd2Fwb24gdGltZSBhbmQgaXMgdGhlbiB1c2VkIGF0IHN3YXBfd3JpdGVvdXQvc3dhcF9yZWFkX2ZvbGlvCiAgKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLgogICoKICAqIElmIHRoZSBzd2FwZmlsZSBpcyBhbiBTX0lTQkxLIGJsb2NrIGRldmljZSwgYSBzaW5nbGUgZXh0ZW50IGlzIGluc3RhbGxlZC4KZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IGY3YzljODlmNjQ0OWMuLjM4Y2I2YTgzMThhNTQgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMTA1MCw3ICYjNDM7MTA1MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJZm9saW9fc2V0X3JlY2xhaW0oZm9saW8pOwogCiAJLyogc3RhcnQgd3JpdGViYWNrICovCi0JX19zd2FwX3dyaXRlcGFnZSgmYW1wO2N0eCwgZm9saW8pOwomIzQzOwlfX3N3YXBfd3JpdGVvdXQoJmFtcDtjdHgsIGZvbGlvKTsKIAlzd2FwX3dyaXRlX3N1Ym1pdCgmYW1wO2N0eCk7CiAKIG91dDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGb2xpby1SZWxhdGVkIFN3YXAgRW50cnkgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCYjMzk7cyByZW5hbWluZyBzb21lIGZsYWdzLCBjbGVhbmluZyB1cCBzb21lIGNvZGUgYXJvdW5kIGZvbGlvcyBpbiBgbW0vcGFnZV9pby5jYCBhbmQgYG1tL3pzd2FwLmNgLCBub3RoaW5nIHRvbyBleGNpdGluZyB0aGVyZS4gQnV0LCB3YWl0LCBJIHNlZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBzd2FwX3plcm9tYXBfZm9saW9fc2V0YCBhbmQgYHN3YXBfemVyb21hcF9mb2xpb19jbGVhcmAuIFRoZXkmIzM5O3ZlIGNoYW5nZWQgaG93IHRoZSBgc3dwX2VudHJ5X3QgZW50cnlgIGlzIGhhbmRsZWQuIEJlZm9yZSwgaXQgbG9va2VkIGxpa2UgdGhpczoKCmBgYGMKLQlzd3BfZW50cnlfdCBlbnRyeTsKJiM0MzsJc3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby0mZ3Q7c3dhcDsKLi4uCi0JCWVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTsKIAkJX19zd2FwX3RhYmxlX3NldF96ZXJvKGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpKTsKJiM0MzsJCWVudHJ5LnZhbCYjNDM7JiM0Mzs7CmBgYAoKVGhleSYjMzk7cmUgbm93IGluaXRpYWxpemluZyBgZW50cnlgIHdpdGggYGZvbGlvLSZndDtzd2FwYCBhbmQgaW5jcmVtZW50aW5nIGl0IGluIHRoZSBsb29wIHdpdGggYGVudHJ5LnZhbCYjNDM7JiM0MztgLCBpbnN0ZWFkIG9mIGdldHRpbmcgdGhlIGBlbnRyeWAgd2l0aCBhIGNhbGwgdG8gYHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSlgLiBJcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEl0IGhhcyB0aGUgcG90ZW50aWFsIHRvIGJlIGEgc2lnbmlmaWNhbnQgb25lIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4KCkxldCYjMzk7cyBsb29rIGF0IGBwYWdlX3N3YXBfZW50cnlgIHRvIHNlZSB3aGF0IGl0IGRvZXMuCgpgYGBjCnN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgcGFnZV9zd2FwX2VudHJ5KHN0cnVjdCBwYWdlICpwYWdlKQp7CglzdHJ1Y3Qgc3dwX2VudHJ5X3QgZW50cnk7CgllbnRyeS52YWwgPSBwYWdlX3ByaXZhdGUocGFnZSk7CglyZXR1cm4gZW50cnk7Cn0KYGBgCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBwYWdlX3N3YXBfZW50cnlgIGp1c3QgZ2V0cyB0aGUgYHBhZ2VfcHJpdmF0ZShwYWdlKWAgYW5kIHNldHMgaXQgaW50byB0aGUgYGVudHJ5LnZhbGAgZmllbGQuIEZvciBhIGZvbGlvLCBpc24mIzM5O3QgYGZvbGlvLSZndDtzd2FwYCB0aGUgc3dhcCBlbnRyeSBmb3IgdGhlIGZpcnN0IHBhZ2U/CgpJZiB0aGlzIGlzIGEgbGFyZ2UgZm9saW8sIGRvZXMgYHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSlgIHJldHVybiBgZm9saW8tJmd0O3N3YXAudmFsICYjNDM7IGlgPyBMZXQmIzM5O3MgYXNzdW1lIHRoYXQgbGFyZ2UgZm9saW9zIGFyZSB1c3VhbGx5IGFzc2lnbmVkIGEgY29udGlndW91cyByYW5nZSBvZiBzd2FwIGVudHJpZXMuIEluIHRoaXMgY2FzZSwgaW5jcmVtZW50aW5nIGBlbnRyeS52YWwmIzQzOyYjNDM7YCBzaG91bGQgYmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIHNpbmNlIGBmb2xpby0mZ3Q7c3dhcGAgd291bGQgcG9pbnQgdG8gdGhlIGZpcnN0IGVudHJ5IGFuZCBzdWNjZXNzaXZlIHBhZ2VzIHdpdGhpbiB0aGUgZm9saW8gc2hvdWxkIGhhdmUgc3dhcCBlbnRyaWVzIHdpdGggaW5jcmVtZW50aW5nIHZhbHVlcy4KCkhvd2V2ZXIsIHRoZSBwcm9ibGVtIGlzIHRoYXQgYHBhZ2VfcHJpdmF0ZShwYWdlKWAgZm9yIHRhaWwgcGFnZXMgbWlnaHQgKm5vdCogYmUgc2V0IHRvIHRoZSBzd2FwIGVudHJ5ISBJIG5lZWQgdG8gY2hlY2sgaWYgYHBhZ2VfcHJpdmF0ZWAgaXMgc2V0IGNvcnJlY3RseSBmb3IgdGFpbCBwYWdlcyBpbiB0aGUgc3dhcCBjYWNoZS4gSSYjMzk7bSBnb2luZyB0byBncmVwIGZvciBgcGFnZV9zd2FwX2VudHJ5YCBhbmQgYGZvbGlvLSZndDtzd2FwYCBpbiB0aGUgY29kZSB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgc2FmZS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IGlmIHRoZXJlJiMzOTtzIGFueSBjb2RlIHRoYXQgYXNzdW1lcyBgcGFnZV9wcml2YXRlYCBpcyBjb3JyZWN0bHkgc2V0IGZvciB0aGVzZSB0YWlsIHBhZ2VzLCBiZWNhdXNlIGlmIHRoZXJlIGlzLCB0aGlzIGNoYW5nZSBjb3VsZCBicmVhayBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3N3YXBfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTIxNDI9c3RhdGljIGJvb2wgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjE0Ny1cdFx0XHRcdCAgICBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcbm1tL3JtYXAuYzoyMTQ4Olx0c3dwX2VudHJ5X3QgZW50cnkgPSBwYWdlX3N3YXBfZW50cnkocGFnZSk7XG5tbS9ybWFwLmMtMjE0OS1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuLS1cbm1tL3pzd2FwLmM9MTM5OD1zdGF0aWMgYm9vbCB6c3dhcF9zdG9yZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3pzd2FwLmMtMTQwMS17XG5tbS96c3dhcC5jOjE0MDI6XHRzd3BfZW50cnlfdCBwYWdlX3N3cGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KHBhZ2UpO1xubW0venN3YXAuYy0xNDAzLVx0c3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgKm9sZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTE5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIExpbnV4IFN3YXAgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgc3dhcCBtZWNoYW5pc20sIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgcGFnZV9zd2FwX2VudHJ5YCBpcyBkZWZpbmVkLiBJJiMzOTt2ZSBiZWVuIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBpdCYjMzk7cyBsZWFkaW5nIG1lIGludG8gdGhlIGtlcm5lbCBoZWFkZXJzLiBOb3csIGxldCYjMzk7cyBzZWUuLi4gV2FpdCBhIG1pbnV0ZSwgSSByZW1lbWJlciBub3chIGBwYWdlX3N3YXBfZW50cnlgIGlzIGFjdHVhbGx5IGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBzd2FwLXJlbGF0ZWQgc3RydWN0dXJlcyB3b3VsZCBuYXR1cmFsbHkgcmVzaWRlIHRoZXJlLiBHb3QgaXQuIE5vdyBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gVGhpcyBzaG91bGQgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHBhZ2Ugc3dhcHBpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV9zd2FwX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmg9MjQyPXN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0yODAtXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDoyODE6c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBwYWdlX3N3YXBfZW50cnkoc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0yODIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MjIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHBhZ2Vfc3dhcF9lbnRyeWAgRGVmaW5pdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHBhZ2Vfc3dhcF9lbnRyeWAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlLCBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgY3VycmVudCBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgcHJvYmFibHkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBhbmQgcGVyaGFwcyB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBwYWdpbmcgb3Igc3dhcCBzcGFjZSBtYW5hZ2VtZW50IG1vZHVsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBrZXkgZmllbGRzLiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIGRhdGEgaXQmIzM5O3Mgc3RvcmluZyDigJMgbGlrZSB0aGUgcGh5c2ljYWwgcGFnZSBudW1iZXIsIGl0cyBzdGF0dXMgKHByZXNlbnQsIHN3YXBwZWQgb3V0LCBldGMuKSwgYW5kIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhLCBtYXliZSBhIHJlZmVyZW5jZSBjb3VudC4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIG92ZXJhbGwgZGVzaWduLiBEb2VzIGl0IGltcGxlbWVudCBhIHNwZWNpZmljIHBhZ2UgcmVwbGFjZW1lbnQgYWxnb3JpdGhtPyBJcyBpdCB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIHN3YXAgc3BhY2Ugb3JnYW5pemF0aW9uPyBUaGUgZGV0YWlscyBhcmUgY3J1Y2lhbCBoZXJlIOKAkyBldmVyeSBiaXQgaW4gdGhhdCBzdHJ1Y3R1cmUgaGFzIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5LiBVbHRpbWF0ZWx5IEkmIzM5O20gYXNzZXNzaW5nIHRvIHNlZSBpZiBteSBleGlzdGluZyBrbm93bGVkZ2UgYWxpZ25zIHdpdGggdGhpcyBjdXJyZW50IGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4MDpcdFxuIDI4MTpcdHN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgcGFnZV9zd2FwX2VudHJ5KHN0cnVjdCBwYWdlICpwYWdlKVxuIDI4MjpcdHtcbiAyODM6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuIDI4NDpcdFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIDI4NTpcdFxuIDI4NjpcdFx0ZW50cnkudmFsICYjNDM7PSBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSk7XG4gMjg3Olx0XHRyZXR1cm4gZW50cnk7XG4gMjg4Olx0fVxuIDI4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTd2FwIFdyaXRlIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBgcGFnZV9zd2FwX2VudHJ5YCBkb2VzIHByZWNpc2VseSB3aGF0IEkgZXhwZWN0ZWQgd2l0aCBgZm9saW8tJmd0O3N3YXAudmFsICYjNDM7PSBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSlgLiBFc3NlbnRpYWxseSwgaW5jcmVtZW50aW5nIGBlbnRyeS52YWwmIzQzOyYjNDM7YCB3aXRoaW4gYSBsb29wIHRoYXQgaXRlcmF0ZXMgZnJvbSBgMGAgdG8gYGZvbGlvX25yX3BhZ2VzKGZvbGlvKWAgc2hvdWxkIGFjaGlldmUgdGhlIGV4YWN0IHNhbWUgcmVzdWx0LiBJdCYjMzk7cyBhIHZhbGlkIG9wdGltaXphdGlvbiEKCkhtbSwgYnV0IHdoYXQgYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgQ2xlYXJQYWdlUmVjbGFpbShwYWdlKWAgYW5kIGBmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKWA/IGBDbGVhclBhZ2VSZWNsYWltKHBhZ2UpYCBvcGVyYXRlcyBvbiBhIHNwZWNpZmljIHBhZ2UsIHdoaWxlIGBmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKWAgdGFyZ2V0cyB0aGUgZW50aXJlIGZvbGlvLCBzcGVjaWZpY2FsbHkgdGhlIGhlYWQgcGFnZS4KCkkgc2VlIHRoZSByZWNlbnQgY2hhbmdlIGluIGBzd2FwX3dyaXRlX2VuZGA6IHRoZSBjb2RlIHNoaWZ0ZWQgZnJvbSBgc3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tJmd0O2J2ZWNzW3BdLmJ2X3BhZ2U7YCB0byBgc3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oJmFtcDtzaW8tJmd0O2J2ZWNzW3BdKTtgLiBDb25zZXF1ZW50bHksIGBDbGVhclBhZ2VSZWNsYWltKHBhZ2UpYCB3YXMgcmVwbGFjZWQgd2l0aCBgZm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbylgLgoKTm93LCB0aGUgY3J1Y2lhbCBwb2ludDogYFJlY2xhaW1gIHdhcyBkZWZpbmVkIGFzIGBQQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKWAuIEFuZCB0aGUgaW1wbGljYXRpb24gaXMgdGhhdCB0aGlzIGZsYWcgd291bGQgb25seSBiZSBzZXQgb24gdGhlIGhlYWQgcGFnZSEgTGV0JiMzOTtzIHZlcmlmeSB0aGlzIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAuIEFoLCB5ZXM6CgpgYGBjCi1QQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKQotCVRFU1RDTEVBUkZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTCkKJiM0MztGT0xJT19GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSkKJiM0MzsJRk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSkKYGBgCgpUaGUgZGVmaW5pdGlvbiBlbmZvcmNlcyB0aGF0IHRoaXMgZmxhZyBpcyBzZXQgb24gdGhlIGhlYWQgcGFnZS4gSWYgY2FsbGVkIG9uIGEgdGFpbCBwYWdlLCB0aGVyZSB3b3VsZCBiZSBhIGBWTV9CVUdfT05gLgoKVGhlcmVmb3JlLCB0aGUgb3JpZ2luYWwgYENsZWFyUGFnZVJlY2xhaW0ocGFnZSlgICptdXN0KiBoYXZlIGJlZW4gY2FsbGVkIG9uIGEgaGVhZCBwYWdlLCBvdGhlcndpc2UsIGl0IHdvdWxkIGhhdmUgcmVzdWx0ZWQgaW4gYSBjcmFzaCEgVGhlIGNoYW5nZSBpcyB2YWxpZCBiZWNhdXNlIHRoZSBmbGFnJiMzOTtzIHNjb3BlIG1hdGNoZXMgdGhlIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLgoKV2FpdCBhIG1pbnV0ZS4uLiBjb3VsZCBgc2lvLSZndDtidmVjc1twXS5idl9wYWdlYCBhY3R1YWxseSBwb2ludCB0byBhIHRhaWwgcGFnZSBpZiB0aGUgYmlvIHZlY3RvciBkb2VzIGluZGVlZCBwb2ludCB0byBhIHRhaWwgcGFnZT8gVGhhdCYjMzk7cyB0aGUgb25lIHRoaW5nIHRoYXQgY291bGQgZGlzcnVwdCB0aGlzIGxvZ2ljLiBCdXQgYHN3YXBfd3JpdGVfZW5kYCBpcyBpbnZva2VkIGFmdGVyIHRoZSBzd2FwIHdyaXRlIGNvbXBsZXRlcywgYW5kIEkmIzM5O2QgYmUgdmVyeSBzdXJwcmlzZWQgaWYgYW55IGJpbyB2ZWN0b3IgZXZlciBwb2ludHMgdG8gYSB0YWlsIHBhZ2UgZm9yIHRoYXQgb3BlcmF0aW9uLiBMZXQmIzM5O3MgY2hlY2sgaG93IGBzaW8tJmd0O2J2ZWNzYCBhcmUgcG9wdWxhdGVkIHRvIG1ha2Ugc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2lvLVx1MDAzZWJ2ZWNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9pby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfaW8uYz0zMjk9c3RhdGljIGJvb2wgc3dhcF9jYW5fbWVyZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcGFnZV9pby5jLTMzMi1cdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhmb2xpby1cdTAwM2Vzd2FwKTtcbm1tL3BhZ2VfaW8uYzozMzM6XHRzdHJ1Y3QgYmlvX3ZlYyAqbGFzdF9idiA9IFx1MDAyNmN0eC1cdTAwM2VzaW8tXHUwMDNlYnZlY3NbY3R4LVx1MDAzZXNpby1cdTAwM2Vucl9idmVjcyAtIDFdO1xubW0vcGFnZV9pby5jLTMzNC1cdHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbyA9IGJ2ZWNfZm9saW8obGFzdF9idik7XG4tLVxubW0vcGFnZV9pby5jPTM0Mj1zdGF0aWMgdm9pZCBzd2FwX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJ3KVxuLS1cbm1tL3BhZ2VfaW8uYy0zNjAtXHR9XG5tbS9wYWdlX2lvLmM6MzYxOlx0YnZlY19zZXRfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzW3Npby1cdTAwM2Vucl9idmVjc10sIGZvbGlvLCBmb2xpb19zaXplKGZvbGlvKSwgMCk7XG5tbS9wYWdlX2lvLmMtMzYyLVx0c2lvLVx1MDAzZWxlbiAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG5tbS9wYWdlX2lvLmM6MzYzOlx0aWYgKCYjNDM7JiM0MztzaW8tXHUwMDNlbnJfYnZlY3MgPT0gQVJSQVlfU0laRShzaW8tXHUwMDNlYnZlY3MpKSB7XG5tbS9wYWdlX2lvLmMtMzY0LVx0XHRpZiAocncgPT0gV1JJVEUpXG4tLVxubW0vcGFnZV9pby5jPTQ5Nj1zdGF0aWMgdm9pZCBzd2FwX3dyaXRlX2VuZChzdHJ1Y3Qgc3dhcF9pb2NiICpzaW8sIGJvb2wgZmFpbGVkKVxuLS1cbm1tL3BhZ2VfaW8uYy01MDAtXHRmb3IgKHAgPSAwOyBwIFx1MDAzYyBzaW8tXHUwMDNlbnJfYnZlY3M7IHAmIzQzOyYjNDM7KSB7XG5tbS9wYWdlX2lvLmM6NTAxOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbyhcdTAwMjZzaW8tXHUwMDNlYnZlY3NbcF0pO1xubW0vcGFnZV9pby5jLTUwMi1cbi0tXG5tbS9wYWdlX2lvLmM9NTEyPXN0YXRpYyB2b2lkIHN3YXBfZnNfd3JpdGVfY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldClcbi0tXG5tbS9wYWdlX2lvLmMtNTE3LVx0aWYgKGZhaWxlZCkge1xubW0vcGFnZV9pby5jOjUxODpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzWzBdKTtcbm1tL3BhZ2VfaW8uYy01MTktXG4tLVxubW0vcGFnZV9pby5jPTU0Nj1zdGF0aWMgdm9pZCBzd2FwX3JlYWRfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpXG4tLVxubW0vcGFnZV9pby5jLTU1MC1cdGZvciAocCA9IDA7IHAgXHUwMDNjIHNpby1cdTAwM2Vucl9idmVjczsgcCYjNDM7JiM0MzspIHtcbm1tL3BhZ2VfaW8uYzo1NTE6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFx1MDAyNnNpby1cdTAwM2VidmVjc1twXSk7XG5tbS9wYWdlX2lvLmMtNTUyLVxuLS1cbm1tL3BhZ2VfaW8uYz01OTE9c3RhdGljIHZvaWQgc3dhcF9iZGV2X3N1Ym1pdF93cml0ZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eClcbi0tXG5tbS9wYWdlX2lvLmMtNTk1LVxubW0vcGFnZV9pby5jOjU5NjpcdGJpb19pbml0KGJpbywgY3R4LVx1MDAzZXNpcy1cdTAwM2ViZGV2LCBzaW8tXHUwMDNlYnZlY3MsIEFSUkFZX1NJWkUoc2lvLVx1MDAzZWJ2ZWNzKSxcbm1tL3BhZ2VfaW8uYy01OTctXHRcdFx0UkVRX09QX1dSSVRFIHwgUkVRX1NXQVApO1xuLS1cbm1tL3BhZ2VfaW8uYz02MTE9c3RhdGljIHZvaWQgc3dhcF9iZGV2X3N1Ym1pdF9yZWFkKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KVxuLS1cbm1tL3BhZ2VfaW8uYy02MTUtXG5tbS9wYWdlX2lvLmM6NjE2Olx0YmlvX2luaXQoYmlvLCBjdHgtXHUwMDNlc2lzLVx1MDAzZWJkZXYsIHNpby1cdTAwM2VidmVjcywgQVJSQVlfU0laRShzaW8tXHUwMDNlYnZlY3MpLFxubW0vcGFnZV9pby5jLTYxNy1cdFx0XHRSRVFfT1BfUkVBRCk7XG4tLVxubW0vcGFnZV9pby5jPTY1ND1zdGF0aWMgdm9pZCBzd2FwX2ZzX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgaW50IHJ3KVxuLS1cbm1tL3BhZ2VfaW8uYy02NjAtXHRpbml0X3N5bmNfa2lvY2IoXHUwMDI2c2lvLVx1MDAzZWlvY2IsIGN0eC1cdTAwM2VzaXMtXHUwMDNlc3dhcF9maWxlKTtcbm1tL3BhZ2VfaW8uYzo2NjE6XHRzaW8tXHUwMDNlaW9jYi5raV9wb3MgPSBzd2FwX2Rldl9wb3MoYnZlY19mb2xpbyhcdTAwMjZzaW8tXHUwMDNlYnZlY3NbMF0pLVx1MDAzZXN3YXApO1xubW0vcGFnZV9pby5jLTY2Mi1cdGlmIChydyA9PSBXUklURSlcbi0tXG5tbS9wYWdlX2lvLmMtNjY3LVx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBydyA9PSBXUklURSA/IElURVJfU09VUkNFIDogSVRFUl9ERVNULFxubW0vcGFnZV9pby5jOjY2ODpcdFx0XHRzaW8tXHUwMDNlYnZlY3MsIHNpby1cdTAwM2Vucl9idmVjcywgc2lvLVx1MDAzZWxlbik7XG5tbS9wYWdlX2lvLmMtNjY5LVx0cmV0ID0gc2lvLVx1MDAzZWlvY2Iua2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlc3dhcF9ydyhcdTAwMjZzaW8tXHUwMDNlaW9jYiwgXHUwMDI2aXRlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyBgQ2xlYXJQYWdlUmVjbGFpbWAgYW5kIGBmb2xpb19jbGVhcl9yZWNsYWltYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIHRoaXMgYGJ2ZWNfc2V0X2ZvbGlvYCBmdW5jdGlvbiBpcyBzZXR0aW5nIHRoZSBgYnZfcGFnZWAgZmllbGQgdG8gdGhlIGZvbGlvJiMzOTtzIGhlYWQgcGFnZS4gVGhhdCBtZWFucyB0aGUgYHNpby0mZ3Q7YnZlY3NbcF0uYnZfcGFnZWAgcG9pbnRlciAqYWxyZWFkeSogcG9pbnRlZCB0byB0aGF0IHNhbWUgaGVhZCBwYWdlLiBTbywgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgaGVhZCBwYWdlLCBgQ2xlYXJQYWdlUmVjbGFpbShwYWdlKWAgYW5kIGBmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKWAgc2hvdWxkIGVzc2VudGlhbGx5IGJlIGRvaW5nIHRoZSBleGFjdCBzYW1lIHRoaW5nOyB0aGVyZSYjMzk7cyBubyByZWFsIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZSB0aGVyZS4gVGhleSYjMzk7cmUganVzdCBjbGVhcmluZyB0aGUgcmVjbGFpbSBiaXQgb24gdGhlIHNhbWUgdW5kZXJseWluZyBwYWdlLgoKQnV0LCBoYW5nIG9uIGEgc2Vjb25kLi4uIFRoaXMgbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSB0cmFuc2l0aW9uIHRvIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpb2AuIFdl4oCZdmUgY2hhbmdlZCB0aGUgY29kZSB0byBhc3NvY2lhdGUgYmxrZ3MgZnJvbSB0aGUgZm9saW8gaW5zdGVhZCBvZiB0aGUgcGFnZS4gTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZWAgdG8gbWFrZSBzdXJlIG5vdGhpbmcgY3J1Y2lhbCBpcyBiZWluZyBtaXNzZWQgZHVyaW5nIHRoZSB0cmFuc2l0aW9uIHRvIGZvbGlvcy4gTmVlZCB0byBjb25maXJtIHRoZSBibGtnIGFzc29jaWF0aW9uIGlzIHRoZSBzYW1lIGluIGJvdGggY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0OTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBhIFJlY2VudCBDb2RlIENoYW5nZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBTb21ldGhpbmcmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBNeSBndXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbmFsaXR5LCB3aGF0ZXZlciBpdCBpcywgd2FzIGFjdHVhbGx5ICpyZW1vdmVkKiBpbiB0aGlzIGxhdGVzdCBwYXRjaC4gSXQmIzM5O3MgdGhhdCBuYWdnaW5nIGZlZWxpbmcgeW91IGdldCB3aGVuIHlvdSYjMzk7dmUgYmVlbiB3b3JraW5nIHdpdGggdGhpcyBjb2RlIGJhc2UgZm9yIGEgd2hpbGUuIExldCBtZSBkb3VibGUtY2hlY2suIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IG1vZHVsZXMsIHRoZSBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdvdWxkIGJlIGluIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpb2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHRoZSBrZXkgbG9naWMgaWYgaXQgKndhcyogcmVtb3ZlZCwgb3Igd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHNvbWUgaW5kaWNhdGlvbiBvZiBob3cgaXQgd2FzIGFsdGVyZWQsIG9yIG1vdmVkLiBHb3R0YSBjb25maXJtIHRoYXQgYXNzdW1wdGlvbiBiZWZvcmUgSSBnbyBkb3duIGFueSByYWJiaXQgaG9sZXMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9pby5jPTI2Mz1zdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4tLVxubW0vcGFnZV9pby5jLTI3OC1cbm1tL3BhZ2VfaW8uYzoyNzk6c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vcGFnZV9pby5jLTI4MC17XG4tLVxubW0vcGFnZV9pby5jPTI5Nj1zdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4tLVxubW0vcGFnZV9pby5jLTI5OS19XG5tbS9wYWdlX2lvLmM6MzAwOnN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3BhZ2VfaW8uYy0zMDEte1xuLS1cbm1tL3BhZ2VfaW8uYz01OTE9c3RhdGljIHZvaWQgc3dhcF9iZGV2X3N1Ym1pdF93cml0ZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eClcbi0tXG5tbS9wYWdlX2lvLmMtNTk5LVx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbm1tL3BhZ2VfaW8uYzo2MDA6XHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhiaW8sIGJpb19maXJzdF9mb2xpb19hbGwoYmlvKSk7XG5tbS9wYWdlX2lvLmMtNjAxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpb2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uIOKAkyB3aGF04oCZcyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtPyBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIGJpb2xvZ2ljYWwgYXNzb2NpYXRpb24sIGxpa2VseSBkYXRhIGxpbmthZ2UsIGNvbnNpZGVyaW5nIHRoZSAmIzM0O2JpbyYjMzQ7IGFuZCAmIzM0O2Fzc29jaWF0ZSYjMzQ7IGtleXdvcmRzLiBUaGUgJiMzNDtibGtnJiMzNDsgYW5kICYjMzQ7Zm9saW8mIzM0OyBwYXJ0cyBzdWdnZXN0IGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIG9yIHJlY29yZC1rZWVwaW5nIGZvcm1hdCwgbWF5YmUgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgYmFja2luZyBzdG9yYWdlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgYXNzb2NpYXRpb25zIGl0JiMzOTtzIGJ1aWxkaW5nLiBJcyBpdCBsaW5raW5nIGJpb2xvZ2ljYWwgZW50aXRpZXMgKGdlbmVzLCBwcm90ZWlucywgcGF0aHdheXMsIGV0Yy4pPyBJcyBpdCBhc3NvY2lhdGluZyBkYXRhIHdpdGggYSBmb2xpby1iYXNlZCBzeXN0ZW0gZm9yIHRyYWNraW5nL21hbmFnZW1lbnQ/IFRoaXMgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwb3RlbnRpYWwgdXNlIGNhc2VzIGFuZCBsaW1pdGF0aW9ucy4gSSBuZWVkIHRvIGFzc2VzcyBob3cgaXQgZml0cyB3aXRoaW4gdGhlIHdvcmtmbG93IOKAkyBpcyBpdCBhIGNyaXRpY2FsIHN0ZXAsIGEgaGVscGVyIGZ1bmN0aW9uLCBvciBwYXJ0IG9mIGEgbGFyZ2VyIHByb2Nlc3M/IExldCYjMzk7cyBnZXQgdG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQgaXQmIzM5O3MgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9pby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzk6XHRzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gMjgwOlx0e1xuIDI4MTpcdFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcbiAyODI6XHRcbiAyODM6XHRcdGlmICghZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpXG4gMjg0Olx0XHRcdHJldHVybjtcbiAyODU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAyODY6XHRcdGNzcyA9IGZvbGlvX21lbWNnX2Jsa2dfY3NzKGZvbGlvKTtcbiAyODc6XHRcdGlmIChjc3MgXHUwMDI2XHUwMDI2ICFjc3NfdHJ5Z2V0KGNzcykpXG4gMjg4Olx0XHRcdGNzcyA9IE5VTEw7XG4gMjg5Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAyOTA6XHRcbiAyOTE6XHRcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2NzcyhiaW8sIGNzcyk7XG4gMjkyOlx0XHRpZiAoY3NzKVxuIDI5MzpcdFx0XHRjc3NfcHV0KGNzcyk7XG4gMjk0Olx0fVxuIDI5NTpcdCNlbHNlXG4gMjk2Olx0c3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuIDI5NzpcdHtcbiAyOTg6XHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY4MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDU3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlY2VudCBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBhIHN0cmFpZ2h0Zm9yd2FyZCByZW5hbWU6IGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlYCB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbHNpdGUgdXBkYXRlLiBUaGF0JiMzOTtzIGp1c3QgdGlkeWluZyB1cCwgbGlrZWx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgRm9saW8gdHJhbnNpdGlvbiwgbm90IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBvbiBpdHMgb3duLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgYF9fc3dhcF93cml0ZXBhZ2VgIHRvIGBfX3N3YXBfd3JpdGVvdXRgIHJlbmFtZSwgYWdhaW4sIHNlZW1zIGZhaXJseSBpbm5vY3VvdXMuIEp1c3QgYSBuYW1lIGNoYW5nZS4KCk5vdywgdGhpcyBgUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClgIHRvIGBGT0xJT19GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlgIGNoYW5nZSBpcyBhIGJpdCBtb3JlIHN1YnN0YW50aWFsLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBtb3ZpbmcgZnJvbSBwYWdlLWxldmVsIGZsYWdzIHRvIGZvbGlvLWxldmVsIGZsYWdzLCB3aGljaCBpcyBhYnNvbHV0ZWx5IHRoZSBkaXJlY3Rpb24gd2UmIzM5O3JlIGhlYWRlZC4gVGhpcyB0cmFuc2Zvcm1zIHRoZSBnZW5lcmF0ZWQgZnVuY3Rpb25zIGZyb20gYFBhZ2VSZWNsYWltYCwgYFNldFBhZ2VSZWNsYWltYCwgYW5kIHNvIG9uLCB0byB0aGUgZm9saW8tYmFzZWQgY291bnRlcnBhcnRzLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIGNhbGxlcnMgaW4gYG1tL3BhZ2VfaW8uY2AsIGBtbS96c3dhcC5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vc3dhcC5oYCwgYW5kIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAgdG8gdXNlIHRoZSBuZXcgYGZvbGlvXypgIGZ1bmN0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7YXJlIHRoZXJlIG90aGVyIGNhbGxlcnMgb2YgYFBhZ2VSZWNsYWltYCB0aGF0IGFyZW4mIzM5O3QgYWRkcmVzc2VkIGJ5IHRoaXMgcGF0Y2g/JiMzNDsgSSBxdWlja2x5IHJlYWxpemVkIHRoZSBkaWZmIEkmIzM5O20gbG9va2luZyBhdCAqaXMqIHRoZSBlbnRpcmUgcGF0Y2gsIHdoaWNoIG1ha2VzIG15IGxpZmUgYSBsaXR0bGUgZWFzaWVyLgoKV2FpdCBhIHNlY29uZC4uLkkmIzM5O20gcHJldHR5IHN1cmUgYFBhZ2VSZWNsYWltYCBpcyBhbHNvIHVzZWQgaW4gYG1tL3Ztc2Nhbi5jYCEgRGlkIHRoZSBwYXRjaCBhY2NvdW50IGZvciB0aGF0PyAqUXVpY2tseSBjaGVja2luZy4uLiogSG1tLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBwYXRjaCBhbHNvIHVwZGF0ZWQgYG1tL3Ztc2Nhbi5jYC4uLgoKT2theSwgSSBuZWVkIHRvIGdvIHNlZSBpZiB0aGUgZnVuY3Rpb24gYFBhZ2VSZWNsYWltYCBpcyBzdGlsbCBpbiB0aGUgdHJlZSwgYmVjYXVzZSwgYnkgdGhlIGxvb2tzIG9mIGl0LCBpdCBtYXkgbm90IGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BhZ2VSZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MjIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIE1pc3NpbmcgYFBhZ2VSZWNsYWltYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBgUGFnZVJlY2xhaW1gIG1vZHVsZSB3YXMgc3RpbGwgcGFydCBvZiB0aGUgdHJlZS4gQnV0IHNvbWV0aGluZyYjMzk7cyBjbGVhcmx5IHNoaWZ0ZWQsIGJlY2F1c2UgaXQmIzM5O3Mgbm8gbG9uZ2VyIGFwcGVhcmluZyB3aGVyZSBJIGV4cGVjdGVkIGl0IHRvIGJlLiBUaGlzIHdhcnJhbnRzIGltbWVkaWF0ZSBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZGV0ZXJtaW5lIGl0cyBjdXJyZW50IHN0YXR1cyBpcyB0aGF0IGBmb2xpb190ZXN0X3JlY2xhaW1gIHdoaWNoIHNob3VsZCBpbnRlcmFjdCB3aXRoIGBQYWdlUmVjbGFpbWAuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoYXQgdGVsbHMgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3Rlc3RfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTIyMT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9mb2xpb19zZXEoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjQ1LVx0ZWxzZSBpZiAoKCFmb2xpb19pc19maWxlX2xydShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHx8XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjI0NjpcdFx0IChmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yNDctXHRcdCAgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkpKVxuLS1cbm1tL2ZpbGVtYXAuYz0xNjU2PXZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZmlsZW1hcC5jLTE2NjYtXHQgKi9cbm1tL2ZpbGVtYXAuYzoxNjY3Olx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpIHtcbm1tL2ZpbGVtYXAuYy0xNjY4LVx0XHRmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTtcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jPTI3Njg9Ym9vbCBmb2xpb19tYXJrX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0yNzgzLVx0XHQgKi9cbm1tL3BhZ2Utd3JpdGViYWNrLmM6Mjc4NDpcdFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI3ODUtXHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9MTA1Nz1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTEzNi1cdFx0ICovXG5tbS92bXNjYW4uYzoxMTM3Olx0XHRpZiAod3JpdGViYWNrIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pKVxubW0vdm1zY2FuLmMtMTEzOC1cdFx0XHRzdGF0LVx1MDAzZW5yX2Nvbmdlc3RlZCAmIzQzOz0gbnJfcGFnZXM7XG4tLVxubW0vdm1zY2FuLmMtMTE5MC1cdFx0XHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jOjExOTE6XHRcdFx0ICAgIGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy0xMTkyLVx0XHRcdCAgICB0ZXN0X2JpdChQR0RBVF9XUklURUJBQ0ssIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKSkge1xuLS1cbm1tL3Ztc2Nhbi5jLTExOTctXHRcdFx0fSBlbHNlIGlmICh3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHNjKSB8fFxubW0vdm1zY2FuLmM6MTE5ODpcdFx0XHQgICAgIWZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykgfHxcbm1tL3Ztc2Nhbi5jLTExOTktXHRcdFx0ICAgICFtYXlfZW50ZXJfZnMoZm9saW8sIHNjLVx1MDAzZWdmcF9tYXNrKSB8fFxuLS1cbm1tL3Ztc2Nhbi5jLTEzNzgtXHRcdFx0XHRcdFx0bnJfcGFnZXMpO1xubW0vdm1zY2FuLmM6MTM3OTpcdFx0XHRcdGlmICghZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSlcbm1tL3Ztc2Nhbi5jLTEzODAtXHRcdFx0XHRcdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGZvbGlvX3Rlc3RfcmVjbGFpbWAgVXNhZ2UqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZm9saW9fdGVzdF9yZWNsYWltYCBpcyBiZWluZyB1c2VkIHdpdGhpbiBgbW0vdm1zY2FuLmNgIGFuZCBlbHNld2hlcmUuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCB3ZXJlIHByaW1hcmlseSBmb2N1c2VkIG9uIGBtbS9wYWdlX2lvLmNgLCBgbW0venN3YXAuY2AsIGBtbS9zd2FwZmlsZS5jYCwgYW5kIHJlbGF0ZWQgaGVhZGVycy4gSXQgc2VlbXMgb2RkIHRoYXQgYG1tL3Ztc2Nhbi5jYCB3b3VsZCBiZSB0b3VjaGVkIGlmIHRoZSBwcmltYXJ5IHRhcmdldCB3YXNuJiMzOTt0IGV4cGxpY2l0bHkgcmVsYXRlZC4KClRoZSBtb3JlIEkgdGhpbmsgYWJvdXQgaXQsIHRoZSBtb3JlIEkgc3VzcGVjdCB0aGF0IGBQYWdlUmVjbGFpbWAgbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gY29udmVydGVkIHRvIGBmb2xpb190ZXN0X3JlY2xhaW1gIGluIGEgc2VyaWVzIG9mIHByaW9yIHBhdGNoZXMuIFBlcmhhcHMgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoIGlzIHNpbXBseSB0aGUgY3VsbWluYXRpb24gb2YgdGhhdCBjb252ZXJzaW9uLCBjbGVhbmluZyB1cCB0aGUgb2xkIGBQQUdFRkxBR2AgZGVmaW5pdGlvbiBhbmQgZnVsbHkgdHJhbnNpdGlvbmluZyB0byB0aGUgYEZPTElPX0ZMQUdgIG1lY2hhbmlzbS4gSXQgY291bGQgYmUgZmluaXNoaW5nIHRoZSBqb2IgYW5kIHRoaXMgaXMgdGhlIGZpbmFsIHN0ZXAuCgpUbyBjb25maXJtIHRoaXMgaHlwb3RoZXNpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBnaXQgaGlzdG9yeS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGVuIHRoZSBgUGFnZVJlY2xhaW1gIHRvIGBmb2xpb190ZXN0X3JlY2xhaW1gIHRyYW5zaXRpb24gYmVnYW4gYW5kIHdoZW4gaXQgbWlnaHQgaGF2ZSBmdWxseSBsYW5kZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEFHRUZMQUdcXChSZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA4MAoJCQkJCQkJb3V0cHV0OiAxMjYKCQkJCQkJCXRob3VnaHRzOiAxNzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGFuZCBDbGVhbnVwOiBBIENsb3NlciBMb29rKioKCk9rYXksIHNvIHRoZSBwcm92aWRlZCBwYXRjaOKAlHllYWgsIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQgd2FzIGFwcGxpZWQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdlbnQgbGlrZSB0aGlzOiBzaW5jZSBgUGFnZVJlY2xhaW1gIHdhcyBhbHJlYWR5IGJlaW5nIHRyYW5zaXRpb25lZCB0byBgZm9saW9fdGVzdF9yZWNsYWltYCBpbiB0aGUgZXhpc3RpbmcgY29kZWJhc2UsIEkgaGFkIHRvIGVuc3VyZSB0aGUgbWFjcm8gZXhwYW5zaW9uIHdhcyBjb25zaXN0ZW50LiBSaWdodCwgdGhlIGBQQUdFRkxBR2AgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBnZW5lcmF0ZXMgKmJvdGgqIHRoZSBgUGFnZS4uLmAgYW5kIGBmb2xpb190ZXN0Xy4uLmAgZnVuY3Rpb25zLiBJdCB1c2VzIGBURVNUUEFHRUZMQUdgLCBgU0VUUEFHRUZMQUdgLCBhbmQgYENMRUFSUEFHRUZMQUdgIGludGVybmFsbHkuIEFuZCBiZWNhdXNlIGBURVNUUEFHRUZMQUdgIGdlbmVyYXRlcyBib3RoIGZ1bmN0aW9uIHZhcmlhbnRzLCBgUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClgIHdhcyBkZWZpbml0ZWx5IGNyZWF0aW5nIGJvdGggYFBhZ2VSZWNsYWltYCBhbmQgYGZvbGlvX3Rlc3RfcmVjbGFpbWAuCgpOb3csIGNoYW5naW5nIGl0IHRvIGBGT0xJT19GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlgLi4uIHRoYXQgKm9ubHkqIGdlbmVyYXRlcyB0aGUgYGZvbGlvX3Rlc3RfcmVjbGFpbWAsIGBmb2xpb19zZXRfcmVjbGFpbWAsIGBmb2xpb19jbGVhcl9yZWNsYWltYCwgYW5kIHJlbW92ZXMgdGhlIG9sZGVyIGBQYWdlUmVjbGFpbWAgZXF1aXZhbGVudHMuIFRoaXMgbWVhbnMsIHVuZGVuaWFibHksIHRoaXMgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwIGV4ZXJjaXNlLiBJdCYjMzk7cyBhYm91dCByZW1vdmluZyB0aGUgYFBhZ2VgIHZhcmlhbnRzIG9mIHRoZSBgUmVjbGFpbWAgZmxhZy4gSXQgYWxzbyByZW5hbWVzIGBfX3N3YXBfd3JpdGVwYWdlYCB0byBgX19zd2FwX3dyaXRlb3V0YCwgYW5kIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlYCB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLiBBbGwgY29zbWV0aWMuCgpMb29raW5nIGF0IHRoZSBjaGFuZ2VzIGluIGBzd2FwX3plcm9tYXBfZm9saW9fc2V0YCBhbmQgYHN3YXBfemVyb21hcF9mb2xpb19jbGVhcmAuLi4gSSYjMzk7ZCBhbHJlYWR5IGFuYWx5emVkIGl0IGVhcmxpZXIgYW5kIGtuZXcgdGhhdCBgcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKWAgaXMgdGhlIHNhbWUgdGhpbmcgYXMgYGZvbGlvLSZndDtzd2FwLnZhbCAmIzQzOyBpYC4gU28sIGluY3JlbWVudGluZyBgZW50cnkudmFsJiM0MzsmIzQzO2AgaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbC4gSXQmIzM5O3MgYW4gb3B0aW1pemF0aW9uIHRoYXQgY2xlYW5zIHVwIHJlZHVuZGFudCBjYWxscy4KClNvLCBpcyB0aGVyZSBhbnkgYWN0dWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGhlcmU/IE5vLiBJdCYjMzk7cyBhIHN0cmFpZ2h0LXVwIHJlZmFjdG9yaW5nOiBzd2FwcGluZyBgUGFnZWAgZnVuY3Rpb25zIHdpdGggYGZvbGlvYCBmdW5jdGlvbnMsIHJlbmFtaW5nLCBhbmQgdGhhdCBsaXR0bGUgb3B0aW1pemF0aW9uIGluIHRoZSBsb29wLgoKTGV0IG1lIGRvdWJsZS1jaGVjayBgc3dhcF93cml0ZV9lbmRgLiBUaGUgYGJ2ZWNfZm9saW9gIGNhbGxzIGRvIHRoZSBgcGFnZV9mb2xpb2Agb24gdGhlIGBidl9wYWdlYC4gQnV0LCBgYnZfcGFnZWAgaXMgYWxyZWFkeSB0aGUgaGVhZCBwYWdlIChzZXQgYnkgYGJ2ZWNfc2V0X2ZvbGlvYCksIHNvIGBwYWdlX2ZvbGlvYCBpcyBlZmZlY3RpdmVseSBkb2luZyBub3RoaW5nIGFuZCByZXR1cm5zIHRoZSBleGFjdCBzYW1lIGFkZHJlc3MgYXMgYmVmb3JlIChidXQgY2FzdCB0byBhIGBzdHJ1Y3QgZm9saW8gKmApLiBUaGVuLCBhbGwgdGhlIGBzZXRfcGFnZV9kaXJ0eWAsIGBDbGVhclBhZ2VSZWNsYWltYCwgYW5kIGBlbmRfcGFnZV93cml0ZWJhY2tgIGNhbGxzIGp1c3QgZ2V0IG1hcHBlZCB0byBgZm9saW9fbWFya19kaXJ0eWAsIGBmb2xpb19jbGVhcl9yZWNsYWltYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gRXhhY3Qgc2FtZSBiZWhhdmlvci4KCk9rLCBsZXQgbWUgcXVpY2tseSBnbGFuY2UgYXQgYHN3YXBfZnNfd3JpdGVfY29tcGxldGVgLiBIZXJlIHRoZSBgcGFnZV9zd2FwX2VudHJ5YCBvbiB0aGUgaGVhZCBwYWdlIGp1c3QgcmV0dXJucyBgZm9saW8tJmd0O3N3YXBgLCB3aGljaCBpcyBpZGVudGljYWwsIGFuZCB0aHVzIGBzd2FwX2Rldl9wb3MoZm9saW8tJmd0O3N3YXApYCBhbHNvIHN0YXlzIHRoZSBzYW1lLgoKQW5kIGZpbmFsbHksIGBzd2FwX2JkZXZfc3VibWl0X3dyaXRlYCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWA6IHRob3NlIGFyZSBwdXJlIGZ1bmN0aW9uIHJlbmFtZXMuCgpTbywgeWVhaCwgKmZpbmFsKiBjb25jbHVzaW9uOiBUaGlzIHBhdGNoIGlzIGEgKnB1cmUqIHJlZmFjdG9yaW5nL2NsZWFudXAuIEl0JiMzOTtzIHJlbW92aW5nIHVudXNlZCBtYWNyb3MsIHJlbmFtaW5nIGZ1bmN0aW9ucyB0byB1c2UgYGZvbGlvYCBjb252ZW50aW9ucywgYW5kIG9wdGltaXppbmcgdGhhdCBvbmUgbG9vcCBieSBhdm9pZGluZyByZXBlYXRlZCBmb2xpby9wYWdlIGNvbnZlcnNpb25zLiBUaGVyZSYjMzk7cyB6ZXJvIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwgbG9naWMuIFdvcnRoRnV6emluZz1mYWxzZS4gTm8gbmVlZCB0byB3YXN0ZSB0aW1lIGZ1enppbmcgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBwdXJlbHkgYSByZWZhY3RvcmluZyBhbmQgY2xlYW51cCBlZmZvcnQuIEl0IHJlcGxhY2VzIHBhZ2UtYmFzZWQgZnVuY3Rpb25zIGFuZCBmbGFncyB3aXRoIHRoZWlyIGZvbGlvLWJhc2VkIGVxdWl2YWxlbnRzIChlLmcuLCBjaGFuZ2luZyBQQUdFRkxBRyB0byBGT0xJT19GTEFHIGZvciAmIzM5O3JlY2xhaW0mIzM5OywgcmVuYW1pbmcgX19zd2FwX3dyaXRlcGFnZSB0byBfX3N3YXBfd3JpdGVvdXQsIGFuZCBvcHRpbWl6aW5nIGEgbG9vcCBpbiBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyIHRvIGF2b2lkIHJlZHVuZGFudCBwYWdlL2ZvbGlvIGNvbnZlcnNpb25zKS4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcgYW5kIGNsZWFudXAgZWZmb3J0LiBJdCByZXBsYWNlcyBwYWdlLWJhc2VkIGZ1bmN0aW9ucyBhbmQgZmxhZ3Mgd2l0aCB0aGVpciBmb2xpby1iYXNlZCBlcXVpdmFsZW50cyAoZS5nLiwgY2hhbmdpbmcgUEFHRUZMQUcgdG8gRk9MSU9fRkxBRyBmb3IgJiMzOTtyZWNsYWltJiMzOTssIHJlbmFtaW5nIF9fc3dhcF93cml0ZXBhZ2UgdG8gX19zd2FwX3dyaXRlb3V0LCBhbmQgb3B0aW1pemluZyBhIGxvb3AgaW4gc3dhcF96ZXJvbWFwX2ZvbGlvX3NldC9jbGVhciB0byBhdm9pZCByZWR1bmRhbnQgcGFnZS9mb2xpbyBjb252ZXJzaW9ucykuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBleGVjdXRpb24gZmxvdyBvciBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyNzo1Mi44MTk4NDM4NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjQ2MTYyMDMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcgYW5kIGNsZWFudXAgZWZmb3J0LiBJdCByZXBsYWNlcyBwYWdlLWJhc2VkIGZ1bmN0aW9ucyBhbmQgZmxhZ3Mgd2l0aCB0aGVpciBmb2xpby1iYXNlZCBlcXVpdmFsZW50cyAoZS5nLiwgY2hhbmdpbmcgUEFHRUZMQUcgdG8gRk9MSU9fRkxBRyBmb3IgJ3JlY2xhaW0nLCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCwgYW5kIG9wdGltaXppbmcgYSBsb29wIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIgdG8gYXZvaWQgcmVkdW5kYW50IHBhZ2UvZm9saW8gY29udmVyc2lvbnMpLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBleGVjdXRpb24gZmxvdyBvciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI3OjUyLjgxOTg1MDQ3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4MTM4NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTI5MDZmMTVmZjI3ZTQ3NWYyMWRiNWQ4MjlkNzlhYzRiYTViNzc4NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDAyOjI3OjUxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcXG5pbmRleCA3YTg2MzU3MmFkY2U3Li40Y2M4M2Y0MWVmMDk0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcXG5AQCAtNTkzLDggKzU5Myw4IEBAIFRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClcXG4gRk9MSU9fRkxBRyhtYXBwZWR0b2Rpc2ssIEZPTElPX0hFQURfUEFHRSlcXG4gXFxuIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqL1xcbi1QQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKVxcbi1cXHRURVNUQ0xFQVJGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpXFxuK0ZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxcbitcXHRGT0xJT19URVNUX0NMRUFSX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxcbiBGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiBcXHRGT0xJT19URVNUX0NMRUFSX0ZMQUcocmVhZGFoZWFkLCBGT0xJT19IRUFEX1BBR0UpXFxuIFxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lvLmMgYi9tbS9wYWdlX2lvLmNcXG5pbmRleCBlNGZhN2ZmZmZlOGJiLi5lMmEyNjk0MjVhYzVlIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfaW8uY1xcbisrKyBiL21tL3BhZ2VfaW8uY1xcbkBAIC0xNTksNyArMTU5LDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gXFx0aW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiBcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbi1cXHRzd3BfZW50cnlfdCBlbnRyeTtcXG4rXFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xcbkBAIC0xNjcsOCArMTY3LDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXG4gXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XFxuLVxcdFxcdGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTtcXG4gXFx0XFx0X19zd2FwX3RhYmxlX3NldF96ZXJvKGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpKTtcXG4rXFx0XFx0ZW50cnkudmFsKys7XFxuIFxcdH1cXG4gXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIFxcbkBAIC0xODIsNyArMTgyLDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbi1cXHRzd3BfZW50cnlfdCBlbnRyeTtcXG4rXFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xcbkBAIC0xOTAsOCArMTkwLDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcbiBcXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcXG4tXFx0XFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xcbiBcXHRcXHRfX3N3YXBfdGFibGVfY2xlYXJfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7XFxuK1xcdFxcdGVudHJ5LnZhbCsrO1xcbiBcXHR9XFxuIFxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcbiB9XFxuQEAgLTIwOCw3ICsyMDgsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQXJjaCBjb2RlIG1heSBoYXZlIHRvIHByZXNlcnZlIG1vcmUgZGF0YSB0aGFuIGp1c3QgdGhlIHBhZ2VcXG4rXFx0ICogQXJjaCBjb2RlIG1heSBoYXZlIHRvIHByZXNlcnZlIG1vcmUgZGF0YSB0aGFuIGp1c3QgdGhlIGZvbGlvXFxuIFxcdCAqIGNvbnRlbnRzLCBlLmcuIG1lbW9yeSB0YWdzLlxcbiBcXHQgKi9cXG4gXFx0cmV0ID0gYXJjaF9wcmVwYXJlX3RvX3N3YXAoZm9saW8pO1xcbkBAIC0yMTksNyArMjE5LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBVc2UgdGhlIHN3YXAgdGFibGUgemVybyBtYXJrIHRvIGF2b2lkIGRvaW5nIElPIGZvciB6ZXJvLWZpbGxlZFxcbi1cXHQgKiBwYWdlcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXNcXG4rXFx0ICogZm9saW9zLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpc1xcbiBcXHQgKiBhY3F1aXJlZCBpbnRlcm5hbGx5IGJ5IHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIuXFxuIFxcdCAqL1xcbiBcXHRpZiAoaXNfZm9saW9femVyb19maWxsZWQoZm9saW8pKSB7XFxuQEAgLTI0Nyw3ICsyNDcsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0fVxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuLVxcdF9fc3dhcF93cml0ZXBhZ2UoY3R4LCBmb2xpbyk7XFxuK1xcdF9fc3dhcF93cml0ZW91dChjdHgsIGZvbGlvKTtcXG4gXFx0cmV0dXJuIDA7XFxuIG91dF91bmxvY2s6XFxuIFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuQEAgLTI3Niw3ICsyNzYsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXFxuIFxcdHJldHVybiBjYW5fbWVyZ2U7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcXG4gXFxuQEAgLTI5Nyw3ICsyOTcsOSBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4tI2RlZmluZSBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pXFx0XFx0ZG8geyB9IHdoaWxlICgwKVxcbitzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rfVxcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHIFxcdTAwMjZcXHUwMDI2IENPTkZJR19CTEtfQ0dST1VQICovXFxuIFxcbiBzdHJ1Y3Qgc3dhcF9pb2NiIHtcXG5AQCAtMzY2LDcgKzM2OCw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcncpXFxuIFxcdH1cXG4gfVxcbiBcXG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xcbiBcXG5AQCAtNDk2LDEzICs0OTgsMTMgQEAgc3RhdGljIHZvaWQgc3dhcF93cml0ZV9lbmQoc3RydWN0IHN3YXBfaW9jYiAqc2lvLCBib29sIGZhaWxlZClcXG4gXFx0aW50IHA7XFxuIFxcbiBcXHRmb3IgKHAgPSAwOyBwIFxcdTAwM2Mgc2lvLVxcdTAwM2Vucl9idmVjczsgcCsrKSB7XFxuLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gc2lvLVxcdTAwM2VidmVjc1twXS5idl9wYWdlO1xcbitcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbyhcXHUwMDI2c2lvLVxcdTAwM2VidmVjc1twXSk7XFxuIFxcbiBcXHRcXHRpZiAoZmFpbGVkKSB7XFxuLVxcdFxcdFxcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbi1cXHRcXHRcXHRDbGVhclBhZ2VSZWNsYWltKHBhZ2UpO1xcbitcXHRcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0ZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpO1xcbitcXHRcXHRmb2xpb19lbmRfd3JpdGViYWNrKGZvbGlvKTtcXG4gXFx0fVxcbiBcXHRtZW1wb29sX2ZyZWUoc2lvLCBzaW9fcG9vbCk7XFxuIH1cXG5AQCAtNTEzLDE2ICs1MTUsMTYgQEAgc3RhdGljIHZvaWQgc3dhcF9mc193cml0ZV9jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxcbiBcXHRib29sIGZhaWxlZCA9IHJldCAhPSBzaW8tXFx1MDAzZWxlbjtcXG4gXFxuIFxcdGlmIChmYWlsZWQpIHtcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXFx1MDAzZWJ2ZWNzWzBdLmJ2X3BhZ2U7XFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFxcdTAwMjZzaW8tXFx1MDAzZWJ2ZWNzWzBdKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEluIHRoZSBjYXNlIG9mIHN3YXAtb3Zlci1uZnMsIHRoaXMgY2FuIGJlIGEgdGVtcG9yYXJ5IGZhaWx1cmVcXG4gXFx0XFx0ICogaWYgdGhlIHN5c3RlbSBoYXMgbGltaXRlZCBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgdHJhbnNtaXRcXG4tXFx0XFx0ICogYnVmZmVycy4gIE1hcmsgdGhlIHBhZ2UgZGlydHkgYW5kIGF2b2lkXFxuK1xcdFxcdCAqIGJ1ZmZlcnMuICBNYXJrIHRoZSBmb2xpbyBkaXJ0eSBhbmQgYXZvaWRcXG4gXFx0XFx0ICogZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlIGJ1dCByYXRlLWxpbWl0IHRoZSBtZXNzYWdlcy5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdHByX2Vycl9yYXRlbGltaXRlZChcXFwiV3JpdGUgZXJyb3IgJWxkIG9uIGRpbyBzd2FwZmlsZSAoJWxsdSlcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgIHJldCwgc3dhcF9kZXZfcG9zKHBhZ2Vfc3dhcF9lbnRyeShwYWdlKSkpO1xcbitcXHRcXHRcXHRcXHQgICByZXQsIHN3YXBfZGV2X3Bvcyhmb2xpby1cXHUwMDNlc3dhcCkpO1xcbiBcXHR9XFxuIFxcbiBcXHRzd2FwX3dyaXRlX2VuZChzaW8sIGZhaWxlZCk7XFxuQEAgLTU5NSw3ICs1OTcsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2JkZXZfc3VibWl0X3dyaXRlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KVxcbiBcXHRcXHRcXHRSRVFfT1BfV1JJVEUgfCBSRVFfU1dBUCk7XFxuIFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplID0gc2lvLVxcdTAwM2VsZW47XFxuIFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBzd2FwX2ZvbGlvX3NlY3RvcihiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xcbi1cXHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcXG4rXFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xcbiBcXG4gXFx0aWYgKGN0eC1cXHUwMDNlc2lzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTykge1xcbiBcXHRcXHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXFxuaW5kZXggZWM1ODBjNzEzMjA0Mi4uYzNmZjkxMzJkZTVlMCAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwLmhcXG4rKysgYi9tbS9zd2FwLmhcXG5AQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgc3dhcF9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gdm9pZCBzd2FwX3JlYWRfc3VibWl0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTtcXG4gdm9pZCBzd2FwX3dyaXRlX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XFxuIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rdm9pZCBfX3N3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBcXG4gLyogbGludXgvbW0vc3dhcF9zdGF0ZS5jICovXFxuIGV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZSBzd2FwX3NwYWNlIF9fcmVhZF9tb3N0bHk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXFxuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uMmZmNmRlMGE4YzM2YSAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwZmlsZS5jXFxuKysrIGIvbW0vc3dhcGZpbGUuY1xcbkBAIC0yOTgyLDcgKzI5ODIsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfc3dhcF9leHRlbnQpO1xcbiAvKlxcbiAgKiBBIGBzd2FwIGV4dGVudCcgaXMgYSBzaW1wbGUgdGhpbmcgd2hpY2ggbWFwcyBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgcGFnZXNcXG4gICogb250byBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgZGlzayBibG9ja3MuICBBIHJidHJlZSBvZiBzd2FwIGV4dGVudHMgaXNcXG4tICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlcGFnZS9zd2FwX3JlYWRfZm9saW9cXG4rICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlb3V0L3N3YXBfcmVhZF9mb2xpb1xcbiAgKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLlxcbiAgKlxcbiAgKiBJZiB0aGUgc3dhcGZpbGUgaXMgYW4gU19JU0JMSyBibG9jayBkZXZpY2UsIGEgc2luZ2xlIGV4dGVudCBpcyBpbnN0YWxsZWQuXFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggZjdjOWM4OWY2NDQ5Yy4uMzhjYjZhODMxOGE1NCAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHRmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7XFxuIFxcbiBcXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cXG4tXFx0X19zd2FwX3dyaXRlcGFnZShcXHUwMDI2Y3R4LCBmb2xpbyk7XFxuK1xcdF9fc3dhcF93cml0ZW91dChcXHUwMDI2Y3R4LCBmb2xpbyk7XFxuIFxcdHN3YXBfd3JpdGVfc3VibWl0KFxcdTAwMjZjdHgpO1xcbiBcXG4gb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyNzo1My4yNDg2OTM2MTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NjAzMjc2NTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcgYW5kIGNsZWFudXAgZWZmb3J0LiBJdCByZXBsYWNlcyBwYWdlLWJhc2VkIGZ1bmN0aW9ucyBhbmQgZmxhZ3Mgd2l0aCB0aGVpciBmb2xpby1iYXNlZCBlcXVpdmFsZW50cyAoZS5nLiwgY2hhbmdpbmcgUEFHRUZMQUcgdG8gRk9MSU9fRkxBRyBmb3IgJ3JlY2xhaW0nLCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCwgYW5kIG9wdGltaXppbmcgYSBsb29wIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIgdG8gYXZvaWQgcmVkdW5kYW50IHBhZ2UvZm9saW8gY29udmVyc2lvbnMpLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBleGVjdXRpb24gZmxvdyBvciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUyOTA2ZjE1ZmYyN2U0NzVmMjFkYjVkODI5ZDc5YWM0YmE1Yjc3ODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDAyOjI3OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uNGNjODNmNDFlZjA5NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTU5Myw4ICs1OTMsOCBAQCBURVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpXG4gRk9MSU9fRkxBRyhtYXBwZWR0b2Rpc2ssIEZPTElPX0hFQURfUEFHRSlcbiBcbiAvKiBQR19yZWFkYWhlYWQgaXMgb25seSB1c2VkIGZvciByZWFkczsgUEdfcmVjbGFpbSBpcyBvbmx5IGZvciB3cml0ZXMgKi9cbi1QQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKVxuLVx0VEVTVENMRUFSRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKVxuK0ZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxuK1x0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlcbiBGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuIFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uY1xuaW5kZXggZTRmYTdmZmZmZThiYi4uZTJhMjY5NDI1YWM1ZSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfaW8uY1xuKysrIGIvbW0vcGFnZV9pby5jXG5AQCAtMTU5LDcgKzE1OSw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIFx0aW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbi1cdHN3cF9lbnRyeV90IGVudHJ5O1xuK1x0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuQEAgLTE2Nyw4ICsxNjcsOCBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcbi1cdFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0X3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpO1xuK1x0XHRlbnRyeS52YWwrKztcbiBcdH1cbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuQEAgLTE4Miw3ICsxODIsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbi1cdHN3cF9lbnRyeV90IGVudHJ5O1xuK1x0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuQEAgLTE5MCw4ICsxOTAsOCBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkrKykge1xuLVx0XHRlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7XG4gXHRcdF9fc3dhcF90YWJsZV9jbGVhcl96ZXJvKGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpKTtcbitcdFx0ZW50cnkudmFsKys7XG4gXHR9XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiB9XG5AQCAtMjA4LDcgKzIwOCw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKlxuLVx0ICogQXJjaCBjb2RlIG1heSBoYXZlIHRvIHByZXNlcnZlIG1vcmUgZGF0YSB0aGFuIGp1c3QgdGhlIHBhZ2VcbitcdCAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBmb2xpb1xuIFx0ICogY29udGVudHMsIGUuZy4gbWVtb3J5IHRhZ3MuXG4gXHQgKi9cbiBcdHJldCA9IGFyY2hfcHJlcGFyZV90b19zd2FwKGZvbGlvKTtcbkBAIC0yMTksNyArMjE5LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHQvKlxuIFx0ICogVXNlIHRoZSBzd2FwIHRhYmxlIHplcm8gbWFyayB0byBhdm9pZCBkb2luZyBJTyBmb3IgemVyby1maWxsZWRcbi1cdCAqIHBhZ2VzLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpc1xuK1x0ICogZm9saW9zLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpc1xuIFx0ICogYWNxdWlyZWQgaW50ZXJuYWxseSBieSBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyLlxuIFx0ICovXG4gXHRpZiAoaXNfZm9saW9femVyb19maWxsZWQoZm9saW8pKSB7XG5AQCAtMjQ3LDcgKzI0Nyw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0fVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tXHRfX3N3YXBfd3JpdGVwYWdlKGN0eCwgZm9saW8pO1xuK1x0X19zd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pO1xuIFx0cmV0dXJuIDA7XG4gb3V0X3VubG9jazpcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG5AQCAtMjc2LDcgKzI3Niw3IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiBcdHJldHVybiBjYW5fbWVyZ2U7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzO1xuIFxuQEAgLTI5Nyw3ICsyOTcsOSBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4ge1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuLSNkZWZpbmUgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShiaW8sIGZvbGlvKVx0XHRkbyB7IH0gd2hpbGUgKDApXG4rc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbit9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyBcdTAwMjZcdTAwMjYgQ09ORklHX0JMS19DR1JPVVAgKi9cbiBcbiBzdHJ1Y3Qgc3dhcF9pb2NiIHtcbkBAIC0zNjYsNyArMzY4LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9hZGRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBydylcbiBcdH1cbiB9XG4gXG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXG5AQCAtNDk2LDEzICs0OTgsMTMgQEAgc3RhdGljIHZvaWQgc3dhcF93cml0ZV9lbmQoc3RydWN0IHN3YXBfaW9jYiAqc2lvLCBib29sIGZhaWxlZClcbiBcdGludCBwO1xuIFxuIFx0Zm9yIChwID0gMDsgcCBcdTAwM2Mgc2lvLVx1MDAzZW5yX2J2ZWNzOyBwKyspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbcF0uYnZfcGFnZTtcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzW3BdKTtcbiBcbiBcdFx0aWYgKGZhaWxlZCkge1xuLVx0XHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuLVx0XHRcdENsZWFyUGFnZVJlY2xhaW0ocGFnZSk7XG4rXHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4gXHRcdH1cbi1cdFx0ZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpO1xuK1x0XHRmb2xpb19lbmRfd3JpdGViYWNrKGZvbGlvKTtcbiBcdH1cbiBcdG1lbXBvb2xfZnJlZShzaW8sIHNpb19wb29sKTtcbiB9XG5AQCAtNTEzLDE2ICs1MTUsMTYgQEAgc3RhdGljIHZvaWQgc3dhcF9mc193cml0ZV9jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxuIFx0Ym9vbCBmYWlsZWQgPSByZXQgIT0gc2lvLVx1MDAzZWxlbjtcbiBcbiBcdGlmIChmYWlsZWQpIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbMF0uYnZfcGFnZTtcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzWzBdKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogSW4gdGhlIGNhc2Ugb2Ygc3dhcC1vdmVyLW5mcywgdGhpcyBjYW4gYmUgYSB0ZW1wb3JhcnkgZmFpbHVyZVxuIFx0XHQgKiBpZiB0aGUgc3lzdGVtIGhhcyBsaW1pdGVkIG1lbW9yeSBmb3IgYWxsb2NhdGluZyB0cmFuc21pdFxuLVx0XHQgKiBidWZmZXJzLiAgTWFyayB0aGUgcGFnZSBkaXJ0eSBhbmQgYXZvaWRcbitcdFx0ICogYnVmZmVycy4gIE1hcmsgdGhlIGZvbGlvIGRpcnR5IGFuZCBhdm9pZFxuIFx0XHQgKiBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUgYnV0IHJhdGUtbGltaXQgdGhlIG1lc3NhZ2VzLlxuIFx0XHQgKi9cbiBcdFx0cHJfZXJyX3JhdGVsaW1pdGVkKFwiV3JpdGUgZXJyb3IgJWxkIG9uIGRpbyBzd2FwZmlsZSAoJWxsdSlcXG5cIixcbi1cdFx0XHRcdCAgIHJldCwgc3dhcF9kZXZfcG9zKHBhZ2Vfc3dhcF9lbnRyeShwYWdlKSkpO1xuK1x0XHRcdFx0ICAgcmV0LCBzd2FwX2Rldl9wb3MoZm9saW8tXHUwMDNlc3dhcCkpO1xuIFx0fVxuIFxuIFx0c3dhcF93cml0ZV9lbmQoc2lvLCBmYWlsZWQpO1xuQEAgLTU5NSw3ICs1OTcsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2JkZXZfc3VibWl0X3dyaXRlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KVxuIFx0XHRcdFJFUV9PUF9XUklURSB8IFJFUV9TV0FQKTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgPSBzaW8tXHUwMDNlbGVuO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbi1cdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuK1x0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VzaXMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTykge1xuIFx0XHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IGVjNTgwYzcxMzIwNDIuLmMzZmY5MTMyZGU1ZTAgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTI3OSw3ICsyNzksNyBAQCB2b2lkIHN3YXBfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gdm9pZCBzd2FwX3JlYWRfc3VibWl0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTtcbiB2b2lkIHN3YXBfd3JpdGVfc3VibWl0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTtcbiBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gLyogbGludXgvbW0vc3dhcF9zdGF0ZS5jICovXG4gZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHN3YXBfc3BhY2UgX19yZWFkX21vc3RseTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uMmZmNmRlMGE4YzM2YSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0yOTgyLDcgKzI5ODIsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfc3dhcF9leHRlbnQpO1xuIC8qXG4gICogQSBgc3dhcCBleHRlbnQnIGlzIGEgc2ltcGxlIHRoaW5nIHdoaWNoIG1hcHMgYSBjb250aWd1b3VzIHJhbmdlIG9mIHBhZ2VzXG4gICogb250byBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgZGlzayBibG9ja3MuICBBIHJidHJlZSBvZiBzd2FwIGV4dGVudHMgaXNcbi0gKiBidWlsdCBhdCBzd2Fwb24gdGltZSBhbmQgaXMgdGhlbiB1c2VkIGF0IHN3YXBfd3JpdGVwYWdlL3N3YXBfcmVhZF9mb2xpb1xuKyAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZW91dC9zd2FwX3JlYWRfZm9saW9cbiAgKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLlxuICAqXG4gICogSWYgdGhlIHN3YXBmaWxlIGlzIGFuIFNfSVNCTEsgYmxvY2sgZGV2aWNlLCBhIHNpbmdsZSBleHRlbnQgaXMgaW5zdGFsbGVkLlxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBmN2M5Yzg5ZjY0NDljLi4zOGNiNmE4MzE4YTU0IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTEwNTAsNyArMTA1MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7XG4gXG4gXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cbi1cdF9fc3dhcF93cml0ZXBhZ2UoXHUwMDI2Y3R4LCBmb2xpbyk7XG4rXHRfX3N3YXBfd3JpdGVvdXQoXHUwMDI2Y3R4LCBmb2xpbyk7XG4gXHRzd2FwX3dyaXRlX3N1Ym1pdChcdTAwMjZjdHgpO1xuIFxuIG91dDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI3OjUzLjI0ODY5NTAxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjkxNDU4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgRm9saW8tUmVsYXRlZCBTd2FwIEVudHJ5IENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0J3MgcmVuYW1pbmcgc29tZSBmbGFncywgY2xlYW5pbmcgdXAgc29tZSBjb2RlIGFyb3VuZCBmb2xpb3MgaW4gYG1tL3BhZ2VfaW8uY2AgYW5kIGBtbS96c3dhcC5jYCwgbm90aGluZyB0b28gZXhjaXRpbmcgdGhlcmUuIEJ1dCwgd2FpdCwgSSBzZWUgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldGAgYW5kIGBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXJgLiBUaGV5J3ZlIGNoYW5nZWQgaG93IHRoZSBgc3dwX2VudHJ5X3QgZW50cnlgIGlzIGhhbmRsZWQuIEJlZm9yZSwgaXQgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgY1xuLVx0c3dwX2VudHJ5X3QgZW50cnk7XG4rXHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4uLi5cbi1cdFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0X3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpO1xuK1x0XHRlbnRyeS52YWwrKztcbmBgYFxuXG5UaGV5J3JlIG5vdyBpbml0aWFsaXppbmcgYGVudHJ5YCB3aXRoIGBmb2xpby1cdTAwM2Vzd2FwYCBhbmQgaW5jcmVtZW50aW5nIGl0IGluIHRoZSBsb29wIHdpdGggYGVudHJ5LnZhbCsrYCwgaW5zdGVhZCBvZiBnZXR0aW5nIHRoZSBgZW50cnlgIHdpdGggYSBjYWxsIHRvIGBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpYC4gSXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCBoYXMgdGhlIHBvdGVudGlhbCB0byBiZSBhIHNpZ25pZmljYW50IG9uZSBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuXG5cbkxldCdzIGxvb2sgYXQgYHBhZ2Vfc3dhcF9lbnRyeWAgdG8gc2VlIHdoYXQgaXQgZG9lcy5cblxuYGBgY1xuc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBwYWdlX3N3YXBfZW50cnkoc3RydWN0IHBhZ2UgKnBhZ2UpXG57XG5cdHN0cnVjdCBzd3BfZW50cnlfdCBlbnRyeTtcblx0ZW50cnkudmFsID0gcGFnZV9wcml2YXRlKHBhZ2UpO1xuXHRyZXR1cm4gZW50cnk7XG59XG5gYGBcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgcGFnZV9zd2FwX2VudHJ5YCBqdXN0IGdldHMgdGhlIGBwYWdlX3ByaXZhdGUocGFnZSlgIGFuZCBzZXRzIGl0IGludG8gdGhlIGBlbnRyeS52YWxgIGZpZWxkLiBGb3IgYSBmb2xpbywgaXNuJ3QgYGZvbGlvLVx1MDAzZXN3YXBgIHRoZSBzd2FwIGVudHJ5IGZvciB0aGUgZmlyc3QgcGFnZT9cblxuSWYgdGhpcyBpcyBhIGxhcmdlIGZvbGlvLCBkb2VzIGBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpYCByZXR1cm4gYGZvbGlvLVx1MDAzZXN3YXAudmFsICsgaWA/IExldCdzIGFzc3VtZSB0aGF0IGxhcmdlIGZvbGlvcyBhcmUgdXN1YWxseSBhc3NpZ25lZCBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2Ygc3dhcCBlbnRyaWVzLiBJbiB0aGlzIGNhc2UsIGluY3JlbWVudGluZyBgZW50cnkudmFsKytgIHNob3VsZCBiZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgc2luY2UgYGZvbGlvLVx1MDAzZXN3YXBgIHdvdWxkIHBvaW50IHRvIHRoZSBmaXJzdCBlbnRyeSBhbmQgc3VjY2Vzc2l2ZSBwYWdlcyB3aXRoaW4gdGhlIGZvbGlvIHNob3VsZCBoYXZlIHN3YXAgZW50cmllcyB3aXRoIGluY3JlbWVudGluZyB2YWx1ZXMuXG5cbkhvd2V2ZXIsIHRoZSBwcm9ibGVtIGlzIHRoYXQgYHBhZ2VfcHJpdmF0ZShwYWdlKWAgZm9yIHRhaWwgcGFnZXMgbWlnaHQgKm5vdCogYmUgc2V0IHRvIHRoZSBzd2FwIGVudHJ5ISBJIG5lZWQgdG8gY2hlY2sgaWYgYHBhZ2VfcHJpdmF0ZWAgaXMgc2V0IGNvcnJlY3RseSBmb3IgdGFpbCBwYWdlcyBpbiB0aGUgc3dhcCBjYWNoZS4gSSdtIGdvaW5nIHRvIGdyZXAgZm9yIGBwYWdlX3N3YXBfZW50cnlgIGFuZCBgZm9saW8tXHUwMDNlc3dhcGAgaW4gdGhlIGNvZGUgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIHNhZmUuIEknbGwgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgYW55IGNvZGUgdGhhdCBhc3N1bWVzIGBwYWdlX3ByaXZhdGVgIGlzIGNvcnJlY3RseSBzZXQgZm9yIHRoZXNlIHRhaWwgcGFnZXMsIGJlY2F1c2UgaWYgdGhlcmUgaXMsIHRoaXMgY2hhbmdlIGNvdWxkIGJyZWFrIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzYwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MDEuMzE3ODQyODA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTA2MTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2Vfc3dhcF9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTIxNDI9c3RhdGljIGJvb2wgdHR1X2Fub25fc3dhcGJhY2tlZF9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMTQ3LVxcdFxcdFxcdFxcdCAgICBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcXG5tbS9ybWFwLmM6MjE0ODpcXHRzd3BfZW50cnlfdCBlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShwYWdlKTtcXG5tbS9ybWFwLmMtMjE0OS1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS1cXHUwMDNldm1fbW07XFxuLS1cXG5tbS96c3dhcC5jPTEzOTg9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3pzd2FwLmMtMTQwMS17XFxubW0venN3YXAuYzoxNDAyOlxcdHN3cF9lbnRyeV90IHBhZ2Vfc3dwZW50cnkgPSBwYWdlX3N3YXBfZW50cnkocGFnZSk7XFxubW0venN3YXAuYy0xNDAzLVxcdHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksICpvbGQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjAxLjM3Mjc1NDg0NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Njg5MjMzMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBMaW51eCBTd2FwIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBzd2FwIG1lY2hhbmlzbSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBwYWdlX3N3YXBfZW50cnlgIGlzIGRlZmluZWQuIEkndmUgYmVlbiB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaXQncyBsZWFkaW5nIG1lIGludG8gdGhlIGtlcm5lbCBoZWFkZXJzLiBOb3csIGxldCdzIHNlZS4uLiBXYWl0IGEgbWludXRlLCBJIHJlbWVtYmVyIG5vdyEgYHBhZ2Vfc3dhcF9lbnRyeWAgaXMgYWN0dWFsbHkgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHN3YXAtcmVsYXRlZCBzdHJ1Y3R1cmVzIHdvdWxkIG5hdHVyYWxseSByZXNpZGUgdGhlcmUuIEdvdCBpdC4gTm93IEkgY2FuIG1vdmUgZm9yd2FyZCB3aXRoIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gVGhpcyBzaG91bGQgaGVscCBtZSBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHBhZ2Ugc3dhcHBpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODowNC4zNDE2ODAzODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NzA5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9zd2FwX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oPTI0Mj1zdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0yODAtXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6MjgxOnN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgcGFnZV9zd2FwX2VudHJ5KHN0cnVjdCBwYWdlICpwYWdlKVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTI4Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjA0LjM4NzM1NTA5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzg1MDQxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgcGFnZV9zd2FwX2VudHJ5YCBEZWZpbml0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHBhZ2Vfc3dhcF9lbnRyeWAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlLCBob3cgaXQncyBkZWZpbmVkIGFuZCB1c2VkIGluIHJlbGF0aW9uIHRvIHRoZSBjdXJyZW50IHN5c3RlbSdzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHByb2JhYmx5IG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywgYW5kIHBlcmhhcHMgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgcGFnaW5nIG9yIHN3YXAgc3BhY2UgbWFuYWdlbWVudCBtb2R1bGVzLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBrZXkgZmllbGRzLiBJJ2xsIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgZGF0YSBpdCdzIHN0b3Jpbmcg4oCTIGxpa2UgdGhlIHBoeXNpY2FsIHBhZ2UgbnVtYmVyLCBpdHMgc3RhdHVzIChwcmVzZW50LCBzd2FwcGVkIG91dCwgZXRjLiksIGFuZCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YSwgbWF5YmUgYSByZWZlcmVuY2UgY291bnQuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIG92ZXJhbGwgZGVzaWduLiBEb2VzIGl0IGltcGxlbWVudCBhIHNwZWNpZmljIHBhZ2UgcmVwbGFjZW1lbnQgYWxnb3JpdGhtPyBJcyBpdCB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIHN3YXAgc3BhY2Ugb3JnYW5pemF0aW9uPyBUaGUgZGV0YWlscyBhcmUgY3J1Y2lhbCBoZXJlIOKAkyBldmVyeSBiaXQgaW4gdGhhdCBzdHJ1Y3R1cmUgaGFzIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5LiBVbHRpbWF0ZWx5IEknbSBhc3Nlc3NpbmcgdG8gc2VlIGlmIG15IGV4aXN0aW5nIGtub3dsZWRnZSBhbGlnbnMgd2l0aCB0aGlzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MjIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODowNy43MjU4NjIzMjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjgwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjgwOlxcdFxcbiAyODE6XFx0c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBwYWdlX3N3YXBfZW50cnkoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIDI4MjpcXHR7XFxuIDI4MzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4gMjg0OlxcdFxcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdGVudHJ5LnZhbCArPSBmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSk7XFxuIDI4NzpcXHRcXHRyZXR1cm4gZW50cnk7XFxuIDI4ODpcXHR9XFxuIDI4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MDcuNzI2MDI0NjgzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU3OTY4Mzc4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXAgV3JpdGUgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gYHBhZ2Vfc3dhcF9lbnRyeWAgZG9lcyBwcmVjaXNlbHkgd2hhdCBJIGV4cGVjdGVkIHdpdGggYGZvbGlvLVx1MDAzZXN3YXAudmFsICs9IGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKWAuIEVzc2VudGlhbGx5LCBpbmNyZW1lbnRpbmcgYGVudHJ5LnZhbCsrYCB3aXRoaW4gYSBsb29wIHRoYXQgaXRlcmF0ZXMgZnJvbSBgMGAgdG8gYGZvbGlvX25yX3BhZ2VzKGZvbGlvKWAgc2hvdWxkIGFjaGlldmUgdGhlIGV4YWN0IHNhbWUgcmVzdWx0LiBJdCdzIGEgdmFsaWQgb3B0aW1pemF0aW9uIVxuXG5IbW0sIGJ1dCB3aGF0IGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYENsZWFyUGFnZVJlY2xhaW0ocGFnZSlgIGFuZCBgZm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbylgPyBgQ2xlYXJQYWdlUmVjbGFpbShwYWdlKWAgb3BlcmF0ZXMgb24gYSBzcGVjaWZpYyBwYWdlLCB3aGlsZSBgZm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbylgIHRhcmdldHMgdGhlIGVudGlyZSBmb2xpbywgc3BlY2lmaWNhbGx5IHRoZSBoZWFkIHBhZ2UuXG5cbkkgc2VlIHRoZSByZWNlbnQgY2hhbmdlIGluIGBzd2FwX3dyaXRlX2VuZGA6IHRoZSBjb2RlIHNoaWZ0ZWQgZnJvbSBgc3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbcF0uYnZfcGFnZTtgIHRvIGBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbyhcdTAwMjZzaW8tXHUwMDNlYnZlY3NbcF0pO2AuIENvbnNlcXVlbnRseSwgYENsZWFyUGFnZVJlY2xhaW0ocGFnZSlgIHdhcyByZXBsYWNlZCB3aXRoIGBmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKWAuXG5cbk5vdywgdGhlIGNydWNpYWwgcG9pbnQ6IGBSZWNsYWltYCB3YXMgZGVmaW5lZCBhcyBgUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClgLiBBbmQgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhpcyBmbGFnIHdvdWxkIG9ubHkgYmUgc2V0IG9uIHRoZSBoZWFkIHBhZ2UhIExldCdzIHZlcmlmeSB0aGlzIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAuIEFoLCB5ZXM6XG5cbmBgYGNcbi1QQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKVxuLVx0VEVTVENMRUFSRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKVxuK0ZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxuK1x0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlcbmBgYFxuXG5UaGUgZGVmaW5pdGlvbiBlbmZvcmNlcyB0aGF0IHRoaXMgZmxhZyBpcyBzZXQgb24gdGhlIGhlYWQgcGFnZS4gSWYgY2FsbGVkIG9uIGEgdGFpbCBwYWdlLCB0aGVyZSB3b3VsZCBiZSBhIGBWTV9CVUdfT05gLlxuXG5UaGVyZWZvcmUsIHRoZSBvcmlnaW5hbCBgQ2xlYXJQYWdlUmVjbGFpbShwYWdlKWAgKm11c3QqIGhhdmUgYmVlbiBjYWxsZWQgb24gYSBoZWFkIHBhZ2UsIG90aGVyd2lzZSwgaXQgd291bGQgaGF2ZSByZXN1bHRlZCBpbiBhIGNyYXNoISBUaGUgY2hhbmdlIGlzIHZhbGlkIGJlY2F1c2UgdGhlIGZsYWcncyBzY29wZSBtYXRjaGVzIHRoZSBmdW5jdGlvbidzIHNjb3BlLlxuXG5XYWl0IGEgbWludXRlLi4uIGNvdWxkIGBzaW8tXHUwMDNlYnZlY3NbcF0uYnZfcGFnZWAgYWN0dWFsbHkgcG9pbnQgdG8gYSB0YWlsIHBhZ2UgaWYgdGhlIGJpbyB2ZWN0b3IgZG9lcyBpbmRlZWQgcG9pbnQgdG8gYSB0YWlsIHBhZ2U/IFRoYXQncyB0aGUgb25lIHRoaW5nIHRoYXQgY291bGQgZGlzcnVwdCB0aGlzIGxvZ2ljLiBCdXQgYHN3YXBfd3JpdGVfZW5kYCBpcyBpbnZva2VkIGFmdGVyIHRoZSBzd2FwIHdyaXRlIGNvbXBsZXRlcywgYW5kIEknZCBiZSB2ZXJ5IHN1cnByaXNlZCBpZiBhbnkgYmlvIHZlY3RvciBldmVyIHBvaW50cyB0byBhIHRhaWwgcGFnZSBmb3IgdGhhdCBvcGVyYXRpb24uIExldCdzIGNoZWNrIGhvdyBgc2lvLVx1MDAzZWJ2ZWNzYCBhcmUgcG9wdWxhdGVkIHRvIG1ha2Ugc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjE1LjMwNTcxMTAwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxNDU4MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNpby1cXHUwMDNlYnZlY3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfaW8uYz0zMjk9c3RhdGljIGJvb2wgc3dhcF9jYW5fbWVyZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9wYWdlX2lvLmMtMzMyLVxcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhmb2xpby1cXHUwMDNlc3dhcCk7XFxubW0vcGFnZV9pby5jOjMzMzpcXHRzdHJ1Y3QgYmlvX3ZlYyAqbGFzdF9idiA9IFxcdTAwMjZjdHgtXFx1MDAzZXNpby1cXHUwMDNlYnZlY3NbY3R4LVxcdTAwM2VzaW8tXFx1MDAzZW5yX2J2ZWNzIC0gMV07XFxubW0vcGFnZV9pby5jLTMzNC1cXHRzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8gPSBidmVjX2ZvbGlvKGxhc3RfYnYpO1xcbi0tXFxubW0vcGFnZV9pby5jPTM0Mj1zdGF0aWMgdm9pZCBzd2FwX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJ3KVxcbi0tXFxubW0vcGFnZV9pby5jLTM2MC1cXHR9XFxubW0vcGFnZV9pby5jOjM2MTpcXHRidmVjX3NldF9mb2xpbyhcXHUwMDI2c2lvLVxcdTAwM2VidmVjc1tzaW8tXFx1MDAzZW5yX2J2ZWNzXSwgZm9saW8sIGZvbGlvX3NpemUoZm9saW8pLCAwKTtcXG5tbS9wYWdlX2lvLmMtMzYyLVxcdHNpby1cXHUwMDNlbGVuICs9IGZvbGlvX3NpemUoZm9saW8pO1xcbm1tL3BhZ2VfaW8uYzozNjM6XFx0aWYgKCsrc2lvLVxcdTAwM2Vucl9idmVjcyA9PSBBUlJBWV9TSVpFKHNpby1cXHUwMDNlYnZlY3MpKSB7XFxubW0vcGFnZV9pby5jLTM2NC1cXHRcXHRpZiAocncgPT0gV1JJVEUpXFxuLS1cXG5tbS9wYWdlX2lvLmM9NDk2PXN0YXRpYyB2b2lkIHN3YXBfd3JpdGVfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpXFxuLS1cXG5tbS9wYWdlX2lvLmMtNTAwLVxcdGZvciAocCA9IDA7IHAgXFx1MDAzYyBzaW8tXFx1MDAzZW5yX2J2ZWNzOyBwKyspIHtcXG5tbS9wYWdlX2lvLmM6NTAxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFxcdTAwMjZzaW8tXFx1MDAzZWJ2ZWNzW3BdKTtcXG5tbS9wYWdlX2lvLmMtNTAyLVxcbi0tXFxubW0vcGFnZV9pby5jPTUxMj1zdGF0aWMgdm9pZCBzd2FwX2ZzX3dyaXRlX2NvbXBsZXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgbG9uZyByZXQpXFxuLS1cXG5tbS9wYWdlX2lvLmMtNTE3LVxcdGlmIChmYWlsZWQpIHtcXG5tbS9wYWdlX2lvLmM6NTE4OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFxcdTAwMjZzaW8tXFx1MDAzZWJ2ZWNzWzBdKTtcXG5tbS9wYWdlX2lvLmMtNTE5LVxcbi0tXFxubW0vcGFnZV9pby5jPTU0Nj1zdGF0aWMgdm9pZCBzd2FwX3JlYWRfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpXFxuLS1cXG5tbS9wYWdlX2lvLmMtNTUwLVxcdGZvciAocCA9IDA7IHAgXFx1MDAzYyBzaW8tXFx1MDAzZW5yX2J2ZWNzOyBwKyspIHtcXG5tbS9wYWdlX2lvLmM6NTUxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFxcdTAwMjZzaW8tXFx1MDAzZWJ2ZWNzW3BdKTtcXG5tbS9wYWdlX2lvLmMtNTUyLVxcbi0tXFxubW0vcGFnZV9pby5jPTU5MT1zdGF0aWMgdm9pZCBzd2FwX2JkZXZfc3VibWl0X3dyaXRlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KVxcbi0tXFxubW0vcGFnZV9pby5jLTU5NS1cXG5tbS9wYWdlX2lvLmM6NTk2OlxcdGJpb19pbml0KGJpbywgY3R4LVxcdTAwM2VzaXMtXFx1MDAzZWJkZXYsIHNpby1cXHUwMDNlYnZlY3MsIEFSUkFZX1NJWkUoc2lvLVxcdTAwM2VidmVjcyksXFxubW0vcGFnZV9pby5jLTU5Ny1cXHRcXHRcXHRSRVFfT1BfV1JJVEUgfCBSRVFfU1dBUCk7XFxuLS1cXG5tbS9wYWdlX2lvLmM9NjExPXN0YXRpYyB2b2lkIHN3YXBfYmRldl9zdWJtaXRfcmVhZChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eClcXG4tLVxcbm1tL3BhZ2VfaW8uYy02MTUtXFxubW0vcGFnZV9pby5jOjYxNjpcXHRiaW9faW5pdChiaW8sIGN0eC1cXHUwMDNlc2lzLVxcdTAwM2ViZGV2LCBzaW8tXFx1MDAzZWJ2ZWNzLCBBUlJBWV9TSVpFKHNpby1cXHUwMDNlYnZlY3MpLFxcbm1tL3BhZ2VfaW8uYy02MTctXFx0XFx0XFx0UkVRX09QX1JFQUQpO1xcbi0tXFxubW0vcGFnZV9pby5jPTY1ND1zdGF0aWMgdm9pZCBzd2FwX2ZzX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgaW50IHJ3KVxcbi0tXFxubW0vcGFnZV9pby5jLTY2MC1cXHRpbml0X3N5bmNfa2lvY2IoXFx1MDAyNnNpby1cXHUwMDNlaW9jYiwgY3R4LVxcdTAwM2VzaXMtXFx1MDAzZXN3YXBfZmlsZSk7XFxubW0vcGFnZV9pby5jOjY2MTpcXHRzaW8tXFx1MDAzZWlvY2Iua2lfcG9zID0gc3dhcF9kZXZfcG9zKGJ2ZWNfZm9saW8oXFx1MDAyNnNpby1cXHUwMDNlYnZlY3NbMF0pLVxcdTAwM2Vzd2FwKTtcXG5tbS9wYWdlX2lvLmMtNjYyLVxcdGlmIChydyA9PSBXUklURSlcXG4tLVxcbm1tL3BhZ2VfaW8uYy02NjctXFx0aW92X2l0ZXJfYnZlYyhcXHUwMDI2aXRlciwgcncgPT0gV1JJVEUgPyBJVEVSX1NPVVJDRSA6IElURVJfREVTVCxcXG5tbS9wYWdlX2lvLmM6NjY4OlxcdFxcdFxcdHNpby1cXHUwMDNlYnZlY3MsIHNpby1cXHUwMDNlbnJfYnZlY3MsIHNpby1cXHUwMDNlbGVuKTtcXG5tbS9wYWdlX2lvLmMtNjY5LVxcdHJldCA9IHNpby1cXHUwMDNlaW9jYi5raV9maWxwLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWFfb3BzLVxcdTAwM2Vzd2FwX3J3KFxcdTAwMjZzaW8tXFx1MDAzZWlvY2IsIFxcdTAwMjZpdGVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MTUuNTk3MTc4NzE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTgwNTAyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipBbmFseXppbmcgYENsZWFyUGFnZVJlY2xhaW1gIGFuZCBgZm9saW9fY2xlYXJfcmVjbGFpbWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGlzIGBidmVjX3NldF9mb2xpb2AgZnVuY3Rpb24gaXMgc2V0dGluZyB0aGUgYGJ2X3BhZ2VgIGZpZWxkIHRvIHRoZSBmb2xpbydzIGhlYWQgcGFnZS4gVGhhdCBtZWFucyB0aGUgYHNpby1cdTAwM2VidmVjc1twXS5idl9wYWdlYCBwb2ludGVyICphbHJlYWR5KiBwb2ludGVkIHRvIHRoYXQgc2FtZSBoZWFkIHBhZ2UuIFNvLCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGhlYWQgcGFnZSwgYENsZWFyUGFnZVJlY2xhaW0ocGFnZSlgIGFuZCBgZm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbylgIHNob3VsZCBlc3NlbnRpYWxseSBiZSBkb2luZyB0aGUgZXhhY3Qgc2FtZSB0aGluZzsgdGhlcmUncyBubyByZWFsIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZSB0aGVyZS4gVGhleSdyZSBqdXN0IGNsZWFyaW5nIHRoZSByZWNsYWltIGJpdCBvbiB0aGUgc2FtZSB1bmRlcmx5aW5nIHBhZ2UuXG5cbkJ1dCwgaGFuZyBvbiBhIHNlY29uZC4uLiBUaGlzIG1ha2VzIG1lIHdvbmRlciBhYm91dCB0aGUgdHJhbnNpdGlvbiB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLiBXZeKAmXZlIGNoYW5nZWQgdGhlIGNvZGUgdG8gYXNzb2NpYXRlIGJsa2dzIGZyb20gdGhlIGZvbGlvIGluc3RlYWQgb2YgdGhlIHBhZ2UuIExldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2VgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGNydWNpYWwgaXMgYmVpbmcgbWlzc2VkIGR1cmluZyB0aGUgdHJhbnNpdGlvbiB0byBmb2xpb3MuIE5lZWQgdG8gY29uZmlybSB0aGUgYmxrZyBhc3NvY2lhdGlvbiBpcyB0aGUgc2FtZSBpbiBib3RoIGNhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDcxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjE5LjI1NTIzMjk0NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTQ2MjA4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjIwLjg3NDcwMTkzNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYxMTc5NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBhIFJlY2VudCBDb2RlIENoYW5nZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZydzIG5vdCBxdWl0ZSByaWdodC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb25hbGl0eSwgd2hhdGV2ZXIgaXQgaXMsIHdhcyBhY3R1YWxseSAqcmVtb3ZlZCogaW4gdGhpcyBsYXRlc3QgcGF0Y2guIEl0J3MgdGhhdCBuYWdnaW5nIGZlZWxpbmcgeW91IGdldCB3aGVuIHlvdSd2ZSBiZWVuIHdvcmtpbmcgd2l0aCB0aGlzIGNvZGUgYmFzZSBmb3IgYSB3aGlsZS4gTGV0IG1lIGRvdWJsZS1jaGVjay4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgbW9kdWxlcywgdGhlIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgd291bGQgYmUgaW4gYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gc2VlIHRoZSBrZXkgbG9naWMgaWYgaXQgKndhcyogcmVtb3ZlZCwgb3Igd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgc29tZSBpbmRpY2F0aW9uIG9mIGhvdyBpdCB3YXMgYWx0ZXJlZCwgb3IgbW92ZWQuIEdvdHRhIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uIGJlZm9yZSBJIGdvIGRvd24gYW55IHJhYmJpdCBob2xlcy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODoyMy45MzU4ODM4NDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg4NjEwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfaW8uYz0yNjM9c3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxcbi0tXFxubW0vcGFnZV9pby5jLTI3OC1cXG5tbS9wYWdlX2lvLmM6Mjc5OnN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9wYWdlX2lvLmMtMjgwLXtcXG4tLVxcbm1tL3BhZ2VfaW8uYz0yOTY9c3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxcbi0tXFxubW0vcGFnZV9pby5jLTI5OS19XFxubW0vcGFnZV9pby5jOjMwMDpzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vcGFnZV9pby5jLTMwMS17XFxuLS1cXG5tbS9wYWdlX2lvLmM9NTkxPXN0YXRpYyB2b2lkIHN3YXBfYmRldl9zdWJtaXRfd3JpdGUoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpXFxuLS1cXG5tbS9wYWdlX2lvLmMtNTk5LVxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBzd2FwX2ZvbGlvX3NlY3RvcihiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xcbm1tL3BhZ2VfaW8uYzo2MDA6XFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xcbm1tL3BhZ2VfaW8uYy02MDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjI1LjYyNDc1MDExMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQyNjA0NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgZnVuY3Rpb24g4oCTIHdoYXTigJlzIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0/IEknbSBhc3N1bWluZyBpdCdzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIGJpb2xvZ2ljYWwgYXNzb2NpYXRpb24sIGxpa2VseSBkYXRhIGxpbmthZ2UsIGNvbnNpZGVyaW5nIHRoZSBcImJpb1wiIGFuZCBcImFzc29jaWF0ZVwiIGtleXdvcmRzLiBUaGUgXCJibGtnXCIgYW5kIFwiZm9saW9cIiBwYXJ0cyBzdWdnZXN0IGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIG9yIHJlY29yZC1rZWVwaW5nIGZvcm1hdCwgbWF5YmUgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgYmFja2luZyBzdG9yYWdlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgYXNzb2NpYXRpb25zIGl0J3MgYnVpbGRpbmcuIElzIGl0IGxpbmtpbmcgYmlvbG9naWNhbCBlbnRpdGllcyAoZ2VuZXMsIHByb3RlaW5zLCBwYXRod2F5cywgZXRjLik/IElzIGl0IGFzc29jaWF0aW5nIGRhdGEgd2l0aCBhIGZvbGlvLWJhc2VkIHN5c3RlbSBmb3IgdHJhY2tpbmcvbWFuYWdlbWVudD8gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHBvdGVudGlhbCB1c2UgY2FzZXMgYW5kIGxpbWl0YXRpb25zLiBJIG5lZWQgdG8gYXNzZXNzIGhvdyBpdCBmaXRzIHdpdGhpbiB0aGUgd29ya2Zsb3cg4oCTIGlzIGl0IGEgY3JpdGljYWwgc3RlcCwgYSBoZWxwZXIgZnVuY3Rpb24sIG9yIHBhcnQgb2YgYSBsYXJnZXIgcHJvY2Vzcz8gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0J3MgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDc0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6MjkuNzY3MzU3Njc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzk6XFx0c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAyODA6XFx0e1xcbiAyODE6XFx0XFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0aWYgKCFmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSlcXG4gMjg0OlxcdFxcdFxcdHJldHVybjtcXG4gMjg1OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMjg2OlxcdFxcdGNzcyA9IGZvbGlvX21lbWNnX2Jsa2dfY3NzKGZvbGlvKTtcXG4gMjg3OlxcdFxcdGlmIChjc3MgXFx1MDAyNlxcdTAwMjYgIWNzc190cnlnZXQoY3NzKSlcXG4gMjg4OlxcdFxcdFxcdGNzcyA9IE5VTEw7XFxuIDI4OTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fY3NzKGJpbywgY3NzKTtcXG4gMjkyOlxcdFxcdGlmIChjc3MpXFxuIDI5MzpcXHRcXHRcXHRjc3NfcHV0KGNzcyk7XFxuIDI5NDpcXHR9XFxuIDI5NTpcXHQjZWxzZVxcbiAyOTY6XFx0c3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxcbiAyOTc6XFx0e1xcbiAyOTg6XFx0XFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjI5Ljc2NzQzOTI3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mzk3OTQwMDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVjZW50IENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBhIHN0cmFpZ2h0Zm9yd2FyZCByZW5hbWU6IGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlYCB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbHNpdGUgdXBkYXRlLiBUaGF0J3MganVzdCB0aWR5aW5nIHVwLCBsaWtlbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBGb2xpbyB0cmFuc2l0aW9uLCBub3QgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIG9uIGl0cyBvd24uXG5cblRoZW4gdGhlcmUncyB0aGUgYF9fc3dhcF93cml0ZXBhZ2VgIHRvIGBfX3N3YXBfd3JpdGVvdXRgIHJlbmFtZSwgYWdhaW4sIHNlZW1zIGZhaXJseSBpbm5vY3VvdXMuIEp1c3QgYSBuYW1lIGNoYW5nZS5cblxuTm93LCB0aGlzIGBQQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKWAgdG8gYEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKWAgY2hhbmdlIGlzIGEgYml0IG1vcmUgc3Vic3RhbnRpYWwuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIG1vdmluZyBmcm9tIHBhZ2UtbGV2ZWwgZmxhZ3MgdG8gZm9saW8tbGV2ZWwgZmxhZ3MsIHdoaWNoIGlzIGFic29sdXRlbHkgdGhlIGRpcmVjdGlvbiB3ZSdyZSBoZWFkZWQuIFRoaXMgdHJhbnNmb3JtcyB0aGUgZ2VuZXJhdGVkIGZ1bmN0aW9ucyBmcm9tIGBQYWdlUmVjbGFpbWAsIGBTZXRQYWdlUmVjbGFpbWAsIGFuZCBzbyBvbiwgdG8gdGhlIGZvbGlvLWJhc2VkIGNvdW50ZXJwYXJ0cy4gVGhlIHBhdGNoIGFsc28gdXBkYXRlcyBjYWxsZXJzIGluIGBtbS9wYWdlX2lvLmNgLCBgbW0venN3YXAuY2AsIGBtbS9zd2FwZmlsZS5jYCwgYG1tL3N3YXAuaGAsIGFuZCBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIHRvIHVzZSB0aGUgbmV3IGBmb2xpb18qYCBmdW5jdGlvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiYXJlIHRoZXJlIG90aGVyIGNhbGxlcnMgb2YgYFBhZ2VSZWNsYWltYCB0aGF0IGFyZW4ndCBhZGRyZXNzZWQgYnkgdGhpcyBwYXRjaD9cIiBJIHF1aWNrbHkgcmVhbGl6ZWQgdGhlIGRpZmYgSSdtIGxvb2tpbmcgYXQgKmlzKiB0aGUgZW50aXJlIHBhdGNoLCB3aGljaCBtYWtlcyBteSBsaWZlIGEgbGl0dGxlIGVhc2llci5cblxuV2FpdCBhIHNlY29uZC4uLkknbSBwcmV0dHkgc3VyZSBgUGFnZVJlY2xhaW1gIGlzIGFsc28gdXNlZCBpbiBgbW0vdm1zY2FuLmNgISBEaWQgdGhlIHBhdGNoIGFjY291bnQgZm9yIHRoYXQ/ICpRdWlja2x5IGNoZWNraW5nLi4uKiBIbW0uIExldCdzIHNlZSBpZiB0aGUgcGF0Y2ggYWxzbyB1cGRhdGVkIGBtbS92bXNjYW4uY2AuLi5cblxuT2theSwgSSBuZWVkIHRvIGdvIHNlZSBpZiB0aGUgZnVuY3Rpb24gYFBhZ2VSZWNsYWltYCBpcyBzdGlsbCBpbiB0aGUgdHJlZSwgYmVjYXVzZSwgYnkgdGhlIGxvb2tzIG9mIGl0LCBpdCBtYXkgbm90IGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjM5LjE2NTM4MjA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU4MzU0MjEwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQYWdlUmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjQwLjgyMzc0OTkyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjY0NDgxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTWlzc2luZyBgUGFnZVJlY2xhaW1gKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgYFBhZ2VSZWNsYWltYCBtb2R1bGUgd2FzIHN0aWxsIHBhcnQgb2YgdGhlIHRyZWUuIEJ1dCBzb21ldGhpbmcncyBjbGVhcmx5IHNoaWZ0ZWQsIGJlY2F1c2UgaXQncyBubyBsb25nZXIgYXBwZWFyaW5nIHdoZXJlIEkgZXhwZWN0ZWQgaXQgdG8gYmUuIFRoaXMgd2FycmFudHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIExldCdzIHNlZS4uLiB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIGRldGVybWluZSBpdHMgY3VycmVudCBzdGF0dXMgaXMgdGhhdCBgZm9saW9fdGVzdF9yZWNsYWltYCB3aGljaCBzaG91bGQgaW50ZXJhY3Qgd2l0aCBgUGFnZVJlY2xhaW1gLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoYXQgdGVsbHMgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzIyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6NDQuMDkwMjAxMjkxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM5MjQxMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3Rlc3RfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yMjE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydV9nZW5fZm9saW9fc2VxKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjQ1LVxcdGVsc2UgaWYgKCghZm9saW9faXNfZmlsZV9scnUoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHx8XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoyNDY6XFx0XFx0IChmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yNDctXFx0XFx0ICAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHwgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSkpXFxuLS1cXG5tbS9maWxlbWFwLmM9MTY1Nj12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE2NjYtXFx0ICovXFxubW0vZmlsZW1hcC5jOjE2Njc6XFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpIHtcXG5tbS9maWxlbWFwLmMtMTY2OC1cXHRcXHRmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTtcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjc2OD1ib29sIGZvbGlvX21hcmtfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjc4My1cXHRcXHQgKi9cXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI3ODQ6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpXFxubW0vcGFnZS13cml0ZWJhY2suYy0yNzg1LVxcdFxcdFxcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xcbi0tXFxubW0vdm1zY2FuLmM9MTA1Nz1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMTM2LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjExMzc6XFx0XFx0aWYgKHdyaXRlYmFjayBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pKVxcbm1tL3Ztc2Nhbi5jLTExMzgtXFx0XFx0XFx0c3RhdC1cXHUwMDNlbnJfY29uZ2VzdGVkICs9IG5yX3BhZ2VzO1xcbi0tXFxubW0vdm1zY2FuLmMtMTE5MC1cXHRcXHRcXHRpZiAoY3VycmVudF9pc19rc3dhcGQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jOjExOTE6XFx0XFx0XFx0ICAgIGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy0xMTkyLVxcdFxcdFxcdCAgICB0ZXN0X2JpdChQR0RBVF9XUklURUJBQ0ssIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpKSB7XFxuLS1cXG5tbS92bXNjYW4uYy0xMTk3LVxcdFxcdFxcdH0gZWxzZSBpZiAod3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzYykgfHxcXG5tbS92bXNjYW4uYzoxMTk4OlxcdFxcdFxcdCAgICAhZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSB8fFxcbm1tL3Ztc2Nhbi5jLTExOTktXFx0XFx0XFx0ICAgICFtYXlfZW50ZXJfZnMoZm9saW8sIHNjLVxcdTAwM2VnZnBfbWFzaykgfHxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEzNzgtXFx0XFx0XFx0XFx0XFx0XFx0bnJfcGFnZXMpO1xcbm1tL3Ztc2Nhbi5jOjEzNzk6XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pKVxcbm1tL3Ztc2Nhbi5jLTEzODAtXFx0XFx0XFx0XFx0XFx0Zm9saW9fc2V0X3JlY2xhaW0oZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMjoyODo0NS42Mjk0NDc0MjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExNDUzNDU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgZm9saW9fdGVzdF9yZWNsYWltYCBVc2FnZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGZvbGlvX3Rlc3RfcmVjbGFpbWAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgZWxzZXdoZXJlLiBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCB3ZXJlIHByaW1hcmlseSBmb2N1c2VkIG9uIGBtbS9wYWdlX2lvLmNgLCBgbW0venN3YXAuY2AsIGBtbS9zd2FwZmlsZS5jYCwgYW5kIHJlbGF0ZWQgaGVhZGVycy4gSXQgc2VlbXMgb2RkIHRoYXQgYG1tL3Ztc2Nhbi5jYCB3b3VsZCBiZSB0b3VjaGVkIGlmIHRoZSBwcmltYXJ5IHRhcmdldCB3YXNuJ3QgZXhwbGljaXRseSByZWxhdGVkLlxuXG5UaGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCB0aGUgbW9yZSBJIHN1c3BlY3QgdGhhdCBgUGFnZVJlY2xhaW1gIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGNvbnZlcnRlZCB0byBgZm9saW9fdGVzdF9yZWNsYWltYCBpbiBhIHNlcmllcyBvZiBwcmlvciBwYXRjaGVzLiBQZXJoYXBzIHRoaXMgcGFydGljdWxhciBwYXRjaCBpcyBzaW1wbHkgdGhlIGN1bG1pbmF0aW9uIG9mIHRoYXQgY29udmVyc2lvbiwgY2xlYW5pbmcgdXAgdGhlIG9sZCBgUEFHRUZMQUdgIGRlZmluaXRpb24gYW5kIGZ1bGx5IHRyYW5zaXRpb25pbmcgdG8gdGhlIGBGT0xJT19GTEFHYCBtZWNoYW5pc20uIEl0IGNvdWxkIGJlIGZpbmlzaGluZyB0aGUgam9iIGFuZCB0aGlzIGlzIHRoZSBmaW5hbCBzdGVwLlxuXG5UbyBjb25maXJtIHRoaXMgaHlwb3RoZXNpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBnaXQgaGlzdG9yeS4gTGV0J3Mgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoZW4gdGhlIGBQYWdlUmVjbGFpbWAgdG8gYGZvbGlvX3Rlc3RfcmVjbGFpbWAgdHJhbnNpdGlvbiBiZWdhbiBhbmQgd2hlbiBpdCBtaWdodCBoYXZlIGZ1bGx5IGxhbmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjg6NTAuNzQzOTg0MzQ5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIyNjE2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEFHRUZMQUdcXFxcKFJlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAyOjI4OjUwLjc5MTIxNjU2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODQ5MDIwODE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBhbmQgQ2xlYW51cDogQSBDbG9zZXIgTG9vayoqXG5cbk9rYXksIHNvIHRoZSBwcm92aWRlZCBwYXRjaOKAlHllYWgsIHRoYXQncyBwcmVjaXNlbHkgd2hhdCB3YXMgYXBwbGllZC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2VudCBsaWtlIHRoaXM6IHNpbmNlIGBQYWdlUmVjbGFpbWAgd2FzIGFscmVhZHkgYmVpbmcgdHJhbnNpdGlvbmVkIHRvIGBmb2xpb190ZXN0X3JlY2xhaW1gIGluIHRoZSBleGlzdGluZyBjb2RlYmFzZSwgSSBoYWQgdG8gZW5zdXJlIHRoZSBtYWNybyBleHBhbnNpb24gd2FzIGNvbnNpc3RlbnQuIFJpZ2h0LCB0aGUgYFBBR0VGTEFHYCBtYWNybyBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIGdlbmVyYXRlcyAqYm90aCogdGhlIGBQYWdlLi4uYCBhbmQgYGZvbGlvX3Rlc3RfLi4uYCBmdW5jdGlvbnMuIEl0IHVzZXMgYFRFU1RQQUdFRkxBR2AsIGBTRVRQQUdFRkxBR2AsIGFuZCBgQ0xFQVJQQUdFRkxBR2AgaW50ZXJuYWxseS4gQW5kIGJlY2F1c2UgYFRFU1RQQUdFRkxBR2AgZ2VuZXJhdGVzIGJvdGggZnVuY3Rpb24gdmFyaWFudHMsIGBQQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKWAgd2FzIGRlZmluaXRlbHkgY3JlYXRpbmcgYm90aCBgUGFnZVJlY2xhaW1gIGFuZCBgZm9saW9fdGVzdF9yZWNsYWltYC5cblxuTm93LCBjaGFuZ2luZyBpdCB0byBgRk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpYC4uLiB0aGF0ICpvbmx5KiBnZW5lcmF0ZXMgdGhlIGBmb2xpb190ZXN0X3JlY2xhaW1gLCBgZm9saW9fc2V0X3JlY2xhaW1gLCBgZm9saW9fY2xlYXJfcmVjbGFpbWAsIGFuZCByZW1vdmVzIHRoZSBvbGRlciBgUGFnZVJlY2xhaW1gIGVxdWl2YWxlbnRzLiBUaGlzIG1lYW5zLCB1bmRlbmlhYmx5LCB0aGlzIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgY2xlYW51cCBleGVyY2lzZS4gSXQncyBhYm91dCByZW1vdmluZyB0aGUgYFBhZ2VgIHZhcmlhbnRzIG9mIHRoZSBgUmVjbGFpbWAgZmxhZy4gSXQgYWxzbyByZW5hbWVzIGBfX3N3YXBfd3JpdGVwYWdlYCB0byBgX19zd2FwX3dyaXRlb3V0YCwgYW5kIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlYCB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLiBBbGwgY29zbWV0aWMuXG5cbkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgaW4gYHN3YXBfemVyb21hcF9mb2xpb19zZXRgIGFuZCBgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyYC4uLiBJJ2QgYWxyZWFkeSBhbmFseXplZCBpdCBlYXJsaWVyIGFuZCBrbmV3IHRoYXQgYHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSlgIGlzIHRoZSBzYW1lIHRoaW5nIGFzIGBmb2xpby1cdTAwM2Vzd2FwLnZhbCArIGlgLiBTbywgaW5jcmVtZW50aW5nIGBlbnRyeS52YWwrK2AgaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbC4gSXQncyBhbiBvcHRpbWl6YXRpb24gdGhhdCBjbGVhbnMgdXAgcmVkdW5kYW50IGNhbGxzLlxuXG5TbywgaXMgdGhlcmUgYW55IGFjdHVhbCBmdW5jdGlvbmFsIGNoYW5nZSBoZXJlPyBOby4gSXQncyBhIHN0cmFpZ2h0LXVwIHJlZmFjdG9yaW5nOiBzd2FwcGluZyBgUGFnZWAgZnVuY3Rpb25zIHdpdGggYGZvbGlvYCBmdW5jdGlvbnMsIHJlbmFtaW5nLCBhbmQgdGhhdCBsaXR0bGUgb3B0aW1pemF0aW9uIGluIHRoZSBsb29wLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIGBzd2FwX3dyaXRlX2VuZGAuIFRoZSBgYnZlY19mb2xpb2AgY2FsbHMgZG8gdGhlIGBwYWdlX2ZvbGlvYCBvbiB0aGUgYGJ2X3BhZ2VgLiBCdXQsIGBidl9wYWdlYCBpcyBhbHJlYWR5IHRoZSBoZWFkIHBhZ2UgKHNldCBieSBgYnZlY19zZXRfZm9saW9gKSwgc28gYHBhZ2VfZm9saW9gIGlzIGVmZmVjdGl2ZWx5IGRvaW5nIG5vdGhpbmcgYW5kIHJldHVybnMgdGhlIGV4YWN0IHNhbWUgYWRkcmVzcyBhcyBiZWZvcmUgKGJ1dCBjYXN0IHRvIGEgYHN0cnVjdCBmb2xpbyAqYCkuIFRoZW4sIGFsbCB0aGUgYHNldF9wYWdlX2RpcnR5YCwgYENsZWFyUGFnZVJlY2xhaW1gLCBhbmQgYGVuZF9wYWdlX3dyaXRlYmFja2AgY2FsbHMganVzdCBnZXQgbWFwcGVkIHRvIGBmb2xpb19tYXJrX2RpcnR5YCwgYGZvbGlvX2NsZWFyX3JlY2xhaW1gLCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgLiBFeGFjdCBzYW1lIGJlaGF2aW9yLlxuXG5PaywgbGV0IG1lIHF1aWNrbHkgZ2xhbmNlIGF0IGBzd2FwX2ZzX3dyaXRlX2NvbXBsZXRlYC4gSGVyZSB0aGUgYHBhZ2Vfc3dhcF9lbnRyeWAgb24gdGhlIGhlYWQgcGFnZSBqdXN0IHJldHVybnMgYGZvbGlvLVx1MDAzZXN3YXBgLCB3aGljaCBpcyBpZGVudGljYWwsIGFuZCB0aHVzIGBzd2FwX2Rldl9wb3MoZm9saW8tXHUwMDNlc3dhcClgIGFsc28gc3RheXMgdGhlIHNhbWUuXG5cbkFuZCBmaW5hbGx5LCBgc3dhcF9iZGV2X3N1Ym1pdF93cml0ZWAgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgOiB0aG9zZSBhcmUgcHVyZSBmdW5jdGlvbiByZW5hbWVzLlxuXG5TbywgeWVhaCwgKmZpbmFsKiBjb25jbHVzaW9uOiBUaGlzIHBhdGNoIGlzIGEgKnB1cmUqIHJlZmFjdG9yaW5nL2NsZWFudXAuIEl0J3MgcmVtb3ZpbmcgdW51c2VkIG1hY3JvcywgcmVuYW1pbmcgZnVuY3Rpb25zIHRvIHVzZSBgZm9saW9gIGNvbnZlbnRpb25zLCBhbmQgb3B0aW1pemluZyB0aGF0IG9uZSBsb29wIGJ5IGF2b2lkaW5nIHJlcGVhdGVkIGZvbGlvL3BhZ2UgY29udmVyc2lvbnMuIFRoZXJlJ3MgemVybyBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsIGxvZ2ljLiBXb3J0aEZ1enppbmc9ZmFsc2UuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSBmdXp6aW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDgwLCJPdXRwdXRUb2tlbnMiOjEyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDI6Mjk6MDkuMjgxNDM0Nzg5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgcHVyZWx5IGEgcmVmYWN0b3JpbmcgYW5kIGNsZWFudXAgZWZmb3J0LiBJdCByZXBsYWNlcyBwYWdlLWJhc2VkIGZ1bmN0aW9ucyBhbmQgZmxhZ3Mgd2l0aCB0aGVpciBmb2xpby1iYXNlZCBlcXVpdmFsZW50cyAoZS5nLiwgY2hhbmdpbmcgUEFHRUZMQUcgdG8gRk9MSU9fRkxBRyBmb3IgJ3JlY2xhaW0nLCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCwgYW5kIG9wdGltaXppbmcgYSBsb29wIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIgdG8gYXZvaWQgcmVkdW5kYW50IHBhZ2UvZm9saW8gY29udmVyc2lvbnMpLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBleGVjdXRpb24gZmxvdyBvciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIHB1cmVseSBhIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwIGVmZm9ydC4gSXQgcmVwbGFjZXMgcGFnZS1iYXNlZCBmdW5jdGlvbnMgYW5kIGZsYWdzIHdpdGggdGhlaXIgZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4sIGNoYW5naW5nIFBBR0VGTEFHIHRvIEZPTElPX0ZMQUcgZm9yICdyZWNsYWltJywgcmVuYW1pbmcgX19zd2FwX3dyaXRlcGFnZSB0byBfX3N3YXBfd3JpdGVvdXQsIGFuZCBvcHRpbWl6aW5nIGEgbG9vcCBpbiBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyIHRvIGF2b2lkIHJlZHVuZGFudCBwYWdlL2ZvbGlvIGNvbnZlcnNpb25zKS4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmjwd[1] Phase: Running StartedAt: 2026-08-07 02:29:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmjwd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-07 02:29:20 +0000 UTC FinishedAt: 2026-08-07 02:29:25 +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,}