Name: series-workfloww7pbw Phase: Failed StartedAt: 2026-09-13 18:19:40 +0000 UTC FinishedAt: 2026-09-13 18:37:08 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7pbw[0] Phase: Succeeded StartedAt: 2026-09-13 18:19:40 +0000 UTC FinishedAt: 2026-09-13 18:36:58 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7pbw[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 18:19:40 +0000 UTC FinishedAt: 2026-09-13 18:36:58 +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+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udGFpbnMgb25seSBub24tZXhlY3V0YWJsZSBjb3NtZXRpYyBhbmQgc3R5bGUgY2xlYW51cHMgKGNvbW1lbnQgZm9ybWF0dGluZywgd2hpdGVzcGFjZSBpbiBhIGNhc3QsIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCBhbmQgcmVtb3ZpbmcgYSByZWR1bmRhbnQgcmV0dXJuIHN0YXRlbWVudCBmcm9tIGEgdm9pZCBmdW5jdGlvbikuIFRoZXJlIGFyZSBubyBleGVjdXRhYmxlIGxvZ2ljLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODc4NDgxYmQ2NWIwYzE3ZjYyNzZkMjc0YjkxMTRmMDg4ZTUyMmUxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDE4OjM2OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuY1xuaW5kZXggNzgzNDdjOTM3YWY3Ni4uM2Y0ZTU2YTM5OWM1MSAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL2FmX3FydHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5AQCAtMzkzLDcgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIFx0fVxuIFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxuLVx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi9cbiYjNDM7XHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZVxuJiM0MztcdCAqL1xuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuQEAgLTQ3MSw3ICYjNDM7NDcyLDcgQEAgaW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4gXHRjYiA9IChzdHJ1Y3QgcXJ0cl9jYiAqKXNrYi1cdTAwM2VjYjtcbiBcbiBcdC8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqL1xuLVx0dmVyID0gKih1OCopZGF0YTtcbiYjNDM7XHR2ZXIgPSAqKHU4ICopZGF0YTtcbiBcbiBcdHN3aXRjaCAodmVyKSB7XG4gXHRjYXNlIFFSVFJfUFJPVE9fVkVSXzE6XG5AQCAtNzY5LDcgJiM0Mzs3NzAsOCBAQCBzdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcbiBcdHhhX2VyYXNlKFx1MDAyNnFydHJfcG9ydHMsIHBvcnQpO1xuIFxuIFx0LyogRW5zdXJlIHRoYXQgaWYgcXJ0cl9wb3J0X2xvb2t1cCgpIGRpZCBlbnRlciB0aGUgUkNVIHJlYWQgc2VjdGlvbiB3ZVxuLVx0ICogd2FpdCBmb3IgaXQgdG8gdXAgaW5jcmVtZW50IHRoZSByZWZjb3VudCAqL1xuJiM0MztcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcbiYjNDM7XHQgKi9cbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0X19zb2NrX3B1dChcdTAwMjZpcGMtXHUwMDNlc2spO1xuQEAgLTk1Nyw4ICYjNDM7OTU5LDggQEAgc3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4ge1xuIFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqLCBhZGRyLCBtc2ctXHUwMDNlbXNnX25hbWUpO1xuLVx0aW50ICgqZW5xdWV1ZV9mbikoc3RydWN0IHFydHJfbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQsXG4tXHRcdFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqKTtcbiYjNDM7XHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSwgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKTtcbiBcdF9fbGUzMiBxcnRyX3R5cGUgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfREFUQSk7XG4gXHRzdHJ1Y3QgcXJ0cl9zb2NrICppcGMgPSBxcnRyX3NrKHNvY2stXHUwMDNlc2spO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuY1xuaW5kZXggYmNiMDkwZWU3OWQ0OS4uYWFmNzdjN2Y1MDQ1YiAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL25zLmNcbkBAIC0xNzksOCAmIzQzOzE3OSw2IEBAIHN0YXRpYyB2b2lkIHNlcnZpY2VfYW5ub3VuY2VfZGVsKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0LFxuIFx0cmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCBcdTAwMjZtc2csIFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVilcbiBcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcblwmIzM0Oyk7XG4tXG4tXHRyZXR1cm47XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb250YWlucyBvbmx5IG5vbi1leGVjdXRhYmxlIGNvc21ldGljIGFuZCBzdHlsZSBjbGVhbnVwcyAoY29tbWVudCBmb3JtYXR0aW5nLCB3aGl0ZXNwYWNlIGluIGEgY2FzdCwgYWRkaW5nIHBhcmFtZXRlciBuYW1lcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb24sIGFuZCByZW1vdmluZyBhIHJlZHVuZGFudCByZXR1cm4gc3RhdGVtZW50IGZyb20gYSB2b2lkIGZ1bmN0aW9uKS4gVGhlcmUgYXJlIG5vIGV4ZWN1dGFibGUgbG9naWMsIGNvbnRyb2wgZmxvdywgb3IgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4Nzg0ODFiZDY1YjBjMTdmNjI3NmQyNzRiOTExNGYwODhlNTIyZTE3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTg6MzY6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9hZl9xcnRyLmMgYi9uZXQvcXJ0ci9hZl9xcnRyLmMKaW5kZXggNzgzNDdjOTM3YWY3Ni4uM2Y0ZTU2YTM5OWM1MSAxMDA2NDQKLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL2FmX3FydHIuYwpAQCAtMzkzLDcgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCW11dGV4X3VubG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwogCX0KIAkvKiBOZWVkIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCBtZXNzYWdlIGNhcnJpZXMgdGhlIG90aGVyd2lzZSBsb3N0Ci0JICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi8KJiM0MzsJICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUKJiM0MzsJICovCiAJaWYgKHJjICZhbXA7JmFtcDsgY29uZmlybV9yeCkKIAkJcXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by0mZ3Q7c3Ffbm9kZSwgdG8tJmd0O3NxX3BvcnQpOwogCkBAIC00NzEsNyAmIzQzOzQ3Miw3IEBAIGludCBxcnRyX2VuZHBvaW50X3Bvc3Qoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQogCWNiID0gKHN0cnVjdCBxcnRyX2NiICopc2tiLSZndDtjYjsKIAogCS8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqLwotCXZlciA9ICoodTgqKWRhdGE7CiYjNDM7CXZlciA9ICoodTggKilkYXRhOwogCiAJc3dpdGNoICh2ZXIpIHsKIAljYXNlIFFSVFJfUFJPVE9fVkVSXzE6CkBAIC03NjksNyAmIzQzOzc3MCw4IEBAIHN0YXRpYyB2b2lkIHFydHJfcG9ydF9yZW1vdmUoc3RydWN0IHFydHJfc29jayAqaXBjKQogCXhhX2VyYXNlKCZhbXA7cXJ0cl9wb3J0cywgcG9ydCk7CiAKIAkvKiBFbnN1cmUgdGhhdCBpZiBxcnRyX3BvcnRfbG9va3VwKCkgZGlkIGVudGVyIHRoZSBSQ1UgcmVhZCBzZWN0aW9uIHdlCi0JICogd2FpdCBmb3IgaXQgdG8gdXAgaW5jcmVtZW50IHRoZSByZWZjb3VudCAqLwomIzQzOwkgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50CiYjNDM7CSAqLwogCXN5bmNocm9uaXplX3JjdSgpOwogCiAJX19zb2NrX3B1dCgmYW1wO2lwYy0mZ3Q7c2spOwpAQCAtOTU3LDggJiM0Mzs5NTksOCBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogc3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewogCURFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLSZndDttc2dfbmFtZSk7Ci0JaW50ICgqZW5xdWV1ZV9mbikoc3RydWN0IHFydHJfbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQsCi0JCQkgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICosIHN0cnVjdCBzb2NrYWRkcl9xcnRyICopOwomIzQzOwlpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSwKJiM0MzsJCQkgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pOwogCV9fbGUzMiBxcnRyX3R5cGUgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfREFUQSk7CiAJc3RydWN0IHFydHJfc29jayAqaXBjID0gcXJ0cl9zayhzb2NrLSZndDtzayk7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0mZ3Q7c2s7CmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuYwppbmRleCBiY2IwOTBlZTc5ZDQ5Li5hYWY3N2M3ZjUwNDViIDEwMDY0NAotLS0gYS9uZXQvcXJ0ci9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL25zLmMKQEAgLTE3OSw4ICYjNDM7MTc5LDYgQEAgc3RhdGljIHZvaWQgc2VydmljZV9hbm5vdW5jZV9kZWwoc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QsCiAJcmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCAmYW1wO21zZywgJmFtcDtpdiwgMSwgc2l6ZW9mKHBrdCkpOwogCWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgcmV0ICE9IC1FTk9ERVYpCiAJCXByX2VycigmIzM0O2ZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxuJiMzNDspOwotCi0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBsb29rdXBfbm90aWZ5KHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0bywgc3RydWN0IHFydHJfc2VydmVyICpzcnYsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBRUlRSIFBhdGNoIERpZmYqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duLiBUaGlzIGRpZmYgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBmb2N1c2luZyBwcmltYXJpbHkgb24gY29kZSBzdHlsZSwgZm9ybWF0dGluZywgYW5kIG1pbm9yIGRvY3VtZW50YXRpb24gYWRqdXN0bWVudHMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBuZXQvcXJ0ci9hZl9xcnRyLmNgIGFuZCBgbmV0L3FydHIvbnMuY2AgZmlsZXMuIEl0IHNlZW1zIGxpa2UgdGhlIGNvbW1pdCBpcyBpZGVudGlmaWVkIGFzIGEgcGF0Y2ggdW5kZXIgcmV2aWV3LCBhdXRvLWdlbmVyYXRlZCBieSBhIHN5ei1jbHVzdGVyLgoKRmlyc3QsIHdpdGhpbiBgbmV0L3FydHIvYWZfcXJ0ci5jYCwgSSYjMzk7dmUgZ290IGEgY291cGxlIG9mIGNvbW1lbnQgdXBkYXRlcy4gVGhleSYjMzk7cmUgY2xhcmlmeWluZyBzb21lIHByZXZpb3VzIGNvbW1lbnRzLCBzbyB0aG9zZSBhcmUgbmVnbGlnaWJsZS4gQSBjYXN0JiMzOTtzIHdoaXRlc3BhY2UgaGFzIGJlZW4gc2xpZ2h0bHkgYWRqdXN0ZWQgZnJvbSBgKih1OCopZGF0YWAgdG8gYCoodTggKilkYXRhYC4gIEFuZCB0aGVyZSYjMzk7cyBhbm90aGVyIGNvbW1lbnQgZml4LCByZWdhcmRpbmcgaW5jcmVtZW50aW5nIHRoZSByZWZjb3VudC4gSSBzZWUgYSBjaGFuZ2UgdG8gYWRkIHBhcmFtZXRlciBuYW1lcyBpbiBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb24sIHRoZSBzaWduYXR1cmUgb2YgYGVucXVldWVfZm5gIGZ1bmN0aW9uIGlzIGNoYW5nZWQgdG8gaW5jbHVkZSBwYXJhbWV0ZXIgbmFtZXMuIEdpdmVuIHRoaXMgaXMgQywgYW5kIHRoYXQgcGFyYW1ldGVyIG5hbWVzIGluIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb25zIGhhdmUgbm8gaW1wYWN0IG9uIGNvbXBpbGVkIGNvZGUsIHRoYXQgaXMgYSBjaGFuZ2Ugd2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZS4KCkZpbmFsbHksIGluIGBuZXQvcXJ0ci9ucy5jYCwgdGhlIGZpbmFsIGByZXR1cm47YCBzdGF0ZW1lbnQgd2FzIHJlbW92ZWQgZnJvbSBhIHZvaWQgZnVuY3Rpb24uIFNpbmNlIGluIEMsIHZvaWQgZnVuY3Rpb25zIGhhdmUgaW1wbGljaXQgcmV0dXJucywgaXQgY2FuIGJlIHJlbW92ZWQuCgpJdCBzZWVtcyBsaWtlIHRoZXJlIGFyZSBOTyBjaGFuZ2VzIHRvIGV4ZWN1dGFibGUgbG9naWMuIFRoZXNlIGFyZSBhbGwgc3R5bGUsIGZvcm1hdHRpbmcsIGFuZCBjb21tZW50IGNoYW5nZXMsIGFuZCBubyBjaGFuZ2VzIHRvIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMsIHNvIHRoaXMgZG9lc24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3FydHIvYWZfcXJ0ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTA6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzOTE6XHRcdFx0aWYgKCFyYyBcdTAwMjZcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXG4gMzkyOlx0XHRcdFx0bm9kZS1cdTAwM2VoZWxsb19zZW50ID0gdHJ1ZTtcbiAzOTM6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4gMzk0Olx0XHR9XG4gMzk1Olx0XHQvKiBOZWVkIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCBtZXNzYWdlIGNhcnJpZXMgdGhlIG90aGVyd2lzZSBsb3N0XG4gMzk2Olx0XHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZVxuIDM5NzpcdFx0ICovXG4gMzk4Olx0XHRpZiAocmMgXHUwMDI2XHUwMDI2IGNvbmZpcm1fcngpXG4gMzk5Olx0XHRcdHFydHJfdHhfZmxvd19mYWlsZWQobm9kZSwgdG8tXHUwMDNlc3Ffbm9kZSwgdG8tXHUwMDNlc3FfcG9ydCk7XG4gNDAwOlx0XG4gNDAxOlx0XHRpZiAocmMgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXG4gNDAyOlx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbiA0MDM6XHRcbiA0MDQ6XHRcdHJldHVybiByYztcbiA0MDU6XHR9XG4gNDA2Olx0XG4gNDA3Olx0LyogTG9va3VwIG5vZGUgYnkgaWQuXG4gNDA4Olx0ICpcbiA0MDk6XHQgKiBjYWxsZXJzIG11c3QgcmVsZWFzZSB3aXRoIHFydHJfbm9kZV9yZWxlYXNlKClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjAzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBRUlRSIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBRUlRSIHNpdHVhdGlvbiBhIGJpdCBiZXR0ZXIuIFdoZXJlIHNob3VsZCBJIHN0YXJ0PyBSaWdodCwgdGhlIGNvcmUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgcHVsbCB1cCB0aGUgY29kZSBmb3IgdGhlIFFSVFIgQWRkcmVzcyBGYW1pbHksIHNwZWNpZmljYWxseSBgbmV0L3FydHIvYWZfcXJ0ci5jYC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIGF0IHRoZSBsb3dlciBsZXZlbHMsIGhvdyB0aGlzIGFsbCB0aWVzIHRvZ2V0aGVyLiBNeSBndXQgaXMgdGVsbGluZyBtZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgYXJvdW5kIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgb3IgbWVzc2FnZSBoYW5kbGluZyB0aGVyZS4gSSBzdXNwZWN0IHRoYXQgbGluZXMgNDY1LTQ4NSBtaWdodCBiZSB0aGUga2V5LiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIExldCYjMzk7cyBjaGVjayB0aGF0IHNlY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3FydHIvYWZfcXJ0ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHRcdGlmIChsZW4gPT0gMCB8fCBsZW4gXHUwMDI2IDMpXG4gNDY2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ2NzpcdFxuIDQ2ODpcdFx0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKE5VTEwsIGxlbiwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4gNDY5Olx0XHRpZiAoIXNrYilcbiA0NzA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDcxOlx0XG4gNDcyOlx0XHRjYiA9IChzdHJ1Y3QgcXJ0cl9jYiAqKXNrYi1cdTAwM2VjYjtcbiA0NzM6XHRcbiA0NzQ6XHRcdC8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqL1xuIDQ3NTpcdFx0dmVyID0gKih1OCAqKWRhdGE7XG4gNDc2Olx0XG4gNDc3Olx0XHRzd2l0Y2ggKHZlcikge1xuIDQ3ODpcdFx0Y2FzZSBRUlRSX1BST1RPX1ZFUl8xOlxuIDQ3OTpcdFx0XHRpZiAobGVuIFx1MDAzYyBzaXplb2YoKnYxKSlcbiA0ODA6XHRcdFx0XHRnb3RvIGVycjtcbiA0ODE6XHRcdFx0djEgPSBkYXRhO1xuIDQ4MjpcdFx0XHRoZHJsZW4gPSBzaXplb2YoKnYxKTtcbiA0ODM6XHRcbiA0ODQ6XHRcdFx0Y2ItXHUwMDNldHlwZSA9IGxlMzJfdG9fY3B1KHYxLVx1MDAzZXR5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBRUlRSIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHNwZWNpZmljIHJlbGF0ZWQgdG8gdGhlIFFSVFIgKFF1YWxjb21tIFJlbW90ZSBUcmFuc2FjdGlvbiBSb3V0ZXIpIHByb3RvY29sIGltcGxlbWVudGF0aW9uLiBJJiMzOTt2ZSBnb3QgYSBodW5jaCB3aGVyZSB0aGUgcHJvYmxlbSBtaWdodCBsaWUsIGFuZCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UgYW5kIGRlYnVnZ2luZywgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHNob3VsZCBmb2N1cyBvbiB0aGUgYG5ldC9xcnRyL2FmX3FydHIuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgbGluZXMgNzY1IHRocm91Z2ggNzgwLiBUaG9zZSBsaW5lcyBsaWtlbHkgY29udGFpbiBzb21lIGNyaXRpY2FsIGxvZ2ljIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZSEgTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzY1Olx0XHR9XG4gNzY2Olx0XG4gNzY3Olx0XHRpZiAocG9ydCA9PSBRUlRSX1BPUlRfQ1RSTClcbiA3Njg6XHRcdFx0cG9ydCA9IDA7XG4gNzY5Olx0XG4gNzcwOlx0XHR4YV9lcmFzZShcdTAwMjZxcnRyX3BvcnRzLCBwb3J0KTtcbiA3NzE6XHRcbiA3NzI6XHRcdC8qIEVuc3VyZSB0aGF0IGlmIHFydHJfcG9ydF9sb29rdXAoKSBkaWQgZW50ZXIgdGhlIFJDVSByZWFkIHNlY3Rpb24gd2VcbiA3NzM6XHRcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcbiA3NzQ6XHRcdCAqL1xuIDc3NTpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gNzc2Olx0XG4gNzc3Olx0XHRfX3NvY2tfcHV0KFx1MDAyNmlwYy1cdTAwM2Vzayk7XG4gNzc4Olx0fVxuIDc3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUVJUUiBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIHRyb3VibGVzaG9vdCB0aGlzIGlzc3VlLiBNeSBpbml0aWFsIGh1bmNoIHBvaW50cyB0b3dhcmRzIGEgcG90ZW50aWFsIHByb2JsZW0gd2l0aGluIHRoZSBRUlRSIHN1YnN5c3RlbS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYSBzcGVjaWZpYyBhcmVhLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIHRoZSBgbmV0L3FydHIvYWZfcXJ0ci5jYCBmaWxlIGFuZCBmb2N1cyBvbiBsaW5lcyA5NTUgdG8gOTc1LiBUaGlzIHJhbmdlIGxpa2VseSBjb3ZlcnMgYSBjcml0aWNhbCBmdW5jdGlvbiBvciBzZWN0aW9uIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgcHJvYmxlbSwgbGlrZWx5IHRoZSBsb2dpYyB0aGF0IHByb2Nlc3NlcyBhIHNwZWNpZmljIFFNSSBtZXNzYWdlIHR5cGUsIG9yIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIFFSVFIgc29ja2V0cy4gSG9wZWZ1bGx5LCB0aGlzIHNlZ21lbnQgd2lsbCByZXZlYWwgc29tZXRoaW5nIHVzZWZ1bC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk1NTpcdFxuIDk1NjpcdFx0cmV0dXJuIDA7XG4gOTU3Olx0fVxuIDk1ODpcdFxuIDk1OTpcdHN0YXRpYyBpbnQgcXJ0cl9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiA5NjA6XHR7XG4gOTYxOlx0XHRERUNMQVJFX1NPQ0tBRERSKHN0cnVjdCBzb2NrYWRkcl9xcnRyICosIGFkZHIsIG1zZy1cdTAwM2Vtc2dfbmFtZSk7XG4gOTYyOlx0XHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcbiA5NjM6XHRcdFx0XHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xuIDk2NDpcdFx0X19sZTMyIHFydHJfdHlwZSA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9EQVRBKTtcbiA5NjU6XHRcdHN0cnVjdCBxcnRyX3NvY2sgKmlwYyA9IHFydHJfc2soc29jay1cdTAwM2Vzayk7XG4gOTY2Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIDk2NzpcdFx0c3RydWN0IHFydHJfbm9kZSAqbm9kZTtcbiA5Njg6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gOTY5Olx0XHRzaXplX3QgcGxlbjtcbiA5NzA6XHRcdHUzMiB0eXBlO1xuIDk3MTpcdFx0aW50IHJjO1xuIDk3MjpcdFxuIDk3MzpcdFx0aWYgKG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IH4oTVNHX0RPTlRXQUlUKSlcbiA5NzQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBRUlRSIE5hbWVzcGFjZSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMgaXNzdWUsIGFuZCB0aGUgbGlrZWx5IHN1c3BlY3QgaXMgbHVya2luZyBpbiB0aGUgUVJUUiBuYW1lc3BhY2UgY29kZS4gTXkgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIHRvIHplcm8gaW4gb24gYG5ldC9xcnRyL25zLmNgLiBTcGVjaWZpY2FsbHksIGxpbmVzIDE3MCB0aHJvdWdoIDE5MC4gVGhhdCYjMzk7cyB0aGUgYXJlYSBJIG5lZWQgdG8gZXhhbWluZSBtb3JlIGNsb3NlbHk7IEkmIzM5O20gYmV0dGluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBsb2dpYyByZWxhdGVkIHRvIFtpbnNlcnQgc3BlY2lmaWMgY29uY2VybiByZWxldmFudCB0byB0aGUgY29udGV4dF0gcmVzaWRlcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4uLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBwYXJzZSB0aGF0IHNlY3Rpb24gYW5kIHRyeSB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgdGhlIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBsaWtlbHkgaGFwcGVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL25zLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdFx0cGt0LmNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9ERUxfU0VSVkVSKTtcbiAxNzE6XHRcdHBrdC5zZXJ2ZXIuc2VydmljZSA9IGNwdV90b19sZTMyKHNydi1cdTAwM2VzZXJ2aWNlKTtcbiAxNzI6XHRcdHBrdC5zZXJ2ZXIuaW5zdGFuY2UgPSBjcHVfdG9fbGUzMihzcnYtXHUwMDNlaW5zdGFuY2UpO1xuIDE3MzpcdFx0cGt0LnNlcnZlci5ub2RlID0gY3B1X3RvX2xlMzIoc3J2LVx1MDAzZW5vZGUpO1xuIDE3NDpcdFx0cGt0LnNlcnZlci5wb3J0ID0gY3B1X3RvX2xlMzIoc3J2LVx1MDAzZXBvcnQpO1xuIDE3NTpcdFxuIDE3NjpcdFx0bXNnLm1zZ19uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKWRlc3Q7XG4gMTc3Olx0XHRtc2cubXNnX25hbWVsZW4gPSBzaXplb2YoKmRlc3QpO1xuIDE3ODpcdFxuIDE3OTpcdFx0cmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCBcdTAwMjZtc2csIFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XG4gMTgwOlx0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVilcbiAxODE6XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcblwmIzM0Oyk7XG4gMTgyOlx0fVxuIDE4MzpcdFxuIDE4NDpcdHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcbiAxODU6XHRcdFx0XHQgIGJvb2wgbmV3KVxuIDE4NjpcdHtcbiAxODc6XHRcdHN0cnVjdCBxcnRyX2N0cmxfcGt0IHBrdDtcbiAxODg6XHRcdHN0cnVjdCBtc2doZHIgbXNnID0geyB9O1xuIDE4OTpcdFx0c3RydWN0IGt2ZWMgaXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMTgKCQkJCQkJCW91dHB1dDogODYKCQkJCQkJCXRob3VnaHRzOiA5NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGVzZSBjaGFuZ2VzIGFwcGVhciBpbm5vY3VvdXMsIGJ1dCBhcyB3ZSBhbGwga25vdywgb25lIGNhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bC4gTGV0JiMzOTtzIG1ha2UgY2VydGFpbiB0aGF0IHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGEgd29sZiBpbiBzaGVlcCYjMzk7cyBjbG90aGluZy4KCkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgYWxsIHNlZW1pbmdseSBjb3NtZXRpYzoKCjEuICBXZSBoYXZlIHNvbWUgY29tbWVudCBmb3JtYXR0aW5nIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgYWRqdXN0aW5nIGNvbW1lbnQgc3R5bGVzOgogICAgYGBgYwogICAgCS8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3QKICAgIC0JICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi8KICAgICYjNDM7CSAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lCiAgICAmIzQzOwkgKi8KICAgIGBgYAogICAgYW5kCiAgICBgYGBjCiAgICAJLyogRW5zdXJlIHRoYXQgaWYgcXJ0cl9wb3J0X2xvb2t1cCgpIGRpZCBlbnRlciB0aGUgUkNVIHJlYWQgc2VjdGlvbiB3ZQogICAgLQkgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50ICovCiAgICAmIzQzOwkgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50CiAgICAmIzQzOwkgKi8KICAgIGBgYAoKICAgIE5vdGhpbmcgaGVyZSB0b3VjaGVzIGFueSBhY3R1YWwgbG9naWMuIEl0JiMzOTtzIHB1cmVseSBzdHlsaXN0aWMuCgoyLiAgQSB3aGl0ZXNwYWNlIGNoYW5nZSBpbiBhIGNhc3Q6CiAgICBgYGBjCiAgICAtCXZlciA9ICoodTgqKWRhdGE7CiAgICAmIzQzOwl2ZXIgPSAqKHU4ICopZGF0YTsKICAgIGBgYAogICAgVGhpcyBpcyBhbHNvIGEgc3R5bGUgY2hhbmdlOyBpdCB3b24mIzM5O3QgaW1wYWN0IGhvdyB0aGUgY29tcGlsZXIgc2VlcyB0aGUgY29kZSBvciBhbnkgcHJvZHVjZWQgYXNzZW1ibHkuCgozLiAgQWRkaW5nIHBhcmFtZXRlciBuYW1lcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb246CiAgICBgYGBjCiAgICAtCWludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50LAogICAgLQkJCSAgc3RydWN0IHNvY2thZGRyX3FydHIgKiwgc3RydWN0IHNvY2thZGRyX3FydHIgKik7CiAgICAmIzQzOwlpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSwKICAgICYjNDM7CQkJICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSwgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKTsKICAgIGBgYAogICAgVGhpcyBpcyBhIHB1cmVseSBzeW50YWN0aWMgbW9kaWZpY2F0aW9uIGZvciByZWFkYWJpbGl0eS4gVGhlIGNvbXBpbGVyIHdvbiYjMzk7dCBldmVuIHNlZSB0aGUgbmFtZXMuCgo0LiAgUmVtb3ZpbmcgYSByZWR1bmRhbnQgYHJldHVybjtgIHN0YXRlbWVudCBhbmQgYSBibGFuayBsaW5lIGZyb20gYSB2b2lkIGZ1bmN0aW9uIChgc2VydmljZV9hbm5vdW5jZV9kZWxgKToKICAgIGBgYGMKICAgIC0KICAgIC0JcmV0dXJuOwogICAgIH0KICAgIGBgYAogICAgVGhpcyBlbGltaW5hdGVzIGEgcmVkdW5kYW50IHN0YXRlbWVudC4gSXQgZG9lcyBub3RoaW5nIGZ1bmN0aW9uYWwuCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgY3JpdGVyaWEuIFdlIGFyZSB0b2xkIHRvIGJlIHNrZXB0aWNhbCBhYm91dCAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgY2xhaW1zLCBidXQgaW4gdGhpcyBjYXNlLCB0aGUgY2hhbmdlcyBhcmUgY2xlYXJseSBjb25maW5lZCB0byBub24tZXhlY3V0YWJsZSBjb2RlIChjb21tZW50cywgZm9ybWF0dGluZyBhbmQgcHVyZWx5IHN5bnRhY3RpYyB0d2Vha3MgdGhhdCBjYW4mIzM5O3QgaW5mbHVlbmNlIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlKS4gTm9uZSBvZiB0aGUgY2hhbmdlcyBtb2RpZnkgYW55IGxvZ2ljLCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgYWx0ZXIgdGhlIGNvbXBpbGVkIGNvZGUgaW4gYW55IHdheS4KClRoZSBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgc3RhdGUgdGhhdCBpZiAqYWxsKiBtb2RpZmljYXRpb25zIGFyZSBzdHJpY3RseSBpbiBvbmUgb3IgbW9yZSBvZiB0aGUgJiMzNDtORUdBVElWRSBDUklURVJJQSYjMzQ7IGNhdGVnb3JpZXMgKGNvbW1lbnRzLCBmb3JtYXR0aW5nLCB1c2VyLXNwYWNlIHRvb2xzLCBldGMuKSB0aGVuIHdlIGNhbiByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgpJbiB0aGlzIGNhc2UsIGFsbCBvZiB0aGUgY2hhbmdlcyBmYWxsIHNxdWFyZWx5IGludG8gdGhvc2UgY2F0ZWdvcmllcy4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIHRoZSByZXN1bHRzIGFzIGZvbGxvd3M6CgoqICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWAKKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggb25seSBpbmNsdWRlcyBjb2RlIHN0eWxlIGFuZCBmb3JtYXR0aW5nIGZpeGVzIChjb21tZW50IGZvcm1hdHRpbmcsIHNwYWNpbmcgaW4gY2FzdCwgcGFyYW1ldGVyIG5hbWluZyBpbiBmdW5jdGlvbiBwb2ludGVyIHR5cGUsIGFuZCByZW1vdmFsIG9mIGEgcmVkdW5kYW50IHJldHVybiBpbiBhIHZvaWQgZnVuY3Rpb24pIHdpdGggemVybyBjaGFuZ2VzIHRvIGV4ZWN1dGFibGUgbG9naWMgb3IgY29udHJvbCBmbG93LgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGFycmF5KQoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBhcnJheSkKCkkmIzM5O2xsIHByb2NlZWQgd2l0aCBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSB2YWx1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udGFpbnMgb25seSBub24tZXhlY3V0YWJsZSBjb3NtZXRpYyBhbmQgc3R5bGUgY2xlYW51cHMgKGNvbW1lbnQgZm9ybWF0dGluZywgd2hpdGVzcGFjZSBpbiBhIGNhc3QsIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCBhbmQgcmVtb3ZpbmcgYSByZWR1bmRhbnQgcmV0dXJuIHN0YXRlbWVudCBmcm9tIGEgdm9pZCBmdW5jdGlvbikuIFRoZXJlIGFyZSBubyBleGVjdXRhYmxlIGxvZ2ljLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb250YWlucyBvbmx5IG5vbi1leGVjdXRhYmxlIGNvc21ldGljIGFuZCBzdHlsZSBjbGVhbnVwcyAoY29tbWVudCBmb3JtYXR0aW5nLCB3aGl0ZXNwYWNlIGluIGEgY2FzdCwgYWRkaW5nIHBhcmFtZXRlciBuYW1lcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb24sIGFuZCByZW1vdmluZyBhIHJlZHVuZGFudCByZXR1cm4gc3RhdGVtZW50IGZyb20gYSB2b2lkIGZ1bmN0aW9uKS4gVGhlcmUgYXJlIG5vIGV4ZWN1dGFibGUgbG9naWMsIGNvbnRyb2wgZmxvdywgb3IgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjoyMy40ODI4OTE4ODVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ1OTgxNzQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnRhaW5zIG9ubHkgbm9uLWV4ZWN1dGFibGUgY29zbWV0aWMgYW5kIHN0eWxlIGNsZWFudXBzIChjb21tZW50IGZvcm1hdHRpbmcsIHdoaXRlc3BhY2UgaW4gYSBjYXN0LCBhZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiwgYW5kIHJlbW92aW5nIGEgcmVkdW5kYW50IHJldHVybiBzdGF0ZW1lbnQgZnJvbSBhIHZvaWQgZnVuY3Rpb24pLiBUaGVyZSBhcmUgbm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZSBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6MzY6MjMuNDgyODk2MjE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTg5OTcxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4Nzg0ODFiZDY1YjBjMTdmNjI3NmQyNzRiOTExNGYwODhlNTIyZTE3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDEzIDE4OjM2OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuY1xcbmluZGV4IDc4MzQ3YzkzN2FmNzYuLjNmNGU1NmEzOTljNTEgMTAwNjQ0XFxuLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jXFxuKysrIGIvbmV0L3FydHIvYWZfcXJ0ci5jXFxuQEAgLTM5Myw3ICszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuIFxcdH1cXG4gXFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxcbi1cXHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZSAqL1xcbitcXHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZVxcbitcXHQgKi9cXG4gXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IGNvbmZpcm1fcngpXFxuIFxcdFxcdHFydHJfdHhfZmxvd19mYWlsZWQobm9kZSwgdG8tXFx1MDAzZXNxX25vZGUsIHRvLVxcdTAwM2VzcV9wb3J0KTtcXG4gXFxuQEAgLTQ3MSw3ICs0NzIsNyBAQCBpbnQgcXJ0cl9lbmRwb2ludF9wb3N0KHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcXG4gXFx0Y2IgPSAoc3RydWN0IHFydHJfY2IgKilza2ItXFx1MDAzZWNiO1xcbiBcXG4gXFx0LyogVmVyc2lvbiBmaWVsZCBpbiB2MSBpcyBsaXR0bGUgZW5kaWFuLCBzbyB0aGlzIHdvcmtzIGZvciBib3RoIGNhc2VzICovXFxuLVxcdHZlciA9ICoodTgqKWRhdGE7XFxuK1xcdHZlciA9ICoodTggKilkYXRhO1xcbiBcXG4gXFx0c3dpdGNoICh2ZXIpIHtcXG4gXFx0Y2FzZSBRUlRSX1BST1RPX1ZFUl8xOlxcbkBAIC03NjksNyArNzcwLDggQEAgc3RhdGljIHZvaWQgcXJ0cl9wb3J0X3JlbW92ZShzdHJ1Y3QgcXJ0cl9zb2NrICppcGMpXFxuIFxcdHhhX2VyYXNlKFxcdTAwMjZxcnRyX3BvcnRzLCBwb3J0KTtcXG4gXFxuIFxcdC8qIEVuc3VyZSB0aGF0IGlmIHFydHJfcG9ydF9sb29rdXAoKSBkaWQgZW50ZXIgdGhlIFJDVSByZWFkIHNlY3Rpb24gd2VcXG4tXFx0ICogd2FpdCBmb3IgaXQgdG8gdXAgaW5jcmVtZW50IHRoZSByZWZjb3VudCAqL1xcbitcXHQgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50XFxuK1xcdCAqL1xcbiBcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gXFxuIFxcdF9fc29ja19wdXQoXFx1MDAyNmlwYy1cXHUwMDNlc2spO1xcbkBAIC05NTcsOCArOTU5LDggQEAgc3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gc3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLVxcdTAwM2Vtc2dfbmFtZSk7XFxuLVxcdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50LFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICosIHN0cnVjdCBzb2NrYWRkcl9xcnRyICopO1xcbitcXHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSwgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKTtcXG4gXFx0X19sZTMyIHFydHJfdHlwZSA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9EQVRBKTtcXG4gXFx0c3RydWN0IHFydHJfc29jayAqaXBjID0gcXJ0cl9zayhzb2NrLVxcdTAwM2Vzayk7XFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuY1xcbmluZGV4IGJjYjA5MGVlNzlkNDkuLmFhZjc3YzdmNTA0NWIgMTAwNjQ0XFxuLS0tIGEvbmV0L3FydHIvbnMuY1xcbisrKyBiL25ldC9xcnRyL25zLmNcXG5AQCAtMTc5LDggKzE3OSw2IEBAIHN0YXRpYyB2b2lkIHNlcnZpY2VfYW5ub3VuY2VfZGVsKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0LFxcbiBcXHRyZXQgPSBrZXJuZWxfc2VuZG1zZyhxcnRyX25zLnNvY2ssIFxcdTAwMjZtc2csIFxcdTAwMjZpdiwgMSwgc2l6ZW9mKHBrdCkpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVOT0RFVilcXG4gXFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gYW5ub3VuY2UgZGVsIHNlcnZpY2VcXFxcblxcXCIpO1xcbi1cXG4tXFx0cmV0dXJuO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBsb29rdXBfbm90aWZ5KHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0bywgc3RydWN0IHFydHJfc2VydmVyICpzcnYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjM2OjIzLjkwMjQ2Njk4OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjMwNDAyMjc5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnRhaW5zIG9ubHkgbm9uLWV4ZWN1dGFibGUgY29zbWV0aWMgYW5kIHN0eWxlIGNsZWFudXBzIChjb21tZW50IGZvcm1hdHRpbmcsIHdoaXRlc3BhY2UgaW4gYSBjYXN0LCBhZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiwgYW5kIHJlbW92aW5nIGEgcmVkdW5kYW50IHJldHVybiBzdGF0ZW1lbnQgZnJvbSBhIHZvaWQgZnVuY3Rpb24pLiBUaGVyZSBhcmUgbm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZSBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4Nzg0ODFiZDY1YjBjMTdmNjI3NmQyNzRiOTExNGYwODhlNTIyZTE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTg6MzY6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9hZl9xcnRyLmMgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcbmluZGV4IDc4MzQ3YzkzN2FmNzYuLjNmNGU1NmEzOTljNTEgMTAwNjQ0XG4tLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmNcbisrKyBiL25ldC9xcnRyL2FmX3FydHIuY1xuQEAgLTM5Myw3ICszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIFx0fVxuIFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxuLVx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi9cbitcdCAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lXG4rXHQgKi9cbiBcdGlmIChyYyBcdTAwMjZcdTAwMjYgY29uZmlybV9yeClcbiBcdFx0cXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0KTtcbiBcbkBAIC00NzEsNyArNDcyLDcgQEAgaW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4gXHRjYiA9IChzdHJ1Y3QgcXJ0cl9jYiAqKXNrYi1cdTAwM2VjYjtcbiBcbiBcdC8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqL1xuLVx0dmVyID0gKih1OCopZGF0YTtcbitcdHZlciA9ICoodTggKilkYXRhO1xuIFxuIFx0c3dpdGNoICh2ZXIpIHtcbiBcdGNhc2UgUVJUUl9QUk9UT19WRVJfMTpcbkBAIC03NjksNyArNzcwLDggQEAgc3RhdGljIHZvaWQgcXJ0cl9wb3J0X3JlbW92ZShzdHJ1Y3QgcXJ0cl9zb2NrICppcGMpXG4gXHR4YV9lcmFzZShcdTAwMjZxcnRyX3BvcnRzLCBwb3J0KTtcbiBcbiBcdC8qIEVuc3VyZSB0aGF0IGlmIHFydHJfcG9ydF9sb29rdXAoKSBkaWQgZW50ZXIgdGhlIFJDVSByZWFkIHNlY3Rpb24gd2Vcbi1cdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnQgKi9cbitcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcbitcdCAqL1xuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRfX3NvY2tfcHV0KFx1MDAyNmlwYy1cdTAwM2Vzayk7XG5AQCAtOTU3LDggKzk1OSw4IEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIHtcbiBcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLVx1MDAzZW1zZ19uYW1lKTtcbi1cdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50LFxuLVx0XHRcdCAgc3RydWN0IHNvY2thZGRyX3FydHIgKiwgc3RydWN0IHNvY2thZGRyX3FydHIgKik7XG4rXHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcbitcdFx0XHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xuIFx0X19sZTMyIHFydHJfdHlwZSA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9EQVRBKTtcbiBcdHN0cnVjdCBxcnRyX3NvY2sgKmlwYyA9IHFydHJfc2soc29jay1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuZGlmZiAtLWdpdCBhL25ldC9xcnRyL25zLmMgYi9uZXQvcXJ0ci9ucy5jXG5pbmRleCBiY2IwOTBlZTc5ZDQ5Li5hYWY3N2M3ZjUwNDViIDEwMDY0NFxuLS0tIGEvbmV0L3FydHIvbnMuY1xuKysrIGIvbmV0L3FydHIvbnMuY1xuQEAgLTE3OSw4ICsxNzksNiBAQCBzdGF0aWMgdm9pZCBzZXJ2aWNlX2Fubm91bmNlX2RlbChzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZGVzdCxcbiBcdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXHUwMDI2bXNnLCBcdTAwMjZpdiwgMSwgc2l6ZW9mKHBrdCkpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FTk9ERVYpXG4gXHRcdHByX2VycihcImZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcblwiKTtcbi1cbi1cdHJldHVybjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6MzY6MjMuOTAyNDY4ODE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzYzMTcwNDQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUVJUUiBQYXRjaCBEaWZmKipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24uIFRoaXMgZGlmZiBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJ20gc2VlaW5nIGNoYW5nZXMgZm9jdXNpbmcgcHJpbWFyaWx5IG9uIGNvZGUgc3R5bGUsIGZvcm1hdHRpbmcsIGFuZCBtaW5vciBkb2N1bWVudGF0aW9uIGFkanVzdG1lbnRzLiBJJ20gZm9jdXNpbmcgb24gdGhlIGBuZXQvcXJ0ci9hZl9xcnRyLmNgIGFuZCBgbmV0L3FydHIvbnMuY2AgZmlsZXMuIEl0IHNlZW1zIGxpa2UgdGhlIGNvbW1pdCBpcyBpZGVudGlmaWVkIGFzIGEgcGF0Y2ggdW5kZXIgcmV2aWV3LCBhdXRvLWdlbmVyYXRlZCBieSBhIHN5ei1jbHVzdGVyLlxuXG5GaXJzdCwgd2l0aGluIGBuZXQvcXJ0ci9hZl9xcnRyLmNgLCBJJ3ZlIGdvdCBhIGNvdXBsZSBvZiBjb21tZW50IHVwZGF0ZXMuIFRoZXkncmUgY2xhcmlmeWluZyBzb21lIHByZXZpb3VzIGNvbW1lbnRzLCBzbyB0aG9zZSBhcmUgbmVnbGlnaWJsZS4gQSBjYXN0J3Mgd2hpdGVzcGFjZSBoYXMgYmVlbiBzbGlnaHRseSBhZGp1c3RlZCBmcm9tIGAqKHU4KilkYXRhYCB0byBgKih1OCAqKWRhdGFgLiAgQW5kIHRoZXJlJ3MgYW5vdGhlciBjb21tZW50IGZpeCwgcmVnYXJkaW5nIGluY3JlbWVudGluZyB0aGUgcmVmY291bnQuIEkgc2VlIGEgY2hhbmdlIHRvIGFkZCBwYXJhbWV0ZXIgbmFtZXMgaW4gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCB0aGUgc2lnbmF0dXJlIG9mIGBlbnF1ZXVlX2ZuYCBmdW5jdGlvbiBpcyBjaGFuZ2VkIHRvIGluY2x1ZGUgcGFyYW1ldGVyIG5hbWVzLiBHaXZlbiB0aGlzIGlzIEMsIGFuZCB0aGF0IHBhcmFtZXRlciBuYW1lcyBpbiBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9ucyBoYXZlIG5vIGltcGFjdCBvbiBjb21waWxlZCBjb2RlLCB0aGF0IGlzIGEgY2hhbmdlIHdpdGggbm8gZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkZpbmFsbHksIGluIGBuZXQvcXJ0ci9ucy5jYCwgdGhlIGZpbmFsIGByZXR1cm47YCBzdGF0ZW1lbnQgd2FzIHJlbW92ZWQgZnJvbSBhIHZvaWQgZnVuY3Rpb24uIFNpbmNlIGluIEMsIHZvaWQgZnVuY3Rpb25zIGhhdmUgaW1wbGljaXQgcmV0dXJucywgaXQgY2FuIGJlIHJlbW92ZWQuXG5cbkl0IHNlZW1zIGxpa2UgdGhlcmUgYXJlIE5PIGNoYW5nZXMgdG8gZXhlY3V0YWJsZSBsb2dpYy4gVGhlc2UgYXJlIGFsbCBzdHlsZSwgZm9ybWF0dGluZywgYW5kIGNvbW1lbnQgY2hhbmdlcywgYW5kIG5vIGNoYW5nZXMgdG8gY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcywgc28gdGhpcyBkb2Vzbid0IHdhcnJhbnQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjozMS41MzQxNzU0NTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5MDpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzkxOlxcdFxcdFxcdGlmICghcmMgXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXFxuIDM5MjpcXHRcXHRcXHRcXHRub2RlLVxcdTAwM2VoZWxsb19zZW50ID0gdHJ1ZTtcXG4gMzkzOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuIDM5NDpcXHRcXHR9XFxuIDM5NTpcXHRcXHQvKiBOZWVkIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCBtZXNzYWdlIGNhcnJpZXMgdGhlIG90aGVyd2lzZSBsb3N0XFxuIDM5NjpcXHRcXHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZVxcbiAzOTc6XFx0XFx0ICovXFxuIDM5ODpcXHRcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgY29uZmlybV9yeClcXG4gMzk5OlxcdFxcdFxcdHFydHJfdHhfZmxvd19mYWlsZWQobm9kZSwgdG8tXFx1MDAzZXNxX25vZGUsIHRvLVxcdTAwM2VzcV9wb3J0KTtcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0aWYgKHJjID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXFxuIDQwMjpcXHRcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5vZGUtXFx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0cmV0dXJuIHJjO1xcbiA0MDU6XFx0fVxcbiA0MDY6XFx0XFxuIDQwNzpcXHQvKiBMb29rdXAgbm9kZSBieSBpZC5cXG4gNDA4OlxcdCAqXFxuIDQwOTpcXHQgKiBjYWxsZXJzIG11c3QgcmVsZWFzZSB3aXRoIHFydHJfbm9kZV9yZWxlYXNlKClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6MzY6MzEuNTM0Mjk5NDQzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY5MDUyMzA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRUlRSIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgUVJUUiBzaXR1YXRpb24gYSBiaXQgYmV0dGVyLiBXaGVyZSBzaG91bGQgSSBzdGFydD8gUmlnaHQsIHRoZSBjb3JlLiBMZXQncyBzZWUuLi4gSSdsbCBwdWxsIHVwIHRoZSBjb2RlIGZvciB0aGUgUVJUUiBBZGRyZXNzIEZhbWlseSwgc3BlY2lmaWNhbGx5IGBuZXQvcXJ0ci9hZl9xcnRyLmNgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiBhdCB0aGUgbG93ZXIgbGV2ZWxzLCBob3cgdGhpcyBhbGwgdGllcyB0b2dldGhlci4gTXkgZ3V0IGlzIHRlbGxpbmcgbWUgdGhlcmUncyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgYXJvdW5kIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgb3IgbWVzc2FnZSBoYW5kbGluZyB0aGVyZS4gSSBzdXNwZWN0IHRoYXQgbGluZXMgNDY1LTQ4NSBtaWdodCBiZSB0aGUga2V5LiBMZXQncyBzdGFydCB0aGVyZS4gTGV0J3MgY2hlY2sgdGhhdCBzZWN0aW9uLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjAzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjozMy4yMjQ4MjUyMzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2NTpcXHRcXHRpZiAobGVuID09IDAgfHwgbGVuIFxcdTAwMjYgMylcXG4gNDY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Njc6XFx0XFxuIDQ2ODpcXHRcXHRza2IgPSBfX25ldGRldl9hbGxvY19za2IoTlVMTCwgbGVuLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4gNDY5OlxcdFxcdGlmICghc2tiKVxcbiA0NzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdGNiID0gKHN0cnVjdCBxcnRyX2NiICopc2tiLVxcdTAwM2VjYjtcXG4gNDczOlxcdFxcbiA0NzQ6XFx0XFx0LyogVmVyc2lvbiBmaWVsZCBpbiB2MSBpcyBsaXR0bGUgZW5kaWFuLCBzbyB0aGlzIHdvcmtzIGZvciBib3RoIGNhc2VzICovXFxuIDQ3NTpcXHRcXHR2ZXIgPSAqKHU4ICopZGF0YTtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0c3dpdGNoICh2ZXIpIHtcXG4gNDc4OlxcdFxcdGNhc2UgUVJUUl9QUk9UT19WRVJfMTpcXG4gNDc5OlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzYyBzaXplb2YoKnYxKSlcXG4gNDgwOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiA0ODE6XFx0XFx0XFx0djEgPSBkYXRhO1xcbiA0ODI6XFx0XFx0XFx0aGRybGVuID0gc2l6ZW9mKCp2MSk7XFxuIDQ4MzpcXHRcXG4gNDg0OlxcdFxcdFxcdGNiLVxcdTAwM2V0eXBlID0gbGUzMl90b19jcHUodjEtXFx1MDAzZXR5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjozMy4yMjQ5MzgyNjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODM2Njc0NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRUlRSIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIHRoZSBRUlRSIChRdWFsY29tbSBSZW1vdGUgVHJhbnNhY3Rpb24gUm91dGVyKSBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbi4gSSd2ZSBnb3QgYSBodW5jaCB3aGVyZSB0aGUgcHJvYmxlbSBtaWdodCBsaWUsIGFuZCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UgYW5kIGRlYnVnZ2luZywgSSdtIHByZXR0eSBzdXJlIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBgbmV0L3FydHIvYWZfcXJ0ci5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBsaW5lcyA3NjUgdGhyb3VnaCA3ODAuIFRob3NlIGxpbmVzIGxpa2VseSBjb250YWluIHNvbWUgY3JpdGljYWwgbG9naWMgdGhhdCdzIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJ20gaW52ZXN0aWdhdGluZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlISBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjM2OjM1LjA2MTYxNTczWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2NTpcXHRcXHR9XFxuIDc2NjpcXHRcXG4gNzY3OlxcdFxcdGlmIChwb3J0ID09IFFSVFJfUE9SVF9DVFJMKVxcbiA3Njg6XFx0XFx0XFx0cG9ydCA9IDA7XFxuIDc2OTpcXHRcXG4gNzcwOlxcdFxcdHhhX2VyYXNlKFxcdTAwMjZxcnRyX3BvcnRzLCBwb3J0KTtcXG4gNzcxOlxcdFxcbiA3NzI6XFx0XFx0LyogRW5zdXJlIHRoYXQgaWYgcXJ0cl9wb3J0X2xvb2t1cCgpIGRpZCBlbnRlciB0aGUgUkNVIHJlYWQgc2VjdGlvbiB3ZVxcbiA3NzM6XFx0XFx0ICogd2FpdCBmb3IgaXQgdG8gdXAgaW5jcmVtZW50IHRoZSByZWZjb3VudFxcbiA3NzQ6XFx0XFx0ICovXFxuIDc3NTpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0X19zb2NrX3B1dChcXHUwMDI2aXBjLVxcdTAwM2Vzayk7XFxuIDc3ODpcXHR9XFxuIDc3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6MzY6MzUuMDYxNzA1MThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjg0MjQzNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgUVJUUiBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgaXNzdWUuIE15IGluaXRpYWwgaHVuY2ggcG9pbnRzIHRvd2FyZHMgYSBwb3RlbnRpYWwgcHJvYmxlbSB3aXRoaW4gdGhlIFFSVFIgc3Vic3lzdGVtLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGEgc3BlY2lmaWMgYXJlYS4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIHRoZSBgbmV0L3FydHIvYWZfcXJ0ci5jYCBmaWxlIGFuZCBmb2N1cyBvbiBsaW5lcyA5NTUgdG8gOTc1LiBUaGlzIHJhbmdlIGxpa2VseSBjb3ZlcnMgYSBjcml0aWNhbCBmdW5jdGlvbiBvciBzZWN0aW9uIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgcHJvYmxlbSwgbGlrZWx5IHRoZSBsb2dpYyB0aGF0IHByb2Nlc3NlcyBhIHNwZWNpZmljIFFNSSBtZXNzYWdlIHR5cGUsIG9yIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIFFSVFIgc29ja2V0cy4gSG9wZWZ1bGx5LCB0aGlzIHNlZ21lbnQgd2lsbCByZXZlYWwgc29tZXRoaW5nIHVzZWZ1bC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE2MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6MzY6MzYuNzQ1OTUxODMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTU1OlxcdFxcbiA5NTY6XFx0XFx0cmV0dXJuIDA7XFxuIDk1NzpcXHR9XFxuIDk1ODpcXHRcXG4gOTU5OlxcdHN0YXRpYyBpbnQgcXJ0cl9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gOTYwOlxcdHtcXG4gOTYxOlxcdFxcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLVxcdTAwM2Vtc2dfbmFtZSk7XFxuIDk2MjpcXHRcXHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcXG4gOTYzOlxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2thZGRyX3FydHIgKmZyb20sIHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0byk7XFxuIDk2NDpcXHRcXHRfX2xlMzIgcXJ0cl90eXBlID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0RBVEEpO1xcbiA5NjU6XFx0XFx0c3RydWN0IHFydHJfc29jayAqaXBjID0gcXJ0cl9zayhzb2NrLVxcdTAwM2Vzayk7XFxuIDk2NjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVxcdTAwM2VzaztcXG4gOTY3OlxcdFxcdHN0cnVjdCBxcnRyX25vZGUgKm5vZGU7XFxuIDk2ODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA5Njk6XFx0XFx0c2l6ZV90IHBsZW47XFxuIDk3MDpcXHRcXHR1MzIgdHlwZTtcXG4gOTcxOlxcdFxcdGludCByYztcXG4gOTcyOlxcdFxcbiA5NzM6XFx0XFx0aWYgKG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgfihNU0dfRE9OVFdBSVQpKVxcbiA5NzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjM2OjM2Ljc0NjA2ODM0MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzMwMjc3NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRUlRSIE5hbWVzcGFjZSBDb2RlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIGlzc3VlLCBhbmQgdGhlIGxpa2VseSBzdXNwZWN0IGlzIGx1cmtpbmcgaW4gdGhlIFFSVFIgbmFtZXNwYWNlIGNvZGUuIE15IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSB0byB6ZXJvIGluIG9uIGBuZXQvcXJ0ci9ucy5jYC4gU3BlY2lmaWNhbGx5LCBsaW5lcyAxNzAgdGhyb3VnaCAxOTAuIFRoYXQncyB0aGUgYXJlYSBJIG5lZWQgdG8gZXhhbWluZSBtb3JlIGNsb3NlbHk7IEknbSBiZXR0aW5nIHRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgbG9naWMgcmVsYXRlZCB0byBbaW5zZXJ0IHNwZWNpZmljIGNvbmNlcm4gcmVsZXZhbnQgdG8gdGhlIGNvbnRleHRdIHJlc2lkZXMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLi4uIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgcGFyc2UgdGhhdCBzZWN0aW9uIGFuZCB0cnkgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBiZSBjYXVzaW5nIHRoZSBiZWhhdmlvciBJJ20gc2VlaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBsaWtlbHkgaGFwcGVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzA4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjozOS40NzYzNDk0MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvbnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0XFx0cGt0LmNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9ERUxfU0VSVkVSKTtcXG4gMTcxOlxcdFxcdHBrdC5zZXJ2ZXIuc2VydmljZSA9IGNwdV90b19sZTMyKHNydi1cXHUwMDNlc2VydmljZSk7XFxuIDE3MjpcXHRcXHRwa3Quc2VydmVyLmluc3RhbmNlID0gY3B1X3RvX2xlMzIoc3J2LVxcdTAwM2VpbnN0YW5jZSk7XFxuIDE3MzpcXHRcXHRwa3Quc2VydmVyLm5vZGUgPSBjcHVfdG9fbGUzMihzcnYtXFx1MDAzZW5vZGUpO1xcbiAxNzQ6XFx0XFx0cGt0LnNlcnZlci5wb3J0ID0gY3B1X3RvX2xlMzIoc3J2LVxcdTAwM2Vwb3J0KTtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0bXNnLm1zZ19uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKWRlc3Q7XFxuIDE3NzpcXHRcXHRtc2cubXNnX25hbWVsZW4gPSBzaXplb2YoKmRlc3QpO1xcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHRyZXQgPSBrZXJuZWxfc2VuZG1zZyhxcnRyX25zLnNvY2ssIFxcdTAwMjZtc2csIFxcdTAwMjZpdiwgMSwgc2l6ZW9mKHBrdCkpO1xcbiAxODA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FTk9ERVYpXFxuIDE4MTpcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcXFxuXFxcIik7XFxuIDE4MjpcXHR9XFxuIDE4MzpcXHRcXG4gMTg0OlxcdHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcXG4gMTg1OlxcdFxcdFxcdFxcdCAgYm9vbCBuZXcpXFxuIDE4NjpcXHR7XFxuIDE4NzpcXHRcXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCBwa3Q7XFxuIDE4ODpcXHRcXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsgfTtcXG4gMTg5OlxcdFxcdHN0cnVjdCBrdmVjIGl2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjozOS40NzY0NDY1NjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzQ2NjIxNTIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGVzZSBjaGFuZ2VzIGFwcGVhciBpbm5vY3VvdXMsIGJ1dCBhcyB3ZSBhbGwga25vdywgb25lIGNhbid0IGJlIHRvbyBjYXJlZnVsLiBMZXQncyBtYWtlIGNlcnRhaW4gdGhhdCB0aGlzIHBhdGNoIGlzbid0IGEgd29sZiBpbiBzaGVlcCdzIGNsb3RoaW5nLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGNoYW5nZXMgYXJlIGFsbCBzZWVtaW5nbHkgY29zbWV0aWM6XG5cbjEuICBXZSBoYXZlIHNvbWUgY29tbWVudCBmb3JtYXR0aW5nIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgYWRqdXN0aW5nIGNvbW1lbnQgc3R5bGVzOlxuICAgIGBgYGNcbiAgICBcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbiAgICAtXHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZSAqL1xuICAgICtcdCAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lXG4gICAgK1x0ICovXG4gICAgYGBgXG4gICAgYW5kXG4gICAgYGBgY1xuICAgIFx0LyogRW5zdXJlIHRoYXQgaWYgcXJ0cl9wb3J0X2xvb2t1cCgpIGRpZCBlbnRlciB0aGUgUkNVIHJlYWQgc2VjdGlvbiB3ZVxuICAgIC1cdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnQgKi9cbiAgICArXHQgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50XG4gICAgK1x0ICovXG4gICAgYGBgXG5cbiAgICBOb3RoaW5nIGhlcmUgdG91Y2hlcyBhbnkgYWN0dWFsIGxvZ2ljLiBJdCdzIHB1cmVseSBzdHlsaXN0aWMuXG5cbjIuICBBIHdoaXRlc3BhY2UgY2hhbmdlIGluIGEgY2FzdDpcbiAgICBgYGBjXG4gICAgLVx0dmVyID0gKih1OCopZGF0YTtcbiAgICArXHR2ZXIgPSAqKHU4ICopZGF0YTtcbiAgICBgYGBcbiAgICBUaGlzIGlzIGFsc28gYSBzdHlsZSBjaGFuZ2U7IGl0IHdvbid0IGltcGFjdCBob3cgdGhlIGNvbXBpbGVyIHNlZXMgdGhlIGNvZGUgb3IgYW55IHByb2R1Y2VkIGFzc2VtYmx5LlxuXG4zLiAgQWRkaW5nIHBhcmFtZXRlciBuYW1lcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb246XG4gICAgYGBgY1xuICAgIC1cdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50LFxuICAgIC1cdFx0XHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICosIHN0cnVjdCBzb2NrYWRkcl9xcnRyICopO1xuICAgICtcdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlLFxuICAgICtcdFx0XHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xuICAgIGBgYFxuICAgIFRoaXMgaXMgYSBwdXJlbHkgc3ludGFjdGljIG1vZGlmaWNhdGlvbiBmb3IgcmVhZGFiaWxpdHkuIFRoZSBjb21waWxlciB3b24ndCBldmVuIHNlZSB0aGUgbmFtZXMuXG5cbjQuICBSZW1vdmluZyBhIHJlZHVuZGFudCBgcmV0dXJuO2Agc3RhdGVtZW50IGFuZCBhIGJsYW5rIGxpbmUgZnJvbSBhIHZvaWQgZnVuY3Rpb24gKGBzZXJ2aWNlX2Fubm91bmNlX2RlbGApOlxuICAgIGBgYGNcbiAgICAtXG4gICAgLVx0cmV0dXJuO1xuICAgICB9XG4gICAgYGBgXG4gICAgVGhpcyBlbGltaW5hdGVzIGEgcmVkdW5kYW50IHN0YXRlbWVudC4gSXQgZG9lcyBub3RoaW5nIGZ1bmN0aW9uYWwuXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIGNyaXRlcmlhLiBXZSBhcmUgdG9sZCB0byBiZSBza2VwdGljYWwgYWJvdXQgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIGNsYWltcywgYnV0IGluIHRoaXMgY2FzZSwgdGhlIGNoYW5nZXMgYXJlIGNsZWFybHkgY29uZmluZWQgdG8gbm9uLWV4ZWN1dGFibGUgY29kZSAoY29tbWVudHMsIGZvcm1hdHRpbmcgYW5kIHB1cmVseSBzeW50YWN0aWMgdHdlYWtzIHRoYXQgY2FuJ3QgaW5mbHVlbmNlIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlKS4gTm9uZSBvZiB0aGUgY2hhbmdlcyBtb2RpZnkgYW55IGxvZ2ljLCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgYWx0ZXIgdGhlIGNvbXBpbGVkIGNvZGUgaW4gYW55IHdheS5cblxuVGhlIHNwZWNpZmljIGluc3RydWN0aW9ucyBzdGF0ZSB0aGF0IGlmICphbGwqIG1vZGlmaWNhdGlvbnMgYXJlIHN0cmljdGx5IGluIG9uZSBvciBtb3JlIG9mIHRoZSBcIk5FR0FUSVZFIENSSVRFUklBXCIgY2F0ZWdvcmllcyAoY29tbWVudHMsIGZvcm1hdHRpbmcsIHVzZXItc3BhY2UgdG9vbHMsIGV0Yy4pIHRoZW4gd2UgY2FuIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuSW4gdGhpcyBjYXNlLCBhbGwgb2YgdGhlIGNoYW5nZXMgZmFsbCBzcXVhcmVseSBpbnRvIHRob3NlIGNhdGVnb3JpZXMuIFRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIHRoZSByZXN1bHRzIGFzIGZvbGxvd3M6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggb25seSBpbmNsdWRlcyBjb2RlIHN0eWxlIGFuZCBmb3JtYXR0aW5nIGZpeGVzIChjb21tZW50IGZvcm1hdHRpbmcsIHNwYWNpbmcgaW4gY2FzdCwgcGFyYW1ldGVyIG5hbWluZyBpbiBmdW5jdGlvbiBwb2ludGVyIHR5cGUsIGFuZCByZW1vdmFsIG9mIGEgcmVkdW5kYW50IHJldHVybiBpbiBhIHZvaWQgZnVuY3Rpb24pIHdpdGggemVybyBjaGFuZ2VzIHRvIGV4ZWN1dGFibGUgbG9naWMgb3IgY29udHJvbCBmbG93LlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gIChlbXB0eSBhcnJheSlcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKGVtcHR5IGFycmF5KVxuXG5JJ2xsIHByb2NlZWQgd2l0aCBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSB2YWx1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTgsIk91dHB1dFRva2VucyI6ODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjo0Ni45NDI2NjM4ODNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb250YWlucyBvbmx5IG5vbi1leGVjdXRhYmxlIGNvc21ldGljIGFuZCBzdHlsZSBjbGVhbnVwcyAoY29tbWVudCBmb3JtYXR0aW5nLCB3aGl0ZXNwYWNlIGluIGEgY2FzdCwgYWRkaW5nIHBhcmFtZXRlciBuYW1lcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb24sIGFuZCByZW1vdmluZyBhIHJlZHVuZGFudCByZXR1cm4gc3RhdGVtZW50IGZyb20gYSB2b2lkIGZ1bmN0aW9uKS4gVGhlcmUgYXJlIG5vIGV4ZWN1dGFibGUgbG9naWMsIGNvbnRyb2wgZmxvdywgb3IgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnRhaW5zIG9ubHkgbm9uLWV4ZWN1dGFibGUgY29zbWV0aWMgYW5kIHN0eWxlIGNsZWFudXBzIChjb21tZW50IGZvcm1hdHRpbmcsIHdoaXRlc3BhY2UgaW4gYSBjYXN0LCBhZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiwgYW5kIHJlbW92aW5nIGEgcmVkdW5kYW50IHJldHVybiBzdGF0ZW1lbnQgZnJvbSBhIHZvaWQgZnVuY3Rpb24pLiBUaGVyZSBhcmUgbm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZSBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6MzY6NDYuOTQyNjk3NDIzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workfloww7pbw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 18:19:40 +0000 UTC FinishedAt: 2026-09-13 18:36:48 +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+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udGFpbnMgb25seSBub24tZXhlY3V0YWJsZSBjb3NtZXRpYyBhbmQgc3R5bGUgY2xlYW51cHMgKGNvbW1lbnQgZm9ybWF0dGluZywgd2hpdGVzcGFjZSBpbiBhIGNhc3QsIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCBhbmQgcmVtb3ZpbmcgYSByZWR1bmRhbnQgcmV0dXJuIHN0YXRlbWVudCBmcm9tIGEgdm9pZCBmdW5jdGlvbikuIFRoZXJlIGFyZSBubyBleGVjdXRhYmxlIGxvZ2ljLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODc4NDgxYmQ2NWIwYzE3ZjYyNzZkMjc0YjkxMTRmMDg4ZTUyMmUxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDE4OjM2OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuY1xuaW5kZXggNzgzNDdjOTM3YWY3Ni4uM2Y0ZTU2YTM5OWM1MSAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL2FmX3FydHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5AQCAtMzkzLDcgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIFx0fVxuIFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxuLVx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi9cbiYjNDM7XHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZVxuJiM0MztcdCAqL1xuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuQEAgLTQ3MSw3ICYjNDM7NDcyLDcgQEAgaW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4gXHRjYiA9IChzdHJ1Y3QgcXJ0cl9jYiAqKXNrYi1cdTAwM2VjYjtcbiBcbiBcdC8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqL1xuLVx0dmVyID0gKih1OCopZGF0YTtcbiYjNDM7XHR2ZXIgPSAqKHU4ICopZGF0YTtcbiBcbiBcdHN3aXRjaCAodmVyKSB7XG4gXHRjYXNlIFFSVFJfUFJPVE9fVkVSXzE6XG5AQCAtNzY5LDcgJiM0Mzs3NzAsOCBAQCBzdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcbiBcdHhhX2VyYXNlKFx1MDAyNnFydHJfcG9ydHMsIHBvcnQpO1xuIFxuIFx0LyogRW5zdXJlIHRoYXQgaWYgcXJ0cl9wb3J0X2xvb2t1cCgpIGRpZCBlbnRlciB0aGUgUkNVIHJlYWQgc2VjdGlvbiB3ZVxuLVx0ICogd2FpdCBmb3IgaXQgdG8gdXAgaW5jcmVtZW50IHRoZSByZWZjb3VudCAqL1xuJiM0MztcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcbiYjNDM7XHQgKi9cbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0X19zb2NrX3B1dChcdTAwMjZpcGMtXHUwMDNlc2spO1xuQEAgLTk1Nyw4ICYjNDM7OTU5LDggQEAgc3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4ge1xuIFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqLCBhZGRyLCBtc2ctXHUwMDNlbXNnX25hbWUpO1xuLVx0aW50ICgqZW5xdWV1ZV9mbikoc3RydWN0IHFydHJfbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQsXG4tXHRcdFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqKTtcbiYjNDM7XHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSwgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKTtcbiBcdF9fbGUzMiBxcnRyX3R5cGUgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfREFUQSk7XG4gXHRzdHJ1Y3QgcXJ0cl9zb2NrICppcGMgPSBxcnRyX3NrKHNvY2stXHUwMDNlc2spO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuY1xuaW5kZXggYmNiMDkwZWU3OWQ0OS4uYWFmNzdjN2Y1MDQ1YiAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL25zLmNcbkBAIC0xNzksOCAmIzQzOzE3OSw2IEBAIHN0YXRpYyB2b2lkIHNlcnZpY2VfYW5ub3VuY2VfZGVsKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0LFxuIFx0cmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCBcdTAwMjZtc2csIFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVilcbiBcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcblwmIzM0Oyk7XG4tXG4tXHRyZXR1cm47XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb250YWlucyBvbmx5IG5vbi1leGVjdXRhYmxlIGNvc21ldGljIGFuZCBzdHlsZSBjbGVhbnVwcyAoY29tbWVudCBmb3JtYXR0aW5nLCB3aGl0ZXNwYWNlIGluIGEgY2FzdCwgYWRkaW5nIHBhcmFtZXRlciBuYW1lcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb24sIGFuZCByZW1vdmluZyBhIHJlZHVuZGFudCByZXR1cm4gc3RhdGVtZW50IGZyb20gYSB2b2lkIGZ1bmN0aW9uKS4gVGhlcmUgYXJlIG5vIGV4ZWN1dGFibGUgbG9naWMsIGNvbnRyb2wgZmxvdywgb3IgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4Nzg0ODFiZDY1YjBjMTdmNjI3NmQyNzRiOTExNGYwODhlNTIyZTE3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTg6MzY6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9hZl9xcnRyLmMgYi9uZXQvcXJ0ci9hZl9xcnRyLmMKaW5kZXggNzgzNDdjOTM3YWY3Ni4uM2Y0ZTU2YTM5OWM1MSAxMDA2NDQKLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL2FmX3FydHIuYwpAQCAtMzkzLDcgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCW11dGV4X3VubG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwogCX0KIAkvKiBOZWVkIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCBtZXNzYWdlIGNhcnJpZXMgdGhlIG90aGVyd2lzZSBsb3N0Ci0JICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi8KJiM0MzsJICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUKJiM0MzsJICovCiAJaWYgKHJjICZhbXA7JmFtcDsgY29uZmlybV9yeCkKIAkJcXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by0mZ3Q7c3Ffbm9kZSwgdG8tJmd0O3NxX3BvcnQpOwogCkBAIC00NzEsNyAmIzQzOzQ3Miw3IEBAIGludCBxcnRyX2VuZHBvaW50X3Bvc3Qoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQogCWNiID0gKHN0cnVjdCBxcnRyX2NiICopc2tiLSZndDtjYjsKIAogCS8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqLwotCXZlciA9ICoodTgqKWRhdGE7CiYjNDM7CXZlciA9ICoodTggKilkYXRhOwogCiAJc3dpdGNoICh2ZXIpIHsKIAljYXNlIFFSVFJfUFJPVE9fVkVSXzE6CkBAIC03NjksNyAmIzQzOzc3MCw4IEBAIHN0YXRpYyB2b2lkIHFydHJfcG9ydF9yZW1vdmUoc3RydWN0IHFydHJfc29jayAqaXBjKQogCXhhX2VyYXNlKCZhbXA7cXJ0cl9wb3J0cywgcG9ydCk7CiAKIAkvKiBFbnN1cmUgdGhhdCBpZiBxcnRyX3BvcnRfbG9va3VwKCkgZGlkIGVudGVyIHRoZSBSQ1UgcmVhZCBzZWN0aW9uIHdlCi0JICogd2FpdCBmb3IgaXQgdG8gdXAgaW5jcmVtZW50IHRoZSByZWZjb3VudCAqLwomIzQzOwkgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50CiYjNDM7CSAqLwogCXN5bmNocm9uaXplX3JjdSgpOwogCiAJX19zb2NrX3B1dCgmYW1wO2lwYy0mZ3Q7c2spOwpAQCAtOTU3LDggJiM0Mzs5NTksOCBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogc3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewogCURFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLSZndDttc2dfbmFtZSk7Ci0JaW50ICgqZW5xdWV1ZV9mbikoc3RydWN0IHFydHJfbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQsCi0JCQkgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICosIHN0cnVjdCBzb2NrYWRkcl9xcnRyICopOwomIzQzOwlpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSwKJiM0MzsJCQkgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pOwogCV9fbGUzMiBxcnRyX3R5cGUgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfREFUQSk7CiAJc3RydWN0IHFydHJfc29jayAqaXBjID0gcXJ0cl9zayhzb2NrLSZndDtzayk7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0mZ3Q7c2s7CmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuYwppbmRleCBiY2IwOTBlZTc5ZDQ5Li5hYWY3N2M3ZjUwNDViIDEwMDY0NAotLS0gYS9uZXQvcXJ0ci9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL25zLmMKQEAgLTE3OSw4ICYjNDM7MTc5LDYgQEAgc3RhdGljIHZvaWQgc2VydmljZV9hbm5vdW5jZV9kZWwoc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QsCiAJcmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCAmYW1wO21zZywgJmFtcDtpdiwgMSwgc2l6ZW9mKHBrdCkpOwogCWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgcmV0ICE9IC1FTk9ERVYpCiAJCXByX2VycigmIzM0O2ZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxuJiMzNDspOwotCi0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBsb29rdXBfbm90aWZ5KHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0bywgc3RydWN0IHFydHJfc2VydmVyICpzcnYsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBRUlRSIFBhdGNoIERpZmYqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duLiBUaGlzIGRpZmYgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBmb2N1c2luZyBwcmltYXJpbHkgb24gY29kZSBzdHlsZSwgZm9ybWF0dGluZywgYW5kIG1pbm9yIGRvY3VtZW50YXRpb24gYWRqdXN0bWVudHMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBuZXQvcXJ0ci9hZl9xcnRyLmNgIGFuZCBgbmV0L3FydHIvbnMuY2AgZmlsZXMuIEl0IHNlZW1zIGxpa2UgdGhlIGNvbW1pdCBpcyBpZGVudGlmaWVkIGFzIGEgcGF0Y2ggdW5kZXIgcmV2aWV3LCBhdXRvLWdlbmVyYXRlZCBieSBhIHN5ei1jbHVzdGVyLgoKRmlyc3QsIHdpdGhpbiBgbmV0L3FydHIvYWZfcXJ0ci5jYCwgSSYjMzk7dmUgZ290IGEgY291cGxlIG9mIGNvbW1lbnQgdXBkYXRlcy4gVGhleSYjMzk7cmUgY2xhcmlmeWluZyBzb21lIHByZXZpb3VzIGNvbW1lbnRzLCBzbyB0aG9zZSBhcmUgbmVnbGlnaWJsZS4gQSBjYXN0JiMzOTtzIHdoaXRlc3BhY2UgaGFzIGJlZW4gc2xpZ2h0bHkgYWRqdXN0ZWQgZnJvbSBgKih1OCopZGF0YWAgdG8gYCoodTggKilkYXRhYC4gIEFuZCB0aGVyZSYjMzk7cyBhbm90aGVyIGNvbW1lbnQgZml4LCByZWdhcmRpbmcgaW5jcmVtZW50aW5nIHRoZSByZWZjb3VudC4gSSBzZWUgYSBjaGFuZ2UgdG8gYWRkIHBhcmFtZXRlciBuYW1lcyBpbiBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb24sIHRoZSBzaWduYXR1cmUgb2YgYGVucXVldWVfZm5gIGZ1bmN0aW9uIGlzIGNoYW5nZWQgdG8gaW5jbHVkZSBwYXJhbWV0ZXIgbmFtZXMuIEdpdmVuIHRoaXMgaXMgQywgYW5kIHRoYXQgcGFyYW1ldGVyIG5hbWVzIGluIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb25zIGhhdmUgbm8gaW1wYWN0IG9uIGNvbXBpbGVkIGNvZGUsIHRoYXQgaXMgYSBjaGFuZ2Ugd2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZS4KCkZpbmFsbHksIGluIGBuZXQvcXJ0ci9ucy5jYCwgdGhlIGZpbmFsIGByZXR1cm47YCBzdGF0ZW1lbnQgd2FzIHJlbW92ZWQgZnJvbSBhIHZvaWQgZnVuY3Rpb24uIFNpbmNlIGluIEMsIHZvaWQgZnVuY3Rpb25zIGhhdmUgaW1wbGljaXQgcmV0dXJucywgaXQgY2FuIGJlIHJlbW92ZWQuCgpJdCBzZWVtcyBsaWtlIHRoZXJlIGFyZSBOTyBjaGFuZ2VzIHRvIGV4ZWN1dGFibGUgbG9naWMuIFRoZXNlIGFyZSBhbGwgc3R5bGUsIGZvcm1hdHRpbmcsIGFuZCBjb21tZW50IGNoYW5nZXMsIGFuZCBubyBjaGFuZ2VzIHRvIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMsIHNvIHRoaXMgZG9lc24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3FydHIvYWZfcXJ0ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTA6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzOTE6XHRcdFx0aWYgKCFyYyBcdTAwMjZcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXG4gMzkyOlx0XHRcdFx0bm9kZS1cdTAwM2VoZWxsb19zZW50ID0gdHJ1ZTtcbiAzOTM6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5vZGUtXHUwMDNlZXBfbG9jayk7XG4gMzk0Olx0XHR9XG4gMzk1Olx0XHQvKiBOZWVkIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCBtZXNzYWdlIGNhcnJpZXMgdGhlIG90aGVyd2lzZSBsb3N0XG4gMzk2Olx0XHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZVxuIDM5NzpcdFx0ICovXG4gMzk4Olx0XHRpZiAocmMgXHUwMDI2XHUwMDI2IGNvbmZpcm1fcngpXG4gMzk5Olx0XHRcdHFydHJfdHhfZmxvd19mYWlsZWQobm9kZSwgdG8tXHUwMDNlc3Ffbm9kZSwgdG8tXHUwMDNlc3FfcG9ydCk7XG4gNDAwOlx0XG4gNDAxOlx0XHRpZiAocmMgPT0gLUVBR0FJTiBcdTAwMjZcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXG4gNDAyOlx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZub2RlLVx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcbiA0MDM6XHRcbiA0MDQ6XHRcdHJldHVybiByYztcbiA0MDU6XHR9XG4gNDA2Olx0XG4gNDA3Olx0LyogTG9va3VwIG5vZGUgYnkgaWQuXG4gNDA4Olx0ICpcbiA0MDk6XHQgKiBjYWxsZXJzIG11c3QgcmVsZWFzZSB3aXRoIHFydHJfbm9kZV9yZWxlYXNlKClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjAzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBRUlRSIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBRUlRSIHNpdHVhdGlvbiBhIGJpdCBiZXR0ZXIuIFdoZXJlIHNob3VsZCBJIHN0YXJ0PyBSaWdodCwgdGhlIGNvcmUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgcHVsbCB1cCB0aGUgY29kZSBmb3IgdGhlIFFSVFIgQWRkcmVzcyBGYW1pbHksIHNwZWNpZmljYWxseSBgbmV0L3FydHIvYWZfcXJ0ci5jYC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIGF0IHRoZSBsb3dlciBsZXZlbHMsIGhvdyB0aGlzIGFsbCB0aWVzIHRvZ2V0aGVyLiBNeSBndXQgaXMgdGVsbGluZyBtZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgYXJvdW5kIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgb3IgbWVzc2FnZSBoYW5kbGluZyB0aGVyZS4gSSBzdXNwZWN0IHRoYXQgbGluZXMgNDY1LTQ4NSBtaWdodCBiZSB0aGUga2V5LiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIExldCYjMzk7cyBjaGVjayB0aGF0IHNlY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3FydHIvYWZfcXJ0ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHRcdGlmIChsZW4gPT0gMCB8fCBsZW4gXHUwMDI2IDMpXG4gNDY2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ2NzpcdFxuIDQ2ODpcdFx0c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKE5VTEwsIGxlbiwgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7XG4gNDY5Olx0XHRpZiAoIXNrYilcbiA0NzA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNDcxOlx0XG4gNDcyOlx0XHRjYiA9IChzdHJ1Y3QgcXJ0cl9jYiAqKXNrYi1cdTAwM2VjYjtcbiA0NzM6XHRcbiA0NzQ6XHRcdC8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqL1xuIDQ3NTpcdFx0dmVyID0gKih1OCAqKWRhdGE7XG4gNDc2Olx0XG4gNDc3Olx0XHRzd2l0Y2ggKHZlcikge1xuIDQ3ODpcdFx0Y2FzZSBRUlRSX1BST1RPX1ZFUl8xOlxuIDQ3OTpcdFx0XHRpZiAobGVuIFx1MDAzYyBzaXplb2YoKnYxKSlcbiA0ODA6XHRcdFx0XHRnb3RvIGVycjtcbiA0ODE6XHRcdFx0djEgPSBkYXRhO1xuIDQ4MjpcdFx0XHRoZHJsZW4gPSBzaXplb2YoKnYxKTtcbiA0ODM6XHRcbiA0ODQ6XHRcdFx0Y2ItXHUwMDNldHlwZSA9IGxlMzJfdG9fY3B1KHYxLVx1MDAzZXR5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBRUlRSIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHNwZWNpZmljIHJlbGF0ZWQgdG8gdGhlIFFSVFIgKFF1YWxjb21tIFJlbW90ZSBUcmFuc2FjdGlvbiBSb3V0ZXIpIHByb3RvY29sIGltcGxlbWVudGF0aW9uLiBJJiMzOTt2ZSBnb3QgYSBodW5jaCB3aGVyZSB0aGUgcHJvYmxlbSBtaWdodCBsaWUsIGFuZCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UgYW5kIGRlYnVnZ2luZywgSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHNob3VsZCBmb2N1cyBvbiB0aGUgYG5ldC9xcnRyL2FmX3FydHIuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgbGluZXMgNzY1IHRocm91Z2ggNzgwLiBUaG9zZSBsaW5lcyBsaWtlbHkgY29udGFpbiBzb21lIGNyaXRpY2FsIGxvZ2ljIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEkmIzM5O20gaW52ZXN0aWdhdGluZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoYXQgc2VjdGlvbiBvZiB0aGUgY29kZSEgTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzY1Olx0XHR9XG4gNzY2Olx0XG4gNzY3Olx0XHRpZiAocG9ydCA9PSBRUlRSX1BPUlRfQ1RSTClcbiA3Njg6XHRcdFx0cG9ydCA9IDA7XG4gNzY5Olx0XG4gNzcwOlx0XHR4YV9lcmFzZShcdTAwMjZxcnRyX3BvcnRzLCBwb3J0KTtcbiA3NzE6XHRcbiA3NzI6XHRcdC8qIEVuc3VyZSB0aGF0IGlmIHFydHJfcG9ydF9sb29rdXAoKSBkaWQgZW50ZXIgdGhlIFJDVSByZWFkIHNlY3Rpb24gd2VcbiA3NzM6XHRcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcbiA3NzQ6XHRcdCAqL1xuIDc3NTpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gNzc2Olx0XG4gNzc3Olx0XHRfX3NvY2tfcHV0KFx1MDAyNmlwYy1cdTAwM2Vzayk7XG4gNzc4Olx0fVxuIDc3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUVJUUiBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIHRyb3VibGVzaG9vdCB0aGlzIGlzc3VlLiBNeSBpbml0aWFsIGh1bmNoIHBvaW50cyB0b3dhcmRzIGEgcG90ZW50aWFsIHByb2JsZW0gd2l0aGluIHRoZSBRUlRSIHN1YnN5c3RlbS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYSBzcGVjaWZpYyBhcmVhLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIHRoZSBgbmV0L3FydHIvYWZfcXJ0ci5jYCBmaWxlIGFuZCBmb2N1cyBvbiBsaW5lcyA5NTUgdG8gOTc1LiBUaGlzIHJhbmdlIGxpa2VseSBjb3ZlcnMgYSBjcml0aWNhbCBmdW5jdGlvbiBvciBzZWN0aW9uIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgcHJvYmxlbSwgbGlrZWx5IHRoZSBsb2dpYyB0aGF0IHByb2Nlc3NlcyBhIHNwZWNpZmljIFFNSSBtZXNzYWdlIHR5cGUsIG9yIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIFFSVFIgc29ja2V0cy4gSG9wZWZ1bGx5LCB0aGlzIHNlZ21lbnQgd2lsbCByZXZlYWwgc29tZXRoaW5nIHVzZWZ1bC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk1NTpcdFxuIDk1NjpcdFx0cmV0dXJuIDA7XG4gOTU3Olx0fVxuIDk1ODpcdFxuIDk1OTpcdHN0YXRpYyBpbnQgcXJ0cl9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiA5NjA6XHR7XG4gOTYxOlx0XHRERUNMQVJFX1NPQ0tBRERSKHN0cnVjdCBzb2NrYWRkcl9xcnRyICosIGFkZHIsIG1zZy1cdTAwM2Vtc2dfbmFtZSk7XG4gOTYyOlx0XHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcbiA5NjM6XHRcdFx0XHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xuIDk2NDpcdFx0X19sZTMyIHFydHJfdHlwZSA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9EQVRBKTtcbiA5NjU6XHRcdHN0cnVjdCBxcnRyX3NvY2sgKmlwYyA9IHFydHJfc2soc29jay1cdTAwM2Vzayk7XG4gOTY2Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIDk2NzpcdFx0c3RydWN0IHFydHJfbm9kZSAqbm9kZTtcbiA5Njg6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gOTY5Olx0XHRzaXplX3QgcGxlbjtcbiA5NzA6XHRcdHUzMiB0eXBlO1xuIDk3MTpcdFx0aW50IHJjO1xuIDk3MjpcdFxuIDk3MzpcdFx0aWYgKG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IH4oTVNHX0RPTlRXQUlUKSlcbiA5NzQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBRUlRSIE5hbWVzcGFjZSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMgaXNzdWUsIGFuZCB0aGUgbGlrZWx5IHN1c3BlY3QgaXMgbHVya2luZyBpbiB0aGUgUVJUUiBuYW1lc3BhY2UgY29kZS4gTXkgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIHRvIHplcm8gaW4gb24gYG5ldC9xcnRyL25zLmNgLiBTcGVjaWZpY2FsbHksIGxpbmVzIDE3MCB0aHJvdWdoIDE5MC4gVGhhdCYjMzk7cyB0aGUgYXJlYSBJIG5lZWQgdG8gZXhhbWluZSBtb3JlIGNsb3NlbHk7IEkmIzM5O20gYmV0dGluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBsb2dpYyByZWxhdGVkIHRvIFtpbnNlcnQgc3BlY2lmaWMgY29uY2VybiByZWxldmFudCB0byB0aGUgY29udGV4dF0gcmVzaWRlcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4uLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBwYXJzZSB0aGF0IHNlY3Rpb24gYW5kIHRyeSB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgdGhlIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBsaWtlbHkgaGFwcGVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxODozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL25zLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdFx0cGt0LmNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9ERUxfU0VSVkVSKTtcbiAxNzE6XHRcdHBrdC5zZXJ2ZXIuc2VydmljZSA9IGNwdV90b19sZTMyKHNydi1cdTAwM2VzZXJ2aWNlKTtcbiAxNzI6XHRcdHBrdC5zZXJ2ZXIuaW5zdGFuY2UgPSBjcHVfdG9fbGUzMihzcnYtXHUwMDNlaW5zdGFuY2UpO1xuIDE3MzpcdFx0cGt0LnNlcnZlci5ub2RlID0gY3B1X3RvX2xlMzIoc3J2LVx1MDAzZW5vZGUpO1xuIDE3NDpcdFx0cGt0LnNlcnZlci5wb3J0ID0gY3B1X3RvX2xlMzIoc3J2LVx1MDAzZXBvcnQpO1xuIDE3NTpcdFxuIDE3NjpcdFx0bXNnLm1zZ19uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKWRlc3Q7XG4gMTc3Olx0XHRtc2cubXNnX25hbWVsZW4gPSBzaXplb2YoKmRlc3QpO1xuIDE3ODpcdFxuIDE3OTpcdFx0cmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCBcdTAwMjZtc2csIFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XG4gMTgwOlx0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVilcbiAxODE6XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcblwmIzM0Oyk7XG4gMTgyOlx0fVxuIDE4MzpcdFxuIDE4NDpcdHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcbiAxODU6XHRcdFx0XHQgIGJvb2wgbmV3KVxuIDE4NjpcdHtcbiAxODc6XHRcdHN0cnVjdCBxcnRyX2N0cmxfcGt0IHBrdDtcbiAxODg6XHRcdHN0cnVjdCBtc2doZHIgbXNnID0geyB9O1xuIDE4OTpcdFx0c3RydWN0IGt2ZWMgaXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMTgKCQkJCQkJCW91dHB1dDogODYKCQkJCQkJCXRob3VnaHRzOiA5NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGVzZSBjaGFuZ2VzIGFwcGVhciBpbm5vY3VvdXMsIGJ1dCBhcyB3ZSBhbGwga25vdywgb25lIGNhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bC4gTGV0JiMzOTtzIG1ha2UgY2VydGFpbiB0aGF0IHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGEgd29sZiBpbiBzaGVlcCYjMzk7cyBjbG90aGluZy4KCkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgYWxsIHNlZW1pbmdseSBjb3NtZXRpYzoKCjEuICBXZSBoYXZlIHNvbWUgY29tbWVudCBmb3JtYXR0aW5nIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgYWRqdXN0aW5nIGNvbW1lbnQgc3R5bGVzOgogICAgYGBgYwogICAgCS8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3QKICAgIC0JICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi8KICAgICYjNDM7CSAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lCiAgICAmIzQzOwkgKi8KICAgIGBgYAogICAgYW5kCiAgICBgYGBjCiAgICAJLyogRW5zdXJlIHRoYXQgaWYgcXJ0cl9wb3J0X2xvb2t1cCgpIGRpZCBlbnRlciB0aGUgUkNVIHJlYWQgc2VjdGlvbiB3ZQogICAgLQkgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50ICovCiAgICAmIzQzOwkgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50CiAgICAmIzQzOwkgKi8KICAgIGBgYAoKICAgIE5vdGhpbmcgaGVyZSB0b3VjaGVzIGFueSBhY3R1YWwgbG9naWMuIEl0JiMzOTtzIHB1cmVseSBzdHlsaXN0aWMuCgoyLiAgQSB3aGl0ZXNwYWNlIGNoYW5nZSBpbiBhIGNhc3Q6CiAgICBgYGBjCiAgICAtCXZlciA9ICoodTgqKWRhdGE7CiAgICAmIzQzOwl2ZXIgPSAqKHU4ICopZGF0YTsKICAgIGBgYAogICAgVGhpcyBpcyBhbHNvIGEgc3R5bGUgY2hhbmdlOyBpdCB3b24mIzM5O3QgaW1wYWN0IGhvdyB0aGUgY29tcGlsZXIgc2VlcyB0aGUgY29kZSBvciBhbnkgcHJvZHVjZWQgYXNzZW1ibHkuCgozLiAgQWRkaW5nIHBhcmFtZXRlciBuYW1lcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb246CiAgICBgYGBjCiAgICAtCWludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50LAogICAgLQkJCSAgc3RydWN0IHNvY2thZGRyX3FydHIgKiwgc3RydWN0IHNvY2thZGRyX3FydHIgKik7CiAgICAmIzQzOwlpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSwKICAgICYjNDM7CQkJICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSwgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKTsKICAgIGBgYAogICAgVGhpcyBpcyBhIHB1cmVseSBzeW50YWN0aWMgbW9kaWZpY2F0aW9uIGZvciByZWFkYWJpbGl0eS4gVGhlIGNvbXBpbGVyIHdvbiYjMzk7dCBldmVuIHNlZSB0aGUgbmFtZXMuCgo0LiAgUmVtb3ZpbmcgYSByZWR1bmRhbnQgYHJldHVybjtgIHN0YXRlbWVudCBhbmQgYSBibGFuayBsaW5lIGZyb20gYSB2b2lkIGZ1bmN0aW9uIChgc2VydmljZV9hbm5vdW5jZV9kZWxgKToKICAgIGBgYGMKICAgIC0KICAgIC0JcmV0dXJuOwogICAgIH0KICAgIGBgYAogICAgVGhpcyBlbGltaW5hdGVzIGEgcmVkdW5kYW50IHN0YXRlbWVudC4gSXQgZG9lcyBub3RoaW5nIGZ1bmN0aW9uYWwuCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgY3JpdGVyaWEuIFdlIGFyZSB0b2xkIHRvIGJlIHNrZXB0aWNhbCBhYm91dCAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgY2xhaW1zLCBidXQgaW4gdGhpcyBjYXNlLCB0aGUgY2hhbmdlcyBhcmUgY2xlYXJseSBjb25maW5lZCB0byBub24tZXhlY3V0YWJsZSBjb2RlIChjb21tZW50cywgZm9ybWF0dGluZyBhbmQgcHVyZWx5IHN5bnRhY3RpYyB0d2Vha3MgdGhhdCBjYW4mIzM5O3QgaW5mbHVlbmNlIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlKS4gTm9uZSBvZiB0aGUgY2hhbmdlcyBtb2RpZnkgYW55IGxvZ2ljLCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgYWx0ZXIgdGhlIGNvbXBpbGVkIGNvZGUgaW4gYW55IHdheS4KClRoZSBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgc3RhdGUgdGhhdCBpZiAqYWxsKiBtb2RpZmljYXRpb25zIGFyZSBzdHJpY3RseSBpbiBvbmUgb3IgbW9yZSBvZiB0aGUgJiMzNDtORUdBVElWRSBDUklURVJJQSYjMzQ7IGNhdGVnb3JpZXMgKGNvbW1lbnRzLCBmb3JtYXR0aW5nLCB1c2VyLXNwYWNlIHRvb2xzLCBldGMuKSB0aGVuIHdlIGNhbiByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgpJbiB0aGlzIGNhc2UsIGFsbCBvZiB0aGUgY2hhbmdlcyBmYWxsIHNxdWFyZWx5IGludG8gdGhvc2UgY2F0ZWdvcmllcy4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIHRoZSByZXN1bHRzIGFzIGZvbGxvd3M6CgoqICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWAKKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggb25seSBpbmNsdWRlcyBjb2RlIHN0eWxlIGFuZCBmb3JtYXR0aW5nIGZpeGVzIChjb21tZW50IGZvcm1hdHRpbmcsIHNwYWNpbmcgaW4gY2FzdCwgcGFyYW1ldGVyIG5hbWluZyBpbiBmdW5jdGlvbiBwb2ludGVyIHR5cGUsIGFuZCByZW1vdmFsIG9mIGEgcmVkdW5kYW50IHJldHVybiBpbiBhIHZvaWQgZnVuY3Rpb24pIHdpdGggemVybyBjaGFuZ2VzIHRvIGV4ZWN1dGFibGUgbG9naWMgb3IgY29udHJvbCBmbG93LgoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGFycmF5KQoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBhcnJheSkKCkkmIzM5O2xsIHByb2NlZWQgd2l0aCBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSB2YWx1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udGFpbnMgb25seSBub24tZXhlY3V0YWJsZSBjb3NtZXRpYyBhbmQgc3R5bGUgY2xlYW51cHMgKGNvbW1lbnQgZm9ybWF0dGluZywgd2hpdGVzcGFjZSBpbiBhIGNhc3QsIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCBhbmQgcmVtb3ZpbmcgYSByZWR1bmRhbnQgcmV0dXJuIHN0YXRlbWVudCBmcm9tIGEgdm9pZCBmdW5jdGlvbikuIFRoZXJlIGFyZSBubyBleGVjdXRhYmxlIGxvZ2ljLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb250YWlucyBvbmx5IG5vbi1leGVjdXRhYmxlIGNvc21ldGljIGFuZCBzdHlsZSBjbGVhbnVwcyAoY29tbWVudCBmb3JtYXR0aW5nLCB3aGl0ZXNwYWNlIGluIGEgY2FzdCwgYWRkaW5nIHBhcmFtZXRlciBuYW1lcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb24sIGFuZCByZW1vdmluZyBhIHJlZHVuZGFudCByZXR1cm4gc3RhdGVtZW50IGZyb20gYSB2b2lkIGZ1bmN0aW9uKS4gVGhlcmUgYXJlIG5vIGV4ZWN1dGFibGUgbG9naWMsIGNvbnRyb2wgZmxvdywgb3IgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE4OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjoyMy40ODI4OTE4ODVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ1OTgxNzQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnRhaW5zIG9ubHkgbm9uLWV4ZWN1dGFibGUgY29zbWV0aWMgYW5kIHN0eWxlIGNsZWFudXBzIChjb21tZW50IGZvcm1hdHRpbmcsIHdoaXRlc3BhY2UgaW4gYSBjYXN0LCBhZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiwgYW5kIHJlbW92aW5nIGEgcmVkdW5kYW50IHJldHVybiBzdGF0ZW1lbnQgZnJvbSBhIHZvaWQgZnVuY3Rpb24pLiBUaGVyZSBhcmUgbm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZSBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6MzY6MjMuNDgyODk2MjE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTg5OTcxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4Nzg0ODFiZDY1YjBjMTdmNjI3NmQyNzRiOTExNGYwODhlNTIyZTE3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDEzIDE4OjM2OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuY1xcbmluZGV4IDc4MzQ3YzkzN2FmNzYuLjNmNGU1NmEzOTljNTEgMTAwNjQ0XFxuLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jXFxuKysrIGIvbmV0L3FydHIvYWZfcXJ0ci5jXFxuQEAgLTM5Myw3ICszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuIFxcdH1cXG4gXFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxcbi1cXHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZSAqL1xcbitcXHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZVxcbitcXHQgKi9cXG4gXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IGNvbmZpcm1fcngpXFxuIFxcdFxcdHFydHJfdHhfZmxvd19mYWlsZWQobm9kZSwgdG8tXFx1MDAzZXNxX25vZGUsIHRvLVxcdTAwM2VzcV9wb3J0KTtcXG4gXFxuQEAgLTQ3MSw3ICs0NzIsNyBAQCBpbnQgcXJ0cl9lbmRwb2ludF9wb3N0KHN0cnVjdCBxcnRyX2VuZHBvaW50ICplcCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcXG4gXFx0Y2IgPSAoc3RydWN0IHFydHJfY2IgKilza2ItXFx1MDAzZWNiO1xcbiBcXG4gXFx0LyogVmVyc2lvbiBmaWVsZCBpbiB2MSBpcyBsaXR0bGUgZW5kaWFuLCBzbyB0aGlzIHdvcmtzIGZvciBib3RoIGNhc2VzICovXFxuLVxcdHZlciA9ICoodTgqKWRhdGE7XFxuK1xcdHZlciA9ICoodTggKilkYXRhO1xcbiBcXG4gXFx0c3dpdGNoICh2ZXIpIHtcXG4gXFx0Y2FzZSBRUlRSX1BST1RPX1ZFUl8xOlxcbkBAIC03NjksNyArNzcwLDggQEAgc3RhdGljIHZvaWQgcXJ0cl9wb3J0X3JlbW92ZShzdHJ1Y3QgcXJ0cl9zb2NrICppcGMpXFxuIFxcdHhhX2VyYXNlKFxcdTAwMjZxcnRyX3BvcnRzLCBwb3J0KTtcXG4gXFxuIFxcdC8qIEVuc3VyZSB0aGF0IGlmIHFydHJfcG9ydF9sb29rdXAoKSBkaWQgZW50ZXIgdGhlIFJDVSByZWFkIHNlY3Rpb24gd2VcXG4tXFx0ICogd2FpdCBmb3IgaXQgdG8gdXAgaW5jcmVtZW50IHRoZSByZWZjb3VudCAqL1xcbitcXHQgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50XFxuK1xcdCAqL1xcbiBcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gXFxuIFxcdF9fc29ja19wdXQoXFx1MDAyNmlwYy1cXHUwMDNlc2spO1xcbkBAIC05NTcsOCArOTU5LDggQEAgc3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gc3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLVxcdTAwM2Vtc2dfbmFtZSk7XFxuLVxcdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50LFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICosIHN0cnVjdCBzb2NrYWRkcl9xcnRyICopO1xcbitcXHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSwgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKTtcXG4gXFx0X19sZTMyIHFydHJfdHlwZSA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9EQVRBKTtcXG4gXFx0c3RydWN0IHFydHJfc29jayAqaXBjID0gcXJ0cl9zayhzb2NrLVxcdTAwM2Vzayk7XFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuY1xcbmluZGV4IGJjYjA5MGVlNzlkNDkuLmFhZjc3YzdmNTA0NWIgMTAwNjQ0XFxuLS0tIGEvbmV0L3FydHIvbnMuY1xcbisrKyBiL25ldC9xcnRyL25zLmNcXG5AQCAtMTc5LDggKzE3OSw2IEBAIHN0YXRpYyB2b2lkIHNlcnZpY2VfYW5ub3VuY2VfZGVsKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0LFxcbiBcXHRyZXQgPSBrZXJuZWxfc2VuZG1zZyhxcnRyX25zLnNvY2ssIFxcdTAwMjZtc2csIFxcdTAwMjZpdiwgMSwgc2l6ZW9mKHBrdCkpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVOT0RFVilcXG4gXFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gYW5ub3VuY2UgZGVsIHNlcnZpY2VcXFxcblxcXCIpO1xcbi1cXG4tXFx0cmV0dXJuO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBsb29rdXBfbm90aWZ5KHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0bywgc3RydWN0IHFydHJfc2VydmVyICpzcnYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjM2OjIzLjkwMjQ2Njk4OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjMwNDAyMjc5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnRhaW5zIG9ubHkgbm9uLWV4ZWN1dGFibGUgY29zbWV0aWMgYW5kIHN0eWxlIGNsZWFudXBzIChjb21tZW50IGZvcm1hdHRpbmcsIHdoaXRlc3BhY2UgaW4gYSBjYXN0LCBhZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiwgYW5kIHJlbW92aW5nIGEgcmVkdW5kYW50IHJldHVybiBzdGF0ZW1lbnQgZnJvbSBhIHZvaWQgZnVuY3Rpb24pLiBUaGVyZSBhcmUgbm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZSBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4Nzg0ODFiZDY1YjBjMTdmNjI3NmQyNzRiOTExNGYwODhlNTIyZTE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTg6MzY6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9hZl9xcnRyLmMgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcbmluZGV4IDc4MzQ3YzkzN2FmNzYuLjNmNGU1NmEzOTljNTEgMTAwNjQ0XG4tLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmNcbisrKyBiL25ldC9xcnRyL2FmX3FydHIuY1xuQEAgLTM5Myw3ICszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIFx0fVxuIFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxuLVx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi9cbitcdCAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lXG4rXHQgKi9cbiBcdGlmIChyYyBcdTAwMjZcdTAwMjYgY29uZmlybV9yeClcbiBcdFx0cXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0KTtcbiBcbkBAIC00NzEsNyArNDcyLDcgQEAgaW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4gXHRjYiA9IChzdHJ1Y3QgcXJ0cl9jYiAqKXNrYi1cdTAwM2VjYjtcbiBcbiBcdC8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqL1xuLVx0dmVyID0gKih1OCopZGF0YTtcbitcdHZlciA9ICoodTggKilkYXRhO1xuIFxuIFx0c3dpdGNoICh2ZXIpIHtcbiBcdGNhc2UgUVJUUl9QUk9UT19WRVJfMTpcbkBAIC03NjksNyArNzcwLDggQEAgc3RhdGljIHZvaWQgcXJ0cl9wb3J0X3JlbW92ZShzdHJ1Y3QgcXJ0cl9zb2NrICppcGMpXG4gXHR4YV9lcmFzZShcdTAwMjZxcnRyX3BvcnRzLCBwb3J0KTtcbiBcbiBcdC8qIEVuc3VyZSB0aGF0IGlmIHFydHJfcG9ydF9sb29rdXAoKSBkaWQgZW50ZXIgdGhlIFJDVSByZWFkIHNlY3Rpb24gd2Vcbi1cdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnQgKi9cbitcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcbitcdCAqL1xuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRfX3NvY2tfcHV0KFx1MDAyNmlwYy1cdTAwM2Vzayk7XG5AQCAtOTU3LDggKzk1OSw4IEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIHtcbiBcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLVx1MDAzZW1zZ19uYW1lKTtcbi1cdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50LFxuLVx0XHRcdCAgc3RydWN0IHNvY2thZGRyX3FydHIgKiwgc3RydWN0IHNvY2thZGRyX3FydHIgKik7XG4rXHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcbitcdFx0XHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xuIFx0X19sZTMyIHFydHJfdHlwZSA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9EQVRBKTtcbiBcdHN0cnVjdCBxcnRyX3NvY2sgKmlwYyA9IHFydHJfc2soc29jay1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuZGlmZiAtLWdpdCBhL25ldC9xcnRyL25zLmMgYi9uZXQvcXJ0ci9ucy5jXG5pbmRleCBiY2IwOTBlZTc5ZDQ5Li5hYWY3N2M3ZjUwNDViIDEwMDY0NFxuLS0tIGEvbmV0L3FydHIvbnMuY1xuKysrIGIvbmV0L3FydHIvbnMuY1xuQEAgLTE3OSw4ICsxNzksNiBAQCBzdGF0aWMgdm9pZCBzZXJ2aWNlX2Fubm91bmNlX2RlbChzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZGVzdCxcbiBcdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXHUwMDI2bXNnLCBcdTAwMjZpdiwgMSwgc2l6ZW9mKHBrdCkpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FTk9ERVYpXG4gXHRcdHByX2VycihcImZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcblwiKTtcbi1cbi1cdHJldHVybjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6MzY6MjMuOTAyNDY4ODE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzYzMTcwNDQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUVJUUiBQYXRjaCBEaWZmKipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24uIFRoaXMgZGlmZiBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJ20gc2VlaW5nIGNoYW5nZXMgZm9jdXNpbmcgcHJpbWFyaWx5IG9uIGNvZGUgc3R5bGUsIGZvcm1hdHRpbmcsIGFuZCBtaW5vciBkb2N1bWVudGF0aW9uIGFkanVzdG1lbnRzLiBJJ20gZm9jdXNpbmcgb24gdGhlIGBuZXQvcXJ0ci9hZl9xcnRyLmNgIGFuZCBgbmV0L3FydHIvbnMuY2AgZmlsZXMuIEl0IHNlZW1zIGxpa2UgdGhlIGNvbW1pdCBpcyBpZGVudGlmaWVkIGFzIGEgcGF0Y2ggdW5kZXIgcmV2aWV3LCBhdXRvLWdlbmVyYXRlZCBieSBhIHN5ei1jbHVzdGVyLlxuXG5GaXJzdCwgd2l0aGluIGBuZXQvcXJ0ci9hZl9xcnRyLmNgLCBJJ3ZlIGdvdCBhIGNvdXBsZSBvZiBjb21tZW50IHVwZGF0ZXMuIFRoZXkncmUgY2xhcmlmeWluZyBzb21lIHByZXZpb3VzIGNvbW1lbnRzLCBzbyB0aG9zZSBhcmUgbmVnbGlnaWJsZS4gQSBjYXN0J3Mgd2hpdGVzcGFjZSBoYXMgYmVlbiBzbGlnaHRseSBhZGp1c3RlZCBmcm9tIGAqKHU4KilkYXRhYCB0byBgKih1OCAqKWRhdGFgLiAgQW5kIHRoZXJlJ3MgYW5vdGhlciBjb21tZW50IGZpeCwgcmVnYXJkaW5nIGluY3JlbWVudGluZyB0aGUgcmVmY291bnQuIEkgc2VlIGEgY2hhbmdlIHRvIGFkZCBwYXJhbWV0ZXIgbmFtZXMgaW4gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCB0aGUgc2lnbmF0dXJlIG9mIGBlbnF1ZXVlX2ZuYCBmdW5jdGlvbiBpcyBjaGFuZ2VkIHRvIGluY2x1ZGUgcGFyYW1ldGVyIG5hbWVzLiBHaXZlbiB0aGlzIGlzIEMsIGFuZCB0aGF0IHBhcmFtZXRlciBuYW1lcyBpbiBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9ucyBoYXZlIG5vIGltcGFjdCBvbiBjb21waWxlZCBjb2RlLCB0aGF0IGlzIGEgY2hhbmdlIHdpdGggbm8gZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkZpbmFsbHksIGluIGBuZXQvcXJ0ci9ucy5jYCwgdGhlIGZpbmFsIGByZXR1cm47YCBzdGF0ZW1lbnQgd2FzIHJlbW92ZWQgZnJvbSBhIHZvaWQgZnVuY3Rpb24uIFNpbmNlIGluIEMsIHZvaWQgZnVuY3Rpb25zIGhhdmUgaW1wbGljaXQgcmV0dXJucywgaXQgY2FuIGJlIHJlbW92ZWQuXG5cbkl0IHNlZW1zIGxpa2UgdGhlcmUgYXJlIE5PIGNoYW5nZXMgdG8gZXhlY3V0YWJsZSBsb2dpYy4gVGhlc2UgYXJlIGFsbCBzdHlsZSwgZm9ybWF0dGluZywgYW5kIGNvbW1lbnQgY2hhbmdlcywgYW5kIG5vIGNoYW5nZXMgdG8gY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcywgc28gdGhpcyBkb2Vzbid0IHdhcnJhbnQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjozMS41MzQxNzU0NTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5MDpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzkxOlxcdFxcdFxcdGlmICghcmMgXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXFxuIDM5MjpcXHRcXHRcXHRcXHRub2RlLVxcdTAwM2VoZWxsb19zZW50ID0gdHJ1ZTtcXG4gMzkzOlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bm9kZS1cXHUwMDNlZXBfbG9jayk7XFxuIDM5NDpcXHRcXHR9XFxuIDM5NTpcXHRcXHQvKiBOZWVkIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCBtZXNzYWdlIGNhcnJpZXMgdGhlIG90aGVyd2lzZSBsb3N0XFxuIDM5NjpcXHRcXHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZVxcbiAzOTc6XFx0XFx0ICovXFxuIDM5ODpcXHRcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgY29uZmlybV9yeClcXG4gMzk5OlxcdFxcdFxcdHFydHJfdHhfZmxvd19mYWlsZWQobm9kZSwgdG8tXFx1MDAzZXNxX25vZGUsIHRvLVxcdTAwM2VzcV9wb3J0KTtcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0aWYgKHJjID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBRUlRSX1RZUEVfSEVMTE8pXFxuIDQwMjpcXHRcXHRcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5vZGUtXFx1MDAzZXNheV9oZWxsbywgbXNlY3NfdG9famlmZmllcygxMDApKTtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0cmV0dXJuIHJjO1xcbiA0MDU6XFx0fVxcbiA0MDY6XFx0XFxuIDQwNzpcXHQvKiBMb29rdXAgbm9kZSBieSBpZC5cXG4gNDA4OlxcdCAqXFxuIDQwOTpcXHQgKiBjYWxsZXJzIG11c3QgcmVsZWFzZSB3aXRoIHFydHJfbm9kZV9yZWxlYXNlKClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6MzY6MzEuNTM0Mjk5NDQzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY5MDUyMzA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRUlRSIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgUVJUUiBzaXR1YXRpb24gYSBiaXQgYmV0dGVyLiBXaGVyZSBzaG91bGQgSSBzdGFydD8gUmlnaHQsIHRoZSBjb3JlLiBMZXQncyBzZWUuLi4gSSdsbCBwdWxsIHVwIHRoZSBjb2RlIGZvciB0aGUgUVJUUiBBZGRyZXNzIEZhbWlseSwgc3BlY2lmaWNhbGx5IGBuZXQvcXJ0ci9hZl9xcnRyLmNgLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiBhdCB0aGUgbG93ZXIgbGV2ZWxzLCBob3cgdGhpcyBhbGwgdGllcyB0b2dldGhlci4gTXkgZ3V0IGlzIHRlbGxpbmcgbWUgdGhlcmUncyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgYXJvdW5kIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgb3IgbWVzc2FnZSBoYW5kbGluZyB0aGVyZS4gSSBzdXNwZWN0IHRoYXQgbGluZXMgNDY1LTQ4NSBtaWdodCBiZSB0aGUga2V5LiBMZXQncyBzdGFydCB0aGVyZS4gTGV0J3MgY2hlY2sgdGhhdCBzZWN0aW9uLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjAzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjozMy4yMjQ4MjUyMzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2NTpcXHRcXHRpZiAobGVuID09IDAgfHwgbGVuIFxcdTAwMjYgMylcXG4gNDY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Njc6XFx0XFxuIDQ2ODpcXHRcXHRza2IgPSBfX25ldGRldl9hbGxvY19za2IoTlVMTCwgbGVuLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4gNDY5OlxcdFxcdGlmICghc2tiKVxcbiA0NzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdGNiID0gKHN0cnVjdCBxcnRyX2NiICopc2tiLVxcdTAwM2VjYjtcXG4gNDczOlxcdFxcbiA0NzQ6XFx0XFx0LyogVmVyc2lvbiBmaWVsZCBpbiB2MSBpcyBsaXR0bGUgZW5kaWFuLCBzbyB0aGlzIHdvcmtzIGZvciBib3RoIGNhc2VzICovXFxuIDQ3NTpcXHRcXHR2ZXIgPSAqKHU4ICopZGF0YTtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0c3dpdGNoICh2ZXIpIHtcXG4gNDc4OlxcdFxcdGNhc2UgUVJUUl9QUk9UT19WRVJfMTpcXG4gNDc5OlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzYyBzaXplb2YoKnYxKSlcXG4gNDgwOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiA0ODE6XFx0XFx0XFx0djEgPSBkYXRhO1xcbiA0ODI6XFx0XFx0XFx0aGRybGVuID0gc2l6ZW9mKCp2MSk7XFxuIDQ4MzpcXHRcXG4gNDg0OlxcdFxcdFxcdGNiLVxcdTAwM2V0eXBlID0gbGUzMl90b19jcHUodjEtXFx1MDAzZXR5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjozMy4yMjQ5MzgyNjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODM2Njc0NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRUlRSIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIHRoZSBRUlRSIChRdWFsY29tbSBSZW1vdGUgVHJhbnNhY3Rpb24gUm91dGVyKSBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbi4gSSd2ZSBnb3QgYSBodW5jaCB3aGVyZSB0aGUgcHJvYmxlbSBtaWdodCBsaWUsIGFuZCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UgYW5kIGRlYnVnZ2luZywgSSdtIHByZXR0eSBzdXJlIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBgbmV0L3FydHIvYWZfcXJ0ci5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBsaW5lcyA3NjUgdGhyb3VnaCA3ODAuIFRob3NlIGxpbmVzIGxpa2VseSBjb250YWluIHNvbWUgY3JpdGljYWwgbG9naWMgdGhhdCdzIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJ20gaW52ZXN0aWdhdGluZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlISBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjM2OjM1LjA2MTYxNTczWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2NTpcXHRcXHR9XFxuIDc2NjpcXHRcXG4gNzY3OlxcdFxcdGlmIChwb3J0ID09IFFSVFJfUE9SVF9DVFJMKVxcbiA3Njg6XFx0XFx0XFx0cG9ydCA9IDA7XFxuIDc2OTpcXHRcXG4gNzcwOlxcdFxcdHhhX2VyYXNlKFxcdTAwMjZxcnRyX3BvcnRzLCBwb3J0KTtcXG4gNzcxOlxcdFxcbiA3NzI6XFx0XFx0LyogRW5zdXJlIHRoYXQgaWYgcXJ0cl9wb3J0X2xvb2t1cCgpIGRpZCBlbnRlciB0aGUgUkNVIHJlYWQgc2VjdGlvbiB3ZVxcbiA3NzM6XFx0XFx0ICogd2FpdCBmb3IgaXQgdG8gdXAgaW5jcmVtZW50IHRoZSByZWZjb3VudFxcbiA3NzQ6XFx0XFx0ICovXFxuIDc3NTpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0X19zb2NrX3B1dChcXHUwMDI2aXBjLVxcdTAwM2Vzayk7XFxuIDc3ODpcXHR9XFxuIDc3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6MzY6MzUuMDYxNzA1MThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjg0MjQzNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgUVJUUiBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgaXNzdWUuIE15IGluaXRpYWwgaHVuY2ggcG9pbnRzIHRvd2FyZHMgYSBwb3RlbnRpYWwgcHJvYmxlbSB3aXRoaW4gdGhlIFFSVFIgc3Vic3lzdGVtLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGEgc3BlY2lmaWMgYXJlYS4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIHRoZSBgbmV0L3FydHIvYWZfcXJ0ci5jYCBmaWxlIGFuZCBmb2N1cyBvbiBsaW5lcyA5NTUgdG8gOTc1LiBUaGlzIHJhbmdlIGxpa2VseSBjb3ZlcnMgYSBjcml0aWNhbCBmdW5jdGlvbiBvciBzZWN0aW9uIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgcHJvYmxlbSwgbGlrZWx5IHRoZSBsb2dpYyB0aGF0IHByb2Nlc3NlcyBhIHNwZWNpZmljIFFNSSBtZXNzYWdlIHR5cGUsIG9yIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIFFSVFIgc29ja2V0cy4gSG9wZWZ1bGx5LCB0aGlzIHNlZ21lbnQgd2lsbCByZXZlYWwgc29tZXRoaW5nIHVzZWZ1bC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE2MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6MzY6MzYuNzQ1OTUxODMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcXJ0ci9hZl9xcnRyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTU1OlxcdFxcbiA5NTY6XFx0XFx0cmV0dXJuIDA7XFxuIDk1NzpcXHR9XFxuIDk1ODpcXHRcXG4gOTU5OlxcdHN0YXRpYyBpbnQgcXJ0cl9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gOTYwOlxcdHtcXG4gOTYxOlxcdFxcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLVxcdTAwM2Vtc2dfbmFtZSk7XFxuIDk2MjpcXHRcXHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcXG4gOTYzOlxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2thZGRyX3FydHIgKmZyb20sIHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0byk7XFxuIDk2NDpcXHRcXHRfX2xlMzIgcXJ0cl90eXBlID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0RBVEEpO1xcbiA5NjU6XFx0XFx0c3RydWN0IHFydHJfc29jayAqaXBjID0gcXJ0cl9zayhzb2NrLVxcdTAwM2Vzayk7XFxuIDk2NjpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVxcdTAwM2VzaztcXG4gOTY3OlxcdFxcdHN0cnVjdCBxcnRyX25vZGUgKm5vZGU7XFxuIDk2ODpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA5Njk6XFx0XFx0c2l6ZV90IHBsZW47XFxuIDk3MDpcXHRcXHR1MzIgdHlwZTtcXG4gOTcxOlxcdFxcdGludCByYztcXG4gOTcyOlxcdFxcbiA5NzM6XFx0XFx0aWYgKG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgfihNU0dfRE9OVFdBSVQpKVxcbiA5NzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE4OjM2OjM2Ljc0NjA2ODM0MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzMwMjc3NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBRUlRSIE5hbWVzcGFjZSBDb2RlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzIGlzc3VlLCBhbmQgdGhlIGxpa2VseSBzdXNwZWN0IGlzIGx1cmtpbmcgaW4gdGhlIFFSVFIgbmFtZXNwYWNlIGNvZGUuIE15IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSB0byB6ZXJvIGluIG9uIGBuZXQvcXJ0ci9ucy5jYC4gU3BlY2lmaWNhbGx5LCBsaW5lcyAxNzAgdGhyb3VnaCAxOTAuIFRoYXQncyB0aGUgYXJlYSBJIG5lZWQgdG8gZXhhbWluZSBtb3JlIGNsb3NlbHk7IEknbSBiZXR0aW5nIHRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgbG9naWMgcmVsYXRlZCB0byBbaW5zZXJ0IHNwZWNpZmljIGNvbmNlcm4gcmVsZXZhbnQgdG8gdGhlIGNvbnRleHRdIHJlc2lkZXMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLi4uIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgcGFyc2UgdGhhdCBzZWN0aW9uIGFuZCB0cnkgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBnb3RjaGFzIG9yIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBiZSBjYXVzaW5nIHRoZSBiZWhhdmlvciBJJ20gc2VlaW5nLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBsaWtlbHkgaGFwcGVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzA4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjozOS40NzYzNDk0MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvbnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzA6XFx0XFx0cGt0LmNtZCA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9ERUxfU0VSVkVSKTtcXG4gMTcxOlxcdFxcdHBrdC5zZXJ2ZXIuc2VydmljZSA9IGNwdV90b19sZTMyKHNydi1cXHUwMDNlc2VydmljZSk7XFxuIDE3MjpcXHRcXHRwa3Quc2VydmVyLmluc3RhbmNlID0gY3B1X3RvX2xlMzIoc3J2LVxcdTAwM2VpbnN0YW5jZSk7XFxuIDE3MzpcXHRcXHRwa3Quc2VydmVyLm5vZGUgPSBjcHVfdG9fbGUzMihzcnYtXFx1MDAzZW5vZGUpO1xcbiAxNzQ6XFx0XFx0cGt0LnNlcnZlci5wb3J0ID0gY3B1X3RvX2xlMzIoc3J2LVxcdTAwM2Vwb3J0KTtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0bXNnLm1zZ19uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKWRlc3Q7XFxuIDE3NzpcXHRcXHRtc2cubXNnX25hbWVsZW4gPSBzaXplb2YoKmRlc3QpO1xcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHRyZXQgPSBrZXJuZWxfc2VuZG1zZyhxcnRyX25zLnNvY2ssIFxcdTAwMjZtc2csIFxcdTAwMjZpdiwgMSwgc2l6ZW9mKHBrdCkpO1xcbiAxODA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FTk9ERVYpXFxuIDE4MTpcXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcXFxuXFxcIik7XFxuIDE4MjpcXHR9XFxuIDE4MzpcXHRcXG4gMTg0OlxcdHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcXG4gMTg1OlxcdFxcdFxcdFxcdCAgYm9vbCBuZXcpXFxuIDE4NjpcXHR7XFxuIDE4NzpcXHRcXHRzdHJ1Y3QgcXJ0cl9jdHJsX3BrdCBwa3Q7XFxuIDE4ODpcXHRcXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsgfTtcXG4gMTg5OlxcdFxcdHN0cnVjdCBrdmVjIGl2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjozOS40NzY0NDY1NjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzQ2NjIxNTIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGVzZSBjaGFuZ2VzIGFwcGVhciBpbm5vY3VvdXMsIGJ1dCBhcyB3ZSBhbGwga25vdywgb25lIGNhbid0IGJlIHRvbyBjYXJlZnVsLiBMZXQncyBtYWtlIGNlcnRhaW4gdGhhdCB0aGlzIHBhdGNoIGlzbid0IGEgd29sZiBpbiBzaGVlcCdzIGNsb3RoaW5nLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGNoYW5nZXMgYXJlIGFsbCBzZWVtaW5nbHkgY29zbWV0aWM6XG5cbjEuICBXZSBoYXZlIHNvbWUgY29tbWVudCBmb3JtYXR0aW5nIGNoYW5nZXMuIFNwZWNpZmljYWxseSwgYWRqdXN0aW5nIGNvbW1lbnQgc3R5bGVzOlxuICAgIGBgYGNcbiAgICBcdC8qIE5lZWQgdG8gZW5zdXJlIHRoYXQgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgY2FycmllcyB0aGUgb3RoZXJ3aXNlIGxvc3RcbiAgICAtXHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZSAqL1xuICAgICtcdCAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lXG4gICAgK1x0ICovXG4gICAgYGBgXG4gICAgYW5kXG4gICAgYGBgY1xuICAgIFx0LyogRW5zdXJlIHRoYXQgaWYgcXJ0cl9wb3J0X2xvb2t1cCgpIGRpZCBlbnRlciB0aGUgUkNVIHJlYWQgc2VjdGlvbiB3ZVxuICAgIC1cdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnQgKi9cbiAgICArXHQgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50XG4gICAgK1x0ICovXG4gICAgYGBgXG5cbiAgICBOb3RoaW5nIGhlcmUgdG91Y2hlcyBhbnkgYWN0dWFsIGxvZ2ljLiBJdCdzIHB1cmVseSBzdHlsaXN0aWMuXG5cbjIuICBBIHdoaXRlc3BhY2UgY2hhbmdlIGluIGEgY2FzdDpcbiAgICBgYGBjXG4gICAgLVx0dmVyID0gKih1OCopZGF0YTtcbiAgICArXHR2ZXIgPSAqKHU4ICopZGF0YTtcbiAgICBgYGBcbiAgICBUaGlzIGlzIGFsc28gYSBzdHlsZSBjaGFuZ2U7IGl0IHdvbid0IGltcGFjdCBob3cgdGhlIGNvbXBpbGVyIHNlZXMgdGhlIGNvZGUgb3IgYW55IHByb2R1Y2VkIGFzc2VtYmx5LlxuXG4zLiAgQWRkaW5nIHBhcmFtZXRlciBuYW1lcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb246XG4gICAgYGBgY1xuICAgIC1cdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50LFxuICAgIC1cdFx0XHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICosIHN0cnVjdCBzb2NrYWRkcl9xcnRyICopO1xuICAgICtcdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlLFxuICAgICtcdFx0XHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xuICAgIGBgYFxuICAgIFRoaXMgaXMgYSBwdXJlbHkgc3ludGFjdGljIG1vZGlmaWNhdGlvbiBmb3IgcmVhZGFiaWxpdHkuIFRoZSBjb21waWxlciB3b24ndCBldmVuIHNlZSB0aGUgbmFtZXMuXG5cbjQuICBSZW1vdmluZyBhIHJlZHVuZGFudCBgcmV0dXJuO2Agc3RhdGVtZW50IGFuZCBhIGJsYW5rIGxpbmUgZnJvbSBhIHZvaWQgZnVuY3Rpb24gKGBzZXJ2aWNlX2Fubm91bmNlX2RlbGApOlxuICAgIGBgYGNcbiAgICAtXG4gICAgLVx0cmV0dXJuO1xuICAgICB9XG4gICAgYGBgXG4gICAgVGhpcyBlbGltaW5hdGVzIGEgcmVkdW5kYW50IHN0YXRlbWVudC4gSXQgZG9lcyBub3RoaW5nIGZ1bmN0aW9uYWwuXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIGNyaXRlcmlhLiBXZSBhcmUgdG9sZCB0byBiZSBza2VwdGljYWwgYWJvdXQgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIGNsYWltcywgYnV0IGluIHRoaXMgY2FzZSwgdGhlIGNoYW5nZXMgYXJlIGNsZWFybHkgY29uZmluZWQgdG8gbm9uLWV4ZWN1dGFibGUgY29kZSAoY29tbWVudHMsIGZvcm1hdHRpbmcgYW5kIHB1cmVseSBzeW50YWN0aWMgdHdlYWtzIHRoYXQgY2FuJ3QgaW5mbHVlbmNlIHRoZSBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlKS4gTm9uZSBvZiB0aGUgY2hhbmdlcyBtb2RpZnkgYW55IGxvZ2ljLCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgYWx0ZXIgdGhlIGNvbXBpbGVkIGNvZGUgaW4gYW55IHdheS5cblxuVGhlIHNwZWNpZmljIGluc3RydWN0aW9ucyBzdGF0ZSB0aGF0IGlmICphbGwqIG1vZGlmaWNhdGlvbnMgYXJlIHN0cmljdGx5IGluIG9uZSBvciBtb3JlIG9mIHRoZSBcIk5FR0FUSVZFIENSSVRFUklBXCIgY2F0ZWdvcmllcyAoY29tbWVudHMsIGZvcm1hdHRpbmcsIHVzZXItc3BhY2UgdG9vbHMsIGV0Yy4pIHRoZW4gd2UgY2FuIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuSW4gdGhpcyBjYXNlLCBhbGwgb2YgdGhlIGNoYW5nZXMgZmFsbCBzcXVhcmVseSBpbnRvIHRob3NlIGNhdGVnb3JpZXMuIFRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIHRoZSByZXN1bHRzIGFzIGZvbGxvd3M6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggb25seSBpbmNsdWRlcyBjb2RlIHN0eWxlIGFuZCBmb3JtYXR0aW5nIGZpeGVzIChjb21tZW50IGZvcm1hdHRpbmcsIHNwYWNpbmcgaW4gY2FzdCwgcGFyYW1ldGVyIG5hbWluZyBpbiBmdW5jdGlvbiBwb2ludGVyIHR5cGUsIGFuZCByZW1vdmFsIG9mIGEgcmVkdW5kYW50IHJldHVybiBpbiBhIHZvaWQgZnVuY3Rpb24pIHdpdGggemVybyBjaGFuZ2VzIHRvIGV4ZWN1dGFibGUgbG9naWMgb3IgY29udHJvbCBmbG93LlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gIChlbXB0eSBhcnJheSlcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKGVtcHR5IGFycmF5KVxuXG5JJ2xsIHByb2NlZWQgd2l0aCBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSB2YWx1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTgsIk91dHB1dFRva2VucyI6ODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxODozNjo0Ni45NDI2NjM4ODNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb250YWlucyBvbmx5IG5vbi1leGVjdXRhYmxlIGNvc21ldGljIGFuZCBzdHlsZSBjbGVhbnVwcyAoY29tbWVudCBmb3JtYXR0aW5nLCB3aGl0ZXNwYWNlIGluIGEgY2FzdCwgYWRkaW5nIHBhcmFtZXRlciBuYW1lcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb24sIGFuZCByZW1vdmluZyBhIHJlZHVuZGFudCByZXR1cm4gc3RhdGVtZW50IGZyb20gYSB2b2lkIGZ1bmN0aW9uKS4gVGhlcmUgYXJlIG5vIGV4ZWN1dGFibGUgbG9naWMsIGNvbnRyb2wgZmxvdywgb3IgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnRhaW5zIG9ubHkgbm9uLWV4ZWN1dGFibGUgY29zbWV0aWMgYW5kIHN0eWxlIGNsZWFudXBzIChjb21tZW50IGZvcm1hdHRpbmcsIHdoaXRlc3BhY2UgaW4gYSBjYXN0LCBhZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiwgYW5kIHJlbW92aW5nIGEgcmVkdW5kYW50IHJldHVybiBzdGF0ZW1lbnQgZnJvbSBhIHZvaWQgZnVuY3Rpb24pLiBUaGVyZSBhcmUgbm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZSBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTg6MzY6NDYuOTQyNjk3NDIzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workfloww7pbw[1] Phase: Running StartedAt: 2026-09-13 18:36:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww7pbw[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-13 18:36:58 +0000 UTC FinishedAt: 2026-09-13 18:37:02 +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,}