Name: series-workflowqqmqx Phase: Failed StartedAt: 2026-08-14 17:43:52 +0000 UTC FinishedAt: 2026-08-14 18:15:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqmqx[0] Phase: Succeeded StartedAt: 2026-08-14 17:43:52 +0000 UTC FinishedAt: 2026-08-14 18:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqmqx[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 17:43:52 +0000 UTC FinishedAt: 2026-08-14 18:15:43 +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+CgkJCTx0ZD4yMDI2LzA4LzE0IDE4OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSByZW1vdmVzIGEgYmxhbmsgbGluZSBpbiB0aGUga2VybmVsIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGFuZCBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGxpYmJwZiwgYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTg6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZDY5NjUzNWVhYWRhMjNkNzMzMDhkMDBlNDdmYjJiMmY3YjM5OWIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTg6MTU6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA2YWMxYWZjZWQyMGJmLi44MWVhZThmNzBhY2RiIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMjExMyw3ICYjNDM7MTIxMTMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbiBcdFx0fVxuIFxuLVxuIFx0XHRpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSBcdTAwMjZcdTAwMjYgdHlwZV9tYXlfYmVfbnVsbChrZl9hcmdfdHlwZSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuaW5kZXggYTUwNTQwZWY2NTIxYy4uZTVlODIyNTVhZjI0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuQEAgLTMwMyw3ICYjNDM7MzAzLDcgQEAgc3RhdGljIGludCBjb2RlZ2VuX2RhdGFzZWNzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxuIFx0XHRyZXR1cm4gLWVycm5vO1xuIFxuIFx0YnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7XG4tXHRcdC8qIG9ubHkgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIG1lbW9yeS1tYXBwZWQgaW50ZXJuYWwgbWFwcyAqL1xuJiM0MztcdFx0Lyogb25seSBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3Igc2tlbCBkYXRhIG1hcHMgKi9cbiBcdFx0aWYgKCFpc19za2VsX2RhdGEobWFwLCBtYXBfaWRlbnQsIHNpemVvZihtYXBfaWRlbnQpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC01MTAsNyAmIzQzOzUxMCw3IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRyZXR1cm4gbWFwX3N6O1xuIH1cbiBcbi0vKiBFbWl0IHR5cGUgc2l6ZSBhc3NlcnRzIGZvciBhbGwgdG9wLWxldmVsIGZpZWxkcyBpbiBtZW1vcnktbWFwcGVkIGludGVybmFsIG1hcHMuICovXG4mIzQzOy8qIEVtaXQgdHlwZSBzaXplIGFzc2VydHMgZm9yIGFsbCB0b3AtbGV2ZWwgZmllbGRzIGluIHNrZWwgZGF0YSBtYXBzLiAqL1xuIHN0YXRpYyB2b2lkIGNvZGVnZW5fYXNzZXJ0cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcbiB7XG4gXHRzdHJ1Y3QgYnRmICpidGYgPSBicGZfb2JqZWN0X19idGYob2JqKTtcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggZTU3NDg3MGZiNzE2OS4uYjc0OWMwMTc0MmVlMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC0xODQxLDkgJiM0MzsxODQxLDggQEAgc3RhdGljIHNpemVfdCBicGZfbWFwX21tYXBfc3ooY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcbiBcdHN3aXRjaCAobWFwLVx1MDAzZWRlZi50eXBlKSB7XG4gXHRjYXNlIEJQRl9NQVBfVFlQRV9BUlJBWTpcbi1cdFx0cmV0dXJuIGFycmF5X21hcF9tbWFwX3N6KG1hcC1cdTAwM2VkZWYudmFsdWVfc2l6ZSwgbWFwLVx1MDAzZWRlZi5tYXhfZW50cmllcyk7XG4gXHRjYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk6XG4tXHRcdHJldHVybiBtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemU7XG4mIzQzO1x0XHRyZXR1cm4gYXJyYXlfbWFwX21tYXBfc3oobWFwLVx1MDAzZWRlZi52YWx1ZV9zaXplLCBtYXAtXHUwMDNlZGVmLm1heF9lbnRyaWVzKTtcbiBcdGNhc2UgQlBGX01BUF9UWVBFX0FSRU5BOlxuIFx0XHRyZXR1cm4gcGFnZV9zeiAqIG1hcC1cdTAwM2VkZWYubWF4X2VudHJpZXM7XG4gXHRkZWZhdWx0OlxuQEAgLTE5NTEsNyAmIzQzOzE5NTAsNyBAQCBzdGF0aWMgYm9vbCBtYXBfaXNfbW1hcGFibGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Lypcbi1cdCAqIFRoZSBpbnRlcm5hbCBQRVJDUFUgbWFwcyBhcmUgbm90IG1tYXBibGUgYmVjYXVzZSB0aGUgdW5kZXJseWluZ1xuJiM0MztcdCAqIFRoZSBpbnRlcm5hbCBQRVJDUFUgbWFwcyBhcmUgbm90IG1tYXBhYmxlIGJlY2F1c2UgdGhlIHVuZGVybHlpbmdcbiBcdCAqIHBlcmNwdV9hcnJheSBtYXBzIGRvIG5vdCBoYXZlIG1tYXAgc3VwcG9ydC5cbiBcdCAqL1xuIFx0aWYgKG1hcC1cdTAwM2VsaWJicGZfdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVSlcbkBAIC0yODMxLDcgJiM0MzsyODMwLDcgQEAgc3RhdGljIHNpemVfdCBhZGp1c3RfcmluZ2J1Zl9zeihzaXplX3Qgc3opXG4gXHRcdHJldHVybiAwO1xuIFx0LyogS2VybmVsIGV4cGVjdHMgQlBGX01BUF9UWVBFX1JJTkdCVUYmIzM5O3MgbWF4X2VudHJpZXMgdG8gYmVcbiBcdCAqIGEgcG93ZXItb2YtMiBtdWx0aXBsZSBvZiBrZXJuZWwmIzM5O3MgcGFnZSBzaXplLiBJZiB1c2VyIGRpbGlnZW50bHlcbi1cdCAqIHNhdGlzaWZpZWQgdGhlc2UgY29uZGl0aW9ucywgcGFzcyB0aGUgc2l6ZSB0aHJvdWdoLlxuJiM0MztcdCAqIHNhdGlzZmllZCB0aGVzZSBjb25kaXRpb25zLCBwYXNzIHRoZSBzaXplIHRocm91Z2guXG4gXHQgKi9cbiBcdGlmICgoc3ogJSBwYWdlX3N6KSA9PSAwIFx1MDAyNlx1MDAyNiBpc19wb3dfb2ZfMihzeiAvIHBhZ2Vfc3opKVxuIFx0XHRyZXR1cm4gc3o7XG5AQCAtNjk4OSw3ICYjNDM7Njk4OCw3IEBAIGJwZl9vYmplY3RfX3JlbG9jX2NvZGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICptYWluX3Byb2csXG4gICogICAgJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0mIzQzO1xuICAqXG4gICogQXQgdGhpcyBwb2ludCwgd2UgcmVsb2NhdGUgc3ViQSBjYWxscywgdGhlbiBnbyBvbmUgbGV2ZWwgdXAgYW5kIGZpbmlzaCB3aXRoXG4tICogcmVsb2NhdGluIG1haW5BIGNhbGxzLiBtYWluQSBpcyBkb25lLlxuJiM0MzsgKiByZWxvY2F0aW9uIG1haW5BIGNhbGxzLiBtYWluQSBpcyBkb25lLlxuICAqXG4gICogRm9yIG1haW5CIHByb2Nlc3MgaXMgc2ltaWxhciBidXQgcmVzdWx0cyBpbiBkaWZmZXJlbnQgb3JkZXIuIFdlIHN0YXJ0IHdpdGhcbiAgKiBtYWluQiBhbmQgc2tpcCBzdWJBIGFuZCBzdWJCLCBhcyBtYWluQiBuZXZlciBjYWxscyB0aGVtIChhdCBsZWFzdFxuQEAgLTc5MzYsNyAmIzQzOzc5MzUsNyBAQCBzdGF0aWMgaW50IGxpYmJwZl9wcmVwYXJlX3Byb2dfbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4gXHRcdHByb2ctXHUwMDNlYXR0YWNoX2J0Zl9pZCA9IGJ0Zl90eXBlX2lkO1xuIFxuIFx0XHQvKiBidXQgYnkgbm93IGxpYmJwZiBjb21tb24gbG9naWMgaXMgbm90IHV0aWxpemluZ1xuLVx0XHQgKiBwcm9nLVx1MDAzZWF0YWNoX2J0Zl9vYmpfZmQvcHJvZy1cdTAwM2VhdHRhY2hfYnRmX2lkIGFueW1vcmUgYmVjYXVzZVxuJiM0MztcdFx0ICogcHJvZy1cdTAwM2VhdHRhY2hfYnRmX29ial9mZC9wcm9nLVx1MDAzZWF0dGFjaF9idGZfaWQgYW55bW9yZSBiZWNhdXNlXG4gXHRcdCAqIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGFmdGVyIG9wdHMgd2VyZSBwb3B1bGF0ZWQgYnlcbiBcdFx0ICogbGliYnBmLCBzbyB0aGlzIGNhbGxiYWNrIGhhcyB0byB1cGRhdGUgb3B0cyBleHBsaWNpdGx5IGhlcmVcbiBcdFx0ICovXG5AQCAtMTQyMTksNyAmIzQzOzE0MjE4LDcgQEAgcGVyZl9ldmVudF9yZWFkX3NpbXBsZSh2b2lkICptbWFwX21lbSwgc2l6ZV90IG1tYXBfc2l6ZSwgc2l6ZV90IHBhZ2Vfc2l6ZSxcbiBcdFx0aWYgKCgodm9pZCAqKWVoZHIpICYjNDM7IGVoZHJfc2l6ZSBcdTAwM2UgYmFzZSAmIzQzOyBtbWFwX3NpemUpIHtcbiBcdFx0XHR2b2lkICpjb3B5X3N0YXJ0ID0gZWhkcjtcbiBcdFx0XHRzaXplX3QgbGVuX2ZpcnN0ID0gYmFzZSAmIzQzOyBtbWFwX3NpemUgLSBjb3B5X3N0YXJ0O1xuLVx0XHRcdHNpemVfdCBsZW5fc2VjbmQgPSBlaGRyX3NpemUgLSBsZW5fZmlyc3Q7XG4mIzQzO1x0XHRcdHNpemVfdCBsZW5fc2Vjb25kID0gZWhkcl9zaXplIC0gbGVuX2ZpcnN0O1xuIFxuIFx0XHRcdGlmICgqY29weV9zaXplIFx1MDAzYyBlaGRyX3NpemUpIHtcbiBcdFx0XHRcdGZyZWUoKmNvcHlfbWVtKTtcbkBAIC0xNDIzMyw3ICYjNDM7MTQyMzIsNyBAQCBwZXJmX2V2ZW50X3JlYWRfc2ltcGxlKHZvaWQgKm1tYXBfbWVtLCBzaXplX3QgbW1hcF9zaXplLCBzaXplX3QgcGFnZV9zaXplLFxuIFx0XHRcdH1cbiBcbiBcdFx0XHRtZW1jcHkoKmNvcHlfbWVtLCBjb3B5X3N0YXJ0LCBsZW5fZmlyc3QpO1xuLVx0XHRcdG1lbWNweSgqY29weV9tZW0gJiM0MzsgbGVuX2ZpcnN0LCBiYXNlLCBsZW5fc2VjbmQpO1xuJiM0MztcdFx0XHRtZW1jcHkoKmNvcHlfbWVtICYjNDM7IGxlbl9maXJzdCwgYmFzZSwgbGVuX3NlY29uZCk7XG4gXHRcdFx0ZWhkciA9ICpjb3B5X21lbTtcbiBcdFx0fVxuIFxuQEAgLTE0MjUxLDcgJiM0MzsxNDI1MCw3IEBAIHN0cnVjdCBwZXJmX2J1ZmZlcjtcbiBcbiBzdHJ1Y3QgcGVyZl9idWZmZXJfcGFyYW1zIHtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHI7XG4tXHQvKiBpZiBldmVudF9jYiBpcyBzcGVjaWZpZWQsIGl0IHRha2VzIHByZWNlbmRlbmNlICovXG4mIzQzO1x0LyogaWYgZXZlbnRfY2IgaXMgc3BlY2lmaWVkLCBpdCB0YWtlcyBwcmVjZWRlbmNlICovXG4gXHRwZXJmX2J1ZmZlcl9ldmVudF9mbiBldmVudF9jYjtcbiBcdC8qIHNhbXBsZV9jYiBhbmQgbG9zdF9jYiBhcmUgaGlnaGVyLWxldmVsIGNvbW1vbi1jYXNlIGNhbGxiYWNrcyAqL1xuIFx0cGVyZl9idWZmZXJfc2FtcGxlX2ZuIHNhbXBsZV9jYjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmNcbmluZGV4IDdkNmJkYTkwOTI5NTQuLmM2ZDA1NWI5NDU3ZGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xuQEAgLTY4LDEyICYjNDM7NjgsOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZlxuIHtcbiBcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1ICpkYXRhID0gTlVMTDtcbiBcdGludCBpLCBlcnIsIGtleSA9IDAsIG51bV9vbmxpbmUsIHJ1biA9IDA7XG4tXHRfX3U2NCBhcmdzWzJdID0gezB4MTIzNFVMTCwgMHg1Njc4VUxMfTtcbiBcdHNpemVfdCBkYXRhX3N6O1xuIFx0Ym9vbCAqb25saW5lO1xuIFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzLFxuLVx0XHQgICAgLmN0eF9pbiA9IGFyZ3MsXG4tXHRcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2YoYXJncyksXG4gXHRcdCAgICAuZmxhZ3MgPSBCUEZfRl9URVNUX1JVTl9PTl9DUFUsXG4gXHQpO1xuIFxuQEAgLTgxLDcgJiM0Mzs3OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mXG4gXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3BhcnNlX2NwdV9tYXNrX2ZpbGVcJiMzNDspKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRkYXRhX3N6ID0gbWFwID8gYnBmX21hcF9fdmFsdWVfc2l6ZShtYXApIDogc2l6ZW9mKCpkYXRhKTtcbiYjNDM7XHRkYXRhX3N6ID0gc2l6ZW9mKCpkYXRhKTtcbiBcdGRhdGEgPSBjYWxsb2MoMSwgZGF0YV9zeik7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIoZGF0YSwgXCYjMzQ7Y2FsbG9jIHBlcmNwdSBkYXRhXCYjMzQ7KSlcbiBcdFx0Z290byBvdXQ7XG5AQCAtMTA5LDcgJiM0MzsxMDYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZlxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRBU1NFUlRfRVEoKnJ1bnAsICYjNDM7JiM0MztydW4sIFwmIzM0O3J1blwmIzM0Oyk7XG4tXHRcdEFTU0VSVF9FUShkYXRhLVx1MDAzZWNwdV9pZFswXSwgaSwgXCYjMzQ7Y3B1X2lkXCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9FUShkYXRhLVx1MDAzZWNwdV9pZCwgaSwgXCYjMzQ7Y3B1X2lkXCYjMzQ7KTtcbiBcdFx0QVNTRVJUX0VRKGRhdGEtXHUwMDNlZGF0YSwgMSwgXCYjMzQ7ZGF0YVwmIzM0Oyk7XG4gXHRcdEFTU0VSVF9UUlVFKGRhdGEtXHUwMDNlc2V0LCBcJiMzNDtzZXRcJiMzNDspO1xuIFx0XHRBU1NFUlRfRVEoZGF0YS1cdTAwM2VudW1zWzZdLCAweGMwZGUsIFwmIzM0O251bXNbNl1cJiMzNDspO1xuQEAgLTEyNiwxMSAmIzQzOzEyMywxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZlxuIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2luaXQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSBpbml0X3ZhbHVlID0ge307XG4mIzQzO1x0Y29uc3QgX191MzIgZGVzaXJlZF9zeiA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSkgKiAyO1xuIFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgKmluaXRfZGF0YTtcbi1cdGNvbnN0IF9fdTMyIGRlc2lyZWRfc3ogPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpO1xuIFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhICpza2VsID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcCAqbWFwLCAqbWFwX3BlcmNwdV9hcnI7XG4gXHRzaXplX3QgaW5pdF9kYXRhX3N6O1xuLVx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbiBcdGludCBwcm9nX2ZkLCBlcnI7XG4gXG4gXHRza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTtcbkBAIC0xNjMsOSAmIzQzOzE2MCwxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpXG4gXHRpZiAoIUFTU0VSVF9FUShicGZfbWFwX190eXBlKG1hcCksIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksIFwmIzM0O2JwZl9tYXBfX3R5cGVcJiMzNDspKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRpbml0X3ZhbHVlLnNldCA9IDE7XG4gXHRpbml0X3ZhbHVlLmRhdGEgPSAyO1xuIFx0aW5pdF92YWx1ZS5udW1zWzZdID0gLTE7XG4gXHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmkgPSAyO1xuJiM0MztcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEuc2V0ID0gMTtcbiBcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSA9IC0xO1xuIFx0ZXJyID0gYnBmX21hcF9fc2V0X2luaXRpYWxfdmFsdWUobWFwLCBcdTAwMjZpbml0X3ZhbHVlLCBzaXplb2YoaW5pdF92YWx1ZSkpO1xuIFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZVwmIzM0OykpXG5AQCAtMTc3LDMzICYjNDM7MTc2LDM3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2luaXQodm9pZClcbiBcbiBcdEFTU0VSVF9FUShpbml0X2RhdGEtXHUwMDNlZGF0YSwgaW5pdF92YWx1ZS5kYXRhLCBcJiMzNDtpbml0X3ZhbHVlIGRhdGFcJiMzNDspO1xuIFx0QVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VzZXQsIGluaXRfdmFsdWUuc2V0LCBcJiMzNDtpbml0X3ZhbHVlIHNldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VudW1zWzZdLCBpbml0X3ZhbHVlLm51bXNbNl0sIFwmIzM0O2luaXRfdmFsdWUgbnVtc1s2XVwmIzM0Oyk7XG4gXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXN0cnVjdF9kYXRhLmksIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSwgXCYjMzQ7aW5pdF92YWx1ZSBzdHJ1Y3RfZGF0YS5pXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXN0cnVjdF9kYXRhLnNldCwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5zZXQsXG4mIzQzO1x0XHQgIFwmIzM0O2luaXRfdmFsdWUgc3RydWN0X2RhdGEuc2V0XCYjMzQ7KTtcbiBcdEFTU0VSVF9FUShpbml0X2RhdGEtXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5udW1zWzZdLFxuIFx0XHQgIFwmIzM0O2luaXRfdmFsdWUgc3RydWN0X2RhdGEubnVtc1s2XVwmIzM0Oyk7XG4gXHRBU1NFUlRfRVEoaW5pdF9kYXRhX3N6LCBzaXplb2YoaW5pdF92YWx1ZSksIFwmIzM0O2luaXRfdmFsdWUgc2l6ZVwmIzM0Oyk7XG4gXHRBU1NFUlRfRVEoKHZvaWQgKikgaW5pdF9kYXRhLCAodm9pZCAqKSBza2VsLVx1MDAzZXBlcmNwdSwgXCYjMzQ7c2tlbC1cdTAwM2VwZXJjcHUgZXEgaW5pdF9kYXRhXCYjMzQ7KTtcbiBcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZWRhdGFcJiMzNDspO1xuIFx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXNldCwgaW5pdF92YWx1ZS5zZXQsIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXNldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZW51bXNbNl0sIGluaXRfdmFsdWUubnVtc1s2XSwgXCYjMzQ7c2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlbnVtc1s2XVwmIzM0Oyk7XG4gXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEuaSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pLFxuIFx0XHQgIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLmlcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5zZXQsIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuc2V0LFxuJiM0MztcdFx0ICBcJiMzNDtza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5zZXRcJiMzNDspO1xuIFx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0sIGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSxcbiBcdFx0ICBcJiMzNDtza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdXCYjMzQ7KTtcbiBcbi1cdEFTU0VSVF9HVChkZXNpcmVkX3N6LCBzaXplb2YoaW5pdF92YWx1ZSksIFwmIzM0O2Rlc2lyZWRfc3pcJiMzNDspO1xuLVx0ZXJyID0gYnBmX21hcF9fc2V0X3ZhbHVlX3NpemUobWFwLCBkZXNpcmVkX3N6KTtcbiYjNDM7XHRza2VsLVx1MDAzZXBlcmNwdV9hcnItXHUwMDNlYXJyWzBdID0gLTE7XG4mIzQzO1x0bWFwX3BlcmNwdV9hcnIgPSBza2VsLVx1MDAzZW1hcHMucGVyY3B1X2FycjtcbiYjNDM7XHRlcnIgPSBicGZfbWFwX19zZXRfdmFsdWVfc2l6ZShtYXBfcGVyY3B1X2FyciwgZGVzaXJlZF9zeik7XG4gXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2JwZl9tYXBfX3NldF92YWx1ZV9zaXplXCYjMzQ7KSlcbiBcdFx0Z290byBvdXQ7XG4tXHRpZiAoIUFTU0VSVF9FUShicGZfbWFwX192YWx1ZV9zaXplKG1hcCksIGRlc2lyZWRfc3osIFwmIzM0O3BlcmNwdSB2YWx1ZSBzaXplXCYjMzQ7KSlcbi1cdFx0Z290byBvdXQ7XG4tXHRpZiAoIUFTU0VSVF9ORVEoYnBmX21hcF9fYnRmX3ZhbHVlX3R5cGVfaWQobWFwKSwgMCwgXCYjMzQ7cGVyY3B1IEJURiB2YWx1ZSB0eXBlXCYjMzQ7KSlcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShicGZfbWFwX192YWx1ZV9zaXplKG1hcF9wZXJjcHVfYXJyKSwgZGVzaXJlZF9zeiwgXCYjMzQ7cGVyY3B1IHZhbHVlIHNpemVcJiMzNDspKVxuIFx0XHRnb3RvIG91dDtcbi1cbi1cdGluaXRfZGF0YSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUobWFwLCBcdTAwMjZpbml0X2RhdGFfc3opO1xuLVx0aWYgKCFBU1NFUlRfT0tfUFRSKGluaXRfZGF0YSwgXCYjMzQ7cmVzaXplZCBicGZfbWFwX19pbml0aWFsX3ZhbHVlXCYjMzQ7KSlcbiYjNDM7XHRpZiAoIUFTU0VSVF9ORVEoYnBmX21hcF9fYnRmX3ZhbHVlX3R5cGVfaWQobWFwX3BlcmNwdV9hcnIpLCAwLCBcJiMzNDtwZXJjcHUgQlRGIHZhbHVlIHR5cGVcJiMzNDspKVxuIFx0XHRnb3RvIG91dDtcbi1cdGlmICghQVNTRVJUX0VRKGluaXRfZGF0YV9zeiwgZGVzaXJlZF9zeiwgXCYjMzQ7cmVzaXplZCBpbml0aWFsIHZhbHVlIHNpemVcJiMzNDspKVxuJiM0MztcdHNrZWwtXHUwMDNlcGVyY3B1X2FyciA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUobWFwX3BlcmNwdV9hcnIsIFx1MDAyNmluaXRfZGF0YV9zeik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlcGVyY3B1X2FyciwgXCYjMzQ7cmVzaXplZCBwZXJjcHVfYXJyIHZhbHVlXCYjMzQ7KSlcbiBcdFx0Z290byBvdXQ7XG4tXHRpZiAoIUFTU0VSVF9FUShpbml0X2RhdGEtXHUwMDNlZGF0YSwgaW5pdF92YWx1ZS5kYXRhLCBcJiMzNDtyZXNpemVkIGluaXRpYWwgdmFsdWUgZGF0YVwmIzM0OykpXG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHVfYXJyLVx1MDAzZWFyclswXSwgLTEsIFwmIzM0O2FyclswXVwmIzM0OykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0ZXJyID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWQoc2tlbCk7XG5AQCAtMzQ1LDggJiM0MzszNDgsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pdGVyKHZvaWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdHNrZWwtXHUwMDNlcm9kYXRhLVx1MDAzZW51bV9jcHVzID0gbnVtX2NwdXM7XG4tXHRza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VvZmZzZXRvZl9udW0gPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSwgc3RydWN0X2RhdGEpO1xuLVx0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlb2Zmc2V0b2ZfbnVtICYjNDM7PSBzaXplb2Yoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEpIC0gc2l6ZW9mKGludCk7XG4mIzQzO1x0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlbnVtX29mZiA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdF9kYXRhLm51bXNbNl0pO1xuIFx0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlZWxlbV9zeiA9IHJvdW5kdXAoc2l6ZW9mKHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1KSwgOCk7XG4gXHRza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdID0gMHhjMGRlO1xuIFxuQEAgLTM2OSw3ICYjNDM7MzcyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcih2b2lkKVxuIFx0XHRkbyB7IH0gd2hpbGUgKDApO1xuIFx0QVNTRVJUX0VRKGxlbiwgMCwgXCYjMzQ7cmVhZCBpdGVyXCYjMzQ7KTtcbiBcdEFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJ1bl9pdGVyLCBcJiMzNDtydW5faXRlclwmIzM0Oyk7XG4tXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGVyY3B1X2RhdGFfc3VtLCAweGMwZGUgKiBudW1fY3B1cywgXCYjMzQ7cGVyY3B1X2RhdGFfc3VtXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3VtLCAweGMwZGUgKiBudW1fY3B1cywgXCYjMzQ7c3VtXCYjMzQ7KTtcbiBcbiBcdGNsb3NlKGZkKTtcbiBvdXQ6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xuaW5kZXggNzFmZjhkMWJmNDllYi4uMTc1YzQ0MDAwNzUzZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xuQEAgLTgsOSAmIzQzOzgsMTEgQEAgaW50IGxvb25nIFNFQyhcJiMzNDsucGVyY3B1Lmxvb29vb29vb29uZ1wmIzM0Oyk7XG4gaW50IGRhdGEzIFNFQyhcJiMzNDsuZGF0YS5wZXJjcHVcJiMzNDspO1xuIGludCBkYXRhMiBTRUMoXCYjMzQ7LnBlcmNwdS5kYXRhXCYjMzQ7KTtcbiBcbiYjNDM7LyogVXNlZCBmb3IgdGVzdGluZyBicGZfbWFwX19zZXRfdmFsdWVfc2l6ZSgpLiAqL1xuJiM0MztpbnQgYXJyWzFdIFNFQyhcJiMzNDsucGVyY3B1LmFyclwmIzM0Oyk7XG4mIzQzO1xuIGludCBydW47XG4tLyogY3B1X2lkIGFzIGFycmF5IHRvIHZlcmlmeSBtYXAgdmFsdWUgcmVzaXppbmcuICovXG4taW50IGNwdV9pZFsxXSBTRUMoXCYjMzQ7LnBlcmNwdVwmIzM0Oyk7XG4mIzQzO2ludCBjcHVfaWQgU0VDKFwmIzM0Oy5wZXJjcHVcJiMzNDspO1xuIGludCBkYXRhIFNFQyhcJiMzNDsucGVyY3B1XCYjMzQ7KSA9IC0xO1xuIGludCBudW1zWzddIFNFQyhcJiMzNDsucGVyY3B1XCYjMzQ7KTtcbiBib29sIHNldCBTRUMoXCYjMzQ7LnBlcmNwdVwmIzM0OykgPSBmYWxzZTtcbkBAIC0zNCw3ICYjNDM7MzYsNyBAQCBpbnQgdXBkYXRlX3BlcmNwdV9kYXRhKHZvaWQgKmN0eClcbiBcdGRhdGEgPSAxO1xuIFx0cnVuJiM0MzsmIzQzOztcbiBcdHNldCA9IHRydWU7XG4tXHRjcHVfaWRbMF0gPSBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQoKTtcbiYjNDM7XHRjcHVfaWQgPSBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQoKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02Miw5ICYjNDM7NjQsOSBAQCBpbnQgdmVyaWZpZXJfc25wcmludGYodm9pZCAqY3R4KVxuIH1cbiBcbiB2b2xhdGlsZSBjb25zdCBfX3UzMiBudW1fY3B1cyA9IDA7XG4tdm9sYXRpbGUgY29uc3QgaW50IG9mZnNldG9mX251bTtcbiYjNDM7dm9sYXRpbGUgY29uc3QgaW50IG51bV9vZmY7XG4gdm9sYXRpbGUgY29uc3QgaW50IGVsZW1fc3o7XG4tX191MzIgcGVyY3B1X2RhdGFfc3VtID0gMDtcbiYjNDM7X191MzIgc3VtID0gMDtcbiBib29sIHJ1bl9pdGVyID0gZmFsc2U7XG4gXG4gU0VDKFwmIzM0O2l0ZXIvYnBmX21hcF9lbGVtXCYjMzQ7KVxuQEAgLTgwLDcgJiM0Mzs4Miw3IEBAIGludCBkdW1wX3BlcmNwdV9kYXRhKHN0cnVjdCBicGZfaXRlcl9fYnBmX21hcF9lbGVtICpjdHgpXG4gXHRydW5faXRlciA9IHRydWU7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fY3B1czsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cGVyY3B1X2RhdGFfc3VtICYjNDM7PSAqKGludCAqKSAocHB0ciAmIzQzOyBvZmZzZXRvZl9udW0pO1xuJiM0MztcdFx0c3VtICYjNDM7PSAqKGludCAqKSAocHB0ciAmIzQzOyBudW1fb2ZmKTtcbiBcdFx0cHB0ciAmIzQzOz0gZWxlbV9zejtcbiBcdH1cbiBcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE4OjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBibGFuayBsaW5lIGluIHRoZSBrZXJuZWwgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYW5kIG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scyAobGliYnBmLCBicGZ0b29sKSBhbmQgc2VsZnRlc3RzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkNjk2NTM1ZWFhZGEyM2Q3MzMwOGQwMGU0N2ZiMmIyZjdiMzk5YjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxODoxNTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA2YWMxYWZjZWQyMGJmLi44MWVhZThmNzBhY2RiIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0xMjExMyw3ICYjNDM7MTIxMTMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJcmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcmVmX3QtJmd0O25hbWVfb2ZmKTsKIAkJfQogCi0KIAkJaWYgKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKGtmX2FyZ190eXBlKSkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9nZW4uYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jCmluZGV4IGE1MDU0MGVmNjUyMWMuLmU1ZTgyMjU1YWYyNGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jCkBAIC0zMDMsNyAmIzQzOzMwMyw3IEBAIHN0YXRpYyBpbnQgY29kZWdlbl9kYXRhc2VjcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSkKIAkJcmV0dXJuIC1lcnJubzsKIAogCWJwZl9vYmplY3RfX2Zvcl9lYWNoX21hcChtYXAsIG9iaikgewotCQkvKiBvbmx5IGdlbmVyYXRlIGRlZmluaXRpb25zIGZvciBtZW1vcnktbWFwcGVkIGludGVybmFsIG1hcHMgKi8KJiM0MzsJCS8qIG9ubHkgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIHNrZWwgZGF0YSBtYXBzICovCiAJCWlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpCiAJCQljb250aW51ZTsKIApAQCAtNTEwLDcgJiM0Mzs1MTAsNyBAQCBzdGF0aWMgc2l6ZV90IGJwZl9tYXBfbW1hcF9zeihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKQogCXJldHVybiBtYXBfc3o7CiB9CiAKLS8qIEVtaXQgdHlwZSBzaXplIGFzc2VydHMgZm9yIGFsbCB0b3AtbGV2ZWwgZmllbGRzIGluIG1lbW9yeS1tYXBwZWQgaW50ZXJuYWwgbWFwcy4gKi8KJiM0MzsvKiBFbWl0IHR5cGUgc2l6ZSBhc3NlcnRzIGZvciBhbGwgdG9wLWxldmVsIGZpZWxkcyBpbiBza2VsIGRhdGEgbWFwcy4gKi8KIHN0YXRpYyB2b2lkIGNvZGVnZW5fYXNzZXJ0cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSkKIHsKIAlzdHJ1Y3QgYnRmICpidGYgPSBicGZfb2JqZWN0X19idGYob2JqKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCmluZGV4IGU1NzQ4NzBmYjcxNjkuLmI3NDljMDE3NDJlZTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwpAQCAtMTg0MSw5ICYjNDM7MTg0MSw4IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApCiAKIAlzd2l0Y2ggKG1hcC0mZ3Q7ZGVmLnR5cGUpIHsKIAljYXNlIEJQRl9NQVBfVFlQRV9BUlJBWToKLQkJcmV0dXJuIGFycmF5X21hcF9tbWFwX3N6KG1hcC0mZ3Q7ZGVmLnZhbHVlX3NpemUsIG1hcC0mZ3Q7ZGVmLm1heF9lbnRyaWVzKTsKIAljYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk6Ci0JCXJldHVybiBtYXAtJmd0O2RlZi52YWx1ZV9zaXplOwomIzQzOwkJcmV0dXJuIGFycmF5X21hcF9tbWFwX3N6KG1hcC0mZ3Q7ZGVmLnZhbHVlX3NpemUsIG1hcC0mZ3Q7ZGVmLm1heF9lbnRyaWVzKTsKIAljYXNlIEJQRl9NQVBfVFlQRV9BUkVOQToKIAkJcmV0dXJuIHBhZ2Vfc3ogKiBtYXAtJmd0O2RlZi5tYXhfZW50cmllczsKIAlkZWZhdWx0OgpAQCAtMTk1MSw3ICYjNDM7MTk1MCw3IEBAIHN0YXRpYyBib29sIG1hcF9pc19tbWFwYWJsZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgotCSAqIFRoZSBpbnRlcm5hbCBQRVJDUFUgbWFwcyBhcmUgbm90IG1tYXBibGUgYmVjYXVzZSB0aGUgdW5kZXJseWluZwomIzQzOwkgKiBUaGUgaW50ZXJuYWwgUEVSQ1BVIG1hcHMgYXJlIG5vdCBtbWFwYWJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nCiAJICogcGVyY3B1X2FycmF5IG1hcHMgZG8gbm90IGhhdmUgbW1hcCBzdXBwb3J0LgogCSAqLwogCWlmIChtYXAtJmd0O2xpYmJwZl90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVKQpAQCAtMjgzMSw3ICYjNDM7MjgzMCw3IEBAIHN0YXRpYyBzaXplX3QgYWRqdXN0X3JpbmdidWZfc3ooc2l6ZV90IHN6KQogCQlyZXR1cm4gMDsKIAkvKiBLZXJuZWwgZXhwZWN0cyBCUEZfTUFQX1RZUEVfUklOR0JVRiYjMzk7cyBtYXhfZW50cmllcyB0byBiZQogCSAqIGEgcG93ZXItb2YtMiBtdWx0aXBsZSBvZiBrZXJuZWwmIzM5O3MgcGFnZSBzaXplLiBJZiB1c2VyIGRpbGlnZW50bHkKLQkgKiBzYXRpc2lmaWVkIHRoZXNlIGNvbmRpdGlvbnMsIHBhc3MgdGhlIHNpemUgdGhyb3VnaC4KJiM0MzsJICogc2F0aXNmaWVkIHRoZXNlIGNvbmRpdGlvbnMsIHBhc3MgdGhlIHNpemUgdGhyb3VnaC4KIAkgKi8KIAlpZiAoKHN6ICUgcGFnZV9zeikgPT0gMCAmYW1wOyZhbXA7IGlzX3Bvd19vZl8yKHN6IC8gcGFnZV9zeikpCiAJCXJldHVybiBzejsKQEAgLTY5ODksNyAmIzQzOzY5ODgsNyBAQCBicGZfb2JqZWN0X19yZWxvY19jb2RlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqbWFpbl9wcm9nLAogICogICAgJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0mIzQzOwogICoKICAqIEF0IHRoaXMgcG9pbnQsIHdlIHJlbG9jYXRlIHN1YkEgY2FsbHMsIHRoZW4gZ28gb25lIGxldmVsIHVwIGFuZCBmaW5pc2ggd2l0aAotICogcmVsb2NhdGluIG1haW5BIGNhbGxzLiBtYWluQSBpcyBkb25lLgomIzQzOyAqIHJlbG9jYXRpb24gbWFpbkEgY2FsbHMuIG1haW5BIGlzIGRvbmUuCiAgKgogICogRm9yIG1haW5CIHByb2Nlc3MgaXMgc2ltaWxhciBidXQgcmVzdWx0cyBpbiBkaWZmZXJlbnQgb3JkZXIuIFdlIHN0YXJ0IHdpdGgKICAqIG1haW5CIGFuZCBza2lwIHN1YkEgYW5kIHN1YkIsIGFzIG1haW5CIG5ldmVyIGNhbGxzIHRoZW0gKGF0IGxlYXN0CkBAIC03OTM2LDcgJiM0Mzs3OTM1LDcgQEAgc3RhdGljIGludCBsaWJicGZfcHJlcGFyZV9wcm9nX2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLAogCQlwcm9nLSZndDthdHRhY2hfYnRmX2lkID0gYnRmX3R5cGVfaWQ7CiAKIAkJLyogYnV0IGJ5IG5vdyBsaWJicGYgY29tbW9uIGxvZ2ljIGlzIG5vdCB1dGlsaXppbmcKLQkJICogcHJvZy0mZ3Q7YXRhY2hfYnRmX29ial9mZC9wcm9nLSZndDthdHRhY2hfYnRmX2lkIGFueW1vcmUgYmVjYXVzZQomIzQzOwkJICogcHJvZy0mZ3Q7YXR0YWNoX2J0Zl9vYmpfZmQvcHJvZy0mZ3Q7YXR0YWNoX2J0Zl9pZCBhbnltb3JlIGJlY2F1c2UKIAkJICogdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYWZ0ZXIgb3B0cyB3ZXJlIHBvcHVsYXRlZCBieQogCQkgKiBsaWJicGYsIHNvIHRoaXMgY2FsbGJhY2sgaGFzIHRvIHVwZGF0ZSBvcHRzIGV4cGxpY2l0bHkgaGVyZQogCQkgKi8KQEAgLTE0MjE5LDcgJiM0MzsxNDIxOCw3IEBAIHBlcmZfZXZlbnRfcmVhZF9zaW1wbGUodm9pZCAqbW1hcF9tZW0sIHNpemVfdCBtbWFwX3NpemUsIHNpemVfdCBwYWdlX3NpemUsCiAJCWlmICgoKHZvaWQgKillaGRyKSAmIzQzOyBlaGRyX3NpemUgJmd0OyBiYXNlICYjNDM7IG1tYXBfc2l6ZSkgewogCQkJdm9pZCAqY29weV9zdGFydCA9IGVoZHI7CiAJCQlzaXplX3QgbGVuX2ZpcnN0ID0gYmFzZSAmIzQzOyBtbWFwX3NpemUgLSBjb3B5X3N0YXJ0OwotCQkJc2l6ZV90IGxlbl9zZWNuZCA9IGVoZHJfc2l6ZSAtIGxlbl9maXJzdDsKJiM0MzsJCQlzaXplX3QgbGVuX3NlY29uZCA9IGVoZHJfc2l6ZSAtIGxlbl9maXJzdDsKIAogCQkJaWYgKCpjb3B5X3NpemUgJmx0OyBlaGRyX3NpemUpIHsKIAkJCQlmcmVlKCpjb3B5X21lbSk7CkBAIC0xNDIzMyw3ICYjNDM7MTQyMzIsNyBAQCBwZXJmX2V2ZW50X3JlYWRfc2ltcGxlKHZvaWQgKm1tYXBfbWVtLCBzaXplX3QgbW1hcF9zaXplLCBzaXplX3QgcGFnZV9zaXplLAogCQkJfQogCiAJCQltZW1jcHkoKmNvcHlfbWVtLCBjb3B5X3N0YXJ0LCBsZW5fZmlyc3QpOwotCQkJbWVtY3B5KCpjb3B5X21lbSAmIzQzOyBsZW5fZmlyc3QsIGJhc2UsIGxlbl9zZWNuZCk7CiYjNDM7CQkJbWVtY3B5KCpjb3B5X21lbSAmIzQzOyBsZW5fZmlyc3QsIGJhc2UsIGxlbl9zZWNvbmQpOwogCQkJZWhkciA9ICpjb3B5X21lbTsKIAkJfQogCkBAIC0xNDI1MSw3ICYjNDM7MTQyNTAsNyBAQCBzdHJ1Y3QgcGVyZl9idWZmZXI7CiAKIHN0cnVjdCBwZXJmX2J1ZmZlcl9wYXJhbXMgewogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHI7Ci0JLyogaWYgZXZlbnRfY2IgaXMgc3BlY2lmaWVkLCBpdCB0YWtlcyBwcmVjZW5kZW5jZSAqLwomIzQzOwkvKiBpZiBldmVudF9jYiBpcyBzcGVjaWZpZWQsIGl0IHRha2VzIHByZWNlZGVuY2UgKi8KIAlwZXJmX2J1ZmZlcl9ldmVudF9mbiBldmVudF9jYjsKIAkvKiBzYW1wbGVfY2IgYW5kIGxvc3RfY2IgYXJlIGhpZ2hlci1sZXZlbCBjb21tb24tY2FzZSBjYWxsYmFja3MgKi8KIAlwZXJmX2J1ZmZlcl9zYW1wbGVfZm4gc2FtcGxlX2NiOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jCmluZGV4IDdkNmJkYTkwOTI5NTQuLmM2ZDA1NWI5NDU3ZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmMKQEAgLTY4LDEyICYjNDM7NjgsOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZgogewogCXN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1ICpkYXRhID0gTlVMTDsKIAlpbnQgaSwgZXJyLCBrZXkgPSAwLCBudW1fb25saW5lLCBydW4gPSAwOwotCV9fdTY0IGFyZ3NbMl0gPSB7MHgxMjM0VUxMLCAweDU2NzhVTEx9OwogCXNpemVfdCBkYXRhX3N6OwogCWJvb2wgKm9ubGluZTsKIAlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsCi0JCSAgICAuY3R4X2luID0gYXJncywKLQkJICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihhcmdzKSwKIAkJICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfUlVOX09OX0NQVSwKIAkpOwogCkBAIC04MSw3ICYjNDM7NzgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZgogCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtwYXJzZV9jcHVfbWFza19maWxlJiMzNDspKQogCQlyZXR1cm47CiAKLQlkYXRhX3N6ID0gbWFwID8gYnBmX21hcF9fdmFsdWVfc2l6ZShtYXApIDogc2l6ZW9mKCpkYXRhKTsKJiM0MzsJZGF0YV9zeiA9IHNpemVvZigqZGF0YSk7CiAJZGF0YSA9IGNhbGxvYygxLCBkYXRhX3N6KTsKIAlpZiAoIUFTU0VSVF9PS19QVFIoZGF0YSwgJiMzNDtjYWxsb2MgcGVyY3B1IGRhdGEmIzM0OykpCiAJCWdvdG8gb3V0OwpAQCAtMTA5LDcgJiM0MzsxMDYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZgogCQkJYnJlYWs7CiAKIAkJQVNTRVJUX0VRKCpydW5wLCAmIzQzOyYjNDM7cnVuLCAmIzM0O3J1biYjMzQ7KTsKLQkJQVNTRVJUX0VRKGRhdGEtJmd0O2NwdV9pZFswXSwgaSwgJiMzNDtjcHVfaWQmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEoZGF0YS0mZ3Q7Y3B1X2lkLCBpLCAmIzM0O2NwdV9pZCYjMzQ7KTsKIAkJQVNTRVJUX0VRKGRhdGEtJmd0O2RhdGEsIDEsICYjMzQ7ZGF0YSYjMzQ7KTsKIAkJQVNTRVJUX1RSVUUoZGF0YS0mZ3Q7c2V0LCAmIzM0O3NldCYjMzQ7KTsKIAkJQVNTRVJUX0VRKGRhdGEtJmd0O251bXNbNl0sIDB4YzBkZSwgJiMzNDtudW1zWzZdJiMzNDspOwpAQCAtMTI2LDExICYjNDM7MTIzLDExIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mCiBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgaW5pdF92YWx1ZSA9IHt9OwomIzQzOwljb25zdCBfX3UzMiBkZXNpcmVkX3N6ID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKSAqIDI7CiAJc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgKmluaXRfZGF0YTsKLQljb25zdCBfX3UzMiBkZXNpcmVkX3N6ID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTsKIAlzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEgKnNrZWwgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgYnBmX21hcCAqbWFwLCAqbWFwX3BlcmNwdV9hcnI7CiAJc2l6ZV90IGluaXRfZGF0YV9zejsKLQlzdHJ1Y3QgYnBmX21hcCAqbWFwOwogCWludCBwcm9nX2ZkLCBlcnI7CiAKIAlza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTsKQEAgLTE2Myw5ICYjNDM7MTYwLDExIEBAIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2luaXQodm9pZCkKIAlpZiAoIUFTU0VSVF9FUShicGZfbWFwX190eXBlKG1hcCksIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksICYjMzQ7YnBmX21hcF9fdHlwZSYjMzQ7KSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJaW5pdF92YWx1ZS5zZXQgPSAxOwogCWluaXRfdmFsdWUuZGF0YSA9IDI7CiAJaW5pdF92YWx1ZS5udW1zWzZdID0gLTE7CiAJaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pID0gMjsKJiM0MzsJaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5zZXQgPSAxOwogCWluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSA9IC0xOwogCWVyciA9IGJwZl9tYXBfX3NldF9pbml0aWFsX3ZhbHVlKG1hcCwgJmFtcDtpbml0X3ZhbHVlLCBzaXplb2YoaW5pdF92YWx1ZSkpOwogCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDticGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZSYjMzQ7KSkKQEAgLTE3NywzMyAmIzQzOzE3NiwzNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpCiAKIAlBU1NFUlRfRVEoaW5pdF9kYXRhLSZndDtkYXRhLCBpbml0X3ZhbHVlLmRhdGEsICYjMzQ7aW5pdF92YWx1ZSBkYXRhJiMzNDspOwogCUFTU0VSVF9FUShpbml0X2RhdGEtJmd0O3NldCwgaW5pdF92YWx1ZS5zZXQsICYjMzQ7aW5pdF92YWx1ZSBzZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShpbml0X2RhdGEtJmd0O251bXNbNl0sIGluaXRfdmFsdWUubnVtc1s2XSwgJiMzNDtpbml0X3ZhbHVlIG51bXNbNl0mIzM0Oyk7CiAJQVNTRVJUX0VRKGluaXRfZGF0YS0mZ3Q7c3RydWN0X2RhdGEuaSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pLCAmIzM0O2luaXRfdmFsdWUgc3RydWN0X2RhdGEuaSYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKGluaXRfZGF0YS0mZ3Q7c3RydWN0X2RhdGEuc2V0LCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLnNldCwKJiM0MzsJCSAgJiMzNDtpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLnNldCYjMzQ7KTsKIAlBU1NFUlRfRVEoaW5pdF9kYXRhLSZndDtzdHJ1Y3RfZGF0YS5udW1zWzZdLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0sCiAJCSAgJiMzNDtpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLm51bXNbNl0mIzM0Oyk7CiAJQVNTRVJUX0VRKGluaXRfZGF0YV9zeiwgc2l6ZW9mKGluaXRfdmFsdWUpLCAmIzM0O2luaXRfdmFsdWUgc2l6ZSYjMzQ7KTsKIAlBU1NFUlRfRVEoKHZvaWQgKikgaW5pdF9kYXRhLCAodm9pZCAqKSBza2VsLSZndDtwZXJjcHUsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1IGVxIGluaXRfZGF0YSYjMzQ7KTsKIAlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtkYXRhLCBpbml0X3ZhbHVlLmRhdGEsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtkYXRhJiMzNDspOwogCUFTU0VSVF9FUShza2VsLSZndDtwZXJjcHUtJmd0O3NldCwgaW5pdF92YWx1ZS5zZXQsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtzZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtwZXJjcHUtJmd0O251bXNbNl0sIGluaXRfdmFsdWUubnVtc1s2XSwgJiMzNDtza2VsLSZndDtwZXJjcHUtJmd0O251bXNbNl0mIzM0Oyk7CiAJQVNTRVJUX0VRKHNrZWwtJmd0O3BlcmNwdS0mZ3Q7c3RydWN0X2RhdGEuaSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pLAogCQkgICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5pJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5zZXQsIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuc2V0LAomIzQzOwkJICAmIzM0O3NrZWwtJmd0O3BlcmNwdS0mZ3Q7c3RydWN0X2RhdGEuc2V0JiMzNDspOwogCUFTU0VSVF9FUShza2VsLSZndDtwZXJjcHUtJmd0O3N0cnVjdF9kYXRhLm51bXNbNl0sIGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSwKIAkJICAmIzM0O3NrZWwtJmd0O3BlcmNwdS0mZ3Q7c3RydWN0X2RhdGEubnVtc1s2XSYjMzQ7KTsKIAotCUFTU0VSVF9HVChkZXNpcmVkX3N6LCBzaXplb2YoaW5pdF92YWx1ZSksICYjMzQ7ZGVzaXJlZF9zeiYjMzQ7KTsKLQllcnIgPSBicGZfbWFwX19zZXRfdmFsdWVfc2l6ZShtYXAsIGRlc2lyZWRfc3opOwomIzQzOwlza2VsLSZndDtwZXJjcHVfYXJyLSZndDthcnJbMF0gPSAtMTsKJiM0MzsJbWFwX3BlcmNwdV9hcnIgPSBza2VsLSZndDttYXBzLnBlcmNwdV9hcnI7CiYjNDM7CWVyciA9IGJwZl9tYXBfX3NldF92YWx1ZV9zaXplKG1hcF9wZXJjcHVfYXJyLCBkZXNpcmVkX3N6KTsKIAlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX21hcF9fc2V0X3ZhbHVlX3NpemUmIzM0OykpCiAJCWdvdG8gb3V0OwotCWlmICghQVNTRVJUX0VRKGJwZl9tYXBfX3ZhbHVlX3NpemUobWFwKSwgZGVzaXJlZF9zeiwgJiMzNDtwZXJjcHUgdmFsdWUgc2l6ZSYjMzQ7KSkKLQkJZ290byBvdXQ7Ci0JaWYgKCFBU1NFUlRfTkVRKGJwZl9tYXBfX2J0Zl92YWx1ZV90eXBlX2lkKG1hcCksIDAsICYjMzQ7cGVyY3B1IEJURiB2YWx1ZSB0eXBlJiMzNDspKQomIzQzOwlpZiAoIUFTU0VSVF9FUShicGZfbWFwX192YWx1ZV9zaXplKG1hcF9wZXJjcHVfYXJyKSwgZGVzaXJlZF9zeiwgJiMzNDtwZXJjcHUgdmFsdWUgc2l6ZSYjMzQ7KSkKIAkJZ290byBvdXQ7Ci0KLQlpbml0X2RhdGEgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKG1hcCwgJmFtcDtpbml0X2RhdGFfc3opOwotCWlmICghQVNTRVJUX09LX1BUUihpbml0X2RhdGEsICYjMzQ7cmVzaXplZCBicGZfbWFwX19pbml0aWFsX3ZhbHVlJiMzNDspKQomIzQzOwlpZiAoIUFTU0VSVF9ORVEoYnBmX21hcF9fYnRmX3ZhbHVlX3R5cGVfaWQobWFwX3BlcmNwdV9hcnIpLCAwLCAmIzM0O3BlcmNwdSBCVEYgdmFsdWUgdHlwZSYjMzQ7KSkKIAkJZ290byBvdXQ7Ci0JaWYgKCFBU1NFUlRfRVEoaW5pdF9kYXRhX3N6LCBkZXNpcmVkX3N6LCAmIzM0O3Jlc2l6ZWQgaW5pdGlhbCB2YWx1ZSBzaXplJiMzNDspKQomIzQzOwlza2VsLSZndDtwZXJjcHVfYXJyID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShtYXBfcGVyY3B1X2FyciwgJmFtcDtpbml0X2RhdGFfc3opOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7cGVyY3B1X2FyciwgJiMzNDtyZXNpemVkIHBlcmNwdV9hcnIgdmFsdWUmIzM0OykpCiAJCWdvdG8gb3V0OwotCWlmICghQVNTRVJUX0VRKGluaXRfZGF0YS0mZ3Q7ZGF0YSwgaW5pdF92YWx1ZS5kYXRhLCAmIzM0O3Jlc2l6ZWQgaW5pdGlhbCB2YWx1ZSBkYXRhJiMzNDspKQomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtwZXJjcHVfYXJyLSZndDthcnJbMF0sIC0xLCAmIzM0O2FyclswXSYjMzQ7KSkKIAkJZ290byBvdXQ7CiAKIAllcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTsKQEAgLTM0NSw4ICYjNDM7MzQ4LDggQEAgc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcih2b2lkKQogCQlyZXR1cm47CiAKIAlza2VsLSZndDtyb2RhdGEtJmd0O251bV9jcHVzID0gbnVtX2NwdXM7Ci0Jc2tlbC0mZ3Q7cm9kYXRhLSZndDtvZmZzZXRvZl9udW0gPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSwgc3RydWN0X2RhdGEpOwotCXNrZWwtJmd0O3JvZGF0YS0mZ3Q7b2Zmc2V0b2ZfbnVtICYjNDM7PSBzaXplb2Yoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YSkgLSBzaXplb2YoaW50KTsKJiM0MzsJc2tlbC0mZ3Q7cm9kYXRhLSZndDtudW1fb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUsCiYjNDM7CQkJCQkgc3RydWN0X2RhdGEubnVtc1s2XSk7CiAJc2tlbC0mZ3Q7cm9kYXRhLSZndDtlbGVtX3N6ID0gcm91bmR1cChzaXplb2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUpLCA4KTsKIAlza2VsLSZndDtwZXJjcHUtJmd0O3N0cnVjdF9kYXRhLm51bXNbNl0gPSAweGMwZGU7CiAKQEAgLTM2OSw3ICYjNDM7MzcyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcih2b2lkKQogCQlkbyB7IH0gd2hpbGUgKDApOwogCUFTU0VSVF9FUShsZW4sIDAsICYjMzQ7cmVhZCBpdGVyJiMzNDspOwogCUFTU0VSVF9UUlVFKHNrZWwtJmd0O2Jzcy0mZ3Q7cnVuX2l0ZXIsICYjMzQ7cnVuX2l0ZXImIzM0Oyk7Ci0JQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cGVyY3B1X2RhdGFfc3VtLCAweGMwZGUgKiBudW1fY3B1cywgJiMzNDtwZXJjcHVfZGF0YV9zdW0mIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N1bSwgMHhjMGRlICogbnVtX2NwdXMsICYjMzQ7c3VtJiMzNDspOwogCiAJY2xvc2UoZmQpOwogb3V0OgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuYwppbmRleCA3MWZmOGQxYmY0OWViLi4xNzVjNDQwMDA3NTNkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuYwpAQCAtOCw5ICYjNDM7OCwxMSBAQCBpbnQgbG9vbmcgU0VDKCYjMzQ7LnBlcmNwdS5sb29vb29vb29vbmcmIzM0Oyk7CiBpbnQgZGF0YTMgU0VDKCYjMzQ7LmRhdGEucGVyY3B1JiMzNDspOwogaW50IGRhdGEyIFNFQygmIzM0Oy5wZXJjcHUuZGF0YSYjMzQ7KTsKIAomIzQzOy8qIFVzZWQgZm9yIHRlc3RpbmcgYnBmX21hcF9fc2V0X3ZhbHVlX3NpemUoKS4gKi8KJiM0MztpbnQgYXJyWzFdIFNFQygmIzM0Oy5wZXJjcHUuYXJyJiMzNDspOwomIzQzOwogaW50IHJ1bjsKLS8qIGNwdV9pZCBhcyBhcnJheSB0byB2ZXJpZnkgbWFwIHZhbHVlIHJlc2l6aW5nLiAqLwotaW50IGNwdV9pZFsxXSBTRUMoJiMzNDsucGVyY3B1JiMzNDspOwomIzQzO2ludCBjcHVfaWQgU0VDKCYjMzQ7LnBlcmNwdSYjMzQ7KTsKIGludCBkYXRhIFNFQygmIzM0Oy5wZXJjcHUmIzM0OykgPSAtMTsKIGludCBudW1zWzddIFNFQygmIzM0Oy5wZXJjcHUmIzM0Oyk7CiBib29sIHNldCBTRUMoJiMzNDsucGVyY3B1JiMzNDspID0gZmFsc2U7CkBAIC0zNCw3ICYjNDM7MzYsNyBAQCBpbnQgdXBkYXRlX3BlcmNwdV9kYXRhKHZvaWQgKmN0eCkKIAlkYXRhID0gMTsKIAlydW4mIzQzOyYjNDM7OwogCXNldCA9IHRydWU7Ci0JY3B1X2lkWzBdID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7CiYjNDM7CWNwdV9pZCA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXJldHVybiAwOwogfQogCkBAIC02Miw5ICYjNDM7NjQsOSBAQCBpbnQgdmVyaWZpZXJfc25wcmludGYodm9pZCAqY3R4KQogfQogCiB2b2xhdGlsZSBjb25zdCBfX3UzMiBudW1fY3B1cyA9IDA7Ci12b2xhdGlsZSBjb25zdCBpbnQgb2Zmc2V0b2ZfbnVtOwomIzQzO3ZvbGF0aWxlIGNvbnN0IGludCBudW1fb2ZmOwogdm9sYXRpbGUgY29uc3QgaW50IGVsZW1fc3o7Ci1fX3UzMiBwZXJjcHVfZGF0YV9zdW0gPSAwOwomIzQzO19fdTMyIHN1bSA9IDA7CiBib29sIHJ1bl9pdGVyID0gZmFsc2U7CiAKIFNFQygmIzM0O2l0ZXIvYnBmX21hcF9lbGVtJiMzNDspCkBAIC04MCw3ICYjNDM7ODIsNyBAQCBpbnQgZHVtcF9wZXJjcHVfZGF0YShzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSAqY3R4KQogCXJ1bl9pdGVyID0gdHJ1ZTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fY3B1czsgaSYjNDM7JiM0MzspIHsKLQkJcGVyY3B1X2RhdGFfc3VtICYjNDM7PSAqKGludCAqKSAocHB0ciAmIzQzOyBvZmZzZXRvZl9udW0pOwomIzQzOwkJc3VtICYjNDM7PSAqKGludCAqKSAocHB0ciAmIzQzOyBudW1fb2ZmKTsKIAkJcHB0ciAmIzQzOz0gZWxlbV9zejsKIAl9CiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NDcKCQkJCQkJCW91dHB1dDogODAKCQkJCQkJCXRob3VnaHRzOiAxNTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIFNlcmllcyBBbmFseXNpcyBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgZnV6emluZywgbWVhbmluZyBpZiBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGZpbGVzOiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYHRvb2xzL2JwZi9icGZ0b29sL2dlbi5jYCwgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBhbmQgYSBjb3VwbGUgb2Ygc2VsZnRlc3QgZmlsZXMuCgpGaXJzdCwgSSBleGFtaW5lIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgbWlub3Ig4oCTIGp1c3QgdGhlIHJlbW92YWwgb2YgYW4gZW1wdHkgbGluZS4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyBjaGFuZ2UgYW5kIGRvZXNuJiMzOTt0IGFmZmVjdCBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gVGhpcyBvbmUgaXMgcXVpY2tseSBkaXNtaXNzZWQuCgpOZXh0LCB0aGUgYHRvb2xzL2JwZi9icGZ0b29sL2dlbi5jYCBtb2RpZmljYXRpb24gYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIGNvbW1lbnRzLiBBZ2FpbiwgdGhpcyBkb2VzbiYjMzk7dCBpbXBhY3QgY29yZSBrZXJuZWwgZXhlY3V0aW9uLCBzbyBpdCYjMzk7cyBub3QgcmVsZXZhbnQgZm9yIGZ1enppbmcuCgpOb3csIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCBuZWVkcyBhIGNsb3NlciBsb29rLiBJIHNlZSBhIGNoYW5nZSBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQgdGhhdCBhbHRlcnMgdGhlIHJldHVybiB2YWx1ZSBmb3IgYEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVlgLiBJbml0aWFsbHksIGl0IHJldHVybmVkIGBtYXAtJmd0O2RlZi52YWx1ZV9zaXplYCBidXQgbm93IGl0JiMzOTtzIHVzaW5nIGBhcnJheV9tYXBfbW1hcF9zeihtYXAtJmd0O2RlZi52YWx1ZV9zaXplLCBtYXAtJmd0O2RlZi5tYXhfZW50cmllcylgLiAqV2FpdCouLi4gSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdGhhdCBgbGliYnBmYCBpcyBhICp1c2Vyc3BhY2UqIGxpYnJhcnksIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGtlcm5lbCB0cmVlLiBDaGFuZ2VzIGhlcmUgZG9uJiMzOTt0IGRpcmVjdGx5IG1vZGlmeSB0aGUga2VybmVsJiMzOTtzIGV4ZWN1dGlvbiBwYXRoLiBUaG91Z2ggaXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQgaXMgbm90IHdpdGhpbiB0aGUga2VybmVsLCBzbyB0aGlzIG5lZWRzIHRvIGJlIGRpc2NvdW50ZWQuCgpUaGUgc2VsZnRlc3RzIGFyZSBqdXN0IHRoYXQ6IHNlbGYgdGVzdHMuIFRoZXkgYXJlIHVzZXJzcGFjZSBwcm9ncmFtcyBhbmQvb3IgQlBGIHByb2dyYW1zIGRlc2lnbmVkIGZvciB0ZXN0aW5nLiBUaGV5IGRvIG5vdCByZXByZXNlbnQga2VybmVsIGNvZGUgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuCgpUaGUgcHJvbXB0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvICp0aGUga2VybmVsKi4gVGhlIHByb21wdCBhbHNvIGV4cGxpY2l0bHkgc2F5cyB0aGF0IHRoZSBjaGFuZ2UgaXMgbm90IHdvcnRoeSBvZiBmdXp6aW5nIGlmIGl0IG9ubHkgY29udGFpbnM6IC4uLiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLiAuLi4gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAuLi4gRHJpdmVyIC5yZW1vdmUgLi4uIElmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKCkVzc2VudGlhbGx5LCBteSB0YXNrIGlzIHRvIGlzb2xhdGUgKmtlcm5lbCogbG9naWMgY2hhbmdlcyB0aGF0ICpjb3VsZCogYmUgZXhwbG9pdGVkLiBHaXZlbiB0aGF0IHRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoZSByZW1vdmFsIG9mIGEgYmxhbmsgbGluZSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgdGhlIHJlc3QgYXJlIGVpdGhlciBjb21tZW50cyBvciB1c2Vyc3BhY2UgbGlicmFyeS90b29sIGNoYW5nZXMsIHRoaXMgcGF0Y2ggc2VyaWVzIGRvZXNuJiMzOTt0IG1lZXQgdGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbjogKipXb3J0aEZ1enppbmc9ZmFsc2UqKiBiZWNhdXNlIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBtYWtlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd291bGQgbmVlZCB0byBiZSBmdXp6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBibGFuayBsaW5lIGluIHRoZSBrZXJuZWwgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYW5kIG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scyAobGliYnBmLCBicGZ0b29sKSBhbmQgc2VsZnRlc3RzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSByZW1vdmVzIGEgYmxhbmsgbGluZSBpbiB0aGUga2VybmVsIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGFuZCBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGxpYmJwZiwgYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTg6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE4OjE1OjAxLjE2MTQ2NDQ1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTUyMDAzODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSByZW1vdmVzIGEgYmxhbmsgbGluZSBpbiB0aGUga2VybmVsIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGFuZCBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGxpYmJwZiwgYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE4OjE1OjAxLjE2MTQ3MjI3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4OTAyNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2Q2OTY1MzVlYWFkYTIzZDczMzA4ZDAwZTQ3ZmIyYjJmN2IzOTliMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxODoxNTowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCA2YWMxYWZjZWQyMGJmLi44MWVhZThmNzBhY2RiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0xMjExMyw3ICsxMjExMyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcdFxcdFxcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVxcdTAwM2VuYW1lX29mZik7XFxuIFxcdFxcdH1cXG4gXFxuLVxcbiBcXHRcXHRpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSBcXHUwMDI2XFx1MDAyNiB0eXBlX21heV9iZV9udWxsKGtmX2FyZ190eXBlKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9nZW4uYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXFxuaW5kZXggYTUwNTQwZWY2NTIxYy4uZTVlODIyNTVhZjI0YSAxMDA2NDRcXG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9nZW4uY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXFxuQEAgLTMwMyw3ICszMDMsNyBAQCBzdGF0aWMgaW50IGNvZGVnZW5fZGF0YXNlY3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpXFxuIFxcdFxcdHJldHVybiAtZXJybm87XFxuIFxcbiBcXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcXG4tXFx0XFx0Lyogb25seSBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3IgbWVtb3J5LW1hcHBlZCBpbnRlcm5hbCBtYXBzICovXFxuK1xcdFxcdC8qIG9ubHkgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIHNrZWwgZGF0YSBtYXBzICovXFxuIFxcdFxcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5AQCAtNTEwLDcgKzUxMCw3IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcdHJldHVybiBtYXBfc3o7XFxuIH1cXG4gXFxuLS8qIEVtaXQgdHlwZSBzaXplIGFzc2VydHMgZm9yIGFsbCB0b3AtbGV2ZWwgZmllbGRzIGluIG1lbW9yeS1tYXBwZWQgaW50ZXJuYWwgbWFwcy4gKi9cXG4rLyogRW1pdCB0eXBlIHNpemUgYXNzZXJ0cyBmb3IgYWxsIHRvcC1sZXZlbCBmaWVsZHMgaW4gc2tlbCBkYXRhIG1hcHMuICovXFxuIHN0YXRpYyB2b2lkIGNvZGVnZW5fYXNzZXJ0cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnRmICpidGYgPSBicGZfb2JqZWN0X19idGYob2JqKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5pbmRleCBlNTc0ODcwZmI3MTY5Li5iNzQ5YzAxNzQyZWUwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuQEAgLTE4NDEsOSArMTg0MSw4IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcbiBcXHRzd2l0Y2ggKG1hcC1cXHUwMDNlZGVmLnR5cGUpIHtcXG4gXFx0Y2FzZSBCUEZfTUFQX1RZUEVfQVJSQVk6XFxuLVxcdFxcdHJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtXFx1MDAzZWRlZi52YWx1ZV9zaXplLCBtYXAtXFx1MDAzZWRlZi5tYXhfZW50cmllcyk7XFxuIFxcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTpcXG4tXFx0XFx0cmV0dXJuIG1hcC1cXHUwMDNlZGVmLnZhbHVlX3NpemU7XFxuK1xcdFxcdHJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtXFx1MDAzZWRlZi52YWx1ZV9zaXplLCBtYXAtXFx1MDAzZWRlZi5tYXhfZW50cmllcyk7XFxuIFxcdGNhc2UgQlBGX01BUF9UWVBFX0FSRU5BOlxcbiBcXHRcXHRyZXR1cm4gcGFnZV9zeiAqIG1hcC1cXHUwMDNlZGVmLm1heF9lbnRyaWVzO1xcbiBcXHRkZWZhdWx0OlxcbkBAIC0xOTUxLDcgKzE5NTAsNyBAQCBzdGF0aWMgYm9vbCBtYXBfaXNfbW1hcGFibGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogVGhlIGludGVybmFsIFBFUkNQVSBtYXBzIGFyZSBub3QgbW1hcGJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nXFxuK1xcdCAqIFRoZSBpbnRlcm5hbCBQRVJDUFUgbWFwcyBhcmUgbm90IG1tYXBhYmxlIGJlY2F1c2UgdGhlIHVuZGVybHlpbmdcXG4gXFx0ICogcGVyY3B1X2FycmF5IG1hcHMgZG8gbm90IGhhdmUgbW1hcCBzdXBwb3J0LlxcbiBcXHQgKi9cXG4gXFx0aWYgKG1hcC1cXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpXFxuQEAgLTI4MzEsNyArMjgzMCw3IEBAIHN0YXRpYyBzaXplX3QgYWRqdXN0X3JpbmdidWZfc3ooc2l6ZV90IHN6KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0LyogS2VybmVsIGV4cGVjdHMgQlBGX01BUF9UWVBFX1JJTkdCVUYncyBtYXhfZW50cmllcyB0byBiZVxcbiBcXHQgKiBhIHBvd2VyLW9mLTIgbXVsdGlwbGUgb2Yga2VybmVsJ3MgcGFnZSBzaXplLiBJZiB1c2VyIGRpbGlnZW50bHlcXG4tXFx0ICogc2F0aXNpZmllZCB0aGVzZSBjb25kaXRpb25zLCBwYXNzIHRoZSBzaXplIHRocm91Z2guXFxuK1xcdCAqIHNhdGlzZmllZCB0aGVzZSBjb25kaXRpb25zLCBwYXNzIHRoZSBzaXplIHRocm91Z2guXFxuIFxcdCAqL1xcbiBcXHRpZiAoKHN6ICUgcGFnZV9zeikgPT0gMCBcXHUwMDI2XFx1MDAyNiBpc19wb3dfb2ZfMihzeiAvIHBhZ2Vfc3opKVxcbiBcXHRcXHRyZXR1cm4gc3o7XFxuQEAgLTY5ODksNyArNjk4OCw3IEBAIGJwZl9vYmplY3RfX3JlbG9jX2NvZGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICptYWluX3Byb2csXFxuICAqICAgICstLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tK1xcbiAgKlxcbiAgKiBBdCB0aGlzIHBvaW50LCB3ZSByZWxvY2F0ZSBzdWJBIGNhbGxzLCB0aGVuIGdvIG9uZSBsZXZlbCB1cCBhbmQgZmluaXNoIHdpdGhcXG4tICogcmVsb2NhdGluIG1haW5BIGNhbGxzLiBtYWluQSBpcyBkb25lLlxcbisgKiByZWxvY2F0aW9uIG1haW5BIGNhbGxzLiBtYWluQSBpcyBkb25lLlxcbiAgKlxcbiAgKiBGb3IgbWFpbkIgcHJvY2VzcyBpcyBzaW1pbGFyIGJ1dCByZXN1bHRzIGluIGRpZmZlcmVudCBvcmRlci4gV2Ugc3RhcnQgd2l0aFxcbiAgKiBtYWluQiBhbmQgc2tpcCBzdWJBIGFuZCBzdWJCLCBhcyBtYWluQiBuZXZlciBjYWxscyB0aGVtIChhdCBsZWFzdFxcbkBAIC03OTM2LDcgKzc5MzUsNyBAQCBzdGF0aWMgaW50IGxpYmJwZl9wcmVwYXJlX3Byb2dfbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXFxuIFxcdFxcdHByb2ctXFx1MDAzZWF0dGFjaF9idGZfaWQgPSBidGZfdHlwZV9pZDtcXG4gXFxuIFxcdFxcdC8qIGJ1dCBieSBub3cgbGliYnBmIGNvbW1vbiBsb2dpYyBpcyBub3QgdXRpbGl6aW5nXFxuLVxcdFxcdCAqIHByb2ctXFx1MDAzZWF0YWNoX2J0Zl9vYmpfZmQvcHJvZy1cXHUwMDNlYXR0YWNoX2J0Zl9pZCBhbnltb3JlIGJlY2F1c2VcXG4rXFx0XFx0ICogcHJvZy1cXHUwMDNlYXR0YWNoX2J0Zl9vYmpfZmQvcHJvZy1cXHUwMDNlYXR0YWNoX2J0Zl9pZCBhbnltb3JlIGJlY2F1c2VcXG4gXFx0XFx0ICogdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYWZ0ZXIgb3B0cyB3ZXJlIHBvcHVsYXRlZCBieVxcbiBcXHRcXHQgKiBsaWJicGYsIHNvIHRoaXMgY2FsbGJhY2sgaGFzIHRvIHVwZGF0ZSBvcHRzIGV4cGxpY2l0bHkgaGVyZVxcbiBcXHRcXHQgKi9cXG5AQCAtMTQyMTksNyArMTQyMTgsNyBAQCBwZXJmX2V2ZW50X3JlYWRfc2ltcGxlKHZvaWQgKm1tYXBfbWVtLCBzaXplX3QgbW1hcF9zaXplLCBzaXplX3QgcGFnZV9zaXplLFxcbiBcXHRcXHRpZiAoKCh2b2lkICopZWhkcikgKyBlaGRyX3NpemUgXFx1MDAzZSBiYXNlICsgbW1hcF9zaXplKSB7XFxuIFxcdFxcdFxcdHZvaWQgKmNvcHlfc3RhcnQgPSBlaGRyO1xcbiBcXHRcXHRcXHRzaXplX3QgbGVuX2ZpcnN0ID0gYmFzZSArIG1tYXBfc2l6ZSAtIGNvcHlfc3RhcnQ7XFxuLVxcdFxcdFxcdHNpemVfdCBsZW5fc2VjbmQgPSBlaGRyX3NpemUgLSBsZW5fZmlyc3Q7XFxuK1xcdFxcdFxcdHNpemVfdCBsZW5fc2Vjb25kID0gZWhkcl9zaXplIC0gbGVuX2ZpcnN0O1xcbiBcXG4gXFx0XFx0XFx0aWYgKCpjb3B5X3NpemUgXFx1MDAzYyBlaGRyX3NpemUpIHtcXG4gXFx0XFx0XFx0XFx0ZnJlZSgqY29weV9tZW0pO1xcbkBAIC0xNDIzMyw3ICsxNDIzMiw3IEBAIHBlcmZfZXZlbnRfcmVhZF9zaW1wbGUodm9pZCAqbW1hcF9tZW0sIHNpemVfdCBtbWFwX3NpemUsIHNpemVfdCBwYWdlX3NpemUsXFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdG1lbWNweSgqY29weV9tZW0sIGNvcHlfc3RhcnQsIGxlbl9maXJzdCk7XFxuLVxcdFxcdFxcdG1lbWNweSgqY29weV9tZW0gKyBsZW5fZmlyc3QsIGJhc2UsIGxlbl9zZWNuZCk7XFxuK1xcdFxcdFxcdG1lbWNweSgqY29weV9tZW0gKyBsZW5fZmlyc3QsIGJhc2UsIGxlbl9zZWNvbmQpO1xcbiBcXHRcXHRcXHRlaGRyID0gKmNvcHlfbWVtO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xNDI1MSw3ICsxNDI1MCw3IEBAIHN0cnVjdCBwZXJmX2J1ZmZlcjtcXG4gXFxuIHN0cnVjdCBwZXJmX2J1ZmZlcl9wYXJhbXMge1xcbiBcXHRzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyO1xcbi1cXHQvKiBpZiBldmVudF9jYiBpcyBzcGVjaWZpZWQsIGl0IHRha2VzIHByZWNlbmRlbmNlICovXFxuK1xcdC8qIGlmIGV2ZW50X2NiIGlzIHNwZWNpZmllZCwgaXQgdGFrZXMgcHJlY2VkZW5jZSAqL1xcbiBcXHRwZXJmX2J1ZmZlcl9ldmVudF9mbiBldmVudF9jYjtcXG4gXFx0Lyogc2FtcGxlX2NiIGFuZCBsb3N0X2NiIGFyZSBoaWdoZXItbGV2ZWwgY29tbW9uLWNhc2UgY2FsbGJhY2tzICovXFxuIFxcdHBlcmZfYnVmZmVyX3NhbXBsZV9mbiBzYW1wbGVfY2I7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xcbmluZGV4IDdkNmJkYTkwOTI5NTQuLmM2ZDA1NWI5NDU3ZGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jXFxuQEAgLTY4LDEyICs2OCw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mXFxuIHtcXG4gXFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgKmRhdGEgPSBOVUxMO1xcbiBcXHRpbnQgaSwgZXJyLCBrZXkgPSAwLCBudW1fb25saW5lLCBydW4gPSAwO1xcbi1cXHRfX3U2NCBhcmdzWzJdID0gezB4MTIzNFVMTCwgMHg1Njc4VUxMfTtcXG4gXFx0c2l6ZV90IGRhdGFfc3o7XFxuIFxcdGJvb2wgKm9ubGluZTtcXG4gXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzLFxcbi1cXHRcXHQgICAgLmN0eF9pbiA9IGFyZ3MsXFxuLVxcdFxcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2YoYXJncyksXFxuIFxcdFxcdCAgICAuZmxhZ3MgPSBCUEZfRl9URVNUX1JVTl9PTl9DUFUsXFxuIFxcdCk7XFxuIFxcbkBAIC04MSw3ICs3OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mXFxuIFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInBhcnNlX2NwdV9tYXNrX2ZpbGVcXFwiKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0ZGF0YV9zeiA9IG1hcCA/IGJwZl9tYXBfX3ZhbHVlX3NpemUobWFwKSA6IHNpemVvZigqZGF0YSk7XFxuK1xcdGRhdGFfc3ogPSBzaXplb2YoKmRhdGEpO1xcbiBcXHRkYXRhID0gY2FsbG9jKDEsIGRhdGFfc3opO1xcbiBcXHRpZiAoIUFTU0VSVF9PS19QVFIoZGF0YSwgXFxcImNhbGxvYyBwZXJjcHUgZGF0YVxcXCIpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMTA5LDcgKzEwNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0QVNTRVJUX0VRKCpydW5wLCArK3J1biwgXFxcInJ1blxcXCIpO1xcbi1cXHRcXHRBU1NFUlRfRVEoZGF0YS1cXHUwMDNlY3B1X2lkWzBdLCBpLCBcXFwiY3B1X2lkXFxcIik7XFxuK1xcdFxcdEFTU0VSVF9FUShkYXRhLVxcdTAwM2VjcHVfaWQsIGksIFxcXCJjcHVfaWRcXFwiKTtcXG4gXFx0XFx0QVNTRVJUX0VRKGRhdGEtXFx1MDAzZWRhdGEsIDEsIFxcXCJkYXRhXFxcIik7XFxuIFxcdFxcdEFTU0VSVF9UUlVFKGRhdGEtXFx1MDAzZXNldCwgXFxcInNldFxcXCIpO1xcbiBcXHRcXHRBU1NFUlRfRVEoZGF0YS1cXHUwMDNlbnVtc1s2XSwgMHhjMGRlLCBcXFwibnVtc1s2XVxcXCIpO1xcbkBAIC0xMjYsMTEgKzEyMywxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZlxcbiBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgaW5pdF92YWx1ZSA9IHt9O1xcbitcXHRjb25zdCBfX3UzMiBkZXNpcmVkX3N6ID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKSAqIDI7XFxuIFxcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1ICppbml0X2RhdGE7XFxuLVxcdGNvbnN0IF9fdTMyIGRlc2lyZWRfc3ogPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpO1xcbiBcXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEgKnNrZWwgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwLCAqbWFwX3BlcmNwdV9hcnI7XFxuIFxcdHNpemVfdCBpbml0X2RhdGFfc3o7XFxuLVxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuIFxcdGludCBwcm9nX2ZkLCBlcnI7XFxuIFxcbiBcXHRza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTtcXG5AQCAtMTYzLDkgKzE2MCwxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpXFxuIFxcdGlmICghQVNTRVJUX0VRKGJwZl9tYXBfX3R5cGUobWFwKSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXFxcImJwZl9tYXBfX3R5cGVcXFwiKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHRpbml0X3ZhbHVlLnNldCA9IDE7XFxuIFxcdGluaXRfdmFsdWUuZGF0YSA9IDI7XFxuIFxcdGluaXRfdmFsdWUubnVtc1s2XSA9IC0xO1xcbiBcXHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmkgPSAyO1xcbitcXHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLnNldCA9IDE7XFxuIFxcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSA9IC0xO1xcbiBcXHRlcnIgPSBicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZShtYXAsIFxcdTAwMjZpbml0X3ZhbHVlLCBzaXplb2YoaW5pdF92YWx1ZSkpO1xcbiBcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZVxcXCIpKVxcbkBAIC0xNzcsMzMgKzE3NiwzNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpXFxuIFxcbiBcXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVxcdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFxcXCJpbml0X3ZhbHVlIGRhdGFcXFwiKTtcXG4gXFx0QVNTRVJUX0VRKGluaXRfZGF0YS1cXHUwMDNlc2V0LCBpbml0X3ZhbHVlLnNldCwgXFxcImluaXRfdmFsdWUgc2V0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShpbml0X2RhdGEtXFx1MDAzZW51bXNbNl0sIGluaXRfdmFsdWUubnVtc1s2XSwgXFxcImluaXRfdmFsdWUgbnVtc1s2XVxcXCIpO1xcbiBcXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVxcdTAwM2VzdHJ1Y3RfZGF0YS5pLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmksIFxcXCJpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLmlcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGluaXRfZGF0YS1cXHUwMDNlc3RydWN0X2RhdGEuc2V0LCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLnNldCxcXG4rXFx0XFx0ICBcXFwiaW5pdF92YWx1ZSBzdHJ1Y3RfZGF0YS5zZXRcXFwiKTtcXG4gXFx0QVNTRVJUX0VRKGluaXRfZGF0YS1cXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5udW1zWzZdLFxcbiBcXHRcXHQgIFxcXCJpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLm51bXNbNl1cXFwiKTtcXG4gXFx0QVNTRVJUX0VRKGluaXRfZGF0YV9zeiwgc2l6ZW9mKGluaXRfdmFsdWUpLCBcXFwiaW5pdF92YWx1ZSBzaXplXFxcIik7XFxuIFxcdEFTU0VSVF9FUSgodm9pZCAqKSBpbml0X2RhdGEsICh2b2lkICopIHNrZWwtXFx1MDAzZXBlcmNwdSwgXFxcInNrZWwtXFx1MDAzZXBlcmNwdSBlcSBpbml0X2RhdGFcXFwiKTtcXG4gXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlZGF0YSwgaW5pdF92YWx1ZS5kYXRhLCBcXFwic2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VkYXRhXFxcIik7XFxuIFxcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXNldCwgaW5pdF92YWx1ZS5zZXQsIFxcXCJza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXNldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VudW1zWzZdLCBpbml0X3ZhbHVlLm51bXNbNl0sIFxcXCJza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZW51bXNbNl1cXFwiKTtcXG4gXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlc3RydWN0X2RhdGEuaSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pLFxcbiBcXHRcXHQgIFxcXCJza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhLmlcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlc3RydWN0X2RhdGEuc2V0LCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLnNldCxcXG4rXFx0XFx0ICBcXFwic2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzdHJ1Y3RfZGF0YS5zZXRcXFwiKTtcXG4gXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5udW1zWzZdLFxcbiBcXHRcXHQgIFxcXCJza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl1cXFwiKTtcXG4gXFxuLVxcdEFTU0VSVF9HVChkZXNpcmVkX3N6LCBzaXplb2YoaW5pdF92YWx1ZSksIFxcXCJkZXNpcmVkX3N6XFxcIik7XFxuLVxcdGVyciA9IGJwZl9tYXBfX3NldF92YWx1ZV9zaXplKG1hcCwgZGVzaXJlZF9zeik7XFxuK1xcdHNrZWwtXFx1MDAzZXBlcmNwdV9hcnItXFx1MDAzZWFyclswXSA9IC0xO1xcbitcXHRtYXBfcGVyY3B1X2FyciA9IHNrZWwtXFx1MDAzZW1hcHMucGVyY3B1X2FycjtcXG4rXFx0ZXJyID0gYnBmX21hcF9fc2V0X3ZhbHVlX3NpemUobWFwX3BlcmNwdV9hcnIsIGRlc2lyZWRfc3opO1xcbiBcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJicGZfbWFwX19zZXRfdmFsdWVfc2l6ZVxcXCIpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKCFBU1NFUlRfRVEoYnBmX21hcF9fdmFsdWVfc2l6ZShtYXApLCBkZXNpcmVkX3N6LCBcXFwicGVyY3B1IHZhbHVlIHNpemVcXFwiKSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdGlmICghQVNTRVJUX05FUShicGZfbWFwX19idGZfdmFsdWVfdHlwZV9pZChtYXApLCAwLCBcXFwicGVyY3B1IEJURiB2YWx1ZSB0eXBlXFxcIikpXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9tYXBfX3ZhbHVlX3NpemUobWFwX3BlcmNwdV9hcnIpLCBkZXNpcmVkX3N6LCBcXFwicGVyY3B1IHZhbHVlIHNpemVcXFwiKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRpbml0X2RhdGEgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKG1hcCwgXFx1MDAyNmluaXRfZGF0YV9zeik7XFxuLVxcdGlmICghQVNTRVJUX09LX1BUUihpbml0X2RhdGEsIFxcXCJyZXNpemVkIGJwZl9tYXBfX2luaXRpYWxfdmFsdWVcXFwiKSlcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKGJwZl9tYXBfX2J0Zl92YWx1ZV90eXBlX2lkKG1hcF9wZXJjcHVfYXJyKSwgMCwgXFxcInBlcmNwdSBCVEYgdmFsdWUgdHlwZVxcXCIpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKCFBU1NFUlRfRVEoaW5pdF9kYXRhX3N6LCBkZXNpcmVkX3N6LCBcXFwicmVzaXplZCBpbml0aWFsIHZhbHVlIHNpemVcXFwiKSlcXG4rXFx0c2tlbC1cXHUwMDNlcGVyY3B1X2FyciA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUobWFwX3BlcmNwdV9hcnIsIFxcdTAwMjZpbml0X2RhdGFfc3opO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlcGVyY3B1X2FyciwgXFxcInJlc2l6ZWQgcGVyY3B1X2FyciB2YWx1ZVxcXCIpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKCFBU1NFUlRfRVEoaW5pdF9kYXRhLVxcdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFxcXCJyZXNpemVkIGluaXRpYWwgdmFsdWUgZGF0YVxcXCIpKVxcbitcXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2VwZXJjcHVfYXJyLVxcdTAwM2VhcnJbMF0sIC0xLCBcXFwiYXJyWzBdXFxcIikpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0ZXJyID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWQoc2tlbCk7XFxuQEAgLTM0NSw4ICszNDgsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pdGVyKHZvaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHNrZWwtXFx1MDAzZXJvZGF0YS1cXHUwMDNlbnVtX2NwdXMgPSBudW1fY3B1cztcXG4tXFx0c2tlbC1cXHUwMDNlcm9kYXRhLVxcdTAwM2VvZmZzZXRvZl9udW0gPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSwgc3RydWN0X2RhdGEpO1xcbi1cXHRza2VsLVxcdTAwM2Vyb2RhdGEtXFx1MDAzZW9mZnNldG9mX251bSArPSBzaXplb2Yoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzdHJ1Y3RfZGF0YSkgLSBzaXplb2YoaW50KTtcXG4rXFx0c2tlbC1cXHUwMDNlcm9kYXRhLVxcdTAwM2VudW1fb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3RfZGF0YS5udW1zWzZdKTtcXG4gXFx0c2tlbC1cXHUwMDNlcm9kYXRhLVxcdTAwM2VlbGVtX3N6ID0gcm91bmR1cChzaXplb2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUpLCA4KTtcXG4gXFx0c2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdID0gMHhjMGRlO1xcbiBcXG5AQCAtMzY5LDcgKzM3Miw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2l0ZXIodm9pZClcXG4gXFx0XFx0ZG8geyB9IHdoaWxlICgwKTtcXG4gXFx0QVNTRVJUX0VRKGxlbiwgMCwgXFxcInJlYWQgaXRlclxcXCIpO1xcbiBcXHRBU1NFUlRfVFJVRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJ1bl9pdGVyLCBcXFwicnVuX2l0ZXJcXFwiKTtcXG4tXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcGVyY3B1X2RhdGFfc3VtLCAweGMwZGUgKiBudW1fY3B1cywgXFxcInBlcmNwdV9kYXRhX3N1bVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdW0sIDB4YzBkZSAqIG51bV9jcHVzLCBcXFwic3VtXFxcIik7XFxuIFxcbiBcXHRjbG9zZShmZCk7XFxuIG91dDpcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xcbmluZGV4IDcxZmY4ZDFiZjQ5ZWIuLjE3NWM0NDAwMDc1M2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xcbkBAIC04LDkgKzgsMTEgQEAgaW50IGxvb25nIFNFQyhcXFwiLnBlcmNwdS5sb29vb29vb29vbmdcXFwiKTtcXG4gaW50IGRhdGEzIFNFQyhcXFwiLmRhdGEucGVyY3B1XFxcIik7XFxuIGludCBkYXRhMiBTRUMoXFxcIi5wZXJjcHUuZGF0YVxcXCIpO1xcbiBcXG4rLyogVXNlZCBmb3IgdGVzdGluZyBicGZfbWFwX19zZXRfdmFsdWVfc2l6ZSgpLiAqL1xcbitpbnQgYXJyWzFdIFNFQyhcXFwiLnBlcmNwdS5hcnJcXFwiKTtcXG4rXFxuIGludCBydW47XFxuLS8qIGNwdV9pZCBhcyBhcnJheSB0byB2ZXJpZnkgbWFwIHZhbHVlIHJlc2l6aW5nLiAqL1xcbi1pbnQgY3B1X2lkWzFdIFNFQyhcXFwiLnBlcmNwdVxcXCIpO1xcbitpbnQgY3B1X2lkIFNFQyhcXFwiLnBlcmNwdVxcXCIpO1xcbiBpbnQgZGF0YSBTRUMoXFxcIi5wZXJjcHVcXFwiKSA9IC0xO1xcbiBpbnQgbnVtc1s3XSBTRUMoXFxcIi5wZXJjcHVcXFwiKTtcXG4gYm9vbCBzZXQgU0VDKFxcXCIucGVyY3B1XFxcIikgPSBmYWxzZTtcXG5AQCAtMzQsNyArMzYsNyBAQCBpbnQgdXBkYXRlX3BlcmNwdV9kYXRhKHZvaWQgKmN0eClcXG4gXFx0ZGF0YSA9IDE7XFxuIFxcdHJ1bisrO1xcbiBcXHRzZXQgPSB0cnVlO1xcbi1cXHRjcHVfaWRbMF0gPSBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQoKTtcXG4rXFx0Y3B1X2lkID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC02Miw5ICs2NCw5IEBAIGludCB2ZXJpZmllcl9zbnByaW50Zih2b2lkICpjdHgpXFxuIH1cXG4gXFxuIHZvbGF0aWxlIGNvbnN0IF9fdTMyIG51bV9jcHVzID0gMDtcXG4tdm9sYXRpbGUgY29uc3QgaW50IG9mZnNldG9mX251bTtcXG4rdm9sYXRpbGUgY29uc3QgaW50IG51bV9vZmY7XFxuIHZvbGF0aWxlIGNvbnN0IGludCBlbGVtX3N6O1xcbi1fX3UzMiBwZXJjcHVfZGF0YV9zdW0gPSAwO1xcbitfX3UzMiBzdW0gPSAwO1xcbiBib29sIHJ1bl9pdGVyID0gZmFsc2U7XFxuIFxcbiBTRUMoXFxcIml0ZXIvYnBmX21hcF9lbGVtXFxcIilcXG5AQCAtODAsNyArODIsNyBAQCBpbnQgZHVtcF9wZXJjcHVfZGF0YShzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSAqY3R4KVxcbiBcXHRydW5faXRlciA9IHRydWU7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2NwdXM7IGkrKykge1xcbi1cXHRcXHRwZXJjcHVfZGF0YV9zdW0gKz0gKihpbnQgKikgKHBwdHIgKyBvZmZzZXRvZl9udW0pO1xcbitcXHRcXHRzdW0gKz0gKihpbnQgKikgKHBwdHIgKyBudW1fb2ZmKTtcXG4gXFx0XFx0cHB0ciArPSBlbGVtX3N6O1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxODoxNTowMS43OTEwMDM0NzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTkyMjQ1MjA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSByZW1vdmVzIGEgYmxhbmsgbGluZSBpbiB0aGUga2VybmVsIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGFuZCBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGxpYmJwZiwgYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNkNjk2NTM1ZWFhZGEyM2Q3MzMwOGQwMGU0N2ZiMmIyZjdiMzk5YjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxODoxNTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNmFjMWFmY2VkMjBiZi4uODFlYWU4ZjcwYWNkYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTIxMTMsNyArMTIxMTMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbiBcdFx0fVxuIFxuLVxuIFx0XHRpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSBcdTAwMjZcdTAwMjYgdHlwZV9tYXlfYmVfbnVsbChrZl9hcmdfdHlwZSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuaW5kZXggYTUwNTQwZWY2NTIxYy4uZTVlODIyNTVhZjI0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuQEAgLTMwMyw3ICszMDMsNyBAQCBzdGF0aWMgaW50IGNvZGVnZW5fZGF0YXNlY3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpXG4gXHRcdHJldHVybiAtZXJybm87XG4gXG4gXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcbi1cdFx0Lyogb25seSBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3IgbWVtb3J5LW1hcHBlZCBpbnRlcm5hbCBtYXBzICovXG4rXHRcdC8qIG9ubHkgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIHNrZWwgZGF0YSBtYXBzICovXG4gXHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG5AQCAtNTEwLDcgKzUxMCw3IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRyZXR1cm4gbWFwX3N6O1xuIH1cbiBcbi0vKiBFbWl0IHR5cGUgc2l6ZSBhc3NlcnRzIGZvciBhbGwgdG9wLWxldmVsIGZpZWxkcyBpbiBtZW1vcnktbWFwcGVkIGludGVybmFsIG1hcHMuICovXG4rLyogRW1pdCB0eXBlIHNpemUgYXNzZXJ0cyBmb3IgYWxsIHRvcC1sZXZlbCBmaWVsZHMgaW4gc2tlbCBkYXRhIG1hcHMuICovXG4gc3RhdGljIHZvaWQgY29kZWdlbl9hc3NlcnRzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxuIHtcbiBcdHN0cnVjdCBidGYgKmJ0ZiA9IGJwZl9vYmplY3RfX2J0ZihvYmopO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCBlNTc0ODcwZmI3MTY5Li5iNzQ5YzAxNzQyZWUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuQEAgLTE4NDEsOSArMTg0MSw4IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4gXG4gXHRzd2l0Y2ggKG1hcC1cdTAwM2VkZWYudHlwZSkge1xuIFx0Y2FzZSBCUEZfTUFQX1RZUEVfQVJSQVk6XG4tXHRcdHJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemUsIG1hcC1cdTAwM2VkZWYubWF4X2VudHJpZXMpO1xuIFx0Y2FzZSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZOlxuLVx0XHRyZXR1cm4gbWFwLVx1MDAzZWRlZi52YWx1ZV9zaXplO1xuK1x0XHRyZXR1cm4gYXJyYXlfbWFwX21tYXBfc3oobWFwLVx1MDAzZWRlZi52YWx1ZV9zaXplLCBtYXAtXHUwMDNlZGVmLm1heF9lbnRyaWVzKTtcbiBcdGNhc2UgQlBGX01BUF9UWVBFX0FSRU5BOlxuIFx0XHRyZXR1cm4gcGFnZV9zeiAqIG1hcC1cdTAwM2VkZWYubWF4X2VudHJpZXM7XG4gXHRkZWZhdWx0OlxuQEAgLTE5NTEsNyArMTk1MCw3IEBAIHN0YXRpYyBib29sIG1hcF9pc19tbWFwYWJsZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKlxuLVx0ICogVGhlIGludGVybmFsIFBFUkNQVSBtYXBzIGFyZSBub3QgbW1hcGJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nXG4rXHQgKiBUaGUgaW50ZXJuYWwgUEVSQ1BVIG1hcHMgYXJlIG5vdCBtbWFwYWJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nXG4gXHQgKiBwZXJjcHVfYXJyYXkgbWFwcyBkbyBub3QgaGF2ZSBtbWFwIHN1cHBvcnQuXG4gXHQgKi9cbiBcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpXG5AQCAtMjgzMSw3ICsyODMwLDcgQEAgc3RhdGljIHNpemVfdCBhZGp1c3RfcmluZ2J1Zl9zeihzaXplX3Qgc3opXG4gXHRcdHJldHVybiAwO1xuIFx0LyogS2VybmVsIGV4cGVjdHMgQlBGX01BUF9UWVBFX1JJTkdCVUYncyBtYXhfZW50cmllcyB0byBiZVxuIFx0ICogYSBwb3dlci1vZi0yIG11bHRpcGxlIG9mIGtlcm5lbCdzIHBhZ2Ugc2l6ZS4gSWYgdXNlciBkaWxpZ2VudGx5XG4tXHQgKiBzYXRpc2lmaWVkIHRoZXNlIGNvbmRpdGlvbnMsIHBhc3MgdGhlIHNpemUgdGhyb3VnaC5cbitcdCAqIHNhdGlzZmllZCB0aGVzZSBjb25kaXRpb25zLCBwYXNzIHRoZSBzaXplIHRocm91Z2guXG4gXHQgKi9cbiBcdGlmICgoc3ogJSBwYWdlX3N6KSA9PSAwIFx1MDAyNlx1MDAyNiBpc19wb3dfb2ZfMihzeiAvIHBhZ2Vfc3opKVxuIFx0XHRyZXR1cm4gc3o7XG5AQCAtNjk4OSw3ICs2OTg4LDcgQEAgYnBmX29iamVjdF9fcmVsb2NfY29kZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1haW5fcHJvZyxcbiAgKiAgICArLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLStcbiAgKlxuICAqIEF0IHRoaXMgcG9pbnQsIHdlIHJlbG9jYXRlIHN1YkEgY2FsbHMsIHRoZW4gZ28gb25lIGxldmVsIHVwIGFuZCBmaW5pc2ggd2l0aFxuLSAqIHJlbG9jYXRpbiBtYWluQSBjYWxscy4gbWFpbkEgaXMgZG9uZS5cbisgKiByZWxvY2F0aW9uIG1haW5BIGNhbGxzLiBtYWluQSBpcyBkb25lLlxuICAqXG4gICogRm9yIG1haW5CIHByb2Nlc3MgaXMgc2ltaWxhciBidXQgcmVzdWx0cyBpbiBkaWZmZXJlbnQgb3JkZXIuIFdlIHN0YXJ0IHdpdGhcbiAgKiBtYWluQiBhbmQgc2tpcCBzdWJBIGFuZCBzdWJCLCBhcyBtYWluQiBuZXZlciBjYWxscyB0aGVtIChhdCBsZWFzdFxuQEAgLTc5MzYsNyArNzkzNSw3IEBAIHN0YXRpYyBpbnQgbGliYnBmX3ByZXBhcmVfcHJvZ19sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdFx0cHJvZy1cdTAwM2VhdHRhY2hfYnRmX2lkID0gYnRmX3R5cGVfaWQ7XG4gXG4gXHRcdC8qIGJ1dCBieSBub3cgbGliYnBmIGNvbW1vbiBsb2dpYyBpcyBub3QgdXRpbGl6aW5nXG4tXHRcdCAqIHByb2ctXHUwMDNlYXRhY2hfYnRmX29ial9mZC9wcm9nLVx1MDAzZWF0dGFjaF9idGZfaWQgYW55bW9yZSBiZWNhdXNlXG4rXHRcdCAqIHByb2ctXHUwMDNlYXR0YWNoX2J0Zl9vYmpfZmQvcHJvZy1cdTAwM2VhdHRhY2hfYnRmX2lkIGFueW1vcmUgYmVjYXVzZVxuIFx0XHQgKiB0aGlzIGNhbGxiYWNrIGlzIGNhbGxlZCBhZnRlciBvcHRzIHdlcmUgcG9wdWxhdGVkIGJ5XG4gXHRcdCAqIGxpYmJwZiwgc28gdGhpcyBjYWxsYmFjayBoYXMgdG8gdXBkYXRlIG9wdHMgZXhwbGljaXRseSBoZXJlXG4gXHRcdCAqL1xuQEAgLTE0MjE5LDcgKzE0MjE4LDcgQEAgcGVyZl9ldmVudF9yZWFkX3NpbXBsZSh2b2lkICptbWFwX21lbSwgc2l6ZV90IG1tYXBfc2l6ZSwgc2l6ZV90IHBhZ2Vfc2l6ZSxcbiBcdFx0aWYgKCgodm9pZCAqKWVoZHIpICsgZWhkcl9zaXplIFx1MDAzZSBiYXNlICsgbW1hcF9zaXplKSB7XG4gXHRcdFx0dm9pZCAqY29weV9zdGFydCA9IGVoZHI7XG4gXHRcdFx0c2l6ZV90IGxlbl9maXJzdCA9IGJhc2UgKyBtbWFwX3NpemUgLSBjb3B5X3N0YXJ0O1xuLVx0XHRcdHNpemVfdCBsZW5fc2VjbmQgPSBlaGRyX3NpemUgLSBsZW5fZmlyc3Q7XG4rXHRcdFx0c2l6ZV90IGxlbl9zZWNvbmQgPSBlaGRyX3NpemUgLSBsZW5fZmlyc3Q7XG4gXG4gXHRcdFx0aWYgKCpjb3B5X3NpemUgXHUwMDNjIGVoZHJfc2l6ZSkge1xuIFx0XHRcdFx0ZnJlZSgqY29weV9tZW0pO1xuQEAgLTE0MjMzLDcgKzE0MjMyLDcgQEAgcGVyZl9ldmVudF9yZWFkX3NpbXBsZSh2b2lkICptbWFwX21lbSwgc2l6ZV90IG1tYXBfc2l6ZSwgc2l6ZV90IHBhZ2Vfc2l6ZSxcbiBcdFx0XHR9XG4gXG4gXHRcdFx0bWVtY3B5KCpjb3B5X21lbSwgY29weV9zdGFydCwgbGVuX2ZpcnN0KTtcbi1cdFx0XHRtZW1jcHkoKmNvcHlfbWVtICsgbGVuX2ZpcnN0LCBiYXNlLCBsZW5fc2VjbmQpO1xuK1x0XHRcdG1lbWNweSgqY29weV9tZW0gKyBsZW5fZmlyc3QsIGJhc2UsIGxlbl9zZWNvbmQpO1xuIFx0XHRcdGVoZHIgPSAqY29weV9tZW07XG4gXHRcdH1cbiBcbkBAIC0xNDI1MSw3ICsxNDI1MCw3IEBAIHN0cnVjdCBwZXJmX2J1ZmZlcjtcbiBcbiBzdHJ1Y3QgcGVyZl9idWZmZXJfcGFyYW1zIHtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHI7XG4tXHQvKiBpZiBldmVudF9jYiBpcyBzcGVjaWZpZWQsIGl0IHRha2VzIHByZWNlbmRlbmNlICovXG4rXHQvKiBpZiBldmVudF9jYiBpcyBzcGVjaWZpZWQsIGl0IHRha2VzIHByZWNlZGVuY2UgKi9cbiBcdHBlcmZfYnVmZmVyX2V2ZW50X2ZuIGV2ZW50X2NiO1xuIFx0Lyogc2FtcGxlX2NiIGFuZCBsb3N0X2NiIGFyZSBoaWdoZXItbGV2ZWwgY29tbW9uLWNhc2UgY2FsbGJhY2tzICovXG4gXHRwZXJmX2J1ZmZlcl9zYW1wbGVfZm4gc2FtcGxlX2NiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xuaW5kZXggN2Q2YmRhOTA5Mjk1NC4uYzZkMDU1Yjk0NTdkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jXG5AQCAtNjgsMTIgKzY4LDkgQEAgc3RhdGljIHZvaWQgdGVzdF9wZXJjcHVfZGF0YV9vbl9jcHVzKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBtYXBfZmQsIGludCBwcm9nX2ZcbiB7XG4gXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSAqZGF0YSA9IE5VTEw7XG4gXHRpbnQgaSwgZXJyLCBrZXkgPSAwLCBudW1fb25saW5lLCBydW4gPSAwO1xuLVx0X191NjQgYXJnc1syXSA9IHsweDEyMzRVTEwsIDB4NTY3OFVMTH07XG4gXHRzaXplX3QgZGF0YV9zejtcbiBcdGJvb2wgKm9ubGluZTtcbiBcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyxcbi1cdFx0ICAgIC5jdHhfaW4gPSBhcmdzLFxuLVx0XHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKGFyZ3MpLFxuIFx0XHQgICAgLmZsYWdzID0gQlBGX0ZfVEVTVF9SVU5fT05fQ1BVLFxuIFx0KTtcbiBcbkBAIC04MSw3ICs3OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mXG4gXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicGFyc2VfY3B1X21hc2tfZmlsZVwiKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0ZGF0YV9zeiA9IG1hcCA/IGJwZl9tYXBfX3ZhbHVlX3NpemUobWFwKSA6IHNpemVvZigqZGF0YSk7XG4rXHRkYXRhX3N6ID0gc2l6ZW9mKCpkYXRhKTtcbiBcdGRhdGEgPSBjYWxsb2MoMSwgZGF0YV9zeik7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIoZGF0YSwgXCJjYWxsb2MgcGVyY3B1IGRhdGFcIikpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTEwOSw3ICsxMDYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZlxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRBU1NFUlRfRVEoKnJ1bnAsICsrcnVuLCBcInJ1blwiKTtcbi1cdFx0QVNTRVJUX0VRKGRhdGEtXHUwMDNlY3B1X2lkWzBdLCBpLCBcImNwdV9pZFwiKTtcbitcdFx0QVNTRVJUX0VRKGRhdGEtXHUwMDNlY3B1X2lkLCBpLCBcImNwdV9pZFwiKTtcbiBcdFx0QVNTRVJUX0VRKGRhdGEtXHUwMDNlZGF0YSwgMSwgXCJkYXRhXCIpO1xuIFx0XHRBU1NFUlRfVFJVRShkYXRhLVx1MDAzZXNldCwgXCJzZXRcIik7XG4gXHRcdEFTU0VSVF9FUShkYXRhLVx1MDAzZW51bXNbNl0sIDB4YzBkZSwgXCJudW1zWzZdXCIpO1xuQEAgLTEyNiwxMSArMTIzLDExIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mXG4gc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaW5pdCh2b2lkKVxuIHtcbiBcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1IGluaXRfdmFsdWUgPSB7fTtcbitcdGNvbnN0IF9fdTMyIGRlc2lyZWRfc3ogPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpICogMjtcbiBcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1ICppbml0X2RhdGE7XG4tXHRjb25zdCBfX3UzMiBkZXNpcmVkX3N6ID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTtcbiBcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YSAqc2tlbCA9IE5VTEw7XG4rXHRzdHJ1Y3QgYnBmX21hcCAqbWFwLCAqbWFwX3BlcmNwdV9hcnI7XG4gXHRzaXplX3QgaW5pdF9kYXRhX3N6O1xuLVx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbiBcdGludCBwcm9nX2ZkLCBlcnI7XG4gXG4gXHRza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTtcbkBAIC0xNjMsOSArMTYwLDExIEBAIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2luaXQodm9pZClcbiBcdGlmICghQVNTRVJUX0VRKGJwZl9tYXBfX3R5cGUobWFwKSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXCJicGZfbWFwX190eXBlXCIpKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdGluaXRfdmFsdWUuc2V0ID0gMTtcbiBcdGluaXRfdmFsdWUuZGF0YSA9IDI7XG4gXHRpbml0X3ZhbHVlLm51bXNbNl0gPSAtMTtcbiBcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSA9IDI7XG4rXHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLnNldCA9IDE7XG4gXHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0gPSAtMTtcbiBcdGVyciA9IGJwZl9tYXBfX3NldF9pbml0aWFsX3ZhbHVlKG1hcCwgXHUwMDI2aW5pdF92YWx1ZSwgc2l6ZW9mKGluaXRfdmFsdWUpKTtcbiBcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZVwiKSlcbkBAIC0xNzcsMzMgKzE3NiwzNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpXG4gXG4gXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZWRhdGEsIGluaXRfdmFsdWUuZGF0YSwgXCJpbml0X3ZhbHVlIGRhdGFcIik7XG4gXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXNldCwgaW5pdF92YWx1ZS5zZXQsIFwiaW5pdF92YWx1ZSBzZXRcIik7XG4rXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZW51bXNbNl0sIGluaXRfdmFsdWUubnVtc1s2XSwgXCJpbml0X3ZhbHVlIG51bXNbNl1cIik7XG4gXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXN0cnVjdF9kYXRhLmksIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSwgXCJpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLmlcIik7XG4rXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXN0cnVjdF9kYXRhLnNldCwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5zZXQsXG4rXHRcdCAgXCJpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLnNldFwiKTtcbiBcdEFTU0VSVF9FUShpbml0X2RhdGEtXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5udW1zWzZdLFxuIFx0XHQgIFwiaW5pdF92YWx1ZSBzdHJ1Y3RfZGF0YS5udW1zWzZdXCIpO1xuIFx0QVNTRVJUX0VRKGluaXRfZGF0YV9zeiwgc2l6ZW9mKGluaXRfdmFsdWUpLCBcImluaXRfdmFsdWUgc2l6ZVwiKTtcbiBcdEFTU0VSVF9FUSgodm9pZCAqKSBpbml0X2RhdGEsICh2b2lkICopIHNrZWwtXHUwMDNlcGVyY3B1LCBcInNrZWwtXHUwMDNlcGVyY3B1IGVxIGluaXRfZGF0YVwiKTtcbiBcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlZGF0YVwiKTtcbiBcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzZXQsIGluaXRfdmFsdWUuc2V0LCBcInNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXNldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VudW1zWzZdLCBpbml0X3ZhbHVlLm51bXNbNl0sIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlbnVtc1s2XVwiKTtcbiBcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5pLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmksXG4gXHRcdCAgXCJza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5pXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLnNldCwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5zZXQsXG4rXHRcdCAgXCJza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5zZXRcIik7XG4gXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5udW1zWzZdLFxuIFx0XHQgIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XVwiKTtcbiBcbi1cdEFTU0VSVF9HVChkZXNpcmVkX3N6LCBzaXplb2YoaW5pdF92YWx1ZSksIFwiZGVzaXJlZF9zelwiKTtcbi1cdGVyciA9IGJwZl9tYXBfX3NldF92YWx1ZV9zaXplKG1hcCwgZGVzaXJlZF9zeik7XG4rXHRza2VsLVx1MDAzZXBlcmNwdV9hcnItXHUwMDNlYXJyWzBdID0gLTE7XG4rXHRtYXBfcGVyY3B1X2FyciA9IHNrZWwtXHUwMDNlbWFwcy5wZXJjcHVfYXJyO1xuK1x0ZXJyID0gYnBmX21hcF9fc2V0X3ZhbHVlX3NpemUobWFwX3BlcmNwdV9hcnIsIGRlc2lyZWRfc3opO1xuIFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJwZl9tYXBfX3NldF92YWx1ZV9zaXplXCIpKVxuIFx0XHRnb3RvIG91dDtcbi1cdGlmICghQVNTRVJUX0VRKGJwZl9tYXBfX3ZhbHVlX3NpemUobWFwKSwgZGVzaXJlZF9zeiwgXCJwZXJjcHUgdmFsdWUgc2l6ZVwiKSlcbi1cdFx0Z290byBvdXQ7XG4tXHRpZiAoIUFTU0VSVF9ORVEoYnBmX21hcF9fYnRmX3ZhbHVlX3R5cGVfaWQobWFwKSwgMCwgXCJwZXJjcHUgQlRGIHZhbHVlIHR5cGVcIikpXG4rXHRpZiAoIUFTU0VSVF9FUShicGZfbWFwX192YWx1ZV9zaXplKG1hcF9wZXJjcHVfYXJyKSwgZGVzaXJlZF9zeiwgXCJwZXJjcHUgdmFsdWUgc2l6ZVwiKSlcbiBcdFx0Z290byBvdXQ7XG4tXG4tXHRpbml0X2RhdGEgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKG1hcCwgXHUwMDI2aW5pdF9kYXRhX3N6KTtcbi1cdGlmICghQVNTRVJUX09LX1BUUihpbml0X2RhdGEsIFwicmVzaXplZCBicGZfbWFwX19pbml0aWFsX3ZhbHVlXCIpKVxuK1x0aWYgKCFBU1NFUlRfTkVRKGJwZl9tYXBfX2J0Zl92YWx1ZV90eXBlX2lkKG1hcF9wZXJjcHVfYXJyKSwgMCwgXCJwZXJjcHUgQlRGIHZhbHVlIHR5cGVcIikpXG4gXHRcdGdvdG8gb3V0O1xuLVx0aWYgKCFBU1NFUlRfRVEoaW5pdF9kYXRhX3N6LCBkZXNpcmVkX3N6LCBcInJlc2l6ZWQgaW5pdGlhbCB2YWx1ZSBzaXplXCIpKVxuK1x0c2tlbC1cdTAwM2VwZXJjcHVfYXJyID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShtYXBfcGVyY3B1X2FyciwgXHUwMDI2aW5pdF9kYXRhX3N6KTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZXBlcmNwdV9hcnIsIFwicmVzaXplZCBwZXJjcHVfYXJyIHZhbHVlXCIpKVxuIFx0XHRnb3RvIG91dDtcbi1cdGlmICghQVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFwicmVzaXplZCBpbml0aWFsIHZhbHVlIGRhdGFcIikpXG4rXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdV9hcnItXHUwMDNlYXJyWzBdLCAtMSwgXCJhcnJbMF1cIikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0ZXJyID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWQoc2tlbCk7XG5AQCAtMzQ1LDggKzM0OCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2l0ZXIodm9pZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlbnVtX2NwdXMgPSBudW1fY3B1cztcbi1cdHNrZWwtXHUwMDNlcm9kYXRhLVx1MDAzZW9mZnNldG9mX251bSA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1LCBzdHJ1Y3RfZGF0YSk7XG4tXHRza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VvZmZzZXRvZl9udW0gKz0gc2l6ZW9mKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhKSAtIHNpemVvZihpbnQpO1xuK1x0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlbnVtX29mZiA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1LFxuK1x0XHRcdFx0XHQgc3RydWN0X2RhdGEubnVtc1s2XSk7XG4gXHRza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VlbGVtX3N6ID0gcm91bmR1cChzaXplb2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUpLCA4KTtcbiBcdHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0gPSAweGMwZGU7XG4gXG5AQCAtMzY5LDcgKzM3Miw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2l0ZXIodm9pZClcbiBcdFx0ZG8geyB9IHdoaWxlICgwKTtcbiBcdEFTU0VSVF9FUShsZW4sIDAsIFwicmVhZCBpdGVyXCIpO1xuIFx0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcnVuX2l0ZXIsIFwicnVuX2l0ZXJcIik7XG4tXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGVyY3B1X2RhdGFfc3VtLCAweGMwZGUgKiBudW1fY3B1cywgXCJwZXJjcHVfZGF0YV9zdW1cIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3VtLCAweGMwZGUgKiBudW1fY3B1cywgXCJzdW1cIik7XG4gXG4gXHRjbG9zZShmZCk7XG4gb3V0OlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmNcbmluZGV4IDcxZmY4ZDFiZjQ5ZWIuLjE3NWM0NDAwMDc1M2QgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmNcbkBAIC04LDkgKzgsMTEgQEAgaW50IGxvb25nIFNFQyhcIi5wZXJjcHUubG9vb29vb29vb25nXCIpO1xuIGludCBkYXRhMyBTRUMoXCIuZGF0YS5wZXJjcHVcIik7XG4gaW50IGRhdGEyIFNFQyhcIi5wZXJjcHUuZGF0YVwiKTtcbiBcbisvKiBVc2VkIGZvciB0ZXN0aW5nIGJwZl9tYXBfX3NldF92YWx1ZV9zaXplKCkuICovXG4raW50IGFyclsxXSBTRUMoXCIucGVyY3B1LmFyclwiKTtcbitcbiBpbnQgcnVuO1xuLS8qIGNwdV9pZCBhcyBhcnJheSB0byB2ZXJpZnkgbWFwIHZhbHVlIHJlc2l6aW5nLiAqL1xuLWludCBjcHVfaWRbMV0gU0VDKFwiLnBlcmNwdVwiKTtcbitpbnQgY3B1X2lkIFNFQyhcIi5wZXJjcHVcIik7XG4gaW50IGRhdGEgU0VDKFwiLnBlcmNwdVwiKSA9IC0xO1xuIGludCBudW1zWzddIFNFQyhcIi5wZXJjcHVcIik7XG4gYm9vbCBzZXQgU0VDKFwiLnBlcmNwdVwiKSA9IGZhbHNlO1xuQEAgLTM0LDcgKzM2LDcgQEAgaW50IHVwZGF0ZV9wZXJjcHVfZGF0YSh2b2lkICpjdHgpXG4gXHRkYXRhID0gMTtcbiBcdHJ1bisrO1xuIFx0c2V0ID0gdHJ1ZTtcbi1cdGNwdV9pZFswXSA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpO1xuK1x0Y3B1X2lkID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjIsOSArNjQsOSBAQCBpbnQgdmVyaWZpZXJfc25wcmludGYodm9pZCAqY3R4KVxuIH1cbiBcbiB2b2xhdGlsZSBjb25zdCBfX3UzMiBudW1fY3B1cyA9IDA7XG4tdm9sYXRpbGUgY29uc3QgaW50IG9mZnNldG9mX251bTtcbit2b2xhdGlsZSBjb25zdCBpbnQgbnVtX29mZjtcbiB2b2xhdGlsZSBjb25zdCBpbnQgZWxlbV9zejtcbi1fX3UzMiBwZXJjcHVfZGF0YV9zdW0gPSAwO1xuK19fdTMyIHN1bSA9IDA7XG4gYm9vbCBydW5faXRlciA9IGZhbHNlO1xuIFxuIFNFQyhcIml0ZXIvYnBmX21hcF9lbGVtXCIpXG5AQCAtODAsNyArODIsNyBAQCBpbnQgZHVtcF9wZXJjcHVfZGF0YShzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSAqY3R4KVxuIFx0cnVuX2l0ZXIgPSB0cnVlO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2NwdXM7IGkrKykge1xuLVx0XHRwZXJjcHVfZGF0YV9zdW0gKz0gKihpbnQgKikgKHBwdHIgKyBvZmZzZXRvZl9udW0pO1xuK1x0XHRzdW0gKz0gKihpbnQgKikgKHBwdHIgKyBudW1fb2ZmKTtcbiBcdFx0cHB0ciArPSBlbGVtX3N6O1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxODoxNTowMS43OTEwMTIwOTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTkyMjQxNzg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBTZXJpZXMgQW5hbHlzaXMgZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIG5lY2Vzc2l0YXRlcyBmdXp6aW5nLCBtZWFuaW5nIGlmIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6IGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBgdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGFuZCBhIGNvdXBsZSBvZiBzZWxmdGVzdCBmaWxlcy5cblxuRmlyc3QsIEkgZXhhbWluZSBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIG1pbm9yIOKAkyBqdXN0IHRoZSByZW1vdmFsIG9mIGFuIGVtcHR5IGxpbmUuIFRoaXMgaXMgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIGFuZCBkb2Vzbid0IGFmZmVjdCBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gVGhpcyBvbmUgaXMgcXVpY2tseSBkaXNtaXNzZWQuXG5cbk5leHQsIHRoZSBgdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNgIG1vZGlmaWNhdGlvbiBhcHBlYXJzIHRvIGJlIHJlbGF0ZWQgdG8gY29tbWVudHMuIEFnYWluLCB0aGlzIGRvZXNuJ3QgaW1wYWN0IGNvcmUga2VybmVsIGV4ZWN1dGlvbiwgc28gaXQncyBub3QgcmVsZXZhbnQgZm9yIGZ1enppbmcuXG5cbk5vdywgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgIG5lZWRzIGEgY2xvc2VyIGxvb2suIEkgc2VlIGEgY2hhbmdlIGluIGEgc3dpdGNoIHN0YXRlbWVudCB0aGF0IGFsdGVycyB0aGUgcmV0dXJuIHZhbHVlIGZvciBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAuIEluaXRpYWxseSwgaXQgcmV0dXJuZWQgYG1hcC1cdTAwM2VkZWYudmFsdWVfc2l6ZWAgYnV0IG5vdyBpdCdzIHVzaW5nIGBhcnJheV9tYXBfbW1hcF9zeihtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemUsIG1hcC1cdTAwM2VkZWYubWF4X2VudHJpZXMpYC4gKldhaXQqLi4uIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgYGxpYmJwZmAgaXMgYSAqdXNlcnNwYWNlKiBsaWJyYXJ5LCBldmVuIHRob3VnaCBpdCdzIHBhcnQgb2YgdGhlIGtlcm5lbCB0cmVlLiBDaGFuZ2VzIGhlcmUgZG9uJ3QgZGlyZWN0bHkgbW9kaWZ5IHRoZSBrZXJuZWwncyBleGVjdXRpb24gcGF0aC4gVGhvdWdoIGl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0IGlzIG5vdCB3aXRoaW4gdGhlIGtlcm5lbCwgc28gdGhpcyBuZWVkcyB0byBiZSBkaXNjb3VudGVkLlxuXG5UaGUgc2VsZnRlc3RzIGFyZSBqdXN0IHRoYXQ6IHNlbGYgdGVzdHMuIFRoZXkgYXJlIHVzZXJzcGFjZSBwcm9ncmFtcyBhbmQvb3IgQlBGIHByb2dyYW1zIGRlc2lnbmVkIGZvciB0ZXN0aW5nLiBUaGV5IGRvIG5vdCByZXByZXNlbnQga2VybmVsIGNvZGUgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuXG5cblRoZSBwcm9tcHQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gKnRoZSBrZXJuZWwqLiBUaGUgcHJvbXB0IGFsc28gZXhwbGljaXRseSBzYXlzIHRoYXQgdGhlIGNoYW5nZSBpcyBub3Qgd29ydGh5IG9mIGZ1enppbmcgaWYgaXQgb25seSBjb250YWluczogLi4uIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuIC4uLiBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIC4uLiBEcml2ZXIgLnJlbW92ZSAuLi4gSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIlxuXG5Fc3NlbnRpYWxseSwgbXkgdGFzayBpcyB0byBpc29sYXRlICprZXJuZWwqIGxvZ2ljIGNoYW5nZXMgdGhhdCAqY291bGQqIGJlIGV4cGxvaXRlZC4gR2l2ZW4gdGhhdCB0aGUgY3JpdGljYWwgcGFydCBpcyB0aGUgcmVtb3ZhbCBvZiBhIGJsYW5rIGxpbmUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIHRoZSByZXN0IGFyZSBlaXRoZXIgY29tbWVudHMgb3IgdXNlcnNwYWNlIGxpYnJhcnkvdG9vbCBjaGFuZ2VzLCB0aGlzIHBhdGNoIHNlcmllcyBkb2Vzbid0IG1lZXQgdGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uOiAqKldvcnRoRnV6emluZz1mYWxzZSoqIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXNuJ3QgbWFrZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODQ3LCJPdXRwdXRUb2tlbnMiOjgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE4OjE1OjE3LjcxMzQzMjg0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSByZW1vdmVzIGEgYmxhbmsgbGluZSBpbiB0aGUga2VybmVsIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGFuZCBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGxpYmJwZiwgYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgcmVtb3ZlcyBhIGJsYW5rIGxpbmUgaW4gdGhlIGtlcm5lbCAoa2VybmVsL2JwZi92ZXJpZmllci5jKSBhbmQgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIChsaWJicGYsIGJwZnRvb2wpIGFuZCBzZWxmdGVzdHMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxODoxNToxNy43MTM0NTcyMTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowqqmqx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 17:43:52 +0000 UTC FinishedAt: 2026-08-14 18:15:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE4OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSByZW1vdmVzIGEgYmxhbmsgbGluZSBpbiB0aGUga2VybmVsIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGFuZCBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGxpYmJwZiwgYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTg6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZDY5NjUzNWVhYWRhMjNkNzMzMDhkMDBlNDdmYjJiMmY3YjM5OWIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTg6MTU6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA2YWMxYWZjZWQyMGJmLi44MWVhZThmNzBhY2RiIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMjExMyw3ICYjNDM7MTIxMTMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbiBcdFx0fVxuIFxuLVxuIFx0XHRpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSBcdTAwMjZcdTAwMjYgdHlwZV9tYXlfYmVfbnVsbChrZl9hcmdfdHlwZSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuaW5kZXggYTUwNTQwZWY2NTIxYy4uZTVlODIyNTVhZjI0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuQEAgLTMwMyw3ICYjNDM7MzAzLDcgQEAgc3RhdGljIGludCBjb2RlZ2VuX2RhdGFzZWNzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxuIFx0XHRyZXR1cm4gLWVycm5vO1xuIFxuIFx0YnBmX29iamVjdF9fZm9yX2VhY2hfbWFwKG1hcCwgb2JqKSB7XG4tXHRcdC8qIG9ubHkgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIG1lbW9yeS1tYXBwZWQgaW50ZXJuYWwgbWFwcyAqL1xuJiM0MztcdFx0Lyogb25seSBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3Igc2tlbCBkYXRhIG1hcHMgKi9cbiBcdFx0aWYgKCFpc19za2VsX2RhdGEobWFwLCBtYXBfaWRlbnQsIHNpemVvZihtYXBfaWRlbnQpKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC01MTAsNyAmIzQzOzUxMCw3IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRyZXR1cm4gbWFwX3N6O1xuIH1cbiBcbi0vKiBFbWl0IHR5cGUgc2l6ZSBhc3NlcnRzIGZvciBhbGwgdG9wLWxldmVsIGZpZWxkcyBpbiBtZW1vcnktbWFwcGVkIGludGVybmFsIG1hcHMuICovXG4mIzQzOy8qIEVtaXQgdHlwZSBzaXplIGFzc2VydHMgZm9yIGFsbCB0b3AtbGV2ZWwgZmllbGRzIGluIHNrZWwgZGF0YSBtYXBzLiAqL1xuIHN0YXRpYyB2b2lkIGNvZGVnZW5fYXNzZXJ0cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcbiB7XG4gXHRzdHJ1Y3QgYnRmICpidGYgPSBicGZfb2JqZWN0X19idGYob2JqKTtcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggZTU3NDg3MGZiNzE2OS4uYjc0OWMwMTc0MmVlMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC0xODQxLDkgJiM0MzsxODQxLDggQEAgc3RhdGljIHNpemVfdCBicGZfbWFwX21tYXBfc3ooY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcbiBcdHN3aXRjaCAobWFwLVx1MDAzZWRlZi50eXBlKSB7XG4gXHRjYXNlIEJQRl9NQVBfVFlQRV9BUlJBWTpcbi1cdFx0cmV0dXJuIGFycmF5X21hcF9tbWFwX3N6KG1hcC1cdTAwM2VkZWYudmFsdWVfc2l6ZSwgbWFwLVx1MDAzZWRlZi5tYXhfZW50cmllcyk7XG4gXHRjYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk6XG4tXHRcdHJldHVybiBtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemU7XG4mIzQzO1x0XHRyZXR1cm4gYXJyYXlfbWFwX21tYXBfc3oobWFwLVx1MDAzZWRlZi52YWx1ZV9zaXplLCBtYXAtXHUwMDNlZGVmLm1heF9lbnRyaWVzKTtcbiBcdGNhc2UgQlBGX01BUF9UWVBFX0FSRU5BOlxuIFx0XHRyZXR1cm4gcGFnZV9zeiAqIG1hcC1cdTAwM2VkZWYubWF4X2VudHJpZXM7XG4gXHRkZWZhdWx0OlxuQEAgLTE5NTEsNyAmIzQzOzE5NTAsNyBAQCBzdGF0aWMgYm9vbCBtYXBfaXNfbW1hcGFibGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Lypcbi1cdCAqIFRoZSBpbnRlcm5hbCBQRVJDUFUgbWFwcyBhcmUgbm90IG1tYXBibGUgYmVjYXVzZSB0aGUgdW5kZXJseWluZ1xuJiM0MztcdCAqIFRoZSBpbnRlcm5hbCBQRVJDUFUgbWFwcyBhcmUgbm90IG1tYXBhYmxlIGJlY2F1c2UgdGhlIHVuZGVybHlpbmdcbiBcdCAqIHBlcmNwdV9hcnJheSBtYXBzIGRvIG5vdCBoYXZlIG1tYXAgc3VwcG9ydC5cbiBcdCAqL1xuIFx0aWYgKG1hcC1cdTAwM2VsaWJicGZfdHlwZSA9PSBMSUJCUEZfTUFQX1BFUkNQVSlcbkBAIC0yODMxLDcgJiM0MzsyODMwLDcgQEAgc3RhdGljIHNpemVfdCBhZGp1c3RfcmluZ2J1Zl9zeihzaXplX3Qgc3opXG4gXHRcdHJldHVybiAwO1xuIFx0LyogS2VybmVsIGV4cGVjdHMgQlBGX01BUF9UWVBFX1JJTkdCVUYmIzM5O3MgbWF4X2VudHJpZXMgdG8gYmVcbiBcdCAqIGEgcG93ZXItb2YtMiBtdWx0aXBsZSBvZiBrZXJuZWwmIzM5O3MgcGFnZSBzaXplLiBJZiB1c2VyIGRpbGlnZW50bHlcbi1cdCAqIHNhdGlzaWZpZWQgdGhlc2UgY29uZGl0aW9ucywgcGFzcyB0aGUgc2l6ZSB0aHJvdWdoLlxuJiM0MztcdCAqIHNhdGlzZmllZCB0aGVzZSBjb25kaXRpb25zLCBwYXNzIHRoZSBzaXplIHRocm91Z2guXG4gXHQgKi9cbiBcdGlmICgoc3ogJSBwYWdlX3N6KSA9PSAwIFx1MDAyNlx1MDAyNiBpc19wb3dfb2ZfMihzeiAvIHBhZ2Vfc3opKVxuIFx0XHRyZXR1cm4gc3o7XG5AQCAtNjk4OSw3ICYjNDM7Njk4OCw3IEBAIGJwZl9vYmplY3RfX3JlbG9jX2NvZGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICptYWluX3Byb2csXG4gICogICAgJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0mIzQzO1xuICAqXG4gICogQXQgdGhpcyBwb2ludCwgd2UgcmVsb2NhdGUgc3ViQSBjYWxscywgdGhlbiBnbyBvbmUgbGV2ZWwgdXAgYW5kIGZpbmlzaCB3aXRoXG4tICogcmVsb2NhdGluIG1haW5BIGNhbGxzLiBtYWluQSBpcyBkb25lLlxuJiM0MzsgKiByZWxvY2F0aW9uIG1haW5BIGNhbGxzLiBtYWluQSBpcyBkb25lLlxuICAqXG4gICogRm9yIG1haW5CIHByb2Nlc3MgaXMgc2ltaWxhciBidXQgcmVzdWx0cyBpbiBkaWZmZXJlbnQgb3JkZXIuIFdlIHN0YXJ0IHdpdGhcbiAgKiBtYWluQiBhbmQgc2tpcCBzdWJBIGFuZCBzdWJCLCBhcyBtYWluQiBuZXZlciBjYWxscyB0aGVtIChhdCBsZWFzdFxuQEAgLTc5MzYsNyAmIzQzOzc5MzUsNyBAQCBzdGF0aWMgaW50IGxpYmJwZl9wcmVwYXJlX3Byb2dfbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4gXHRcdHByb2ctXHUwMDNlYXR0YWNoX2J0Zl9pZCA9IGJ0Zl90eXBlX2lkO1xuIFxuIFx0XHQvKiBidXQgYnkgbm93IGxpYmJwZiBjb21tb24gbG9naWMgaXMgbm90IHV0aWxpemluZ1xuLVx0XHQgKiBwcm9nLVx1MDAzZWF0YWNoX2J0Zl9vYmpfZmQvcHJvZy1cdTAwM2VhdHRhY2hfYnRmX2lkIGFueW1vcmUgYmVjYXVzZVxuJiM0MztcdFx0ICogcHJvZy1cdTAwM2VhdHRhY2hfYnRmX29ial9mZC9wcm9nLVx1MDAzZWF0dGFjaF9idGZfaWQgYW55bW9yZSBiZWNhdXNlXG4gXHRcdCAqIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGFmdGVyIG9wdHMgd2VyZSBwb3B1bGF0ZWQgYnlcbiBcdFx0ICogbGliYnBmLCBzbyB0aGlzIGNhbGxiYWNrIGhhcyB0byB1cGRhdGUgb3B0cyBleHBsaWNpdGx5IGhlcmVcbiBcdFx0ICovXG5AQCAtMTQyMTksNyAmIzQzOzE0MjE4LDcgQEAgcGVyZl9ldmVudF9yZWFkX3NpbXBsZSh2b2lkICptbWFwX21lbSwgc2l6ZV90IG1tYXBfc2l6ZSwgc2l6ZV90IHBhZ2Vfc2l6ZSxcbiBcdFx0aWYgKCgodm9pZCAqKWVoZHIpICYjNDM7IGVoZHJfc2l6ZSBcdTAwM2UgYmFzZSAmIzQzOyBtbWFwX3NpemUpIHtcbiBcdFx0XHR2b2lkICpjb3B5X3N0YXJ0ID0gZWhkcjtcbiBcdFx0XHRzaXplX3QgbGVuX2ZpcnN0ID0gYmFzZSAmIzQzOyBtbWFwX3NpemUgLSBjb3B5X3N0YXJ0O1xuLVx0XHRcdHNpemVfdCBsZW5fc2VjbmQgPSBlaGRyX3NpemUgLSBsZW5fZmlyc3Q7XG4mIzQzO1x0XHRcdHNpemVfdCBsZW5fc2Vjb25kID0gZWhkcl9zaXplIC0gbGVuX2ZpcnN0O1xuIFxuIFx0XHRcdGlmICgqY29weV9zaXplIFx1MDAzYyBlaGRyX3NpemUpIHtcbiBcdFx0XHRcdGZyZWUoKmNvcHlfbWVtKTtcbkBAIC0xNDIzMyw3ICYjNDM7MTQyMzIsNyBAQCBwZXJmX2V2ZW50X3JlYWRfc2ltcGxlKHZvaWQgKm1tYXBfbWVtLCBzaXplX3QgbW1hcF9zaXplLCBzaXplX3QgcGFnZV9zaXplLFxuIFx0XHRcdH1cbiBcbiBcdFx0XHRtZW1jcHkoKmNvcHlfbWVtLCBjb3B5X3N0YXJ0LCBsZW5fZmlyc3QpO1xuLVx0XHRcdG1lbWNweSgqY29weV9tZW0gJiM0MzsgbGVuX2ZpcnN0LCBiYXNlLCBsZW5fc2VjbmQpO1xuJiM0MztcdFx0XHRtZW1jcHkoKmNvcHlfbWVtICYjNDM7IGxlbl9maXJzdCwgYmFzZSwgbGVuX3NlY29uZCk7XG4gXHRcdFx0ZWhkciA9ICpjb3B5X21lbTtcbiBcdFx0fVxuIFxuQEAgLTE0MjUxLDcgJiM0MzsxNDI1MCw3IEBAIHN0cnVjdCBwZXJmX2J1ZmZlcjtcbiBcbiBzdHJ1Y3QgcGVyZl9idWZmZXJfcGFyYW1zIHtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHI7XG4tXHQvKiBpZiBldmVudF9jYiBpcyBzcGVjaWZpZWQsIGl0IHRha2VzIHByZWNlbmRlbmNlICovXG4mIzQzO1x0LyogaWYgZXZlbnRfY2IgaXMgc3BlY2lmaWVkLCBpdCB0YWtlcyBwcmVjZWRlbmNlICovXG4gXHRwZXJmX2J1ZmZlcl9ldmVudF9mbiBldmVudF9jYjtcbiBcdC8qIHNhbXBsZV9jYiBhbmQgbG9zdF9jYiBhcmUgaGlnaGVyLWxldmVsIGNvbW1vbi1jYXNlIGNhbGxiYWNrcyAqL1xuIFx0cGVyZl9idWZmZXJfc2FtcGxlX2ZuIHNhbXBsZV9jYjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmNcbmluZGV4IDdkNmJkYTkwOTI5NTQuLmM2ZDA1NWI5NDU3ZGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xuQEAgLTY4LDEyICYjNDM7NjgsOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZlxuIHtcbiBcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1ICpkYXRhID0gTlVMTDtcbiBcdGludCBpLCBlcnIsIGtleSA9IDAsIG51bV9vbmxpbmUsIHJ1biA9IDA7XG4tXHRfX3U2NCBhcmdzWzJdID0gezB4MTIzNFVMTCwgMHg1Njc4VUxMfTtcbiBcdHNpemVfdCBkYXRhX3N6O1xuIFx0Ym9vbCAqb25saW5lO1xuIFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzLFxuLVx0XHQgICAgLmN0eF9pbiA9IGFyZ3MsXG4tXHRcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2YoYXJncyksXG4gXHRcdCAgICAuZmxhZ3MgPSBCUEZfRl9URVNUX1JVTl9PTl9DUFUsXG4gXHQpO1xuIFxuQEAgLTgxLDcgJiM0Mzs3OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mXG4gXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3BhcnNlX2NwdV9tYXNrX2ZpbGVcJiMzNDspKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRkYXRhX3N6ID0gbWFwID8gYnBmX21hcF9fdmFsdWVfc2l6ZShtYXApIDogc2l6ZW9mKCpkYXRhKTtcbiYjNDM7XHRkYXRhX3N6ID0gc2l6ZW9mKCpkYXRhKTtcbiBcdGRhdGEgPSBjYWxsb2MoMSwgZGF0YV9zeik7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIoZGF0YSwgXCYjMzQ7Y2FsbG9jIHBlcmNwdSBkYXRhXCYjMzQ7KSlcbiBcdFx0Z290byBvdXQ7XG5AQCAtMTA5LDcgJiM0MzsxMDYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZlxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRBU1NFUlRfRVEoKnJ1bnAsICYjNDM7JiM0MztydW4sIFwmIzM0O3J1blwmIzM0Oyk7XG4tXHRcdEFTU0VSVF9FUShkYXRhLVx1MDAzZWNwdV9pZFswXSwgaSwgXCYjMzQ7Y3B1X2lkXCYjMzQ7KTtcbiYjNDM7XHRcdEFTU0VSVF9FUShkYXRhLVx1MDAzZWNwdV9pZCwgaSwgXCYjMzQ7Y3B1X2lkXCYjMzQ7KTtcbiBcdFx0QVNTRVJUX0VRKGRhdGEtXHUwMDNlZGF0YSwgMSwgXCYjMzQ7ZGF0YVwmIzM0Oyk7XG4gXHRcdEFTU0VSVF9UUlVFKGRhdGEtXHUwMDNlc2V0LCBcJiMzNDtzZXRcJiMzNDspO1xuIFx0XHRBU1NFUlRfRVEoZGF0YS1cdTAwM2VudW1zWzZdLCAweGMwZGUsIFwmIzM0O251bXNbNl1cJiMzNDspO1xuQEAgLTEyNiwxMSAmIzQzOzEyMywxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZlxuIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2luaXQodm9pZClcbiB7XG4gXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSBpbml0X3ZhbHVlID0ge307XG4mIzQzO1x0Y29uc3QgX191MzIgZGVzaXJlZF9zeiA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSkgKiAyO1xuIFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgKmluaXRfZGF0YTtcbi1cdGNvbnN0IF9fdTMyIGRlc2lyZWRfc3ogPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpO1xuIFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhICpza2VsID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX21hcCAqbWFwLCAqbWFwX3BlcmNwdV9hcnI7XG4gXHRzaXplX3QgaW5pdF9kYXRhX3N6O1xuLVx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbiBcdGludCBwcm9nX2ZkLCBlcnI7XG4gXG4gXHRza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTtcbkBAIC0xNjMsOSAmIzQzOzE2MCwxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpXG4gXHRpZiAoIUFTU0VSVF9FUShicGZfbWFwX190eXBlKG1hcCksIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksIFwmIzM0O2JwZl9tYXBfX3R5cGVcJiMzNDspKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRpbml0X3ZhbHVlLnNldCA9IDE7XG4gXHRpbml0X3ZhbHVlLmRhdGEgPSAyO1xuIFx0aW5pdF92YWx1ZS5udW1zWzZdID0gLTE7XG4gXHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmkgPSAyO1xuJiM0MztcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEuc2V0ID0gMTtcbiBcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSA9IC0xO1xuIFx0ZXJyID0gYnBmX21hcF9fc2V0X2luaXRpYWxfdmFsdWUobWFwLCBcdTAwMjZpbml0X3ZhbHVlLCBzaXplb2YoaW5pdF92YWx1ZSkpO1xuIFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZVwmIzM0OykpXG5AQCAtMTc3LDMzICYjNDM7MTc2LDM3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2luaXQodm9pZClcbiBcbiBcdEFTU0VSVF9FUShpbml0X2RhdGEtXHUwMDNlZGF0YSwgaW5pdF92YWx1ZS5kYXRhLCBcJiMzNDtpbml0X3ZhbHVlIGRhdGFcJiMzNDspO1xuIFx0QVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VzZXQsIGluaXRfdmFsdWUuc2V0LCBcJiMzNDtpbml0X3ZhbHVlIHNldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VudW1zWzZdLCBpbml0X3ZhbHVlLm51bXNbNl0sIFwmIzM0O2luaXRfdmFsdWUgbnVtc1s2XVwmIzM0Oyk7XG4gXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXN0cnVjdF9kYXRhLmksIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSwgXCYjMzQ7aW5pdF92YWx1ZSBzdHJ1Y3RfZGF0YS5pXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXN0cnVjdF9kYXRhLnNldCwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5zZXQsXG4mIzQzO1x0XHQgIFwmIzM0O2luaXRfdmFsdWUgc3RydWN0X2RhdGEuc2V0XCYjMzQ7KTtcbiBcdEFTU0VSVF9FUShpbml0X2RhdGEtXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5udW1zWzZdLFxuIFx0XHQgIFwmIzM0O2luaXRfdmFsdWUgc3RydWN0X2RhdGEubnVtc1s2XVwmIzM0Oyk7XG4gXHRBU1NFUlRfRVEoaW5pdF9kYXRhX3N6LCBzaXplb2YoaW5pdF92YWx1ZSksIFwmIzM0O2luaXRfdmFsdWUgc2l6ZVwmIzM0Oyk7XG4gXHRBU1NFUlRfRVEoKHZvaWQgKikgaW5pdF9kYXRhLCAodm9pZCAqKSBza2VsLVx1MDAzZXBlcmNwdSwgXCYjMzQ7c2tlbC1cdTAwM2VwZXJjcHUgZXEgaW5pdF9kYXRhXCYjMzQ7KTtcbiBcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZWRhdGFcJiMzNDspO1xuIFx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXNldCwgaW5pdF92YWx1ZS5zZXQsIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXNldFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZW51bXNbNl0sIGluaXRfdmFsdWUubnVtc1s2XSwgXCYjMzQ7c2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlbnVtc1s2XVwmIzM0Oyk7XG4gXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEuaSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pLFxuIFx0XHQgIFwmIzM0O3NrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLmlcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5zZXQsIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuc2V0LFxuJiM0MztcdFx0ICBcJiMzNDtza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5zZXRcJiMzNDspO1xuIFx0QVNTRVJUX0VRKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0sIGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSxcbiBcdFx0ICBcJiMzNDtza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdXCYjMzQ7KTtcbiBcbi1cdEFTU0VSVF9HVChkZXNpcmVkX3N6LCBzaXplb2YoaW5pdF92YWx1ZSksIFwmIzM0O2Rlc2lyZWRfc3pcJiMzNDspO1xuLVx0ZXJyID0gYnBmX21hcF9fc2V0X3ZhbHVlX3NpemUobWFwLCBkZXNpcmVkX3N6KTtcbiYjNDM7XHRza2VsLVx1MDAzZXBlcmNwdV9hcnItXHUwMDNlYXJyWzBdID0gLTE7XG4mIzQzO1x0bWFwX3BlcmNwdV9hcnIgPSBza2VsLVx1MDAzZW1hcHMucGVyY3B1X2FycjtcbiYjNDM7XHRlcnIgPSBicGZfbWFwX19zZXRfdmFsdWVfc2l6ZShtYXBfcGVyY3B1X2FyciwgZGVzaXJlZF9zeik7XG4gXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2JwZl9tYXBfX3NldF92YWx1ZV9zaXplXCYjMzQ7KSlcbiBcdFx0Z290byBvdXQ7XG4tXHRpZiAoIUFTU0VSVF9FUShicGZfbWFwX192YWx1ZV9zaXplKG1hcCksIGRlc2lyZWRfc3osIFwmIzM0O3BlcmNwdSB2YWx1ZSBzaXplXCYjMzQ7KSlcbi1cdFx0Z290byBvdXQ7XG4tXHRpZiAoIUFTU0VSVF9ORVEoYnBmX21hcF9fYnRmX3ZhbHVlX3R5cGVfaWQobWFwKSwgMCwgXCYjMzQ7cGVyY3B1IEJURiB2YWx1ZSB0eXBlXCYjMzQ7KSlcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShicGZfbWFwX192YWx1ZV9zaXplKG1hcF9wZXJjcHVfYXJyKSwgZGVzaXJlZF9zeiwgXCYjMzQ7cGVyY3B1IHZhbHVlIHNpemVcJiMzNDspKVxuIFx0XHRnb3RvIG91dDtcbi1cbi1cdGluaXRfZGF0YSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUobWFwLCBcdTAwMjZpbml0X2RhdGFfc3opO1xuLVx0aWYgKCFBU1NFUlRfT0tfUFRSKGluaXRfZGF0YSwgXCYjMzQ7cmVzaXplZCBicGZfbWFwX19pbml0aWFsX3ZhbHVlXCYjMzQ7KSlcbiYjNDM7XHRpZiAoIUFTU0VSVF9ORVEoYnBmX21hcF9fYnRmX3ZhbHVlX3R5cGVfaWQobWFwX3BlcmNwdV9hcnIpLCAwLCBcJiMzNDtwZXJjcHUgQlRGIHZhbHVlIHR5cGVcJiMzNDspKVxuIFx0XHRnb3RvIG91dDtcbi1cdGlmICghQVNTRVJUX0VRKGluaXRfZGF0YV9zeiwgZGVzaXJlZF9zeiwgXCYjMzQ7cmVzaXplZCBpbml0aWFsIHZhbHVlIHNpemVcJiMzNDspKVxuJiM0MztcdHNrZWwtXHUwMDNlcGVyY3B1X2FyciA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUobWFwX3BlcmNwdV9hcnIsIFx1MDAyNmluaXRfZGF0YV9zeik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlcGVyY3B1X2FyciwgXCYjMzQ7cmVzaXplZCBwZXJjcHVfYXJyIHZhbHVlXCYjMzQ7KSlcbiBcdFx0Z290byBvdXQ7XG4tXHRpZiAoIUFTU0VSVF9FUShpbml0X2RhdGEtXHUwMDNlZGF0YSwgaW5pdF92YWx1ZS5kYXRhLCBcJiMzNDtyZXNpemVkIGluaXRpYWwgdmFsdWUgZGF0YVwmIzM0OykpXG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHVfYXJyLVx1MDAzZWFyclswXSwgLTEsIFwmIzM0O2FyclswXVwmIzM0OykpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0ZXJyID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWQoc2tlbCk7XG5AQCAtMzQ1LDggJiM0MzszNDgsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pdGVyKHZvaWQpXG4gXHRcdHJldHVybjtcbiBcbiBcdHNrZWwtXHUwMDNlcm9kYXRhLVx1MDAzZW51bV9jcHVzID0gbnVtX2NwdXM7XG4tXHRza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VvZmZzZXRvZl9udW0gPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSwgc3RydWN0X2RhdGEpO1xuLVx0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlb2Zmc2V0b2ZfbnVtICYjNDM7PSBzaXplb2Yoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEpIC0gc2l6ZW9mKGludCk7XG4mIzQzO1x0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlbnVtX29mZiA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdF9kYXRhLm51bXNbNl0pO1xuIFx0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlZWxlbV9zeiA9IHJvdW5kdXAoc2l6ZW9mKHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1KSwgOCk7XG4gXHRza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdID0gMHhjMGRlO1xuIFxuQEAgLTM2OSw3ICYjNDM7MzcyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcih2b2lkKVxuIFx0XHRkbyB7IH0gd2hpbGUgKDApO1xuIFx0QVNTRVJUX0VRKGxlbiwgMCwgXCYjMzQ7cmVhZCBpdGVyXCYjMzQ7KTtcbiBcdEFTU0VSVF9UUlVFKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJ1bl9pdGVyLCBcJiMzNDtydW5faXRlclwmIzM0Oyk7XG4tXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGVyY3B1X2RhdGFfc3VtLCAweGMwZGUgKiBudW1fY3B1cywgXCYjMzQ7cGVyY3B1X2RhdGFfc3VtXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3VtLCAweGMwZGUgKiBudW1fY3B1cywgXCYjMzQ7c3VtXCYjMzQ7KTtcbiBcbiBcdGNsb3NlKGZkKTtcbiBvdXQ6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xuaW5kZXggNzFmZjhkMWJmNDllYi4uMTc1YzQ0MDAwNzUzZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xuQEAgLTgsOSAmIzQzOzgsMTEgQEAgaW50IGxvb25nIFNFQyhcJiMzNDsucGVyY3B1Lmxvb29vb29vb29uZ1wmIzM0Oyk7XG4gaW50IGRhdGEzIFNFQyhcJiMzNDsuZGF0YS5wZXJjcHVcJiMzNDspO1xuIGludCBkYXRhMiBTRUMoXCYjMzQ7LnBlcmNwdS5kYXRhXCYjMzQ7KTtcbiBcbiYjNDM7LyogVXNlZCBmb3IgdGVzdGluZyBicGZfbWFwX19zZXRfdmFsdWVfc2l6ZSgpLiAqL1xuJiM0MztpbnQgYXJyWzFdIFNFQyhcJiMzNDsucGVyY3B1LmFyclwmIzM0Oyk7XG4mIzQzO1xuIGludCBydW47XG4tLyogY3B1X2lkIGFzIGFycmF5IHRvIHZlcmlmeSBtYXAgdmFsdWUgcmVzaXppbmcuICovXG4taW50IGNwdV9pZFsxXSBTRUMoXCYjMzQ7LnBlcmNwdVwmIzM0Oyk7XG4mIzQzO2ludCBjcHVfaWQgU0VDKFwmIzM0Oy5wZXJjcHVcJiMzNDspO1xuIGludCBkYXRhIFNFQyhcJiMzNDsucGVyY3B1XCYjMzQ7KSA9IC0xO1xuIGludCBudW1zWzddIFNFQyhcJiMzNDsucGVyY3B1XCYjMzQ7KTtcbiBib29sIHNldCBTRUMoXCYjMzQ7LnBlcmNwdVwmIzM0OykgPSBmYWxzZTtcbkBAIC0zNCw3ICYjNDM7MzYsNyBAQCBpbnQgdXBkYXRlX3BlcmNwdV9kYXRhKHZvaWQgKmN0eClcbiBcdGRhdGEgPSAxO1xuIFx0cnVuJiM0MzsmIzQzOztcbiBcdHNldCA9IHRydWU7XG4tXHRjcHVfaWRbMF0gPSBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQoKTtcbiYjNDM7XHRjcHVfaWQgPSBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQoKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02Miw5ICYjNDM7NjQsOSBAQCBpbnQgdmVyaWZpZXJfc25wcmludGYodm9pZCAqY3R4KVxuIH1cbiBcbiB2b2xhdGlsZSBjb25zdCBfX3UzMiBudW1fY3B1cyA9IDA7XG4tdm9sYXRpbGUgY29uc3QgaW50IG9mZnNldG9mX251bTtcbiYjNDM7dm9sYXRpbGUgY29uc3QgaW50IG51bV9vZmY7XG4gdm9sYXRpbGUgY29uc3QgaW50IGVsZW1fc3o7XG4tX191MzIgcGVyY3B1X2RhdGFfc3VtID0gMDtcbiYjNDM7X191MzIgc3VtID0gMDtcbiBib29sIHJ1bl9pdGVyID0gZmFsc2U7XG4gXG4gU0VDKFwmIzM0O2l0ZXIvYnBmX21hcF9lbGVtXCYjMzQ7KVxuQEAgLTgwLDcgJiM0Mzs4Miw3IEBAIGludCBkdW1wX3BlcmNwdV9kYXRhKHN0cnVjdCBicGZfaXRlcl9fYnBmX21hcF9lbGVtICpjdHgpXG4gXHRydW5faXRlciA9IHRydWU7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fY3B1czsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cGVyY3B1X2RhdGFfc3VtICYjNDM7PSAqKGludCAqKSAocHB0ciAmIzQzOyBvZmZzZXRvZl9udW0pO1xuJiM0MztcdFx0c3VtICYjNDM7PSAqKGludCAqKSAocHB0ciAmIzQzOyBudW1fb2ZmKTtcbiBcdFx0cHB0ciAmIzQzOz0gZWxlbV9zejtcbiBcdH1cbiBcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE4OjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBibGFuayBsaW5lIGluIHRoZSBrZXJuZWwgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYW5kIG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scyAobGliYnBmLCBicGZ0b29sKSBhbmQgc2VsZnRlc3RzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkNjk2NTM1ZWFhZGEyM2Q3MzMwOGQwMGU0N2ZiMmIyZjdiMzk5YjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAxODoxNTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA2YWMxYWZjZWQyMGJmLi44MWVhZThmNzBhY2RiIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0xMjExMyw3ICYjNDM7MTIxMTMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJcmVmX3RuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcmVmX3QtJmd0O25hbWVfb2ZmKTsKIAkJfQogCi0KIAkJaWYgKGJwZl9yZWdpc3Rlcl9pc19udWxsKHJlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKGtmX2FyZ190eXBlKSkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9nZW4uYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jCmluZGV4IGE1MDU0MGVmNjUyMWMuLmU1ZTgyMjU1YWYyNGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jCkBAIC0zMDMsNyAmIzQzOzMwMyw3IEBAIHN0YXRpYyBpbnQgY29kZWdlbl9kYXRhc2VjcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSkKIAkJcmV0dXJuIC1lcnJubzsKIAogCWJwZl9vYmplY3RfX2Zvcl9lYWNoX21hcChtYXAsIG9iaikgewotCQkvKiBvbmx5IGdlbmVyYXRlIGRlZmluaXRpb25zIGZvciBtZW1vcnktbWFwcGVkIGludGVybmFsIG1hcHMgKi8KJiM0MzsJCS8qIG9ubHkgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIHNrZWwgZGF0YSBtYXBzICovCiAJCWlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpCiAJCQljb250aW51ZTsKIApAQCAtNTEwLDcgJiM0Mzs1MTAsNyBAQCBzdGF0aWMgc2l6ZV90IGJwZl9tYXBfbW1hcF9zeihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKQogCXJldHVybiBtYXBfc3o7CiB9CiAKLS8qIEVtaXQgdHlwZSBzaXplIGFzc2VydHMgZm9yIGFsbCB0b3AtbGV2ZWwgZmllbGRzIGluIG1lbW9yeS1tYXBwZWQgaW50ZXJuYWwgbWFwcy4gKi8KJiM0MzsvKiBFbWl0IHR5cGUgc2l6ZSBhc3NlcnRzIGZvciBhbGwgdG9wLWxldmVsIGZpZWxkcyBpbiBza2VsIGRhdGEgbWFwcy4gKi8KIHN0YXRpYyB2b2lkIGNvZGVnZW5fYXNzZXJ0cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSkKIHsKIAlzdHJ1Y3QgYnRmICpidGYgPSBicGZfb2JqZWN0X19idGYob2JqKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jCmluZGV4IGU1NzQ4NzBmYjcxNjkuLmI3NDljMDE3NDJlZTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwpAQCAtMTg0MSw5ICYjNDM7MTg0MSw4IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApCiAKIAlzd2l0Y2ggKG1hcC0mZ3Q7ZGVmLnR5cGUpIHsKIAljYXNlIEJQRl9NQVBfVFlQRV9BUlJBWToKLQkJcmV0dXJuIGFycmF5X21hcF9tbWFwX3N6KG1hcC0mZ3Q7ZGVmLnZhbHVlX3NpemUsIG1hcC0mZ3Q7ZGVmLm1heF9lbnRyaWVzKTsKIAljYXNlIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVk6Ci0JCXJldHVybiBtYXAtJmd0O2RlZi52YWx1ZV9zaXplOwomIzQzOwkJcmV0dXJuIGFycmF5X21hcF9tbWFwX3N6KG1hcC0mZ3Q7ZGVmLnZhbHVlX3NpemUsIG1hcC0mZ3Q7ZGVmLm1heF9lbnRyaWVzKTsKIAljYXNlIEJQRl9NQVBfVFlQRV9BUkVOQToKIAkJcmV0dXJuIHBhZ2Vfc3ogKiBtYXAtJmd0O2RlZi5tYXhfZW50cmllczsKIAlkZWZhdWx0OgpAQCAtMTk1MSw3ICYjNDM7MTk1MCw3IEBAIHN0YXRpYyBib29sIG1hcF9pc19tbWFwYWJsZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgotCSAqIFRoZSBpbnRlcm5hbCBQRVJDUFUgbWFwcyBhcmUgbm90IG1tYXBibGUgYmVjYXVzZSB0aGUgdW5kZXJseWluZwomIzQzOwkgKiBUaGUgaW50ZXJuYWwgUEVSQ1BVIG1hcHMgYXJlIG5vdCBtbWFwYWJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nCiAJICogcGVyY3B1X2FycmF5IG1hcHMgZG8gbm90IGhhdmUgbW1hcCBzdXBwb3J0LgogCSAqLwogCWlmIChtYXAtJmd0O2xpYmJwZl90eXBlID09IExJQkJQRl9NQVBfUEVSQ1BVKQpAQCAtMjgzMSw3ICYjNDM7MjgzMCw3IEBAIHN0YXRpYyBzaXplX3QgYWRqdXN0X3JpbmdidWZfc3ooc2l6ZV90IHN6KQogCQlyZXR1cm4gMDsKIAkvKiBLZXJuZWwgZXhwZWN0cyBCUEZfTUFQX1RZUEVfUklOR0JVRiYjMzk7cyBtYXhfZW50cmllcyB0byBiZQogCSAqIGEgcG93ZXItb2YtMiBtdWx0aXBsZSBvZiBrZXJuZWwmIzM5O3MgcGFnZSBzaXplLiBJZiB1c2VyIGRpbGlnZW50bHkKLQkgKiBzYXRpc2lmaWVkIHRoZXNlIGNvbmRpdGlvbnMsIHBhc3MgdGhlIHNpemUgdGhyb3VnaC4KJiM0MzsJICogc2F0aXNmaWVkIHRoZXNlIGNvbmRpdGlvbnMsIHBhc3MgdGhlIHNpemUgdGhyb3VnaC4KIAkgKi8KIAlpZiAoKHN6ICUgcGFnZV9zeikgPT0gMCAmYW1wOyZhbXA7IGlzX3Bvd19vZl8yKHN6IC8gcGFnZV9zeikpCiAJCXJldHVybiBzejsKQEAgLTY5ODksNyAmIzQzOzY5ODgsNyBAQCBicGZfb2JqZWN0X19yZWxvY19jb2RlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqbWFpbl9wcm9nLAogICogICAgJiM0MzstLS0tLS0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0mIzQzOwogICoKICAqIEF0IHRoaXMgcG9pbnQsIHdlIHJlbG9jYXRlIHN1YkEgY2FsbHMsIHRoZW4gZ28gb25lIGxldmVsIHVwIGFuZCBmaW5pc2ggd2l0aAotICogcmVsb2NhdGluIG1haW5BIGNhbGxzLiBtYWluQSBpcyBkb25lLgomIzQzOyAqIHJlbG9jYXRpb24gbWFpbkEgY2FsbHMuIG1haW5BIGlzIGRvbmUuCiAgKgogICogRm9yIG1haW5CIHByb2Nlc3MgaXMgc2ltaWxhciBidXQgcmVzdWx0cyBpbiBkaWZmZXJlbnQgb3JkZXIuIFdlIHN0YXJ0IHdpdGgKICAqIG1haW5CIGFuZCBza2lwIHN1YkEgYW5kIHN1YkIsIGFzIG1haW5CIG5ldmVyIGNhbGxzIHRoZW0gKGF0IGxlYXN0CkBAIC03OTM2LDcgJiM0Mzs3OTM1LDcgQEAgc3RhdGljIGludCBsaWJicGZfcHJlcGFyZV9wcm9nX2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLAogCQlwcm9nLSZndDthdHRhY2hfYnRmX2lkID0gYnRmX3R5cGVfaWQ7CiAKIAkJLyogYnV0IGJ5IG5vdyBsaWJicGYgY29tbW9uIGxvZ2ljIGlzIG5vdCB1dGlsaXppbmcKLQkJICogcHJvZy0mZ3Q7YXRhY2hfYnRmX29ial9mZC9wcm9nLSZndDthdHRhY2hfYnRmX2lkIGFueW1vcmUgYmVjYXVzZQomIzQzOwkJICogcHJvZy0mZ3Q7YXR0YWNoX2J0Zl9vYmpfZmQvcHJvZy0mZ3Q7YXR0YWNoX2J0Zl9pZCBhbnltb3JlIGJlY2F1c2UKIAkJICogdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYWZ0ZXIgb3B0cyB3ZXJlIHBvcHVsYXRlZCBieQogCQkgKiBsaWJicGYsIHNvIHRoaXMgY2FsbGJhY2sgaGFzIHRvIHVwZGF0ZSBvcHRzIGV4cGxpY2l0bHkgaGVyZQogCQkgKi8KQEAgLTE0MjE5LDcgJiM0MzsxNDIxOCw3IEBAIHBlcmZfZXZlbnRfcmVhZF9zaW1wbGUodm9pZCAqbW1hcF9tZW0sIHNpemVfdCBtbWFwX3NpemUsIHNpemVfdCBwYWdlX3NpemUsCiAJCWlmICgoKHZvaWQgKillaGRyKSAmIzQzOyBlaGRyX3NpemUgJmd0OyBiYXNlICYjNDM7IG1tYXBfc2l6ZSkgewogCQkJdm9pZCAqY29weV9zdGFydCA9IGVoZHI7CiAJCQlzaXplX3QgbGVuX2ZpcnN0ID0gYmFzZSAmIzQzOyBtbWFwX3NpemUgLSBjb3B5X3N0YXJ0OwotCQkJc2l6ZV90IGxlbl9zZWNuZCA9IGVoZHJfc2l6ZSAtIGxlbl9maXJzdDsKJiM0MzsJCQlzaXplX3QgbGVuX3NlY29uZCA9IGVoZHJfc2l6ZSAtIGxlbl9maXJzdDsKIAogCQkJaWYgKCpjb3B5X3NpemUgJmx0OyBlaGRyX3NpemUpIHsKIAkJCQlmcmVlKCpjb3B5X21lbSk7CkBAIC0xNDIzMyw3ICYjNDM7MTQyMzIsNyBAQCBwZXJmX2V2ZW50X3JlYWRfc2ltcGxlKHZvaWQgKm1tYXBfbWVtLCBzaXplX3QgbW1hcF9zaXplLCBzaXplX3QgcGFnZV9zaXplLAogCQkJfQogCiAJCQltZW1jcHkoKmNvcHlfbWVtLCBjb3B5X3N0YXJ0LCBsZW5fZmlyc3QpOwotCQkJbWVtY3B5KCpjb3B5X21lbSAmIzQzOyBsZW5fZmlyc3QsIGJhc2UsIGxlbl9zZWNuZCk7CiYjNDM7CQkJbWVtY3B5KCpjb3B5X21lbSAmIzQzOyBsZW5fZmlyc3QsIGJhc2UsIGxlbl9zZWNvbmQpOwogCQkJZWhkciA9ICpjb3B5X21lbTsKIAkJfQogCkBAIC0xNDI1MSw3ICYjNDM7MTQyNTAsNyBAQCBzdHJ1Y3QgcGVyZl9idWZmZXI7CiAKIHN0cnVjdCBwZXJmX2J1ZmZlcl9wYXJhbXMgewogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHI7Ci0JLyogaWYgZXZlbnRfY2IgaXMgc3BlY2lmaWVkLCBpdCB0YWtlcyBwcmVjZW5kZW5jZSAqLwomIzQzOwkvKiBpZiBldmVudF9jYiBpcyBzcGVjaWZpZWQsIGl0IHRha2VzIHByZWNlZGVuY2UgKi8KIAlwZXJmX2J1ZmZlcl9ldmVudF9mbiBldmVudF9jYjsKIAkvKiBzYW1wbGVfY2IgYW5kIGxvc3RfY2IgYXJlIGhpZ2hlci1sZXZlbCBjb21tb24tY2FzZSBjYWxsYmFja3MgKi8KIAlwZXJmX2J1ZmZlcl9zYW1wbGVfZm4gc2FtcGxlX2NiOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jCmluZGV4IDdkNmJkYTkwOTI5NTQuLmM2ZDA1NWI5NDU3ZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9nbG9iYWxfZGF0YV9pbml0LmMKQEAgLTY4LDEyICYjNDM7NjgsOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZgogewogCXN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1ICpkYXRhID0gTlVMTDsKIAlpbnQgaSwgZXJyLCBrZXkgPSAwLCBudW1fb25saW5lLCBydW4gPSAwOwotCV9fdTY0IGFyZ3NbMl0gPSB7MHgxMjM0VUxMLCAweDU2NzhVTEx9OwogCXNpemVfdCBkYXRhX3N6OwogCWJvb2wgKm9ubGluZTsKIAlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsCi0JCSAgICAuY3R4X2luID0gYXJncywKLQkJICAgIC5jdHhfc2l6ZV9pbiA9IHNpemVvZihhcmdzKSwKIAkJICAgIC5mbGFncyA9IEJQRl9GX1RFU1RfUlVOX09OX0NQVSwKIAkpOwogCkBAIC04MSw3ICYjNDM7NzgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZgogCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtwYXJzZV9jcHVfbWFza19maWxlJiMzNDspKQogCQlyZXR1cm47CiAKLQlkYXRhX3N6ID0gbWFwID8gYnBmX21hcF9fdmFsdWVfc2l6ZShtYXApIDogc2l6ZW9mKCpkYXRhKTsKJiM0MzsJZGF0YV9zeiA9IHNpemVvZigqZGF0YSk7CiAJZGF0YSA9IGNhbGxvYygxLCBkYXRhX3N6KTsKIAlpZiAoIUFTU0VSVF9PS19QVFIoZGF0YSwgJiMzNDtjYWxsb2MgcGVyY3B1IGRhdGEmIzM0OykpCiAJCWdvdG8gb3V0OwpAQCAtMTA5LDcgJiM0MzsxMDYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZgogCQkJYnJlYWs7CiAKIAkJQVNTRVJUX0VRKCpydW5wLCAmIzQzOyYjNDM7cnVuLCAmIzM0O3J1biYjMzQ7KTsKLQkJQVNTRVJUX0VRKGRhdGEtJmd0O2NwdV9pZFswXSwgaSwgJiMzNDtjcHVfaWQmIzM0Oyk7CiYjNDM7CQlBU1NFUlRfRVEoZGF0YS0mZ3Q7Y3B1X2lkLCBpLCAmIzM0O2NwdV9pZCYjMzQ7KTsKIAkJQVNTRVJUX0VRKGRhdGEtJmd0O2RhdGEsIDEsICYjMzQ7ZGF0YSYjMzQ7KTsKIAkJQVNTRVJUX1RSVUUoZGF0YS0mZ3Q7c2V0LCAmIzM0O3NldCYjMzQ7KTsKIAkJQVNTRVJUX0VRKGRhdGEtJmd0O251bXNbNl0sIDB4YzBkZSwgJiMzNDtudW1zWzZdJiMzNDspOwpAQCAtMTI2LDExICYjNDM7MTIzLDExIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mCiBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgaW5pdF92YWx1ZSA9IHt9OwomIzQzOwljb25zdCBfX3UzMiBkZXNpcmVkX3N6ID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKSAqIDI7CiAJc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgKmluaXRfZGF0YTsKLQljb25zdCBfX3UzMiBkZXNpcmVkX3N6ID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTsKIAlzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEgKnNrZWwgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgYnBmX21hcCAqbWFwLCAqbWFwX3BlcmNwdV9hcnI7CiAJc2l6ZV90IGluaXRfZGF0YV9zejsKLQlzdHJ1Y3QgYnBmX21hcCAqbWFwOwogCWludCBwcm9nX2ZkLCBlcnI7CiAKIAlza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTsKQEAgLTE2Myw5ICYjNDM7MTYwLDExIEBAIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2luaXQodm9pZCkKIAlpZiAoIUFTU0VSVF9FUShicGZfbWFwX190eXBlKG1hcCksIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVksICYjMzQ7YnBmX21hcF9fdHlwZSYjMzQ7KSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJaW5pdF92YWx1ZS5zZXQgPSAxOwogCWluaXRfdmFsdWUuZGF0YSA9IDI7CiAJaW5pdF92YWx1ZS5udW1zWzZdID0gLTE7CiAJaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pID0gMjsKJiM0MzsJaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5zZXQgPSAxOwogCWluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSA9IC0xOwogCWVyciA9IGJwZl9tYXBfX3NldF9pbml0aWFsX3ZhbHVlKG1hcCwgJmFtcDtpbml0X3ZhbHVlLCBzaXplb2YoaW5pdF92YWx1ZSkpOwogCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDticGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZSYjMzQ7KSkKQEAgLTE3NywzMyAmIzQzOzE3NiwzNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpCiAKIAlBU1NFUlRfRVEoaW5pdF9kYXRhLSZndDtkYXRhLCBpbml0X3ZhbHVlLmRhdGEsICYjMzQ7aW5pdF92YWx1ZSBkYXRhJiMzNDspOwogCUFTU0VSVF9FUShpbml0X2RhdGEtJmd0O3NldCwgaW5pdF92YWx1ZS5zZXQsICYjMzQ7aW5pdF92YWx1ZSBzZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShpbml0X2RhdGEtJmd0O251bXNbNl0sIGluaXRfdmFsdWUubnVtc1s2XSwgJiMzNDtpbml0X3ZhbHVlIG51bXNbNl0mIzM0Oyk7CiAJQVNTRVJUX0VRKGluaXRfZGF0YS0mZ3Q7c3RydWN0X2RhdGEuaSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pLCAmIzM0O2luaXRfdmFsdWUgc3RydWN0X2RhdGEuaSYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKGluaXRfZGF0YS0mZ3Q7c3RydWN0X2RhdGEuc2V0LCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLnNldCwKJiM0MzsJCSAgJiMzNDtpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLnNldCYjMzQ7KTsKIAlBU1NFUlRfRVEoaW5pdF9kYXRhLSZndDtzdHJ1Y3RfZGF0YS5udW1zWzZdLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0sCiAJCSAgJiMzNDtpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLm51bXNbNl0mIzM0Oyk7CiAJQVNTRVJUX0VRKGluaXRfZGF0YV9zeiwgc2l6ZW9mKGluaXRfdmFsdWUpLCAmIzM0O2luaXRfdmFsdWUgc2l6ZSYjMzQ7KTsKIAlBU1NFUlRfRVEoKHZvaWQgKikgaW5pdF9kYXRhLCAodm9pZCAqKSBza2VsLSZndDtwZXJjcHUsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1IGVxIGluaXRfZGF0YSYjMzQ7KTsKIAlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtkYXRhLCBpbml0X3ZhbHVlLmRhdGEsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtkYXRhJiMzNDspOwogCUFTU0VSVF9FUShza2VsLSZndDtwZXJjcHUtJmd0O3NldCwgaW5pdF92YWx1ZS5zZXQsICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtzZXQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtwZXJjcHUtJmd0O251bXNbNl0sIGluaXRfdmFsdWUubnVtc1s2XSwgJiMzNDtza2VsLSZndDtwZXJjcHUtJmd0O251bXNbNl0mIzM0Oyk7CiAJQVNTRVJUX0VRKHNrZWwtJmd0O3BlcmNwdS0mZ3Q7c3RydWN0X2RhdGEuaSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pLAogCQkgICYjMzQ7c2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5pJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YS5zZXQsIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuc2V0LAomIzQzOwkJICAmIzM0O3NrZWwtJmd0O3BlcmNwdS0mZ3Q7c3RydWN0X2RhdGEuc2V0JiMzNDspOwogCUFTU0VSVF9FUShza2VsLSZndDtwZXJjcHUtJmd0O3N0cnVjdF9kYXRhLm51bXNbNl0sIGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSwKIAkJICAmIzM0O3NrZWwtJmd0O3BlcmNwdS0mZ3Q7c3RydWN0X2RhdGEubnVtc1s2XSYjMzQ7KTsKIAotCUFTU0VSVF9HVChkZXNpcmVkX3N6LCBzaXplb2YoaW5pdF92YWx1ZSksICYjMzQ7ZGVzaXJlZF9zeiYjMzQ7KTsKLQllcnIgPSBicGZfbWFwX19zZXRfdmFsdWVfc2l6ZShtYXAsIGRlc2lyZWRfc3opOwomIzQzOwlza2VsLSZndDtwZXJjcHVfYXJyLSZndDthcnJbMF0gPSAtMTsKJiM0MzsJbWFwX3BlcmNwdV9hcnIgPSBza2VsLSZndDttYXBzLnBlcmNwdV9hcnI7CiYjNDM7CWVyciA9IGJwZl9tYXBfX3NldF92YWx1ZV9zaXplKG1hcF9wZXJjcHVfYXJyLCBkZXNpcmVkX3N6KTsKIAlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX21hcF9fc2V0X3ZhbHVlX3NpemUmIzM0OykpCiAJCWdvdG8gb3V0OwotCWlmICghQVNTRVJUX0VRKGJwZl9tYXBfX3ZhbHVlX3NpemUobWFwKSwgZGVzaXJlZF9zeiwgJiMzNDtwZXJjcHUgdmFsdWUgc2l6ZSYjMzQ7KSkKLQkJZ290byBvdXQ7Ci0JaWYgKCFBU1NFUlRfTkVRKGJwZl9tYXBfX2J0Zl92YWx1ZV90eXBlX2lkKG1hcCksIDAsICYjMzQ7cGVyY3B1IEJURiB2YWx1ZSB0eXBlJiMzNDspKQomIzQzOwlpZiAoIUFTU0VSVF9FUShicGZfbWFwX192YWx1ZV9zaXplKG1hcF9wZXJjcHVfYXJyKSwgZGVzaXJlZF9zeiwgJiMzNDtwZXJjcHUgdmFsdWUgc2l6ZSYjMzQ7KSkKIAkJZ290byBvdXQ7Ci0KLQlpbml0X2RhdGEgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKG1hcCwgJmFtcDtpbml0X2RhdGFfc3opOwotCWlmICghQVNTRVJUX09LX1BUUihpbml0X2RhdGEsICYjMzQ7cmVzaXplZCBicGZfbWFwX19pbml0aWFsX3ZhbHVlJiMzNDspKQomIzQzOwlpZiAoIUFTU0VSVF9ORVEoYnBmX21hcF9fYnRmX3ZhbHVlX3R5cGVfaWQobWFwX3BlcmNwdV9hcnIpLCAwLCAmIzM0O3BlcmNwdSBCVEYgdmFsdWUgdHlwZSYjMzQ7KSkKIAkJZ290byBvdXQ7Ci0JaWYgKCFBU1NFUlRfRVEoaW5pdF9kYXRhX3N6LCBkZXNpcmVkX3N6LCAmIzM0O3Jlc2l6ZWQgaW5pdGlhbCB2YWx1ZSBzaXplJiMzNDspKQomIzQzOwlza2VsLSZndDtwZXJjcHVfYXJyID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShtYXBfcGVyY3B1X2FyciwgJmFtcDtpbml0X2RhdGFfc3opOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7cGVyY3B1X2FyciwgJiMzNDtyZXNpemVkIHBlcmNwdV9hcnIgdmFsdWUmIzM0OykpCiAJCWdvdG8gb3V0OwotCWlmICghQVNTRVJUX0VRKGluaXRfZGF0YS0mZ3Q7ZGF0YSwgaW5pdF92YWx1ZS5kYXRhLCAmIzM0O3Jlc2l6ZWQgaW5pdGlhbCB2YWx1ZSBkYXRhJiMzNDspKQomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtwZXJjcHVfYXJyLSZndDthcnJbMF0sIC0xLCAmIzM0O2FyclswXSYjMzQ7KSkKIAkJZ290byBvdXQ7CiAKIAllcnIgPSB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fbG9hZChza2VsKTsKQEAgLTM0NSw4ICYjNDM7MzQ4LDggQEAgc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcih2b2lkKQogCQlyZXR1cm47CiAKIAlza2VsLSZndDtyb2RhdGEtJmd0O251bV9jcHVzID0gbnVtX2NwdXM7Ci0Jc2tlbC0mZ3Q7cm9kYXRhLSZndDtvZmZzZXRvZl9udW0gPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSwgc3RydWN0X2RhdGEpOwotCXNrZWwtJmd0O3JvZGF0YS0mZ3Q7b2Zmc2V0b2ZfbnVtICYjNDM7PSBzaXplb2Yoc2tlbC0mZ3Q7cGVyY3B1LSZndDtzdHJ1Y3RfZGF0YSkgLSBzaXplb2YoaW50KTsKJiM0MzsJc2tlbC0mZ3Q7cm9kYXRhLSZndDtudW1fb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUsCiYjNDM7CQkJCQkgc3RydWN0X2RhdGEubnVtc1s2XSk7CiAJc2tlbC0mZ3Q7cm9kYXRhLSZndDtlbGVtX3N6ID0gcm91bmR1cChzaXplb2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUpLCA4KTsKIAlza2VsLSZndDtwZXJjcHUtJmd0O3N0cnVjdF9kYXRhLm51bXNbNl0gPSAweGMwZGU7CiAKQEAgLTM2OSw3ICYjNDM7MzcyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaXRlcih2b2lkKQogCQlkbyB7IH0gd2hpbGUgKDApOwogCUFTU0VSVF9FUShsZW4sIDAsICYjMzQ7cmVhZCBpdGVyJiMzNDspOwogCUFTU0VSVF9UUlVFKHNrZWwtJmd0O2Jzcy0mZ3Q7cnVuX2l0ZXIsICYjMzQ7cnVuX2l0ZXImIzM0Oyk7Ci0JQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7cGVyY3B1X2RhdGFfc3VtLCAweGMwZGUgKiBudW1fY3B1cywgJiMzNDtwZXJjcHVfZGF0YV9zdW0mIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O3N1bSwgMHhjMGRlICogbnVtX2NwdXMsICYjMzQ7c3VtJiMzNDspOwogCiAJY2xvc2UoZmQpOwogb3V0OgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuYwppbmRleCA3MWZmOGQxYmY0OWViLi4xNzVjNDQwMDA3NTNkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuYwpAQCAtOCw5ICYjNDM7OCwxMSBAQCBpbnQgbG9vbmcgU0VDKCYjMzQ7LnBlcmNwdS5sb29vb29vb29vbmcmIzM0Oyk7CiBpbnQgZGF0YTMgU0VDKCYjMzQ7LmRhdGEucGVyY3B1JiMzNDspOwogaW50IGRhdGEyIFNFQygmIzM0Oy5wZXJjcHUuZGF0YSYjMzQ7KTsKIAomIzQzOy8qIFVzZWQgZm9yIHRlc3RpbmcgYnBmX21hcF9fc2V0X3ZhbHVlX3NpemUoKS4gKi8KJiM0MztpbnQgYXJyWzFdIFNFQygmIzM0Oy5wZXJjcHUuYXJyJiMzNDspOwomIzQzOwogaW50IHJ1bjsKLS8qIGNwdV9pZCBhcyBhcnJheSB0byB2ZXJpZnkgbWFwIHZhbHVlIHJlc2l6aW5nLiAqLwotaW50IGNwdV9pZFsxXSBTRUMoJiMzNDsucGVyY3B1JiMzNDspOwomIzQzO2ludCBjcHVfaWQgU0VDKCYjMzQ7LnBlcmNwdSYjMzQ7KTsKIGludCBkYXRhIFNFQygmIzM0Oy5wZXJjcHUmIzM0OykgPSAtMTsKIGludCBudW1zWzddIFNFQygmIzM0Oy5wZXJjcHUmIzM0Oyk7CiBib29sIHNldCBTRUMoJiMzNDsucGVyY3B1JiMzNDspID0gZmFsc2U7CkBAIC0zNCw3ICYjNDM7MzYsNyBAQCBpbnQgdXBkYXRlX3BlcmNwdV9kYXRhKHZvaWQgKmN0eCkKIAlkYXRhID0gMTsKIAlydW4mIzQzOyYjNDM7OwogCXNldCA9IHRydWU7Ci0JY3B1X2lkWzBdID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7CiYjNDM7CWNwdV9pZCA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXJldHVybiAwOwogfQogCkBAIC02Miw5ICYjNDM7NjQsOSBAQCBpbnQgdmVyaWZpZXJfc25wcmludGYodm9pZCAqY3R4KQogfQogCiB2b2xhdGlsZSBjb25zdCBfX3UzMiBudW1fY3B1cyA9IDA7Ci12b2xhdGlsZSBjb25zdCBpbnQgb2Zmc2V0b2ZfbnVtOwomIzQzO3ZvbGF0aWxlIGNvbnN0IGludCBudW1fb2ZmOwogdm9sYXRpbGUgY29uc3QgaW50IGVsZW1fc3o7Ci1fX3UzMiBwZXJjcHVfZGF0YV9zdW0gPSAwOwomIzQzO19fdTMyIHN1bSA9IDA7CiBib29sIHJ1bl9pdGVyID0gZmFsc2U7CiAKIFNFQygmIzM0O2l0ZXIvYnBmX21hcF9lbGVtJiMzNDspCkBAIC04MCw3ICYjNDM7ODIsNyBAQCBpbnQgZHVtcF9wZXJjcHVfZGF0YShzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSAqY3R4KQogCXJ1bl9pdGVyID0gdHJ1ZTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fY3B1czsgaSYjNDM7JiM0MzspIHsKLQkJcGVyY3B1X2RhdGFfc3VtICYjNDM7PSAqKGludCAqKSAocHB0ciAmIzQzOyBvZmZzZXRvZl9udW0pOwomIzQzOwkJc3VtICYjNDM7PSAqKGludCAqKSAocHB0ciAmIzQzOyBudW1fb2ZmKTsKIAkJcHB0ciAmIzQzOz0gZWxlbV9zejsKIAl9CiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NDcKCQkJCQkJCW91dHB1dDogODAKCQkJCQkJCXRob3VnaHRzOiAxNTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIFNlcmllcyBBbmFseXNpcyBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgZnV6emluZywgbWVhbmluZyBpZiBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGZpbGVzOiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYHRvb2xzL2JwZi9icGZ0b29sL2dlbi5jYCwgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBhbmQgYSBjb3VwbGUgb2Ygc2VsZnRlc3QgZmlsZXMuCgpGaXJzdCwgSSBleGFtaW5lIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgbWlub3Ig4oCTIGp1c3QgdGhlIHJlbW92YWwgb2YgYW4gZW1wdHkgbGluZS4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyBjaGFuZ2UgYW5kIGRvZXNuJiMzOTt0IGFmZmVjdCBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gVGhpcyBvbmUgaXMgcXVpY2tseSBkaXNtaXNzZWQuCgpOZXh0LCB0aGUgYHRvb2xzL2JwZi9icGZ0b29sL2dlbi5jYCBtb2RpZmljYXRpb24gYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIGNvbW1lbnRzLiBBZ2FpbiwgdGhpcyBkb2VzbiYjMzk7dCBpbXBhY3QgY29yZSBrZXJuZWwgZXhlY3V0aW9uLCBzbyBpdCYjMzk7cyBub3QgcmVsZXZhbnQgZm9yIGZ1enppbmcuCgpOb3csIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCBuZWVkcyBhIGNsb3NlciBsb29rLiBJIHNlZSBhIGNoYW5nZSBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQgdGhhdCBhbHRlcnMgdGhlIHJldHVybiB2YWx1ZSBmb3IgYEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVlgLiBJbml0aWFsbHksIGl0IHJldHVybmVkIGBtYXAtJmd0O2RlZi52YWx1ZV9zaXplYCBidXQgbm93IGl0JiMzOTtzIHVzaW5nIGBhcnJheV9tYXBfbW1hcF9zeihtYXAtJmd0O2RlZi52YWx1ZV9zaXplLCBtYXAtJmd0O2RlZi5tYXhfZW50cmllcylgLiAqV2FpdCouLi4gSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdGhhdCBgbGliYnBmYCBpcyBhICp1c2Vyc3BhY2UqIGxpYnJhcnksIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGtlcm5lbCB0cmVlLiBDaGFuZ2VzIGhlcmUgZG9uJiMzOTt0IGRpcmVjdGx5IG1vZGlmeSB0aGUga2VybmVsJiMzOTtzIGV4ZWN1dGlvbiBwYXRoLiBUaG91Z2ggaXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQgaXMgbm90IHdpdGhpbiB0aGUga2VybmVsLCBzbyB0aGlzIG5lZWRzIHRvIGJlIGRpc2NvdW50ZWQuCgpUaGUgc2VsZnRlc3RzIGFyZSBqdXN0IHRoYXQ6IHNlbGYgdGVzdHMuIFRoZXkgYXJlIHVzZXJzcGFjZSBwcm9ncmFtcyBhbmQvb3IgQlBGIHByb2dyYW1zIGRlc2lnbmVkIGZvciB0ZXN0aW5nLiBUaGV5IGRvIG5vdCByZXByZXNlbnQga2VybmVsIGNvZGUgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuCgpUaGUgcHJvbXB0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvICp0aGUga2VybmVsKi4gVGhlIHByb21wdCBhbHNvIGV4cGxpY2l0bHkgc2F5cyB0aGF0IHRoZSBjaGFuZ2UgaXMgbm90IHdvcnRoeSBvZiBmdXp6aW5nIGlmIGl0IG9ubHkgY29udGFpbnM6IC4uLiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLiAuLi4gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAuLi4gRHJpdmVyIC5yZW1vdmUgLi4uIElmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKCkVzc2VudGlhbGx5LCBteSB0YXNrIGlzIHRvIGlzb2xhdGUgKmtlcm5lbCogbG9naWMgY2hhbmdlcyB0aGF0ICpjb3VsZCogYmUgZXhwbG9pdGVkLiBHaXZlbiB0aGF0IHRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoZSByZW1vdmFsIG9mIGEgYmxhbmsgbGluZSBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgdGhlIHJlc3QgYXJlIGVpdGhlciBjb21tZW50cyBvciB1c2Vyc3BhY2UgbGlicmFyeS90b29sIGNoYW5nZXMsIHRoaXMgcGF0Y2ggc2VyaWVzIGRvZXNuJiMzOTt0IG1lZXQgdGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbjogKipXb3J0aEZ1enppbmc9ZmFsc2UqKiBiZWNhdXNlIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBtYWtlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd291bGQgbmVlZCB0byBiZSBmdXp6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IHJlbW92ZXMgYSBibGFuayBsaW5lIGluIHRoZSBrZXJuZWwgKGtlcm5lbC9icGYvdmVyaWZpZXIuYykgYW5kIG1vZGlmaWVzIHVzZXJzcGFjZSB0b29scyAobGliYnBmLCBicGZ0b29sKSBhbmQgc2VsZnRlc3RzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSByZW1vdmVzIGEgYmxhbmsgbGluZSBpbiB0aGUga2VybmVsIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGFuZCBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGxpYmJwZiwgYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTg6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE4OjE1OjAxLjE2MTQ2NDQ1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTUyMDAzODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSByZW1vdmVzIGEgYmxhbmsgbGluZSBpbiB0aGUga2VybmVsIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGFuZCBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGxpYmJwZiwgYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE4OjE1OjAxLjE2MTQ3MjI3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4OTAyNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2Q2OTY1MzVlYWFkYTIzZDczMzA4ZDAwZTQ3ZmIyYjJmN2IzOTliMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxODoxNTowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCA2YWMxYWZjZWQyMGJmLi44MWVhZThmNzBhY2RiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0xMjExMyw3ICsxMjExMyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21lXFxuIFxcdFxcdFxcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVxcdTAwM2VuYW1lX29mZik7XFxuIFxcdFxcdH1cXG4gXFxuLVxcbiBcXHRcXHRpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSBcXHUwMDI2XFx1MDAyNiB0eXBlX21heV9iZV9udWxsKGtmX2FyZ190eXBlKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9nZW4uYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXFxuaW5kZXggYTUwNTQwZWY2NTIxYy4uZTVlODIyNTVhZjI0YSAxMDA2NDRcXG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9nZW4uY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXFxuQEAgLTMwMyw3ICszMDMsNyBAQCBzdGF0aWMgaW50IGNvZGVnZW5fZGF0YXNlY3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpXFxuIFxcdFxcdHJldHVybiAtZXJybm87XFxuIFxcbiBcXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcXG4tXFx0XFx0Lyogb25seSBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3IgbWVtb3J5LW1hcHBlZCBpbnRlcm5hbCBtYXBzICovXFxuK1xcdFxcdC8qIG9ubHkgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIHNrZWwgZGF0YSBtYXBzICovXFxuIFxcdFxcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5AQCAtNTEwLDcgKzUxMCw3IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcdHJldHVybiBtYXBfc3o7XFxuIH1cXG4gXFxuLS8qIEVtaXQgdHlwZSBzaXplIGFzc2VydHMgZm9yIGFsbCB0b3AtbGV2ZWwgZmllbGRzIGluIG1lbW9yeS1tYXBwZWQgaW50ZXJuYWwgbWFwcy4gKi9cXG4rLyogRW1pdCB0eXBlIHNpemUgYXNzZXJ0cyBmb3IgYWxsIHRvcC1sZXZlbCBmaWVsZHMgaW4gc2tlbCBkYXRhIG1hcHMuICovXFxuIHN0YXRpYyB2b2lkIGNvZGVnZW5fYXNzZXJ0cyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYnRmICpidGYgPSBicGZfb2JqZWN0X19idGYob2JqKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5pbmRleCBlNTc0ODcwZmI3MTY5Li5iNzQ5YzAxNzQyZWUwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuQEAgLTE4NDEsOSArMTg0MSw4IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxuIFxcbiBcXHRzd2l0Y2ggKG1hcC1cXHUwMDNlZGVmLnR5cGUpIHtcXG4gXFx0Y2FzZSBCUEZfTUFQX1RZUEVfQVJSQVk6XFxuLVxcdFxcdHJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtXFx1MDAzZWRlZi52YWx1ZV9zaXplLCBtYXAtXFx1MDAzZWRlZi5tYXhfZW50cmllcyk7XFxuIFxcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWTpcXG4tXFx0XFx0cmV0dXJuIG1hcC1cXHUwMDNlZGVmLnZhbHVlX3NpemU7XFxuK1xcdFxcdHJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtXFx1MDAzZWRlZi52YWx1ZV9zaXplLCBtYXAtXFx1MDAzZWRlZi5tYXhfZW50cmllcyk7XFxuIFxcdGNhc2UgQlBGX01BUF9UWVBFX0FSRU5BOlxcbiBcXHRcXHRyZXR1cm4gcGFnZV9zeiAqIG1hcC1cXHUwMDNlZGVmLm1heF9lbnRyaWVzO1xcbiBcXHRkZWZhdWx0OlxcbkBAIC0xOTUxLDcgKzE5NTAsNyBAQCBzdGF0aWMgYm9vbCBtYXBfaXNfbW1hcGFibGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogVGhlIGludGVybmFsIFBFUkNQVSBtYXBzIGFyZSBub3QgbW1hcGJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nXFxuK1xcdCAqIFRoZSBpbnRlcm5hbCBQRVJDUFUgbWFwcyBhcmUgbm90IG1tYXBhYmxlIGJlY2F1c2UgdGhlIHVuZGVybHlpbmdcXG4gXFx0ICogcGVyY3B1X2FycmF5IG1hcHMgZG8gbm90IGhhdmUgbW1hcCBzdXBwb3J0LlxcbiBcXHQgKi9cXG4gXFx0aWYgKG1hcC1cXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpXFxuQEAgLTI4MzEsNyArMjgzMCw3IEBAIHN0YXRpYyBzaXplX3QgYWRqdXN0X3JpbmdidWZfc3ooc2l6ZV90IHN6KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0LyogS2VybmVsIGV4cGVjdHMgQlBGX01BUF9UWVBFX1JJTkdCVUYncyBtYXhfZW50cmllcyB0byBiZVxcbiBcXHQgKiBhIHBvd2VyLW9mLTIgbXVsdGlwbGUgb2Yga2VybmVsJ3MgcGFnZSBzaXplLiBJZiB1c2VyIGRpbGlnZW50bHlcXG4tXFx0ICogc2F0aXNpZmllZCB0aGVzZSBjb25kaXRpb25zLCBwYXNzIHRoZSBzaXplIHRocm91Z2guXFxuK1xcdCAqIHNhdGlzZmllZCB0aGVzZSBjb25kaXRpb25zLCBwYXNzIHRoZSBzaXplIHRocm91Z2guXFxuIFxcdCAqL1xcbiBcXHRpZiAoKHN6ICUgcGFnZV9zeikgPT0gMCBcXHUwMDI2XFx1MDAyNiBpc19wb3dfb2ZfMihzeiAvIHBhZ2Vfc3opKVxcbiBcXHRcXHRyZXR1cm4gc3o7XFxuQEAgLTY5ODksNyArNjk4OCw3IEBAIGJwZl9vYmplY3RfX3JlbG9jX2NvZGUoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICptYWluX3Byb2csXFxuICAqICAgICstLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tK1xcbiAgKlxcbiAgKiBBdCB0aGlzIHBvaW50LCB3ZSByZWxvY2F0ZSBzdWJBIGNhbGxzLCB0aGVuIGdvIG9uZSBsZXZlbCB1cCBhbmQgZmluaXNoIHdpdGhcXG4tICogcmVsb2NhdGluIG1haW5BIGNhbGxzLiBtYWluQSBpcyBkb25lLlxcbisgKiByZWxvY2F0aW9uIG1haW5BIGNhbGxzLiBtYWluQSBpcyBkb25lLlxcbiAgKlxcbiAgKiBGb3IgbWFpbkIgcHJvY2VzcyBpcyBzaW1pbGFyIGJ1dCByZXN1bHRzIGluIGRpZmZlcmVudCBvcmRlci4gV2Ugc3RhcnQgd2l0aFxcbiAgKiBtYWluQiBhbmQgc2tpcCBzdWJBIGFuZCBzdWJCLCBhcyBtYWluQiBuZXZlciBjYWxscyB0aGVtIChhdCBsZWFzdFxcbkBAIC03OTM2LDcgKzc5MzUsNyBAQCBzdGF0aWMgaW50IGxpYmJwZl9wcmVwYXJlX3Byb2dfbG9hZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXFxuIFxcdFxcdHByb2ctXFx1MDAzZWF0dGFjaF9idGZfaWQgPSBidGZfdHlwZV9pZDtcXG4gXFxuIFxcdFxcdC8qIGJ1dCBieSBub3cgbGliYnBmIGNvbW1vbiBsb2dpYyBpcyBub3QgdXRpbGl6aW5nXFxuLVxcdFxcdCAqIHByb2ctXFx1MDAzZWF0YWNoX2J0Zl9vYmpfZmQvcHJvZy1cXHUwMDNlYXR0YWNoX2J0Zl9pZCBhbnltb3JlIGJlY2F1c2VcXG4rXFx0XFx0ICogcHJvZy1cXHUwMDNlYXR0YWNoX2J0Zl9vYmpfZmQvcHJvZy1cXHUwMDNlYXR0YWNoX2J0Zl9pZCBhbnltb3JlIGJlY2F1c2VcXG4gXFx0XFx0ICogdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYWZ0ZXIgb3B0cyB3ZXJlIHBvcHVsYXRlZCBieVxcbiBcXHRcXHQgKiBsaWJicGYsIHNvIHRoaXMgY2FsbGJhY2sgaGFzIHRvIHVwZGF0ZSBvcHRzIGV4cGxpY2l0bHkgaGVyZVxcbiBcXHRcXHQgKi9cXG5AQCAtMTQyMTksNyArMTQyMTgsNyBAQCBwZXJmX2V2ZW50X3JlYWRfc2ltcGxlKHZvaWQgKm1tYXBfbWVtLCBzaXplX3QgbW1hcF9zaXplLCBzaXplX3QgcGFnZV9zaXplLFxcbiBcXHRcXHRpZiAoKCh2b2lkICopZWhkcikgKyBlaGRyX3NpemUgXFx1MDAzZSBiYXNlICsgbW1hcF9zaXplKSB7XFxuIFxcdFxcdFxcdHZvaWQgKmNvcHlfc3RhcnQgPSBlaGRyO1xcbiBcXHRcXHRcXHRzaXplX3QgbGVuX2ZpcnN0ID0gYmFzZSArIG1tYXBfc2l6ZSAtIGNvcHlfc3RhcnQ7XFxuLVxcdFxcdFxcdHNpemVfdCBsZW5fc2VjbmQgPSBlaGRyX3NpemUgLSBsZW5fZmlyc3Q7XFxuK1xcdFxcdFxcdHNpemVfdCBsZW5fc2Vjb25kID0gZWhkcl9zaXplIC0gbGVuX2ZpcnN0O1xcbiBcXG4gXFx0XFx0XFx0aWYgKCpjb3B5X3NpemUgXFx1MDAzYyBlaGRyX3NpemUpIHtcXG4gXFx0XFx0XFx0XFx0ZnJlZSgqY29weV9tZW0pO1xcbkBAIC0xNDIzMyw3ICsxNDIzMiw3IEBAIHBlcmZfZXZlbnRfcmVhZF9zaW1wbGUodm9pZCAqbW1hcF9tZW0sIHNpemVfdCBtbWFwX3NpemUsIHNpemVfdCBwYWdlX3NpemUsXFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdG1lbWNweSgqY29weV9tZW0sIGNvcHlfc3RhcnQsIGxlbl9maXJzdCk7XFxuLVxcdFxcdFxcdG1lbWNweSgqY29weV9tZW0gKyBsZW5fZmlyc3QsIGJhc2UsIGxlbl9zZWNuZCk7XFxuK1xcdFxcdFxcdG1lbWNweSgqY29weV9tZW0gKyBsZW5fZmlyc3QsIGJhc2UsIGxlbl9zZWNvbmQpO1xcbiBcXHRcXHRcXHRlaGRyID0gKmNvcHlfbWVtO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xNDI1MSw3ICsxNDI1MCw3IEBAIHN0cnVjdCBwZXJmX2J1ZmZlcjtcXG4gXFxuIHN0cnVjdCBwZXJmX2J1ZmZlcl9wYXJhbXMge1xcbiBcXHRzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyO1xcbi1cXHQvKiBpZiBldmVudF9jYiBpcyBzcGVjaWZpZWQsIGl0IHRha2VzIHByZWNlbmRlbmNlICovXFxuK1xcdC8qIGlmIGV2ZW50X2NiIGlzIHNwZWNpZmllZCwgaXQgdGFrZXMgcHJlY2VkZW5jZSAqL1xcbiBcXHRwZXJmX2J1ZmZlcl9ldmVudF9mbiBldmVudF9jYjtcXG4gXFx0Lyogc2FtcGxlX2NiIGFuZCBsb3N0X2NiIGFyZSBoaWdoZXItbGV2ZWwgY29tbW9uLWNhc2UgY2FsbGJhY2tzICovXFxuIFxcdHBlcmZfYnVmZmVyX3NhbXBsZV9mbiBzYW1wbGVfY2I7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xcbmluZGV4IDdkNmJkYTkwOTI5NTQuLmM2ZDA1NWI5NDU3ZGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jXFxuQEAgLTY4LDEyICs2OCw5IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mXFxuIHtcXG4gXFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgKmRhdGEgPSBOVUxMO1xcbiBcXHRpbnQgaSwgZXJyLCBrZXkgPSAwLCBudW1fb25saW5lLCBydW4gPSAwO1xcbi1cXHRfX3U2NCBhcmdzWzJdID0gezB4MTIzNFVMTCwgMHg1Njc4VUxMfTtcXG4gXFx0c2l6ZV90IGRhdGFfc3o7XFxuIFxcdGJvb2wgKm9ubGluZTtcXG4gXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzLFxcbi1cXHRcXHQgICAgLmN0eF9pbiA9IGFyZ3MsXFxuLVxcdFxcdCAgICAuY3R4X3NpemVfaW4gPSBzaXplb2YoYXJncyksXFxuIFxcdFxcdCAgICAuZmxhZ3MgPSBCUEZfRl9URVNUX1JVTl9PTl9DUFUsXFxuIFxcdCk7XFxuIFxcbkBAIC04MSw3ICs3OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mXFxuIFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInBhcnNlX2NwdV9tYXNrX2ZpbGVcXFwiKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0ZGF0YV9zeiA9IG1hcCA/IGJwZl9tYXBfX3ZhbHVlX3NpemUobWFwKSA6IHNpemVvZigqZGF0YSk7XFxuK1xcdGRhdGFfc3ogPSBzaXplb2YoKmRhdGEpO1xcbiBcXHRkYXRhID0gY2FsbG9jKDEsIGRhdGFfc3opO1xcbiBcXHRpZiAoIUFTU0VSVF9PS19QVFIoZGF0YSwgXFxcImNhbGxvYyBwZXJjcHUgZGF0YVxcXCIpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMTA5LDcgKzEwNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0QVNTRVJUX0VRKCpydW5wLCArK3J1biwgXFxcInJ1blxcXCIpO1xcbi1cXHRcXHRBU1NFUlRfRVEoZGF0YS1cXHUwMDNlY3B1X2lkWzBdLCBpLCBcXFwiY3B1X2lkXFxcIik7XFxuK1xcdFxcdEFTU0VSVF9FUShkYXRhLVxcdTAwM2VjcHVfaWQsIGksIFxcXCJjcHVfaWRcXFwiKTtcXG4gXFx0XFx0QVNTRVJUX0VRKGRhdGEtXFx1MDAzZWRhdGEsIDEsIFxcXCJkYXRhXFxcIik7XFxuIFxcdFxcdEFTU0VSVF9UUlVFKGRhdGEtXFx1MDAzZXNldCwgXFxcInNldFxcXCIpO1xcbiBcXHRcXHRBU1NFUlRfRVEoZGF0YS1cXHUwMDNlbnVtc1s2XSwgMHhjMGRlLCBcXFwibnVtc1s2XVxcXCIpO1xcbkBAIC0xMjYsMTEgKzEyMywxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZlxcbiBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUgaW5pdF92YWx1ZSA9IHt9O1xcbitcXHRjb25zdCBfX3UzMiBkZXNpcmVkX3N6ID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKSAqIDI7XFxuIFxcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1ICppbml0X2RhdGE7XFxuLVxcdGNvbnN0IF9fdTMyIGRlc2lyZWRfc3ogPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpO1xcbiBcXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEgKnNrZWwgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwLCAqbWFwX3BlcmNwdV9hcnI7XFxuIFxcdHNpemVfdCBpbml0X2RhdGFfc3o7XFxuLVxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuIFxcdGludCBwcm9nX2ZkLCBlcnI7XFxuIFxcbiBcXHRza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTtcXG5AQCAtMTYzLDkgKzE2MCwxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpXFxuIFxcdGlmICghQVNTRVJUX0VRKGJwZl9tYXBfX3R5cGUobWFwKSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXFxcImJwZl9tYXBfX3R5cGVcXFwiKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHRpbml0X3ZhbHVlLnNldCA9IDE7XFxuIFxcdGluaXRfdmFsdWUuZGF0YSA9IDI7XFxuIFxcdGluaXRfdmFsdWUubnVtc1s2XSA9IC0xO1xcbiBcXHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmkgPSAyO1xcbitcXHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLnNldCA9IDE7XFxuIFxcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEubnVtc1s2XSA9IC0xO1xcbiBcXHRlcnIgPSBicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZShtYXAsIFxcdTAwMjZpbml0X3ZhbHVlLCBzaXplb2YoaW5pdF92YWx1ZSkpO1xcbiBcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZVxcXCIpKVxcbkBAIC0xNzcsMzMgKzE3NiwzNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpXFxuIFxcbiBcXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVxcdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFxcXCJpbml0X3ZhbHVlIGRhdGFcXFwiKTtcXG4gXFx0QVNTRVJUX0VRKGluaXRfZGF0YS1cXHUwMDNlc2V0LCBpbml0X3ZhbHVlLnNldCwgXFxcImluaXRfdmFsdWUgc2V0XFxcIik7XFxuK1xcdEFTU0VSVF9FUShpbml0X2RhdGEtXFx1MDAzZW51bXNbNl0sIGluaXRfdmFsdWUubnVtc1s2XSwgXFxcImluaXRfdmFsdWUgbnVtc1s2XVxcXCIpO1xcbiBcXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVxcdTAwM2VzdHJ1Y3RfZGF0YS5pLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmksIFxcXCJpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLmlcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGluaXRfZGF0YS1cXHUwMDNlc3RydWN0X2RhdGEuc2V0LCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLnNldCxcXG4rXFx0XFx0ICBcXFwiaW5pdF92YWx1ZSBzdHJ1Y3RfZGF0YS5zZXRcXFwiKTtcXG4gXFx0QVNTRVJUX0VRKGluaXRfZGF0YS1cXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5udW1zWzZdLFxcbiBcXHRcXHQgIFxcXCJpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLm51bXNbNl1cXFwiKTtcXG4gXFx0QVNTRVJUX0VRKGluaXRfZGF0YV9zeiwgc2l6ZW9mKGluaXRfdmFsdWUpLCBcXFwiaW5pdF92YWx1ZSBzaXplXFxcIik7XFxuIFxcdEFTU0VSVF9FUSgodm9pZCAqKSBpbml0X2RhdGEsICh2b2lkICopIHNrZWwtXFx1MDAzZXBlcmNwdSwgXFxcInNrZWwtXFx1MDAzZXBlcmNwdSBlcSBpbml0X2RhdGFcXFwiKTtcXG4gXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlZGF0YSwgaW5pdF92YWx1ZS5kYXRhLCBcXFwic2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VkYXRhXFxcIik7XFxuIFxcdEFTU0VSVF9FUShza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXNldCwgaW5pdF92YWx1ZS5zZXQsIFxcXCJza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXNldFxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VudW1zWzZdLCBpbml0X3ZhbHVlLm51bXNbNl0sIFxcXCJza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZW51bXNbNl1cXFwiKTtcXG4gXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlc3RydWN0X2RhdGEuaSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5pLFxcbiBcXHRcXHQgIFxcXCJza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhLmlcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlc3RydWN0X2RhdGEuc2V0LCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLnNldCxcXG4rXFx0XFx0ICBcXFwic2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzdHJ1Y3RfZGF0YS5zZXRcXFwiKTtcXG4gXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZXBlcmNwdS1cXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5udW1zWzZdLFxcbiBcXHRcXHQgIFxcXCJza2VsLVxcdTAwM2VwZXJjcHUtXFx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl1cXFwiKTtcXG4gXFxuLVxcdEFTU0VSVF9HVChkZXNpcmVkX3N6LCBzaXplb2YoaW5pdF92YWx1ZSksIFxcXCJkZXNpcmVkX3N6XFxcIik7XFxuLVxcdGVyciA9IGJwZl9tYXBfX3NldF92YWx1ZV9zaXplKG1hcCwgZGVzaXJlZF9zeik7XFxuK1xcdHNrZWwtXFx1MDAzZXBlcmNwdV9hcnItXFx1MDAzZWFyclswXSA9IC0xO1xcbitcXHRtYXBfcGVyY3B1X2FyciA9IHNrZWwtXFx1MDAzZW1hcHMucGVyY3B1X2FycjtcXG4rXFx0ZXJyID0gYnBmX21hcF9fc2V0X3ZhbHVlX3NpemUobWFwX3BlcmNwdV9hcnIsIGRlc2lyZWRfc3opO1xcbiBcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJicGZfbWFwX19zZXRfdmFsdWVfc2l6ZVxcXCIpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKCFBU1NFUlRfRVEoYnBmX21hcF9fdmFsdWVfc2l6ZShtYXApLCBkZXNpcmVkX3N6LCBcXFwicGVyY3B1IHZhbHVlIHNpemVcXFwiKSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdGlmICghQVNTRVJUX05FUShicGZfbWFwX19idGZfdmFsdWVfdHlwZV9pZChtYXApLCAwLCBcXFwicGVyY3B1IEJURiB2YWx1ZSB0eXBlXFxcIikpXFxuK1xcdGlmICghQVNTRVJUX0VRKGJwZl9tYXBfX3ZhbHVlX3NpemUobWFwX3BlcmNwdV9hcnIpLCBkZXNpcmVkX3N6LCBcXFwicGVyY3B1IHZhbHVlIHNpemVcXFwiKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRpbml0X2RhdGEgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKG1hcCwgXFx1MDAyNmluaXRfZGF0YV9zeik7XFxuLVxcdGlmICghQVNTRVJUX09LX1BUUihpbml0X2RhdGEsIFxcXCJyZXNpemVkIGJwZl9tYXBfX2luaXRpYWxfdmFsdWVcXFwiKSlcXG4rXFx0aWYgKCFBU1NFUlRfTkVRKGJwZl9tYXBfX2J0Zl92YWx1ZV90eXBlX2lkKG1hcF9wZXJjcHVfYXJyKSwgMCwgXFxcInBlcmNwdSBCVEYgdmFsdWUgdHlwZVxcXCIpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKCFBU1NFUlRfRVEoaW5pdF9kYXRhX3N6LCBkZXNpcmVkX3N6LCBcXFwicmVzaXplZCBpbml0aWFsIHZhbHVlIHNpemVcXFwiKSlcXG4rXFx0c2tlbC1cXHUwMDNlcGVyY3B1X2FyciA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUobWFwX3BlcmNwdV9hcnIsIFxcdTAwMjZpbml0X2RhdGFfc3opO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlcGVyY3B1X2FyciwgXFxcInJlc2l6ZWQgcGVyY3B1X2FyciB2YWx1ZVxcXCIpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4tXFx0aWYgKCFBU1NFUlRfRVEoaW5pdF9kYXRhLVxcdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFxcXCJyZXNpemVkIGluaXRpYWwgdmFsdWUgZGF0YVxcXCIpKVxcbitcXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2VwZXJjcHVfYXJyLVxcdTAwM2VhcnJbMF0sIC0xLCBcXFwiYXJyWzBdXFxcIikpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0ZXJyID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWQoc2tlbCk7XFxuQEAgLTM0NSw4ICszNDgsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pdGVyKHZvaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHNrZWwtXFx1MDAzZXJvZGF0YS1cXHUwMDNlbnVtX2NwdXMgPSBudW1fY3B1cztcXG4tXFx0c2tlbC1cXHUwMDNlcm9kYXRhLVxcdTAwM2VvZmZzZXRvZl9udW0gPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSwgc3RydWN0X2RhdGEpO1xcbi1cXHRza2VsLVxcdTAwM2Vyb2RhdGEtXFx1MDAzZW9mZnNldG9mX251bSArPSBzaXplb2Yoc2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzdHJ1Y3RfZGF0YSkgLSBzaXplb2YoaW50KTtcXG4rXFx0c2tlbC1cXHUwMDNlcm9kYXRhLVxcdTAwM2VudW1fb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3RfZGF0YS5udW1zWzZdKTtcXG4gXFx0c2tlbC1cXHUwMDNlcm9kYXRhLVxcdTAwM2VlbGVtX3N6ID0gcm91bmR1cChzaXplb2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUpLCA4KTtcXG4gXFx0c2tlbC1cXHUwMDNlcGVyY3B1LVxcdTAwM2VzdHJ1Y3RfZGF0YS5udW1zWzZdID0gMHhjMGRlO1xcbiBcXG5AQCAtMzY5LDcgKzM3Miw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2l0ZXIodm9pZClcXG4gXFx0XFx0ZG8geyB9IHdoaWxlICgwKTtcXG4gXFx0QVNTRVJUX0VRKGxlbiwgMCwgXFxcInJlYWQgaXRlclxcXCIpO1xcbiBcXHRBU1NFUlRfVFJVRShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJ1bl9pdGVyLCBcXFwicnVuX2l0ZXJcXFwiKTtcXG4tXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcGVyY3B1X2RhdGFfc3VtLCAweGMwZGUgKiBudW1fY3B1cywgXFxcInBlcmNwdV9kYXRhX3N1bVxcXCIpO1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VzdW0sIDB4YzBkZSAqIG51bV9jcHVzLCBcXFwic3VtXFxcIik7XFxuIFxcbiBcXHRjbG9zZShmZCk7XFxuIG91dDpcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xcbmluZGV4IDcxZmY4ZDFiZjQ5ZWIuLjE3NWM0NDAwMDc1M2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xcbkBAIC04LDkgKzgsMTEgQEAgaW50IGxvb25nIFNFQyhcXFwiLnBlcmNwdS5sb29vb29vb29vbmdcXFwiKTtcXG4gaW50IGRhdGEzIFNFQyhcXFwiLmRhdGEucGVyY3B1XFxcIik7XFxuIGludCBkYXRhMiBTRUMoXFxcIi5wZXJjcHUuZGF0YVxcXCIpO1xcbiBcXG4rLyogVXNlZCBmb3IgdGVzdGluZyBicGZfbWFwX19zZXRfdmFsdWVfc2l6ZSgpLiAqL1xcbitpbnQgYXJyWzFdIFNFQyhcXFwiLnBlcmNwdS5hcnJcXFwiKTtcXG4rXFxuIGludCBydW47XFxuLS8qIGNwdV9pZCBhcyBhcnJheSB0byB2ZXJpZnkgbWFwIHZhbHVlIHJlc2l6aW5nLiAqL1xcbi1pbnQgY3B1X2lkWzFdIFNFQyhcXFwiLnBlcmNwdVxcXCIpO1xcbitpbnQgY3B1X2lkIFNFQyhcXFwiLnBlcmNwdVxcXCIpO1xcbiBpbnQgZGF0YSBTRUMoXFxcIi5wZXJjcHVcXFwiKSA9IC0xO1xcbiBpbnQgbnVtc1s3XSBTRUMoXFxcIi5wZXJjcHVcXFwiKTtcXG4gYm9vbCBzZXQgU0VDKFxcXCIucGVyY3B1XFxcIikgPSBmYWxzZTtcXG5AQCAtMzQsNyArMzYsNyBAQCBpbnQgdXBkYXRlX3BlcmNwdV9kYXRhKHZvaWQgKmN0eClcXG4gXFx0ZGF0YSA9IDE7XFxuIFxcdHJ1bisrO1xcbiBcXHRzZXQgPSB0cnVlO1xcbi1cXHRjcHVfaWRbMF0gPSBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQoKTtcXG4rXFx0Y3B1X2lkID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC02Miw5ICs2NCw5IEBAIGludCB2ZXJpZmllcl9zbnByaW50Zih2b2lkICpjdHgpXFxuIH1cXG4gXFxuIHZvbGF0aWxlIGNvbnN0IF9fdTMyIG51bV9jcHVzID0gMDtcXG4tdm9sYXRpbGUgY29uc3QgaW50IG9mZnNldG9mX251bTtcXG4rdm9sYXRpbGUgY29uc3QgaW50IG51bV9vZmY7XFxuIHZvbGF0aWxlIGNvbnN0IGludCBlbGVtX3N6O1xcbi1fX3UzMiBwZXJjcHVfZGF0YV9zdW0gPSAwO1xcbitfX3UzMiBzdW0gPSAwO1xcbiBib29sIHJ1bl9pdGVyID0gZmFsc2U7XFxuIFxcbiBTRUMoXFxcIml0ZXIvYnBmX21hcF9lbGVtXFxcIilcXG5AQCAtODAsNyArODIsNyBAQCBpbnQgZHVtcF9wZXJjcHVfZGF0YShzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSAqY3R4KVxcbiBcXHRydW5faXRlciA9IHRydWU7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2NwdXM7IGkrKykge1xcbi1cXHRcXHRwZXJjcHVfZGF0YV9zdW0gKz0gKihpbnQgKikgKHBwdHIgKyBvZmZzZXRvZl9udW0pO1xcbitcXHRcXHRzdW0gKz0gKihpbnQgKikgKHBwdHIgKyBudW1fb2ZmKTtcXG4gXFx0XFx0cHB0ciArPSBlbGVtX3N6O1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxODoxNTowMS43OTEwMDM0NzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTkyMjQ1MjA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSByZW1vdmVzIGEgYmxhbmsgbGluZSBpbiB0aGUga2VybmVsIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGFuZCBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGxpYmJwZiwgYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNkNjk2NTM1ZWFhZGEyM2Q3MzMwOGQwMGU0N2ZiMmIyZjdiMzk5YjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxODoxNTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNmFjMWFmY2VkMjBiZi4uODFlYWU4ZjcwYWNkYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTIxMTMsNyArMTIxMTMsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxuIFx0XHRcdHJlZl90bmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHJlZl90LVx1MDAzZW5hbWVfb2ZmKTtcbiBcdFx0fVxuIFxuLVxuIFx0XHRpZiAoYnBmX3JlZ2lzdGVyX2lzX251bGwocmVnKSBcdTAwMjZcdTAwMjYgdHlwZV9tYXlfYmVfbnVsbChrZl9hcmdfdHlwZSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmMgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuaW5kZXggYTUwNTQwZWY2NTIxYy4uZTVlODIyNTVhZjI0YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2dlbi5jXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9nZW4uY1xuQEAgLTMwMyw3ICszMDMsNyBAQCBzdGF0aWMgaW50IGNvZGVnZW5fZGF0YXNlY3Moc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpXG4gXHRcdHJldHVybiAtZXJybm87XG4gXG4gXHRicGZfb2JqZWN0X19mb3JfZWFjaF9tYXAobWFwLCBvYmopIHtcbi1cdFx0Lyogb25seSBnZW5lcmF0ZSBkZWZpbml0aW9ucyBmb3IgbWVtb3J5LW1hcHBlZCBpbnRlcm5hbCBtYXBzICovXG4rXHRcdC8qIG9ubHkgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIHNrZWwgZGF0YSBtYXBzICovXG4gXHRcdGlmICghaXNfc2tlbF9kYXRhKG1hcCwgbWFwX2lkZW50LCBzaXplb2YobWFwX2lkZW50KSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG5AQCAtNTEwLDcgKzUxMCw3IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRyZXR1cm4gbWFwX3N6O1xuIH1cbiBcbi0vKiBFbWl0IHR5cGUgc2l6ZSBhc3NlcnRzIGZvciBhbGwgdG9wLWxldmVsIGZpZWxkcyBpbiBtZW1vcnktbWFwcGVkIGludGVybmFsIG1hcHMuICovXG4rLyogRW1pdCB0eXBlIHNpemUgYXNzZXJ0cyBmb3IgYWxsIHRvcC1sZXZlbCBmaWVsZHMgaW4gc2tlbCBkYXRhIG1hcHMuICovXG4gc3RhdGljIHZvaWQgY29kZWdlbl9hc3NlcnRzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKVxuIHtcbiBcdHN0cnVjdCBidGYgKmJ0ZiA9IGJwZl9vYmplY3RfX2J0ZihvYmopO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCBlNTc0ODcwZmI3MTY5Li5iNzQ5YzAxNzQyZWUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuQEAgLTE4NDEsOSArMTg0MSw4IEBAIHN0YXRpYyBzaXplX3QgYnBmX21hcF9tbWFwX3N6KGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4gXG4gXHRzd2l0Y2ggKG1hcC1cdTAwM2VkZWYudHlwZSkge1xuIFx0Y2FzZSBCUEZfTUFQX1RZUEVfQVJSQVk6XG4tXHRcdHJldHVybiBhcnJheV9tYXBfbW1hcF9zeihtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemUsIG1hcC1cdTAwM2VkZWYubWF4X2VudHJpZXMpO1xuIFx0Y2FzZSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZOlxuLVx0XHRyZXR1cm4gbWFwLVx1MDAzZWRlZi52YWx1ZV9zaXplO1xuK1x0XHRyZXR1cm4gYXJyYXlfbWFwX21tYXBfc3oobWFwLVx1MDAzZWRlZi52YWx1ZV9zaXplLCBtYXAtXHUwMDNlZGVmLm1heF9lbnRyaWVzKTtcbiBcdGNhc2UgQlBGX01BUF9UWVBFX0FSRU5BOlxuIFx0XHRyZXR1cm4gcGFnZV9zeiAqIG1hcC1cdTAwM2VkZWYubWF4X2VudHJpZXM7XG4gXHRkZWZhdWx0OlxuQEAgLTE5NTEsNyArMTk1MCw3IEBAIHN0YXRpYyBib29sIG1hcF9pc19tbWFwYWJsZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKlxuLVx0ICogVGhlIGludGVybmFsIFBFUkNQVSBtYXBzIGFyZSBub3QgbW1hcGJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nXG4rXHQgKiBUaGUgaW50ZXJuYWwgUEVSQ1BVIG1hcHMgYXJlIG5vdCBtbWFwYWJsZSBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nXG4gXHQgKiBwZXJjcHVfYXJyYXkgbWFwcyBkbyBub3QgaGF2ZSBtbWFwIHN1cHBvcnQuXG4gXHQgKi9cbiBcdGlmIChtYXAtXHUwMDNlbGliYnBmX3R5cGUgPT0gTElCQlBGX01BUF9QRVJDUFUpXG5AQCAtMjgzMSw3ICsyODMwLDcgQEAgc3RhdGljIHNpemVfdCBhZGp1c3RfcmluZ2J1Zl9zeihzaXplX3Qgc3opXG4gXHRcdHJldHVybiAwO1xuIFx0LyogS2VybmVsIGV4cGVjdHMgQlBGX01BUF9UWVBFX1JJTkdCVUYncyBtYXhfZW50cmllcyB0byBiZVxuIFx0ICogYSBwb3dlci1vZi0yIG11bHRpcGxlIG9mIGtlcm5lbCdzIHBhZ2Ugc2l6ZS4gSWYgdXNlciBkaWxpZ2VudGx5XG4tXHQgKiBzYXRpc2lmaWVkIHRoZXNlIGNvbmRpdGlvbnMsIHBhc3MgdGhlIHNpemUgdGhyb3VnaC5cbitcdCAqIHNhdGlzZmllZCB0aGVzZSBjb25kaXRpb25zLCBwYXNzIHRoZSBzaXplIHRocm91Z2guXG4gXHQgKi9cbiBcdGlmICgoc3ogJSBwYWdlX3N6KSA9PSAwIFx1MDAyNlx1MDAyNiBpc19wb3dfb2ZfMihzeiAvIHBhZ2Vfc3opKVxuIFx0XHRyZXR1cm4gc3o7XG5AQCAtNjk4OSw3ICs2OTg4LDcgQEAgYnBmX29iamVjdF9fcmVsb2NfY29kZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1haW5fcHJvZyxcbiAgKiAgICArLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLStcbiAgKlxuICAqIEF0IHRoaXMgcG9pbnQsIHdlIHJlbG9jYXRlIHN1YkEgY2FsbHMsIHRoZW4gZ28gb25lIGxldmVsIHVwIGFuZCBmaW5pc2ggd2l0aFxuLSAqIHJlbG9jYXRpbiBtYWluQSBjYWxscy4gbWFpbkEgaXMgZG9uZS5cbisgKiByZWxvY2F0aW9uIG1haW5BIGNhbGxzLiBtYWluQSBpcyBkb25lLlxuICAqXG4gICogRm9yIG1haW5CIHByb2Nlc3MgaXMgc2ltaWxhciBidXQgcmVzdWx0cyBpbiBkaWZmZXJlbnQgb3JkZXIuIFdlIHN0YXJ0IHdpdGhcbiAgKiBtYWluQiBhbmQgc2tpcCBzdWJBIGFuZCBzdWJCLCBhcyBtYWluQiBuZXZlciBjYWxscyB0aGVtIChhdCBsZWFzdFxuQEAgLTc5MzYsNyArNzkzNSw3IEBAIHN0YXRpYyBpbnQgbGliYnBmX3ByZXBhcmVfcHJvZ19sb2FkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdFx0cHJvZy1cdTAwM2VhdHRhY2hfYnRmX2lkID0gYnRmX3R5cGVfaWQ7XG4gXG4gXHRcdC8qIGJ1dCBieSBub3cgbGliYnBmIGNvbW1vbiBsb2dpYyBpcyBub3QgdXRpbGl6aW5nXG4tXHRcdCAqIHByb2ctXHUwMDNlYXRhY2hfYnRmX29ial9mZC9wcm9nLVx1MDAzZWF0dGFjaF9idGZfaWQgYW55bW9yZSBiZWNhdXNlXG4rXHRcdCAqIHByb2ctXHUwMDNlYXR0YWNoX2J0Zl9vYmpfZmQvcHJvZy1cdTAwM2VhdHRhY2hfYnRmX2lkIGFueW1vcmUgYmVjYXVzZVxuIFx0XHQgKiB0aGlzIGNhbGxiYWNrIGlzIGNhbGxlZCBhZnRlciBvcHRzIHdlcmUgcG9wdWxhdGVkIGJ5XG4gXHRcdCAqIGxpYmJwZiwgc28gdGhpcyBjYWxsYmFjayBoYXMgdG8gdXBkYXRlIG9wdHMgZXhwbGljaXRseSBoZXJlXG4gXHRcdCAqL1xuQEAgLTE0MjE5LDcgKzE0MjE4LDcgQEAgcGVyZl9ldmVudF9yZWFkX3NpbXBsZSh2b2lkICptbWFwX21lbSwgc2l6ZV90IG1tYXBfc2l6ZSwgc2l6ZV90IHBhZ2Vfc2l6ZSxcbiBcdFx0aWYgKCgodm9pZCAqKWVoZHIpICsgZWhkcl9zaXplIFx1MDAzZSBiYXNlICsgbW1hcF9zaXplKSB7XG4gXHRcdFx0dm9pZCAqY29weV9zdGFydCA9IGVoZHI7XG4gXHRcdFx0c2l6ZV90IGxlbl9maXJzdCA9IGJhc2UgKyBtbWFwX3NpemUgLSBjb3B5X3N0YXJ0O1xuLVx0XHRcdHNpemVfdCBsZW5fc2VjbmQgPSBlaGRyX3NpemUgLSBsZW5fZmlyc3Q7XG4rXHRcdFx0c2l6ZV90IGxlbl9zZWNvbmQgPSBlaGRyX3NpemUgLSBsZW5fZmlyc3Q7XG4gXG4gXHRcdFx0aWYgKCpjb3B5X3NpemUgXHUwMDNjIGVoZHJfc2l6ZSkge1xuIFx0XHRcdFx0ZnJlZSgqY29weV9tZW0pO1xuQEAgLTE0MjMzLDcgKzE0MjMyLDcgQEAgcGVyZl9ldmVudF9yZWFkX3NpbXBsZSh2b2lkICptbWFwX21lbSwgc2l6ZV90IG1tYXBfc2l6ZSwgc2l6ZV90IHBhZ2Vfc2l6ZSxcbiBcdFx0XHR9XG4gXG4gXHRcdFx0bWVtY3B5KCpjb3B5X21lbSwgY29weV9zdGFydCwgbGVuX2ZpcnN0KTtcbi1cdFx0XHRtZW1jcHkoKmNvcHlfbWVtICsgbGVuX2ZpcnN0LCBiYXNlLCBsZW5fc2VjbmQpO1xuK1x0XHRcdG1lbWNweSgqY29weV9tZW0gKyBsZW5fZmlyc3QsIGJhc2UsIGxlbl9zZWNvbmQpO1xuIFx0XHRcdGVoZHIgPSAqY29weV9tZW07XG4gXHRcdH1cbiBcbkBAIC0xNDI1MSw3ICsxNDI1MCw3IEBAIHN0cnVjdCBwZXJmX2J1ZmZlcjtcbiBcbiBzdHJ1Y3QgcGVyZl9idWZmZXJfcGFyYW1zIHtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHI7XG4tXHQvKiBpZiBldmVudF9jYiBpcyBzcGVjaWZpZWQsIGl0IHRha2VzIHByZWNlbmRlbmNlICovXG4rXHQvKiBpZiBldmVudF9jYiBpcyBzcGVjaWZpZWQsIGl0IHRha2VzIHByZWNlZGVuY2UgKi9cbiBcdHBlcmZfYnVmZmVyX2V2ZW50X2ZuIGV2ZW50X2NiO1xuIFx0Lyogc2FtcGxlX2NiIGFuZCBsb3N0X2NiIGFyZSBoaWdoZXItbGV2ZWwgY29tbW9uLWNhc2UgY2FsbGJhY2tzICovXG4gXHRwZXJmX2J1ZmZlcl9zYW1wbGVfZm4gc2FtcGxlX2NiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xuaW5kZXggN2Q2YmRhOTA5Mjk1NC4uYzZkMDU1Yjk0NTdkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2dsb2JhbF9kYXRhX2luaXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZ2xvYmFsX2RhdGFfaW5pdC5jXG5AQCAtNjgsMTIgKzY4LDkgQEAgc3RhdGljIHZvaWQgdGVzdF9wZXJjcHVfZGF0YV9vbl9jcHVzKHN0cnVjdCBicGZfbWFwICptYXAsIGludCBtYXBfZmQsIGludCBwcm9nX2ZcbiB7XG4gXHRzdHJ1Y3QgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX3BlcmNwdSAqZGF0YSA9IE5VTEw7XG4gXHRpbnQgaSwgZXJyLCBrZXkgPSAwLCBudW1fb25saW5lLCBydW4gPSAwO1xuLVx0X191NjQgYXJnc1syXSA9IHsweDEyMzRVTEwsIDB4NTY3OFVMTH07XG4gXHRzaXplX3QgZGF0YV9zejtcbiBcdGJvb2wgKm9ubGluZTtcbiBcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyxcbi1cdFx0ICAgIC5jdHhfaW4gPSBhcmdzLFxuLVx0XHQgICAgLmN0eF9zaXplX2luID0gc2l6ZW9mKGFyZ3MpLFxuIFx0XHQgICAgLmZsYWdzID0gQlBGX0ZfVEVTVF9SVU5fT05fQ1BVLFxuIFx0KTtcbiBcbkBAIC04MSw3ICs3OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mXG4gXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicGFyc2VfY3B1X21hc2tfZmlsZVwiKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0ZGF0YV9zeiA9IG1hcCA/IGJwZl9tYXBfX3ZhbHVlX3NpemUobWFwKSA6IHNpemVvZigqZGF0YSk7XG4rXHRkYXRhX3N6ID0gc2l6ZW9mKCpkYXRhKTtcbiBcdGRhdGEgPSBjYWxsb2MoMSwgZGF0YV9zeik7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIoZGF0YSwgXCJjYWxsb2MgcGVyY3B1IGRhdGFcIikpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTEwOSw3ICsxMDYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BlcmNwdV9kYXRhX29uX2NwdXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG1hcF9mZCwgaW50IHByb2dfZlxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRBU1NFUlRfRVEoKnJ1bnAsICsrcnVuLCBcInJ1blwiKTtcbi1cdFx0QVNTRVJUX0VRKGRhdGEtXHUwMDNlY3B1X2lkWzBdLCBpLCBcImNwdV9pZFwiKTtcbitcdFx0QVNTRVJUX0VRKGRhdGEtXHUwMDNlY3B1X2lkLCBpLCBcImNwdV9pZFwiKTtcbiBcdFx0QVNTRVJUX0VRKGRhdGEtXHUwMDNlZGF0YSwgMSwgXCJkYXRhXCIpO1xuIFx0XHRBU1NFUlRfVFJVRShkYXRhLVx1MDAzZXNldCwgXCJzZXRcIik7XG4gXHRcdEFTU0VSVF9FUShkYXRhLVx1MDAzZW51bXNbNl0sIDB4YzBkZSwgXCJudW1zWzZdXCIpO1xuQEAgLTEyNiwxMSArMTIzLDExIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGVyY3B1X2RhdGFfb25fY3B1cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbWFwX2ZkLCBpbnQgcHJvZ19mXG4gc3RhdGljIHZvaWQgdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfaW5pdCh2b2lkKVxuIHtcbiBcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1IGluaXRfdmFsdWUgPSB7fTtcbitcdGNvbnN0IF9fdTMyIGRlc2lyZWRfc3ogPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpICogMjtcbiBcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1ICppbml0X2RhdGE7XG4tXHRjb25zdCBfX3UzMiBkZXNpcmVkX3N6ID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTtcbiBcdHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YSAqc2tlbCA9IE5VTEw7XG4rXHRzdHJ1Y3QgYnBmX21hcCAqbWFwLCAqbWFwX3BlcmNwdV9hcnI7XG4gXHRzaXplX3QgaW5pdF9kYXRhX3N6O1xuLVx0c3RydWN0IGJwZl9tYXAgKm1hcDtcbiBcdGludCBwcm9nX2ZkLCBlcnI7XG4gXG4gXHRza2VsID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX29wZW4oKTtcbkBAIC0xNjMsOSArMTYwLDExIEBAIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2luaXQodm9pZClcbiBcdGlmICghQVNTRVJUX0VRKGJwZl9tYXBfX3R5cGUobWFwKSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSwgXCJicGZfbWFwX190eXBlXCIpKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdGluaXRfdmFsdWUuc2V0ID0gMTtcbiBcdGluaXRfdmFsdWUuZGF0YSA9IDI7XG4gXHRpbml0X3ZhbHVlLm51bXNbNl0gPSAtMTtcbiBcdGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSA9IDI7XG4rXHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLnNldCA9IDE7XG4gXHRpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLm51bXNbNl0gPSAtMTtcbiBcdGVyciA9IGJwZl9tYXBfX3NldF9pbml0aWFsX3ZhbHVlKG1hcCwgXHUwMDI2aW5pdF92YWx1ZSwgc2l6ZW9mKGluaXRfdmFsdWUpKTtcbiBcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfbWFwX19zZXRfaW5pdGlhbF92YWx1ZVwiKSlcbkBAIC0xNzcsMzMgKzE3NiwzNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9pbml0KHZvaWQpXG4gXG4gXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZWRhdGEsIGluaXRfdmFsdWUuZGF0YSwgXCJpbml0X3ZhbHVlIGRhdGFcIik7XG4gXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXNldCwgaW5pdF92YWx1ZS5zZXQsIFwiaW5pdF92YWx1ZSBzZXRcIik7XG4rXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZW51bXNbNl0sIGluaXRfdmFsdWUubnVtc1s2XSwgXCJpbml0X3ZhbHVlIG51bXNbNl1cIik7XG4gXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXN0cnVjdF9kYXRhLmksIGluaXRfdmFsdWUuc3RydWN0X2RhdGEuaSwgXCJpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLmlcIik7XG4rXHRBU1NFUlRfRVEoaW5pdF9kYXRhLVx1MDAzZXN0cnVjdF9kYXRhLnNldCwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5zZXQsXG4rXHRcdCAgXCJpbml0X3ZhbHVlIHN0cnVjdF9kYXRhLnNldFwiKTtcbiBcdEFTU0VSVF9FUShpbml0X2RhdGEtXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5udW1zWzZdLFxuIFx0XHQgIFwiaW5pdF92YWx1ZSBzdHJ1Y3RfZGF0YS5udW1zWzZdXCIpO1xuIFx0QVNTRVJUX0VRKGluaXRfZGF0YV9zeiwgc2l6ZW9mKGluaXRfdmFsdWUpLCBcImluaXRfdmFsdWUgc2l6ZVwiKTtcbiBcdEFTU0VSVF9FUSgodm9pZCAqKSBpbml0X2RhdGEsICh2b2lkICopIHNrZWwtXHUwMDNlcGVyY3B1LCBcInNrZWwtXHUwMDNlcGVyY3B1IGVxIGluaXRfZGF0YVwiKTtcbiBcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlZGF0YVwiKTtcbiBcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzZXQsIGluaXRfdmFsdWUuc2V0LCBcInNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXNldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VudW1zWzZdLCBpbml0X3ZhbHVlLm51bXNbNl0sIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlbnVtc1s2XVwiKTtcbiBcdEFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5pLCBpbml0X3ZhbHVlLnN0cnVjdF9kYXRhLmksXG4gXHRcdCAgXCJza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5pXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLnNldCwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5zZXQsXG4rXHRcdCAgXCJza2VsLVx1MDAzZXBlcmNwdS1cdTAwM2VzdHJ1Y3RfZGF0YS5zZXRcIik7XG4gXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XSwgaW5pdF92YWx1ZS5zdHJ1Y3RfZGF0YS5udW1zWzZdLFxuIFx0XHQgIFwic2tlbC1cdTAwM2VwZXJjcHUtXHUwMDNlc3RydWN0X2RhdGEubnVtc1s2XVwiKTtcbiBcbi1cdEFTU0VSVF9HVChkZXNpcmVkX3N6LCBzaXplb2YoaW5pdF92YWx1ZSksIFwiZGVzaXJlZF9zelwiKTtcbi1cdGVyciA9IGJwZl9tYXBfX3NldF92YWx1ZV9zaXplKG1hcCwgZGVzaXJlZF9zeik7XG4rXHRza2VsLVx1MDAzZXBlcmNwdV9hcnItXHUwMDNlYXJyWzBdID0gLTE7XG4rXHRtYXBfcGVyY3B1X2FyciA9IHNrZWwtXHUwMDNlbWFwcy5wZXJjcHVfYXJyO1xuK1x0ZXJyID0gYnBmX21hcF9fc2V0X3ZhbHVlX3NpemUobWFwX3BlcmNwdV9hcnIsIGRlc2lyZWRfc3opO1xuIFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJwZl9tYXBfX3NldF92YWx1ZV9zaXplXCIpKVxuIFx0XHRnb3RvIG91dDtcbi1cdGlmICghQVNTRVJUX0VRKGJwZl9tYXBfX3ZhbHVlX3NpemUobWFwKSwgZGVzaXJlZF9zeiwgXCJwZXJjcHUgdmFsdWUgc2l6ZVwiKSlcbi1cdFx0Z290byBvdXQ7XG4tXHRpZiAoIUFTU0VSVF9ORVEoYnBmX21hcF9fYnRmX3ZhbHVlX3R5cGVfaWQobWFwKSwgMCwgXCJwZXJjcHUgQlRGIHZhbHVlIHR5cGVcIikpXG4rXHRpZiAoIUFTU0VSVF9FUShicGZfbWFwX192YWx1ZV9zaXplKG1hcF9wZXJjcHVfYXJyKSwgZGVzaXJlZF9zeiwgXCJwZXJjcHUgdmFsdWUgc2l6ZVwiKSlcbiBcdFx0Z290byBvdXQ7XG4tXG4tXHRpbml0X2RhdGEgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKG1hcCwgXHUwMDI2aW5pdF9kYXRhX3N6KTtcbi1cdGlmICghQVNTRVJUX09LX1BUUihpbml0X2RhdGEsIFwicmVzaXplZCBicGZfbWFwX19pbml0aWFsX3ZhbHVlXCIpKVxuK1x0aWYgKCFBU1NFUlRfTkVRKGJwZl9tYXBfX2J0Zl92YWx1ZV90eXBlX2lkKG1hcF9wZXJjcHVfYXJyKSwgMCwgXCJwZXJjcHUgQlRGIHZhbHVlIHR5cGVcIikpXG4gXHRcdGdvdG8gb3V0O1xuLVx0aWYgKCFBU1NFUlRfRVEoaW5pdF9kYXRhX3N6LCBkZXNpcmVkX3N6LCBcInJlc2l6ZWQgaW5pdGlhbCB2YWx1ZSBzaXplXCIpKVxuK1x0c2tlbC1cdTAwM2VwZXJjcHVfYXJyID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShtYXBfcGVyY3B1X2FyciwgXHUwMDI2aW5pdF9kYXRhX3N6KTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZXBlcmNwdV9hcnIsIFwicmVzaXplZCBwZXJjcHVfYXJyIHZhbHVlXCIpKVxuIFx0XHRnb3RvIG91dDtcbi1cdGlmICghQVNTRVJUX0VRKGluaXRfZGF0YS1cdTAwM2VkYXRhLCBpbml0X3ZhbHVlLmRhdGEsIFwicmVzaXplZCBpbml0aWFsIHZhbHVlIGRhdGFcIikpXG4rXHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZXBlcmNwdV9hcnItXHUwMDNlYXJyWzBdLCAtMSwgXCJhcnJbMF1cIikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0ZXJyID0gdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGFfX2xvYWQoc2tlbCk7XG5AQCAtMzQ1LDggKzM0OCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2l0ZXIodm9pZClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlbnVtX2NwdXMgPSBudW1fY3B1cztcbi1cdHNrZWwtXHUwMDNlcm9kYXRhLVx1MDAzZW9mZnNldG9mX251bSA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1LCBzdHJ1Y3RfZGF0YSk7XG4tXHRza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VvZmZzZXRvZl9udW0gKz0gc2l6ZW9mKHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhKSAtIHNpemVvZihpbnQpO1xuK1x0c2tlbC1cdTAwM2Vyb2RhdGEtXHUwMDNlbnVtX29mZiA9IG9mZnNldG9mKHN0cnVjdCB0ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YV9fcGVyY3B1LFxuK1x0XHRcdFx0XHQgc3RydWN0X2RhdGEubnVtc1s2XSk7XG4gXHRza2VsLVx1MDAzZXJvZGF0YS1cdTAwM2VlbGVtX3N6ID0gcm91bmR1cChzaXplb2Yoc3RydWN0IHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX19wZXJjcHUpLCA4KTtcbiBcdHNrZWwtXHUwMDNlcGVyY3B1LVx1MDAzZXN0cnVjdF9kYXRhLm51bXNbNl0gPSAweGMwZGU7XG4gXG5AQCAtMzY5LDcgKzM3Miw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhX2l0ZXIodm9pZClcbiBcdFx0ZG8geyB9IHdoaWxlICgwKTtcbiBcdEFTU0VSVF9FUShsZW4sIDAsIFwicmVhZCBpdGVyXCIpO1xuIFx0QVNTRVJUX1RSVUUoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcnVuX2l0ZXIsIFwicnVuX2l0ZXJcIik7XG4tXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcGVyY3B1X2RhdGFfc3VtLCAweGMwZGUgKiBudW1fY3B1cywgXCJwZXJjcHVfZGF0YV9zdW1cIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlc3VtLCAweGMwZGUgKiBudW1fY3B1cywgXCJzdW1cIik7XG4gXG4gXHRjbG9zZShmZCk7XG4gb3V0OlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2dsb2JhbF9wZXJjcHVfZGF0YS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmNcbmluZGV4IDcxZmY4ZDFiZjQ5ZWIuLjE3NWM0NDAwMDc1M2QgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9nbG9iYWxfcGVyY3B1X2RhdGEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZ2xvYmFsX3BlcmNwdV9kYXRhLmNcbkBAIC04LDkgKzgsMTEgQEAgaW50IGxvb25nIFNFQyhcIi5wZXJjcHUubG9vb29vb29vb25nXCIpO1xuIGludCBkYXRhMyBTRUMoXCIuZGF0YS5wZXJjcHVcIik7XG4gaW50IGRhdGEyIFNFQyhcIi5wZXJjcHUuZGF0YVwiKTtcbiBcbisvKiBVc2VkIGZvciB0ZXN0aW5nIGJwZl9tYXBfX3NldF92YWx1ZV9zaXplKCkuICovXG4raW50IGFyclsxXSBTRUMoXCIucGVyY3B1LmFyclwiKTtcbitcbiBpbnQgcnVuO1xuLS8qIGNwdV9pZCBhcyBhcnJheSB0byB2ZXJpZnkgbWFwIHZhbHVlIHJlc2l6aW5nLiAqL1xuLWludCBjcHVfaWRbMV0gU0VDKFwiLnBlcmNwdVwiKTtcbitpbnQgY3B1X2lkIFNFQyhcIi5wZXJjcHVcIik7XG4gaW50IGRhdGEgU0VDKFwiLnBlcmNwdVwiKSA9IC0xO1xuIGludCBudW1zWzddIFNFQyhcIi5wZXJjcHVcIik7XG4gYm9vbCBzZXQgU0VDKFwiLnBlcmNwdVwiKSA9IGZhbHNlO1xuQEAgLTM0LDcgKzM2LDcgQEAgaW50IHVwZGF0ZV9wZXJjcHVfZGF0YSh2b2lkICpjdHgpXG4gXHRkYXRhID0gMTtcbiBcdHJ1bisrO1xuIFx0c2V0ID0gdHJ1ZTtcbi1cdGNwdV9pZFswXSA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpO1xuK1x0Y3B1X2lkID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjIsOSArNjQsOSBAQCBpbnQgdmVyaWZpZXJfc25wcmludGYodm9pZCAqY3R4KVxuIH1cbiBcbiB2b2xhdGlsZSBjb25zdCBfX3UzMiBudW1fY3B1cyA9IDA7XG4tdm9sYXRpbGUgY29uc3QgaW50IG9mZnNldG9mX251bTtcbit2b2xhdGlsZSBjb25zdCBpbnQgbnVtX29mZjtcbiB2b2xhdGlsZSBjb25zdCBpbnQgZWxlbV9zejtcbi1fX3UzMiBwZXJjcHVfZGF0YV9zdW0gPSAwO1xuK19fdTMyIHN1bSA9IDA7XG4gYm9vbCBydW5faXRlciA9IGZhbHNlO1xuIFxuIFNFQyhcIml0ZXIvYnBmX21hcF9lbGVtXCIpXG5AQCAtODAsNyArODIsNyBAQCBpbnQgZHVtcF9wZXJjcHVfZGF0YShzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXBfZWxlbSAqY3R4KVxuIFx0cnVuX2l0ZXIgPSB0cnVlO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2NwdXM7IGkrKykge1xuLVx0XHRwZXJjcHVfZGF0YV9zdW0gKz0gKihpbnQgKikgKHBwdHIgKyBvZmZzZXRvZl9udW0pO1xuK1x0XHRzdW0gKz0gKihpbnQgKikgKHBwdHIgKyBudW1fb2ZmKTtcbiBcdFx0cHB0ciArPSBlbGVtX3N6O1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxODoxNTowMS43OTEwMTIwOTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTkyMjQxNzg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBTZXJpZXMgQW5hbHlzaXMgZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIG5lY2Vzc2l0YXRlcyBmdXp6aW5nLCBtZWFuaW5nIGlmIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6IGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBgdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGFuZCBhIGNvdXBsZSBvZiBzZWxmdGVzdCBmaWxlcy5cblxuRmlyc3QsIEkgZXhhbWluZSBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIG1pbm9yIOKAkyBqdXN0IHRoZSByZW1vdmFsIG9mIGFuIGVtcHR5IGxpbmUuIFRoaXMgaXMgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIGFuZCBkb2Vzbid0IGFmZmVjdCBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gVGhpcyBvbmUgaXMgcXVpY2tseSBkaXNtaXNzZWQuXG5cbk5leHQsIHRoZSBgdG9vbHMvYnBmL2JwZnRvb2wvZ2VuLmNgIG1vZGlmaWNhdGlvbiBhcHBlYXJzIHRvIGJlIHJlbGF0ZWQgdG8gY29tbWVudHMuIEFnYWluLCB0aGlzIGRvZXNuJ3QgaW1wYWN0IGNvcmUga2VybmVsIGV4ZWN1dGlvbiwgc28gaXQncyBub3QgcmVsZXZhbnQgZm9yIGZ1enppbmcuXG5cbk5vdywgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgIG5lZWRzIGEgY2xvc2VyIGxvb2suIEkgc2VlIGEgY2hhbmdlIGluIGEgc3dpdGNoIHN0YXRlbWVudCB0aGF0IGFsdGVycyB0aGUgcmV0dXJuIHZhbHVlIGZvciBgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWWAuIEluaXRpYWxseSwgaXQgcmV0dXJuZWQgYG1hcC1cdTAwM2VkZWYudmFsdWVfc2l6ZWAgYnV0IG5vdyBpdCdzIHVzaW5nIGBhcnJheV9tYXBfbW1hcF9zeihtYXAtXHUwMDNlZGVmLnZhbHVlX3NpemUsIG1hcC1cdTAwM2VkZWYubWF4X2VudHJpZXMpYC4gKldhaXQqLi4uIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgYGxpYmJwZmAgaXMgYSAqdXNlcnNwYWNlKiBsaWJyYXJ5LCBldmVuIHRob3VnaCBpdCdzIHBhcnQgb2YgdGhlIGtlcm5lbCB0cmVlLiBDaGFuZ2VzIGhlcmUgZG9uJ3QgZGlyZWN0bHkgbW9kaWZ5IHRoZSBrZXJuZWwncyBleGVjdXRpb24gcGF0aC4gVGhvdWdoIGl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0IGlzIG5vdCB3aXRoaW4gdGhlIGtlcm5lbCwgc28gdGhpcyBuZWVkcyB0byBiZSBkaXNjb3VudGVkLlxuXG5UaGUgc2VsZnRlc3RzIGFyZSBqdXN0IHRoYXQ6IHNlbGYgdGVzdHMuIFRoZXkgYXJlIHVzZXJzcGFjZSBwcm9ncmFtcyBhbmQvb3IgQlBGIHByb2dyYW1zIGRlc2lnbmVkIGZvciB0ZXN0aW5nLiBUaGV5IGRvIG5vdCByZXByZXNlbnQga2VybmVsIGNvZGUgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuXG5cblRoZSBwcm9tcHQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gKnRoZSBrZXJuZWwqLiBUaGUgcHJvbXB0IGFsc28gZXhwbGljaXRseSBzYXlzIHRoYXQgdGhlIGNoYW5nZSBpcyBub3Qgd29ydGh5IG9mIGZ1enppbmcgaWYgaXQgb25seSBjb250YWluczogLi4uIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuIC4uLiBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIC4uLiBEcml2ZXIgLnJlbW92ZSAuLi4gSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIlxuXG5Fc3NlbnRpYWxseSwgbXkgdGFzayBpcyB0byBpc29sYXRlICprZXJuZWwqIGxvZ2ljIGNoYW5nZXMgdGhhdCAqY291bGQqIGJlIGV4cGxvaXRlZC4gR2l2ZW4gdGhhdCB0aGUgY3JpdGljYWwgcGFydCBpcyB0aGUgcmVtb3ZhbCBvZiBhIGJsYW5rIGxpbmUgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIHRoZSByZXN0IGFyZSBlaXRoZXIgY29tbWVudHMgb3IgdXNlcnNwYWNlIGxpYnJhcnkvdG9vbCBjaGFuZ2VzLCB0aGlzIHBhdGNoIHNlcmllcyBkb2Vzbid0IG1lZXQgdGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uOiAqKldvcnRoRnV6emluZz1mYWxzZSoqIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXNuJ3QgbWFrZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODQ3LCJPdXRwdXRUb2tlbnMiOjgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE4OjE1OjE3LjcxMzQzMjg0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSByZW1vdmVzIGEgYmxhbmsgbGluZSBpbiB0aGUga2VybmVsIChrZXJuZWwvYnBmL3ZlcmlmaWVyLmMpIGFuZCBtb2RpZmllcyB1c2Vyc3BhY2UgdG9vbHMgKGxpYmJwZiwgYnBmdG9vbCkgYW5kIHNlbGZ0ZXN0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgcmVtb3ZlcyBhIGJsYW5rIGxpbmUgaW4gdGhlIGtlcm5lbCAoa2VybmVsL2JwZi92ZXJpZmllci5jKSBhbmQgbW9kaWZpZXMgdXNlcnNwYWNlIHRvb2xzIChsaWJicGYsIGJwZnRvb2wpIGFuZCBzZWxmdGVzdHMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxODoxNToxNy43MTM0NTcyMTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowqqmqx[1] Phase: Running StartedAt: 2026-08-14 18:15:43 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqqmqx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-14 18:15:43 +0000 UTC FinishedAt: 2026-08-14 18:15:48 +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,}