Name: series-workflowj9wkk Phase: Failed StartedAt: 2026-08-13 03:40:16 +0000 UTC FinishedAt: 2026-08-13 04:19:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9wkk[0] Phase: Succeeded StartedAt: 2026-08-13 03:40:16 +0000 UTC FinishedAt: 2026-08-13 04:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9wkk[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 03:40:16 +0000 UTC FinishedAt: 2026-08-13 04:19:41 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlcnNwYWNlIGxpYmJwZiBsaWJyYXJ5ICh0b29scy9saWIvYnBmKSBhbmQgYWRkcyBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZhYThmNzYwMWIwN2ZkYWEzZmM3NDQ2OTZhY2IyNTZiMDk5ODM1OTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNDoxOTowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmggYi90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmhcbmluZGV4IDlkMTYwYjViOWMwZWUuLjE3MWVhMDU1Y2QzMjMgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaFxuQEAgLTE4OCw2ICYjNDM7MTg4LDIwIEBAIGVudW0gbGliYnBmX3RyaXN0YXRlIHtcbiBcdFRSSV9NT0RVTEUgPSAyLFxuIH07XG4gXG4mIzQzOy8qIEhlbHBlciB0eXBlZGVmIGZvciBkZWNsYXJpbmcga2VybmVsIG1vZHVsZSBuYW1lcyB0aGF0IG5lZWQgQlRGIGxvYWRpbmcuXG4mIzQzOyAqXG4mIzQzOyAqIFVzYWdlOiBkZWZpbmUgYW4gYXJyYXkgaW4gdGhlIFwmIzM0Oy5rbW9kX2J0ZnNcJiMzNDsgRUxGIHNlY3Rpb24gdG8gc3BlY2lmeVxuJiM0MzsgKiB3aGljaCBtb2R1bGVzIG5lZWQgQlRGIGxvYWRpbmc6XG4mIzQzOyAqXG4mIzQzOyAqICAgREVGSU5FX0tNT0RfQlRGUyhfbmVlZGVkX2ttb2RzKT0geyBcJiMzNDttb2R1bGUxXCYjMzQ7LCBcJiMzNDttb2R1bGUyXCYjMzQ7LCAuLi4gfTtcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgQlRGIGxvYWRpbmcgYW5kIHNwZWVkcyB1cCB0aGUgQlBGIHByb2dyYW1cbiYjNDM7ICogbG9hZCBwcm9jZXNzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBLTU9EX05BTUVfTEVOIDY0XG4mIzQzOyNkZWZpbmUgREVGSU5FX0tNT0RfQlRGUyhuYW1lKSBcXFxuJiM0MztcdFNFQyhcJiMzNDsua21vZF9idGZzXCYjMzQ7KSBjaGFyIG5hbWVbXVtLTU9EX05BTUVfTEVOXVxuJiM0MztcbiAjZGVmaW5lIF9fa2NvbmZpZyBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFwmIzM0Oy5rY29uZmlnXCYjMzQ7KSkpXG4gI2RlZmluZSBfX2tzeW0gX19hdHRyaWJ1dGVfXygoc2VjdGlvbihcJiMzNDsua3N5bXNcJiMzNDspKSlcbiAjZGVmaW5lIF9fa3B0cl91bnRydXN0ZWQgX19hdHRyaWJ1dGVfXygoYnRmX3R5cGVfdGFnKFwmIzM0O2twdHJfdW50cnVzdGVkXCYjMzQ7KSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IDUxNGU0ZTlkYWE4MjUuLjlmZThhNjUzZThiNmIgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtNTQ4LDYgJiM0Mzs1NDgsNyBAQCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMge1xuICNkZWZpbmUgU1RSVUNUX09QU19TRUMgXCYjMzQ7LnN0cnVjdF9vcHNcJiMzNDtcbiAjZGVmaW5lIFNUUlVDVF9PUFNfTElOS19TRUMgXCYjMzQ7LnN0cnVjdF9vcHMubGlua1wmIzM0O1xuICNkZWZpbmUgQVJFTkFfU0VDIFwmIzM0Oy5hZGRyX3NwYWNlLjFcJiMzNDtcbiYjNDM7I2RlZmluZSBLTU9EU19CVEZTX1NFQyBcJiMzNDsua21vZF9idGZzXCYjMzQ7XG4gXG4gZW51bSBsaWJicGZfbWFwX3R5cGUge1xuIFx0TElCQlBGX01BUF9VTlNQRUMsXG5AQCAtNzAzLDYgJiM0Mzs3MDQsOSBAQCBlbnVtIGJwZl9vYmplY3Rfc3RhdGUge1xuIFx0T0JKX0xPQURFRCxcbiB9O1xuIFxuJiM0MzsvKiBTaG91bGQgbWF0Y2ggdGhlIGRlZmluaXRpb24gaW4gYnBmX2hlbHBlcnMuaCAqL1xuJiM0MzsjZGVmaW5lIEtNT0RfTkFNRV9MRU4gNjRcbiYjNDM7XG4gc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Y2hhciBuYW1lW0JQRl9PQkpfTkFNRV9MRU5dO1xuIFx0Y2hhciBsaWNlbnNlWzY0XTtcbkBAIC03NzksNiAmIzQzOzc4MywxNCBAQCBzdHJ1Y3QgYnBmX29iamVjdCB7XG4gXHRjaGFyICp0b2tlbl9wYXRoO1xuIFx0aW50IHRva2VuX2ZkO1xuIFxuJiM0MztcdC8qIGtlcm5lbCBtb2R1bGUgQlRGcyB0byBsb2FkLCBkZWNsYXJlZCBpbiBcJiMzNDsua21vZF9idGZzXCYjMzQ7IEVMRiBzZWN0aW9uICovXG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdGNoYXIgKCpkYXRhKVtLTU9EX05BTUVfTEVOXTtcbiYjNDM7XHRcdHNpemVfdCBucl9uYW1lcztcbiYjNDM7XHRcdHNpemVfdCBucl9sb2FkZWQ7XG4mIzQzO1x0XHRzdHJ1Y3QgaGFzaG1hcCAqaGFzaG1hcDtcbiYjNDM7XHR9ICprbW9kX2J0ZnM7XG4mIzQzO1xuIFx0Y2hhciBwYXRoW107XG4gfTtcbiBcbkBAIC05MDEsNiAmIzQzOzkxMyw3NSBAQCBicGZfb2JqZWN0X19pbml0X3Byb2coc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuJiM0MztzdGF0aWMgc2l6ZV90IG1vZF9uYW1lX2hhc2hfZm4obG9uZyBrZXksIHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdHJfaGFzaCgoY2hhciAqKWtleSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG1vZF9uYW1lX2VxdWFsX2ZuKGxvbmcga2V5MSwgbG9uZyBrZXkyLCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3RyY21wKChjaGFyICopa2V5MSwgKGNoYXIgKilrZXkyKSA9PSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2JwZl9vYmplY3RfX2NvbGxlY3Rfa21vZF9idGZfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgRWxmX0RhdGEgKnNlY19kYXRhLFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKnNlY19uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG1vZHVsZV9jbnQsIGksIGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChvYmotXHUwMDNla21vZF9idGZzKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O3NlYyAmIzM5OyVzJiMzOTs6IGR1cGxpY2F0ZSBzZWN0aW9ucyBkZXRlY3RlZFxcblwmIzM0Oywgc2VjX25hbWUpO1xuJiM0MztcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2VjX2RhdGEtXHUwMDNlZF9zaXplICUgS01PRF9OQU1FX0xFTiAhPSAwKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O3NlYyAmIzM5OyVzJiMzOTs6IHNpemUgJXp1IHNob3VsZCBiZSBtdWx0aXBsZSBvZiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c2VjX25hbWUsIHNlY19kYXRhLVx1MDAzZWRfc2l6ZSwgS01PRF9OQU1FX0xFTik7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1vZHVsZV9jbnQgPSBzZWNfZGF0YS1cdTAwM2VkX3NpemUgLyBLTU9EX05BTUVfTEVOO1xuJiM0MztcdG9iai1cdTAwM2VrbW9kX2J0ZnMgPSBjYWxsb2MoMSwgc2l6ZW9mKCpvYmotXHUwMDNla21vZF9idGZzKSk7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNla21vZF9idGZzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YSA9IGNhbGxvYyhtb2R1bGVfY250LCBLTU9EX05BTUVfTEVOKTtcbiYjNDM7XHRpZiAoIW9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YSkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1x0bWVtY3B5KG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YSwgc2VjX2RhdGEtXHUwMDNlZF9idWYsIHNlY19kYXRhLVx1MDAzZWRfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlaGFzaG1hcCA9IGhhc2htYXBfX25ldyhtb2RfbmFtZV9oYXNoX2ZuLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1vZF9uYW1lX2VxdWFsX2ZuLCBOVUxMKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlaGFzaG1hcCkpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VoYXNobWFwKTtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1vZHVsZV9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWRhdGFbaV1bS01PRF9OQU1FX0xFTiAtIDFdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRcdGlmIChoYXNobWFwX19maW5kKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlaGFzaG1hcCxcbiYjNDM7XHRcdFx0XHQgIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YVtpXSwgTlVMTCkpIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBpZ25vcmVkIGR1cGxpY2F0ZSBtb2R1bGUgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHNlY19uYW1lLCBvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWRhdGFbaV0pO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVyciA9IGhhc2htYXBfX3NldChvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWhhc2htYXAsIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YVtpXSxcbiYjNDM7XHRcdFx0XHQgICAwLCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbnJfbmFtZXMmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0aGFzaG1hcF9fZnJlZShvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWhhc2htYXApO1xuJiM0MztcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YSk7XG4mIzQzO1x0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWttb2RfYnRmcyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50XG4gYnBmX29iamVjdF9fYWRkX3Byb2dyYW1zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIEVsZl9EYXRhICpzZWNfZGF0YSxcbiBcdFx0XHQgY29uc3QgY2hhciAqc2VjX25hbWUsIGludCBzZWNfaWR4KVxuQEAgLTQwMzQsNiAmIzQzOzQxMTUsMTAgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19lbGZfY29sbGVjdChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdFx0bWVtY3B5KG9iai1cdTAwM2VqdW1wdGFibGVzX2RhdGEsIGRhdGEtXHUwMDNlZF9idWYsIGRhdGEtXHUwMDNlZF9zaXplKTtcbiBcdFx0XHRcdG9iai1cdTAwM2VqdW1wdGFibGVzX2RhdGFfc3ogPSBkYXRhLVx1MDAzZWRfc2l6ZTtcbiBcdFx0XHRcdG9iai1cdTAwM2VlZmlsZS5qdW1wdGFibGVzX2RhdGFfc2huZHggPSBpZHg7XG4mIzQzO1x0XHRcdH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsIEtNT0RTX0JURlNfU0VDKSA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0ZXJyID0gYnBmX29iamVjdF9fY29sbGVjdF9rbW9kX2J0Zl9uYW1lcyhvYmosIGRhdGEsIG5hbWUpO1xuJiM0MztcdFx0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRwcl9pbmZvKFwmIzM0O2VsZjogc2tpcHBpbmcgdW5yZWNvZ25pemVkIGRhdGEgc2VjdGlvbiglZCkgJXNcXG5cJiMzNDssXG4gXHRcdFx0XHRcdGlkeCwgbmFtZSk7XG5AQCAtNTgwMyw2ICYjNDM7NTg4OCwxMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBpc19rbW9kX2J0Zl9uZWVkZWQoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBoYXNobWFwX2ZpbmQob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VoYXNobWFwLCAobG9uZyluYW1lLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4gXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XG5AQCAtNTg2Nyw2ICYjNDM7NTk1NywxMiBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKG9iai1cdTAwM2VrbW9kX2J0ZnMgXHUwMDI2XHUwMDI2IG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlaGFzaG1hcCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhaXNfa21vZF9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcbiYjNDM7XHRcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtNTg5MSw2ICYjNDM7NTk4NywxMCBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9jbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChvYmotXHUwMDNla21vZF9idGZzIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbnJfbmFtZXMgPT0gb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2Vucl9sb2FkZWQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTkwMzAsNiAmIzQzOzkxMzAsMTIgQEAgc3RhdGljIHZvaWQgYnBmX29iamVjdF9jbGVhbnVwX2J0ZihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0LyogY2xlYW4gdXAgdm1saW51eCBCVEYgKi9cbiBcdGJ0Zl9fZnJlZShvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuIFx0b2JqLVx1MDAzZWJ0Zl92bWxpbnV4ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9iai1cdTAwM2VrbW9kX2J0ZnMpIHtcbiYjNDM7XHRcdGhhc2htYXBfX2ZyZWUob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VoYXNobWFwKTtcbiYjNDM7XHRcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YSk7XG4mIzQzO1x0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNla21vZF9idGZzKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJwZl9vYmplY3RfcG9zdF9sb2FkX2NsZWFudXAoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDg3NWZjY2U2NjgxZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmNcbkBAIC0wLDAgJiM0MzsxLDUyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtrbW9kX2J0ZnMuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ttb2RfYnRmc19ub25leGlzdC5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a21vZF9idGZzX21peC5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19wYXNzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga21vZF9idGZzICprbW9kX2J0ZnNfc2tlbDtcbiYjNDM7XG4mIzQzO1x0a21vZF9idGZzX3NrZWwgPSBrbW9kX2J0ZnNfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoa21vZF9idGZzX3NrZWwsIFwmIzM0O2ttb2RfYnRmc19fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGttb2RfYnRmc19fZGVzdHJveShrbW9kX2J0ZnNfc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub25leGlzdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGttb2RfYnRmc19ub25leGlzdCAqa21vZF9idGZzX25vbmV4aXN0X3NrZWw7XG4mIzQzO1xuJiM0MztcdGttb2RfYnRmc19ub25leGlzdF9za2VsID0ga21vZF9idGZzX25vbmV4aXN0X19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0QVNTRVJUX05VTEwoa21vZF9idGZzX25vbmV4aXN0X3NrZWwsIFwmIzM0O2ttb2RfYnRmc19ub25leGlzdF9fb3Blbl9hbmRfbG9hZFwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19taXgodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrbW9kX2J0ZnNfbWl4ICprbW9kX2J0ZnNfbWl4X3NrZWw7XG4mIzQzO1xuJiM0MztcdGttb2RfYnRmc19taXhfc2tlbCA9IGttb2RfYnRmc19taXhfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoa21vZF9idGZzX21peF9za2VsLCBcJiMzNDtrbW9kX2J0ZnNfbWl4X19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0a21vZF9idGZzX21peF9fZGVzdHJveShrbW9kX2J0ZnNfbWl4X3NrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3Rfa21vZF9idGZzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWVudi5oYXNfdGVzdG1vZCkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7a21vZF9idGZzX3Bhc3NcJiMzNDspKVxuJiM0MztcdFx0a21vZF9idGZzX3Bhc3MoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7a21vZF9idGZzX25vbmV4aXN0XCYjMzQ7KSlcbiYjNDM7XHRcdGttb2RfYnRmc19ub25leGlzdCgpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtrbW9kX2J0ZnNfbWl4XCYjMzQ7KSlcbiYjNDM7XHRcdGttb2RfYnRmc19taXgoKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjhiOTg2YmMyZTlmZjdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuY1xuQEAgLTAsMCAmIzQzOzEsMTQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2ZleGl0L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFwmIzM0OylcbiYjNDM7aW50IHRlc3Rfa21vZF9idGZzKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyBcJiMzNDticGZfdGVzdG1vZFwmIzM0OyB9O1xuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX21peC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmc19taXguY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY0NDVjZjU2YWIxNjFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbWl4LmNcbkBAIC0wLDAgJiM0MzsxLDE1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZXhpdC9icGZfdGVzdG1vZF9sb29wX3Rlc3RcJiMzNDspXG4mIzQzO2ludCB0ZXN0X2ttb2RfYnRmc19taXgodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIG1peCBvZiBkdXBsaWNhdGVkIGFuZCB1bm5lZWRlZCBtb2R1bGVzICovXG4mIzQzO0RFRklORV9LTU9EX0JURlMoX25lZWRlZF9rbW9kcykgPSB7IFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7LCBcJiMzNDticGZfdGVzdG1vZFwmIzM0OywgXCYjMzQ7YnBmX3Rlc3Rfbm9fY2ZpXCYjMzQ7IH07XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE2MzgzNjFlNTczMjJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuY1xuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2ZleGl0L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFwmIzM0OylcbiYjNDM7aW50IHRlc3Rfa21vZF9idGZzX25vbmV4aXN0KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGlzIHNob3VsZCBmYWlsIHRvIGxvYWQsIGJlY2F1c2UgLmttb2RfYnRmcyBkb2VzIG5vdCBjb250YWluXG4mIzQzOyAqIHRoZSBuZWVkZWQgbW9kdWxlICYjMzk7YnBmX3Rlc3Rtb2QmIzM5Oy5cbiYjNDM7ICovXG4mIzQzO0RFRklORV9LTU9EX0JURlMoX25lZWRlZF9rbW9kcykgPSB7IFwmIzM0O21vZHVsZV9ub25leGlzdFwmIzM0OyB9O1xuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlcnNwYWNlIGxpYmJwZiBsaWJyYXJ5ICh0b29scy9saWIvYnBmKSBhbmQgYWRkcyBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZhYThmNzYwMWIwN2ZkYWEzZmM3NDQ2OTZhY2IyNTZiMDk5ODM1OTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwNDoxOTowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaCBiL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaAppbmRleCA5ZDE2MGI1YjljMGVlLi4xNzFlYTA1NWNkMzIzIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oCkBAIC0xODgsNiAmIzQzOzE4OCwyMCBAQCBlbnVtIGxpYmJwZl90cmlzdGF0ZSB7CiAJVFJJX01PRFVMRSA9IDIsCiB9OwogCiYjNDM7LyogSGVscGVyIHR5cGVkZWYgZm9yIGRlY2xhcmluZyBrZXJuZWwgbW9kdWxlIG5hbWVzIHRoYXQgbmVlZCBCVEYgbG9hZGluZy4KJiM0MzsgKgomIzQzOyAqIFVzYWdlOiBkZWZpbmUgYW4gYXJyYXkgaW4gdGhlICYjMzQ7Lmttb2RfYnRmcyYjMzQ7IEVMRiBzZWN0aW9uIHRvIHNwZWNpZnkKJiM0MzsgKiB3aGljaCBtb2R1bGVzIG5lZWQgQlRGIGxvYWRpbmc6CiYjNDM7ICoKJiM0MzsgKiAgIERFRklORV9LTU9EX0JURlMoX25lZWRlZF9rbW9kcyk9IHsgJiMzNDttb2R1bGUxJiMzNDssICYjMzQ7bW9kdWxlMiYjMzQ7LCAuLi4gfTsKJiM0MzsgKgomIzQzOyAqIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IEJURiBsb2FkaW5nIGFuZCBzcGVlZHMgdXAgdGhlIEJQRiBwcm9ncmFtCiYjNDM7ICogbG9hZCBwcm9jZXNzLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgS01PRF9OQU1FX0xFTiA2NAomIzQzOyNkZWZpbmUgREVGSU5FX0tNT0RfQlRGUyhuYW1lKSBcCiYjNDM7CVNFQygmIzM0Oy5rbW9kX2J0ZnMmIzM0OykgY2hhciBuYW1lW11bS01PRF9OQU1FX0xFTl0KJiM0MzsKICNkZWZpbmUgX19rY29uZmlnIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oJiMzNDsua2NvbmZpZyYjMzQ7KSkpCiAjZGVmaW5lIF9fa3N5bSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCYjMzQ7LmtzeW1zJiMzNDspKSkKICNkZWZpbmUgX19rcHRyX3VudHJ1c3RlZCBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoJiMzNDtrcHRyX3VudHJ1c3RlZCYjMzQ7KSkpCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwppbmRleCA1MTRlNGU5ZGFhODI1Li45ZmU4YTY1M2U4YjZiIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKQEAgLTU0OCw2ICYjNDM7NTQ4LDcgQEAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIHsKICNkZWZpbmUgU1RSVUNUX09QU19TRUMgJiMzNDsuc3RydWN0X29wcyYjMzQ7CiAjZGVmaW5lIFNUUlVDVF9PUFNfTElOS19TRUMgJiMzNDsuc3RydWN0X29wcy5saW5rJiMzNDsKICNkZWZpbmUgQVJFTkFfU0VDICYjMzQ7LmFkZHJfc3BhY2UuMSYjMzQ7CiYjNDM7I2RlZmluZSBLTU9EU19CVEZTX1NFQyAmIzM0Oy5rbW9kX2J0ZnMmIzM0OwogCiBlbnVtIGxpYmJwZl9tYXBfdHlwZSB7CiAJTElCQlBGX01BUF9VTlNQRUMsCkBAIC03MDMsNiAmIzQzOzcwNCw5IEBAIGVudW0gYnBmX29iamVjdF9zdGF0ZSB7CiAJT0JKX0xPQURFRCwKIH07CiAKJiM0MzsvKiBTaG91bGQgbWF0Y2ggdGhlIGRlZmluaXRpb24gaW4gYnBmX2hlbHBlcnMuaCAqLwomIzQzOyNkZWZpbmUgS01PRF9OQU1FX0xFTiA2NAomIzQzOwogc3RydWN0IGJwZl9vYmplY3QgewogCWNoYXIgbmFtZVtCUEZfT0JKX05BTUVfTEVOXTsKIAljaGFyIGxpY2Vuc2VbNjRdOwpAQCAtNzc5LDYgJiM0Mzs3ODMsMTQgQEAgc3RydWN0IGJwZl9vYmplY3QgewogCWNoYXIgKnRva2VuX3BhdGg7CiAJaW50IHRva2VuX2ZkOwogCiYjNDM7CS8qIGtlcm5lbCBtb2R1bGUgQlRGcyB0byBsb2FkLCBkZWNsYXJlZCBpbiAmIzM0Oy5rbW9kX2J0ZnMmIzM0OyBFTEYgc2VjdGlvbiAqLwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJY2hhciAoKmRhdGEpW0tNT0RfTkFNRV9MRU5dOwomIzQzOwkJc2l6ZV90IG5yX25hbWVzOwomIzQzOwkJc2l6ZV90IG5yX2xvYWRlZDsKJiM0MzsJCXN0cnVjdCBoYXNobWFwICpoYXNobWFwOwomIzQzOwl9ICprbW9kX2J0ZnM7CiYjNDM7CiAJY2hhciBwYXRoW107CiB9OwogCkBAIC05MDEsNiAmIzQzOzkxMyw3NSBAQCBicGZfb2JqZWN0X19pbml0X3Byb2coc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLAogCXJldHVybiAtRU5PTUVNOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCBtb2RfbmFtZV9oYXNoX2ZuKGxvbmcga2V5LCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3RyX2hhc2goKGNoYXIgKilrZXkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtb2RfbmFtZV9lcXVhbF9mbihsb25nIGtleTEsIGxvbmcga2V5Miwgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0cmNtcCgoY2hhciAqKWtleTEsIChjaGFyICopa2V5MikgPT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO2JwZl9vYmplY3RfX2NvbGxlY3Rfa21vZF9idGZfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgRWxmX0RhdGEgKnNlY19kYXRhLAomIzQzOwkJCQkgICBjb25zdCBjaGFyICpzZWNfbmFtZSkKJiM0Mzt7CiYjNDM7CWludCBtb2R1bGVfY250LCBpLCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAob2JqLSZndDtrbW9kX2J0ZnMpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBkdXBsaWNhdGUgc2VjdGlvbnMgZGV0ZWN0ZWRcbiYjMzQ7LCBzZWNfbmFtZSk7CiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2VjX2RhdGEtJmd0O2Rfc2l6ZSAlIEtNT0RfTkFNRV9MRU4gIT0gMCkgewomIzQzOwkJcHJfd2FybigmIzM0O3NlYyAmIzM5OyVzJiMzOTs6IHNpemUgJXp1IHNob3VsZCBiZSBtdWx0aXBsZSBvZiAlZFxuJiMzNDssCiYjNDM7CQkJc2VjX25hbWUsIHNlY19kYXRhLSZndDtkX3NpemUsIEtNT0RfTkFNRV9MRU4pOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbW9kdWxlX2NudCA9IHNlY19kYXRhLSZndDtkX3NpemUgLyBLTU9EX05BTUVfTEVOOwomIzQzOwlvYmotJmd0O2ttb2RfYnRmcyA9IGNhbGxvYygxLCBzaXplb2YoKm9iai0mZ3Q7a21vZF9idGZzKSk7CiYjNDM7CWlmICghb2JqLSZndDtrbW9kX2J0ZnMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJb2JqLSZndDtrbW9kX2J0ZnMtJmd0O2RhdGEgPSBjYWxsb2MobW9kdWxlX2NudCwgS01PRF9OQU1FX0xFTik7CiYjNDM7CWlmICghb2JqLSZndDtrbW9kX2J0ZnMtJmd0O2RhdGEpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsJbWVtY3B5KG9iai0mZ3Q7a21vZF9idGZzLSZndDtkYXRhLCBzZWNfZGF0YS0mZ3Q7ZF9idWYsIHNlY19kYXRhLSZndDtkX3NpemUpOwomIzQzOwomIzQzOwlvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7aGFzaG1hcCA9IGhhc2htYXBfX25ldyhtb2RfbmFtZV9oYXNoX2ZuLAomIzQzOwkJCQkJICAgICAgIG1vZF9uYW1lX2VxdWFsX2ZuLCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7aGFzaG1hcCkpIHsKJiM0MzsJCWVyciA9IFBUUl9FUlIob2JqLSZndDtrbW9kX2J0ZnMtJmd0O2hhc2htYXApOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBtb2R1bGVfY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJb2JqLSZndDtrbW9kX2J0ZnMtJmd0O2RhdGFbaV1bS01PRF9OQU1FX0xFTiAtIDFdID0gJiMzOTtcMCYjMzk7OwomIzQzOwkJaWYgKGhhc2htYXBfX2ZpbmQob2JqLSZndDtrbW9kX2J0ZnMtJmd0O2hhc2htYXAsCiYjNDM7CQkJCSAgb2JqLSZndDtrbW9kX2J0ZnMtJmd0O2RhdGFbaV0sIE5VTEwpKSB7CiYjNDM7CQkJcHJfd2FybigmIzM0O3NlYyAmIzM5OyVzJiMzOTs6IGlnbm9yZWQgZHVwbGljYXRlIG1vZHVsZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LAomIzQzOwkJCQlzZWNfbmFtZSwgb2JqLSZndDtrbW9kX2J0ZnMtJmd0O2RhdGFbaV0pOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJZXJyID0gaGFzaG1hcF9fc2V0KG9iai0mZ3Q7a21vZF9idGZzLSZndDtoYXNobWFwLCBvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7ZGF0YVtpXSwKJiM0MzsJCQkJICAgMCwgTlVMTCwgTlVMTCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCW9iai0mZ3Q7a21vZF9idGZzLSZndDtucl9uYW1lcyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX291dDoKJiM0MzsJaGFzaG1hcF9fZnJlZShvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7aGFzaG1hcCk7CiYjNDM7CXpmcmVlKCZhbXA7b2JqLSZndDtrbW9kX2J0ZnMtJmd0O2RhdGEpOwomIzQzOwl6ZnJlZSgmYW1wO29iai0mZ3Q7a21vZF9idGZzKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiBicGZfb2JqZWN0X19hZGRfcHJvZ3JhbXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgRWxmX0RhdGEgKnNlY19kYXRhLAogCQkJIGNvbnN0IGNoYXIgKnNlY19uYW1lLCBpbnQgc2VjX2lkeCkKQEAgLTQwMzQsNiAmIzQzOzQxMTUsMTAgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19lbGZfY29sbGVjdChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQkJCW1lbWNweShvYmotJmd0O2p1bXB0YWJsZXNfZGF0YSwgZGF0YS0mZ3Q7ZF9idWYsIGRhdGEtJmd0O2Rfc2l6ZSk7CiAJCQkJb2JqLSZndDtqdW1wdGFibGVzX2RhdGFfc3ogPSBkYXRhLSZndDtkX3NpemU7CiAJCQkJb2JqLSZndDtlZmlsZS5qdW1wdGFibGVzX2RhdGFfc2huZHggPSBpZHg7CiYjNDM7CQkJfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgS01PRFNfQlRGU19TRUMpID09IDApIHsKJiM0MzsJCQkJZXJyID0gYnBmX29iamVjdF9fY29sbGVjdF9rbW9kX2J0Zl9uYW1lcyhvYmosIGRhdGEsIG5hbWUpOwomIzQzOwkJCQlpZiAoZXJyKQomIzQzOwkJCQkJcmV0dXJuIGVycjsKIAkJCX0gZWxzZSB7CiAJCQkJcHJfaW5mbygmIzM0O2VsZjogc2tpcHBpbmcgdW5yZWNvZ25pemVkIGRhdGEgc2VjdGlvbiglZCkgJXNcbiYjMzQ7LAogCQkJCQlpZHgsIG5hbWUpOwpAQCAtNTgwMyw2ICYjNDM7NTg4OCwxMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaXNfa21vZF9idGZfbmVlZGVkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gaGFzaG1hcF9maW5kKG9iai0mZ3Q7a21vZF9idGZzLSZndDtoYXNobWFwLCAobG9uZyluYW1lLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87CkBAIC01ODY3LDYgJiM0Mzs1OTU3LDEyIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQkJY29udGludWU7CiAJCX0KIAomIzQzOwkJaWYgKG9iai0mZ3Q7a21vZF9idGZzICZhbXA7JmFtcDsgb2JqLSZndDtrbW9kX2J0ZnMtJmd0O2hhc2htYXAgJmFtcDsmYW1wOwomIzQzOwkJICAgICFpc19rbW9kX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkgewomIzQzOwkJCWNsb3NlKGZkKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJYnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotJmd0O2J0Zl92bWxpbnV4KTsKIAkJZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpOwogCQlpZiAoZXJyKSB7CkBAIC01ODkxLDYgJiM0Mzs1OTg3LDEwIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQkJYnJlYWs7CiAJCX0KIAkJb2JqLSZndDtidGZfbW9kdWxlX2NudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAob2JqLSZndDtrbW9kX2J0ZnMgJmFtcDsmYW1wOwomIzQzOwkJICAgIG9iai0mZ3Q7a21vZF9idGZzLSZndDtucl9uYW1lcyA9PSBvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bnJfbG9hZGVkKQomIzQzOwkJCWJyZWFrOwogCX0KIAogCWlmIChlcnIpIHsKQEAgLTkwMzAsNiAmIzQzOzkxMzAsMTIgQEAgc3RhdGljIHZvaWQgYnBmX29iamVjdF9jbGVhbnVwX2J0ZihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCS8qIGNsZWFuIHVwIHZtbGludXggQlRGICovCiAJYnRmX19mcmVlKG9iai0mZ3Q7YnRmX3ZtbGludXgpOwogCW9iai0mZ3Q7YnRmX3ZtbGludXggPSBOVUxMOwomIzQzOwomIzQzOwlpZiAob2JqLSZndDtrbW9kX2J0ZnMpIHsKJiM0MzsJCWhhc2htYXBfX2ZyZWUob2JqLSZndDtrbW9kX2J0ZnMtJmd0O2hhc2htYXApOwomIzQzOwkJemZyZWUoJmFtcDtvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7ZGF0YSk7CiYjNDM7CQl6ZnJlZSgmYW1wO29iai0mZ3Q7a21vZF9idGZzKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBicGZfb2JqZWN0X3Bvc3RfbG9hZF9jbGVhbnVwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ4NzVmY2NlNjY4MWQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuYwpAQCAtMCwwICYjNDM7MSw1MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2ttb2RfYnRmcy5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a21vZF9idGZzX25vbmV4aXN0LnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrbW9kX2J0ZnNfbWl4LnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga21vZF9idGZzX3Bhc3Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrbW9kX2J0ZnMgKmttb2RfYnRmc19za2VsOwomIzQzOwomIzQzOwlrbW9kX2J0ZnNfc2tlbCA9IGttb2RfYnRmc19fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoa21vZF9idGZzX3NrZWwsICYjMzQ7a21vZF9idGZzX19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlrbW9kX2J0ZnNfX2Rlc3Ryb3koa21vZF9idGZzX3NrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfbm9uZXhpc3Qodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrbW9kX2J0ZnNfbm9uZXhpc3QgKmttb2RfYnRmc19ub25leGlzdF9za2VsOwomIzQzOwomIzQzOwlrbW9kX2J0ZnNfbm9uZXhpc3Rfc2tlbCA9IGttb2RfYnRmc19ub25leGlzdF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlBU1NFUlRfTlVMTChrbW9kX2J0ZnNfbm9uZXhpc3Rfc2tlbCwgJiMzNDtrbW9kX2J0ZnNfbm9uZXhpc3RfX29wZW5fYW5kX2xvYWQmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19taXgodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrbW9kX2J0ZnNfbWl4ICprbW9kX2J0ZnNfbWl4X3NrZWw7CiYjNDM7CiYjNDM7CWttb2RfYnRmc19taXhfc2tlbCA9IGttb2RfYnRmc19taXhfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGttb2RfYnRmc19taXhfc2tlbCwgJiMzNDtrbW9kX2J0ZnNfbWl4X19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlrbW9kX2J0ZnNfbWl4X19kZXN0cm95KGttb2RfYnRmc19taXhfc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9rbW9kX2J0ZnModm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghZW52Lmhhc190ZXN0bW9kKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtrbW9kX2J0ZnNfcGFzcyYjMzQ7KSkKJiM0MzsJCWttb2RfYnRmc19wYXNzKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a21vZF9idGZzX25vbmV4aXN0JiMzNDspKQomIzQzOwkJa21vZF9idGZzX25vbmV4aXN0KCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a21vZF9idGZzX21peCYjMzQ7KSkKJiM0MzsJCWttb2RfYnRmc19taXgoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOGI5ODZiYzJlOWZmNwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuYwpAQCAtMCwwICYjNDM7MSwxNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7ZmV4aXQvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0JiMzNDspCiYjNDM7aW50IHRlc3Rfa21vZF9idGZzKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyAmIzM0O2JwZl90ZXN0bW9kJiMzNDsgfTsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX21peC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmc19taXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mNDQ1Y2Y1NmFiMTYxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmc19taXguYwpAQCAtMCwwICYjNDM7MSwxNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7ZmV4aXQvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0JiMzNDspCiYjNDM7aW50IHRlc3Rfa21vZF9idGZzX21peCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogbWl4IG9mIGR1cGxpY2F0ZWQgYW5kIHVubmVlZGVkIG1vZHVsZXMgKi8KJiM0MztERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyAmIzM0O2JwZl90ZXN0bW9kJiMzNDssICYjMzQ7YnBmX3Rlc3Rtb2QmIzM0OywgJiMzNDticGZfdGVzdF9ub19jZmkmIzM0OyB9OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xNjM4MzYxZTU3MzIyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmc19ub25leGlzdC5jCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsKJiM0MztTRUMoJiMzNDtmZXhpdC9icGZfdGVzdG1vZF9sb29wX3Rlc3QmIzM0OykKJiM0MztpbnQgdGVzdF9rbW9kX2J0ZnNfbm9uZXhpc3Qodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhpcyBzaG91bGQgZmFpbCB0byBsb2FkLCBiZWNhdXNlIC5rbW9kX2J0ZnMgZG9lcyBub3QgY29udGFpbgomIzQzOyAqIHRoZSBuZWVkZWQgbW9kdWxlICYjMzk7YnBmX3Rlc3Rtb2QmIzM5Oy4KJiM0MzsgKi8KJiM0MztERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyAmIzM0O21vZHVsZV9ub25leGlzdCYjMzQ7IH07CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTE2CgkJCQkJCQlvdXRwdXQ6IDY5CgkJCQkJCQl0aG91Z2h0czogNTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCBhbmQgYHRvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaGAsIHBsdXMgc29tZSBzZWxmdGVzdHMuIFNlZW1zIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcgZmVhdHVyZSB0byBsaWJicGYgcmVsYXRlZCB0byBsb2FkaW5nIEJURiBmb3Iga2VybmVsIG1vZHVsZXMgdmlhIGEgYC5rbW9kX2J0ZnNgIEVMRiBzZWN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdXNlcnNwYWNlLCBsaWJicGYgY2hhbmdlcy4gQnV0IEkgYWx3YXlzIGRvdWJsZS1jaGVjay4KCkxldCBtZSB2ZXJpZnkuLi4gb2theSwgSSBzZWUgdGhlIGRpZmYgc2hvd3MgY2hhbmdlcyBvbmx5IGluIGB0b29scy9saWIvYnBmL2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gU3BlY2lmaWNhbGx5LCBJIGFtIHNlZWluZyB1cGRhdGVzIHRvOiBgdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oYCwgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmcy5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbWl4LmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuY2AuIE5vIGtlcm5lbCBjb2RlIGNoYW5nZXMgaGVyZSBhdCBhbGwuIFdlIGFyZSBnb29kLgoKU2luY2UgYHRvb2xzL2AgaXMgdXNlcnNwYWNlIGNvZGUg4oCTIGBsaWJicGZgIGlzIGEgdXNlcnNwYWNlIGxpYnJhcnkg4oCTIHRoaXMgKmRlZmluaXRlbHkqIGRvZXNuJiMzOTt0IHJlcXVpcmUga2VybmVsIGZ1enppbmcuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGEgdG9vbCBsaWtlIHN5emthbGxlciB3b3VsZCBuZWVkIHRvIGV4YW1pbmUuIEV2ZW4gaWYgc3l6a2FsbGVyICpkaWQqIGZ1enogYGxpYmJwZmAgKHdoaWNoIGl0IGRvZXNuJiMzOTt0LCBpdCB1c2VzIHRoZSBzeXNjYWxsKSwgaXQmIzM5O3Mgc3RpbGwgYSB1c2Vyc3BhY2UgY2hhbmdlLgoKQWxyaWdodCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWdhaW4uLi4gTm9wZSwgbm90aGluZy4gT25seSBjaGFuZ2VzIGluIGB0b29scy9saWIvYnBmL2AgYW5kIHRoZSBgc2VsZnRlc3RzYC4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb21mb3J0YWJsZSBzYXlpbmcgYFdvcnRoRnV6emluZzogZmFsc2VgLiBUaGUgcGF0Y2ggaXMgc29sZWx5IHdpdGhpbiB0aGUgdXNlciBzcGFjZSBjb21wb25lbnRzIG9mIGBsaWJicGZgIGFuZCBkb2VzbiYjMzk7dCBhZmZlY3QgdGhlIGtlcm5lbCYjMzk7cyBmdW5jdGlvbmFsIGNvZGUuCgpJIHdpbGwgc2V0IHRoZSByZXN1bHRzLCBpbmRpY2F0aW5nIGBXb3J0aEZ1enppbmc6IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXJzcGFjZSBsaWJicGYgbGlicmFyeSAodG9vbHMvbGliL2JwZikgYW5kIGFkZHMgc2VsZnRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXJzcGFjZSBsaWJicGYgbGlicmFyeSAodG9vbHMvbGliL2JwZikgYW5kIGFkZHMgc2VsZnRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjE5OjEwLjc1Mjk5NjE5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDgxOTQ3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2Vyc3BhY2UgbGliYnBmIGxpYnJhcnkgKHRvb2xzL2xpYi9icGYpIGFuZCBhZGRzIHNlbGZ0ZXN0cy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoxOToxMC43NTMwMDI2ODlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDI2Njc5MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YWE4Zjc2MDFiMDdmZGFhM2ZjNzQ0Njk2YWNiMjU2YjA5OTgzNTkyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDA0OjE5OjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaCBiL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaFxcbmluZGV4IDlkMTYwYjViOWMwZWUuLjE3MWVhMDU1Y2QzMjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXFxuKysrIGIvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXFxuQEAgLTE4OCw2ICsxODgsMjAgQEAgZW51bSBsaWJicGZfdHJpc3RhdGUge1xcbiBcXHRUUklfTU9EVUxFID0gMixcXG4gfTtcXG4gXFxuKy8qIEhlbHBlciB0eXBlZGVmIGZvciBkZWNsYXJpbmcga2VybmVsIG1vZHVsZSBuYW1lcyB0aGF0IG5lZWQgQlRGIGxvYWRpbmcuXFxuKyAqXFxuKyAqIFVzYWdlOiBkZWZpbmUgYW4gYXJyYXkgaW4gdGhlIFxcXCIua21vZF9idGZzXFxcIiBFTEYgc2VjdGlvbiB0byBzcGVjaWZ5XFxuKyAqIHdoaWNoIG1vZHVsZXMgbmVlZCBCVEYgbG9hZGluZzpcXG4rICpcXG4rICogICBERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpPSB7IFxcXCJtb2R1bGUxXFxcIiwgXFxcIm1vZHVsZTJcXFwiLCAuLi4gfTtcXG4rICpcXG4rICogVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgQlRGIGxvYWRpbmcgYW5kIHNwZWVkcyB1cCB0aGUgQlBGIHByb2dyYW1cXG4rICogbG9hZCBwcm9jZXNzLlxcbisgKi9cXG4rI2RlZmluZSBLTU9EX05BTUVfTEVOIDY0XFxuKyNkZWZpbmUgREVGSU5FX0tNT0RfQlRGUyhuYW1lKSBcXFxcXFxuK1xcdFNFQyhcXFwiLmttb2RfYnRmc1xcXCIpIGNoYXIgbmFtZVtdW0tNT0RfTkFNRV9MRU5dXFxuK1xcbiAjZGVmaW5lIF9fa2NvbmZpZyBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFxcXCIua2NvbmZpZ1xcXCIpKSlcXG4gI2RlZmluZSBfX2tzeW0gX19hdHRyaWJ1dGVfXygoc2VjdGlvbihcXFwiLmtzeW1zXFxcIikpKVxcbiAjZGVmaW5lIF9fa3B0cl91bnRydXN0ZWQgX19hdHRyaWJ1dGVfXygoYnRmX3R5cGVfdGFnKFxcXCJrcHRyX3VudHJ1c3RlZFxcXCIpKSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5pbmRleCA1MTRlNGU5ZGFhODI1Li45ZmU4YTY1M2U4YjZiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuQEAgLTU0OCw2ICs1NDgsNyBAQCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMge1xcbiAjZGVmaW5lIFNUUlVDVF9PUFNfU0VDIFxcXCIuc3RydWN0X29wc1xcXCJcXG4gI2RlZmluZSBTVFJVQ1RfT1BTX0xJTktfU0VDIFxcXCIuc3RydWN0X29wcy5saW5rXFxcIlxcbiAjZGVmaW5lIEFSRU5BX1NFQyBcXFwiLmFkZHJfc3BhY2UuMVxcXCJcXG4rI2RlZmluZSBLTU9EU19CVEZTX1NFQyBcXFwiLmttb2RfYnRmc1xcXCJcXG4gXFxuIGVudW0gbGliYnBmX21hcF90eXBlIHtcXG4gXFx0TElCQlBGX01BUF9VTlNQRUMsXFxuQEAgLTcwMyw2ICs3MDQsOSBAQCBlbnVtIGJwZl9vYmplY3Rfc3RhdGUge1xcbiBcXHRPQkpfTE9BREVELFxcbiB9O1xcbiBcXG4rLyogU2hvdWxkIG1hdGNoIHRoZSBkZWZpbml0aW9uIGluIGJwZl9oZWxwZXJzLmggKi9cXG4rI2RlZmluZSBLTU9EX05BTUVfTEVOIDY0XFxuK1xcbiBzdHJ1Y3QgYnBmX29iamVjdCB7XFxuIFxcdGNoYXIgbmFtZVtCUEZfT0JKX05BTUVfTEVOXTtcXG4gXFx0Y2hhciBsaWNlbnNlWzY0XTtcXG5AQCAtNzc5LDYgKzc4MywxNCBAQCBzdHJ1Y3QgYnBmX29iamVjdCB7XFxuIFxcdGNoYXIgKnRva2VuX3BhdGg7XFxuIFxcdGludCB0b2tlbl9mZDtcXG4gXFxuK1xcdC8qIGtlcm5lbCBtb2R1bGUgQlRGcyB0byBsb2FkLCBkZWNsYXJlZCBpbiBcXFwiLmttb2RfYnRmc1xcXCIgRUxGIHNlY3Rpb24gKi9cXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0Y2hhciAoKmRhdGEpW0tNT0RfTkFNRV9MRU5dO1xcbitcXHRcXHRzaXplX3QgbnJfbmFtZXM7XFxuK1xcdFxcdHNpemVfdCBucl9sb2FkZWQ7XFxuK1xcdFxcdHN0cnVjdCBoYXNobWFwICpoYXNobWFwO1xcbitcXHR9ICprbW9kX2J0ZnM7XFxuK1xcbiBcXHRjaGFyIHBhdGhbXTtcXG4gfTtcXG4gXFxuQEAgLTkwMSw2ICs5MTMsNzUgQEAgYnBmX29iamVjdF9faW5pdF9wcm9nKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcXG4gXFx0cmV0dXJuIC1FTk9NRU07XFxuIH1cXG4gXFxuK3N0YXRpYyBzaXplX3QgbW9kX25hbWVfaGFzaF9mbihsb25nIGtleSwgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBzdHJfaGFzaCgoY2hhciAqKWtleSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG1vZF9uYW1lX2VxdWFsX2ZuKGxvbmcga2V5MSwgbG9uZyBrZXkyLCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIHN0cmNtcCgoY2hhciAqKWtleTEsIChjaGFyICopa2V5MikgPT0gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbiticGZfb2JqZWN0X19jb2xsZWN0X2ttb2RfYnRmX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIEVsZl9EYXRhICpzZWNfZGF0YSxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqc2VjX25hbWUpXFxuK3tcXG4rXFx0aW50IG1vZHVsZV9jbnQsIGksIGVyciA9IDA7XFxuK1xcbitcXHRpZiAob2JqLVxcdTAwM2VrbW9kX2J0ZnMpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwic2VjICclcyc6IGR1cGxpY2F0ZSBzZWN0aW9ucyBkZXRlY3RlZFxcXFxuXFxcIiwgc2VjX25hbWUpO1xcbitcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNlY19kYXRhLVxcdTAwM2VkX3NpemUgJSBLTU9EX05BTUVfTEVOICE9IDApIHtcXG4rXFx0XFx0cHJfd2FybihcXFwic2VjICclcyc6IHNpemUgJXp1IHNob3VsZCBiZSBtdWx0aXBsZSBvZiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0c2VjX25hbWUsIHNlY19kYXRhLVxcdTAwM2VkX3NpemUsIEtNT0RfTkFNRV9MRU4pO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0bW9kdWxlX2NudCA9IHNlY19kYXRhLVxcdTAwM2VkX3NpemUgLyBLTU9EX05BTUVfTEVOO1xcbitcXHRvYmotXFx1MDAzZWttb2RfYnRmcyA9IGNhbGxvYygxLCBzaXplb2YoKm9iai1cXHUwMDNla21vZF9idGZzKSk7XFxuK1xcdGlmICghb2JqLVxcdTAwM2VrbW9kX2J0ZnMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWRhdGEgPSBjYWxsb2MobW9kdWxlX2NudCwgS01PRF9OQU1FX0xFTik7XFxuK1xcdGlmICghb2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWRhdGEpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcdG1lbWNweShvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlZGF0YSwgc2VjX2RhdGEtXFx1MDAzZWRfYnVmLCBzZWNfZGF0YS1cXHUwMDNlZF9zaXplKTtcXG4rXFxuK1xcdG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VoYXNobWFwID0gaGFzaG1hcF9fbmV3KG1vZF9uYW1lX2hhc2hfZm4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBtb2RfbmFtZV9lcXVhbF9mbiwgTlVMTCk7XFxuK1xcdGlmIChJU19FUlIob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWhhc2htYXApKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWhhc2htYXApO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtb2R1bGVfY250OyBpKyspIHtcXG4rXFx0XFx0b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWRhdGFbaV1bS01PRF9OQU1FX0xFTiAtIDFdID0gJ1xcXFwwJztcXG4rXFx0XFx0aWYgKGhhc2htYXBfX2ZpbmQob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWhhc2htYXAsXFxuK1xcdFxcdFxcdFxcdCAgb2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWRhdGFbaV0sIE5VTEwpKSB7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInNlYyAnJXMnOiBpZ25vcmVkIGR1cGxpY2F0ZSBtb2R1bGUgJyVzJ1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0c2VjX25hbWUsIG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VkYXRhW2ldKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZXJyID0gaGFzaG1hcF9fc2V0KG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VoYXNobWFwLCBvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlZGF0YVtpXSxcXG4rXFx0XFx0XFx0XFx0ICAgMCwgTlVMTCwgTlVMTCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5yX25hbWVzKys7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfb3V0OlxcbitcXHRoYXNobWFwX19mcmVlKG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VoYXNobWFwKTtcXG4rXFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VkYXRhKTtcXG4rXFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNla21vZF9idGZzKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIGludFxcbiBicGZfb2JqZWN0X19hZGRfcHJvZ3JhbXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgRWxmX0RhdGEgKnNlY19kYXRhLFxcbiBcXHRcXHRcXHQgY29uc3QgY2hhciAqc2VjX25hbWUsIGludCBzZWNfaWR4KVxcbkBAIC00MDM0LDYgKzQxMTUsMTAgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19lbGZfY29sbGVjdChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRcXHRtZW1jcHkob2JqLVxcdTAwM2VqdW1wdGFibGVzX2RhdGEsIGRhdGEtXFx1MDAzZWRfYnVmLCBkYXRhLVxcdTAwM2VkX3NpemUpO1xcbiBcXHRcXHRcXHRcXHRvYmotXFx1MDAzZWp1bXB0YWJsZXNfZGF0YV9zeiA9IGRhdGEtXFx1MDAzZWRfc2l6ZTtcXG4gXFx0XFx0XFx0XFx0b2JqLVxcdTAwM2VlZmlsZS5qdW1wdGFibGVzX2RhdGFfc2huZHggPSBpZHg7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsIEtNT0RTX0JURlNfU0VDKSA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IGJwZl9vYmplY3RfX2NvbGxlY3Rfa21vZF9idGZfbmFtZXMob2JqLCBkYXRhLCBuYW1lKTtcXG4rXFx0XFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiZWxmOiBza2lwcGluZyB1bnJlY29nbml6ZWQgZGF0YSBzZWN0aW9uKCVkKSAlc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0aWR4LCBuYW1lKTtcXG5AQCAtNTgwMyw2ICs1ODg4LDExIEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBpc19rbW9kX2J0Zl9uZWVkZWQoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRyZXR1cm4gaGFzaG1hcF9maW5kKG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VoYXNobWFwLCAobG9uZyluYW1lLCBOVUxMKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9idGZfaW5mbyBpbmZvO1xcbkBAIC01ODY3LDYgKzU5NTcsMTIgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAob2JqLVxcdTAwM2VrbW9kX2J0ZnMgXFx1MDAyNlxcdTAwMjYgb2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWhhc2htYXAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFpc19rbW9kX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkge1xcbitcXHRcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai1cXHUwMDNlYnRmX3ZtbGludXgpO1xcbiBcXHRcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG5AQCAtNTg5MSw2ICs1OTg3LDEwIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XFxuK1xcbitcXHRcXHRpZiAob2JqLVxcdTAwM2VrbW9kX2J0ZnMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2Vucl9uYW1lcyA9PSBvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlbnJfbG9hZGVkKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGVycikge1xcbkBAIC05MDMwLDYgKzkxMzAsMTIgQEAgc3RhdGljIHZvaWQgYnBmX29iamVjdF9jbGVhbnVwX2J0ZihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHQvKiBjbGVhbiB1cCB2bWxpbnV4IEJURiAqL1xcbiBcXHRidGZfX2ZyZWUob2JqLVxcdTAwM2VidGZfdm1saW51eCk7XFxuIFxcdG9iai1cXHUwMDNlYnRmX3ZtbGludXggPSBOVUxMO1xcbitcXG4rXFx0aWYgKG9iai1cXHUwMDNla21vZF9idGZzKSB7XFxuK1xcdFxcdGhhc2htYXBfX2ZyZWUob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWhhc2htYXApO1xcbitcXHRcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWRhdGEpO1xcbitcXHRcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VrbW9kX2J0ZnMpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGJwZl9vYmplY3RfcG9zdF9sb2FkX2NsZWFudXAoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDg3NWZjY2U2NjgxZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuY1xcbkBAIC0wLDAgKzEsNTIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImttb2RfYnRmcy5za2VsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrbW9kX2J0ZnNfbm9uZXhpc3Quc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia21vZF9idGZzX21peC5za2VsLmhcXFwiXFxuK1xcbitzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfcGFzcyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbW9kX2J0ZnMgKmttb2RfYnRmc19za2VsO1xcbitcXG4rXFx0a21vZF9idGZzX3NrZWwgPSBrbW9kX2J0ZnNfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGttb2RfYnRmc19za2VsLCBcXFwia21vZF9idGZzX19vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGttb2RfYnRmc19fZGVzdHJveShrbW9kX2J0ZnNfc2tlbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub25leGlzdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbW9kX2J0ZnNfbm9uZXhpc3QgKmttb2RfYnRmc19ub25leGlzdF9za2VsO1xcbitcXG4rXFx0a21vZF9idGZzX25vbmV4aXN0X3NrZWwgPSBrbW9kX2J0ZnNfbm9uZXhpc3RfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0QVNTRVJUX05VTEwoa21vZF9idGZzX25vbmV4aXN0X3NrZWwsIFxcXCJrbW9kX2J0ZnNfbm9uZXhpc3RfX29wZW5fYW5kX2xvYWRcXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga21vZF9idGZzX21peCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbW9kX2J0ZnNfbWl4ICprbW9kX2J0ZnNfbWl4X3NrZWw7XFxuK1xcbitcXHRrbW9kX2J0ZnNfbWl4X3NrZWwgPSBrbW9kX2J0ZnNfbWl4X19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihrbW9kX2J0ZnNfbWl4X3NrZWwsIFxcXCJrbW9kX2J0ZnNfbWl4X19vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGttb2RfYnRmc19taXhfX2Rlc3Ryb3koa21vZF9idGZzX21peF9za2VsKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2ttb2RfYnRmcyh2b2lkKVxcbit7XFxuK1xcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwia21vZF9idGZzX3Bhc3NcXFwiKSlcXG4rXFx0XFx0a21vZF9idGZzX3Bhc3MoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJrbW9kX2J0ZnNfbm9uZXhpc3RcXFwiKSlcXG4rXFx0XFx0a21vZF9idGZzX25vbmV4aXN0KCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwia21vZF9idGZzX21peFxcXCIpKVxcbitcXHRcXHRrbW9kX2J0ZnNfbWl4KCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi44Yjk4NmJjMmU5ZmY3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuY1xcbkBAIC0wLDAgKzEsMTQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuK1NFQyhcXFwiZmV4aXQvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XFxcIilcXG4raW50IHRlc3Rfa21vZF9idGZzKHZvaWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rREVGSU5FX0tNT0RfQlRGUyhfbmVlZGVkX2ttb2RzKSA9IHsgXFxcImJwZl90ZXN0bW9kXFxcIiB9O1xcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbWl4LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX21peC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNDQ1Y2Y1NmFiMTYxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbWl4LmNcXG5AQCAtMCwwICsxLDE1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuK1xcbitTRUMoXFxcImZleGl0L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFxcXCIpXFxuK2ludCB0ZXN0X2ttb2RfYnRmc19taXgodm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBtaXggb2YgZHVwbGljYXRlZCBhbmQgdW5uZWVkZWQgbW9kdWxlcyAqL1xcbitERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyBcXFwiYnBmX3Rlc3Rtb2RcXFwiLCBcXFwiYnBmX3Rlc3Rtb2RcXFwiLCBcXFwiYnBmX3Rlc3Rfbm9fY2ZpXFxcIiB9O1xcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTYzODM2MWU1NzMyMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX25vbmV4aXN0LmNcXG5AQCAtMCwwICsxLDE4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuK1xcbitTRUMoXFxcImZleGl0L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFxcXCIpXFxuK2ludCB0ZXN0X2ttb2RfYnRmc19ub25leGlzdCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoaXMgc2hvdWxkIGZhaWwgdG8gbG9hZCwgYmVjYXVzZSAua21vZF9idGZzIGRvZXMgbm90IGNvbnRhaW5cXG4rICogdGhlIG5lZWRlZCBtb2R1bGUgJ2JwZl90ZXN0bW9kJy5cXG4rICovXFxuK0RFRklORV9LTU9EX0JURlMoX25lZWRlZF9rbW9kcykgPSB7IFxcXCJtb2R1bGVfbm9uZXhpc3RcXFwiIH07XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MTk6MTIuMTU2NTcyMzM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzE0NDU5MjkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlcnNwYWNlIGxpYmJwZiBsaWJyYXJ5ICh0b29scy9saWIvYnBmKSBhbmQgYWRkcyBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmFhOGY3NjAxYjA3ZmRhYTNmYzc0NDY5NmFjYjI1NmIwOTk4MzU5MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA0OjE5OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oIGIvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXG5pbmRleCA5ZDE2MGI1YjljMGVlLi4xNzFlYTA1NWNkMzIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXG4rKysgYi90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmhcbkBAIC0xODgsNiArMTg4LDIwIEBAIGVudW0gbGliYnBmX3RyaXN0YXRlIHtcbiBcdFRSSV9NT0RVTEUgPSAyLFxuIH07XG4gXG4rLyogSGVscGVyIHR5cGVkZWYgZm9yIGRlY2xhcmluZyBrZXJuZWwgbW9kdWxlIG5hbWVzIHRoYXQgbmVlZCBCVEYgbG9hZGluZy5cbisgKlxuKyAqIFVzYWdlOiBkZWZpbmUgYW4gYXJyYXkgaW4gdGhlIFwiLmttb2RfYnRmc1wiIEVMRiBzZWN0aW9uIHRvIHNwZWNpZnlcbisgKiB3aGljaCBtb2R1bGVzIG5lZWQgQlRGIGxvYWRpbmc6XG4rICpcbisgKiAgIERFRklORV9LTU9EX0JURlMoX25lZWRlZF9rbW9kcyk9IHsgXCJtb2R1bGUxXCIsIFwibW9kdWxlMlwiLCAuLi4gfTtcbisgKlxuKyAqIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IEJURiBsb2FkaW5nIGFuZCBzcGVlZHMgdXAgdGhlIEJQRiBwcm9ncmFtXG4rICogbG9hZCBwcm9jZXNzLlxuKyAqL1xuKyNkZWZpbmUgS01PRF9OQU1FX0xFTiA2NFxuKyNkZWZpbmUgREVGSU5FX0tNT0RfQlRGUyhuYW1lKSBcXFxuK1x0U0VDKFwiLmttb2RfYnRmc1wiKSBjaGFyIG5hbWVbXVtLTU9EX05BTUVfTEVOXVxuK1xuICNkZWZpbmUgX19rY29uZmlnIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oXCIua2NvbmZpZ1wiKSkpXG4gI2RlZmluZSBfX2tzeW0gX19hdHRyaWJ1dGVfXygoc2VjdGlvbihcIi5rc3ltc1wiKSkpXG4gI2RlZmluZSBfX2twdHJfdW50cnVzdGVkIF9fYXR0cmlidXRlX18oKGJ0Zl90eXBlX3RhZyhcImtwdHJfdW50cnVzdGVkXCIpKSlcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggNTE0ZTRlOWRhYTgyNS4uOWZlOGE2NTNlOGI2YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC01NDgsNiArNTQ4LDcgQEAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIHtcbiAjZGVmaW5lIFNUUlVDVF9PUFNfU0VDIFwiLnN0cnVjdF9vcHNcIlxuICNkZWZpbmUgU1RSVUNUX09QU19MSU5LX1NFQyBcIi5zdHJ1Y3Rfb3BzLmxpbmtcIlxuICNkZWZpbmUgQVJFTkFfU0VDIFwiLmFkZHJfc3BhY2UuMVwiXG4rI2RlZmluZSBLTU9EU19CVEZTX1NFQyBcIi5rbW9kX2J0ZnNcIlxuIFxuIGVudW0gbGliYnBmX21hcF90eXBlIHtcbiBcdExJQkJQRl9NQVBfVU5TUEVDLFxuQEAgLTcwMyw2ICs3MDQsOSBAQCBlbnVtIGJwZl9vYmplY3Rfc3RhdGUge1xuIFx0T0JKX0xPQURFRCxcbiB9O1xuIFxuKy8qIFNob3VsZCBtYXRjaCB0aGUgZGVmaW5pdGlvbiBpbiBicGZfaGVscGVycy5oICovXG4rI2RlZmluZSBLTU9EX05BTUVfTEVOIDY0XG4rXG4gc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Y2hhciBuYW1lW0JQRl9PQkpfTkFNRV9MRU5dO1xuIFx0Y2hhciBsaWNlbnNlWzY0XTtcbkBAIC03NzksNiArNzgzLDE0IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcbiBcdGNoYXIgKnRva2VuX3BhdGg7XG4gXHRpbnQgdG9rZW5fZmQ7XG4gXG4rXHQvKiBrZXJuZWwgbW9kdWxlIEJURnMgdG8gbG9hZCwgZGVjbGFyZWQgaW4gXCIua21vZF9idGZzXCIgRUxGIHNlY3Rpb24gKi9cbitcdHN0cnVjdCB7XG4rXHRcdGNoYXIgKCpkYXRhKVtLTU9EX05BTUVfTEVOXTtcbitcdFx0c2l6ZV90IG5yX25hbWVzO1xuK1x0XHRzaXplX3QgbnJfbG9hZGVkO1xuK1x0XHRzdHJ1Y3QgaGFzaG1hcCAqaGFzaG1hcDtcbitcdH0gKmttb2RfYnRmcztcbitcbiBcdGNoYXIgcGF0aFtdO1xuIH07XG4gXG5AQCAtOTAxLDYgKzkxMyw3NSBAQCBicGZfb2JqZWN0X19pbml0X3Byb2coc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgbW9kX25hbWVfaGFzaF9mbihsb25nIGtleSwgdm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiBzdHJfaGFzaCgoY2hhciAqKWtleSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIG1vZF9uYW1lX2VxdWFsX2ZuKGxvbmcga2V5MSwgbG9uZyBrZXkyLCB2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIHN0cmNtcCgoY2hhciAqKWtleTEsIChjaGFyICopa2V5MikgPT0gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK2JwZl9vYmplY3RfX2NvbGxlY3Rfa21vZF9idGZfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgRWxmX0RhdGEgKnNlY19kYXRhLFxuK1x0XHRcdFx0ICAgY29uc3QgY2hhciAqc2VjX25hbWUpXG4re1xuK1x0aW50IG1vZHVsZV9jbnQsIGksIGVyciA9IDA7XG4rXG4rXHRpZiAob2JqLVx1MDAzZWttb2RfYnRmcykge1xuK1x0XHRwcl93YXJuKFwic2VjICclcyc6IGR1cGxpY2F0ZSBzZWN0aW9ucyBkZXRlY3RlZFxcblwiLCBzZWNfbmFtZSk7XG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1x0fVxuK1xuK1x0aWYgKHNlY19kYXRhLVx1MDAzZWRfc2l6ZSAlIEtNT0RfTkFNRV9MRU4gIT0gMCkge1xuK1x0XHRwcl93YXJuKFwic2VjICclcyc6IHNpemUgJXp1IHNob3VsZCBiZSBtdWx0aXBsZSBvZiAlZFxcblwiLFxuK1x0XHRcdHNlY19uYW1lLCBzZWNfZGF0YS1cdTAwM2VkX3NpemUsIEtNT0RfTkFNRV9MRU4pO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdG1vZHVsZV9jbnQgPSBzZWNfZGF0YS1cdTAwM2VkX3NpemUgLyBLTU9EX05BTUVfTEVOO1xuK1x0b2JqLVx1MDAzZWttb2RfYnRmcyA9IGNhbGxvYygxLCBzaXplb2YoKm9iai1cdTAwM2VrbW9kX2J0ZnMpKTtcbitcdGlmICghb2JqLVx1MDAzZWttb2RfYnRmcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWRhdGEgPSBjYWxsb2MobW9kdWxlX2NudCwgS01PRF9OQU1FX0xFTik7XG4rXHRpZiAoIW9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YSkge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXHRtZW1jcHkob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VkYXRhLCBzZWNfZGF0YS1cdTAwM2VkX2J1Ziwgc2VjX2RhdGEtXHUwMDNlZF9zaXplKTtcbitcbitcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlaGFzaG1hcCA9IGhhc2htYXBfX25ldyhtb2RfbmFtZV9oYXNoX2ZuLFxuK1x0XHRcdFx0XHQgICAgICAgbW9kX25hbWVfZXF1YWxfZm4sIE5VTEwpO1xuK1x0aWYgKElTX0VSUihvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWhhc2htYXApKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VoYXNobWFwKTtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbW9kdWxlX2NudDsgaSsrKSB7XG4rXHRcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YVtpXVtLTU9EX05BTUVfTEVOIC0gMV0gPSAnXFwwJztcbitcdFx0aWYgKGhhc2htYXBfX2ZpbmQob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VoYXNobWFwLFxuK1x0XHRcdFx0ICBvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWRhdGFbaV0sIE5VTEwpKSB7XG4rXHRcdFx0cHJfd2FybihcInNlYyAnJXMnOiBpZ25vcmVkIGR1cGxpY2F0ZSBtb2R1bGUgJyVzJ1xcblwiLFxuK1x0XHRcdFx0c2VjX25hbWUsIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YVtpXSk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0ZXJyID0gaGFzaG1hcF9fc2V0KG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlaGFzaG1hcCwgb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VkYXRhW2ldLFxuK1x0XHRcdFx0ICAgMCwgTlVMTCwgTlVMTCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5yX25hbWVzKys7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitlcnJfb3V0OlxuK1x0aGFzaG1hcF9fZnJlZShvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWhhc2htYXApO1xuK1x0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VkYXRhKTtcbitcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VrbW9kX2J0ZnMpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RhdGljIGludFxuIGJwZl9vYmplY3RfX2FkZF9wcm9ncmFtcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBFbGZfRGF0YSAqc2VjX2RhdGEsXG4gXHRcdFx0IGNvbnN0IGNoYXIgKnNlY19uYW1lLCBpbnQgc2VjX2lkeClcbkBAIC00MDM0LDYgKzQxMTUsMTAgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19lbGZfY29sbGVjdChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdFx0bWVtY3B5KG9iai1cdTAwM2VqdW1wdGFibGVzX2RhdGEsIGRhdGEtXHUwMDNlZF9idWYsIGRhdGEtXHUwMDNlZF9zaXplKTtcbiBcdFx0XHRcdG9iai1cdTAwM2VqdW1wdGFibGVzX2RhdGFfc3ogPSBkYXRhLVx1MDAzZWRfc2l6ZTtcbiBcdFx0XHRcdG9iai1cdTAwM2VlZmlsZS5qdW1wdGFibGVzX2RhdGFfc2huZHggPSBpZHg7XG4rXHRcdFx0fSBlbHNlIGlmIChzdHJjbXAobmFtZSwgS01PRFNfQlRGU19TRUMpID09IDApIHtcbitcdFx0XHRcdGVyciA9IGJwZl9vYmplY3RfX2NvbGxlY3Rfa21vZF9idGZfbmFtZXMob2JqLCBkYXRhLCBuYW1lKTtcbitcdFx0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHByX2luZm8oXCJlbGY6IHNraXBwaW5nIHVucmVjb2duaXplZCBkYXRhIHNlY3Rpb24oJWQpICVzXFxuXCIsXG4gXHRcdFx0XHRcdGlkeCwgbmFtZSk7XG5AQCAtNTgwMyw2ICs1ODg4LDExIEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGJvb2wgaXNfa21vZF9idGZfbmVlZGVkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0cmV0dXJuIGhhc2htYXBfZmluZChvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWhhc2htYXAsIChsb25nKW5hbWUsIE5VTEwpO1xuK31cbitcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4gXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XG5AQCAtNTg2Nyw2ICs1OTU3LDEyIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdGlmIChvYmotXHUwMDNla21vZF9idGZzIFx1MDAyNlx1MDAyNiBvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWhhc2htYXAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhaXNfa21vZF9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcbitcdFx0XHRjbG9zZShmZCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0YnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuIFx0XHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XG4gXHRcdGlmIChlcnIpIHtcbkBAIC01ODkxLDYgKzU5ODcsMTAgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XG4rXG4rXHRcdGlmIChvYmotXHUwMDNla21vZF9idGZzIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2Vucl9uYW1lcyA9PSBvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5yX2xvYWRlZClcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbiBcdGlmIChlcnIpIHtcbkBAIC05MDMwLDYgKzkxMzAsMTIgQEAgc3RhdGljIHZvaWQgYnBmX29iamVjdF9jbGVhbnVwX2J0ZihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0LyogY2xlYW4gdXAgdm1saW51eCBCVEYgKi9cbiBcdGJ0Zl9fZnJlZShvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuIFx0b2JqLVx1MDAzZWJ0Zl92bWxpbnV4ID0gTlVMTDtcbitcbitcdGlmIChvYmotXHUwMDNla21vZF9idGZzKSB7XG4rXHRcdGhhc2htYXBfX2ZyZWUob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VoYXNobWFwKTtcbitcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VkYXRhKTtcbitcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWttb2RfYnRmcyk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJwZl9vYmplY3RfcG9zdF9sb2FkX2NsZWFudXAoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDg3NWZjY2U2NjgxZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmNcbkBAIC0wLDAgKzEsNTIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFwia21vZF9idGZzLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJrbW9kX2J0ZnNfbm9uZXhpc3Quc2tlbC5oXCJcbisjaW5jbHVkZSBcImttb2RfYnRmc19taXguc2tlbC5oXCJcbitcbitzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfcGFzcyh2b2lkKVxuK3tcbitcdHN0cnVjdCBrbW9kX2J0ZnMgKmttb2RfYnRmc19za2VsO1xuK1xuK1x0a21vZF9idGZzX3NrZWwgPSBrbW9kX2J0ZnNfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihrbW9kX2J0ZnNfc2tlbCwgXCJrbW9kX2J0ZnNfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGttb2RfYnRmc19fZGVzdHJveShrbW9kX2J0ZnNfc2tlbCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub25leGlzdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBrbW9kX2J0ZnNfbm9uZXhpc3QgKmttb2RfYnRmc19ub25leGlzdF9za2VsO1xuK1xuK1x0a21vZF9idGZzX25vbmV4aXN0X3NrZWwgPSBrbW9kX2J0ZnNfbm9uZXhpc3RfX29wZW5fYW5kX2xvYWQoKTtcbitcdEFTU0VSVF9OVUxMKGttb2RfYnRmc19ub25leGlzdF9za2VsLCBcImttb2RfYnRmc19ub25leGlzdF9fb3Blbl9hbmRfbG9hZFwiKTtcbit9XG4rXG4rc3RhdGljIHZvaWQga21vZF9idGZzX21peCh2b2lkKVxuK3tcbitcdHN0cnVjdCBrbW9kX2J0ZnNfbWl4ICprbW9kX2J0ZnNfbWl4X3NrZWw7XG4rXG4rXHRrbW9kX2J0ZnNfbWl4X3NrZWwgPSBrbW9kX2J0ZnNfbWl4X19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoa21vZF9idGZzX21peF9za2VsLCBcImttb2RfYnRmc19taXhfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGttb2RfYnRmc19taXhfX2Rlc3Ryb3koa21vZF9idGZzX21peF9za2VsKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2ttb2RfYnRmcyh2b2lkKVxuK3tcbitcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJrbW9kX2J0ZnNfcGFzc1wiKSlcbitcdFx0a21vZF9idGZzX3Bhc3MoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia21vZF9idGZzX25vbmV4aXN0XCIpKVxuK1x0XHRrbW9kX2J0ZnNfbm9uZXhpc3QoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia21vZF9idGZzX21peFwiKSlcbitcdFx0a21vZF9idGZzX21peCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44Yjk4NmJjMmU5ZmY3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmNcbkBAIC0wLDAgKzEsMTQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rXG4rU0VDKFwiZmV4aXQvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCIpXG4raW50IHRlc3Rfa21vZF9idGZzKHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rREVGSU5FX0tNT0RfQlRGUyhfbmVlZGVkX2ttb2RzKSA9IHsgXCJicGZfdGVzdG1vZFwiIH07XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbWl4LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX21peC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjQ0NWNmNTZhYjE2MVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmc19taXguY1xuQEAgLTAsMCArMSwxNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbitTRUMoXCJmZXhpdC9icGZfdGVzdG1vZF9sb29wX3Rlc3RcIilcbitpbnQgdGVzdF9rbW9kX2J0ZnNfbWl4KHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogbWl4IG9mIGR1cGxpY2F0ZWQgYW5kIHVubmVlZGVkIG1vZHVsZXMgKi9cbitERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyBcImJwZl90ZXN0bW9kXCIsIFwiYnBmX3Rlc3Rtb2RcIiwgXCJicGZfdGVzdF9ub19jZmlcIiB9O1xuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX25vbmV4aXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX25vbmV4aXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNjM4MzYxZTU3MzIyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX25vbmV4aXN0LmNcbkBAIC0wLDAgKzEsMTggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rXG4rU0VDKFwiZmV4aXQvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCIpXG4raW50IHRlc3Rfa21vZF9idGZzX25vbmV4aXN0KHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBUaGlzIHNob3VsZCBmYWlsIHRvIGxvYWQsIGJlY2F1c2UgLmttb2RfYnRmcyBkb2VzIG5vdCBjb250YWluXG4rICogdGhlIG5lZWRlZCBtb2R1bGUgJ2JwZl90ZXN0bW9kJy5cbisgKi9cbitERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyBcIm1vZHVsZV9ub25leGlzdFwiIH07XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MTk6MTIuMTU2NTc0MjI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0NDUzNDc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCBhbmQgYHRvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaGAsIHBsdXMgc29tZSBzZWxmdGVzdHMuIFNlZW1zIGxpa2UgaXQncyBpbnRyb2R1Y2luZyBhIG5ldyBmZWF0dXJlIHRvIGxpYmJwZiByZWxhdGVkIHRvIGxvYWRpbmcgQlRGIGZvciBrZXJuZWwgbW9kdWxlcyB2aWEgYSBgLmttb2RfYnRmc2AgRUxGIHNlY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB1c2Vyc3BhY2UsIGxpYmJwZiBjaGFuZ2VzLiBCdXQgSSBhbHdheXMgZG91YmxlLWNoZWNrLlxuXG5MZXQgbWUgdmVyaWZ5Li4uIG9rYXksIEkgc2VlIHRoZSBkaWZmIHNob3dzIGNoYW5nZXMgb25seSBpbiBgdG9vbHMvbGliL2JwZi9gIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIFNwZWNpZmljYWxseSwgSSBhbSBzZWVpbmcgdXBkYXRlcyB0bzogYHRvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaGAsIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX21peC5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX25vbmV4aXN0LmNgLiBObyBrZXJuZWwgY29kZSBjaGFuZ2VzIGhlcmUgYXQgYWxsLiBXZSBhcmUgZ29vZC5cblxuU2luY2UgYHRvb2xzL2AgaXMgdXNlcnNwYWNlIGNvZGUg4oCTIGBsaWJicGZgIGlzIGEgdXNlcnNwYWNlIGxpYnJhcnkg4oCTIHRoaXMgKmRlZmluaXRlbHkqIGRvZXNuJ3QgcmVxdWlyZSBrZXJuZWwgZnV6emluZy4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCBhIHRvb2wgbGlrZSBzeXprYWxsZXIgd291bGQgbmVlZCB0byBleGFtaW5lLiBFdmVuIGlmIHN5emthbGxlciAqZGlkKiBmdXp6IGBsaWJicGZgICh3aGljaCBpdCBkb2Vzbid0LCBpdCB1c2VzIHRoZSBzeXNjYWxsKSwgaXQncyBzdGlsbCBhIHVzZXJzcGFjZSBjaGFuZ2UuXG5cbkFscmlnaHQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBkb3VibGUtY2hlY2sgYWdhaW4uLi4gTm9wZSwgbm90aGluZy4gT25seSBjaGFuZ2VzIGluIGB0b29scy9saWIvYnBmL2AgYW5kIHRoZSBgc2VsZnRlc3RzYC5cblxuVGhlcmVmb3JlLCBJJ20gY29tZm9ydGFibGUgc2F5aW5nIGBXb3J0aEZ1enppbmc6IGZhbHNlYC4gVGhlIHBhdGNoIGlzIHNvbGVseSB3aXRoaW4gdGhlIHVzZXIgc3BhY2UgY29tcG9uZW50cyBvZiBgbGliYnBmYCBhbmQgZG9lc24ndCBhZmZlY3QgdGhlIGtlcm5lbCdzIGZ1bmN0aW9uYWwgY29kZS5cblxuSSB3aWxsIHNldCB0aGUgcmVzdWx0cywgaW5kaWNhdGluZyBgV29ydGhGdXp6aW5nOiBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MTYsIk91dHB1dFRva2VucyI6NjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoxOToxOS4zMDExMTI2NDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXJzcGFjZSBsaWJicGYgbGlicmFyeSAodG9vbHMvbGliL2JwZikgYW5kIGFkZHMgc2VsZnRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXJzcGFjZSBsaWJicGYgbGlicmFyeSAodG9vbHMvbGliL2JwZikgYW5kIGFkZHMgc2VsZnRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjE5OjE5LjMwMTE2ODA3NloiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowj9wkk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 03:40:16 +0000 UTC FinishedAt: 2026-08-13 04:19:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA0OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlcnNwYWNlIGxpYmJwZiBsaWJyYXJ5ICh0b29scy9saWIvYnBmKSBhbmQgYWRkcyBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZhYThmNzYwMWIwN2ZkYWEzZmM3NDQ2OTZhY2IyNTZiMDk5ODM1OTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNDoxOTowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmggYi90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmhcbmluZGV4IDlkMTYwYjViOWMwZWUuLjE3MWVhMDU1Y2QzMjMgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaFxuQEAgLTE4OCw2ICYjNDM7MTg4LDIwIEBAIGVudW0gbGliYnBmX3RyaXN0YXRlIHtcbiBcdFRSSV9NT0RVTEUgPSAyLFxuIH07XG4gXG4mIzQzOy8qIEhlbHBlciB0eXBlZGVmIGZvciBkZWNsYXJpbmcga2VybmVsIG1vZHVsZSBuYW1lcyB0aGF0IG5lZWQgQlRGIGxvYWRpbmcuXG4mIzQzOyAqXG4mIzQzOyAqIFVzYWdlOiBkZWZpbmUgYW4gYXJyYXkgaW4gdGhlIFwmIzM0Oy5rbW9kX2J0ZnNcJiMzNDsgRUxGIHNlY3Rpb24gdG8gc3BlY2lmeVxuJiM0MzsgKiB3aGljaCBtb2R1bGVzIG5lZWQgQlRGIGxvYWRpbmc6XG4mIzQzOyAqXG4mIzQzOyAqICAgREVGSU5FX0tNT0RfQlRGUyhfbmVlZGVkX2ttb2RzKT0geyBcJiMzNDttb2R1bGUxXCYjMzQ7LCBcJiMzNDttb2R1bGUyXCYjMzQ7LCAuLi4gfTtcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgQlRGIGxvYWRpbmcgYW5kIHNwZWVkcyB1cCB0aGUgQlBGIHByb2dyYW1cbiYjNDM7ICogbG9hZCBwcm9jZXNzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBLTU9EX05BTUVfTEVOIDY0XG4mIzQzOyNkZWZpbmUgREVGSU5FX0tNT0RfQlRGUyhuYW1lKSBcXFxuJiM0MztcdFNFQyhcJiMzNDsua21vZF9idGZzXCYjMzQ7KSBjaGFyIG5hbWVbXVtLTU9EX05BTUVfTEVOXVxuJiM0MztcbiAjZGVmaW5lIF9fa2NvbmZpZyBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFwmIzM0Oy5rY29uZmlnXCYjMzQ7KSkpXG4gI2RlZmluZSBfX2tzeW0gX19hdHRyaWJ1dGVfXygoc2VjdGlvbihcJiMzNDsua3N5bXNcJiMzNDspKSlcbiAjZGVmaW5lIF9fa3B0cl91bnRydXN0ZWQgX19hdHRyaWJ1dGVfXygoYnRmX3R5cGVfdGFnKFwmIzM0O2twdHJfdW50cnVzdGVkXCYjMzQ7KSkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbmluZGV4IDUxNGU0ZTlkYWE4MjUuLjlmZThhNjUzZThiNmIgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5AQCAtNTQ4LDYgJiM0Mzs1NDgsNyBAQCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMge1xuICNkZWZpbmUgU1RSVUNUX09QU19TRUMgXCYjMzQ7LnN0cnVjdF9vcHNcJiMzNDtcbiAjZGVmaW5lIFNUUlVDVF9PUFNfTElOS19TRUMgXCYjMzQ7LnN0cnVjdF9vcHMubGlua1wmIzM0O1xuICNkZWZpbmUgQVJFTkFfU0VDIFwmIzM0Oy5hZGRyX3NwYWNlLjFcJiMzNDtcbiYjNDM7I2RlZmluZSBLTU9EU19CVEZTX1NFQyBcJiMzNDsua21vZF9idGZzXCYjMzQ7XG4gXG4gZW51bSBsaWJicGZfbWFwX3R5cGUge1xuIFx0TElCQlBGX01BUF9VTlNQRUMsXG5AQCAtNzAzLDYgJiM0Mzs3MDQsOSBAQCBlbnVtIGJwZl9vYmplY3Rfc3RhdGUge1xuIFx0T0JKX0xPQURFRCxcbiB9O1xuIFxuJiM0MzsvKiBTaG91bGQgbWF0Y2ggdGhlIGRlZmluaXRpb24gaW4gYnBmX2hlbHBlcnMuaCAqL1xuJiM0MzsjZGVmaW5lIEtNT0RfTkFNRV9MRU4gNjRcbiYjNDM7XG4gc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Y2hhciBuYW1lW0JQRl9PQkpfTkFNRV9MRU5dO1xuIFx0Y2hhciBsaWNlbnNlWzY0XTtcbkBAIC03NzksNiAmIzQzOzc4MywxNCBAQCBzdHJ1Y3QgYnBmX29iamVjdCB7XG4gXHRjaGFyICp0b2tlbl9wYXRoO1xuIFx0aW50IHRva2VuX2ZkO1xuIFxuJiM0MztcdC8qIGtlcm5lbCBtb2R1bGUgQlRGcyB0byBsb2FkLCBkZWNsYXJlZCBpbiBcJiMzNDsua21vZF9idGZzXCYjMzQ7IEVMRiBzZWN0aW9uICovXG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdGNoYXIgKCpkYXRhKVtLTU9EX05BTUVfTEVOXTtcbiYjNDM7XHRcdHNpemVfdCBucl9uYW1lcztcbiYjNDM7XHRcdHNpemVfdCBucl9sb2FkZWQ7XG4mIzQzO1x0XHRzdHJ1Y3QgaGFzaG1hcCAqaGFzaG1hcDtcbiYjNDM7XHR9ICprbW9kX2J0ZnM7XG4mIzQzO1xuIFx0Y2hhciBwYXRoW107XG4gfTtcbiBcbkBAIC05MDEsNiAmIzQzOzkxMyw3NSBAQCBicGZfb2JqZWN0X19pbml0X3Byb2coc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuJiM0MztzdGF0aWMgc2l6ZV90IG1vZF9uYW1lX2hhc2hfZm4obG9uZyBrZXksIHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdHJfaGFzaCgoY2hhciAqKWtleSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG1vZF9uYW1lX2VxdWFsX2ZuKGxvbmcga2V5MSwgbG9uZyBrZXkyLCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3RyY21wKChjaGFyICopa2V5MSwgKGNoYXIgKilrZXkyKSA9PSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2JwZl9vYmplY3RfX2NvbGxlY3Rfa21vZF9idGZfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgRWxmX0RhdGEgKnNlY19kYXRhLFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKnNlY19uYW1lKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG1vZHVsZV9jbnQsIGksIGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChvYmotXHUwMDNla21vZF9idGZzKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O3NlYyAmIzM5OyVzJiMzOTs6IGR1cGxpY2F0ZSBzZWN0aW9ucyBkZXRlY3RlZFxcblwmIzM0Oywgc2VjX25hbWUpO1xuJiM0MztcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2VjX2RhdGEtXHUwMDNlZF9zaXplICUgS01PRF9OQU1FX0xFTiAhPSAwKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O3NlYyAmIzM5OyVzJiMzOTs6IHNpemUgJXp1IHNob3VsZCBiZSBtdWx0aXBsZSBvZiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c2VjX25hbWUsIHNlY19kYXRhLVx1MDAzZWRfc2l6ZSwgS01PRF9OQU1FX0xFTik7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1vZHVsZV9jbnQgPSBzZWNfZGF0YS1cdTAwM2VkX3NpemUgLyBLTU9EX05BTUVfTEVOO1xuJiM0MztcdG9iai1cdTAwM2VrbW9kX2J0ZnMgPSBjYWxsb2MoMSwgc2l6ZW9mKCpvYmotXHUwMDNla21vZF9idGZzKSk7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNla21vZF9idGZzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YSA9IGNhbGxvYyhtb2R1bGVfY250LCBLTU9EX05BTUVfTEVOKTtcbiYjNDM7XHRpZiAoIW9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YSkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1x0bWVtY3B5KG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YSwgc2VjX2RhdGEtXHUwMDNlZF9idWYsIHNlY19kYXRhLVx1MDAzZWRfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlaGFzaG1hcCA9IGhhc2htYXBfX25ldyhtb2RfbmFtZV9oYXNoX2ZuLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1vZF9uYW1lX2VxdWFsX2ZuLCBOVUxMKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlaGFzaG1hcCkpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VoYXNobWFwKTtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1vZHVsZV9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWRhdGFbaV1bS01PRF9OQU1FX0xFTiAtIDFdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRcdGlmIChoYXNobWFwX19maW5kKG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlaGFzaG1hcCxcbiYjNDM7XHRcdFx0XHQgIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YVtpXSwgTlVMTCkpIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBpZ25vcmVkIGR1cGxpY2F0ZSBtb2R1bGUgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHNlY19uYW1lLCBvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWRhdGFbaV0pO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVyciA9IGhhc2htYXBfX3NldChvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWhhc2htYXAsIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YVtpXSxcbiYjNDM7XHRcdFx0XHQgICAwLCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbnJfbmFtZXMmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0aGFzaG1hcF9fZnJlZShvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWhhc2htYXApO1xuJiM0MztcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YSk7XG4mIzQzO1x0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWttb2RfYnRmcyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50XG4gYnBmX29iamVjdF9fYWRkX3Byb2dyYW1zKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIEVsZl9EYXRhICpzZWNfZGF0YSxcbiBcdFx0XHQgY29uc3QgY2hhciAqc2VjX25hbWUsIGludCBzZWNfaWR4KVxuQEAgLTQwMzQsNiAmIzQzOzQxMTUsMTAgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19lbGZfY29sbGVjdChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdFx0bWVtY3B5KG9iai1cdTAwM2VqdW1wdGFibGVzX2RhdGEsIGRhdGEtXHUwMDNlZF9idWYsIGRhdGEtXHUwMDNlZF9zaXplKTtcbiBcdFx0XHRcdG9iai1cdTAwM2VqdW1wdGFibGVzX2RhdGFfc3ogPSBkYXRhLVx1MDAzZWRfc2l6ZTtcbiBcdFx0XHRcdG9iai1cdTAwM2VlZmlsZS5qdW1wdGFibGVzX2RhdGFfc2huZHggPSBpZHg7XG4mIzQzO1x0XHRcdH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsIEtNT0RTX0JURlNfU0VDKSA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0ZXJyID0gYnBmX29iamVjdF9fY29sbGVjdF9rbW9kX2J0Zl9uYW1lcyhvYmosIGRhdGEsIG5hbWUpO1xuJiM0MztcdFx0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRwcl9pbmZvKFwmIzM0O2VsZjogc2tpcHBpbmcgdW5yZWNvZ25pemVkIGRhdGEgc2VjdGlvbiglZCkgJXNcXG5cJiMzNDssXG4gXHRcdFx0XHRcdGlkeCwgbmFtZSk7XG5AQCAtNTgwMyw2ICYjNDM7NTg4OCwxMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBpc19rbW9kX2J0Zl9uZWVkZWQoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBoYXNobWFwX2ZpbmQob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VoYXNobWFwLCAobG9uZyluYW1lLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4gXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XG5AQCAtNTg2Nyw2ICYjNDM7NTk1NywxMiBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKG9iai1cdTAwM2VrbW9kX2J0ZnMgXHUwMDI2XHUwMDI2IG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlaGFzaG1hcCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhaXNfa21vZF9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcbiYjNDM7XHRcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtNTg5MSw2ICYjNDM7NTk4NywxMCBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9jbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChvYmotXHUwMDNla21vZF9idGZzIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlbnJfbmFtZXMgPT0gb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2Vucl9sb2FkZWQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTkwMzAsNiAmIzQzOzkxMzAsMTIgQEAgc3RhdGljIHZvaWQgYnBmX29iamVjdF9jbGVhbnVwX2J0ZihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0LyogY2xlYW4gdXAgdm1saW51eCBCVEYgKi9cbiBcdGJ0Zl9fZnJlZShvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuIFx0b2JqLVx1MDAzZWJ0Zl92bWxpbnV4ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9iai1cdTAwM2VrbW9kX2J0ZnMpIHtcbiYjNDM7XHRcdGhhc2htYXBfX2ZyZWUob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VoYXNobWFwKTtcbiYjNDM7XHRcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YSk7XG4mIzQzO1x0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNla21vZF9idGZzKTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJwZl9vYmplY3RfcG9zdF9sb2FkX2NsZWFudXAoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDg3NWZjY2U2NjgxZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmNcbkBAIC0wLDAgJiM0MzsxLDUyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtrbW9kX2J0ZnMuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2ttb2RfYnRmc19ub25leGlzdC5za2VsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a21vZF9idGZzX21peC5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19wYXNzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga21vZF9idGZzICprbW9kX2J0ZnNfc2tlbDtcbiYjNDM7XG4mIzQzO1x0a21vZF9idGZzX3NrZWwgPSBrbW9kX2J0ZnNfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoa21vZF9idGZzX3NrZWwsIFwmIzM0O2ttb2RfYnRmc19fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGttb2RfYnRmc19fZGVzdHJveShrbW9kX2J0ZnNfc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub25leGlzdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGttb2RfYnRmc19ub25leGlzdCAqa21vZF9idGZzX25vbmV4aXN0X3NrZWw7XG4mIzQzO1xuJiM0MztcdGttb2RfYnRmc19ub25leGlzdF9za2VsID0ga21vZF9idGZzX25vbmV4aXN0X19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0QVNTRVJUX05VTEwoa21vZF9idGZzX25vbmV4aXN0X3NrZWwsIFwmIzM0O2ttb2RfYnRmc19ub25leGlzdF9fb3Blbl9hbmRfbG9hZFwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19taXgodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrbW9kX2J0ZnNfbWl4ICprbW9kX2J0ZnNfbWl4X3NrZWw7XG4mIzQzO1xuJiM0MztcdGttb2RfYnRmc19taXhfc2tlbCA9IGttb2RfYnRmc19taXhfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoa21vZF9idGZzX21peF9za2VsLCBcJiMzNDtrbW9kX2J0ZnNfbWl4X19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0a21vZF9idGZzX21peF9fZGVzdHJveShrbW9kX2J0ZnNfbWl4X3NrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3Rfa21vZF9idGZzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWVudi5oYXNfdGVzdG1vZCkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7a21vZF9idGZzX3Bhc3NcJiMzNDspKVxuJiM0MztcdFx0a21vZF9idGZzX3Bhc3MoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7a21vZF9idGZzX25vbmV4aXN0XCYjMzQ7KSlcbiYjNDM7XHRcdGttb2RfYnRmc19ub25leGlzdCgpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtrbW9kX2J0ZnNfbWl4XCYjMzQ7KSlcbiYjNDM7XHRcdGttb2RfYnRmc19taXgoKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjhiOTg2YmMyZTlmZjdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuY1xuQEAgLTAsMCAmIzQzOzEsMTQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2ZleGl0L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFwmIzM0OylcbiYjNDM7aW50IHRlc3Rfa21vZF9idGZzKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyBcJiMzNDticGZfdGVzdG1vZFwmIzM0OyB9O1xuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX21peC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmc19taXguY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY0NDVjZjU2YWIxNjFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbWl4LmNcbkBAIC0wLDAgJiM0MzsxLDE1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZXhpdC9icGZfdGVzdG1vZF9sb29wX3Rlc3RcJiMzNDspXG4mIzQzO2ludCB0ZXN0X2ttb2RfYnRmc19taXgodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIG1peCBvZiBkdXBsaWNhdGVkIGFuZCB1bm5lZWRlZCBtb2R1bGVzICovXG4mIzQzO0RFRklORV9LTU9EX0JURlMoX25lZWRlZF9rbW9kcykgPSB7IFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7LCBcJiMzNDticGZfdGVzdG1vZFwmIzM0OywgXCYjMzQ7YnBmX3Rlc3Rfbm9fY2ZpXCYjMzQ7IH07XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjE2MzgzNjFlNTczMjJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuY1xuQEAgLTAsMCAmIzQzOzEsMTggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2ZleGl0L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFwmIzM0OylcbiYjNDM7aW50IHRlc3Rfa21vZF9idGZzX25vbmV4aXN0KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGlzIHNob3VsZCBmYWlsIHRvIGxvYWQsIGJlY2F1c2UgLmttb2RfYnRmcyBkb2VzIG5vdCBjb250YWluXG4mIzQzOyAqIHRoZSBuZWVkZWQgbW9kdWxlICYjMzk7YnBmX3Rlc3Rtb2QmIzM5Oy5cbiYjNDM7ICovXG4mIzQzO0RFRklORV9LTU9EX0JURlMoX25lZWRlZF9rbW9kcykgPSB7IFwmIzM0O21vZHVsZV9ub25leGlzdFwmIzM0OyB9O1xuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlcnNwYWNlIGxpYmJwZiBsaWJyYXJ5ICh0b29scy9saWIvYnBmKSBhbmQgYWRkcyBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZhYThmNzYwMWIwN2ZkYWEzZmM3NDQ2OTZhY2IyNTZiMDk5ODM1OTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwNDoxOTowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaCBiL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaAppbmRleCA5ZDE2MGI1YjljMGVlLi4xNzFlYTA1NWNkMzIzIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oCkBAIC0xODgsNiAmIzQzOzE4OCwyMCBAQCBlbnVtIGxpYmJwZl90cmlzdGF0ZSB7CiAJVFJJX01PRFVMRSA9IDIsCiB9OwogCiYjNDM7LyogSGVscGVyIHR5cGVkZWYgZm9yIGRlY2xhcmluZyBrZXJuZWwgbW9kdWxlIG5hbWVzIHRoYXQgbmVlZCBCVEYgbG9hZGluZy4KJiM0MzsgKgomIzQzOyAqIFVzYWdlOiBkZWZpbmUgYW4gYXJyYXkgaW4gdGhlICYjMzQ7Lmttb2RfYnRmcyYjMzQ7IEVMRiBzZWN0aW9uIHRvIHNwZWNpZnkKJiM0MzsgKiB3aGljaCBtb2R1bGVzIG5lZWQgQlRGIGxvYWRpbmc6CiYjNDM7ICoKJiM0MzsgKiAgIERFRklORV9LTU9EX0JURlMoX25lZWRlZF9rbW9kcyk9IHsgJiMzNDttb2R1bGUxJiMzNDssICYjMzQ7bW9kdWxlMiYjMzQ7LCAuLi4gfTsKJiM0MzsgKgomIzQzOyAqIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IEJURiBsb2FkaW5nIGFuZCBzcGVlZHMgdXAgdGhlIEJQRiBwcm9ncmFtCiYjNDM7ICogbG9hZCBwcm9jZXNzLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgS01PRF9OQU1FX0xFTiA2NAomIzQzOyNkZWZpbmUgREVGSU5FX0tNT0RfQlRGUyhuYW1lKSBcCiYjNDM7CVNFQygmIzM0Oy5rbW9kX2J0ZnMmIzM0OykgY2hhciBuYW1lW11bS01PRF9OQU1FX0xFTl0KJiM0MzsKICNkZWZpbmUgX19rY29uZmlnIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oJiMzNDsua2NvbmZpZyYjMzQ7KSkpCiAjZGVmaW5lIF9fa3N5bSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCYjMzQ7LmtzeW1zJiMzNDspKSkKICNkZWZpbmUgX19rcHRyX3VudHJ1c3RlZCBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoJiMzNDtrcHRyX3VudHJ1c3RlZCYjMzQ7KSkpCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwppbmRleCA1MTRlNGU5ZGFhODI1Li45ZmU4YTY1M2U4YjZiIDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKQEAgLTU0OCw2ICYjNDM7NTQ4LDcgQEAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIHsKICNkZWZpbmUgU1RSVUNUX09QU19TRUMgJiMzNDsuc3RydWN0X29wcyYjMzQ7CiAjZGVmaW5lIFNUUlVDVF9PUFNfTElOS19TRUMgJiMzNDsuc3RydWN0X29wcy5saW5rJiMzNDsKICNkZWZpbmUgQVJFTkFfU0VDICYjMzQ7LmFkZHJfc3BhY2UuMSYjMzQ7CiYjNDM7I2RlZmluZSBLTU9EU19CVEZTX1NFQyAmIzM0Oy5rbW9kX2J0ZnMmIzM0OwogCiBlbnVtIGxpYmJwZl9tYXBfdHlwZSB7CiAJTElCQlBGX01BUF9VTlNQRUMsCkBAIC03MDMsNiAmIzQzOzcwNCw5IEBAIGVudW0gYnBmX29iamVjdF9zdGF0ZSB7CiAJT0JKX0xPQURFRCwKIH07CiAKJiM0MzsvKiBTaG91bGQgbWF0Y2ggdGhlIGRlZmluaXRpb24gaW4gYnBmX2hlbHBlcnMuaCAqLwomIzQzOyNkZWZpbmUgS01PRF9OQU1FX0xFTiA2NAomIzQzOwogc3RydWN0IGJwZl9vYmplY3QgewogCWNoYXIgbmFtZVtCUEZfT0JKX05BTUVfTEVOXTsKIAljaGFyIGxpY2Vuc2VbNjRdOwpAQCAtNzc5LDYgJiM0Mzs3ODMsMTQgQEAgc3RydWN0IGJwZl9vYmplY3QgewogCWNoYXIgKnRva2VuX3BhdGg7CiAJaW50IHRva2VuX2ZkOwogCiYjNDM7CS8qIGtlcm5lbCBtb2R1bGUgQlRGcyB0byBsb2FkLCBkZWNsYXJlZCBpbiAmIzM0Oy5rbW9kX2J0ZnMmIzM0OyBFTEYgc2VjdGlvbiAqLwomIzQzOwlzdHJ1Y3QgewomIzQzOwkJY2hhciAoKmRhdGEpW0tNT0RfTkFNRV9MRU5dOwomIzQzOwkJc2l6ZV90IG5yX25hbWVzOwomIzQzOwkJc2l6ZV90IG5yX2xvYWRlZDsKJiM0MzsJCXN0cnVjdCBoYXNobWFwICpoYXNobWFwOwomIzQzOwl9ICprbW9kX2J0ZnM7CiYjNDM7CiAJY2hhciBwYXRoW107CiB9OwogCkBAIC05MDEsNiAmIzQzOzkxMyw3NSBAQCBicGZfb2JqZWN0X19pbml0X3Byb2coc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLAogCXJldHVybiAtRU5PTUVNOwogfQogCiYjNDM7c3RhdGljIHNpemVfdCBtb2RfbmFtZV9oYXNoX2ZuKGxvbmcga2V5LCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3RyX2hhc2goKGNoYXIgKilrZXkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtb2RfbmFtZV9lcXVhbF9mbihsb25nIGtleTEsIGxvbmcga2V5Miwgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIHN0cmNtcCgoY2hhciAqKWtleTEsIChjaGFyICopa2V5MikgPT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO2JwZl9vYmplY3RfX2NvbGxlY3Rfa21vZF9idGZfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgRWxmX0RhdGEgKnNlY19kYXRhLAomIzQzOwkJCQkgICBjb25zdCBjaGFyICpzZWNfbmFtZSkKJiM0Mzt7CiYjNDM7CWludCBtb2R1bGVfY250LCBpLCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAob2JqLSZndDtrbW9kX2J0ZnMpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtzZWMgJiMzOTslcyYjMzk7OiBkdXBsaWNhdGUgc2VjdGlvbnMgZGV0ZWN0ZWRcbiYjMzQ7LCBzZWNfbmFtZSk7CiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2VjX2RhdGEtJmd0O2Rfc2l6ZSAlIEtNT0RfTkFNRV9MRU4gIT0gMCkgewomIzQzOwkJcHJfd2FybigmIzM0O3NlYyAmIzM5OyVzJiMzOTs6IHNpemUgJXp1IHNob3VsZCBiZSBtdWx0aXBsZSBvZiAlZFxuJiMzNDssCiYjNDM7CQkJc2VjX25hbWUsIHNlY19kYXRhLSZndDtkX3NpemUsIEtNT0RfTkFNRV9MRU4pOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbW9kdWxlX2NudCA9IHNlY19kYXRhLSZndDtkX3NpemUgLyBLTU9EX05BTUVfTEVOOwomIzQzOwlvYmotJmd0O2ttb2RfYnRmcyA9IGNhbGxvYygxLCBzaXplb2YoKm9iai0mZ3Q7a21vZF9idGZzKSk7CiYjNDM7CWlmICghb2JqLSZndDtrbW9kX2J0ZnMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJb2JqLSZndDtrbW9kX2J0ZnMtJmd0O2RhdGEgPSBjYWxsb2MobW9kdWxlX2NudCwgS01PRF9OQU1FX0xFTik7CiYjNDM7CWlmICghb2JqLSZndDtrbW9kX2J0ZnMtJmd0O2RhdGEpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsJbWVtY3B5KG9iai0mZ3Q7a21vZF9idGZzLSZndDtkYXRhLCBzZWNfZGF0YS0mZ3Q7ZF9idWYsIHNlY19kYXRhLSZndDtkX3NpemUpOwomIzQzOwomIzQzOwlvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7aGFzaG1hcCA9IGhhc2htYXBfX25ldyhtb2RfbmFtZV9oYXNoX2ZuLAomIzQzOwkJCQkJICAgICAgIG1vZF9uYW1lX2VxdWFsX2ZuLCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7aGFzaG1hcCkpIHsKJiM0MzsJCWVyciA9IFBUUl9FUlIob2JqLSZndDtrbW9kX2J0ZnMtJmd0O2hhc2htYXApOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBtb2R1bGVfY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJb2JqLSZndDtrbW9kX2J0ZnMtJmd0O2RhdGFbaV1bS01PRF9OQU1FX0xFTiAtIDFdID0gJiMzOTtcMCYjMzk7OwomIzQzOwkJaWYgKGhhc2htYXBfX2ZpbmQob2JqLSZndDtrbW9kX2J0ZnMtJmd0O2hhc2htYXAsCiYjNDM7CQkJCSAgb2JqLSZndDtrbW9kX2J0ZnMtJmd0O2RhdGFbaV0sIE5VTEwpKSB7CiYjNDM7CQkJcHJfd2FybigmIzM0O3NlYyAmIzM5OyVzJiMzOTs6IGlnbm9yZWQgZHVwbGljYXRlIG1vZHVsZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LAomIzQzOwkJCQlzZWNfbmFtZSwgb2JqLSZndDtrbW9kX2J0ZnMtJmd0O2RhdGFbaV0pOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJZXJyID0gaGFzaG1hcF9fc2V0KG9iai0mZ3Q7a21vZF9idGZzLSZndDtoYXNobWFwLCBvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7ZGF0YVtpXSwKJiM0MzsJCQkJICAgMCwgTlVMTCwgTlVMTCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCW9iai0mZ3Q7a21vZF9idGZzLSZndDtucl9uYW1lcyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX291dDoKJiM0MzsJaGFzaG1hcF9fZnJlZShvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7aGFzaG1hcCk7CiYjNDM7CXpmcmVlKCZhbXA7b2JqLSZndDtrbW9kX2J0ZnMtJmd0O2RhdGEpOwomIzQzOwl6ZnJlZSgmYW1wO29iai0mZ3Q7a21vZF9idGZzKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiBicGZfb2JqZWN0X19hZGRfcHJvZ3JhbXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgRWxmX0RhdGEgKnNlY19kYXRhLAogCQkJIGNvbnN0IGNoYXIgKnNlY19uYW1lLCBpbnQgc2VjX2lkeCkKQEAgLTQwMzQsNiAmIzQzOzQxMTUsMTAgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19lbGZfY29sbGVjdChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQkJCW1lbWNweShvYmotJmd0O2p1bXB0YWJsZXNfZGF0YSwgZGF0YS0mZ3Q7ZF9idWYsIGRhdGEtJmd0O2Rfc2l6ZSk7CiAJCQkJb2JqLSZndDtqdW1wdGFibGVzX2RhdGFfc3ogPSBkYXRhLSZndDtkX3NpemU7CiAJCQkJb2JqLSZndDtlZmlsZS5qdW1wdGFibGVzX2RhdGFfc2huZHggPSBpZHg7CiYjNDM7CQkJfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgS01PRFNfQlRGU19TRUMpID09IDApIHsKJiM0MzsJCQkJZXJyID0gYnBmX29iamVjdF9fY29sbGVjdF9rbW9kX2J0Zl9uYW1lcyhvYmosIGRhdGEsIG5hbWUpOwomIzQzOwkJCQlpZiAoZXJyKQomIzQzOwkJCQkJcmV0dXJuIGVycjsKIAkJCX0gZWxzZSB7CiAJCQkJcHJfaW5mbygmIzM0O2VsZjogc2tpcHBpbmcgdW5yZWNvZ25pemVkIGRhdGEgc2VjdGlvbiglZCkgJXNcbiYjMzQ7LAogCQkJCQlpZHgsIG5hbWUpOwpAQCAtNTgwMyw2ICYjNDM7NTg4OCwxMSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaXNfa21vZF9idGZfbmVlZGVkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlyZXR1cm4gaGFzaG1hcF9maW5kKG9iai0mZ3Q7a21vZF9idGZzLSZndDtoYXNobWFwLCAobG9uZyluYW1lLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87CkBAIC01ODY3LDYgJiM0Mzs1OTU3LDEyIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQkJY29udGludWU7CiAJCX0KIAomIzQzOwkJaWYgKG9iai0mZ3Q7a21vZF9idGZzICZhbXA7JmFtcDsgb2JqLSZndDtrbW9kX2J0ZnMtJmd0O2hhc2htYXAgJmFtcDsmYW1wOwomIzQzOwkJICAgICFpc19rbW9kX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkgewomIzQzOwkJCWNsb3NlKGZkKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJYnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotJmd0O2J0Zl92bWxpbnV4KTsKIAkJZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpOwogCQlpZiAoZXJyKSB7CkBAIC01ODkxLDYgJiM0Mzs1OTg3LDEwIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQkJYnJlYWs7CiAJCX0KIAkJb2JqLSZndDtidGZfbW9kdWxlX2NudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAob2JqLSZndDtrbW9kX2J0ZnMgJmFtcDsmYW1wOwomIzQzOwkJICAgIG9iai0mZ3Q7a21vZF9idGZzLSZndDtucl9uYW1lcyA9PSBvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7bnJfbG9hZGVkKQomIzQzOwkJCWJyZWFrOwogCX0KIAogCWlmIChlcnIpIHsKQEAgLTkwMzAsNiAmIzQzOzkxMzAsMTIgQEAgc3RhdGljIHZvaWQgYnBmX29iamVjdF9jbGVhbnVwX2J0ZihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCS8qIGNsZWFuIHVwIHZtbGludXggQlRGICovCiAJYnRmX19mcmVlKG9iai0mZ3Q7YnRmX3ZtbGludXgpOwogCW9iai0mZ3Q7YnRmX3ZtbGludXggPSBOVUxMOwomIzQzOwomIzQzOwlpZiAob2JqLSZndDtrbW9kX2J0ZnMpIHsKJiM0MzsJCWhhc2htYXBfX2ZyZWUob2JqLSZndDtrbW9kX2J0ZnMtJmd0O2hhc2htYXApOwomIzQzOwkJemZyZWUoJmFtcDtvYmotJmd0O2ttb2RfYnRmcy0mZ3Q7ZGF0YSk7CiYjNDM7CQl6ZnJlZSgmYW1wO29iai0mZ3Q7a21vZF9idGZzKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBicGZfb2JqZWN0X3Bvc3RfbG9hZF9jbGVhbnVwKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ4NzVmY2NlNjY4MWQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuYwpAQCAtMCwwICYjNDM7MSw1MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2ttb2RfYnRmcy5za2VsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a21vZF9idGZzX25vbmV4aXN0LnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrbW9kX2J0ZnNfbWl4LnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQga21vZF9idGZzX3Bhc3Modm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrbW9kX2J0ZnMgKmttb2RfYnRmc19za2VsOwomIzQzOwomIzQzOwlrbW9kX2J0ZnNfc2tlbCA9IGttb2RfYnRmc19fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoa21vZF9idGZzX3NrZWwsICYjMzQ7a21vZF9idGZzX19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlrbW9kX2J0ZnNfX2Rlc3Ryb3koa21vZF9idGZzX3NrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfbm9uZXhpc3Qodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrbW9kX2J0ZnNfbm9uZXhpc3QgKmttb2RfYnRmc19ub25leGlzdF9za2VsOwomIzQzOwomIzQzOwlrbW9kX2J0ZnNfbm9uZXhpc3Rfc2tlbCA9IGttb2RfYnRmc19ub25leGlzdF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlBU1NFUlRfTlVMTChrbW9kX2J0ZnNfbm9uZXhpc3Rfc2tlbCwgJiMzNDtrbW9kX2J0ZnNfbm9uZXhpc3RfX29wZW5fYW5kX2xvYWQmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGttb2RfYnRmc19taXgodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrbW9kX2J0ZnNfbWl4ICprbW9kX2J0ZnNfbWl4X3NrZWw7CiYjNDM7CiYjNDM7CWttb2RfYnRmc19taXhfc2tlbCA9IGttb2RfYnRmc19taXhfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGttb2RfYnRmc19taXhfc2tlbCwgJiMzNDtrbW9kX2J0ZnNfbWl4X19vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlrbW9kX2J0ZnNfbWl4X19kZXN0cm95KGttb2RfYnRmc19taXhfc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9rbW9kX2J0ZnModm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghZW52Lmhhc190ZXN0bW9kKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtrbW9kX2J0ZnNfcGFzcyYjMzQ7KSkKJiM0MzsJCWttb2RfYnRmc19wYXNzKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a21vZF9idGZzX25vbmV4aXN0JiMzNDspKQomIzQzOwkJa21vZF9idGZzX25vbmV4aXN0KCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a21vZF9idGZzX21peCYjMzQ7KSkKJiM0MzsJCWttb2RfYnRmc19taXgoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOGI5ODZiYzJlOWZmNwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuYwpAQCAtMCwwICYjNDM7MSwxNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7ZmV4aXQvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0JiMzNDspCiYjNDM7aW50IHRlc3Rfa21vZF9idGZzKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyAmIzM0O2JwZl90ZXN0bW9kJiMzNDsgfTsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX21peC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmc19taXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mNDQ1Y2Y1NmFiMTYxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmc19taXguYwpAQCAtMCwwICYjNDM7MSwxNSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7ZmV4aXQvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0JiMzNDspCiYjNDM7aW50IHRlc3Rfa21vZF9idGZzX21peCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogbWl4IG9mIGR1cGxpY2F0ZWQgYW5kIHVubmVlZGVkIG1vZHVsZXMgKi8KJiM0MztERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyAmIzM0O2JwZl90ZXN0bW9kJiMzNDssICYjMzQ7YnBmX3Rlc3Rtb2QmIzM0OywgJiMzNDticGZfdGVzdF9ub19jZmkmIzM0OyB9OwomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xNjM4MzYxZTU3MzIyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmc19ub25leGlzdC5jCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsKJiM0MztTRUMoJiMzNDtmZXhpdC9icGZfdGVzdG1vZF9sb29wX3Rlc3QmIzM0OykKJiM0MztpbnQgdGVzdF9rbW9kX2J0ZnNfbm9uZXhpc3Qodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhpcyBzaG91bGQgZmFpbCB0byBsb2FkLCBiZWNhdXNlIC5rbW9kX2J0ZnMgZG9lcyBub3QgY29udGFpbgomIzQzOyAqIHRoZSBuZWVkZWQgbW9kdWxlICYjMzk7YnBmX3Rlc3Rtb2QmIzM5Oy4KJiM0MzsgKi8KJiM0MztERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyAmIzM0O21vZHVsZV9ub25leGlzdCYjMzQ7IH07CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTE2CgkJCQkJCQlvdXRwdXQ6IDY5CgkJCQkJCQl0aG91Z2h0czogNTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCBhbmQgYHRvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaGAsIHBsdXMgc29tZSBzZWxmdGVzdHMuIFNlZW1zIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcgZmVhdHVyZSB0byBsaWJicGYgcmVsYXRlZCB0byBsb2FkaW5nIEJURiBmb3Iga2VybmVsIG1vZHVsZXMgdmlhIGEgYC5rbW9kX2J0ZnNgIEVMRiBzZWN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdXNlcnNwYWNlLCBsaWJicGYgY2hhbmdlcy4gQnV0IEkgYWx3YXlzIGRvdWJsZS1jaGVjay4KCkxldCBtZSB2ZXJpZnkuLi4gb2theSwgSSBzZWUgdGhlIGRpZmYgc2hvd3MgY2hhbmdlcyBvbmx5IGluIGB0b29scy9saWIvYnBmL2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gU3BlY2lmaWNhbGx5LCBJIGFtIHNlZWluZyB1cGRhdGVzIHRvOiBgdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oYCwgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmcy5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbWl4LmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuY2AuIE5vIGtlcm5lbCBjb2RlIGNoYW5nZXMgaGVyZSBhdCBhbGwuIFdlIGFyZSBnb29kLgoKU2luY2UgYHRvb2xzL2AgaXMgdXNlcnNwYWNlIGNvZGUg4oCTIGBsaWJicGZgIGlzIGEgdXNlcnNwYWNlIGxpYnJhcnkg4oCTIHRoaXMgKmRlZmluaXRlbHkqIGRvZXNuJiMzOTt0IHJlcXVpcmUga2VybmVsIGZ1enppbmcuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgZnVuY3Rpb25hbGl0eSB0aGF0IGEgdG9vbCBsaWtlIHN5emthbGxlciB3b3VsZCBuZWVkIHRvIGV4YW1pbmUuIEV2ZW4gaWYgc3l6a2FsbGVyICpkaWQqIGZ1enogYGxpYmJwZmAgKHdoaWNoIGl0IGRvZXNuJiMzOTt0LCBpdCB1c2VzIHRoZSBzeXNjYWxsKSwgaXQmIzM5O3Mgc3RpbGwgYSB1c2Vyc3BhY2UgY2hhbmdlLgoKQWxyaWdodCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWdhaW4uLi4gTm9wZSwgbm90aGluZy4gT25seSBjaGFuZ2VzIGluIGB0b29scy9saWIvYnBmL2AgYW5kIHRoZSBgc2VsZnRlc3RzYC4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb21mb3J0YWJsZSBzYXlpbmcgYFdvcnRoRnV6emluZzogZmFsc2VgLiBUaGUgcGF0Y2ggaXMgc29sZWx5IHdpdGhpbiB0aGUgdXNlciBzcGFjZSBjb21wb25lbnRzIG9mIGBsaWJicGZgIGFuZCBkb2VzbiYjMzk7dCBhZmZlY3QgdGhlIGtlcm5lbCYjMzk7cyBmdW5jdGlvbmFsIGNvZGUuCgpJIHdpbGwgc2V0IHRoZSByZXN1bHRzLCBpbmRpY2F0aW5nIGBXb3J0aEZ1enppbmc6IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXJzcGFjZSBsaWJicGYgbGlicmFyeSAodG9vbHMvbGliL2JwZikgYW5kIGFkZHMgc2VsZnRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXJzcGFjZSBsaWJicGYgbGlicmFyeSAodG9vbHMvbGliL2JwZikgYW5kIGFkZHMgc2VsZnRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDQ6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjE5OjEwLjc1Mjk5NjE5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NDgxOTQ3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSB1c2Vyc3BhY2UgbGliYnBmIGxpYnJhcnkgKHRvb2xzL2xpYi9icGYpIGFuZCBhZGRzIHNlbGZ0ZXN0cy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoxOToxMC43NTMwMDI2ODlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDI2Njc5MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YWE4Zjc2MDFiMDdmZGFhM2ZjNzQ0Njk2YWNiMjU2YjA5OTgzNTkyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDA0OjE5OjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaCBiL3Rvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaFxcbmluZGV4IDlkMTYwYjViOWMwZWUuLjE3MWVhMDU1Y2QzMjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXFxuKysrIGIvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXFxuQEAgLTE4OCw2ICsxODgsMjAgQEAgZW51bSBsaWJicGZfdHJpc3RhdGUge1xcbiBcXHRUUklfTU9EVUxFID0gMixcXG4gfTtcXG4gXFxuKy8qIEhlbHBlciB0eXBlZGVmIGZvciBkZWNsYXJpbmcga2VybmVsIG1vZHVsZSBuYW1lcyB0aGF0IG5lZWQgQlRGIGxvYWRpbmcuXFxuKyAqXFxuKyAqIFVzYWdlOiBkZWZpbmUgYW4gYXJyYXkgaW4gdGhlIFxcXCIua21vZF9idGZzXFxcIiBFTEYgc2VjdGlvbiB0byBzcGVjaWZ5XFxuKyAqIHdoaWNoIG1vZHVsZXMgbmVlZCBCVEYgbG9hZGluZzpcXG4rICpcXG4rICogICBERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpPSB7IFxcXCJtb2R1bGUxXFxcIiwgXFxcIm1vZHVsZTJcXFwiLCAuLi4gfTtcXG4rICpcXG4rICogVGhpcyBhdm9pZHMgdW5uZWNlc3NhcnkgQlRGIGxvYWRpbmcgYW5kIHNwZWVkcyB1cCB0aGUgQlBGIHByb2dyYW1cXG4rICogbG9hZCBwcm9jZXNzLlxcbisgKi9cXG4rI2RlZmluZSBLTU9EX05BTUVfTEVOIDY0XFxuKyNkZWZpbmUgREVGSU5FX0tNT0RfQlRGUyhuYW1lKSBcXFxcXFxuK1xcdFNFQyhcXFwiLmttb2RfYnRmc1xcXCIpIGNoYXIgbmFtZVtdW0tNT0RfTkFNRV9MRU5dXFxuK1xcbiAjZGVmaW5lIF9fa2NvbmZpZyBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFxcXCIua2NvbmZpZ1xcXCIpKSlcXG4gI2RlZmluZSBfX2tzeW0gX19hdHRyaWJ1dGVfXygoc2VjdGlvbihcXFwiLmtzeW1zXFxcIikpKVxcbiAjZGVmaW5lIF9fa3B0cl91bnRydXN0ZWQgX19hdHRyaWJ1dGVfXygoYnRmX3R5cGVfdGFnKFxcXCJrcHRyX3VudHJ1c3RlZFxcXCIpKSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuYyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5pbmRleCA1MTRlNGU5ZGFhODI1Li45ZmU4YTY1M2U4YjZiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuQEAgLTU0OCw2ICs1NDgsNyBAQCBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMge1xcbiAjZGVmaW5lIFNUUlVDVF9PUFNfU0VDIFxcXCIuc3RydWN0X29wc1xcXCJcXG4gI2RlZmluZSBTVFJVQ1RfT1BTX0xJTktfU0VDIFxcXCIuc3RydWN0X29wcy5saW5rXFxcIlxcbiAjZGVmaW5lIEFSRU5BX1NFQyBcXFwiLmFkZHJfc3BhY2UuMVxcXCJcXG4rI2RlZmluZSBLTU9EU19CVEZTX1NFQyBcXFwiLmttb2RfYnRmc1xcXCJcXG4gXFxuIGVudW0gbGliYnBmX21hcF90eXBlIHtcXG4gXFx0TElCQlBGX01BUF9VTlNQRUMsXFxuQEAgLTcwMyw2ICs3MDQsOSBAQCBlbnVtIGJwZl9vYmplY3Rfc3RhdGUge1xcbiBcXHRPQkpfTE9BREVELFxcbiB9O1xcbiBcXG4rLyogU2hvdWxkIG1hdGNoIHRoZSBkZWZpbml0aW9uIGluIGJwZl9oZWxwZXJzLmggKi9cXG4rI2RlZmluZSBLTU9EX05BTUVfTEVOIDY0XFxuK1xcbiBzdHJ1Y3QgYnBmX29iamVjdCB7XFxuIFxcdGNoYXIgbmFtZVtCUEZfT0JKX05BTUVfTEVOXTtcXG4gXFx0Y2hhciBsaWNlbnNlWzY0XTtcXG5AQCAtNzc5LDYgKzc4MywxNCBAQCBzdHJ1Y3QgYnBmX29iamVjdCB7XFxuIFxcdGNoYXIgKnRva2VuX3BhdGg7XFxuIFxcdGludCB0b2tlbl9mZDtcXG4gXFxuK1xcdC8qIGtlcm5lbCBtb2R1bGUgQlRGcyB0byBsb2FkLCBkZWNsYXJlZCBpbiBcXFwiLmttb2RfYnRmc1xcXCIgRUxGIHNlY3Rpb24gKi9cXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0Y2hhciAoKmRhdGEpW0tNT0RfTkFNRV9MRU5dO1xcbitcXHRcXHRzaXplX3QgbnJfbmFtZXM7XFxuK1xcdFxcdHNpemVfdCBucl9sb2FkZWQ7XFxuK1xcdFxcdHN0cnVjdCBoYXNobWFwICpoYXNobWFwO1xcbitcXHR9ICprbW9kX2J0ZnM7XFxuK1xcbiBcXHRjaGFyIHBhdGhbXTtcXG4gfTtcXG4gXFxuQEAgLTkwMSw2ICs5MTMsNzUgQEAgYnBmX29iamVjdF9faW5pdF9wcm9nKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcXG4gXFx0cmV0dXJuIC1FTk9NRU07XFxuIH1cXG4gXFxuK3N0YXRpYyBzaXplX3QgbW9kX25hbWVfaGFzaF9mbihsb25nIGtleSwgdm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBzdHJfaGFzaCgoY2hhciAqKWtleSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG1vZF9uYW1lX2VxdWFsX2ZuKGxvbmcga2V5MSwgbG9uZyBrZXkyLCB2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIHN0cmNtcCgoY2hhciAqKWtleTEsIChjaGFyICopa2V5MikgPT0gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbiticGZfb2JqZWN0X19jb2xsZWN0X2ttb2RfYnRmX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIEVsZl9EYXRhICpzZWNfZGF0YSxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqc2VjX25hbWUpXFxuK3tcXG4rXFx0aW50IG1vZHVsZV9jbnQsIGksIGVyciA9IDA7XFxuK1xcbitcXHRpZiAob2JqLVxcdTAwM2VrbW9kX2J0ZnMpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwic2VjICclcyc6IGR1cGxpY2F0ZSBzZWN0aW9ucyBkZXRlY3RlZFxcXFxuXFxcIiwgc2VjX25hbWUpO1xcbitcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNlY19kYXRhLVxcdTAwM2VkX3NpemUgJSBLTU9EX05BTUVfTEVOICE9IDApIHtcXG4rXFx0XFx0cHJfd2FybihcXFwic2VjICclcyc6IHNpemUgJXp1IHNob3VsZCBiZSBtdWx0aXBsZSBvZiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0c2VjX25hbWUsIHNlY19kYXRhLVxcdTAwM2VkX3NpemUsIEtNT0RfTkFNRV9MRU4pO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0bW9kdWxlX2NudCA9IHNlY19kYXRhLVxcdTAwM2VkX3NpemUgLyBLTU9EX05BTUVfTEVOO1xcbitcXHRvYmotXFx1MDAzZWttb2RfYnRmcyA9IGNhbGxvYygxLCBzaXplb2YoKm9iai1cXHUwMDNla21vZF9idGZzKSk7XFxuK1xcdGlmICghb2JqLVxcdTAwM2VrbW9kX2J0ZnMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWRhdGEgPSBjYWxsb2MobW9kdWxlX2NudCwgS01PRF9OQU1FX0xFTik7XFxuK1xcdGlmICghb2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWRhdGEpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcdG1lbWNweShvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlZGF0YSwgc2VjX2RhdGEtXFx1MDAzZWRfYnVmLCBzZWNfZGF0YS1cXHUwMDNlZF9zaXplKTtcXG4rXFxuK1xcdG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VoYXNobWFwID0gaGFzaG1hcF9fbmV3KG1vZF9uYW1lX2hhc2hfZm4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBtb2RfbmFtZV9lcXVhbF9mbiwgTlVMTCk7XFxuK1xcdGlmIChJU19FUlIob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWhhc2htYXApKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWhhc2htYXApO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtb2R1bGVfY250OyBpKyspIHtcXG4rXFx0XFx0b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWRhdGFbaV1bS01PRF9OQU1FX0xFTiAtIDFdID0gJ1xcXFwwJztcXG4rXFx0XFx0aWYgKGhhc2htYXBfX2ZpbmQob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWhhc2htYXAsXFxuK1xcdFxcdFxcdFxcdCAgb2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWRhdGFbaV0sIE5VTEwpKSB7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcInNlYyAnJXMnOiBpZ25vcmVkIGR1cGxpY2F0ZSBtb2R1bGUgJyVzJ1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0c2VjX25hbWUsIG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VkYXRhW2ldKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZXJyID0gaGFzaG1hcF9fc2V0KG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VoYXNobWFwLCBvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlZGF0YVtpXSxcXG4rXFx0XFx0XFx0XFx0ICAgMCwgTlVMTCwgTlVMTCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZW5yX25hbWVzKys7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfb3V0OlxcbitcXHRoYXNobWFwX19mcmVlKG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VoYXNobWFwKTtcXG4rXFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VkYXRhKTtcXG4rXFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNla21vZF9idGZzKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIGludFxcbiBicGZfb2JqZWN0X19hZGRfcHJvZ3JhbXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgRWxmX0RhdGEgKnNlY19kYXRhLFxcbiBcXHRcXHRcXHQgY29uc3QgY2hhciAqc2VjX25hbWUsIGludCBzZWNfaWR4KVxcbkBAIC00MDM0LDYgKzQxMTUsMTAgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19lbGZfY29sbGVjdChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRcXHRtZW1jcHkob2JqLVxcdTAwM2VqdW1wdGFibGVzX2RhdGEsIGRhdGEtXFx1MDAzZWRfYnVmLCBkYXRhLVxcdTAwM2VkX3NpemUpO1xcbiBcXHRcXHRcXHRcXHRvYmotXFx1MDAzZWp1bXB0YWJsZXNfZGF0YV9zeiA9IGRhdGEtXFx1MDAzZWRfc2l6ZTtcXG4gXFx0XFx0XFx0XFx0b2JqLVxcdTAwM2VlZmlsZS5qdW1wdGFibGVzX2RhdGFfc2huZHggPSBpZHg7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsIEtNT0RTX0JURlNfU0VDKSA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IGJwZl9vYmplY3RfX2NvbGxlY3Rfa21vZF9idGZfbmFtZXMob2JqLCBkYXRhLCBuYW1lKTtcXG4rXFx0XFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiZWxmOiBza2lwcGluZyB1bnJlY29nbml6ZWQgZGF0YSBzZWN0aW9uKCVkKSAlc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0aWR4LCBuYW1lKTtcXG5AQCAtNTgwMyw2ICs1ODg4LDExIEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBpc19rbW9kX2J0Zl9uZWVkZWQoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRyZXR1cm4gaGFzaG1hcF9maW5kKG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2VoYXNobWFwLCAobG9uZyluYW1lLCBOVUxMKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9idGZfaW5mbyBpbmZvO1xcbkBAIC01ODY3LDYgKzU5NTcsMTIgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAob2JqLVxcdTAwM2VrbW9kX2J0ZnMgXFx1MDAyNlxcdTAwMjYgb2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWhhc2htYXAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFpc19rbW9kX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkge1xcbitcXHRcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai1cXHUwMDNlYnRmX3ZtbGludXgpO1xcbiBcXHRcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG5AQCAtNTg5MSw2ICs1OTg3LDEwIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XFxuK1xcbitcXHRcXHRpZiAob2JqLVxcdTAwM2VrbW9kX2J0ZnMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG9iai1cXHUwMDNla21vZF9idGZzLVxcdTAwM2Vucl9uYW1lcyA9PSBvYmotXFx1MDAzZWttb2RfYnRmcy1cXHUwMDNlbnJfbG9hZGVkKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGVycikge1xcbkBAIC05MDMwLDYgKzkxMzAsMTIgQEAgc3RhdGljIHZvaWQgYnBmX29iamVjdF9jbGVhbnVwX2J0ZihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHQvKiBjbGVhbiB1cCB2bWxpbnV4IEJURiAqL1xcbiBcXHRidGZfX2ZyZWUob2JqLVxcdTAwM2VidGZfdm1saW51eCk7XFxuIFxcdG9iai1cXHUwMDNlYnRmX3ZtbGludXggPSBOVUxMO1xcbitcXG4rXFx0aWYgKG9iai1cXHUwMDNla21vZF9idGZzKSB7XFxuK1xcdFxcdGhhc2htYXBfX2ZyZWUob2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWhhc2htYXApO1xcbitcXHRcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VrbW9kX2J0ZnMtXFx1MDAzZWRhdGEpO1xcbitcXHRcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VrbW9kX2J0ZnMpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGJwZl9vYmplY3RfcG9zdF9sb2FkX2NsZWFudXAoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDg3NWZjY2U2NjgxZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuY1xcbkBAIC0wLDAgKzEsNTIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImttb2RfYnRmcy5za2VsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrbW9kX2J0ZnNfbm9uZXhpc3Quc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia21vZF9idGZzX21peC5za2VsLmhcXFwiXFxuK1xcbitzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfcGFzcyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbW9kX2J0ZnMgKmttb2RfYnRmc19za2VsO1xcbitcXG4rXFx0a21vZF9idGZzX3NrZWwgPSBrbW9kX2J0ZnNfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGttb2RfYnRmc19za2VsLCBcXFwia21vZF9idGZzX19vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGttb2RfYnRmc19fZGVzdHJveShrbW9kX2J0ZnNfc2tlbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub25leGlzdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbW9kX2J0ZnNfbm9uZXhpc3QgKmttb2RfYnRmc19ub25leGlzdF9za2VsO1xcbitcXG4rXFx0a21vZF9idGZzX25vbmV4aXN0X3NrZWwgPSBrbW9kX2J0ZnNfbm9uZXhpc3RfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0QVNTRVJUX05VTEwoa21vZF9idGZzX25vbmV4aXN0X3NrZWwsIFxcXCJrbW9kX2J0ZnNfbm9uZXhpc3RfX29wZW5fYW5kX2xvYWRcXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga21vZF9idGZzX21peCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrbW9kX2J0ZnNfbWl4ICprbW9kX2J0ZnNfbWl4X3NrZWw7XFxuK1xcbitcXHRrbW9kX2J0ZnNfbWl4X3NrZWwgPSBrbW9kX2J0ZnNfbWl4X19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihrbW9kX2J0ZnNfbWl4X3NrZWwsIFxcXCJrbW9kX2J0ZnNfbWl4X19vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGttb2RfYnRmc19taXhfX2Rlc3Ryb3koa21vZF9idGZzX21peF9za2VsKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2ttb2RfYnRmcyh2b2lkKVxcbit7XFxuK1xcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwia21vZF9idGZzX3Bhc3NcXFwiKSlcXG4rXFx0XFx0a21vZF9idGZzX3Bhc3MoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJrbW9kX2J0ZnNfbm9uZXhpc3RcXFwiKSlcXG4rXFx0XFx0a21vZF9idGZzX25vbmV4aXN0KCk7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwia21vZF9idGZzX21peFxcXCIpKVxcbitcXHRcXHRrbW9kX2J0ZnNfbWl4KCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi44Yjk4NmJjMmU5ZmY3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuY1xcbkBAIC0wLDAgKzEsMTQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuK1NFQyhcXFwiZmV4aXQvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XFxcIilcXG4raW50IHRlc3Rfa21vZF9idGZzKHZvaWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rREVGSU5FX0tNT0RfQlRGUyhfbmVlZGVkX2ttb2RzKSA9IHsgXFxcImJwZl90ZXN0bW9kXFxcIiB9O1xcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbWl4LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX21peC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNDQ1Y2Y1NmFiMTYxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbWl4LmNcXG5AQCAtMCwwICsxLDE1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuK1xcbitTRUMoXFxcImZleGl0L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFxcXCIpXFxuK2ludCB0ZXN0X2ttb2RfYnRmc19taXgodm9pZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBtaXggb2YgZHVwbGljYXRlZCBhbmQgdW5uZWVkZWQgbW9kdWxlcyAqL1xcbitERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyBcXFwiYnBmX3Rlc3Rtb2RcXFwiLCBcXFwiYnBmX3Rlc3Rtb2RcXFwiLCBcXFwiYnBmX3Rlc3Rfbm9fY2ZpXFxcIiB9O1xcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbm9uZXhpc3QuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTYzODM2MWU1NzMyMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX25vbmV4aXN0LmNcXG5AQCAtMCwwICsxLDE4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuK1xcbitTRUMoXFxcImZleGl0L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFxcXCIpXFxuK2ludCB0ZXN0X2ttb2RfYnRmc19ub25leGlzdCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoaXMgc2hvdWxkIGZhaWwgdG8gbG9hZCwgYmVjYXVzZSAua21vZF9idGZzIGRvZXMgbm90IGNvbnRhaW5cXG4rICogdGhlIG5lZWRlZCBtb2R1bGUgJ2JwZl90ZXN0bW9kJy5cXG4rICovXFxuK0RFRklORV9LTU9EX0JURlMoX25lZWRlZF9rbW9kcykgPSB7IFxcXCJtb2R1bGVfbm9uZXhpc3RcXFwiIH07XFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MTk6MTIuMTU2NTcyMzM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzE0NDU5MjkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgdXNlcnNwYWNlIGxpYmJwZiBsaWJyYXJ5ICh0b29scy9saWIvYnBmKSBhbmQgYWRkcyBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmFhOGY3NjAxYjA3ZmRhYTNmYzc0NDY5NmFjYjI1NmIwOTk4MzU5MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA0OjE5OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oIGIvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXG5pbmRleCA5ZDE2MGI1YjljMGVlLi4xNzFlYTA1NWNkMzIzIDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9icGZfaGVscGVycy5oXG4rKysgYi90b29scy9saWIvYnBmL2JwZl9oZWxwZXJzLmhcbkBAIC0xODgsNiArMTg4LDIwIEBAIGVudW0gbGliYnBmX3RyaXN0YXRlIHtcbiBcdFRSSV9NT0RVTEUgPSAyLFxuIH07XG4gXG4rLyogSGVscGVyIHR5cGVkZWYgZm9yIGRlY2xhcmluZyBrZXJuZWwgbW9kdWxlIG5hbWVzIHRoYXQgbmVlZCBCVEYgbG9hZGluZy5cbisgKlxuKyAqIFVzYWdlOiBkZWZpbmUgYW4gYXJyYXkgaW4gdGhlIFwiLmttb2RfYnRmc1wiIEVMRiBzZWN0aW9uIHRvIHNwZWNpZnlcbisgKiB3aGljaCBtb2R1bGVzIG5lZWQgQlRGIGxvYWRpbmc6XG4rICpcbisgKiAgIERFRklORV9LTU9EX0JURlMoX25lZWRlZF9rbW9kcyk9IHsgXCJtb2R1bGUxXCIsIFwibW9kdWxlMlwiLCAuLi4gfTtcbisgKlxuKyAqIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IEJURiBsb2FkaW5nIGFuZCBzcGVlZHMgdXAgdGhlIEJQRiBwcm9ncmFtXG4rICogbG9hZCBwcm9jZXNzLlxuKyAqL1xuKyNkZWZpbmUgS01PRF9OQU1FX0xFTiA2NFxuKyNkZWZpbmUgREVGSU5FX0tNT0RfQlRGUyhuYW1lKSBcXFxuK1x0U0VDKFwiLmttb2RfYnRmc1wiKSBjaGFyIG5hbWVbXVtLTU9EX05BTUVfTEVOXVxuK1xuICNkZWZpbmUgX19rY29uZmlnIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oXCIua2NvbmZpZ1wiKSkpXG4gI2RlZmluZSBfX2tzeW0gX19hdHRyaWJ1dGVfXygoc2VjdGlvbihcIi5rc3ltc1wiKSkpXG4gI2RlZmluZSBfX2twdHJfdW50cnVzdGVkIF9fYXR0cmlidXRlX18oKGJ0Zl90eXBlX3RhZyhcImtwdHJfdW50cnVzdGVkXCIpKSlcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggNTE0ZTRlOWRhYTgyNS4uOWZlOGE2NTNlOGI2YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC01NDgsNiArNTQ4LDcgQEAgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIHtcbiAjZGVmaW5lIFNUUlVDVF9PUFNfU0VDIFwiLnN0cnVjdF9vcHNcIlxuICNkZWZpbmUgU1RSVUNUX09QU19MSU5LX1NFQyBcIi5zdHJ1Y3Rfb3BzLmxpbmtcIlxuICNkZWZpbmUgQVJFTkFfU0VDIFwiLmFkZHJfc3BhY2UuMVwiXG4rI2RlZmluZSBLTU9EU19CVEZTX1NFQyBcIi5rbW9kX2J0ZnNcIlxuIFxuIGVudW0gbGliYnBmX21hcF90eXBlIHtcbiBcdExJQkJQRl9NQVBfVU5TUEVDLFxuQEAgLTcwMyw2ICs3MDQsOSBAQCBlbnVtIGJwZl9vYmplY3Rfc3RhdGUge1xuIFx0T0JKX0xPQURFRCxcbiB9O1xuIFxuKy8qIFNob3VsZCBtYXRjaCB0aGUgZGVmaW5pdGlvbiBpbiBicGZfaGVscGVycy5oICovXG4rI2RlZmluZSBLTU9EX05BTUVfTEVOIDY0XG4rXG4gc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Y2hhciBuYW1lW0JQRl9PQkpfTkFNRV9MRU5dO1xuIFx0Y2hhciBsaWNlbnNlWzY0XTtcbkBAIC03NzksNiArNzgzLDE0IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcbiBcdGNoYXIgKnRva2VuX3BhdGg7XG4gXHRpbnQgdG9rZW5fZmQ7XG4gXG4rXHQvKiBrZXJuZWwgbW9kdWxlIEJURnMgdG8gbG9hZCwgZGVjbGFyZWQgaW4gXCIua21vZF9idGZzXCIgRUxGIHNlY3Rpb24gKi9cbitcdHN0cnVjdCB7XG4rXHRcdGNoYXIgKCpkYXRhKVtLTU9EX05BTUVfTEVOXTtcbitcdFx0c2l6ZV90IG5yX25hbWVzO1xuK1x0XHRzaXplX3QgbnJfbG9hZGVkO1xuK1x0XHRzdHJ1Y3QgaGFzaG1hcCAqaGFzaG1hcDtcbitcdH0gKmttb2RfYnRmcztcbitcbiBcdGNoYXIgcGF0aFtdO1xuIH07XG4gXG5AQCAtOTAxLDYgKzkxMyw3NSBAQCBicGZfb2JqZWN0X19pbml0X3Byb2coc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuK3N0YXRpYyBzaXplX3QgbW9kX25hbWVfaGFzaF9mbihsb25nIGtleSwgdm9pZCAqY3R4KVxuK3tcbitcdHJldHVybiBzdHJfaGFzaCgoY2hhciAqKWtleSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIG1vZF9uYW1lX2VxdWFsX2ZuKGxvbmcga2V5MSwgbG9uZyBrZXkyLCB2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIHN0cmNtcCgoY2hhciAqKWtleTEsIChjaGFyICopa2V5MikgPT0gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK2JwZl9vYmplY3RfX2NvbGxlY3Rfa21vZF9idGZfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgRWxmX0RhdGEgKnNlY19kYXRhLFxuK1x0XHRcdFx0ICAgY29uc3QgY2hhciAqc2VjX25hbWUpXG4re1xuK1x0aW50IG1vZHVsZV9jbnQsIGksIGVyciA9IDA7XG4rXG4rXHRpZiAob2JqLVx1MDAzZWttb2RfYnRmcykge1xuK1x0XHRwcl93YXJuKFwic2VjICclcyc6IGR1cGxpY2F0ZSBzZWN0aW9ucyBkZXRlY3RlZFxcblwiLCBzZWNfbmFtZSk7XG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1x0fVxuK1xuK1x0aWYgKHNlY19kYXRhLVx1MDAzZWRfc2l6ZSAlIEtNT0RfTkFNRV9MRU4gIT0gMCkge1xuK1x0XHRwcl93YXJuKFwic2VjICclcyc6IHNpemUgJXp1IHNob3VsZCBiZSBtdWx0aXBsZSBvZiAlZFxcblwiLFxuK1x0XHRcdHNlY19uYW1lLCBzZWNfZGF0YS1cdTAwM2VkX3NpemUsIEtNT0RfTkFNRV9MRU4pO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdG1vZHVsZV9jbnQgPSBzZWNfZGF0YS1cdTAwM2VkX3NpemUgLyBLTU9EX05BTUVfTEVOO1xuK1x0b2JqLVx1MDAzZWttb2RfYnRmcyA9IGNhbGxvYygxLCBzaXplb2YoKm9iai1cdTAwM2VrbW9kX2J0ZnMpKTtcbitcdGlmICghb2JqLVx1MDAzZWttb2RfYnRmcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWRhdGEgPSBjYWxsb2MobW9kdWxlX2NudCwgS01PRF9OQU1FX0xFTik7XG4rXHRpZiAoIW9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YSkge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXHRtZW1jcHkob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VkYXRhLCBzZWNfZGF0YS1cdTAwM2VkX2J1Ziwgc2VjX2RhdGEtXHUwMDNlZF9zaXplKTtcbitcbitcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlaGFzaG1hcCA9IGhhc2htYXBfX25ldyhtb2RfbmFtZV9oYXNoX2ZuLFxuK1x0XHRcdFx0XHQgICAgICAgbW9kX25hbWVfZXF1YWxfZm4sIE5VTEwpO1xuK1x0aWYgKElTX0VSUihvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWhhc2htYXApKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VoYXNobWFwKTtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbW9kdWxlX2NudDsgaSsrKSB7XG4rXHRcdG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YVtpXVtLTU9EX05BTUVfTEVOIC0gMV0gPSAnXFwwJztcbitcdFx0aWYgKGhhc2htYXBfX2ZpbmQob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VoYXNobWFwLFxuK1x0XHRcdFx0ICBvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWRhdGFbaV0sIE5VTEwpKSB7XG4rXHRcdFx0cHJfd2FybihcInNlYyAnJXMnOiBpZ25vcmVkIGR1cGxpY2F0ZSBtb2R1bGUgJyVzJ1xcblwiLFxuK1x0XHRcdFx0c2VjX25hbWUsIG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlZGF0YVtpXSk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0ZXJyID0gaGFzaG1hcF9fc2V0KG9iai1cdTAwM2VrbW9kX2J0ZnMtXHUwMDNlaGFzaG1hcCwgb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VkYXRhW2ldLFxuK1x0XHRcdFx0ICAgMCwgTlVMTCwgTlVMTCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHRvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5yX25hbWVzKys7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitlcnJfb3V0OlxuK1x0aGFzaG1hcF9fZnJlZShvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWhhc2htYXApO1xuK1x0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VkYXRhKTtcbitcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VrbW9kX2J0ZnMpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RhdGljIGludFxuIGJwZl9vYmplY3RfX2FkZF9wcm9ncmFtcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBFbGZfRGF0YSAqc2VjX2RhdGEsXG4gXHRcdFx0IGNvbnN0IGNoYXIgKnNlY19uYW1lLCBpbnQgc2VjX2lkeClcbkBAIC00MDM0LDYgKzQxMTUsMTAgQEAgc3RhdGljIGludCBicGZfb2JqZWN0X19lbGZfY29sbGVjdChzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdFx0bWVtY3B5KG9iai1cdTAwM2VqdW1wdGFibGVzX2RhdGEsIGRhdGEtXHUwMDNlZF9idWYsIGRhdGEtXHUwMDNlZF9zaXplKTtcbiBcdFx0XHRcdG9iai1cdTAwM2VqdW1wdGFibGVzX2RhdGFfc3ogPSBkYXRhLVx1MDAzZWRfc2l6ZTtcbiBcdFx0XHRcdG9iai1cdTAwM2VlZmlsZS5qdW1wdGFibGVzX2RhdGFfc2huZHggPSBpZHg7XG4rXHRcdFx0fSBlbHNlIGlmIChzdHJjbXAobmFtZSwgS01PRFNfQlRGU19TRUMpID09IDApIHtcbitcdFx0XHRcdGVyciA9IGJwZl9vYmplY3RfX2NvbGxlY3Rfa21vZF9idGZfbmFtZXMob2JqLCBkYXRhLCBuYW1lKTtcbitcdFx0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHByX2luZm8oXCJlbGY6IHNraXBwaW5nIHVucmVjb2duaXplZCBkYXRhIHNlY3Rpb24oJWQpICVzXFxuXCIsXG4gXHRcdFx0XHRcdGlkeCwgbmFtZSk7XG5AQCAtNTgwMyw2ICs1ODg4LDExIEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGJvb2wgaXNfa21vZF9idGZfbmVlZGVkKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0cmV0dXJuIGhhc2htYXBfZmluZChvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWhhc2htYXAsIChsb25nKW5hbWUsIE5VTEwpO1xuK31cbitcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4gXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XG5AQCAtNTg2Nyw2ICs1OTU3LDEyIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdGlmIChvYmotXHUwMDNla21vZF9idGZzIFx1MDAyNlx1MDAyNiBvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZWhhc2htYXAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhaXNfa21vZF9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcbitcdFx0XHRjbG9zZShmZCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0YnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuIFx0XHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XG4gXHRcdGlmIChlcnIpIHtcbkBAIC01ODkxLDYgKzU5ODcsMTAgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XG4rXG4rXHRcdGlmIChvYmotXHUwMDNla21vZF9idGZzIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgb2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2Vucl9uYW1lcyA9PSBvYmotXHUwMDNla21vZF9idGZzLVx1MDAzZW5yX2xvYWRlZClcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbiBcdGlmIChlcnIpIHtcbkBAIC05MDMwLDYgKzkxMzAsMTIgQEAgc3RhdGljIHZvaWQgYnBmX29iamVjdF9jbGVhbnVwX2J0ZihzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0LyogY2xlYW4gdXAgdm1saW51eCBCVEYgKi9cbiBcdGJ0Zl9fZnJlZShvYmotXHUwMDNlYnRmX3ZtbGludXgpO1xuIFx0b2JqLVx1MDAzZWJ0Zl92bWxpbnV4ID0gTlVMTDtcbitcbitcdGlmIChvYmotXHUwMDNla21vZF9idGZzKSB7XG4rXHRcdGhhc2htYXBfX2ZyZWUob2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VoYXNobWFwKTtcbitcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWttb2RfYnRmcy1cdTAwM2VkYXRhKTtcbitcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWttb2RfYnRmcyk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJwZl9vYmplY3RfcG9zdF9sb2FkX2NsZWFudXAoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rbW9kX2J0ZnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDg3NWZjY2U2NjgxZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva21vZF9idGZzLmNcbkBAIC0wLDAgKzEsNTIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFwia21vZF9idGZzLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJrbW9kX2J0ZnNfbm9uZXhpc3Quc2tlbC5oXCJcbisjaW5jbHVkZSBcImttb2RfYnRmc19taXguc2tlbC5oXCJcbitcbitzdGF0aWMgdm9pZCBrbW9kX2J0ZnNfcGFzcyh2b2lkKVxuK3tcbitcdHN0cnVjdCBrbW9kX2J0ZnMgKmttb2RfYnRmc19za2VsO1xuK1xuK1x0a21vZF9idGZzX3NrZWwgPSBrbW9kX2J0ZnNfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihrbW9kX2J0ZnNfc2tlbCwgXCJrbW9kX2J0ZnNfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGttb2RfYnRmc19fZGVzdHJveShrbW9kX2J0ZnNfc2tlbCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGttb2RfYnRmc19ub25leGlzdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBrbW9kX2J0ZnNfbm9uZXhpc3QgKmttb2RfYnRmc19ub25leGlzdF9za2VsO1xuK1xuK1x0a21vZF9idGZzX25vbmV4aXN0X3NrZWwgPSBrbW9kX2J0ZnNfbm9uZXhpc3RfX29wZW5fYW5kX2xvYWQoKTtcbitcdEFTU0VSVF9OVUxMKGttb2RfYnRmc19ub25leGlzdF9za2VsLCBcImttb2RfYnRmc19ub25leGlzdF9fb3Blbl9hbmRfbG9hZFwiKTtcbit9XG4rXG4rc3RhdGljIHZvaWQga21vZF9idGZzX21peCh2b2lkKVxuK3tcbitcdHN0cnVjdCBrbW9kX2J0ZnNfbWl4ICprbW9kX2J0ZnNfbWl4X3NrZWw7XG4rXG4rXHRrbW9kX2J0ZnNfbWl4X3NrZWwgPSBrbW9kX2J0ZnNfbWl4X19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoa21vZF9idGZzX21peF9za2VsLCBcImttb2RfYnRmc19taXhfX29wZW5fYW5kX2xvYWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGttb2RfYnRmc19taXhfX2Rlc3Ryb3koa21vZF9idGZzX21peF9za2VsKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2ttb2RfYnRmcyh2b2lkKVxuK3tcbitcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJrbW9kX2J0ZnNfcGFzc1wiKSlcbitcdFx0a21vZF9idGZzX3Bhc3MoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia21vZF9idGZzX25vbmV4aXN0XCIpKVxuK1x0XHRrbW9kX2J0ZnNfbm9uZXhpc3QoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia21vZF9idGZzX21peFwiKSlcbitcdFx0a21vZF9idGZzX21peCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44Yjk4NmJjMmU5ZmY3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzLmNcbkBAIC0wLDAgKzEsMTQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rXG4rU0VDKFwiZmV4aXQvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCIpXG4raW50IHRlc3Rfa21vZF9idGZzKHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rREVGSU5FX0tNT0RfQlRGUyhfbmVlZGVkX2ttb2RzKSA9IHsgXCJicGZfdGVzdG1vZFwiIH07XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnNfbWl4LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX21peC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjQ0NWNmNTZhYjE2MVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2ttb2RfYnRmc19taXguY1xuQEAgLTAsMCArMSwxNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbitTRUMoXCJmZXhpdC9icGZfdGVzdG1vZF9sb29wX3Rlc3RcIilcbitpbnQgdGVzdF9rbW9kX2J0ZnNfbWl4KHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogbWl4IG9mIGR1cGxpY2F0ZWQgYW5kIHVubmVlZGVkIG1vZHVsZXMgKi9cbitERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyBcImJwZl90ZXN0bW9kXCIsIFwiYnBmX3Rlc3Rtb2RcIiwgXCJicGZfdGVzdF9ub19jZmlcIiB9O1xuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX25vbmV4aXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX25vbmV4aXN0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNjM4MzYxZTU3MzIyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX25vbmV4aXN0LmNcbkBAIC0wLDAgKzEsMTggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rXG4rU0VDKFwiZmV4aXQvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCIpXG4raW50IHRlc3Rfa21vZF9idGZzX25vbmV4aXN0KHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBUaGlzIHNob3VsZCBmYWlsIHRvIGxvYWQsIGJlY2F1c2UgLmttb2RfYnRmcyBkb2VzIG5vdCBjb250YWluXG4rICogdGhlIG5lZWRlZCBtb2R1bGUgJ2JwZl90ZXN0bW9kJy5cbisgKi9cbitERUZJTkVfS01PRF9CVEZTKF9uZWVkZWRfa21vZHMpID0geyBcIm1vZHVsZV9ub25leGlzdFwiIH07XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDQ6MTk6MTIuMTU2NTc0MjI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0NDUzNDc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCBhbmQgYHRvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaGAsIHBsdXMgc29tZSBzZWxmdGVzdHMuIFNlZW1zIGxpa2UgaXQncyBpbnRyb2R1Y2luZyBhIG5ldyBmZWF0dXJlIHRvIGxpYmJwZiByZWxhdGVkIHRvIGxvYWRpbmcgQlRGIGZvciBrZXJuZWwgbW9kdWxlcyB2aWEgYSBgLmttb2RfYnRmc2AgRUxGIHNlY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB1c2Vyc3BhY2UsIGxpYmJwZiBjaGFuZ2VzLiBCdXQgSSBhbHdheXMgZG91YmxlLWNoZWNrLlxuXG5MZXQgbWUgdmVyaWZ5Li4uIG9rYXksIEkgc2VlIHRoZSBkaWZmIHNob3dzIGNoYW5nZXMgb25seSBpbiBgdG9vbHMvbGliL2JwZi9gIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIFNwZWNpZmljYWxseSwgSSBhbSBzZWVpbmcgdXBkYXRlcyB0bzogYHRvb2xzL2xpYi9icGYvYnBmX2hlbHBlcnMuaGAsIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ttb2RfYnRmcy5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rbW9kX2J0ZnMuY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX21peC5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva21vZF9idGZzX25vbmV4aXN0LmNgLiBObyBrZXJuZWwgY29kZSBjaGFuZ2VzIGhlcmUgYXQgYWxsLiBXZSBhcmUgZ29vZC5cblxuU2luY2UgYHRvb2xzL2AgaXMgdXNlcnNwYWNlIGNvZGUg4oCTIGBsaWJicGZgIGlzIGEgdXNlcnNwYWNlIGxpYnJhcnkg4oCTIHRoaXMgKmRlZmluaXRlbHkqIGRvZXNuJ3QgcmVxdWlyZSBrZXJuZWwgZnV6emluZy4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCBhIHRvb2wgbGlrZSBzeXprYWxsZXIgd291bGQgbmVlZCB0byBleGFtaW5lLiBFdmVuIGlmIHN5emthbGxlciAqZGlkKiBmdXp6IGBsaWJicGZgICh3aGljaCBpdCBkb2Vzbid0LCBpdCB1c2VzIHRoZSBzeXNjYWxsKSwgaXQncyBzdGlsbCBhIHVzZXJzcGFjZSBjaGFuZ2UuXG5cbkFscmlnaHQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBkb3VibGUtY2hlY2sgYWdhaW4uLi4gTm9wZSwgbm90aGluZy4gT25seSBjaGFuZ2VzIGluIGB0b29scy9saWIvYnBmL2AgYW5kIHRoZSBgc2VsZnRlc3RzYC5cblxuVGhlcmVmb3JlLCBJJ20gY29tZm9ydGFibGUgc2F5aW5nIGBXb3J0aEZ1enppbmc6IGZhbHNlYC4gVGhlIHBhdGNoIGlzIHNvbGVseSB3aXRoaW4gdGhlIHVzZXIgc3BhY2UgY29tcG9uZW50cyBvZiBgbGliYnBmYCBhbmQgZG9lc24ndCBhZmZlY3QgdGhlIGtlcm5lbCdzIGZ1bmN0aW9uYWwgY29kZS5cblxuSSB3aWxsIHNldCB0aGUgcmVzdWx0cywgaW5kaWNhdGluZyBgV29ydGhGdXp6aW5nOiBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MTYsIk91dHB1dFRva2VucyI6NjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNDoxOToxOS4zMDExMTI2NDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXJzcGFjZSBsaWJicGYgbGlicmFyeSAodG9vbHMvbGliL2JwZikgYW5kIGFkZHMgc2VsZnRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHVzZXJzcGFjZSBsaWJicGYgbGlicmFyeSAodG9vbHMvbGliL2JwZikgYW5kIGFkZHMgc2VsZnRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA0OjE5OjE5LjMwMTE2ODA3NloiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowj9wkk[1] Phase: Running StartedAt: 2026-08-13 04:19:41 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9wkk[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-13 04:19:41 +0000 UTC FinishedAt: 2026-08-13 04:19:45 +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,}