Name: series-workflowxj879 Phase: Failed StartedAt: 2026-08-19 02:26:05 +0000 UTC FinishedAt: 2026-08-19 03:07:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxj879[0] Phase: Succeeded StartedAt: 2026-08-19 02:26:05 +0000 UTC FinishedAt: 2026-08-19 03:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxj879[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 02:26:05 +0000 UTC FinishedAt: 2026-08-19 03:07:29 +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+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBlZjBjYTM3Mjg4ZmQ3ZWI1ZTY2YjhkZDk5MDE4ZmZlOWY3ZDRmZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzowNzoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuaW5kZXggYTZiZDNmZTY0MjNhZC4uYmQwMjczNzdkZmY2ZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbkBAIC0xOTksNiAmIzQzOzE5OSw3IEBAIFVzYWdlXG4gXHRcdC1wXHRcdFNvcnQgYnkgcGlkLlxuIFx0XHQtUFx0XHRTb3J0IGJ5IHRnaWQuXG4gXHRcdC1uXHRcdFNvcnQgYnkgdGFzayBjb21tYW5kIG5hbWUuXG4mIzQzO1x0XHQtTVx0XHRTb3J0IGJ5IG1vZHVsZSBuYW1lLlxuIFx0XHQtclx0XHRTb3J0IGJ5IG1lbW9yeSByZWxlYXNlIHRpbWUuXG4gXHRcdC1zXHRcdFNvcnQgYnkgc3RhY2sgdHJhY2UuXG4gXHRcdC10XHRcdFNvcnQgYnkgdGltZXMgKGRlZmF1bHQpLlxuQEAgLTI0MCw4ICYjNDM7MjQxLDEwIEBAIFVzYWdlXG4gXHRcdFx0XHRcdGdyb3VwIElEIG51bWJlcnMgYXBwZWFyIGluIFx1MDAzY3RnaWRsaXN0XHUwMDNlLlxuIFx0XHQtLW5hbWUgXHUwMDNjY21kbGlzdFx1MDAzZVx0U2VsZWN0IGJ5IHRhc2sgY29tbWFuZCBuYW1lLiBUaGlzIHNlbGVjdHMgdGhlIGJsb2NrcyB3aG9zZVxuIFx0XHRcdFx0XHR0YXNrIGNvbW1hbmQgbmFtZSBhcHBlYXIgaW4gXHUwMDNjY21kbGlzdFx1MDAzZS5cbiYjNDM7XHRcdC0tbW9kdWxlIFx1MDAzY21vZGxpc3RcdTAwM2VcdFNlbGVjdCBieSBtb2R1bGUgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2VcbiYjNDM7XHRcdFx0XHRcdG1vZHVsZSBuYW1lIGFwcGVhciBpbiBcdTAwM2Ntb2RsaXN0XHUwMDNlLlxuIFxuLVx0XHRcdTAwM2NwaWRsaXN0XHUwMDNlLCBcdTAwM2N0Z2lkbGlzdFx1MDAzZSwgXHUwMDNjY21kbGlzdFx1MDAzZSBhcmUgc2luZ2xlIGFyZ3VtZW50cyBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LFxuJiM0MztcdFx0XHUwMDNjcGlkbGlzdFx1MDAzZSwgXHUwMDNjdGdpZGxpc3RcdTAwM2UsIFx1MDAzY2NtZGxpc3RcdTAwM2UsIFx1MDAzY21vZGxpc3RcdTAwM2UgYXJlIHNpbmdsZSBhcmd1bWVudHMgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCxcbiBcdFx0d2hpY2ggb2ZmZXJzIGEgd2F5IHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBzZWxlY3RpbmcgcnVsZXMuXG4gXG4gXG5AQCAtMjQ5LDYgJiM0MzsyNTIsNyBAQCBVc2FnZVxuIFx0XHRcdFx0Li9wYWdlX293bmVyX3NvcnQgXHUwMDNjaW5wdXRcdTAwM2UgXHUwMDNjb3V0cHV0XHUwMDNlIC0tcGlkPTFcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLXRnaWQ9MSwyLDNcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLW5hbWUgbmFtZTEsbmFtZTJcbiYjNDM7XHRcdFx0XHQuL3BhZ2Vfb3duZXJfc29ydCBcdTAwM2NpbnB1dFx1MDAzZSBcdTAwM2NvdXRwdXRcdTAwM2UgLS1tb2R1bGUgeGZzLGV4dDRcbiBcbiBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuID09PT09PT09PT09PT09PT09PT09PT09PT09XG5AQCAtMjY1LDYgJiM0MzsyNjksNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0ZnRcdFx0ZnJlZV90c1x0XHR0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgcmVsZWFzZWRcbiBcdGF0XHRcdGFsbG9jX3RzXHR0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgYWxsb2NhdGVkXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbiYjNDM7XHRtb2RcdFx0bW9kdWxlXHRcdGtlcm5lbCBtb2R1bGUgbmFtZVxuIFxuICAgRm9yIC0tY3VsbCBvcHRpb246XG4gXG5AQCAtMjc1LDYgJiM0MzsyODAsNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0Zlx0XHRmcmVlXHRcdHdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90XG4gXHRzdFx0XHRzdGFja3RyYWNlXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbiYjNDM7XHRtb2RcdFx0bW9kdWxlXHRcdGtlcm5lbCBtb2R1bGUgbmFtZVxuIFxuIEZpbHRlcmluZyBwYWdlX293bmVyIG91dHB1dFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmRpZmYgLS1naXQgYS90b29scy9tbS9wYWdlX293bmVyX3NvcnQuYyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jXG5pbmRleCAzNWQzZDI1NDk0MWM5Li4xNmFjNjIxYjc0ZjYyIDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jXG5AQCAtMjUsMTEgJiM0MzsyNSwxMyBAQFxuICNpbmNsdWRlIFx1MDAzY2dldG9wdC5oXHUwMDNlXG4gXG4gI2RlZmluZSBUQVNLX0NPTU1fTEVOIDE2XG4mIzQzOyNkZWZpbmUgTU9EVUxFX05BTUVfTEVOIDY0XG4gXG4gc3RydWN0IGJsb2NrX2xpc3Qge1xuIFx0Y2hhciAqdHh0O1xuIFx0Y2hhciAqY29tbTsgLy8gdGFzayBjb21tYW5kIG5hbWVcbiBcdGNoYXIgKnN0YWNrdHJhY2U7XG4mIzQzO1x0Y2hhciAqbW9kdWxlOyAvLyBrZXJuZWwgbW9kdWxlIG5hbWVcbiBcdF9fdTY0IHRzX25zZWM7XG4gXHRpbnQgbGVuO1xuIFx0aW50IG51bTtcbkBAIC00MSw3ICYjNDM7NDMsOCBAQCBzdHJ1Y3QgYmxvY2tfbGlzdCB7XG4gZW51bSBGSUxURVJfQklUIHtcbiBcdEZJTFRFUl9QSUQgPSAxXHUwMDNjXHUwMDNjMSxcbiBcdEZJTFRFUl9UR0lEID0gMVx1MDAzY1x1MDAzYzIsXG4tXHRGSUxURVJfQ09NTSA9IDFcdTAwM2NcdTAwM2MzXG4mIzQzO1x0RklMVEVSX0NPTU0gPSAxXHUwMDNjXHUwMDNjMyxcbiYjNDM7XHRGSUxURVJfTU9EVUxFID0gMVx1MDAzY1x1MDAzYzRcbiB9O1xuIFxuIGVudW0gRklMVEVSX1JFU1VMVCB7XG5AQCAtNTUsNyAmIzQzOzU4LDggQEAgZW51bSBDVUxMX0JJVCB7XG4gXHRDVUxMX1RHSUQgPSAxXHUwMDNjXHUwMDNjMixcbiBcdENVTExfQ09NTSA9IDFcdTAwM2NcdTAwM2MzLFxuIFx0Q1VMTF9TVEFDS1RSQUNFID0gMVx1MDAzY1x1MDAzYzQsXG4tXHRDVUxMX0FMTE9DQVRPUiA9IDFcdTAwM2NcdTAwM2M1XG4mIzQzO1x0Q1VMTF9BTExPQ0FUT1IgPSAxXHUwMDNjXHUwMDNjNSxcbiYjNDM7XHRDVUxMX01PRFVMRSA9IDFcdTAwM2NcdTAwM2M2XG4gfTtcbiBlbnVtIEFMTE9DQVRPUl9CSVQge1xuIFx0QUxMT0NBVE9SX0NNQSA9IDFcdTAwM2NcdTAwM2MxLFxuQEAgLTY1LDcgJiM0Mzs2OSw4IEBAIGVudW0gQUxMT0NBVE9SX0JJVCB7XG4gfTtcbiBlbnVtIEFSR19UWVBFIHtcbiBcdEFSR19UWFQsIEFSR19DT01NLCBBUkdfU1RBQ0tUUkFDRSwgQVJHX0FMTE9DX1RTLCBBUkdfQ1VMTF9USU1FLFxuLVx0QVJHX1BBR0VfTlVNLCBBUkdfUElELCBBUkdfVEdJRCwgQVJHX1VOS05PV04sIEFSR19BTExPQ0FUT1JcbiYjNDM7XHRBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUixcbiYjNDM7XHRBUkdfTU9EVUxFXG4gfTtcbiBlbnVtIFNPUlRfT1JERVIge1xuIFx0U09SVF9BU0MgPSAxLFxuQEAgLTc5LDE1ICYjNDM7ODQsMTggQEAgZW51bSBDT01QX0ZMQUcge1xuIFx0Q09NUF9TVEFDSyA9IDFcdTAwM2NcdTAwM2MzLFxuIFx0Q09NUF9OVU0gPSAxXHUwMDNjXHUwMDNjNCxcbiBcdENPTVBfVEdJRCA9IDFcdTAwM2NcdTAwM2M1LFxuLVx0Q09NUF9DT01NID0gMVx1MDAzY1x1MDAzYzZcbiYjNDM7XHRDT01QX0NPTU0gPSAxXHUwMDNjXHUwMDNjNixcbiYjNDM7XHRDT01QX01PRFVMRSA9IDFcdTAwM2NcdTAwM2M3XG4gfTtcbiBzdHJ1Y3QgZmlsdGVyX2NvbmRpdGlvbiB7XG4gXHRwaWRfdCAqcGlkcztcbiBcdHBpZF90ICp0Z2lkcztcbiBcdGNoYXIgKipjb21tcztcbiYjNDM7XHRjaGFyICoqbW9kdWxlcztcbiBcdGludCBwaWRzX3NpemU7XG4gXHRpbnQgdGdpZHNfc2l6ZTtcbiBcdGludCBjb21tc19zaXplO1xuJiM0MztcdGludCBtb2R1bGVzX3NpemU7XG4gfTtcbiBzdHJ1Y3Qgc29ydF9jb25kaXRpb24ge1xuIFx0aW50ICgqKmNtcHMpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTtcbkBAIC0xMDEsNiAmIzQzOzEwOSw3IEBAIHN0YXRpYyByZWdleF90IHBpZF9wYXR0ZXJuO1xuIHN0YXRpYyByZWdleF90IHRnaWRfcGF0dGVybjtcbiBzdGF0aWMgcmVnZXhfdCBjb21tX3BhdHRlcm47XG4gc3RhdGljIHJlZ2V4X3QgdHNfbnNlY19wYXR0ZXJuO1xuJiM0MztzdGF0aWMgcmVnZXhfdCBtb2R1bGVfcGF0dGVybjtcbiBzdGF0aWMgc3RydWN0IGJsb2NrX2xpc3QgKmxpc3Q7XG4gc3RhdGljIGludCBsaXN0X3NpemU7XG4gc3RhdGljIGludCBtYXhfc2l6ZTtcbkBAIC0xODQsNiAmIzQzOzE5MywxMyBAQCBzdGF0aWMgaW50IGNvbXBhcmVfY29tbShjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpXG4gXHRyZXR1cm4gc3RyY21wKGwxLVx1MDAzZWNvbW0sIGwyLVx1MDAzZWNvbW0pO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBjb21wYXJlX21vZHVsZShjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYmxvY2tfbGlzdCAqbDEgPSBwMSwgKmwyID0gcDI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzdHJjbXAobDEtXHUwMDNlbW9kdWxlLCBsMi1cdTAwM2Vtb2R1bGUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgY29tcGFyZV90cyhjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJsb2NrX2xpc3QgKmwxID0gcDEsICpsMiA9IHAyO1xuQEAgLTIwNyw2ICYjNDM7MjIzLDggQEAgc3RhdGljIGludCBjb21wYXJlX2N1bGxfY29uZGl0aW9uKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiBcdFx0cmV0dXJuIGNvbXBhcmVfdGdpZChwMSwgcDIpO1xuIFx0aWYgKChjdWxsIFx1MDAyNiBDVUxMX0NPTU0pIFx1MDAyNlx1MDAyNiBjb21wYXJlX2NvbW0ocDEsIHAyKSlcbiBcdFx0cmV0dXJuIGNvbXBhcmVfY29tbShwMSwgcDIpO1xuJiM0MztcdGlmICgoY3VsbCBcdTAwMjYgQ1VMTF9NT0RVTEUpIFx1MDAyNlx1MDAyNiBjb21wYXJlX21vZHVsZShwMSwgcDIpKVxuJiM0MztcdFx0cmV0dXJuIGNvbXBhcmVfbW9kdWxlKHAxLCBwMik7XG4gXHRpZiAoKGN1bGwgXHUwMDI2IENVTExfQUxMT0NBVE9SKSBcdTAwMjZcdTAwMjYgY29tcGFyZV9hbGxvY2F0b3IocDEsIHAyKSlcbiBcdFx0cmV0dXJuIGNvbXBhcmVfYWxsb2NhdG9yKHAxLCBwMik7XG4gXHRyZXR1cm4gMDtcbkBAIC00MTEsOSAmIzQzOzQyOSwzMyBAQCBzdGF0aWMgY2hhciAqZ2V0X2NvbW0oY2hhciAqYnVmKVxuIFx0cmV0dXJuIGNvbW1fc3RyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNoYXIgKmdldF9tb2R1bGUoY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqbW9kdWxlX3N0ciA9IG1hbGxvYyhNT0RVTEVfTkFNRV9MRU4pO1xuJiM0MztcdHJlZ21hdGNoX3QgcG1hdGNoWzJdO1xuJiM0MztcdGludCB2YWxfbGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1vZHVsZV9zdHIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRtZW1zZXQobW9kdWxlX3N0ciwgMCwgTU9EVUxFX05BTUVfTEVOKTtcbiYjNDM7XHRpZiAocmVnZXhlYyhcdTAwMjZtb2R1bGVfcGF0dGVybiwgYnVmLCAyLCBwbWF0Y2gsIFJFR19OT1RCT0wpICE9IDAgfHwgcG1hdGNoWzFdLnJtX3NvID09IC0xKSB7XG4mIzQzO1x0XHRzdHJjcHkobW9kdWxlX3N0ciwgXCYjMzQ7dm1saW51eFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gbW9kdWxlX3N0cjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHZhbF9sZW4gPSBwbWF0Y2hbMV0ucm1fZW8gLSBwbWF0Y2hbMV0ucm1fc287XG4mIzQzO1x0aWYgKChzaXplX3QpdmFsX2xlbiBcdTAwM2U9IE1PRFVMRV9OQU1FX0xFTilcbiYjNDM7XHRcdHZhbF9sZW4gPSBNT0RVTEVfTkFNRV9MRU4gLSAxO1xuJiM0MztcdG1lbWNweShtb2R1bGVfc3RyLCBidWYgJiM0MzsgcG1hdGNoWzFdLnJtX3NvLCB2YWxfbGVuKTtcbiYjNDM7XHRtb2R1bGVfc3RyW3ZhbF9sZW5dID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1vZHVsZV9zdHI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZnJlZV9ibG9ja19saXN0KHN0cnVjdCBibG9ja19saXN0ICpibG9jaylcbiB7XG4gXHRmcmVlKGJsb2NrLVx1MDAzZWNvbW0pO1xuJiM0MztcdGZyZWUoYmxvY2stXHUwMDNlbW9kdWxlKTtcbiBcdGZyZWUoYmxvY2stXHUwMDNldHh0KTtcbiB9XG4gXG5AQCAtNDMzLDYgJiM0Mzs0NzUsOCBAQCBzdGF0aWMgaW50IGdldF9hcmdfdHlwZShjb25zdCBjaGFyICphcmcpXG4gXHRcdHJldHVybiBBUkdfQUxMT0NfVFM7XG4gXHRlbHNlIGlmICghc3RyY21wKGFyZywgXCYjMzQ7YWxsb2NhdG9yXCYjMzQ7KSB8fCAhc3RyY21wKGFyZywgXCYjMzQ7YXRvclwmIzM0OykpXG4gXHRcdHJldHVybiBBUkdfQUxMT0NBVE9SO1xuJiM0MztcdGVsc2UgaWYgKCFzdHJjbXAoYXJnLCBcJiMzNDttb2R1bGVcJiMzNDspIHx8ICFzdHJjbXAoYXJnLCBcJiMzNDttb2RcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIEFSR19NT0RVTEU7XG4gXHRlbHNlIHtcbiBcdFx0cmV0dXJuIEFSR19VTktOT1dOO1xuIFx0fVxuQEAgLTQ4MywyNSAmIzQzOzUyNywzNiBAQCBzdGF0aWMgYm9vbCBtYXRjaF9zdHJfbGlzdChjb25zdCBjaGFyICpzdHIsIGNoYXIgKipsaXN0LCBpbnQgbGlzdF9zaXplKVxuIFxuIHN0YXRpYyBlbnVtIEZJTFRFUl9SRVNVTFQgZmlsdGVyX3JlY29yZChjaGFyICpidWYpXG4ge1xuLVx0Y2hhciAqY29tbTtcbiYjNDM7XHRjaGFyICpjb21tLCAqbW9kdWxlO1xuIFxuIFx0aWYgKChmaWx0ZXIgXHUwMDI2IEZJTFRFUl9QSUQpIFx1MDAyNlx1MDAyNiAhbWF0Y2hfbnVtX2xpc3QoZ2V0X3BpZChidWYpLCBmYy5waWRzLCBmYy5waWRzX3NpemUpKVxuIFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4gXHRpZiAoKGZpbHRlciBcdTAwMjYgRklMVEVSX1RHSUQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhbWF0Y2hfbnVtX2xpc3QoZ2V0X3RnaWQoYnVmKSwgZmMudGdpZHMsIGZjLnRnaWRzX3NpemUpKVxuIFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4tXHRpZiAoIShmaWx0ZXIgXHUwMDI2IEZJTFRFUl9DT01NKSlcbiYjNDM7XHRpZiAoIShmaWx0ZXIgXHUwMDI2IChGSUxURVJfQ09NTSB8IEZJTFRFUl9NT0RVTEUpKSlcbiBcdFx0cmV0dXJuIEZJTFRFUl9NQVRDSDtcbiBcbi1cdGNvbW0gPSBnZXRfY29tbShidWYpO1xuLVx0aWYgKCFjb21tKVxuLVx0XHRyZXR1cm4gRklMVEVSX0VSUk9SO1xuLVxuLVx0aWYgKCFtYXRjaF9zdHJfbGlzdChjb21tLCBmYy5jb21tcywgZmMuY29tbXNfc2l6ZSkpIHtcbiYjNDM7XHRpZiAoZmlsdGVyIFx1MDAyNiBGSUxURVJfQ09NTSkge1xuJiM0MztcdFx0Y29tbSA9IGdldF9jb21tKGJ1Zik7XG4mIzQzO1x0XHRpZiAoIWNvbW0pXG4mIzQzO1x0XHRcdHJldHVybiBGSUxURVJfRVJST1I7XG4mIzQzO1x0XHRpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkge1xuJiM0MztcdFx0XHRmcmVlKGNvbW0pO1xuJiM0MztcdFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4mIzQzO1x0XHR9XG4gXHRcdGZyZWUoY29tbSk7XG4tXHRcdHJldHVybiBGSUxURVJfU0tJUDtcbiBcdH1cbi1cdGZyZWUoY29tbSk7XG4mIzQzO1x0aWYgKGZpbHRlciBcdTAwMjYgRklMVEVSX01PRFVMRSkge1xuJiM0MztcdFx0bW9kdWxlID0gZ2V0X21vZHVsZShidWYpO1xuJiM0MztcdFx0aWYgKCFtb2R1bGUpXG4mIzQzO1x0XHRcdHJldHVybiBGSUxURVJfRVJST1I7XG4mIzQzO1x0XHRpZiAoIW1hdGNoX3N0cl9saXN0KG1vZHVsZSwgZmMubW9kdWxlcywgZmMubW9kdWxlc19zaXplKSkge1xuJiM0MztcdFx0XHRmcmVlKG1vZHVsZSk7XG4mIzQzO1x0XHRcdHJldHVybiBGSUxURVJfU0tJUDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGZyZWUobW9kdWxlKTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gRklMVEVSX01BVENIO1xuIH1cbiBcbkBAIC01NDcsNiAmIzQzOzYwMiwxMiBAQCBzdGF0aWMgYm9vbCBhZGRfbGlzdChjaGFyICpidWYsIGludCBsZW4sIGNoYXIgKmV4dF9idWYpXG4gXHRcdGxpc3RbbGlzdF9zaXplXS5zdGFja3RyYWNlJiM0MzsmIzQzOztcbiBcdGxpc3RbbGlzdF9zaXplXS50c19uc2VjID0gZ2V0X3RzX25zZWMoYnVmKTtcbiBcdGxpc3RbbGlzdF9zaXplXS5hbGxvY2F0b3IgPSBnZXRfYWxsb2NhdG9yKGJ1ZiwgZXh0X2J1Zik7XG4mIzQzO1x0bGlzdFtsaXN0X3NpemVdLm1vZHVsZSA9IGdldF9tb2R1bGUoYnVmKTtcbiYjNDM7XHRpZiAoIWxpc3RbbGlzdF9zaXplXS5tb2R1bGUpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtPdXQgb2YgbWVtb3J5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGZyZWVfYmxvY2tfbGlzdChcdTAwMjZsaXN0W2xpc3Rfc2l6ZV0pO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiBcdGxpc3Rfc2l6ZSYjNDM7JiM0Mzs7XG4gXHRpZiAobGlzdF9zaXplICUgMTAwMCA9PSAwKSB7XG4gXHRcdHByaW50ZihcJiMzNDtsb2FkZWQgJWRcXHJcJiMzNDssIGxpc3Rfc2l6ZSk7XG5AQCAtNTczLDYgJiM0Mzs2MzQsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9jdWxsX2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cilcbiBcdFx0XHRjdWxsIHw9IENVTExfU1RBQ0tUUkFDRTtcbiBcdFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX0FMTE9DQVRPUilcbiBcdFx0XHRjdWxsIHw9IENVTExfQUxMT0NBVE9SO1xuJiM0MztcdFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSlcbiYjNDM7XHRcdFx0Y3VsbCB8PSBDVUxMX01PRFVMRTtcbiBcdFx0ZWxzZSB7XG4gXHRcdFx0ZnJlZV9leHBsb2RlKGFyZ3MsIHNpemUpO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbkBAIC02MzUsNiAmIzQzOzY5OCw4IEBAIHN0YXRpYyBib29sIHBhcnNlX3NvcnRfYXJncyhjb25zdCBjaGFyICphcmdfc3RyKVxuIFx0XHRcdHNjLmNtcHNbaV0gPSBjb21wYXJlX3R4dDtcbiBcdFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX0FMTE9DQVRPUilcbiBcdFx0XHRzYy5jbXBzW2ldID0gY29tcGFyZV9hbGxvY2F0b3I7XG4mIzQzO1x0XHRlbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfTU9EVUxFKVxuJiM0MztcdFx0XHRzYy5jbXBzW2ldID0gY29tcGFyZV9tb2R1bGU7XG4gXHRcdGVsc2Uge1xuIFx0XHRcdGZyZWVfZXhwbG9kZShhcmdzLCBzaXplKTtcbiBcdFx0XHRzYy5zaXplID0gMDtcbkBAIC02OTEsNyAmIzQzOzc1Niw4IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4gXHRcdFwmIzM0Oy1wXFx0XFx0XFx0U29ydCBieSBwaWQuXFxuXCYjMzQ7XG4gXHRcdFwmIzM0Oy1QXFx0XFx0XFx0U29ydCBieSB0Z2lkLlxcblwmIzM0O1xuIFx0XHRcJiMzNDstc1xcdFxcdFxcdFNvcnQgYnkgdGhlIHN0YWNrdHJhY2UuXFxuXCYjMzQ7XG4tXHRcdFwmIzM0Oy10XFx0XFx0XFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxcblxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7LXRcXHRcXHRcXHRTb3J0IGJ5IG51bWJlciBvZiB0aW1lcyByZWNvcmQgaXMgc2VlbiAoZGVmYXVsdCkuXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDstTVxcdFxcdFxcdFNvcnQgYnkgbW9kdWxlIG5hbWUuXFxuXFxuXCYjMzQ7XG4gXHRcdFwmIzM0Oy0tcGlkIFx1MDAzY3BpZGxpc3RcdTAwM2VcXHRcXHRTZWxlY3QgYnkgcGlkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uXCYjMzQ7XG4gXHRcdFwmIzM0OyBvZlxcblxcdFxcdFxcdGJsb2NrcyB3aG9zZSBwcm9jZXNzIElEIG51bWJlcnMgYXBwZWFyIGluIFx1MDAzY3BpZGxpc3RcdTAwM2UuXFxuXCYjMzQ7XG4gXHRcdFwmIzM0Oy0tdGdpZCBcdTAwM2N0Z2lkbGlzdFx1MDAzZVxcdFNlbGVjdCBieSB0Z2lkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uXCYjMzQ7XG5AQCAtNzAwLDExICYjNDM7NzY2LDIxIEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4gXHRcdFwmIzM0Oy0tbmFtZSBcdTAwM2NjbWRsaXN0XHUwMDNlXFx0U2VsZWN0IGJ5IGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZVwmIzM0O1xuIFx0XHRcJiMzNDsgaW5mb3JtYXRpb25cXG5cXHRcXHRcXHRvZiBibG9ja3Mgd2hvc2UgY29tbWFuZCBuYW1lIGFwcGVhcnMgaW5cJiMzNDtcbiBcdFx0XCYjMzQ7IFx1MDAzY2NtZGxpc3RcdTAwM2UuXFxuXCYjMzQ7XG4tXHRcdFwmIzM0Oy0tY3VsbCBcdTAwM2NydWxlc1x1MDAzZVxcdFxcdEN1bGwgYnkgdXNlci1kZWZpbmVkIHJ1bGVzLiBcdTAwM2NydWxlc1x1MDAzZSBpcyBhIFwmIzM0O1xuLVx0XHRcJiMzNDtzaW5nbGVcXG5cXHRcXHRcXHRhcmd1bWVudCBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IFwmIzM0O1xuLVx0XHRcJiMzNDt3aXRoIHNvbWVcXG5cXHRcXHRcXHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgXCYjMzQ7XG4tXHRcdFwmIzM0O3N0YWNrdHJhY2UsIGFsbG9jYXRvcilcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0Oy0tbW9kdWxlIFx1MDAzY21vZGxpc3RcdTAwM2VcXHRTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdFxcdFxcdG9mIGJsb2NrcyB3aG9zZSBtb2R1bGUgbmFtZSBhcHBlYXJzIGluIFx1MDAzY21vZGxpc3RcdTAwM2UuXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDstLWN1bGwgXHUwMDNjcnVsZXNcdTAwM2VcXHRcXHRDdWxsIGJ5IHVzZXItZGVmaW5lZCBydWxlcy4gXHUwMDNjcnVsZXNcdTAwM2UgaXMgYSBzaW5nbGVcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdFxcdFxcdGFyZ3VtZW50IGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgd2l0aCBzb21lXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgc3RhY2t0cmFjZSwgYWxsb2NhdG9yLCBtb2R1bGUpXFxuXCYjMzQ7XG4gXHRcdFwmIzM0Oy0tc29ydCBcdTAwM2NvcmRlclx1MDAzZVxcdFxcdFNwZWNpZnkgc29ydCBvcmRlciBhczogWyYjNDM7fC1da2V5WyxbJiM0Mzt8LV1rZXlbLC4uLl1dXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRBdmFpbGFibGUga2V5czpcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdFxcdFxcdCAgcGlkKHApLCB0Z2lkKHRnKSwgbmFtZShuKSwgc3RhY2t0cmFjZShzdCksXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHQgIHR4dChUKSwgYWxsb2NfdHMoYXQpLCBhbGxvY2F0b3IoYXRvciksIG1vZHVsZShtb2QpXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRUaGUgXFxcJiMzNDsmIzQzO1xcXCYjMzQ7IGlzIG9wdGlvbmFsIHNpbmNlIGRlZmF1bHQgZGlyZWN0aW9uIGlzXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRpbmNyZWFzaW5nIG51bWVyaWNhbCBvciBsZXhpY29ncmFwaGljIG9yZGVyLlxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0TWl4ZWQgdXNlIG9mIGFiYnJldmlhdGVkIGFuZCBjb21wbGV0ZS1mb3JtIGlzIGFsbG93ZWQuXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRFeGFtcGxlczpcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdFxcdFxcdCAgLS1zb3J0PW4sJiM0MztwaWQsLXRnaWRcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdFxcdFxcdCAgLS1zb3J0PW1vZCxhdFxcblwmIzM0O1xuIFx0KTtcbiB9XG4gXG5AQCAtNzIxLDEzICYjNDM7Nzk3LDE0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0eyBcJiMzNDtuYW1lXCYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMyB9LFxuIFx0XHR7IFwmIzM0O2N1bGxcJiMzNDssIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0IH0sXG4gXHRcdHsgXCYjMzQ7c29ydFwmIzM0OywgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDUgfSxcbiYjNDM7XHRcdHsgXCYjMzQ7bW9kdWxlXCYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNiB9LFxuIFx0XHR7IFwmIzM0O2hlbHBcJiMzNDssIG5vX2FyZ3VtZW50LCBOVUxMLCAmIzM5O2gmIzM5OyB9LFxuIFx0XHR7IDAsIDAsIDAsIDB9LFxuIFx0fTtcbiBcbiBcdGNvbXBhcmVfZmxhZyA9IENPTVBfTk9fRkxBRztcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgXCYjMzQ7YWRtbnBzdFBoXCYjMzQ7LCBsb25nb3B0cywgTlVMTCkpICE9IC0xKVxuJiM0MztcdHdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgXCYjMzQ7YWRtbnBzdFBNaFwmIzM0OywgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSlcbiBcdFx0c3dpdGNoIChvcHQpIHtcbiBcdFx0Y2FzZSAmIzM5O2EmIzM5OzpcbiBcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9BTExPQztcbkBAIC03NTMsNiAmIzQzOzgzMCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0Y2FzZSAmIzM5O24mIzM5OzpcbiBcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9DT01NO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O00mIzM5OzpcbiYjNDM7XHRcdFx0Y29tcGFyZV9mbGFnIHw9IENPTVBfTU9EVUxFO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O2gmIzM5OzpcbiBcdFx0XHR1c2FnZSgpO1xuIFx0XHRcdGV4aXQoMCk7XG5AQCAtNzkyLDYgJiM0Mzs4NzIsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdFx0ZXhpdCgxKTtcbiBcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIDY6XG4mIzQzO1x0XHRcdGZpbHRlciA9IGZpbHRlciB8IEZJTFRFUl9NT0RVTEU7XG4mIzQzO1x0XHRcdGZjLm1vZHVsZXMgPSBleHBsb2RlKCYjMzk7LCYjMzk7LCBvcHRhcmcsIFx1MDAyNmZjLm1vZHVsZXNfc2l6ZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHVzYWdlKCk7XG4gXHRcdFx0ZXhpdCgxKTtcbkBAIC04MjEsNiAmIzQzOzkwNSw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9zdGFja3RyYWNlLCBTT1JUX0FTQyk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBDT01QX05PX0ZMQUc6XG4mIzQzO1x0XHRpZiAoc2Muc2l6ZSBcdTAwM2UgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHQvKiBmYWxsdGhyb3VnaCAqL1xuIFx0Y2FzZSBDT01QX05VTTpcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9udW0sIFNPUlRfREVTQyk7XG4gXHRcdGJyZWFrO1xuQEAgLTgzMCw2ICYjNDM7OTE3LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0Y2FzZSBDT01QX0NPTU06XG4gXHRcdHNldF9zaW5nbGVfY21wKGNvbXBhcmVfY29tbSwgU09SVF9BU0MpO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIENPTVBfTU9EVUxFOlxuJiM0MztcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9tb2R1bGUsIFNPUlRfQVNDKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0dXNhZ2UoKTtcbiBcdFx0ZXhpdCgxKTtcbkBAIC04NTMsNiAmIzQzOzk0Myw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0Z290byBvdXRfY29tbTtcbiBcdGlmICghY2hlY2tfcmVnY29tcChcdTAwMjZ0c19uc2VjX3BhdHRlcm4sIFwmIzM0O3RzXFxcXHMqKFswLTldKilcXFxccypuc1wmIzM0OykpXG4gXHRcdGdvdG8gb3V0X3RzO1xuJiM0MztcdGlmICghY2hlY2tfcmVnY29tcChcdTAwMjZtb2R1bGVfcGF0dGVybiwgXCYjMzQ7XFxcXCYjNDM7MHhbMC05YS1mXSYjNDM7LzB4WzAtOWEtZl0mIzQzO1xcXFxzKlxcXFxbKFthLXpBLVowLTlfLV0mIzQzOylcXFxcXVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9tb2R1bGU7XG4gXG4gXHRmc3RhdChmaWxlbm8oZmluKSwgXHUwMDI2c3QpO1xuIFx0bWF4X3NpemUgPSBzdC5zdF9zaXplIC8gMTAwOyAvKiBoYWNrIC4uLiAqL1xuQEAgLTkxMSw2ICYjNDM7MTAwMyw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCYjMzQ7LCBUR0lEICVkXCYjMzQ7LCBsaXN0W2ldLnRnaWQpO1xuIFx0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX0NPTU0gfHwgZmlsdGVyIFx1MDAyNiBGSUxURVJfQ09NTSlcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCYjMzQ7LCB0YXNrX2NvbW1fbmFtZTogJXNcJiMzNDssIGxpc3RbaV0uY29tbSk7XG4mIzQzO1x0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX01PRFVMRSB8fCBmaWx0ZXIgXHUwMDI2IEZJTFRFUl9NT0RVTEUpXG4mIzQzO1x0XHRcdFx0ZnByaW50Zihmb3V0LCBcJiMzNDssIG1vZHVsZTogJXNcJiMzNDssIGxpc3RbaV0ubW9kdWxlKTtcbiBcdFx0XHRpZiAoY3VsbCBcdTAwMjYgQ1VMTF9BTExPQ0FUT1IpIHtcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCYjMzQ7LCBcJiMzNDspO1xuIFx0XHRcdFx0cHJpbnRfYWxsb2NhdG9yKGZvdXQsIGxpc3RbaV0uYWxsb2NhdG9yKTtcbkBAIC05MzEsNiAmIzQzOzEwMjUsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0ZnJlZV9ibG9ja19saXN0KFx1MDAyNmxpc3RbaV0pO1xuIFx0XHRmcmVlKGxpc3QpO1xuIFx0fVxuJiM0MztvdXRfbW9kdWxlOlxuJiM0MztcdHJlZ2ZyZWUoXHUwMDI2bW9kdWxlX3BhdHRlcm4pO1xuIG91dF90czpcbiBcdHJlZ2ZyZWUoXHUwMDI2dHNfbnNlY19wYXR0ZXJuKTtcbiBvdXRfY29tbTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBlZjBjYTM3Mjg4ZmQ3ZWI1ZTY2YjhkZDk5MDE4ZmZlOWY3ZDRmZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzowNzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0CmluZGV4IGE2YmQzZmU2NDIzYWQuLmJkMDI3Mzc3ZGZmNmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdApAQCAtMTk5LDYgJiM0MzsxOTksNyBAQCBVc2FnZQogCQktcAkJU29ydCBieSBwaWQuCiAJCS1QCQlTb3J0IGJ5IHRnaWQuCiAJCS1uCQlTb3J0IGJ5IHRhc2sgY29tbWFuZCBuYW1lLgomIzQzOwkJLU0JCVNvcnQgYnkgbW9kdWxlIG5hbWUuCiAJCS1yCQlTb3J0IGJ5IG1lbW9yeSByZWxlYXNlIHRpbWUuCiAJCS1zCQlTb3J0IGJ5IHN0YWNrIHRyYWNlLgogCQktdAkJU29ydCBieSB0aW1lcyAoZGVmYXVsdCkuCkBAIC0yNDAsOCAmIzQzOzI0MSwxMCBAQCBVc2FnZQogCQkJCQlncm91cCBJRCBudW1iZXJzIGFwcGVhciBpbiAmbHQ7dGdpZGxpc3QmZ3Q7LgogCQktLW5hbWUgJmx0O2NtZGxpc3QmZ3Q7CVNlbGVjdCBieSB0YXNrIGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2UKIAkJCQkJdGFzayBjb21tYW5kIG5hbWUgYXBwZWFyIGluICZsdDtjbWRsaXN0Jmd0Oy4KJiM0MzsJCS0tbW9kdWxlICZsdDttb2RsaXN0Jmd0OwlTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgYmxvY2tzIHdob3NlCiYjNDM7CQkJCQltb2R1bGUgbmFtZSBhcHBlYXIgaW4gJmx0O21vZGxpc3QmZ3Q7LgogCi0JCSZsdDtwaWRsaXN0Jmd0OywgJmx0O3RnaWRsaXN0Jmd0OywgJmx0O2NtZGxpc3QmZ3Q7IGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsCiYjNDM7CQkmbHQ7cGlkbGlzdCZndDssICZsdDt0Z2lkbGlzdCZndDssICZsdDtjbWRsaXN0Jmd0OywgJmx0O21vZGxpc3QmZ3Q7IGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsCiAJCXdoaWNoIG9mZmVycyBhIHdheSB0byBzcGVjaWZ5IGluZGl2aWR1YWwgc2VsZWN0aW5nIHJ1bGVzLgogCiAKQEAgLTI0OSw2ICYjNDM7MjUyLDcgQEAgVXNhZ2UKIAkJCQkuL3BhZ2Vfb3duZXJfc29ydCAmbHQ7aW5wdXQmZ3Q7ICZsdDtvdXRwdXQmZ3Q7IC0tcGlkPTEKIAkJCQkuL3BhZ2Vfb3duZXJfc29ydCAmbHQ7aW5wdXQmZ3Q7ICZsdDtvdXRwdXQmZ3Q7IC0tdGdpZD0xLDIsMwogCQkJCS4vcGFnZV9vd25lcl9zb3J0ICZsdDtpbnB1dCZndDsgJmx0O291dHB1dCZndDsgLS1uYW1lIG5hbWUxLG5hbWUyCiYjNDM7CQkJCS4vcGFnZV9vd25lcl9zb3J0ICZsdDtpbnB1dCZndDsgJmx0O291dHB1dCZndDsgLS1tb2R1bGUgeGZzLGV4dDQKIAogU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlMKID09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yNjUsNiAmIzQzOzI2OSw3IEBAIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTCiAJZnQJCWZyZWVfdHMJCXRpbWVzdGFtcCBvZiB0aGUgcGFnZSB3aGVuIGl0IHdhcyByZWxlYXNlZAogCWF0CQlhbGxvY190cwl0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgYWxsb2NhdGVkCiAJYXRvcgkJYWxsb2NhdG9yCW1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzCiYjNDM7CW1vZAkJbW9kdWxlCQlrZXJuZWwgbW9kdWxlIG5hbWUKIAogICBGb3IgLS1jdWxsIG9wdGlvbjoKIApAQCAtMjc1LDYgJiM0MzsyODAsNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSUwogCWYJCWZyZWUJCXdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90CiAJc3QJCXN0YWNrdHJhY2UJc3RhY2sgdHJhY2Ugb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbgogCWF0b3IJCWFsbG9jYXRvcgltZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlcwomIzQzOwltb2QJCW1vZHVsZQkJa2VybmVsIG1vZHVsZSBuYW1lCiAKIEZpbHRlcmluZyBwYWdlX293bmVyIG91dHB1dAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuYwppbmRleCAzNWQzZDI1NDk0MWM5Li4xNmFjNjIxYjc0ZjYyIDEwMDY0NAotLS0gYS90b29scy9tbS9wYWdlX293bmVyX3NvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuYwpAQCAtMjUsMTEgJiM0MzsyNSwxMyBAQAogI2luY2x1ZGUgJmx0O2dldG9wdC5oJmd0OwogCiAjZGVmaW5lIFRBU0tfQ09NTV9MRU4gMTYKJiM0MzsjZGVmaW5lIE1PRFVMRV9OQU1FX0xFTiA2NAogCiBzdHJ1Y3QgYmxvY2tfbGlzdCB7CiAJY2hhciAqdHh0OwogCWNoYXIgKmNvbW07IC8vIHRhc2sgY29tbWFuZCBuYW1lCiAJY2hhciAqc3RhY2t0cmFjZTsKJiM0MzsJY2hhciAqbW9kdWxlOyAvLyBrZXJuZWwgbW9kdWxlIG5hbWUKIAlfX3U2NCB0c19uc2VjOwogCWludCBsZW47CiAJaW50IG51bTsKQEAgLTQxLDcgJiM0Mzs0Myw4IEBAIHN0cnVjdCBibG9ja19saXN0IHsKIGVudW0gRklMVEVSX0JJVCB7CiAJRklMVEVSX1BJRCA9IDEmbHQ7Jmx0OzEsCiAJRklMVEVSX1RHSUQgPSAxJmx0OyZsdDsyLAotCUZJTFRFUl9DT01NID0gMSZsdDsmbHQ7MwomIzQzOwlGSUxURVJfQ09NTSA9IDEmbHQ7Jmx0OzMsCiYjNDM7CUZJTFRFUl9NT0RVTEUgPSAxJmx0OyZsdDs0CiB9OwogCiBlbnVtIEZJTFRFUl9SRVNVTFQgewpAQCAtNTUsNyAmIzQzOzU4LDggQEAgZW51bSBDVUxMX0JJVCB7CiAJQ1VMTF9UR0lEID0gMSZsdDsmbHQ7MiwKIAlDVUxMX0NPTU0gPSAxJmx0OyZsdDszLAogCUNVTExfU1RBQ0tUUkFDRSA9IDEmbHQ7Jmx0OzQsCi0JQ1VMTF9BTExPQ0FUT1IgPSAxJmx0OyZsdDs1CiYjNDM7CUNVTExfQUxMT0NBVE9SID0gMSZsdDsmbHQ7NSwKJiM0MzsJQ1VMTF9NT0RVTEUgPSAxJmx0OyZsdDs2CiB9OwogZW51bSBBTExPQ0FUT1JfQklUIHsKIAlBTExPQ0FUT1JfQ01BID0gMSZsdDsmbHQ7MSwKQEAgLTY1LDcgJiM0Mzs2OSw4IEBAIGVudW0gQUxMT0NBVE9SX0JJVCB7CiB9OwogZW51bSBBUkdfVFlQRSB7CiAJQVJHX1RYVCwgQVJHX0NPTU0sIEFSR19TVEFDS1RSQUNFLCBBUkdfQUxMT0NfVFMsIEFSR19DVUxMX1RJTUUsCi0JQVJHX1BBR0VfTlVNLCBBUkdfUElELCBBUkdfVEdJRCwgQVJHX1VOS05PV04sIEFSR19BTExPQ0FUT1IKJiM0MzsJQVJHX1BBR0VfTlVNLCBBUkdfUElELCBBUkdfVEdJRCwgQVJHX1VOS05PV04sIEFSR19BTExPQ0FUT1IsCiYjNDM7CUFSR19NT0RVTEUKIH07CiBlbnVtIFNPUlRfT1JERVIgewogCVNPUlRfQVNDID0gMSwKQEAgLTc5LDE1ICYjNDM7ODQsMTggQEAgZW51bSBDT01QX0ZMQUcgewogCUNPTVBfU1RBQ0sgPSAxJmx0OyZsdDszLAogCUNPTVBfTlVNID0gMSZsdDsmbHQ7NCwKIAlDT01QX1RHSUQgPSAxJmx0OyZsdDs1LAotCUNPTVBfQ09NTSA9IDEmbHQ7Jmx0OzYKJiM0MzsJQ09NUF9DT01NID0gMSZsdDsmbHQ7NiwKJiM0MzsJQ09NUF9NT0RVTEUgPSAxJmx0OyZsdDs3CiB9Owogc3RydWN0IGZpbHRlcl9jb25kaXRpb24gewogCXBpZF90ICpwaWRzOwogCXBpZF90ICp0Z2lkczsKIAljaGFyICoqY29tbXM7CiYjNDM7CWNoYXIgKiptb2R1bGVzOwogCWludCBwaWRzX3NpemU7CiAJaW50IHRnaWRzX3NpemU7CiAJaW50IGNvbW1zX3NpemU7CiYjNDM7CWludCBtb2R1bGVzX3NpemU7CiB9Owogc3RydWN0IHNvcnRfY29uZGl0aW9uIHsKIAlpbnQgKCoqY21wcykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwpAQCAtMTAxLDYgJiM0MzsxMDksNyBAQCBzdGF0aWMgcmVnZXhfdCBwaWRfcGF0dGVybjsKIHN0YXRpYyByZWdleF90IHRnaWRfcGF0dGVybjsKIHN0YXRpYyByZWdleF90IGNvbW1fcGF0dGVybjsKIHN0YXRpYyByZWdleF90IHRzX25zZWNfcGF0dGVybjsKJiM0MztzdGF0aWMgcmVnZXhfdCBtb2R1bGVfcGF0dGVybjsKIHN0YXRpYyBzdHJ1Y3QgYmxvY2tfbGlzdCAqbGlzdDsKIHN0YXRpYyBpbnQgbGlzdF9zaXplOwogc3RhdGljIGludCBtYXhfc2l6ZTsKQEAgLTE4NCw2ICYjNDM7MTkzLDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jb21tKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKIAlyZXR1cm4gc3RyY21wKGwxLSZndDtjb21tLCBsMi0mZ3Q7Y29tbSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IGNvbXBhcmVfbW9kdWxlKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjsKJiM0MzsKJiM0MzsJcmV0dXJuIHN0cmNtcChsMS0mZ3Q7bW9kdWxlLCBsMi0mZ3Q7bW9kdWxlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGNvbXBhcmVfdHMoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQogewogCWNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjsKQEAgLTIwNyw2ICYjNDM7MjIzLDggQEAgc3RhdGljIGludCBjb21wYXJlX2N1bGxfY29uZGl0aW9uKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKIAkJcmV0dXJuIGNvbXBhcmVfdGdpZChwMSwgcDIpOwogCWlmICgoY3VsbCAmYW1wOyBDVUxMX0NPTU0pICZhbXA7JmFtcDsgY29tcGFyZV9jb21tKHAxLCBwMikpCiAJCXJldHVybiBjb21wYXJlX2NvbW0ocDEsIHAyKTsKJiM0MzsJaWYgKChjdWxsICZhbXA7IENVTExfTU9EVUxFKSAmYW1wOyZhbXA7IGNvbXBhcmVfbW9kdWxlKHAxLCBwMikpCiYjNDM7CQlyZXR1cm4gY29tcGFyZV9tb2R1bGUocDEsIHAyKTsKIAlpZiAoKGN1bGwgJmFtcDsgQ1VMTF9BTExPQ0FUT1IpICZhbXA7JmFtcDsgY29tcGFyZV9hbGxvY2F0b3IocDEsIHAyKSkKIAkJcmV0dXJuIGNvbXBhcmVfYWxsb2NhdG9yKHAxLCBwMik7CiAJcmV0dXJuIDA7CkBAIC00MTEsOSAmIzQzOzQyOSwzMyBAQCBzdGF0aWMgY2hhciAqZ2V0X2NvbW0oY2hhciAqYnVmKQogCXJldHVybiBjb21tX3N0cjsKIH0KIAomIzQzO3N0YXRpYyBjaGFyICpnZXRfbW9kdWxlKGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CWNoYXIgKm1vZHVsZV9zdHIgPSBtYWxsb2MoTU9EVUxFX05BTUVfTEVOKTsKJiM0MzsJcmVnbWF0Y2hfdCBwbWF0Y2hbMl07CiYjNDM7CWludCB2YWxfbGVuOwomIzQzOwomIzQzOwlpZiAoIW1vZHVsZV9zdHIpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJbWVtc2V0KG1vZHVsZV9zdHIsIDAsIE1PRFVMRV9OQU1FX0xFTik7CiYjNDM7CWlmIChyZWdleGVjKCZhbXA7bW9kdWxlX3BhdHRlcm4sIGJ1ZiwgMiwgcG1hdGNoLCBSRUdfTk9UQk9MKSAhPSAwIHx8IHBtYXRjaFsxXS5ybV9zbyA9PSAtMSkgewomIzQzOwkJc3RyY3B5KG1vZHVsZV9zdHIsICYjMzQ7dm1saW51eCYjMzQ7KTsKJiM0MzsJCXJldHVybiBtb2R1bGVfc3RyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZhbF9sZW4gPSBwbWF0Y2hbMV0ucm1fZW8gLSBwbWF0Y2hbMV0ucm1fc287CiYjNDM7CWlmICgoc2l6ZV90KXZhbF9sZW4gJmd0Oz0gTU9EVUxFX05BTUVfTEVOKQomIzQzOwkJdmFsX2xlbiA9IE1PRFVMRV9OQU1FX0xFTiAtIDE7CiYjNDM7CW1lbWNweShtb2R1bGVfc3RyLCBidWYgJiM0MzsgcG1hdGNoWzFdLnJtX3NvLCB2YWxfbGVuKTsKJiM0MzsJbW9kdWxlX3N0clt2YWxfbGVuXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsKJiM0MzsJcmV0dXJuIG1vZHVsZV9zdHI7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZnJlZV9ibG9ja19saXN0KHN0cnVjdCBibG9ja19saXN0ICpibG9jaykKIHsKIAlmcmVlKGJsb2NrLSZndDtjb21tKTsKJiM0MzsJZnJlZShibG9jay0mZ3Q7bW9kdWxlKTsKIAlmcmVlKGJsb2NrLSZndDt0eHQpOwogfQogCkBAIC00MzMsNiAmIzQzOzQ3NSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2FyZ190eXBlKGNvbnN0IGNoYXIgKmFyZykKIAkJcmV0dXJuIEFSR19BTExPQ19UUzsKIAllbHNlIGlmICghc3RyY21wKGFyZywgJiMzNDthbGxvY2F0b3ImIzM0OykgfHwgIXN0cmNtcChhcmcsICYjMzQ7YXRvciYjMzQ7KSkKIAkJcmV0dXJuIEFSR19BTExPQ0FUT1I7CiYjNDM7CWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAmIzM0O21vZHVsZSYjMzQ7KSB8fCAhc3RyY21wKGFyZywgJiMzNDttb2QmIzM0OykpCiYjNDM7CQlyZXR1cm4gQVJHX01PRFVMRTsKIAllbHNlIHsKIAkJcmV0dXJuIEFSR19VTktOT1dOOwogCX0KQEAgLTQ4MywyNSAmIzQzOzUyNywzNiBAQCBzdGF0aWMgYm9vbCBtYXRjaF9zdHJfbGlzdChjb25zdCBjaGFyICpzdHIsIGNoYXIgKipsaXN0LCBpbnQgbGlzdF9zaXplKQogCiBzdGF0aWMgZW51bSBGSUxURVJfUkVTVUxUIGZpbHRlcl9yZWNvcmQoY2hhciAqYnVmKQogewotCWNoYXIgKmNvbW07CiYjNDM7CWNoYXIgKmNvbW0sICptb2R1bGU7CiAKIAlpZiAoKGZpbHRlciAmYW1wOyBGSUxURVJfUElEKSAmYW1wOyZhbXA7ICFtYXRjaF9udW1fbGlzdChnZXRfcGlkKGJ1ZiksIGZjLnBpZHMsIGZjLnBpZHNfc2l6ZSkpCiAJCXJldHVybiBGSUxURVJfU0tJUDsKIAlpZiAoKGZpbHRlciAmYW1wOyBGSUxURVJfVEdJRCkgJmFtcDsmYW1wOwogCQkhbWF0Y2hfbnVtX2xpc3QoZ2V0X3RnaWQoYnVmKSwgZmMudGdpZHMsIGZjLnRnaWRzX3NpemUpKQogCQlyZXR1cm4gRklMVEVSX1NLSVA7Ci0JaWYgKCEoZmlsdGVyICZhbXA7IEZJTFRFUl9DT01NKSkKJiM0MzsJaWYgKCEoZmlsdGVyICZhbXA7IChGSUxURVJfQ09NTSB8IEZJTFRFUl9NT0RVTEUpKSkKIAkJcmV0dXJuIEZJTFRFUl9NQVRDSDsKIAotCWNvbW0gPSBnZXRfY29tbShidWYpOwotCWlmICghY29tbSkKLQkJcmV0dXJuIEZJTFRFUl9FUlJPUjsKLQotCWlmICghbWF0Y2hfc3RyX2xpc3QoY29tbSwgZmMuY29tbXMsIGZjLmNvbW1zX3NpemUpKSB7CiYjNDM7CWlmIChmaWx0ZXIgJmFtcDsgRklMVEVSX0NPTU0pIHsKJiM0MzsJCWNvbW0gPSBnZXRfY29tbShidWYpOwomIzQzOwkJaWYgKCFjb21tKQomIzQzOwkJCXJldHVybiBGSUxURVJfRVJST1I7CiYjNDM7CQlpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkgewomIzQzOwkJCWZyZWUoY29tbSk7CiYjNDM7CQkJcmV0dXJuIEZJTFRFUl9TS0lQOwomIzQzOwkJfQogCQlmcmVlKGNvbW0pOwotCQlyZXR1cm4gRklMVEVSX1NLSVA7CiAJfQotCWZyZWUoY29tbSk7CiYjNDM7CWlmIChmaWx0ZXIgJmFtcDsgRklMVEVSX01PRFVMRSkgewomIzQzOwkJbW9kdWxlID0gZ2V0X21vZHVsZShidWYpOwomIzQzOwkJaWYgKCFtb2R1bGUpCiYjNDM7CQkJcmV0dXJuIEZJTFRFUl9FUlJPUjsKJiM0MzsJCWlmICghbWF0Y2hfc3RyX2xpc3QobW9kdWxlLCBmYy5tb2R1bGVzLCBmYy5tb2R1bGVzX3NpemUpKSB7CiYjNDM7CQkJZnJlZShtb2R1bGUpOwomIzQzOwkJCXJldHVybiBGSUxURVJfU0tJUDsKJiM0MzsJCX0KJiM0MzsJCWZyZWUobW9kdWxlKTsKJiM0MzsJfQogCXJldHVybiBGSUxURVJfTUFUQ0g7CiB9CiAKQEAgLTU0Nyw2ICYjNDM7NjAyLDEyIEBAIHN0YXRpYyBib29sIGFkZF9saXN0KGNoYXIgKmJ1ZiwgaW50IGxlbiwgY2hhciAqZXh0X2J1ZikKIAkJbGlzdFtsaXN0X3NpemVdLnN0YWNrdHJhY2UmIzQzOyYjNDM7OwogCWxpc3RbbGlzdF9zaXplXS50c19uc2VjID0gZ2V0X3RzX25zZWMoYnVmKTsKIAlsaXN0W2xpc3Rfc2l6ZV0uYWxsb2NhdG9yID0gZ2V0X2FsbG9jYXRvcihidWYsIGV4dF9idWYpOwomIzQzOwlsaXN0W2xpc3Rfc2l6ZV0ubW9kdWxlID0gZ2V0X21vZHVsZShidWYpOwomIzQzOwlpZiAoIWxpc3RbbGlzdF9zaXplXS5tb2R1bGUpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O091dCBvZiBtZW1vcnlcbiYjMzQ7KTsKJiM0MzsJCWZyZWVfYmxvY2tfbGlzdCgmYW1wO2xpc3RbbGlzdF9zaXplXSk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KIAlsaXN0X3NpemUmIzQzOyYjNDM7OwogCWlmIChsaXN0X3NpemUgJSAxMDAwID09IDApIHsKIAkJcHJpbnRmKCYjMzQ7bG9hZGVkICVkXHImIzM0OywgbGlzdF9zaXplKTsKQEAgLTU3Myw2ICYjNDM7NjM0LDggQEAgc3RhdGljIGJvb2wgcGFyc2VfY3VsbF9hcmdzKGNvbnN0IGNoYXIgKmFyZ19zdHIpCiAJCQljdWxsIHw9IENVTExfU1RBQ0tUUkFDRTsKIAkJZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX0FMTE9DQVRPUikKIAkJCWN1bGwgfD0gQ1VMTF9BTExPQ0FUT1I7CiYjNDM7CQllbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfTU9EVUxFKQomIzQzOwkJCWN1bGwgfD0gQ1VMTF9NT0RVTEU7CiAJCWVsc2UgewogCQkJZnJlZV9leHBsb2RlKGFyZ3MsIHNpemUpOwogCQkJcmV0dXJuIGZhbHNlOwpAQCAtNjM1LDYgJiM0Mzs2OTgsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9zb3J0X2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cikKIAkJCXNjLmNtcHNbaV0gPSBjb21wYXJlX3R4dDsKIAkJZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX0FMTE9DQVRPUikKIAkJCXNjLmNtcHNbaV0gPSBjb21wYXJlX2FsbG9jYXRvcjsKJiM0MzsJCWVsc2UgaWYgKGFyZ190eXBlID09IEFSR19NT0RVTEUpCiYjNDM7CQkJc2MuY21wc1tpXSA9IGNvbXBhcmVfbW9kdWxlOwogCQllbHNlIHsKIAkJCWZyZWVfZXhwbG9kZShhcmdzLCBzaXplKTsKIAkJCXNjLnNpemUgPSAwOwpAQCAtNjkxLDcgJiM0Mzs3NTYsOCBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogCQkmIzM0Oy1wXHRcdFx0U29ydCBieSBwaWQuXG4mIzM0OwogCQkmIzM0Oy1QXHRcdFx0U29ydCBieSB0Z2lkLlxuJiMzNDsKIAkJJiMzNDstc1x0XHRcdFNvcnQgYnkgdGhlIHN0YWNrdHJhY2UuXG4mIzM0OwotCQkmIzM0Oy10XHRcdFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxuXG4mIzM0OwomIzQzOwkJJiMzNDstdFx0XHRcdFNvcnQgYnkgbnVtYmVyIG9mIHRpbWVzIHJlY29yZCBpcyBzZWVuIChkZWZhdWx0KS5cbiYjMzQ7CiYjNDM7CQkmIzM0Oy1NXHRcdFx0U29ydCBieSBtb2R1bGUgbmFtZS5cblxuJiMzNDsKIAkJJiMzNDstLXBpZCAmbHQ7cGlkbGlzdCZndDtcdFx0U2VsZWN0IGJ5IHBpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvbiYjMzQ7CiAJCSYjMzQ7IG9mXG5cdFx0XHRibG9ja3Mgd2hvc2UgcHJvY2VzcyBJRCBudW1iZXJzIGFwcGVhciBpbiAmbHQ7cGlkbGlzdCZndDsuXG4mIzM0OwogCQkmIzM0Oy0tdGdpZCAmbHQ7dGdpZGxpc3QmZ3Q7XHRTZWxlY3QgYnkgdGdpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvbiYjMzQ7CkBAIC03MDAsMTEgJiM0Mzs3NjYsMjEgQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKIAkJJiMzNDstLW5hbWUgJmx0O2NtZGxpc3QmZ3Q7XHRTZWxlY3QgYnkgY29tbWFuZCBuYW1lLiBUaGlzIHNlbGVjdHMgdGhlJiMzNDsKIAkJJiMzNDsgaW5mb3JtYXRpb25cblx0XHRcdG9mIGJsb2NrcyB3aG9zZSBjb21tYW5kIG5hbWUgYXBwZWFycyBpbiYjMzQ7CiAJCSYjMzQ7ICZsdDtjbWRsaXN0Jmd0Oy5cbiYjMzQ7Ci0JCSYjMzQ7LS1jdWxsICZsdDtydWxlcyZndDtcdFx0Q3VsbCBieSB1c2VyLWRlZmluZWQgcnVsZXMuICZsdDtydWxlcyZndDsgaXMgYSAmIzM0OwotCQkmIzM0O3NpbmdsZVxuXHRcdFx0YXJndW1lbnQgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCAmIzM0OwotCQkmIzM0O3dpdGggc29tZVxuXHRcdFx0Y29tbW9uIGZpZWxkcyBwcmVkZWZpbmVkIChwaWQsIHRnaWQsIGNvbW0sICYjMzQ7Ci0JCSYjMzQ7c3RhY2t0cmFjZSwgYWxsb2NhdG9yKVxuJiMzNDsKJiM0MzsJCSYjMzQ7LS1tb2R1bGUgJmx0O21vZGxpc3QmZ3Q7XHRTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdG9mIGJsb2NrcyB3aG9zZSBtb2R1bGUgbmFtZSBhcHBlYXJzIGluICZsdDttb2RsaXN0Jmd0Oy5cbiYjMzQ7CiYjNDM7CQkmIzM0Oy0tY3VsbCAmbHQ7cnVsZXMmZ3Q7XHRcdEN1bGwgYnkgdXNlci1kZWZpbmVkIHJ1bGVzLiAmbHQ7cnVsZXMmZ3Q7IGlzIGEgc2luZ2xlXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRhcmd1bWVudCBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHdpdGggc29tZVxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0Y29tbW9uIGZpZWxkcyBwcmVkZWZpbmVkIChwaWQsIHRnaWQsIGNvbW0sIHN0YWNrdHJhY2UsIGFsbG9jYXRvciwgbW9kdWxlKVxuJiMzNDsKIAkJJiMzNDstLXNvcnQgJmx0O29yZGVyJmd0O1x0XHRTcGVjaWZ5IHNvcnQgb3JkZXIgYXM6IFsmIzQzO3wtXWtleVssWyYjNDM7fC1da2V5WywuLi5dXVxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0QXZhaWxhYmxlIGtleXM6XG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHQgIHBpZChwKSwgdGdpZCh0ZyksIG5hbWUobiksIHN0YWNrdHJhY2Uoc3QpLFxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0ICB0eHQoVCksIGFsbG9jX3RzKGF0KSwgYWxsb2NhdG9yKGF0b3IpLCBtb2R1bGUobW9kKVxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0VGhlIFwmIzM0OyYjNDM7XCYjMzQ7IGlzIG9wdGlvbmFsIHNpbmNlIGRlZmF1bHQgZGlyZWN0aW9uIGlzXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRpbmNyZWFzaW5nIG51bWVyaWNhbCBvciBsZXhpY29ncmFwaGljIG9yZGVyLlxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0TWl4ZWQgdXNlIG9mIGFiYnJldmlhdGVkIGFuZCBjb21wbGV0ZS1mb3JtIGlzIGFsbG93ZWQuXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRFeGFtcGxlczpcbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdCAgLS1zb3J0PW4sJiM0MztwaWQsLXRnaWRcbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdCAgLS1zb3J0PW1vZCxhdFxuJiMzNDsKIAkpOwogfQogCkBAIC03MjEsMTMgJiM0Mzs3OTcsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7ICYjMzQ7bmFtZSYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMyB9LAogCQl7ICYjMzQ7Y3VsbCYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNCB9LAogCQl7ICYjMzQ7c29ydCYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNSB9LAomIzQzOwkJeyAmIzM0O21vZHVsZSYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNiB9LAogCQl7ICYjMzQ7aGVscCYjMzQ7LCBub19hcmd1bWVudCwgTlVMTCwgJiMzOTtoJiMzOTsgfSwKIAkJeyAwLCAwLCAwLCAwfSwKIAl9OwogCiAJY29tcGFyZV9mbGFnID0gQ09NUF9OT19GTEFHOwogCi0Jd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAmIzM0O2FkbW5wc3RQaCYjMzQ7LCBsb25nb3B0cywgTlVMTCkpICE9IC0xKQomIzQzOwl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICYjMzQ7YWRtbnBzdFBNaCYjMzQ7LCBsb25nb3B0cywgTlVMTCkpICE9IC0xKQogCQlzd2l0Y2ggKG9wdCkgewogCQljYXNlICYjMzk7YSYjMzk7OgogCQkJY29tcGFyZV9mbGFnIHw9IENPTVBfQUxMT0M7CkBAIC03NTMsNiAmIzQzOzgzMCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJY2FzZSAmIzM5O24mIzM5OzoKIAkJCWNvbXBhcmVfZmxhZyB8PSBDT01QX0NPTU07CiAJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtNJiMzOTs6CiYjNDM7CQkJY29tcGFyZV9mbGFnIHw9IENPTVBfTU9EVUxFOwomIzQzOwkJCWJyZWFrOwogCQljYXNlICYjMzk7aCYjMzk7OgogCQkJdXNhZ2UoKTsKIAkJCWV4aXQoMCk7CkBAIC03OTIsNiAmIzQzOzg3MiwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJZXhpdCgxKTsKIAkJCX0KIAkJCWJyZWFrOwomIzQzOwkJY2FzZSA2OgomIzQzOwkJCWZpbHRlciA9IGZpbHRlciB8IEZJTFRFUl9NT0RVTEU7CiYjNDM7CQkJZmMubW9kdWxlcyA9IGV4cGxvZGUoJiMzOTssJiMzOTssIG9wdGFyZywgJmFtcDtmYy5tb2R1bGVzX3NpemUpOwomIzQzOwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJdXNhZ2UoKTsKIAkJCWV4aXQoMSk7CkBAIC04MjEsNiAmIzQzOzkwNSw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9zdGFja3RyYWNlLCBTT1JUX0FTQyk7CiAJCWJyZWFrOwogCWNhc2UgQ09NUF9OT19GTEFHOgomIzQzOwkJaWYgKHNjLnNpemUgJmd0OyAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJLyogZmFsbHRocm91Z2ggKi8KIAljYXNlIENPTVBfTlVNOgogCQlzZXRfc2luZ2xlX2NtcChjb21wYXJlX251bSwgU09SVF9ERVNDKTsKIAkJYnJlYWs7CkBAIC04MzAsNiAmIzQzOzkxNyw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljYXNlIENPTVBfQ09NTToKIAkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9jb21tLCBTT1JUX0FTQyk7CiAJCWJyZWFrOwomIzQzOwljYXNlIENPTVBfTU9EVUxFOgomIzQzOwkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9tb2R1bGUsIFNPUlRfQVNDKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXVzYWdlKCk7CiAJCWV4aXQoMSk7CkBAIC04NTMsNiAmIzQzOzk0Myw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJZ290byBvdXRfY29tbTsKIAlpZiAoIWNoZWNrX3JlZ2NvbXAoJmFtcDt0c19uc2VjX3BhdHRlcm4sICYjMzQ7dHNcXHMqKFswLTldKilcXHMqbnMmIzM0OykpCiAJCWdvdG8gb3V0X3RzOwomIzQzOwlpZiAoIWNoZWNrX3JlZ2NvbXAoJmFtcDttb2R1bGVfcGF0dGVybiwgJiMzNDtcXCYjNDM7MHhbMC05YS1mXSYjNDM7LzB4WzAtOWEtZl0mIzQzO1xccypcXFsoW2EtekEtWjAtOV8tXSYjNDM7KVxcXSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X21vZHVsZTsKIAogCWZzdGF0KGZpbGVubyhmaW4pLCAmYW1wO3N0KTsKIAltYXhfc2l6ZSA9IHN0LnN0X3NpemUgLyAxMDA7IC8qIGhhY2sgLi4uICovCkBAIC05MTEsNiAmIzQzOzEwMDMsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJZnByaW50Zihmb3V0LCAmIzM0OywgVEdJRCAlZCYjMzQ7LCBsaXN0W2ldLnRnaWQpOwogCQkJaWYgKGN1bGwgJmFtcDsgQ1VMTF9DT01NIHx8IGZpbHRlciAmYW1wOyBGSUxURVJfQ09NTSkKIAkJCQlmcHJpbnRmKGZvdXQsICYjMzQ7LCB0YXNrX2NvbW1fbmFtZTogJXMmIzM0OywgbGlzdFtpXS5jb21tKTsKJiM0MzsJCQlpZiAoY3VsbCAmYW1wOyBDVUxMX01PRFVMRSB8fCBmaWx0ZXIgJmFtcDsgRklMVEVSX01PRFVMRSkKJiM0MzsJCQkJZnByaW50Zihmb3V0LCAmIzM0OywgbW9kdWxlOiAlcyYjMzQ7LCBsaXN0W2ldLm1vZHVsZSk7CiAJCQlpZiAoY3VsbCAmYW1wOyBDVUxMX0FMTE9DQVRPUikgewogCQkJCWZwcmludGYoZm91dCwgJiMzNDssICYjMzQ7KTsKIAkJCQlwcmludF9hbGxvY2F0b3IoZm91dCwgbGlzdFtpXS5hbGxvY2F0b3IpOwpAQCAtOTMxLDYgJiM0MzsxMDI1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJZnJlZV9ibG9ja19saXN0KCZhbXA7bGlzdFtpXSk7CiAJCWZyZWUobGlzdCk7CiAJfQomIzQzO291dF9tb2R1bGU6CiYjNDM7CXJlZ2ZyZWUoJmFtcDttb2R1bGVfcGF0dGVybik7CiBvdXRfdHM6CiAJcmVnZnJlZSgmYW1wO3RzX25zZWNfcGF0dGVybik7CiBvdXRfY29tbToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5MwoJCQkJCQkJb3V0cHV0OiA3NgoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IEEgUXVpY2sgQW5hbHlzaXMqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7dmUgcmV2aWV3ZWQgdGhpcyBwYXRjaCwgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIHRvdWNoaW5nIHRoZSBgRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdGAgZmlsZSBhbmQgdGhlIGB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY2AgdXRpbGl0eS4gVGhlIGNvcmUgaWRlYSBpcyBhZGRpbmcgbW9kdWxlIG5hbWUgc29ydGluZyBhbmQgZmlsdGVyaW5nIHRvIGBwYWdlX293bmVyX3NvcnRgLiAgRXNzZW50aWFsbHksIGl0JiMzOTtzIGVuaGFuY2luZyB0aGUgdXNlci1zcGFjZSB0b29sIHRoYXQgcGFyc2VzIHRoZSBvdXRwdXQgZnJvbSBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAuCgpNeSBpbW1lZGlhdGUgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgZG9lc24mIzM5O3QgY2hhbmdlIGFueXRoaW5nIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIE5vIG1vZGlmaWNhdGlvbnMgdG8gYG1tL2AsIGBrZXJuZWwvYCwgYGRyaXZlcnMvYCwgb3IgYW55IG9mIHRoZSBjcml0aWNhbCBrZXJuZWwgc3Vic3lzdGVtcyB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSB1c2VyLXNwYWNlIHRvb2wgaGVyZS4gSXQmIzM5O3MgKnBhcnNpbmcqIGtlcm5lbCBvdXRwdXQsIG5vdCAqbW9kaWZ5aW5nKiBrZXJuZWwgYmVoYXZpb3IuCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdC4gWWVwLCBkb3VibGUtY2hlY2tlZC4gT25seSB0aG9zZSB0d28gZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLiBObyBrZXJuZWwgY29kZSBpcyBhZmZlY3RlZC4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciB0aGlzLiBJJiMzOTtsbCBwcm9jZWVkIHdpdGggY2FsbGluZyBgc2V0LXJlc3VsdHNgIHdpdGggdGhhdCB2YWx1ZS4gSXQmIzM5O3MgYSBjbGVhbiwgbm9uLWludmFzaXZlIHBhdGNoIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDc6MTIuMTE5OTA4Mjg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2Njk2OTM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2Vyc3BhY2UgdG9vbCAodG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMpIGFuZCBpdHMgZG9jdW1lbnRhdGlvbi4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjA3OjEyLjExOTkxNjA3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjAwMzU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBlZjBjYTM3Mjg4ZmQ3ZWI1ZTY2YjhkZDk5MDE4ZmZlOWY3ZDRmZDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDM6MDc6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcXG5pbmRleCBhNmJkM2ZlNjQyM2FkLi5iZDAyNzM3N2RmZjZlIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XFxuQEAgLTE5OSw2ICsxOTksNyBAQCBVc2FnZVxcbiBcXHRcXHQtcFxcdFxcdFNvcnQgYnkgcGlkLlxcbiBcXHRcXHQtUFxcdFxcdFNvcnQgYnkgdGdpZC5cXG4gXFx0XFx0LW5cXHRcXHRTb3J0IGJ5IHRhc2sgY29tbWFuZCBuYW1lLlxcbitcXHRcXHQtTVxcdFxcdFNvcnQgYnkgbW9kdWxlIG5hbWUuXFxuIFxcdFxcdC1yXFx0XFx0U29ydCBieSBtZW1vcnkgcmVsZWFzZSB0aW1lLlxcbiBcXHRcXHQtc1xcdFxcdFNvcnQgYnkgc3RhY2sgdHJhY2UuXFxuIFxcdFxcdC10XFx0XFx0U29ydCBieSB0aW1lcyAoZGVmYXVsdCkuXFxuQEAgLTI0MCw4ICsyNDEsMTAgQEAgVXNhZ2VcXG4gXFx0XFx0XFx0XFx0XFx0Z3JvdXAgSUQgbnVtYmVycyBhcHBlYXIgaW4gXFx1MDAzY3RnaWRsaXN0XFx1MDAzZS5cXG4gXFx0XFx0LS1uYW1lIFxcdTAwM2NjbWRsaXN0XFx1MDAzZVxcdFNlbGVjdCBieSB0YXNrIGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2VcXG4gXFx0XFx0XFx0XFx0XFx0dGFzayBjb21tYW5kIG5hbWUgYXBwZWFyIGluIFxcdTAwM2NjbWRsaXN0XFx1MDAzZS5cXG4rXFx0XFx0LS1tb2R1bGUgXFx1MDAzY21vZGxpc3RcXHUwMDNlXFx0U2VsZWN0IGJ5IG1vZHVsZSBuYW1lLiBUaGlzIHNlbGVjdHMgdGhlIGJsb2NrcyB3aG9zZVxcbitcXHRcXHRcXHRcXHRcXHRtb2R1bGUgbmFtZSBhcHBlYXIgaW4gXFx1MDAzY21vZGxpc3RcXHUwMDNlLlxcbiBcXG4tXFx0XFx0XFx1MDAzY3BpZGxpc3RcXHUwMDNlLCBcXHUwMDNjdGdpZGxpc3RcXHUwMDNlLCBcXHUwMDNjY21kbGlzdFxcdTAwM2UgYXJlIHNpbmdsZSBhcmd1bWVudHMgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCxcXG4rXFx0XFx0XFx1MDAzY3BpZGxpc3RcXHUwMDNlLCBcXHUwMDNjdGdpZGxpc3RcXHUwMDNlLCBcXHUwMDNjY21kbGlzdFxcdTAwM2UsIFxcdTAwM2Ntb2RsaXN0XFx1MDAzZSBhcmUgc2luZ2xlIGFyZ3VtZW50cyBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LFxcbiBcXHRcXHR3aGljaCBvZmZlcnMgYSB3YXkgdG8gc3BlY2lmeSBpbmRpdmlkdWFsIHNlbGVjdGluZyBydWxlcy5cXG4gXFxuIFxcbkBAIC0yNDksNiArMjUyLDcgQEAgVXNhZ2VcXG4gXFx0XFx0XFx0XFx0Li9wYWdlX293bmVyX3NvcnQgXFx1MDAzY2lucHV0XFx1MDAzZSBcXHUwMDNjb3V0cHV0XFx1MDAzZSAtLXBpZD0xXFxuIFxcdFxcdFxcdFxcdC4vcGFnZV9vd25lcl9zb3J0IFxcdTAwM2NpbnB1dFxcdTAwM2UgXFx1MDAzY291dHB1dFxcdTAwM2UgLS10Z2lkPTEsMiwzXFxuIFxcdFxcdFxcdFxcdC4vcGFnZV9vd25lcl9zb3J0IFxcdTAwM2NpbnB1dFxcdTAwM2UgXFx1MDAzY291dHB1dFxcdTAwM2UgLS1uYW1lIG5hbWUxLG5hbWUyXFxuK1xcdFxcdFxcdFxcdC4vcGFnZV9vd25lcl9zb3J0IFxcdTAwM2NpbnB1dFxcdTAwM2UgXFx1MDAzY291dHB1dFxcdTAwM2UgLS1tb2R1bGUgeGZzLGV4dDRcXG4gXFxuIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09XFxuQEAgLTI2NSw2ICsyNjksNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xcbiBcXHRmdFxcdFxcdGZyZWVfdHNcXHRcXHR0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgcmVsZWFzZWRcXG4gXFx0YXRcXHRcXHRhbGxvY190c1xcdHRpbWVzdGFtcCBvZiB0aGUgcGFnZSB3aGVuIGl0IHdhcyBhbGxvY2F0ZWRcXG4gXFx0YXRvclxcdFxcdGFsbG9jYXRvclxcdG1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzXFxuK1xcdG1vZFxcdFxcdG1vZHVsZVxcdFxcdGtlcm5lbCBtb2R1bGUgbmFtZVxcbiBcXG4gICBGb3IgLS1jdWxsIG9wdGlvbjpcXG4gXFxuQEAgLTI3NSw2ICsyODAsNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xcbiBcXHRmXFx0XFx0ZnJlZVxcdFxcdHdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90XFxuIFxcdHN0XFx0XFx0c3RhY2t0cmFjZVxcdHN0YWNrIHRyYWNlIG9mIHRoZSBwYWdlIGFsbG9jYXRpb25cXG4gXFx0YXRvclxcdFxcdGFsbG9jYXRvclxcdG1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzXFxuK1xcdG1vZFxcdFxcdG1vZHVsZVxcdFxcdGtlcm5lbCBtb2R1bGUgbmFtZVxcbiBcXG4gRmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0XFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xcbmluZGV4IDM1ZDNkMjU0OTQxYzkuLjE2YWM2MjFiNzRmNjIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcXG4rKysgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xcbkBAIC0yNSwxMSArMjUsMTMgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2dldG9wdC5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBUQVNLX0NPTU1fTEVOIDE2XFxuKyNkZWZpbmUgTU9EVUxFX05BTUVfTEVOIDY0XFxuIFxcbiBzdHJ1Y3QgYmxvY2tfbGlzdCB7XFxuIFxcdGNoYXIgKnR4dDtcXG4gXFx0Y2hhciAqY29tbTsgLy8gdGFzayBjb21tYW5kIG5hbWVcXG4gXFx0Y2hhciAqc3RhY2t0cmFjZTtcXG4rXFx0Y2hhciAqbW9kdWxlOyAvLyBrZXJuZWwgbW9kdWxlIG5hbWVcXG4gXFx0X191NjQgdHNfbnNlYztcXG4gXFx0aW50IGxlbjtcXG4gXFx0aW50IG51bTtcXG5AQCAtNDEsNyArNDMsOCBAQCBzdHJ1Y3QgYmxvY2tfbGlzdCB7XFxuIGVudW0gRklMVEVSX0JJVCB7XFxuIFxcdEZJTFRFUl9QSUQgPSAxXFx1MDAzY1xcdTAwM2MxLFxcbiBcXHRGSUxURVJfVEdJRCA9IDFcXHUwMDNjXFx1MDAzYzIsXFxuLVxcdEZJTFRFUl9DT01NID0gMVxcdTAwM2NcXHUwMDNjM1xcbitcXHRGSUxURVJfQ09NTSA9IDFcXHUwMDNjXFx1MDAzYzMsXFxuK1xcdEZJTFRFUl9NT0RVTEUgPSAxXFx1MDAzY1xcdTAwM2M0XFxuIH07XFxuIFxcbiBlbnVtIEZJTFRFUl9SRVNVTFQge1xcbkBAIC01NSw3ICs1OCw4IEBAIGVudW0gQ1VMTF9CSVQge1xcbiBcXHRDVUxMX1RHSUQgPSAxXFx1MDAzY1xcdTAwM2MyLFxcbiBcXHRDVUxMX0NPTU0gPSAxXFx1MDAzY1xcdTAwM2MzLFxcbiBcXHRDVUxMX1NUQUNLVFJBQ0UgPSAxXFx1MDAzY1xcdTAwM2M0LFxcbi1cXHRDVUxMX0FMTE9DQVRPUiA9IDFcXHUwMDNjXFx1MDAzYzVcXG4rXFx0Q1VMTF9BTExPQ0FUT1IgPSAxXFx1MDAzY1xcdTAwM2M1LFxcbitcXHRDVUxMX01PRFVMRSA9IDFcXHUwMDNjXFx1MDAzYzZcXG4gfTtcXG4gZW51bSBBTExPQ0FUT1JfQklUIHtcXG4gXFx0QUxMT0NBVE9SX0NNQSA9IDFcXHUwMDNjXFx1MDAzYzEsXFxuQEAgLTY1LDcgKzY5LDggQEAgZW51bSBBTExPQ0FUT1JfQklUIHtcXG4gfTtcXG4gZW51bSBBUkdfVFlQRSB7XFxuIFxcdEFSR19UWFQsIEFSR19DT01NLCBBUkdfU1RBQ0tUUkFDRSwgQVJHX0FMTE9DX1RTLCBBUkdfQ1VMTF9USU1FLFxcbi1cXHRBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUlxcbitcXHRBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUixcXG4rXFx0QVJHX01PRFVMRVxcbiB9O1xcbiBlbnVtIFNPUlRfT1JERVIge1xcbiBcXHRTT1JUX0FTQyA9IDEsXFxuQEAgLTc5LDE1ICs4NCwxOCBAQCBlbnVtIENPTVBfRkxBRyB7XFxuIFxcdENPTVBfU1RBQ0sgPSAxXFx1MDAzY1xcdTAwM2MzLFxcbiBcXHRDT01QX05VTSA9IDFcXHUwMDNjXFx1MDAzYzQsXFxuIFxcdENPTVBfVEdJRCA9IDFcXHUwMDNjXFx1MDAzYzUsXFxuLVxcdENPTVBfQ09NTSA9IDFcXHUwMDNjXFx1MDAzYzZcXG4rXFx0Q09NUF9DT01NID0gMVxcdTAwM2NcXHUwMDNjNixcXG4rXFx0Q09NUF9NT0RVTEUgPSAxXFx1MDAzY1xcdTAwM2M3XFxuIH07XFxuIHN0cnVjdCBmaWx0ZXJfY29uZGl0aW9uIHtcXG4gXFx0cGlkX3QgKnBpZHM7XFxuIFxcdHBpZF90ICp0Z2lkcztcXG4gXFx0Y2hhciAqKmNvbW1zO1xcbitcXHRjaGFyICoqbW9kdWxlcztcXG4gXFx0aW50IHBpZHNfc2l6ZTtcXG4gXFx0aW50IHRnaWRzX3NpemU7XFxuIFxcdGludCBjb21tc19zaXplO1xcbitcXHRpbnQgbW9kdWxlc19zaXplO1xcbiB9O1xcbiBzdHJ1Y3Qgc29ydF9jb25kaXRpb24ge1xcbiBcXHRpbnQgKCoqY21wcykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopO1xcbkBAIC0xMDEsNiArMTA5LDcgQEAgc3RhdGljIHJlZ2V4X3QgcGlkX3BhdHRlcm47XFxuIHN0YXRpYyByZWdleF90IHRnaWRfcGF0dGVybjtcXG4gc3RhdGljIHJlZ2V4X3QgY29tbV9wYXR0ZXJuO1xcbiBzdGF0aWMgcmVnZXhfdCB0c19uc2VjX3BhdHRlcm47XFxuK3N0YXRpYyByZWdleF90IG1vZHVsZV9wYXR0ZXJuO1xcbiBzdGF0aWMgc3RydWN0IGJsb2NrX2xpc3QgKmxpc3Q7XFxuIHN0YXRpYyBpbnQgbGlzdF9zaXplO1xcbiBzdGF0aWMgaW50IG1heF9zaXplO1xcbkBAIC0xODQsNiArMTkzLDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jb21tKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcXG4gXFx0cmV0dXJuIHN0cmNtcChsMS1cXHUwMDNlY29tbSwgbDItXFx1MDAzZWNvbW0pO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGNvbXBhcmVfbW9kdWxlKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYmxvY2tfbGlzdCAqbDEgPSBwMSwgKmwyID0gcDI7XFxuK1xcbitcXHRyZXR1cm4gc3RyY21wKGwxLVxcdTAwM2Vtb2R1bGUsIGwyLVxcdTAwM2Vtb2R1bGUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGNvbXBhcmVfdHMoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcXG5AQCAtMjA3LDYgKzIyMyw4IEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jdWxsX2NvbmRpdGlvbihjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpXFxuIFxcdFxcdHJldHVybiBjb21wYXJlX3RnaWQocDEsIHAyKTtcXG4gXFx0aWYgKChjdWxsIFxcdTAwMjYgQ1VMTF9DT01NKSBcXHUwMDI2XFx1MDAyNiBjb21wYXJlX2NvbW0ocDEsIHAyKSlcXG4gXFx0XFx0cmV0dXJuIGNvbXBhcmVfY29tbShwMSwgcDIpO1xcbitcXHRpZiAoKGN1bGwgXFx1MDAyNiBDVUxMX01PRFVMRSkgXFx1MDAyNlxcdTAwMjYgY29tcGFyZV9tb2R1bGUocDEsIHAyKSlcXG4rXFx0XFx0cmV0dXJuIGNvbXBhcmVfbW9kdWxlKHAxLCBwMik7XFxuIFxcdGlmICgoY3VsbCBcXHUwMDI2IENVTExfQUxMT0NBVE9SKSBcXHUwMDI2XFx1MDAyNiBjb21wYXJlX2FsbG9jYXRvcihwMSwgcDIpKVxcbiBcXHRcXHRyZXR1cm4gY29tcGFyZV9hbGxvY2F0b3IocDEsIHAyKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQxMSw5ICs0MjksMzMgQEAgc3RhdGljIGNoYXIgKmdldF9jb21tKGNoYXIgKmJ1ZilcXG4gXFx0cmV0dXJuIGNvbW1fc3RyO1xcbiB9XFxuIFxcbitzdGF0aWMgY2hhciAqZ2V0X21vZHVsZShjaGFyICpidWYpXFxuK3tcXG4rXFx0Y2hhciAqbW9kdWxlX3N0ciA9IG1hbGxvYyhNT0RVTEVfTkFNRV9MRU4pO1xcbitcXHRyZWdtYXRjaF90IHBtYXRjaFsyXTtcXG4rXFx0aW50IHZhbF9sZW47XFxuK1xcbitcXHRpZiAoIW1vZHVsZV9zdHIpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRtZW1zZXQobW9kdWxlX3N0ciwgMCwgTU9EVUxFX05BTUVfTEVOKTtcXG4rXFx0aWYgKHJlZ2V4ZWMoXFx1MDAyNm1vZHVsZV9wYXR0ZXJuLCBidWYsIDIsIHBtYXRjaCwgUkVHX05PVEJPTCkgIT0gMCB8fCBwbWF0Y2hbMV0ucm1fc28gPT0gLTEpIHtcXG4rXFx0XFx0c3RyY3B5KG1vZHVsZV9zdHIsIFxcXCJ2bWxpbnV4XFxcIik7XFxuK1xcdFxcdHJldHVybiBtb2R1bGVfc3RyO1xcbitcXHR9XFxuK1xcbitcXHR2YWxfbGVuID0gcG1hdGNoWzFdLnJtX2VvIC0gcG1hdGNoWzFdLnJtX3NvO1xcbitcXHRpZiAoKHNpemVfdCl2YWxfbGVuIFxcdTAwM2U9IE1PRFVMRV9OQU1FX0xFTilcXG4rXFx0XFx0dmFsX2xlbiA9IE1PRFVMRV9OQU1FX0xFTiAtIDE7XFxuK1xcdG1lbWNweShtb2R1bGVfc3RyLCBidWYgKyBwbWF0Y2hbMV0ucm1fc28sIHZhbF9sZW4pO1xcbitcXHRtb2R1bGVfc3RyW3ZhbF9sZW5dID0gJ1xcXFwwJztcXG4rXFxuK1xcdHJldHVybiBtb2R1bGVfc3RyO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBmcmVlX2Jsb2NrX2xpc3Qoc3RydWN0IGJsb2NrX2xpc3QgKmJsb2NrKVxcbiB7XFxuIFxcdGZyZWUoYmxvY2stXFx1MDAzZWNvbW0pO1xcbitcXHRmcmVlKGJsb2NrLVxcdTAwM2Vtb2R1bGUpO1xcbiBcXHRmcmVlKGJsb2NrLVxcdTAwM2V0eHQpO1xcbiB9XFxuIFxcbkBAIC00MzMsNiArNDc1LDggQEAgc3RhdGljIGludCBnZXRfYXJnX3R5cGUoY29uc3QgY2hhciAqYXJnKVxcbiBcXHRcXHRyZXR1cm4gQVJHX0FMTE9DX1RTO1xcbiBcXHRlbHNlIGlmICghc3RyY21wKGFyZywgXFxcImFsbG9jYXRvclxcXCIpIHx8ICFzdHJjbXAoYXJnLCBcXFwiYXRvclxcXCIpKVxcbiBcXHRcXHRyZXR1cm4gQVJHX0FMTE9DQVRPUjtcXG4rXFx0ZWxzZSBpZiAoIXN0cmNtcChhcmcsIFxcXCJtb2R1bGVcXFwiKSB8fCAhc3RyY21wKGFyZywgXFxcIm1vZFxcXCIpKVxcbitcXHRcXHRyZXR1cm4gQVJHX01PRFVMRTtcXG4gXFx0ZWxzZSB7XFxuIFxcdFxcdHJldHVybiBBUkdfVU5LTk9XTjtcXG4gXFx0fVxcbkBAIC00ODMsMjUgKzUyNywzNiBAQCBzdGF0aWMgYm9vbCBtYXRjaF9zdHJfbGlzdChjb25zdCBjaGFyICpzdHIsIGNoYXIgKipsaXN0LCBpbnQgbGlzdF9zaXplKVxcbiBcXG4gc3RhdGljIGVudW0gRklMVEVSX1JFU1VMVCBmaWx0ZXJfcmVjb3JkKGNoYXIgKmJ1ZilcXG4ge1xcbi1cXHRjaGFyICpjb21tO1xcbitcXHRjaGFyICpjb21tLCAqbW9kdWxlO1xcbiBcXG4gXFx0aWYgKChmaWx0ZXIgXFx1MDAyNiBGSUxURVJfUElEKSBcXHUwMDI2XFx1MDAyNiAhbWF0Y2hfbnVtX2xpc3QoZ2V0X3BpZChidWYpLCBmYy5waWRzLCBmYy5waWRzX3NpemUpKVxcbiBcXHRcXHRyZXR1cm4gRklMVEVSX1NLSVA7XFxuIFxcdGlmICgoZmlsdGVyIFxcdTAwMjYgRklMVEVSX1RHSUQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCFtYXRjaF9udW1fbGlzdChnZXRfdGdpZChidWYpLCBmYy50Z2lkcywgZmMudGdpZHNfc2l6ZSkpXFxuIFxcdFxcdHJldHVybiBGSUxURVJfU0tJUDtcXG4tXFx0aWYgKCEoZmlsdGVyIFxcdTAwMjYgRklMVEVSX0NPTU0pKVxcbitcXHRpZiAoIShmaWx0ZXIgXFx1MDAyNiAoRklMVEVSX0NPTU0gfCBGSUxURVJfTU9EVUxFKSkpXFxuIFxcdFxcdHJldHVybiBGSUxURVJfTUFUQ0g7XFxuIFxcbi1cXHRjb21tID0gZ2V0X2NvbW0oYnVmKTtcXG4tXFx0aWYgKCFjb21tKVxcbi1cXHRcXHRyZXR1cm4gRklMVEVSX0VSUk9SO1xcbi1cXG4tXFx0aWYgKCFtYXRjaF9zdHJfbGlzdChjb21tLCBmYy5jb21tcywgZmMuY29tbXNfc2l6ZSkpIHtcXG4rXFx0aWYgKGZpbHRlciBcXHUwMDI2IEZJTFRFUl9DT01NKSB7XFxuK1xcdFxcdGNvbW0gPSBnZXRfY29tbShidWYpO1xcbitcXHRcXHRpZiAoIWNvbW0pXFxuK1xcdFxcdFxcdHJldHVybiBGSUxURVJfRVJST1I7XFxuK1xcdFxcdGlmICghbWF0Y2hfc3RyX2xpc3QoY29tbSwgZmMuY29tbXMsIGZjLmNvbW1zX3NpemUpKSB7XFxuK1xcdFxcdFxcdGZyZWUoY29tbSk7XFxuK1xcdFxcdFxcdHJldHVybiBGSUxURVJfU0tJUDtcXG4rXFx0XFx0fVxcbiBcXHRcXHRmcmVlKGNvbW0pO1xcbi1cXHRcXHRyZXR1cm4gRklMVEVSX1NLSVA7XFxuIFxcdH1cXG4tXFx0ZnJlZShjb21tKTtcXG4rXFx0aWYgKGZpbHRlciBcXHUwMDI2IEZJTFRFUl9NT0RVTEUpIHtcXG4rXFx0XFx0bW9kdWxlID0gZ2V0X21vZHVsZShidWYpO1xcbitcXHRcXHRpZiAoIW1vZHVsZSlcXG4rXFx0XFx0XFx0cmV0dXJuIEZJTFRFUl9FUlJPUjtcXG4rXFx0XFx0aWYgKCFtYXRjaF9zdHJfbGlzdChtb2R1bGUsIGZjLm1vZHVsZXMsIGZjLm1vZHVsZXNfc2l6ZSkpIHtcXG4rXFx0XFx0XFx0ZnJlZShtb2R1bGUpO1xcbitcXHRcXHRcXHRyZXR1cm4gRklMVEVSX1NLSVA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZnJlZShtb2R1bGUpO1xcbitcXHR9XFxuIFxcdHJldHVybiBGSUxURVJfTUFUQ0g7XFxuIH1cXG4gXFxuQEAgLTU0Nyw2ICs2MDIsMTIgQEAgc3RhdGljIGJvb2wgYWRkX2xpc3QoY2hhciAqYnVmLCBpbnQgbGVuLCBjaGFyICpleHRfYnVmKVxcbiBcXHRcXHRsaXN0W2xpc3Rfc2l6ZV0uc3RhY2t0cmFjZSsrO1xcbiBcXHRsaXN0W2xpc3Rfc2l6ZV0udHNfbnNlYyA9IGdldF90c19uc2VjKGJ1Zik7XFxuIFxcdGxpc3RbbGlzdF9zaXplXS5hbGxvY2F0b3IgPSBnZXRfYWxsb2NhdG9yKGJ1ZiwgZXh0X2J1Zik7XFxuK1xcdGxpc3RbbGlzdF9zaXplXS5tb2R1bGUgPSBnZXRfbW9kdWxlKGJ1Zik7XFxuK1xcdGlmICghbGlzdFtsaXN0X3NpemVdLm1vZHVsZSkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIk91dCBvZiBtZW1vcnlcXFxcblxcXCIpO1xcbitcXHRcXHRmcmVlX2Jsb2NrX2xpc3QoXFx1MDAyNmxpc3RbbGlzdF9zaXplXSk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiBcXHRsaXN0X3NpemUrKztcXG4gXFx0aWYgKGxpc3Rfc2l6ZSAlIDEwMDAgPT0gMCkge1xcbiBcXHRcXHRwcmludGYoXFxcImxvYWRlZCAlZFxcXFxyXFxcIiwgbGlzdF9zaXplKTtcXG5AQCAtNTczLDYgKzYzNCw4IEBAIHN0YXRpYyBib29sIHBhcnNlX2N1bGxfYXJncyhjb25zdCBjaGFyICphcmdfc3RyKVxcbiBcXHRcXHRcXHRjdWxsIHw9IENVTExfU1RBQ0tUUkFDRTtcXG4gXFx0XFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX0FMTE9DQVRPUilcXG4gXFx0XFx0XFx0Y3VsbCB8PSBDVUxMX0FMTE9DQVRPUjtcXG4rXFx0XFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSlcXG4rXFx0XFx0XFx0Y3VsbCB8PSBDVUxMX01PRFVMRTtcXG4gXFx0XFx0ZWxzZSB7XFxuIFxcdFxcdFxcdGZyZWVfZXhwbG9kZShhcmdzLCBzaXplKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbkBAIC02MzUsNiArNjk4LDggQEAgc3RhdGljIGJvb2wgcGFyc2Vfc29ydF9hcmdzKGNvbnN0IGNoYXIgKmFyZ19zdHIpXFxuIFxcdFxcdFxcdHNjLmNtcHNbaV0gPSBjb21wYXJlX3R4dDtcXG4gXFx0XFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX0FMTE9DQVRPUilcXG4gXFx0XFx0XFx0c2MuY21wc1tpXSA9IGNvbXBhcmVfYWxsb2NhdG9yO1xcbitcXHRcXHRlbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfTU9EVUxFKVxcbitcXHRcXHRcXHRzYy5jbXBzW2ldID0gY29tcGFyZV9tb2R1bGU7XFxuIFxcdFxcdGVsc2Uge1xcbiBcXHRcXHRcXHRmcmVlX2V4cGxvZGUoYXJncywgc2l6ZSk7XFxuIFxcdFxcdFxcdHNjLnNpemUgPSAwO1xcbkBAIC02OTEsNyArNzU2LDggQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcXG4gXFx0XFx0XFxcIi1wXFxcXHRcXFxcdFxcXFx0U29ydCBieSBwaWQuXFxcXG5cXFwiXFxuIFxcdFxcdFxcXCItUFxcXFx0XFxcXHRcXFxcdFNvcnQgYnkgdGdpZC5cXFxcblxcXCJcXG4gXFx0XFx0XFxcIi1zXFxcXHRcXFxcdFxcXFx0U29ydCBieSB0aGUgc3RhY2t0cmFjZS5cXFxcblxcXCJcXG4tXFx0XFx0XFxcIi10XFxcXHRcXFxcdFxcXFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxcXFxuXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCItdFxcXFx0XFxcXHRcXFxcdFNvcnQgYnkgbnVtYmVyIG9mIHRpbWVzIHJlY29yZCBpcyBzZWVuIChkZWZhdWx0KS5cXFxcblxcXCJcXG4rXFx0XFx0XFxcIi1NXFxcXHRcXFxcdFxcXFx0U29ydCBieSBtb2R1bGUgbmFtZS5cXFxcblxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiLS1waWQgXFx1MDAzY3BpZGxpc3RcXHUwMDNlXFxcXHRcXFxcdFNlbGVjdCBieSBwaWQuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cXFwiXFxuIFxcdFxcdFxcXCIgb2ZcXFxcblxcXFx0XFxcXHRcXFxcdGJsb2NrcyB3aG9zZSBwcm9jZXNzIElEIG51bWJlcnMgYXBwZWFyIGluIFxcdTAwM2NwaWRsaXN0XFx1MDAzZS5cXFxcblxcXCJcXG4gXFx0XFx0XFxcIi0tdGdpZCBcXHUwMDNjdGdpZGxpc3RcXHUwMDNlXFxcXHRTZWxlY3QgYnkgdGdpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblxcXCJcXG5AQCAtNzAwLDExICs3NjYsMjEgQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcXG4gXFx0XFx0XFxcIi0tbmFtZSBcXHUwMDNjY21kbGlzdFxcdTAwM2VcXFxcdFNlbGVjdCBieSBjb21tYW5kIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGVcXFwiXFxuIFxcdFxcdFxcXCIgaW5mb3JtYXRpb25cXFxcblxcXFx0XFxcXHRcXFxcdG9mIGJsb2NrcyB3aG9zZSBjb21tYW5kIG5hbWUgYXBwZWFycyBpblxcXCJcXG4gXFx0XFx0XFxcIiBcXHUwMDNjY21kbGlzdFxcdTAwM2UuXFxcXG5cXFwiXFxuLVxcdFxcdFxcXCItLWN1bGwgXFx1MDAzY3J1bGVzXFx1MDAzZVxcXFx0XFxcXHRDdWxsIGJ5IHVzZXItZGVmaW5lZCBydWxlcy4gXFx1MDAzY3J1bGVzXFx1MDAzZSBpcyBhIFxcXCJcXG4tXFx0XFx0XFxcInNpbmdsZVxcXFxuXFxcXHRcXFxcdFxcXFx0YXJndW1lbnQgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBcXFwiXFxuLVxcdFxcdFxcXCJ3aXRoIHNvbWVcXFxcblxcXFx0XFxcXHRcXFxcdGNvbW1vbiBmaWVsZHMgcHJlZGVmaW5lZCAocGlkLCB0Z2lkLCBjb21tLCBcXFwiXFxuLVxcdFxcdFxcXCJzdGFja3RyYWNlLCBhbGxvY2F0b3IpXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCItLW1vZHVsZSBcXHUwMDNjbW9kbGlzdFxcdTAwM2VcXFxcdFNlbGVjdCBieSBtb2R1bGUgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHRcXFxcdFxcXFx0b2YgYmxvY2tzIHdob3NlIG1vZHVsZSBuYW1lIGFwcGVhcnMgaW4gXFx1MDAzY21vZGxpc3RcXHUwMDNlLlxcXFxuXFxcIlxcbitcXHRcXHRcXFwiLS1jdWxsIFxcdTAwM2NydWxlc1xcdTAwM2VcXFxcdFxcXFx0Q3VsbCBieSB1c2VyLWRlZmluZWQgcnVsZXMuIFxcdTAwM2NydWxlc1xcdTAwM2UgaXMgYSBzaW5nbGVcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdGFyZ3VtZW50IGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgd2l0aCBzb21lXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgc3RhY2t0cmFjZSwgYWxsb2NhdG9yLCBtb2R1bGUpXFxcXG5cXFwiXFxuIFxcdFxcdFxcXCItLXNvcnQgXFx1MDAzY29yZGVyXFx1MDAzZVxcXFx0XFxcXHRTcGVjaWZ5IHNvcnQgb3JkZXIgYXM6IFsrfC1da2V5WyxbK3wtXWtleVssLi4uXV1cXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdEF2YWlsYWJsZSBrZXlzOlxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHRcXFxcdFxcXFx0ICBwaWQocCksIHRnaWQodGcpLCBuYW1lKG4pLCBzdGFja3RyYWNlKHN0KSxcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdCAgdHh0KFQpLCBhbGxvY190cyhhdCksIGFsbG9jYXRvcihhdG9yKSwgbW9kdWxlKG1vZClcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdFRoZSBcXFxcXFxcIitcXFxcXFxcIiBpcyBvcHRpb25hbCBzaW5jZSBkZWZhdWx0IGRpcmVjdGlvbiBpc1xcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHRcXFxcdFxcXFx0aW5jcmVhc2luZyBudW1lcmljYWwgb3IgbGV4aWNvZ3JhcGhpYyBvcmRlci5cXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdE1peGVkIHVzZSBvZiBhYmJyZXZpYXRlZCBhbmQgY29tcGxldGUtZm9ybSBpcyBhbGxvd2VkLlxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHRcXFxcdFxcXFx0RXhhbXBsZXM6XFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHQgIC0tc29ydD1uLCtwaWQsLXRnaWRcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdCAgLS1zb3J0PW1vZCxhdFxcXFxuXFxcIlxcbiBcXHQpO1xcbiB9XFxuIFxcbkBAIC03MjEsMTMgKzc5NywxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdHsgXFxcIm5hbWVcXFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMyB9LFxcbiBcXHRcXHR7IFxcXCJjdWxsXFxcIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDQgfSxcXG4gXFx0XFx0eyBcXFwic29ydFxcXCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA1IH0sXFxuK1xcdFxcdHsgXFxcIm1vZHVsZVxcXCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2IH0sXFxuIFxcdFxcdHsgXFxcImhlbHBcXFwiLCBub19hcmd1bWVudCwgTlVMTCwgJ2gnIH0sXFxuIFxcdFxcdHsgMCwgMCwgMCwgMH0sXFxuIFxcdH07XFxuIFxcbiBcXHRjb21wYXJlX2ZsYWcgPSBDT01QX05PX0ZMQUc7XFxuIFxcbi1cXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFxcXCJhZG1ucHN0UGhcXFwiLCBsb25nb3B0cywgTlVMTCkpICE9IC0xKVxcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFxcXCJhZG1ucHN0UE1oXFxcIiwgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSlcXG4gXFx0XFx0c3dpdGNoIChvcHQpIHtcXG4gXFx0XFx0Y2FzZSAnYSc6XFxuIFxcdFxcdFxcdGNvbXBhcmVfZmxhZyB8PSBDT01QX0FMTE9DO1xcbkBAIC03NTMsNiArODMwLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRjYXNlICduJzpcXG4gXFx0XFx0XFx0Y29tcGFyZV9mbGFnIHw9IENPTVBfQ09NTTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ00nOlxcbitcXHRcXHRcXHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9NT0RVTEU7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdoJzpcXG4gXFx0XFx0XFx0dXNhZ2UoKTtcXG4gXFx0XFx0XFx0ZXhpdCgwKTtcXG5AQCAtNzkyLDYgKzg3MiwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdFxcdGV4aXQoMSk7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgNjpcXG4rXFx0XFx0XFx0ZmlsdGVyID0gZmlsdGVyIHwgRklMVEVSX01PRFVMRTtcXG4rXFx0XFx0XFx0ZmMubW9kdWxlcyA9IGV4cGxvZGUoJywnLCBvcHRhcmcsIFxcdTAwMjZmYy5tb2R1bGVzX3NpemUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0dXNhZ2UoKTtcXG4gXFx0XFx0XFx0ZXhpdCgxKTtcXG5AQCAtODIxLDYgKzkwNSw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9zdGFja3RyYWNlLCBTT1JUX0FTQyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIENPTVBfTk9fRkxBRzpcXG4rXFx0XFx0aWYgKHNjLnNpemUgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0LyogZmFsbHRocm91Z2ggKi9cXG4gXFx0Y2FzZSBDT01QX05VTTpcXG4gXFx0XFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9udW0sIFNPUlRfREVTQyk7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC04MzAsNiArOTE3LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRjYXNlIENPTVBfQ09NTTpcXG4gXFx0XFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9jb21tLCBTT1JUX0FTQyk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIENPTVBfTU9EVUxFOlxcbitcXHRcXHRzZXRfc2luZ2xlX2NtcChjb21wYXJlX21vZHVsZSwgU09SVF9BU0MpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0dXNhZ2UoKTtcXG4gXFx0XFx0ZXhpdCgxKTtcXG5AQCAtODUzLDYgKzk0Myw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0Z290byBvdXRfY29tbTtcXG4gXFx0aWYgKCFjaGVja19yZWdjb21wKFxcdTAwMjZ0c19uc2VjX3BhdHRlcm4sIFxcXCJ0c1xcXFxcXFxccyooWzAtOV0qKVxcXFxcXFxccypuc1xcXCIpKVxcbiBcXHRcXHRnb3RvIG91dF90cztcXG4rXFx0aWYgKCFjaGVja19yZWdjb21wKFxcdTAwMjZtb2R1bGVfcGF0dGVybiwgXFxcIlxcXFxcXFxcKzB4WzAtOWEtZl0rLzB4WzAtOWEtZl0rXFxcXFxcXFxzKlxcXFxcXFxcWyhbYS16QS1aMC05Xy1dKylcXFxcXFxcXF1cXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfbW9kdWxlO1xcbiBcXG4gXFx0ZnN0YXQoZmlsZW5vKGZpbiksIFxcdTAwMjZzdCk7XFxuIFxcdG1heF9zaXplID0gc3Quc3Rfc2l6ZSAvIDEwMDsgLyogaGFjayAuLi4gKi9cXG5AQCAtOTExLDYgKzEwMDMsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdFxcdGZwcmludGYoZm91dCwgXFxcIiwgVEdJRCAlZFxcXCIsIGxpc3RbaV0udGdpZCk7XFxuIFxcdFxcdFxcdGlmIChjdWxsIFxcdTAwMjYgQ1VMTF9DT01NIHx8IGZpbHRlciBcXHUwMDI2IEZJTFRFUl9DT01NKVxcbiBcXHRcXHRcXHRcXHRmcHJpbnRmKGZvdXQsIFxcXCIsIHRhc2tfY29tbV9uYW1lOiAlc1xcXCIsIGxpc3RbaV0uY29tbSk7XFxuK1xcdFxcdFxcdGlmIChjdWxsIFxcdTAwMjYgQ1VMTF9NT0RVTEUgfHwgZmlsdGVyIFxcdTAwMjYgRklMVEVSX01PRFVMRSlcXG4rXFx0XFx0XFx0XFx0ZnByaW50Zihmb3V0LCBcXFwiLCBtb2R1bGU6ICVzXFxcIiwgbGlzdFtpXS5tb2R1bGUpO1xcbiBcXHRcXHRcXHRpZiAoY3VsbCBcXHUwMDI2IENVTExfQUxMT0NBVE9SKSB7XFxuIFxcdFxcdFxcdFxcdGZwcmludGYoZm91dCwgXFxcIiwgXFxcIik7XFxuIFxcdFxcdFxcdFxcdHByaW50X2FsbG9jYXRvcihmb3V0LCBsaXN0W2ldLmFsbG9jYXRvcik7XFxuQEAgLTkzMSw2ICsxMDI1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRcXHRmcmVlX2Jsb2NrX2xpc3QoXFx1MDAyNmxpc3RbaV0pO1xcbiBcXHRcXHRmcmVlKGxpc3QpO1xcbiBcXHR9XFxuK291dF9tb2R1bGU6XFxuK1xcdHJlZ2ZyZWUoXFx1MDAyNm1vZHVsZV9wYXR0ZXJuKTtcXG4gb3V0X3RzOlxcbiBcXHRyZWdmcmVlKFxcdTAwMjZ0c19uc2VjX3BhdHRlcm4pO1xcbiBvdXRfY29tbTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDc6MTMuNTAyNjQzNjg3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDc4NDIxOTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGVmMGNhMzcyODhmZDdlYjVlNjZiOGRkOTkwMThmZmU5ZjdkNGZkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDAzOjA3OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbmluZGV4IGE2YmQzZmU2NDIzYWQuLmJkMDI3Mzc3ZGZmNmUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XG5AQCAtMTk5LDYgKzE5OSw3IEBAIFVzYWdlXG4gXHRcdC1wXHRcdFNvcnQgYnkgcGlkLlxuIFx0XHQtUFx0XHRTb3J0IGJ5IHRnaWQuXG4gXHRcdC1uXHRcdFNvcnQgYnkgdGFzayBjb21tYW5kIG5hbWUuXG4rXHRcdC1NXHRcdFNvcnQgYnkgbW9kdWxlIG5hbWUuXG4gXHRcdC1yXHRcdFNvcnQgYnkgbWVtb3J5IHJlbGVhc2UgdGltZS5cbiBcdFx0LXNcdFx0U29ydCBieSBzdGFjayB0cmFjZS5cbiBcdFx0LXRcdFx0U29ydCBieSB0aW1lcyAoZGVmYXVsdCkuXG5AQCAtMjQwLDggKzI0MSwxMCBAQCBVc2FnZVxuIFx0XHRcdFx0XHRncm91cCBJRCBudW1iZXJzIGFwcGVhciBpbiBcdTAwM2N0Z2lkbGlzdFx1MDAzZS5cbiBcdFx0LS1uYW1lIFx1MDAzY2NtZGxpc3RcdTAwM2VcdFNlbGVjdCBieSB0YXNrIGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2VcbiBcdFx0XHRcdFx0dGFzayBjb21tYW5kIG5hbWUgYXBwZWFyIGluIFx1MDAzY2NtZGxpc3RcdTAwM2UuXG4rXHRcdC0tbW9kdWxlIFx1MDAzY21vZGxpc3RcdTAwM2VcdFNlbGVjdCBieSBtb2R1bGUgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2VcbitcdFx0XHRcdFx0bW9kdWxlIG5hbWUgYXBwZWFyIGluIFx1MDAzY21vZGxpc3RcdTAwM2UuXG4gXG4tXHRcdFx1MDAzY3BpZGxpc3RcdTAwM2UsIFx1MDAzY3RnaWRsaXN0XHUwMDNlLCBcdTAwM2NjbWRsaXN0XHUwMDNlIGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsXG4rXHRcdFx1MDAzY3BpZGxpc3RcdTAwM2UsIFx1MDAzY3RnaWRsaXN0XHUwMDNlLCBcdTAwM2NjbWRsaXN0XHUwMDNlLCBcdTAwM2Ntb2RsaXN0XHUwMDNlIGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsXG4gXHRcdHdoaWNoIG9mZmVycyBhIHdheSB0byBzcGVjaWZ5IGluZGl2aWR1YWwgc2VsZWN0aW5nIHJ1bGVzLlxuIFxuIFxuQEAgLTI0OSw2ICsyNTIsNyBAQCBVc2FnZVxuIFx0XHRcdFx0Li9wYWdlX293bmVyX3NvcnQgXHUwMDNjaW5wdXRcdTAwM2UgXHUwMDNjb3V0cHV0XHUwMDNlIC0tcGlkPTFcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLXRnaWQ9MSwyLDNcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLW5hbWUgbmFtZTEsbmFtZTJcbitcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLW1vZHVsZSB4ZnMsZXh0NFxuIFxuIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT1cbkBAIC0yNjUsNiArMjY5LDcgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlNcbiBcdGZ0XHRcdGZyZWVfdHNcdFx0dGltZXN0YW1wIG9mIHRoZSBwYWdlIHdoZW4gaXQgd2FzIHJlbGVhc2VkXG4gXHRhdFx0XHRhbGxvY190c1x0dGltZXN0YW1wIG9mIHRoZSBwYWdlIHdoZW4gaXQgd2FzIGFsbG9jYXRlZFxuIFx0YXRvclx0XHRhbGxvY2F0b3JcdG1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzXG4rXHRtb2RcdFx0bW9kdWxlXHRcdGtlcm5lbCBtb2R1bGUgbmFtZVxuIFxuICAgRm9yIC0tY3VsbCBvcHRpb246XG4gXG5AQCAtMjc1LDYgKzI4MCw3IEBAIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTXG4gXHRmXHRcdGZyZWVcdFx0d2hldGhlciB0aGUgcGFnZSBoYXMgYmVlbiByZWxlYXNlZCBvciBub3RcbiBcdHN0XHRcdHN0YWNrdHJhY2VcdHN0YWNrIHRyYWNlIG9mIHRoZSBwYWdlIGFsbG9jYXRpb25cbiBcdGF0b3JcdFx0YWxsb2NhdG9yXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xuK1x0bW9kXHRcdG1vZHVsZVx0XHRrZXJuZWwgbW9kdWxlIG5hbWVcbiBcbiBGaWx0ZXJpbmcgcGFnZV9vd25lciBvdXRwdXRcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xuaW5kZXggMzVkM2QyNTQ5NDFjOS4uMTZhYzYyMWI3NGY2MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jXG4rKysgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xuQEAgLTI1LDExICsyNSwxMyBAQFxuICNpbmNsdWRlIFx1MDAzY2dldG9wdC5oXHUwMDNlXG4gXG4gI2RlZmluZSBUQVNLX0NPTU1fTEVOIDE2XG4rI2RlZmluZSBNT0RVTEVfTkFNRV9MRU4gNjRcbiBcbiBzdHJ1Y3QgYmxvY2tfbGlzdCB7XG4gXHRjaGFyICp0eHQ7XG4gXHRjaGFyICpjb21tOyAvLyB0YXNrIGNvbW1hbmQgbmFtZVxuIFx0Y2hhciAqc3RhY2t0cmFjZTtcbitcdGNoYXIgKm1vZHVsZTsgLy8ga2VybmVsIG1vZHVsZSBuYW1lXG4gXHRfX3U2NCB0c19uc2VjO1xuIFx0aW50IGxlbjtcbiBcdGludCBudW07XG5AQCAtNDEsNyArNDMsOCBAQCBzdHJ1Y3QgYmxvY2tfbGlzdCB7XG4gZW51bSBGSUxURVJfQklUIHtcbiBcdEZJTFRFUl9QSUQgPSAxXHUwMDNjXHUwMDNjMSxcbiBcdEZJTFRFUl9UR0lEID0gMVx1MDAzY1x1MDAzYzIsXG4tXHRGSUxURVJfQ09NTSA9IDFcdTAwM2NcdTAwM2MzXG4rXHRGSUxURVJfQ09NTSA9IDFcdTAwM2NcdTAwM2MzLFxuK1x0RklMVEVSX01PRFVMRSA9IDFcdTAwM2NcdTAwM2M0XG4gfTtcbiBcbiBlbnVtIEZJTFRFUl9SRVNVTFQge1xuQEAgLTU1LDcgKzU4LDggQEAgZW51bSBDVUxMX0JJVCB7XG4gXHRDVUxMX1RHSUQgPSAxXHUwMDNjXHUwMDNjMixcbiBcdENVTExfQ09NTSA9IDFcdTAwM2NcdTAwM2MzLFxuIFx0Q1VMTF9TVEFDS1RSQUNFID0gMVx1MDAzY1x1MDAzYzQsXG4tXHRDVUxMX0FMTE9DQVRPUiA9IDFcdTAwM2NcdTAwM2M1XG4rXHRDVUxMX0FMTE9DQVRPUiA9IDFcdTAwM2NcdTAwM2M1LFxuK1x0Q1VMTF9NT0RVTEUgPSAxXHUwMDNjXHUwMDNjNlxuIH07XG4gZW51bSBBTExPQ0FUT1JfQklUIHtcbiBcdEFMTE9DQVRPUl9DTUEgPSAxXHUwMDNjXHUwMDNjMSxcbkBAIC02NSw3ICs2OSw4IEBAIGVudW0gQUxMT0NBVE9SX0JJVCB7XG4gfTtcbiBlbnVtIEFSR19UWVBFIHtcbiBcdEFSR19UWFQsIEFSR19DT01NLCBBUkdfU1RBQ0tUUkFDRSwgQVJHX0FMTE9DX1RTLCBBUkdfQ1VMTF9USU1FLFxuLVx0QVJHX1BBR0VfTlVNLCBBUkdfUElELCBBUkdfVEdJRCwgQVJHX1VOS05PV04sIEFSR19BTExPQ0FUT1JcbitcdEFSR19QQUdFX05VTSwgQVJHX1BJRCwgQVJHX1RHSUQsIEFSR19VTktOT1dOLCBBUkdfQUxMT0NBVE9SLFxuK1x0QVJHX01PRFVMRVxuIH07XG4gZW51bSBTT1JUX09SREVSIHtcbiBcdFNPUlRfQVNDID0gMSxcbkBAIC03OSwxNSArODQsMTggQEAgZW51bSBDT01QX0ZMQUcge1xuIFx0Q09NUF9TVEFDSyA9IDFcdTAwM2NcdTAwM2MzLFxuIFx0Q09NUF9OVU0gPSAxXHUwMDNjXHUwMDNjNCxcbiBcdENPTVBfVEdJRCA9IDFcdTAwM2NcdTAwM2M1LFxuLVx0Q09NUF9DT01NID0gMVx1MDAzY1x1MDAzYzZcbitcdENPTVBfQ09NTSA9IDFcdTAwM2NcdTAwM2M2LFxuK1x0Q09NUF9NT0RVTEUgPSAxXHUwMDNjXHUwMDNjN1xuIH07XG4gc3RydWN0IGZpbHRlcl9jb25kaXRpb24ge1xuIFx0cGlkX3QgKnBpZHM7XG4gXHRwaWRfdCAqdGdpZHM7XG4gXHRjaGFyICoqY29tbXM7XG4rXHRjaGFyICoqbW9kdWxlcztcbiBcdGludCBwaWRzX3NpemU7XG4gXHRpbnQgdGdpZHNfc2l6ZTtcbiBcdGludCBjb21tc19zaXplO1xuK1x0aW50IG1vZHVsZXNfc2l6ZTtcbiB9O1xuIHN0cnVjdCBzb3J0X2NvbmRpdGlvbiB7XG4gXHRpbnQgKCoqY21wcykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopO1xuQEAgLTEwMSw2ICsxMDksNyBAQCBzdGF0aWMgcmVnZXhfdCBwaWRfcGF0dGVybjtcbiBzdGF0aWMgcmVnZXhfdCB0Z2lkX3BhdHRlcm47XG4gc3RhdGljIHJlZ2V4X3QgY29tbV9wYXR0ZXJuO1xuIHN0YXRpYyByZWdleF90IHRzX25zZWNfcGF0dGVybjtcbitzdGF0aWMgcmVnZXhfdCBtb2R1bGVfcGF0dGVybjtcbiBzdGF0aWMgc3RydWN0IGJsb2NrX2xpc3QgKmxpc3Q7XG4gc3RhdGljIGludCBsaXN0X3NpemU7XG4gc3RhdGljIGludCBtYXhfc2l6ZTtcbkBAIC0xODQsNiArMTkzLDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jb21tKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiBcdHJldHVybiBzdHJjbXAobDEtXHUwMDNlY29tbSwgbDItXHUwMDNlY29tbSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgY29tcGFyZV9tb2R1bGUoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcbitcbitcdHJldHVybiBzdHJjbXAobDEtXHUwMDNlbW9kdWxlLCBsMi1cdTAwM2Vtb2R1bGUpO1xuK31cbitcbiBzdGF0aWMgaW50IGNvbXBhcmVfdHMoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcbkBAIC0yMDcsNiArMjIzLDggQEAgc3RhdGljIGludCBjb21wYXJlX2N1bGxfY29uZGl0aW9uKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiBcdFx0cmV0dXJuIGNvbXBhcmVfdGdpZChwMSwgcDIpO1xuIFx0aWYgKChjdWxsIFx1MDAyNiBDVUxMX0NPTU0pIFx1MDAyNlx1MDAyNiBjb21wYXJlX2NvbW0ocDEsIHAyKSlcbiBcdFx0cmV0dXJuIGNvbXBhcmVfY29tbShwMSwgcDIpO1xuK1x0aWYgKChjdWxsIFx1MDAyNiBDVUxMX01PRFVMRSkgXHUwMDI2XHUwMDI2IGNvbXBhcmVfbW9kdWxlKHAxLCBwMikpXG4rXHRcdHJldHVybiBjb21wYXJlX21vZHVsZShwMSwgcDIpO1xuIFx0aWYgKChjdWxsIFx1MDAyNiBDVUxMX0FMTE9DQVRPUikgXHUwMDI2XHUwMDI2IGNvbXBhcmVfYWxsb2NhdG9yKHAxLCBwMikpXG4gXHRcdHJldHVybiBjb21wYXJlX2FsbG9jYXRvcihwMSwgcDIpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDExLDkgKzQyOSwzMyBAQCBzdGF0aWMgY2hhciAqZ2V0X2NvbW0oY2hhciAqYnVmKVxuIFx0cmV0dXJuIGNvbW1fc3RyO1xuIH1cbiBcbitzdGF0aWMgY2hhciAqZ2V0X21vZHVsZShjaGFyICpidWYpXG4re1xuK1x0Y2hhciAqbW9kdWxlX3N0ciA9IG1hbGxvYyhNT0RVTEVfTkFNRV9MRU4pO1xuK1x0cmVnbWF0Y2hfdCBwbWF0Y2hbMl07XG4rXHRpbnQgdmFsX2xlbjtcbitcbitcdGlmICghbW9kdWxlX3N0cilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRtZW1zZXQobW9kdWxlX3N0ciwgMCwgTU9EVUxFX05BTUVfTEVOKTtcbitcdGlmIChyZWdleGVjKFx1MDAyNm1vZHVsZV9wYXR0ZXJuLCBidWYsIDIsIHBtYXRjaCwgUkVHX05PVEJPTCkgIT0gMCB8fCBwbWF0Y2hbMV0ucm1fc28gPT0gLTEpIHtcbitcdFx0c3RyY3B5KG1vZHVsZV9zdHIsIFwidm1saW51eFwiKTtcbitcdFx0cmV0dXJuIG1vZHVsZV9zdHI7XG4rXHR9XG4rXG4rXHR2YWxfbGVuID0gcG1hdGNoWzFdLnJtX2VvIC0gcG1hdGNoWzFdLnJtX3NvO1xuK1x0aWYgKChzaXplX3QpdmFsX2xlbiBcdTAwM2U9IE1PRFVMRV9OQU1FX0xFTilcbitcdFx0dmFsX2xlbiA9IE1PRFVMRV9OQU1FX0xFTiAtIDE7XG4rXHRtZW1jcHkobW9kdWxlX3N0ciwgYnVmICsgcG1hdGNoWzFdLnJtX3NvLCB2YWxfbGVuKTtcbitcdG1vZHVsZV9zdHJbdmFsX2xlbl0gPSAnXFwwJztcbitcbitcdHJldHVybiBtb2R1bGVfc3RyO1xuK31cbitcbiBzdGF0aWMgdm9pZCBmcmVlX2Jsb2NrX2xpc3Qoc3RydWN0IGJsb2NrX2xpc3QgKmJsb2NrKVxuIHtcbiBcdGZyZWUoYmxvY2stXHUwMDNlY29tbSk7XG4rXHRmcmVlKGJsb2NrLVx1MDAzZW1vZHVsZSk7XG4gXHRmcmVlKGJsb2NrLVx1MDAzZXR4dCk7XG4gfVxuIFxuQEAgLTQzMyw2ICs0NzUsOCBAQCBzdGF0aWMgaW50IGdldF9hcmdfdHlwZShjb25zdCBjaGFyICphcmcpXG4gXHRcdHJldHVybiBBUkdfQUxMT0NfVFM7XG4gXHRlbHNlIGlmICghc3RyY21wKGFyZywgXCJhbGxvY2F0b3JcIikgfHwgIXN0cmNtcChhcmcsIFwiYXRvclwiKSlcbiBcdFx0cmV0dXJuIEFSR19BTExPQ0FUT1I7XG4rXHRlbHNlIGlmICghc3RyY21wKGFyZywgXCJtb2R1bGVcIikgfHwgIXN0cmNtcChhcmcsIFwibW9kXCIpKVxuK1x0XHRyZXR1cm4gQVJHX01PRFVMRTtcbiBcdGVsc2Uge1xuIFx0XHRyZXR1cm4gQVJHX1VOS05PV047XG4gXHR9XG5AQCAtNDgzLDI1ICs1MjcsMzYgQEAgc3RhdGljIGJvb2wgbWF0Y2hfc3RyX2xpc3QoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqbGlzdCwgaW50IGxpc3Rfc2l6ZSlcbiBcbiBzdGF0aWMgZW51bSBGSUxURVJfUkVTVUxUIGZpbHRlcl9yZWNvcmQoY2hhciAqYnVmKVxuIHtcbi1cdGNoYXIgKmNvbW07XG4rXHRjaGFyICpjb21tLCAqbW9kdWxlO1xuIFxuIFx0aWYgKChmaWx0ZXIgXHUwMDI2IEZJTFRFUl9QSUQpIFx1MDAyNlx1MDAyNiAhbWF0Y2hfbnVtX2xpc3QoZ2V0X3BpZChidWYpLCBmYy5waWRzLCBmYy5waWRzX3NpemUpKVxuIFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4gXHRpZiAoKGZpbHRlciBcdTAwMjYgRklMVEVSX1RHSUQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhbWF0Y2hfbnVtX2xpc3QoZ2V0X3RnaWQoYnVmKSwgZmMudGdpZHMsIGZjLnRnaWRzX3NpemUpKVxuIFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4tXHRpZiAoIShmaWx0ZXIgXHUwMDI2IEZJTFRFUl9DT01NKSlcbitcdGlmICghKGZpbHRlciBcdTAwMjYgKEZJTFRFUl9DT01NIHwgRklMVEVSX01PRFVMRSkpKVxuIFx0XHRyZXR1cm4gRklMVEVSX01BVENIO1xuIFxuLVx0Y29tbSA9IGdldF9jb21tKGJ1Zik7XG4tXHRpZiAoIWNvbW0pXG4tXHRcdHJldHVybiBGSUxURVJfRVJST1I7XG4tXG4tXHRpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkge1xuK1x0aWYgKGZpbHRlciBcdTAwMjYgRklMVEVSX0NPTU0pIHtcbitcdFx0Y29tbSA9IGdldF9jb21tKGJ1Zik7XG4rXHRcdGlmICghY29tbSlcbitcdFx0XHRyZXR1cm4gRklMVEVSX0VSUk9SO1xuK1x0XHRpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkge1xuK1x0XHRcdGZyZWUoY29tbSk7XG4rXHRcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuK1x0XHR9XG4gXHRcdGZyZWUoY29tbSk7XG4tXHRcdHJldHVybiBGSUxURVJfU0tJUDtcbiBcdH1cbi1cdGZyZWUoY29tbSk7XG4rXHRpZiAoZmlsdGVyIFx1MDAyNiBGSUxURVJfTU9EVUxFKSB7XG4rXHRcdG1vZHVsZSA9IGdldF9tb2R1bGUoYnVmKTtcbitcdFx0aWYgKCFtb2R1bGUpXG4rXHRcdFx0cmV0dXJuIEZJTFRFUl9FUlJPUjtcbitcdFx0aWYgKCFtYXRjaF9zdHJfbGlzdChtb2R1bGUsIGZjLm1vZHVsZXMsIGZjLm1vZHVsZXNfc2l6ZSkpIHtcbitcdFx0XHRmcmVlKG1vZHVsZSk7XG4rXHRcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuK1x0XHR9XG4rXHRcdGZyZWUobW9kdWxlKTtcbitcdH1cbiBcdHJldHVybiBGSUxURVJfTUFUQ0g7XG4gfVxuIFxuQEAgLTU0Nyw2ICs2MDIsMTIgQEAgc3RhdGljIGJvb2wgYWRkX2xpc3QoY2hhciAqYnVmLCBpbnQgbGVuLCBjaGFyICpleHRfYnVmKVxuIFx0XHRsaXN0W2xpc3Rfc2l6ZV0uc3RhY2t0cmFjZSsrO1xuIFx0bGlzdFtsaXN0X3NpemVdLnRzX25zZWMgPSBnZXRfdHNfbnNlYyhidWYpO1xuIFx0bGlzdFtsaXN0X3NpemVdLmFsbG9jYXRvciA9IGdldF9hbGxvY2F0b3IoYnVmLCBleHRfYnVmKTtcbitcdGxpc3RbbGlzdF9zaXplXS5tb2R1bGUgPSBnZXRfbW9kdWxlKGJ1Zik7XG4rXHRpZiAoIWxpc3RbbGlzdF9zaXplXS5tb2R1bGUpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiT3V0IG9mIG1lbW9yeVxcblwiKTtcbitcdFx0ZnJlZV9ibG9ja19saXN0KFx1MDAyNmxpc3RbbGlzdF9zaXplXSk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbiBcdGxpc3Rfc2l6ZSsrO1xuIFx0aWYgKGxpc3Rfc2l6ZSAlIDEwMDAgPT0gMCkge1xuIFx0XHRwcmludGYoXCJsb2FkZWQgJWRcXHJcIiwgbGlzdF9zaXplKTtcbkBAIC01NzMsNiArNjM0LDggQEAgc3RhdGljIGJvb2wgcGFyc2VfY3VsbF9hcmdzKGNvbnN0IGNoYXIgKmFyZ19zdHIpXG4gXHRcdFx0Y3VsbCB8PSBDVUxMX1NUQUNLVFJBQ0U7XG4gXHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXG4gXHRcdFx0Y3VsbCB8PSBDVUxMX0FMTE9DQVRPUjtcbitcdFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSlcbitcdFx0XHRjdWxsIHw9IENVTExfTU9EVUxFO1xuIFx0XHRlbHNlIHtcbiBcdFx0XHRmcmVlX2V4cGxvZGUoYXJncywgc2l6ZSk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTYzNSw2ICs2OTgsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9zb3J0X2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cilcbiBcdFx0XHRzYy5jbXBzW2ldID0gY29tcGFyZV90eHQ7XG4gXHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXG4gXHRcdFx0c2MuY21wc1tpXSA9IGNvbXBhcmVfYWxsb2NhdG9yO1xuK1x0XHRlbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfTU9EVUxFKVxuK1x0XHRcdHNjLmNtcHNbaV0gPSBjb21wYXJlX21vZHVsZTtcbiBcdFx0ZWxzZSB7XG4gXHRcdFx0ZnJlZV9leHBsb2RlKGFyZ3MsIHNpemUpO1xuIFx0XHRcdHNjLnNpemUgPSAwO1xuQEAgLTY5MSw3ICs3NTYsOCBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuIFx0XHRcIi1wXFx0XFx0XFx0U29ydCBieSBwaWQuXFxuXCJcbiBcdFx0XCItUFxcdFxcdFxcdFNvcnQgYnkgdGdpZC5cXG5cIlxuIFx0XHRcIi1zXFx0XFx0XFx0U29ydCBieSB0aGUgc3RhY2t0cmFjZS5cXG5cIlxuLVx0XHRcIi10XFx0XFx0XFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxcblxcblwiXG4rXHRcdFwiLXRcXHRcXHRcXHRTb3J0IGJ5IG51bWJlciBvZiB0aW1lcyByZWNvcmQgaXMgc2VlbiAoZGVmYXVsdCkuXFxuXCJcbitcdFx0XCItTVxcdFxcdFxcdFNvcnQgYnkgbW9kdWxlIG5hbWUuXFxuXFxuXCJcbiBcdFx0XCItLXBpZCBcdTAwM2NwaWRsaXN0XHUwMDNlXFx0XFx0U2VsZWN0IGJ5IHBpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblwiXG4gXHRcdFwiIG9mXFxuXFx0XFx0XFx0YmxvY2tzIHdob3NlIHByb2Nlc3MgSUQgbnVtYmVycyBhcHBlYXIgaW4gXHUwMDNjcGlkbGlzdFx1MDAzZS5cXG5cIlxuIFx0XHRcIi0tdGdpZCBcdTAwM2N0Z2lkbGlzdFx1MDAzZVxcdFNlbGVjdCBieSB0Z2lkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uXCJcbkBAIC03MDAsMTEgKzc2NiwyMSBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuIFx0XHRcIi0tbmFtZSBcdTAwM2NjbWRsaXN0XHUwMDNlXFx0U2VsZWN0IGJ5IGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZVwiXG4gXHRcdFwiIGluZm9ybWF0aW9uXFxuXFx0XFx0XFx0b2YgYmxvY2tzIHdob3NlIGNvbW1hbmQgbmFtZSBhcHBlYXJzIGluXCJcbiBcdFx0XCIgXHUwMDNjY21kbGlzdFx1MDAzZS5cXG5cIlxuLVx0XHRcIi0tY3VsbCBcdTAwM2NydWxlc1x1MDAzZVxcdFxcdEN1bGwgYnkgdXNlci1kZWZpbmVkIHJ1bGVzLiBcdTAwM2NydWxlc1x1MDAzZSBpcyBhIFwiXG4tXHRcdFwic2luZ2xlXFxuXFx0XFx0XFx0YXJndW1lbnQgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBcIlxuLVx0XHRcIndpdGggc29tZVxcblxcdFxcdFxcdGNvbW1vbiBmaWVsZHMgcHJlZGVmaW5lZCAocGlkLCB0Z2lkLCBjb21tLCBcIlxuLVx0XHRcInN0YWNrdHJhY2UsIGFsbG9jYXRvcilcXG5cIlxuK1x0XHRcIi0tbW9kdWxlIFx1MDAzY21vZGxpc3RcdTAwM2VcXHRTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cXG5cIlxuK1x0XHRcIlxcdFxcdFxcdG9mIGJsb2NrcyB3aG9zZSBtb2R1bGUgbmFtZSBhcHBlYXJzIGluIFx1MDAzY21vZGxpc3RcdTAwM2UuXFxuXCJcbitcdFx0XCItLWN1bGwgXHUwMDNjcnVsZXNcdTAwM2VcXHRcXHRDdWxsIGJ5IHVzZXItZGVmaW5lZCBydWxlcy4gXHUwMDNjcnVsZXNcdTAwM2UgaXMgYSBzaW5nbGVcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdGFyZ3VtZW50IGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgd2l0aCBzb21lXFxuXCJcbitcdFx0XCJcXHRcXHRcXHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgc3RhY2t0cmFjZSwgYWxsb2NhdG9yLCBtb2R1bGUpXFxuXCJcbiBcdFx0XCItLXNvcnQgXHUwMDNjb3JkZXJcdTAwM2VcXHRcXHRTcGVjaWZ5IHNvcnQgb3JkZXIgYXM6IFsrfC1da2V5WyxbK3wtXWtleVssLi4uXV1cXG5cIlxuK1x0XHRcIlxcdFxcdFxcdEF2YWlsYWJsZSBrZXlzOlxcblwiXG4rXHRcdFwiXFx0XFx0XFx0ICBwaWQocCksIHRnaWQodGcpLCBuYW1lKG4pLCBzdGFja3RyYWNlKHN0KSxcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdCAgdHh0KFQpLCBhbGxvY190cyhhdCksIGFsbG9jYXRvcihhdG9yKSwgbW9kdWxlKG1vZClcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdFRoZSBcXFwiK1xcXCIgaXMgb3B0aW9uYWwgc2luY2UgZGVmYXVsdCBkaXJlY3Rpb24gaXNcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdGluY3JlYXNpbmcgbnVtZXJpY2FsIG9yIGxleGljb2dyYXBoaWMgb3JkZXIuXFxuXCJcbitcdFx0XCJcXHRcXHRcXHRNaXhlZCB1c2Ugb2YgYWJicmV2aWF0ZWQgYW5kIGNvbXBsZXRlLWZvcm0gaXMgYWxsb3dlZC5cXG5cIlxuK1x0XHRcIlxcdFxcdFxcdEV4YW1wbGVzOlxcblwiXG4rXHRcdFwiXFx0XFx0XFx0ICAtLXNvcnQ9biwrcGlkLC10Z2lkXFxuXCJcbitcdFx0XCJcXHRcXHRcXHQgIC0tc29ydD1tb2QsYXRcXG5cIlxuIFx0KTtcbiB9XG4gXG5AQCAtNzIxLDEzICs3OTcsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHR7IFwibmFtZVwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMyB9LFxuIFx0XHR7IFwiY3VsbFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNCB9LFxuIFx0XHR7IFwic29ydFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNSB9LFxuK1x0XHR7IFwibW9kdWxlXCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2IH0sXG4gXHRcdHsgXCJoZWxwXCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnaCcgfSxcbiBcdFx0eyAwLCAwLCAwLCAwfSxcbiBcdH07XG4gXG4gXHRjb21wYXJlX2ZsYWcgPSBDT01QX05PX0ZMQUc7XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwiYWRtbnBzdFBoXCIsIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpXG4rXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwiYWRtbnBzdFBNaFwiLCBsb25nb3B0cywgTlVMTCkpICE9IC0xKVxuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICdhJzpcbiBcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9BTExPQztcbkBAIC03NTMsNiArODMwLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICduJzpcbiBcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9DT01NO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdNJzpcbitcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9NT0RVTEU7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ2gnOlxuIFx0XHRcdHVzYWdlKCk7XG4gXHRcdFx0ZXhpdCgwKTtcbkBAIC03OTIsNiArODcyLDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRcdGV4aXQoMSk7XG4gXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIDY6XG4rXHRcdFx0ZmlsdGVyID0gZmlsdGVyIHwgRklMVEVSX01PRFVMRTtcbitcdFx0XHRmYy5tb2R1bGVzID0gZXhwbG9kZSgnLCcsIG9wdGFyZywgXHUwMDI2ZmMubW9kdWxlc19zaXplKTtcbitcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHR1c2FnZSgpO1xuIFx0XHRcdGV4aXQoMSk7XG5AQCAtODIxLDYgKzkwNSw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9zdGFja3RyYWNlLCBTT1JUX0FTQyk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBDT01QX05PX0ZMQUc6XG4rXHRcdGlmIChzYy5zaXplIFx1MDAzZSAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHQvKiBmYWxsdGhyb3VnaCAqL1xuIFx0Y2FzZSBDT01QX05VTTpcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9udW0sIFNPUlRfREVTQyk7XG4gXHRcdGJyZWFrO1xuQEAgLTgzMCw2ICs5MTcsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRjYXNlIENPTVBfQ09NTTpcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9jb21tLCBTT1JUX0FTQyk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBDT01QX01PRFVMRTpcbitcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9tb2R1bGUsIFNPUlRfQVNDKTtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR1c2FnZSgpO1xuIFx0XHRleGl0KDEpO1xuQEAgLTg1Myw2ICs5NDMsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGdvdG8gb3V0X2NvbW07XG4gXHRpZiAoIWNoZWNrX3JlZ2NvbXAoXHUwMDI2dHNfbnNlY19wYXR0ZXJuLCBcInRzXFxcXHMqKFswLTldKilcXFxccypuc1wiKSlcbiBcdFx0Z290byBvdXRfdHM7XG4rXHRpZiAoIWNoZWNrX3JlZ2NvbXAoXHUwMDI2bW9kdWxlX3BhdHRlcm4sIFwiXFxcXCsweFswLTlhLWZdKy8weFswLTlhLWZdK1xcXFxzKlxcXFxbKFthLXpBLVowLTlfLV0rKVxcXFxdXCIpKVxuK1x0XHRnb3RvIG91dF9tb2R1bGU7XG4gXG4gXHRmc3RhdChmaWxlbm8oZmluKSwgXHUwMDI2c3QpO1xuIFx0bWF4X3NpemUgPSBzdC5zdF9zaXplIC8gMTAwOyAvKiBoYWNrIC4uLiAqL1xuQEAgLTkxMSw2ICsxMDAzLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdFx0ZnByaW50Zihmb3V0LCBcIiwgVEdJRCAlZFwiLCBsaXN0W2ldLnRnaWQpO1xuIFx0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX0NPTU0gfHwgZmlsdGVyIFx1MDAyNiBGSUxURVJfQ09NTSlcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCIsIHRhc2tfY29tbV9uYW1lOiAlc1wiLCBsaXN0W2ldLmNvbW0pO1xuK1x0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX01PRFVMRSB8fCBmaWx0ZXIgXHUwMDI2IEZJTFRFUl9NT0RVTEUpXG4rXHRcdFx0XHRmcHJpbnRmKGZvdXQsIFwiLCBtb2R1bGU6ICVzXCIsIGxpc3RbaV0ubW9kdWxlKTtcbiBcdFx0XHRpZiAoY3VsbCBcdTAwMjYgQ1VMTF9BTExPQ0FUT1IpIHtcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCIsIFwiKTtcbiBcdFx0XHRcdHByaW50X2FsbG9jYXRvcihmb3V0LCBsaXN0W2ldLmFsbG9jYXRvcik7XG5AQCAtOTMxLDYgKzEwMjUsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0ZnJlZV9ibG9ja19saXN0KFx1MDAyNmxpc3RbaV0pO1xuIFx0XHRmcmVlKGxpc3QpO1xuIFx0fVxuK291dF9tb2R1bGU6XG4rXHRyZWdmcmVlKFx1MDAyNm1vZHVsZV9wYXR0ZXJuKTtcbiBvdXRfdHM6XG4gXHRyZWdmcmVlKFx1MDAyNnRzX25zZWNfcGF0dGVybik7XG4gb3V0X2NvbW06XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzowNzoxMy41MDI2NDQ5NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzg0MTc4Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogQSBRdWljayBBbmFseXNpcyoqXG5cbk9rYXksIGhlcmUncyB0aGUgZGVhbC4gSSd2ZSByZXZpZXdlZCB0aGlzIHBhdGNoLCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIHRvdWNoaW5nIHRoZSBgRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdGAgZmlsZSBhbmQgdGhlIGB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY2AgdXRpbGl0eS4gVGhlIGNvcmUgaWRlYSBpcyBhZGRpbmcgbW9kdWxlIG5hbWUgc29ydGluZyBhbmQgZmlsdGVyaW5nIHRvIGBwYWdlX293bmVyX3NvcnRgLiAgRXNzZW50aWFsbHksIGl0J3MgZW5oYW5jaW5nIHRoZSB1c2VyLXNwYWNlIHRvb2wgdGhhdCBwYXJzZXMgdGhlIG91dHB1dCBmcm9tIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYC5cblxuTXkgaW1tZWRpYXRlIGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIE5vIG1vZGlmaWNhdGlvbnMgdG8gYG1tL2AsIGBrZXJuZWwvYCwgYGRyaXZlcnMvYCwgb3IgYW55IG9mIHRoZSBjcml0aWNhbCBrZXJuZWwgc3Vic3lzdGVtcyB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy4gV2UncmUgdGFsa2luZyBhYm91dCBhIHVzZXItc3BhY2UgdG9vbCBoZXJlLiBJdCdzICpwYXJzaW5nKiBrZXJuZWwgb3V0cHV0LCBub3QgKm1vZGlmeWluZyoga2VybmVsIGJlaGF2aW9yLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdC4gWWVwLCBkb3VibGUtY2hlY2tlZC4gT25seSB0aG9zZSB0d28gZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLiBObyBrZXJuZWwgY29kZSBpcyBhZmZlY3RlZC5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgdGhpcy4gSSdsbCBwcm9jZWVkIHdpdGggY2FsbGluZyBgc2V0LXJlc3VsdHNgIHdpdGggdGhhdCB2YWx1ZS4gSXQncyBhIGNsZWFuLCBub24taW52YXNpdmUgcGF0Y2ggZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3OTMsIk91dHB1dFRva2VucyI6NzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzowNzoxOC4yODY4NDIzNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2Vyc3BhY2UgdG9vbCAodG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMpIGFuZCBpdHMgZG9jdW1lbnRhdGlvbi4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2Vyc3BhY2UgdG9vbCAodG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMpIGFuZCBpdHMgZG9jdW1lbnRhdGlvbi4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjA3OjE4LjI4Njg2NjQ5MVoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxj879[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 02:26:05 +0000 UTC FinishedAt: 2026-08-19 03:07:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBlZjBjYTM3Mjg4ZmQ3ZWI1ZTY2YjhkZDk5MDE4ZmZlOWY3ZDRmZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzowNzoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuaW5kZXggYTZiZDNmZTY0MjNhZC4uYmQwMjczNzdkZmY2ZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbkBAIC0xOTksNiAmIzQzOzE5OSw3IEBAIFVzYWdlXG4gXHRcdC1wXHRcdFNvcnQgYnkgcGlkLlxuIFx0XHQtUFx0XHRTb3J0IGJ5IHRnaWQuXG4gXHRcdC1uXHRcdFNvcnQgYnkgdGFzayBjb21tYW5kIG5hbWUuXG4mIzQzO1x0XHQtTVx0XHRTb3J0IGJ5IG1vZHVsZSBuYW1lLlxuIFx0XHQtclx0XHRTb3J0IGJ5IG1lbW9yeSByZWxlYXNlIHRpbWUuXG4gXHRcdC1zXHRcdFNvcnQgYnkgc3RhY2sgdHJhY2UuXG4gXHRcdC10XHRcdFNvcnQgYnkgdGltZXMgKGRlZmF1bHQpLlxuQEAgLTI0MCw4ICYjNDM7MjQxLDEwIEBAIFVzYWdlXG4gXHRcdFx0XHRcdGdyb3VwIElEIG51bWJlcnMgYXBwZWFyIGluIFx1MDAzY3RnaWRsaXN0XHUwMDNlLlxuIFx0XHQtLW5hbWUgXHUwMDNjY21kbGlzdFx1MDAzZVx0U2VsZWN0IGJ5IHRhc2sgY29tbWFuZCBuYW1lLiBUaGlzIHNlbGVjdHMgdGhlIGJsb2NrcyB3aG9zZVxuIFx0XHRcdFx0XHR0YXNrIGNvbW1hbmQgbmFtZSBhcHBlYXIgaW4gXHUwMDNjY21kbGlzdFx1MDAzZS5cbiYjNDM7XHRcdC0tbW9kdWxlIFx1MDAzY21vZGxpc3RcdTAwM2VcdFNlbGVjdCBieSBtb2R1bGUgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2VcbiYjNDM7XHRcdFx0XHRcdG1vZHVsZSBuYW1lIGFwcGVhciBpbiBcdTAwM2Ntb2RsaXN0XHUwMDNlLlxuIFxuLVx0XHRcdTAwM2NwaWRsaXN0XHUwMDNlLCBcdTAwM2N0Z2lkbGlzdFx1MDAzZSwgXHUwMDNjY21kbGlzdFx1MDAzZSBhcmUgc2luZ2xlIGFyZ3VtZW50cyBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LFxuJiM0MztcdFx0XHUwMDNjcGlkbGlzdFx1MDAzZSwgXHUwMDNjdGdpZGxpc3RcdTAwM2UsIFx1MDAzY2NtZGxpc3RcdTAwM2UsIFx1MDAzY21vZGxpc3RcdTAwM2UgYXJlIHNpbmdsZSBhcmd1bWVudHMgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCxcbiBcdFx0d2hpY2ggb2ZmZXJzIGEgd2F5IHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBzZWxlY3RpbmcgcnVsZXMuXG4gXG4gXG5AQCAtMjQ5LDYgJiM0MzsyNTIsNyBAQCBVc2FnZVxuIFx0XHRcdFx0Li9wYWdlX293bmVyX3NvcnQgXHUwMDNjaW5wdXRcdTAwM2UgXHUwMDNjb3V0cHV0XHUwMDNlIC0tcGlkPTFcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLXRnaWQ9MSwyLDNcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLW5hbWUgbmFtZTEsbmFtZTJcbiYjNDM7XHRcdFx0XHQuL3BhZ2Vfb3duZXJfc29ydCBcdTAwM2NpbnB1dFx1MDAzZSBcdTAwM2NvdXRwdXRcdTAwM2UgLS1tb2R1bGUgeGZzLGV4dDRcbiBcbiBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuID09PT09PT09PT09PT09PT09PT09PT09PT09XG5AQCAtMjY1LDYgJiM0MzsyNjksNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0ZnRcdFx0ZnJlZV90c1x0XHR0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgcmVsZWFzZWRcbiBcdGF0XHRcdGFsbG9jX3RzXHR0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgYWxsb2NhdGVkXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbiYjNDM7XHRtb2RcdFx0bW9kdWxlXHRcdGtlcm5lbCBtb2R1bGUgbmFtZVxuIFxuICAgRm9yIC0tY3VsbCBvcHRpb246XG4gXG5AQCAtMjc1LDYgJiM0MzsyODAsNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0Zlx0XHRmcmVlXHRcdHdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90XG4gXHRzdFx0XHRzdGFja3RyYWNlXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbiYjNDM7XHRtb2RcdFx0bW9kdWxlXHRcdGtlcm5lbCBtb2R1bGUgbmFtZVxuIFxuIEZpbHRlcmluZyBwYWdlX293bmVyIG91dHB1dFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmRpZmYgLS1naXQgYS90b29scy9tbS9wYWdlX293bmVyX3NvcnQuYyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jXG5pbmRleCAzNWQzZDI1NDk0MWM5Li4xNmFjNjIxYjc0ZjYyIDEwMDY0NFxuLS0tIGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jXG5AQCAtMjUsMTEgJiM0MzsyNSwxMyBAQFxuICNpbmNsdWRlIFx1MDAzY2dldG9wdC5oXHUwMDNlXG4gXG4gI2RlZmluZSBUQVNLX0NPTU1fTEVOIDE2XG4mIzQzOyNkZWZpbmUgTU9EVUxFX05BTUVfTEVOIDY0XG4gXG4gc3RydWN0IGJsb2NrX2xpc3Qge1xuIFx0Y2hhciAqdHh0O1xuIFx0Y2hhciAqY29tbTsgLy8gdGFzayBjb21tYW5kIG5hbWVcbiBcdGNoYXIgKnN0YWNrdHJhY2U7XG4mIzQzO1x0Y2hhciAqbW9kdWxlOyAvLyBrZXJuZWwgbW9kdWxlIG5hbWVcbiBcdF9fdTY0IHRzX25zZWM7XG4gXHRpbnQgbGVuO1xuIFx0aW50IG51bTtcbkBAIC00MSw3ICYjNDM7NDMsOCBAQCBzdHJ1Y3QgYmxvY2tfbGlzdCB7XG4gZW51bSBGSUxURVJfQklUIHtcbiBcdEZJTFRFUl9QSUQgPSAxXHUwMDNjXHUwMDNjMSxcbiBcdEZJTFRFUl9UR0lEID0gMVx1MDAzY1x1MDAzYzIsXG4tXHRGSUxURVJfQ09NTSA9IDFcdTAwM2NcdTAwM2MzXG4mIzQzO1x0RklMVEVSX0NPTU0gPSAxXHUwMDNjXHUwMDNjMyxcbiYjNDM7XHRGSUxURVJfTU9EVUxFID0gMVx1MDAzY1x1MDAzYzRcbiB9O1xuIFxuIGVudW0gRklMVEVSX1JFU1VMVCB7XG5AQCAtNTUsNyAmIzQzOzU4LDggQEAgZW51bSBDVUxMX0JJVCB7XG4gXHRDVUxMX1RHSUQgPSAxXHUwMDNjXHUwMDNjMixcbiBcdENVTExfQ09NTSA9IDFcdTAwM2NcdTAwM2MzLFxuIFx0Q1VMTF9TVEFDS1RSQUNFID0gMVx1MDAzY1x1MDAzYzQsXG4tXHRDVUxMX0FMTE9DQVRPUiA9IDFcdTAwM2NcdTAwM2M1XG4mIzQzO1x0Q1VMTF9BTExPQ0FUT1IgPSAxXHUwMDNjXHUwMDNjNSxcbiYjNDM7XHRDVUxMX01PRFVMRSA9IDFcdTAwM2NcdTAwM2M2XG4gfTtcbiBlbnVtIEFMTE9DQVRPUl9CSVQge1xuIFx0QUxMT0NBVE9SX0NNQSA9IDFcdTAwM2NcdTAwM2MxLFxuQEAgLTY1LDcgJiM0Mzs2OSw4IEBAIGVudW0gQUxMT0NBVE9SX0JJVCB7XG4gfTtcbiBlbnVtIEFSR19UWVBFIHtcbiBcdEFSR19UWFQsIEFSR19DT01NLCBBUkdfU1RBQ0tUUkFDRSwgQVJHX0FMTE9DX1RTLCBBUkdfQ1VMTF9USU1FLFxuLVx0QVJHX1BBR0VfTlVNLCBBUkdfUElELCBBUkdfVEdJRCwgQVJHX1VOS05PV04sIEFSR19BTExPQ0FUT1JcbiYjNDM7XHRBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUixcbiYjNDM7XHRBUkdfTU9EVUxFXG4gfTtcbiBlbnVtIFNPUlRfT1JERVIge1xuIFx0U09SVF9BU0MgPSAxLFxuQEAgLTc5LDE1ICYjNDM7ODQsMTggQEAgZW51bSBDT01QX0ZMQUcge1xuIFx0Q09NUF9TVEFDSyA9IDFcdTAwM2NcdTAwM2MzLFxuIFx0Q09NUF9OVU0gPSAxXHUwMDNjXHUwMDNjNCxcbiBcdENPTVBfVEdJRCA9IDFcdTAwM2NcdTAwM2M1LFxuLVx0Q09NUF9DT01NID0gMVx1MDAzY1x1MDAzYzZcbiYjNDM7XHRDT01QX0NPTU0gPSAxXHUwMDNjXHUwMDNjNixcbiYjNDM7XHRDT01QX01PRFVMRSA9IDFcdTAwM2NcdTAwM2M3XG4gfTtcbiBzdHJ1Y3QgZmlsdGVyX2NvbmRpdGlvbiB7XG4gXHRwaWRfdCAqcGlkcztcbiBcdHBpZF90ICp0Z2lkcztcbiBcdGNoYXIgKipjb21tcztcbiYjNDM7XHRjaGFyICoqbW9kdWxlcztcbiBcdGludCBwaWRzX3NpemU7XG4gXHRpbnQgdGdpZHNfc2l6ZTtcbiBcdGludCBjb21tc19zaXplO1xuJiM0MztcdGludCBtb2R1bGVzX3NpemU7XG4gfTtcbiBzdHJ1Y3Qgc29ydF9jb25kaXRpb24ge1xuIFx0aW50ICgqKmNtcHMpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTtcbkBAIC0xMDEsNiAmIzQzOzEwOSw3IEBAIHN0YXRpYyByZWdleF90IHBpZF9wYXR0ZXJuO1xuIHN0YXRpYyByZWdleF90IHRnaWRfcGF0dGVybjtcbiBzdGF0aWMgcmVnZXhfdCBjb21tX3BhdHRlcm47XG4gc3RhdGljIHJlZ2V4X3QgdHNfbnNlY19wYXR0ZXJuO1xuJiM0MztzdGF0aWMgcmVnZXhfdCBtb2R1bGVfcGF0dGVybjtcbiBzdGF0aWMgc3RydWN0IGJsb2NrX2xpc3QgKmxpc3Q7XG4gc3RhdGljIGludCBsaXN0X3NpemU7XG4gc3RhdGljIGludCBtYXhfc2l6ZTtcbkBAIC0xODQsNiAmIzQzOzE5MywxMyBAQCBzdGF0aWMgaW50IGNvbXBhcmVfY29tbShjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpXG4gXHRyZXR1cm4gc3RyY21wKGwxLVx1MDAzZWNvbW0sIGwyLVx1MDAzZWNvbW0pO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBjb21wYXJlX21vZHVsZShjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYmxvY2tfbGlzdCAqbDEgPSBwMSwgKmwyID0gcDI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzdHJjbXAobDEtXHUwMDNlbW9kdWxlLCBsMi1cdTAwM2Vtb2R1bGUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgY29tcGFyZV90cyhjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJsb2NrX2xpc3QgKmwxID0gcDEsICpsMiA9IHAyO1xuQEAgLTIwNyw2ICYjNDM7MjIzLDggQEAgc3RhdGljIGludCBjb21wYXJlX2N1bGxfY29uZGl0aW9uKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiBcdFx0cmV0dXJuIGNvbXBhcmVfdGdpZChwMSwgcDIpO1xuIFx0aWYgKChjdWxsIFx1MDAyNiBDVUxMX0NPTU0pIFx1MDAyNlx1MDAyNiBjb21wYXJlX2NvbW0ocDEsIHAyKSlcbiBcdFx0cmV0dXJuIGNvbXBhcmVfY29tbShwMSwgcDIpO1xuJiM0MztcdGlmICgoY3VsbCBcdTAwMjYgQ1VMTF9NT0RVTEUpIFx1MDAyNlx1MDAyNiBjb21wYXJlX21vZHVsZShwMSwgcDIpKVxuJiM0MztcdFx0cmV0dXJuIGNvbXBhcmVfbW9kdWxlKHAxLCBwMik7XG4gXHRpZiAoKGN1bGwgXHUwMDI2IENVTExfQUxMT0NBVE9SKSBcdTAwMjZcdTAwMjYgY29tcGFyZV9hbGxvY2F0b3IocDEsIHAyKSlcbiBcdFx0cmV0dXJuIGNvbXBhcmVfYWxsb2NhdG9yKHAxLCBwMik7XG4gXHRyZXR1cm4gMDtcbkBAIC00MTEsOSAmIzQzOzQyOSwzMyBAQCBzdGF0aWMgY2hhciAqZ2V0X2NvbW0oY2hhciAqYnVmKVxuIFx0cmV0dXJuIGNvbW1fc3RyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNoYXIgKmdldF9tb2R1bGUoY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciAqbW9kdWxlX3N0ciA9IG1hbGxvYyhNT0RVTEVfTkFNRV9MRU4pO1xuJiM0MztcdHJlZ21hdGNoX3QgcG1hdGNoWzJdO1xuJiM0MztcdGludCB2YWxfbGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1vZHVsZV9zdHIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRtZW1zZXQobW9kdWxlX3N0ciwgMCwgTU9EVUxFX05BTUVfTEVOKTtcbiYjNDM7XHRpZiAocmVnZXhlYyhcdTAwMjZtb2R1bGVfcGF0dGVybiwgYnVmLCAyLCBwbWF0Y2gsIFJFR19OT1RCT0wpICE9IDAgfHwgcG1hdGNoWzFdLnJtX3NvID09IC0xKSB7XG4mIzQzO1x0XHRzdHJjcHkobW9kdWxlX3N0ciwgXCYjMzQ7dm1saW51eFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gbW9kdWxlX3N0cjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHZhbF9sZW4gPSBwbWF0Y2hbMV0ucm1fZW8gLSBwbWF0Y2hbMV0ucm1fc287XG4mIzQzO1x0aWYgKChzaXplX3QpdmFsX2xlbiBcdTAwM2U9IE1PRFVMRV9OQU1FX0xFTilcbiYjNDM7XHRcdHZhbF9sZW4gPSBNT0RVTEVfTkFNRV9MRU4gLSAxO1xuJiM0MztcdG1lbWNweShtb2R1bGVfc3RyLCBidWYgJiM0MzsgcG1hdGNoWzFdLnJtX3NvLCB2YWxfbGVuKTtcbiYjNDM7XHRtb2R1bGVfc3RyW3ZhbF9sZW5dID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1vZHVsZV9zdHI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZnJlZV9ibG9ja19saXN0KHN0cnVjdCBibG9ja19saXN0ICpibG9jaylcbiB7XG4gXHRmcmVlKGJsb2NrLVx1MDAzZWNvbW0pO1xuJiM0MztcdGZyZWUoYmxvY2stXHUwMDNlbW9kdWxlKTtcbiBcdGZyZWUoYmxvY2stXHUwMDNldHh0KTtcbiB9XG4gXG5AQCAtNDMzLDYgJiM0Mzs0NzUsOCBAQCBzdGF0aWMgaW50IGdldF9hcmdfdHlwZShjb25zdCBjaGFyICphcmcpXG4gXHRcdHJldHVybiBBUkdfQUxMT0NfVFM7XG4gXHRlbHNlIGlmICghc3RyY21wKGFyZywgXCYjMzQ7YWxsb2NhdG9yXCYjMzQ7KSB8fCAhc3RyY21wKGFyZywgXCYjMzQ7YXRvclwmIzM0OykpXG4gXHRcdHJldHVybiBBUkdfQUxMT0NBVE9SO1xuJiM0MztcdGVsc2UgaWYgKCFzdHJjbXAoYXJnLCBcJiMzNDttb2R1bGVcJiMzNDspIHx8ICFzdHJjbXAoYXJnLCBcJiMzNDttb2RcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIEFSR19NT0RVTEU7XG4gXHRlbHNlIHtcbiBcdFx0cmV0dXJuIEFSR19VTktOT1dOO1xuIFx0fVxuQEAgLTQ4MywyNSAmIzQzOzUyNywzNiBAQCBzdGF0aWMgYm9vbCBtYXRjaF9zdHJfbGlzdChjb25zdCBjaGFyICpzdHIsIGNoYXIgKipsaXN0LCBpbnQgbGlzdF9zaXplKVxuIFxuIHN0YXRpYyBlbnVtIEZJTFRFUl9SRVNVTFQgZmlsdGVyX3JlY29yZChjaGFyICpidWYpXG4ge1xuLVx0Y2hhciAqY29tbTtcbiYjNDM7XHRjaGFyICpjb21tLCAqbW9kdWxlO1xuIFxuIFx0aWYgKChmaWx0ZXIgXHUwMDI2IEZJTFRFUl9QSUQpIFx1MDAyNlx1MDAyNiAhbWF0Y2hfbnVtX2xpc3QoZ2V0X3BpZChidWYpLCBmYy5waWRzLCBmYy5waWRzX3NpemUpKVxuIFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4gXHRpZiAoKGZpbHRlciBcdTAwMjYgRklMVEVSX1RHSUQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhbWF0Y2hfbnVtX2xpc3QoZ2V0X3RnaWQoYnVmKSwgZmMudGdpZHMsIGZjLnRnaWRzX3NpemUpKVxuIFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4tXHRpZiAoIShmaWx0ZXIgXHUwMDI2IEZJTFRFUl9DT01NKSlcbiYjNDM7XHRpZiAoIShmaWx0ZXIgXHUwMDI2IChGSUxURVJfQ09NTSB8IEZJTFRFUl9NT0RVTEUpKSlcbiBcdFx0cmV0dXJuIEZJTFRFUl9NQVRDSDtcbiBcbi1cdGNvbW0gPSBnZXRfY29tbShidWYpO1xuLVx0aWYgKCFjb21tKVxuLVx0XHRyZXR1cm4gRklMVEVSX0VSUk9SO1xuLVxuLVx0aWYgKCFtYXRjaF9zdHJfbGlzdChjb21tLCBmYy5jb21tcywgZmMuY29tbXNfc2l6ZSkpIHtcbiYjNDM7XHRpZiAoZmlsdGVyIFx1MDAyNiBGSUxURVJfQ09NTSkge1xuJiM0MztcdFx0Y29tbSA9IGdldF9jb21tKGJ1Zik7XG4mIzQzO1x0XHRpZiAoIWNvbW0pXG4mIzQzO1x0XHRcdHJldHVybiBGSUxURVJfRVJST1I7XG4mIzQzO1x0XHRpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkge1xuJiM0MztcdFx0XHRmcmVlKGNvbW0pO1xuJiM0MztcdFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4mIzQzO1x0XHR9XG4gXHRcdGZyZWUoY29tbSk7XG4tXHRcdHJldHVybiBGSUxURVJfU0tJUDtcbiBcdH1cbi1cdGZyZWUoY29tbSk7XG4mIzQzO1x0aWYgKGZpbHRlciBcdTAwMjYgRklMVEVSX01PRFVMRSkge1xuJiM0MztcdFx0bW9kdWxlID0gZ2V0X21vZHVsZShidWYpO1xuJiM0MztcdFx0aWYgKCFtb2R1bGUpXG4mIzQzO1x0XHRcdHJldHVybiBGSUxURVJfRVJST1I7XG4mIzQzO1x0XHRpZiAoIW1hdGNoX3N0cl9saXN0KG1vZHVsZSwgZmMubW9kdWxlcywgZmMubW9kdWxlc19zaXplKSkge1xuJiM0MztcdFx0XHRmcmVlKG1vZHVsZSk7XG4mIzQzO1x0XHRcdHJldHVybiBGSUxURVJfU0tJUDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGZyZWUobW9kdWxlKTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gRklMVEVSX01BVENIO1xuIH1cbiBcbkBAIC01NDcsNiAmIzQzOzYwMiwxMiBAQCBzdGF0aWMgYm9vbCBhZGRfbGlzdChjaGFyICpidWYsIGludCBsZW4sIGNoYXIgKmV4dF9idWYpXG4gXHRcdGxpc3RbbGlzdF9zaXplXS5zdGFja3RyYWNlJiM0MzsmIzQzOztcbiBcdGxpc3RbbGlzdF9zaXplXS50c19uc2VjID0gZ2V0X3RzX25zZWMoYnVmKTtcbiBcdGxpc3RbbGlzdF9zaXplXS5hbGxvY2F0b3IgPSBnZXRfYWxsb2NhdG9yKGJ1ZiwgZXh0X2J1Zik7XG4mIzQzO1x0bGlzdFtsaXN0X3NpemVdLm1vZHVsZSA9IGdldF9tb2R1bGUoYnVmKTtcbiYjNDM7XHRpZiAoIWxpc3RbbGlzdF9zaXplXS5tb2R1bGUpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtPdXQgb2YgbWVtb3J5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGZyZWVfYmxvY2tfbGlzdChcdTAwMjZsaXN0W2xpc3Rfc2l6ZV0pO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiBcdGxpc3Rfc2l6ZSYjNDM7JiM0Mzs7XG4gXHRpZiAobGlzdF9zaXplICUgMTAwMCA9PSAwKSB7XG4gXHRcdHByaW50ZihcJiMzNDtsb2FkZWQgJWRcXHJcJiMzNDssIGxpc3Rfc2l6ZSk7XG5AQCAtNTczLDYgJiM0Mzs2MzQsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9jdWxsX2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cilcbiBcdFx0XHRjdWxsIHw9IENVTExfU1RBQ0tUUkFDRTtcbiBcdFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX0FMTE9DQVRPUilcbiBcdFx0XHRjdWxsIHw9IENVTExfQUxMT0NBVE9SO1xuJiM0MztcdFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSlcbiYjNDM7XHRcdFx0Y3VsbCB8PSBDVUxMX01PRFVMRTtcbiBcdFx0ZWxzZSB7XG4gXHRcdFx0ZnJlZV9leHBsb2RlKGFyZ3MsIHNpemUpO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbkBAIC02MzUsNiAmIzQzOzY5OCw4IEBAIHN0YXRpYyBib29sIHBhcnNlX3NvcnRfYXJncyhjb25zdCBjaGFyICphcmdfc3RyKVxuIFx0XHRcdHNjLmNtcHNbaV0gPSBjb21wYXJlX3R4dDtcbiBcdFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX0FMTE9DQVRPUilcbiBcdFx0XHRzYy5jbXBzW2ldID0gY29tcGFyZV9hbGxvY2F0b3I7XG4mIzQzO1x0XHRlbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfTU9EVUxFKVxuJiM0MztcdFx0XHRzYy5jbXBzW2ldID0gY29tcGFyZV9tb2R1bGU7XG4gXHRcdGVsc2Uge1xuIFx0XHRcdGZyZWVfZXhwbG9kZShhcmdzLCBzaXplKTtcbiBcdFx0XHRzYy5zaXplID0gMDtcbkBAIC02OTEsNyAmIzQzOzc1Niw4IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4gXHRcdFwmIzM0Oy1wXFx0XFx0XFx0U29ydCBieSBwaWQuXFxuXCYjMzQ7XG4gXHRcdFwmIzM0Oy1QXFx0XFx0XFx0U29ydCBieSB0Z2lkLlxcblwmIzM0O1xuIFx0XHRcJiMzNDstc1xcdFxcdFxcdFNvcnQgYnkgdGhlIHN0YWNrdHJhY2UuXFxuXCYjMzQ7XG4tXHRcdFwmIzM0Oy10XFx0XFx0XFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxcblxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7LXRcXHRcXHRcXHRTb3J0IGJ5IG51bWJlciBvZiB0aW1lcyByZWNvcmQgaXMgc2VlbiAoZGVmYXVsdCkuXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDstTVxcdFxcdFxcdFNvcnQgYnkgbW9kdWxlIG5hbWUuXFxuXFxuXCYjMzQ7XG4gXHRcdFwmIzM0Oy0tcGlkIFx1MDAzY3BpZGxpc3RcdTAwM2VcXHRcXHRTZWxlY3QgYnkgcGlkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uXCYjMzQ7XG4gXHRcdFwmIzM0OyBvZlxcblxcdFxcdFxcdGJsb2NrcyB3aG9zZSBwcm9jZXNzIElEIG51bWJlcnMgYXBwZWFyIGluIFx1MDAzY3BpZGxpc3RcdTAwM2UuXFxuXCYjMzQ7XG4gXHRcdFwmIzM0Oy0tdGdpZCBcdTAwM2N0Z2lkbGlzdFx1MDAzZVxcdFNlbGVjdCBieSB0Z2lkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uXCYjMzQ7XG5AQCAtNzAwLDExICYjNDM7NzY2LDIxIEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXG4gXHRcdFwmIzM0Oy0tbmFtZSBcdTAwM2NjbWRsaXN0XHUwMDNlXFx0U2VsZWN0IGJ5IGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZVwmIzM0O1xuIFx0XHRcJiMzNDsgaW5mb3JtYXRpb25cXG5cXHRcXHRcXHRvZiBibG9ja3Mgd2hvc2UgY29tbWFuZCBuYW1lIGFwcGVhcnMgaW5cJiMzNDtcbiBcdFx0XCYjMzQ7IFx1MDAzY2NtZGxpc3RcdTAwM2UuXFxuXCYjMzQ7XG4tXHRcdFwmIzM0Oy0tY3VsbCBcdTAwM2NydWxlc1x1MDAzZVxcdFxcdEN1bGwgYnkgdXNlci1kZWZpbmVkIHJ1bGVzLiBcdTAwM2NydWxlc1x1MDAzZSBpcyBhIFwmIzM0O1xuLVx0XHRcJiMzNDtzaW5nbGVcXG5cXHRcXHRcXHRhcmd1bWVudCBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IFwmIzM0O1xuLVx0XHRcJiMzNDt3aXRoIHNvbWVcXG5cXHRcXHRcXHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgXCYjMzQ7XG4tXHRcdFwmIzM0O3N0YWNrdHJhY2UsIGFsbG9jYXRvcilcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0Oy0tbW9kdWxlIFx1MDAzY21vZGxpc3RcdTAwM2VcXHRTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdFxcdFxcdG9mIGJsb2NrcyB3aG9zZSBtb2R1bGUgbmFtZSBhcHBlYXJzIGluIFx1MDAzY21vZGxpc3RcdTAwM2UuXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDstLWN1bGwgXHUwMDNjcnVsZXNcdTAwM2VcXHRcXHRDdWxsIGJ5IHVzZXItZGVmaW5lZCBydWxlcy4gXHUwMDNjcnVsZXNcdTAwM2UgaXMgYSBzaW5nbGVcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdFxcdFxcdGFyZ3VtZW50IGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgd2l0aCBzb21lXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgc3RhY2t0cmFjZSwgYWxsb2NhdG9yLCBtb2R1bGUpXFxuXCYjMzQ7XG4gXHRcdFwmIzM0Oy0tc29ydCBcdTAwM2NvcmRlclx1MDAzZVxcdFxcdFNwZWNpZnkgc29ydCBvcmRlciBhczogWyYjNDM7fC1da2V5WyxbJiM0Mzt8LV1rZXlbLC4uLl1dXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRBdmFpbGFibGUga2V5czpcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdFxcdFxcdCAgcGlkKHApLCB0Z2lkKHRnKSwgbmFtZShuKSwgc3RhY2t0cmFjZShzdCksXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHQgIHR4dChUKSwgYWxsb2NfdHMoYXQpLCBhbGxvY2F0b3IoYXRvciksIG1vZHVsZShtb2QpXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRUaGUgXFxcJiMzNDsmIzQzO1xcXCYjMzQ7IGlzIG9wdGlvbmFsIHNpbmNlIGRlZmF1bHQgZGlyZWN0aW9uIGlzXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRpbmNyZWFzaW5nIG51bWVyaWNhbCBvciBsZXhpY29ncmFwaGljIG9yZGVyLlxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0TWl4ZWQgdXNlIG9mIGFiYnJldmlhdGVkIGFuZCBjb21wbGV0ZS1mb3JtIGlzIGFsbG93ZWQuXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRFeGFtcGxlczpcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdFxcdFxcdCAgLS1zb3J0PW4sJiM0MztwaWQsLXRnaWRcXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdFxcdFxcdCAgLS1zb3J0PW1vZCxhdFxcblwmIzM0O1xuIFx0KTtcbiB9XG4gXG5AQCAtNzIxLDEzICYjNDM7Nzk3LDE0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0eyBcJiMzNDtuYW1lXCYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMyB9LFxuIFx0XHR7IFwmIzM0O2N1bGxcJiMzNDssIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0IH0sXG4gXHRcdHsgXCYjMzQ7c29ydFwmIzM0OywgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDUgfSxcbiYjNDM7XHRcdHsgXCYjMzQ7bW9kdWxlXCYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNiB9LFxuIFx0XHR7IFwmIzM0O2hlbHBcJiMzNDssIG5vX2FyZ3VtZW50LCBOVUxMLCAmIzM5O2gmIzM5OyB9LFxuIFx0XHR7IDAsIDAsIDAsIDB9LFxuIFx0fTtcbiBcbiBcdGNvbXBhcmVfZmxhZyA9IENPTVBfTk9fRkxBRztcbiBcbi1cdHdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgXCYjMzQ7YWRtbnBzdFBoXCYjMzQ7LCBsb25nb3B0cywgTlVMTCkpICE9IC0xKVxuJiM0MztcdHdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgXCYjMzQ7YWRtbnBzdFBNaFwmIzM0OywgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSlcbiBcdFx0c3dpdGNoIChvcHQpIHtcbiBcdFx0Y2FzZSAmIzM5O2EmIzM5OzpcbiBcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9BTExPQztcbkBAIC03NTMsNiAmIzQzOzgzMCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0Y2FzZSAmIzM5O24mIzM5OzpcbiBcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9DT01NO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSAmIzM5O00mIzM5OzpcbiYjNDM7XHRcdFx0Y29tcGFyZV9mbGFnIHw9IENPTVBfTU9EVUxFO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSAmIzM5O2gmIzM5OzpcbiBcdFx0XHR1c2FnZSgpO1xuIFx0XHRcdGV4aXQoMCk7XG5AQCAtNzkyLDYgJiM0Mzs4NzIsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdFx0ZXhpdCgxKTtcbiBcdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIDY6XG4mIzQzO1x0XHRcdGZpbHRlciA9IGZpbHRlciB8IEZJTFRFUl9NT0RVTEU7XG4mIzQzO1x0XHRcdGZjLm1vZHVsZXMgPSBleHBsb2RlKCYjMzk7LCYjMzk7LCBvcHRhcmcsIFx1MDAyNmZjLm1vZHVsZXNfc2l6ZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdHVzYWdlKCk7XG4gXHRcdFx0ZXhpdCgxKTtcbkBAIC04MjEsNiAmIzQzOzkwNSw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9zdGFja3RyYWNlLCBTT1JUX0FTQyk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBDT01QX05PX0ZMQUc6XG4mIzQzO1x0XHRpZiAoc2Muc2l6ZSBcdTAwM2UgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHQvKiBmYWxsdGhyb3VnaCAqL1xuIFx0Y2FzZSBDT01QX05VTTpcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9udW0sIFNPUlRfREVTQyk7XG4gXHRcdGJyZWFrO1xuQEAgLTgzMCw2ICYjNDM7OTE3LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0Y2FzZSBDT01QX0NPTU06XG4gXHRcdHNldF9zaW5nbGVfY21wKGNvbXBhcmVfY29tbSwgU09SVF9BU0MpO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIENPTVBfTU9EVUxFOlxuJiM0MztcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9tb2R1bGUsIFNPUlRfQVNDKTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0dXNhZ2UoKTtcbiBcdFx0ZXhpdCgxKTtcbkBAIC04NTMsNiAmIzQzOzk0Myw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0Z290byBvdXRfY29tbTtcbiBcdGlmICghY2hlY2tfcmVnY29tcChcdTAwMjZ0c19uc2VjX3BhdHRlcm4sIFwmIzM0O3RzXFxcXHMqKFswLTldKilcXFxccypuc1wmIzM0OykpXG4gXHRcdGdvdG8gb3V0X3RzO1xuJiM0MztcdGlmICghY2hlY2tfcmVnY29tcChcdTAwMjZtb2R1bGVfcGF0dGVybiwgXCYjMzQ7XFxcXCYjNDM7MHhbMC05YS1mXSYjNDM7LzB4WzAtOWEtZl0mIzQzO1xcXFxzKlxcXFxbKFthLXpBLVowLTlfLV0mIzQzOylcXFxcXVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9tb2R1bGU7XG4gXG4gXHRmc3RhdChmaWxlbm8oZmluKSwgXHUwMDI2c3QpO1xuIFx0bWF4X3NpemUgPSBzdC5zdF9zaXplIC8gMTAwOyAvKiBoYWNrIC4uLiAqL1xuQEAgLTkxMSw2ICYjNDM7MTAwMyw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCYjMzQ7LCBUR0lEICVkXCYjMzQ7LCBsaXN0W2ldLnRnaWQpO1xuIFx0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX0NPTU0gfHwgZmlsdGVyIFx1MDAyNiBGSUxURVJfQ09NTSlcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCYjMzQ7LCB0YXNrX2NvbW1fbmFtZTogJXNcJiMzNDssIGxpc3RbaV0uY29tbSk7XG4mIzQzO1x0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX01PRFVMRSB8fCBmaWx0ZXIgXHUwMDI2IEZJTFRFUl9NT0RVTEUpXG4mIzQzO1x0XHRcdFx0ZnByaW50Zihmb3V0LCBcJiMzNDssIG1vZHVsZTogJXNcJiMzNDssIGxpc3RbaV0ubW9kdWxlKTtcbiBcdFx0XHRpZiAoY3VsbCBcdTAwMjYgQ1VMTF9BTExPQ0FUT1IpIHtcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCYjMzQ7LCBcJiMzNDspO1xuIFx0XHRcdFx0cHJpbnRfYWxsb2NhdG9yKGZvdXQsIGxpc3RbaV0uYWxsb2NhdG9yKTtcbkBAIC05MzEsNiAmIzQzOzEwMjUsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0ZnJlZV9ibG9ja19saXN0KFx1MDAyNmxpc3RbaV0pO1xuIFx0XHRmcmVlKGxpc3QpO1xuIFx0fVxuJiM0MztvdXRfbW9kdWxlOlxuJiM0MztcdHJlZ2ZyZWUoXHUwMDI2bW9kdWxlX3BhdHRlcm4pO1xuIG91dF90czpcbiBcdHJlZ2ZyZWUoXHUwMDI2dHNfbnNlY19wYXR0ZXJuKTtcbiBvdXRfY29tbTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBlZjBjYTM3Mjg4ZmQ3ZWI1ZTY2YjhkZDk5MDE4ZmZlOWY3ZDRmZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwMzowNzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0CmluZGV4IGE2YmQzZmU2NDIzYWQuLmJkMDI3Mzc3ZGZmNmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdApAQCAtMTk5LDYgJiM0MzsxOTksNyBAQCBVc2FnZQogCQktcAkJU29ydCBieSBwaWQuCiAJCS1QCQlTb3J0IGJ5IHRnaWQuCiAJCS1uCQlTb3J0IGJ5IHRhc2sgY29tbWFuZCBuYW1lLgomIzQzOwkJLU0JCVNvcnQgYnkgbW9kdWxlIG5hbWUuCiAJCS1yCQlTb3J0IGJ5IG1lbW9yeSByZWxlYXNlIHRpbWUuCiAJCS1zCQlTb3J0IGJ5IHN0YWNrIHRyYWNlLgogCQktdAkJU29ydCBieSB0aW1lcyAoZGVmYXVsdCkuCkBAIC0yNDAsOCAmIzQzOzI0MSwxMCBAQCBVc2FnZQogCQkJCQlncm91cCBJRCBudW1iZXJzIGFwcGVhciBpbiAmbHQ7dGdpZGxpc3QmZ3Q7LgogCQktLW5hbWUgJmx0O2NtZGxpc3QmZ3Q7CVNlbGVjdCBieSB0YXNrIGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2UKIAkJCQkJdGFzayBjb21tYW5kIG5hbWUgYXBwZWFyIGluICZsdDtjbWRsaXN0Jmd0Oy4KJiM0MzsJCS0tbW9kdWxlICZsdDttb2RsaXN0Jmd0OwlTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgYmxvY2tzIHdob3NlCiYjNDM7CQkJCQltb2R1bGUgbmFtZSBhcHBlYXIgaW4gJmx0O21vZGxpc3QmZ3Q7LgogCi0JCSZsdDtwaWRsaXN0Jmd0OywgJmx0O3RnaWRsaXN0Jmd0OywgJmx0O2NtZGxpc3QmZ3Q7IGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsCiYjNDM7CQkmbHQ7cGlkbGlzdCZndDssICZsdDt0Z2lkbGlzdCZndDssICZsdDtjbWRsaXN0Jmd0OywgJmx0O21vZGxpc3QmZ3Q7IGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsCiAJCXdoaWNoIG9mZmVycyBhIHdheSB0byBzcGVjaWZ5IGluZGl2aWR1YWwgc2VsZWN0aW5nIHJ1bGVzLgogCiAKQEAgLTI0OSw2ICYjNDM7MjUyLDcgQEAgVXNhZ2UKIAkJCQkuL3BhZ2Vfb3duZXJfc29ydCAmbHQ7aW5wdXQmZ3Q7ICZsdDtvdXRwdXQmZ3Q7IC0tcGlkPTEKIAkJCQkuL3BhZ2Vfb3duZXJfc29ydCAmbHQ7aW5wdXQmZ3Q7ICZsdDtvdXRwdXQmZ3Q7IC0tdGdpZD0xLDIsMwogCQkJCS4vcGFnZV9vd25lcl9zb3J0ICZsdDtpbnB1dCZndDsgJmx0O291dHB1dCZndDsgLS1uYW1lIG5hbWUxLG5hbWUyCiYjNDM7CQkJCS4vcGFnZV9vd25lcl9zb3J0ICZsdDtpbnB1dCZndDsgJmx0O291dHB1dCZndDsgLS1tb2R1bGUgeGZzLGV4dDQKIAogU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlMKID09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yNjUsNiAmIzQzOzI2OSw3IEBAIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTCiAJZnQJCWZyZWVfdHMJCXRpbWVzdGFtcCBvZiB0aGUgcGFnZSB3aGVuIGl0IHdhcyByZWxlYXNlZAogCWF0CQlhbGxvY190cwl0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgYWxsb2NhdGVkCiAJYXRvcgkJYWxsb2NhdG9yCW1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzCiYjNDM7CW1vZAkJbW9kdWxlCQlrZXJuZWwgbW9kdWxlIG5hbWUKIAogICBGb3IgLS1jdWxsIG9wdGlvbjoKIApAQCAtMjc1LDYgJiM0MzsyODAsNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSUwogCWYJCWZyZWUJCXdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90CiAJc3QJCXN0YWNrdHJhY2UJc3RhY2sgdHJhY2Ugb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbgogCWF0b3IJCWFsbG9jYXRvcgltZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlcwomIzQzOwltb2QJCW1vZHVsZQkJa2VybmVsIG1vZHVsZSBuYW1lCiAKIEZpbHRlcmluZyBwYWdlX293bmVyIG91dHB1dAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuYwppbmRleCAzNWQzZDI1NDk0MWM5Li4xNmFjNjIxYjc0ZjYyIDEwMDY0NAotLS0gYS90b29scy9tbS9wYWdlX293bmVyX3NvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuYwpAQCAtMjUsMTEgJiM0MzsyNSwxMyBAQAogI2luY2x1ZGUgJmx0O2dldG9wdC5oJmd0OwogCiAjZGVmaW5lIFRBU0tfQ09NTV9MRU4gMTYKJiM0MzsjZGVmaW5lIE1PRFVMRV9OQU1FX0xFTiA2NAogCiBzdHJ1Y3QgYmxvY2tfbGlzdCB7CiAJY2hhciAqdHh0OwogCWNoYXIgKmNvbW07IC8vIHRhc2sgY29tbWFuZCBuYW1lCiAJY2hhciAqc3RhY2t0cmFjZTsKJiM0MzsJY2hhciAqbW9kdWxlOyAvLyBrZXJuZWwgbW9kdWxlIG5hbWUKIAlfX3U2NCB0c19uc2VjOwogCWludCBsZW47CiAJaW50IG51bTsKQEAgLTQxLDcgJiM0Mzs0Myw4IEBAIHN0cnVjdCBibG9ja19saXN0IHsKIGVudW0gRklMVEVSX0JJVCB7CiAJRklMVEVSX1BJRCA9IDEmbHQ7Jmx0OzEsCiAJRklMVEVSX1RHSUQgPSAxJmx0OyZsdDsyLAotCUZJTFRFUl9DT01NID0gMSZsdDsmbHQ7MwomIzQzOwlGSUxURVJfQ09NTSA9IDEmbHQ7Jmx0OzMsCiYjNDM7CUZJTFRFUl9NT0RVTEUgPSAxJmx0OyZsdDs0CiB9OwogCiBlbnVtIEZJTFRFUl9SRVNVTFQgewpAQCAtNTUsNyAmIzQzOzU4LDggQEAgZW51bSBDVUxMX0JJVCB7CiAJQ1VMTF9UR0lEID0gMSZsdDsmbHQ7MiwKIAlDVUxMX0NPTU0gPSAxJmx0OyZsdDszLAogCUNVTExfU1RBQ0tUUkFDRSA9IDEmbHQ7Jmx0OzQsCi0JQ1VMTF9BTExPQ0FUT1IgPSAxJmx0OyZsdDs1CiYjNDM7CUNVTExfQUxMT0NBVE9SID0gMSZsdDsmbHQ7NSwKJiM0MzsJQ1VMTF9NT0RVTEUgPSAxJmx0OyZsdDs2CiB9OwogZW51bSBBTExPQ0FUT1JfQklUIHsKIAlBTExPQ0FUT1JfQ01BID0gMSZsdDsmbHQ7MSwKQEAgLTY1LDcgJiM0Mzs2OSw4IEBAIGVudW0gQUxMT0NBVE9SX0JJVCB7CiB9OwogZW51bSBBUkdfVFlQRSB7CiAJQVJHX1RYVCwgQVJHX0NPTU0sIEFSR19TVEFDS1RSQUNFLCBBUkdfQUxMT0NfVFMsIEFSR19DVUxMX1RJTUUsCi0JQVJHX1BBR0VfTlVNLCBBUkdfUElELCBBUkdfVEdJRCwgQVJHX1VOS05PV04sIEFSR19BTExPQ0FUT1IKJiM0MzsJQVJHX1BBR0VfTlVNLCBBUkdfUElELCBBUkdfVEdJRCwgQVJHX1VOS05PV04sIEFSR19BTExPQ0FUT1IsCiYjNDM7CUFSR19NT0RVTEUKIH07CiBlbnVtIFNPUlRfT1JERVIgewogCVNPUlRfQVNDID0gMSwKQEAgLTc5LDE1ICYjNDM7ODQsMTggQEAgZW51bSBDT01QX0ZMQUcgewogCUNPTVBfU1RBQ0sgPSAxJmx0OyZsdDszLAogCUNPTVBfTlVNID0gMSZsdDsmbHQ7NCwKIAlDT01QX1RHSUQgPSAxJmx0OyZsdDs1LAotCUNPTVBfQ09NTSA9IDEmbHQ7Jmx0OzYKJiM0MzsJQ09NUF9DT01NID0gMSZsdDsmbHQ7NiwKJiM0MzsJQ09NUF9NT0RVTEUgPSAxJmx0OyZsdDs3CiB9Owogc3RydWN0IGZpbHRlcl9jb25kaXRpb24gewogCXBpZF90ICpwaWRzOwogCXBpZF90ICp0Z2lkczsKIAljaGFyICoqY29tbXM7CiYjNDM7CWNoYXIgKiptb2R1bGVzOwogCWludCBwaWRzX3NpemU7CiAJaW50IHRnaWRzX3NpemU7CiAJaW50IGNvbW1zX3NpemU7CiYjNDM7CWludCBtb2R1bGVzX3NpemU7CiB9Owogc3RydWN0IHNvcnRfY29uZGl0aW9uIHsKIAlpbnQgKCoqY21wcykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwpAQCAtMTAxLDYgJiM0MzsxMDksNyBAQCBzdGF0aWMgcmVnZXhfdCBwaWRfcGF0dGVybjsKIHN0YXRpYyByZWdleF90IHRnaWRfcGF0dGVybjsKIHN0YXRpYyByZWdleF90IGNvbW1fcGF0dGVybjsKIHN0YXRpYyByZWdleF90IHRzX25zZWNfcGF0dGVybjsKJiM0MztzdGF0aWMgcmVnZXhfdCBtb2R1bGVfcGF0dGVybjsKIHN0YXRpYyBzdHJ1Y3QgYmxvY2tfbGlzdCAqbGlzdDsKIHN0YXRpYyBpbnQgbGlzdF9zaXplOwogc3RhdGljIGludCBtYXhfc2l6ZTsKQEAgLTE4NCw2ICYjNDM7MTkzLDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jb21tKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKIAlyZXR1cm4gc3RyY21wKGwxLSZndDtjb21tLCBsMi0mZ3Q7Y29tbSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IGNvbXBhcmVfbW9kdWxlKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjsKJiM0MzsKJiM0MzsJcmV0dXJuIHN0cmNtcChsMS0mZ3Q7bW9kdWxlLCBsMi0mZ3Q7bW9kdWxlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGNvbXBhcmVfdHMoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQogewogCWNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjsKQEAgLTIwNyw2ICYjNDM7MjIzLDggQEAgc3RhdGljIGludCBjb21wYXJlX2N1bGxfY29uZGl0aW9uKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKIAkJcmV0dXJuIGNvbXBhcmVfdGdpZChwMSwgcDIpOwogCWlmICgoY3VsbCAmYW1wOyBDVUxMX0NPTU0pICZhbXA7JmFtcDsgY29tcGFyZV9jb21tKHAxLCBwMikpCiAJCXJldHVybiBjb21wYXJlX2NvbW0ocDEsIHAyKTsKJiM0MzsJaWYgKChjdWxsICZhbXA7IENVTExfTU9EVUxFKSAmYW1wOyZhbXA7IGNvbXBhcmVfbW9kdWxlKHAxLCBwMikpCiYjNDM7CQlyZXR1cm4gY29tcGFyZV9tb2R1bGUocDEsIHAyKTsKIAlpZiAoKGN1bGwgJmFtcDsgQ1VMTF9BTExPQ0FUT1IpICZhbXA7JmFtcDsgY29tcGFyZV9hbGxvY2F0b3IocDEsIHAyKSkKIAkJcmV0dXJuIGNvbXBhcmVfYWxsb2NhdG9yKHAxLCBwMik7CiAJcmV0dXJuIDA7CkBAIC00MTEsOSAmIzQzOzQyOSwzMyBAQCBzdGF0aWMgY2hhciAqZ2V0X2NvbW0oY2hhciAqYnVmKQogCXJldHVybiBjb21tX3N0cjsKIH0KIAomIzQzO3N0YXRpYyBjaGFyICpnZXRfbW9kdWxlKGNoYXIgKmJ1ZikKJiM0Mzt7CiYjNDM7CWNoYXIgKm1vZHVsZV9zdHIgPSBtYWxsb2MoTU9EVUxFX05BTUVfTEVOKTsKJiM0MzsJcmVnbWF0Y2hfdCBwbWF0Y2hbMl07CiYjNDM7CWludCB2YWxfbGVuOwomIzQzOwomIzQzOwlpZiAoIW1vZHVsZV9zdHIpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJbWVtc2V0KG1vZHVsZV9zdHIsIDAsIE1PRFVMRV9OQU1FX0xFTik7CiYjNDM7CWlmIChyZWdleGVjKCZhbXA7bW9kdWxlX3BhdHRlcm4sIGJ1ZiwgMiwgcG1hdGNoLCBSRUdfTk9UQk9MKSAhPSAwIHx8IHBtYXRjaFsxXS5ybV9zbyA9PSAtMSkgewomIzQzOwkJc3RyY3B5KG1vZHVsZV9zdHIsICYjMzQ7dm1saW51eCYjMzQ7KTsKJiM0MzsJCXJldHVybiBtb2R1bGVfc3RyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZhbF9sZW4gPSBwbWF0Y2hbMV0ucm1fZW8gLSBwbWF0Y2hbMV0ucm1fc287CiYjNDM7CWlmICgoc2l6ZV90KXZhbF9sZW4gJmd0Oz0gTU9EVUxFX05BTUVfTEVOKQomIzQzOwkJdmFsX2xlbiA9IE1PRFVMRV9OQU1FX0xFTiAtIDE7CiYjNDM7CW1lbWNweShtb2R1bGVfc3RyLCBidWYgJiM0MzsgcG1hdGNoWzFdLnJtX3NvLCB2YWxfbGVuKTsKJiM0MzsJbW9kdWxlX3N0clt2YWxfbGVuXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsKJiM0MzsJcmV0dXJuIG1vZHVsZV9zdHI7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZnJlZV9ibG9ja19saXN0KHN0cnVjdCBibG9ja19saXN0ICpibG9jaykKIHsKIAlmcmVlKGJsb2NrLSZndDtjb21tKTsKJiM0MzsJZnJlZShibG9jay0mZ3Q7bW9kdWxlKTsKIAlmcmVlKGJsb2NrLSZndDt0eHQpOwogfQogCkBAIC00MzMsNiAmIzQzOzQ3NSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2FyZ190eXBlKGNvbnN0IGNoYXIgKmFyZykKIAkJcmV0dXJuIEFSR19BTExPQ19UUzsKIAllbHNlIGlmICghc3RyY21wKGFyZywgJiMzNDthbGxvY2F0b3ImIzM0OykgfHwgIXN0cmNtcChhcmcsICYjMzQ7YXRvciYjMzQ7KSkKIAkJcmV0dXJuIEFSR19BTExPQ0FUT1I7CiYjNDM7CWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAmIzM0O21vZHVsZSYjMzQ7KSB8fCAhc3RyY21wKGFyZywgJiMzNDttb2QmIzM0OykpCiYjNDM7CQlyZXR1cm4gQVJHX01PRFVMRTsKIAllbHNlIHsKIAkJcmV0dXJuIEFSR19VTktOT1dOOwogCX0KQEAgLTQ4MywyNSAmIzQzOzUyNywzNiBAQCBzdGF0aWMgYm9vbCBtYXRjaF9zdHJfbGlzdChjb25zdCBjaGFyICpzdHIsIGNoYXIgKipsaXN0LCBpbnQgbGlzdF9zaXplKQogCiBzdGF0aWMgZW51bSBGSUxURVJfUkVTVUxUIGZpbHRlcl9yZWNvcmQoY2hhciAqYnVmKQogewotCWNoYXIgKmNvbW07CiYjNDM7CWNoYXIgKmNvbW0sICptb2R1bGU7CiAKIAlpZiAoKGZpbHRlciAmYW1wOyBGSUxURVJfUElEKSAmYW1wOyZhbXA7ICFtYXRjaF9udW1fbGlzdChnZXRfcGlkKGJ1ZiksIGZjLnBpZHMsIGZjLnBpZHNfc2l6ZSkpCiAJCXJldHVybiBGSUxURVJfU0tJUDsKIAlpZiAoKGZpbHRlciAmYW1wOyBGSUxURVJfVEdJRCkgJmFtcDsmYW1wOwogCQkhbWF0Y2hfbnVtX2xpc3QoZ2V0X3RnaWQoYnVmKSwgZmMudGdpZHMsIGZjLnRnaWRzX3NpemUpKQogCQlyZXR1cm4gRklMVEVSX1NLSVA7Ci0JaWYgKCEoZmlsdGVyICZhbXA7IEZJTFRFUl9DT01NKSkKJiM0MzsJaWYgKCEoZmlsdGVyICZhbXA7IChGSUxURVJfQ09NTSB8IEZJTFRFUl9NT0RVTEUpKSkKIAkJcmV0dXJuIEZJTFRFUl9NQVRDSDsKIAotCWNvbW0gPSBnZXRfY29tbShidWYpOwotCWlmICghY29tbSkKLQkJcmV0dXJuIEZJTFRFUl9FUlJPUjsKLQotCWlmICghbWF0Y2hfc3RyX2xpc3QoY29tbSwgZmMuY29tbXMsIGZjLmNvbW1zX3NpemUpKSB7CiYjNDM7CWlmIChmaWx0ZXIgJmFtcDsgRklMVEVSX0NPTU0pIHsKJiM0MzsJCWNvbW0gPSBnZXRfY29tbShidWYpOwomIzQzOwkJaWYgKCFjb21tKQomIzQzOwkJCXJldHVybiBGSUxURVJfRVJST1I7CiYjNDM7CQlpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkgewomIzQzOwkJCWZyZWUoY29tbSk7CiYjNDM7CQkJcmV0dXJuIEZJTFRFUl9TS0lQOwomIzQzOwkJfQogCQlmcmVlKGNvbW0pOwotCQlyZXR1cm4gRklMVEVSX1NLSVA7CiAJfQotCWZyZWUoY29tbSk7CiYjNDM7CWlmIChmaWx0ZXIgJmFtcDsgRklMVEVSX01PRFVMRSkgewomIzQzOwkJbW9kdWxlID0gZ2V0X21vZHVsZShidWYpOwomIzQzOwkJaWYgKCFtb2R1bGUpCiYjNDM7CQkJcmV0dXJuIEZJTFRFUl9FUlJPUjsKJiM0MzsJCWlmICghbWF0Y2hfc3RyX2xpc3QobW9kdWxlLCBmYy5tb2R1bGVzLCBmYy5tb2R1bGVzX3NpemUpKSB7CiYjNDM7CQkJZnJlZShtb2R1bGUpOwomIzQzOwkJCXJldHVybiBGSUxURVJfU0tJUDsKJiM0MzsJCX0KJiM0MzsJCWZyZWUobW9kdWxlKTsKJiM0MzsJfQogCXJldHVybiBGSUxURVJfTUFUQ0g7CiB9CiAKQEAgLTU0Nyw2ICYjNDM7NjAyLDEyIEBAIHN0YXRpYyBib29sIGFkZF9saXN0KGNoYXIgKmJ1ZiwgaW50IGxlbiwgY2hhciAqZXh0X2J1ZikKIAkJbGlzdFtsaXN0X3NpemVdLnN0YWNrdHJhY2UmIzQzOyYjNDM7OwogCWxpc3RbbGlzdF9zaXplXS50c19uc2VjID0gZ2V0X3RzX25zZWMoYnVmKTsKIAlsaXN0W2xpc3Rfc2l6ZV0uYWxsb2NhdG9yID0gZ2V0X2FsbG9jYXRvcihidWYsIGV4dF9idWYpOwomIzQzOwlsaXN0W2xpc3Rfc2l6ZV0ubW9kdWxlID0gZ2V0X21vZHVsZShidWYpOwomIzQzOwlpZiAoIWxpc3RbbGlzdF9zaXplXS5tb2R1bGUpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O091dCBvZiBtZW1vcnlcbiYjMzQ7KTsKJiM0MzsJCWZyZWVfYmxvY2tfbGlzdCgmYW1wO2xpc3RbbGlzdF9zaXplXSk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KIAlsaXN0X3NpemUmIzQzOyYjNDM7OwogCWlmIChsaXN0X3NpemUgJSAxMDAwID09IDApIHsKIAkJcHJpbnRmKCYjMzQ7bG9hZGVkICVkXHImIzM0OywgbGlzdF9zaXplKTsKQEAgLTU3Myw2ICYjNDM7NjM0LDggQEAgc3RhdGljIGJvb2wgcGFyc2VfY3VsbF9hcmdzKGNvbnN0IGNoYXIgKmFyZ19zdHIpCiAJCQljdWxsIHw9IENVTExfU1RBQ0tUUkFDRTsKIAkJZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX0FMTE9DQVRPUikKIAkJCWN1bGwgfD0gQ1VMTF9BTExPQ0FUT1I7CiYjNDM7CQllbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfTU9EVUxFKQomIzQzOwkJCWN1bGwgfD0gQ1VMTF9NT0RVTEU7CiAJCWVsc2UgewogCQkJZnJlZV9leHBsb2RlKGFyZ3MsIHNpemUpOwogCQkJcmV0dXJuIGZhbHNlOwpAQCAtNjM1LDYgJiM0Mzs2OTgsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9zb3J0X2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cikKIAkJCXNjLmNtcHNbaV0gPSBjb21wYXJlX3R4dDsKIAkJZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX0FMTE9DQVRPUikKIAkJCXNjLmNtcHNbaV0gPSBjb21wYXJlX2FsbG9jYXRvcjsKJiM0MzsJCWVsc2UgaWYgKGFyZ190eXBlID09IEFSR19NT0RVTEUpCiYjNDM7CQkJc2MuY21wc1tpXSA9IGNvbXBhcmVfbW9kdWxlOwogCQllbHNlIHsKIAkJCWZyZWVfZXhwbG9kZShhcmdzLCBzaXplKTsKIAkJCXNjLnNpemUgPSAwOwpAQCAtNjkxLDcgJiM0Mzs3NTYsOCBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogCQkmIzM0Oy1wXHRcdFx0U29ydCBieSBwaWQuXG4mIzM0OwogCQkmIzM0Oy1QXHRcdFx0U29ydCBieSB0Z2lkLlxuJiMzNDsKIAkJJiMzNDstc1x0XHRcdFNvcnQgYnkgdGhlIHN0YWNrdHJhY2UuXG4mIzM0OwotCQkmIzM0Oy10XHRcdFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxuXG4mIzM0OwomIzQzOwkJJiMzNDstdFx0XHRcdFNvcnQgYnkgbnVtYmVyIG9mIHRpbWVzIHJlY29yZCBpcyBzZWVuIChkZWZhdWx0KS5cbiYjMzQ7CiYjNDM7CQkmIzM0Oy1NXHRcdFx0U29ydCBieSBtb2R1bGUgbmFtZS5cblxuJiMzNDsKIAkJJiMzNDstLXBpZCAmbHQ7cGlkbGlzdCZndDtcdFx0U2VsZWN0IGJ5IHBpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvbiYjMzQ7CiAJCSYjMzQ7IG9mXG5cdFx0XHRibG9ja3Mgd2hvc2UgcHJvY2VzcyBJRCBudW1iZXJzIGFwcGVhciBpbiAmbHQ7cGlkbGlzdCZndDsuXG4mIzM0OwogCQkmIzM0Oy0tdGdpZCAmbHQ7dGdpZGxpc3QmZ3Q7XHRTZWxlY3QgYnkgdGdpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvbiYjMzQ7CkBAIC03MDAsMTEgJiM0Mzs3NjYsMjEgQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKIAkJJiMzNDstLW5hbWUgJmx0O2NtZGxpc3QmZ3Q7XHRTZWxlY3QgYnkgY29tbWFuZCBuYW1lLiBUaGlzIHNlbGVjdHMgdGhlJiMzNDsKIAkJJiMzNDsgaW5mb3JtYXRpb25cblx0XHRcdG9mIGJsb2NrcyB3aG9zZSBjb21tYW5kIG5hbWUgYXBwZWFycyBpbiYjMzQ7CiAJCSYjMzQ7ICZsdDtjbWRsaXN0Jmd0Oy5cbiYjMzQ7Ci0JCSYjMzQ7LS1jdWxsICZsdDtydWxlcyZndDtcdFx0Q3VsbCBieSB1c2VyLWRlZmluZWQgcnVsZXMuICZsdDtydWxlcyZndDsgaXMgYSAmIzM0OwotCQkmIzM0O3NpbmdsZVxuXHRcdFx0YXJndW1lbnQgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCAmIzM0OwotCQkmIzM0O3dpdGggc29tZVxuXHRcdFx0Y29tbW9uIGZpZWxkcyBwcmVkZWZpbmVkIChwaWQsIHRnaWQsIGNvbW0sICYjMzQ7Ci0JCSYjMzQ7c3RhY2t0cmFjZSwgYWxsb2NhdG9yKVxuJiMzNDsKJiM0MzsJCSYjMzQ7LS1tb2R1bGUgJmx0O21vZGxpc3QmZ3Q7XHRTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdG9mIGJsb2NrcyB3aG9zZSBtb2R1bGUgbmFtZSBhcHBlYXJzIGluICZsdDttb2RsaXN0Jmd0Oy5cbiYjMzQ7CiYjNDM7CQkmIzM0Oy0tY3VsbCAmbHQ7cnVsZXMmZ3Q7XHRcdEN1bGwgYnkgdXNlci1kZWZpbmVkIHJ1bGVzLiAmbHQ7cnVsZXMmZ3Q7IGlzIGEgc2luZ2xlXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRhcmd1bWVudCBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHdpdGggc29tZVxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0Y29tbW9uIGZpZWxkcyBwcmVkZWZpbmVkIChwaWQsIHRnaWQsIGNvbW0sIHN0YWNrdHJhY2UsIGFsbG9jYXRvciwgbW9kdWxlKVxuJiMzNDsKIAkJJiMzNDstLXNvcnQgJmx0O29yZGVyJmd0O1x0XHRTcGVjaWZ5IHNvcnQgb3JkZXIgYXM6IFsmIzQzO3wtXWtleVssWyYjNDM7fC1da2V5WywuLi5dXVxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0QXZhaWxhYmxlIGtleXM6XG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHQgIHBpZChwKSwgdGdpZCh0ZyksIG5hbWUobiksIHN0YWNrdHJhY2Uoc3QpLFxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0ICB0eHQoVCksIGFsbG9jX3RzKGF0KSwgYWxsb2NhdG9yKGF0b3IpLCBtb2R1bGUobW9kKVxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0VGhlIFwmIzM0OyYjNDM7XCYjMzQ7IGlzIG9wdGlvbmFsIHNpbmNlIGRlZmF1bHQgZGlyZWN0aW9uIGlzXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRpbmNyZWFzaW5nIG51bWVyaWNhbCBvciBsZXhpY29ncmFwaGljIG9yZGVyLlxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0TWl4ZWQgdXNlIG9mIGFiYnJldmlhdGVkIGFuZCBjb21wbGV0ZS1mb3JtIGlzIGFsbG93ZWQuXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRFeGFtcGxlczpcbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdCAgLS1zb3J0PW4sJiM0MztwaWQsLXRnaWRcbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdCAgLS1zb3J0PW1vZCxhdFxuJiMzNDsKIAkpOwogfQogCkBAIC03MjEsMTMgJiM0Mzs3OTcsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7ICYjMzQ7bmFtZSYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMyB9LAogCQl7ICYjMzQ7Y3VsbCYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNCB9LAogCQl7ICYjMzQ7c29ydCYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNSB9LAomIzQzOwkJeyAmIzM0O21vZHVsZSYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNiB9LAogCQl7ICYjMzQ7aGVscCYjMzQ7LCBub19hcmd1bWVudCwgTlVMTCwgJiMzOTtoJiMzOTsgfSwKIAkJeyAwLCAwLCAwLCAwfSwKIAl9OwogCiAJY29tcGFyZV9mbGFnID0gQ09NUF9OT19GTEFHOwogCi0Jd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAmIzM0O2FkbW5wc3RQaCYjMzQ7LCBsb25nb3B0cywgTlVMTCkpICE9IC0xKQomIzQzOwl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICYjMzQ7YWRtbnBzdFBNaCYjMzQ7LCBsb25nb3B0cywgTlVMTCkpICE9IC0xKQogCQlzd2l0Y2ggKG9wdCkgewogCQljYXNlICYjMzk7YSYjMzk7OgogCQkJY29tcGFyZV9mbGFnIHw9IENPTVBfQUxMT0M7CkBAIC03NTMsNiAmIzQzOzgzMCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJY2FzZSAmIzM5O24mIzM5OzoKIAkJCWNvbXBhcmVfZmxhZyB8PSBDT01QX0NPTU07CiAJCQlicmVhazsKJiM0MzsJCWNhc2UgJiMzOTtNJiMzOTs6CiYjNDM7CQkJY29tcGFyZV9mbGFnIHw9IENPTVBfTU9EVUxFOwomIzQzOwkJCWJyZWFrOwogCQljYXNlICYjMzk7aCYjMzk7OgogCQkJdXNhZ2UoKTsKIAkJCWV4aXQoMCk7CkBAIC03OTIsNiAmIzQzOzg3MiwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJZXhpdCgxKTsKIAkJCX0KIAkJCWJyZWFrOwomIzQzOwkJY2FzZSA2OgomIzQzOwkJCWZpbHRlciA9IGZpbHRlciB8IEZJTFRFUl9NT0RVTEU7CiYjNDM7CQkJZmMubW9kdWxlcyA9IGV4cGxvZGUoJiMzOTssJiMzOTssIG9wdGFyZywgJmFtcDtmYy5tb2R1bGVzX3NpemUpOwomIzQzOwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJdXNhZ2UoKTsKIAkJCWV4aXQoMSk7CkBAIC04MjEsNiAmIzQzOzkwNSw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9zdGFja3RyYWNlLCBTT1JUX0FTQyk7CiAJCWJyZWFrOwogCWNhc2UgQ09NUF9OT19GTEFHOgomIzQzOwkJaWYgKHNjLnNpemUgJmd0OyAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJLyogZmFsbHRocm91Z2ggKi8KIAljYXNlIENPTVBfTlVNOgogCQlzZXRfc2luZ2xlX2NtcChjb21wYXJlX251bSwgU09SVF9ERVNDKTsKIAkJYnJlYWs7CkBAIC04MzAsNiAmIzQzOzkxNyw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljYXNlIENPTVBfQ09NTToKIAkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9jb21tLCBTT1JUX0FTQyk7CiAJCWJyZWFrOwomIzQzOwljYXNlIENPTVBfTU9EVUxFOgomIzQzOwkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9tb2R1bGUsIFNPUlRfQVNDKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXVzYWdlKCk7CiAJCWV4aXQoMSk7CkBAIC04NTMsNiAmIzQzOzk0Myw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJZ290byBvdXRfY29tbTsKIAlpZiAoIWNoZWNrX3JlZ2NvbXAoJmFtcDt0c19uc2VjX3BhdHRlcm4sICYjMzQ7dHNcXHMqKFswLTldKilcXHMqbnMmIzM0OykpCiAJCWdvdG8gb3V0X3RzOwomIzQzOwlpZiAoIWNoZWNrX3JlZ2NvbXAoJmFtcDttb2R1bGVfcGF0dGVybiwgJiMzNDtcXCYjNDM7MHhbMC05YS1mXSYjNDM7LzB4WzAtOWEtZl0mIzQzO1xccypcXFsoW2EtekEtWjAtOV8tXSYjNDM7KVxcXSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X21vZHVsZTsKIAogCWZzdGF0KGZpbGVubyhmaW4pLCAmYW1wO3N0KTsKIAltYXhfc2l6ZSA9IHN0LnN0X3NpemUgLyAxMDA7IC8qIGhhY2sgLi4uICovCkBAIC05MTEsNiAmIzQzOzEwMDMsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJZnByaW50Zihmb3V0LCAmIzM0OywgVEdJRCAlZCYjMzQ7LCBsaXN0W2ldLnRnaWQpOwogCQkJaWYgKGN1bGwgJmFtcDsgQ1VMTF9DT01NIHx8IGZpbHRlciAmYW1wOyBGSUxURVJfQ09NTSkKIAkJCQlmcHJpbnRmKGZvdXQsICYjMzQ7LCB0YXNrX2NvbW1fbmFtZTogJXMmIzM0OywgbGlzdFtpXS5jb21tKTsKJiM0MzsJCQlpZiAoY3VsbCAmYW1wOyBDVUxMX01PRFVMRSB8fCBmaWx0ZXIgJmFtcDsgRklMVEVSX01PRFVMRSkKJiM0MzsJCQkJZnByaW50Zihmb3V0LCAmIzM0OywgbW9kdWxlOiAlcyYjMzQ7LCBsaXN0W2ldLm1vZHVsZSk7CiAJCQlpZiAoY3VsbCAmYW1wOyBDVUxMX0FMTE9DQVRPUikgewogCQkJCWZwcmludGYoZm91dCwgJiMzNDssICYjMzQ7KTsKIAkJCQlwcmludF9hbGxvY2F0b3IoZm91dCwgbGlzdFtpXS5hbGxvY2F0b3IpOwpAQCAtOTMxLDYgJiM0MzsxMDI1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJZnJlZV9ibG9ja19saXN0KCZhbXA7bGlzdFtpXSk7CiAJCWZyZWUobGlzdCk7CiAJfQomIzQzO291dF9tb2R1bGU6CiYjNDM7CXJlZ2ZyZWUoJmFtcDttb2R1bGVfcGF0dGVybik7CiBvdXRfdHM6CiAJcmVnZnJlZSgmYW1wO3RzX25zZWNfcGF0dGVybik7CiBvdXRfY29tbToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5MwoJCQkJCQkJb3V0cHV0OiA3NgoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IEEgUXVpY2sgQW5hbHlzaXMqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7dmUgcmV2aWV3ZWQgdGhpcyBwYXRjaCwgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIHRvdWNoaW5nIHRoZSBgRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdGAgZmlsZSBhbmQgdGhlIGB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY2AgdXRpbGl0eS4gVGhlIGNvcmUgaWRlYSBpcyBhZGRpbmcgbW9kdWxlIG5hbWUgc29ydGluZyBhbmQgZmlsdGVyaW5nIHRvIGBwYWdlX293bmVyX3NvcnRgLiAgRXNzZW50aWFsbHksIGl0JiMzOTtzIGVuaGFuY2luZyB0aGUgdXNlci1zcGFjZSB0b29sIHRoYXQgcGFyc2VzIHRoZSBvdXRwdXQgZnJvbSBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAuCgpNeSBpbW1lZGlhdGUgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgZG9lc24mIzM5O3QgY2hhbmdlIGFueXRoaW5nIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIE5vIG1vZGlmaWNhdGlvbnMgdG8gYG1tL2AsIGBrZXJuZWwvYCwgYGRyaXZlcnMvYCwgb3IgYW55IG9mIHRoZSBjcml0aWNhbCBrZXJuZWwgc3Vic3lzdGVtcyB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSB1c2VyLXNwYWNlIHRvb2wgaGVyZS4gSXQmIzM5O3MgKnBhcnNpbmcqIGtlcm5lbCBvdXRwdXQsIG5vdCAqbW9kaWZ5aW5nKiBrZXJuZWwgYmVoYXZpb3IuCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdC4gWWVwLCBkb3VibGUtY2hlY2tlZC4gT25seSB0aG9zZSB0d28gZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLiBObyBrZXJuZWwgY29kZSBpcyBhZmZlY3RlZC4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciB0aGlzLiBJJiMzOTtsbCBwcm9jZWVkIHdpdGggY2FsbGluZyBgc2V0LXJlc3VsdHNgIHdpdGggdGhhdCB2YWx1ZS4gSXQmIzM5O3MgYSBjbGVhbiwgbm9uLWludmFzaXZlIHBhdGNoIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDc6MTIuMTE5OTA4Mjg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2Njk2OTM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2Vyc3BhY2UgdG9vbCAodG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMpIGFuZCBpdHMgZG9jdW1lbnRhdGlvbi4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjA3OjEyLjExOTkxNjA3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MjAwMzU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBlZjBjYTM3Mjg4ZmQ3ZWI1ZTY2YjhkZDk5MDE4ZmZlOWY3ZDRmZDdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDM6MDc6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcXG5pbmRleCBhNmJkM2ZlNjQyM2FkLi5iZDAyNzM3N2RmZjZlIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XFxuQEAgLTE5OSw2ICsxOTksNyBAQCBVc2FnZVxcbiBcXHRcXHQtcFxcdFxcdFNvcnQgYnkgcGlkLlxcbiBcXHRcXHQtUFxcdFxcdFNvcnQgYnkgdGdpZC5cXG4gXFx0XFx0LW5cXHRcXHRTb3J0IGJ5IHRhc2sgY29tbWFuZCBuYW1lLlxcbitcXHRcXHQtTVxcdFxcdFNvcnQgYnkgbW9kdWxlIG5hbWUuXFxuIFxcdFxcdC1yXFx0XFx0U29ydCBieSBtZW1vcnkgcmVsZWFzZSB0aW1lLlxcbiBcXHRcXHQtc1xcdFxcdFNvcnQgYnkgc3RhY2sgdHJhY2UuXFxuIFxcdFxcdC10XFx0XFx0U29ydCBieSB0aW1lcyAoZGVmYXVsdCkuXFxuQEAgLTI0MCw4ICsyNDEsMTAgQEAgVXNhZ2VcXG4gXFx0XFx0XFx0XFx0XFx0Z3JvdXAgSUQgbnVtYmVycyBhcHBlYXIgaW4gXFx1MDAzY3RnaWRsaXN0XFx1MDAzZS5cXG4gXFx0XFx0LS1uYW1lIFxcdTAwM2NjbWRsaXN0XFx1MDAzZVxcdFNlbGVjdCBieSB0YXNrIGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2VcXG4gXFx0XFx0XFx0XFx0XFx0dGFzayBjb21tYW5kIG5hbWUgYXBwZWFyIGluIFxcdTAwM2NjbWRsaXN0XFx1MDAzZS5cXG4rXFx0XFx0LS1tb2R1bGUgXFx1MDAzY21vZGxpc3RcXHUwMDNlXFx0U2VsZWN0IGJ5IG1vZHVsZSBuYW1lLiBUaGlzIHNlbGVjdHMgdGhlIGJsb2NrcyB3aG9zZVxcbitcXHRcXHRcXHRcXHRcXHRtb2R1bGUgbmFtZSBhcHBlYXIgaW4gXFx1MDAzY21vZGxpc3RcXHUwMDNlLlxcbiBcXG4tXFx0XFx0XFx1MDAzY3BpZGxpc3RcXHUwMDNlLCBcXHUwMDNjdGdpZGxpc3RcXHUwMDNlLCBcXHUwMDNjY21kbGlzdFxcdTAwM2UgYXJlIHNpbmdsZSBhcmd1bWVudHMgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCxcXG4rXFx0XFx0XFx1MDAzY3BpZGxpc3RcXHUwMDNlLCBcXHUwMDNjdGdpZGxpc3RcXHUwMDNlLCBcXHUwMDNjY21kbGlzdFxcdTAwM2UsIFxcdTAwM2Ntb2RsaXN0XFx1MDAzZSBhcmUgc2luZ2xlIGFyZ3VtZW50cyBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LFxcbiBcXHRcXHR3aGljaCBvZmZlcnMgYSB3YXkgdG8gc3BlY2lmeSBpbmRpdmlkdWFsIHNlbGVjdGluZyBydWxlcy5cXG4gXFxuIFxcbkBAIC0yNDksNiArMjUyLDcgQEAgVXNhZ2VcXG4gXFx0XFx0XFx0XFx0Li9wYWdlX293bmVyX3NvcnQgXFx1MDAzY2lucHV0XFx1MDAzZSBcXHUwMDNjb3V0cHV0XFx1MDAzZSAtLXBpZD0xXFxuIFxcdFxcdFxcdFxcdC4vcGFnZV9vd25lcl9zb3J0IFxcdTAwM2NpbnB1dFxcdTAwM2UgXFx1MDAzY291dHB1dFxcdTAwM2UgLS10Z2lkPTEsMiwzXFxuIFxcdFxcdFxcdFxcdC4vcGFnZV9vd25lcl9zb3J0IFxcdTAwM2NpbnB1dFxcdTAwM2UgXFx1MDAzY291dHB1dFxcdTAwM2UgLS1uYW1lIG5hbWUxLG5hbWUyXFxuK1xcdFxcdFxcdFxcdC4vcGFnZV9vd25lcl9zb3J0IFxcdTAwM2NpbnB1dFxcdTAwM2UgXFx1MDAzY291dHB1dFxcdTAwM2UgLS1tb2R1bGUgeGZzLGV4dDRcXG4gXFxuIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09XFxuQEAgLTI2NSw2ICsyNjksNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xcbiBcXHRmdFxcdFxcdGZyZWVfdHNcXHRcXHR0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgcmVsZWFzZWRcXG4gXFx0YXRcXHRcXHRhbGxvY190c1xcdHRpbWVzdGFtcCBvZiB0aGUgcGFnZSB3aGVuIGl0IHdhcyBhbGxvY2F0ZWRcXG4gXFx0YXRvclxcdFxcdGFsbG9jYXRvclxcdG1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzXFxuK1xcdG1vZFxcdFxcdG1vZHVsZVxcdFxcdGtlcm5lbCBtb2R1bGUgbmFtZVxcbiBcXG4gICBGb3IgLS1jdWxsIG9wdGlvbjpcXG4gXFxuQEAgLTI3NSw2ICsyODAsNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xcbiBcXHRmXFx0XFx0ZnJlZVxcdFxcdHdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90XFxuIFxcdHN0XFx0XFx0c3RhY2t0cmFjZVxcdHN0YWNrIHRyYWNlIG9mIHRoZSBwYWdlIGFsbG9jYXRpb25cXG4gXFx0YXRvclxcdFxcdGFsbG9jYXRvclxcdG1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzXFxuK1xcdG1vZFxcdFxcdG1vZHVsZVxcdFxcdGtlcm5lbCBtb2R1bGUgbmFtZVxcbiBcXG4gRmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0XFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xcbmluZGV4IDM1ZDNkMjU0OTQxYzkuLjE2YWM2MjFiNzRmNjIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcXG4rKysgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xcbkBAIC0yNSwxMSArMjUsMTMgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2dldG9wdC5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBUQVNLX0NPTU1fTEVOIDE2XFxuKyNkZWZpbmUgTU9EVUxFX05BTUVfTEVOIDY0XFxuIFxcbiBzdHJ1Y3QgYmxvY2tfbGlzdCB7XFxuIFxcdGNoYXIgKnR4dDtcXG4gXFx0Y2hhciAqY29tbTsgLy8gdGFzayBjb21tYW5kIG5hbWVcXG4gXFx0Y2hhciAqc3RhY2t0cmFjZTtcXG4rXFx0Y2hhciAqbW9kdWxlOyAvLyBrZXJuZWwgbW9kdWxlIG5hbWVcXG4gXFx0X191NjQgdHNfbnNlYztcXG4gXFx0aW50IGxlbjtcXG4gXFx0aW50IG51bTtcXG5AQCAtNDEsNyArNDMsOCBAQCBzdHJ1Y3QgYmxvY2tfbGlzdCB7XFxuIGVudW0gRklMVEVSX0JJVCB7XFxuIFxcdEZJTFRFUl9QSUQgPSAxXFx1MDAzY1xcdTAwM2MxLFxcbiBcXHRGSUxURVJfVEdJRCA9IDFcXHUwMDNjXFx1MDAzYzIsXFxuLVxcdEZJTFRFUl9DT01NID0gMVxcdTAwM2NcXHUwMDNjM1xcbitcXHRGSUxURVJfQ09NTSA9IDFcXHUwMDNjXFx1MDAzYzMsXFxuK1xcdEZJTFRFUl9NT0RVTEUgPSAxXFx1MDAzY1xcdTAwM2M0XFxuIH07XFxuIFxcbiBlbnVtIEZJTFRFUl9SRVNVTFQge1xcbkBAIC01NSw3ICs1OCw4IEBAIGVudW0gQ1VMTF9CSVQge1xcbiBcXHRDVUxMX1RHSUQgPSAxXFx1MDAzY1xcdTAwM2MyLFxcbiBcXHRDVUxMX0NPTU0gPSAxXFx1MDAzY1xcdTAwM2MzLFxcbiBcXHRDVUxMX1NUQUNLVFJBQ0UgPSAxXFx1MDAzY1xcdTAwM2M0LFxcbi1cXHRDVUxMX0FMTE9DQVRPUiA9IDFcXHUwMDNjXFx1MDAzYzVcXG4rXFx0Q1VMTF9BTExPQ0FUT1IgPSAxXFx1MDAzY1xcdTAwM2M1LFxcbitcXHRDVUxMX01PRFVMRSA9IDFcXHUwMDNjXFx1MDAzYzZcXG4gfTtcXG4gZW51bSBBTExPQ0FUT1JfQklUIHtcXG4gXFx0QUxMT0NBVE9SX0NNQSA9IDFcXHUwMDNjXFx1MDAzYzEsXFxuQEAgLTY1LDcgKzY5LDggQEAgZW51bSBBTExPQ0FUT1JfQklUIHtcXG4gfTtcXG4gZW51bSBBUkdfVFlQRSB7XFxuIFxcdEFSR19UWFQsIEFSR19DT01NLCBBUkdfU1RBQ0tUUkFDRSwgQVJHX0FMTE9DX1RTLCBBUkdfQ1VMTF9USU1FLFxcbi1cXHRBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUlxcbitcXHRBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUixcXG4rXFx0QVJHX01PRFVMRVxcbiB9O1xcbiBlbnVtIFNPUlRfT1JERVIge1xcbiBcXHRTT1JUX0FTQyA9IDEsXFxuQEAgLTc5LDE1ICs4NCwxOCBAQCBlbnVtIENPTVBfRkxBRyB7XFxuIFxcdENPTVBfU1RBQ0sgPSAxXFx1MDAzY1xcdTAwM2MzLFxcbiBcXHRDT01QX05VTSA9IDFcXHUwMDNjXFx1MDAzYzQsXFxuIFxcdENPTVBfVEdJRCA9IDFcXHUwMDNjXFx1MDAzYzUsXFxuLVxcdENPTVBfQ09NTSA9IDFcXHUwMDNjXFx1MDAzYzZcXG4rXFx0Q09NUF9DT01NID0gMVxcdTAwM2NcXHUwMDNjNixcXG4rXFx0Q09NUF9NT0RVTEUgPSAxXFx1MDAzY1xcdTAwM2M3XFxuIH07XFxuIHN0cnVjdCBmaWx0ZXJfY29uZGl0aW9uIHtcXG4gXFx0cGlkX3QgKnBpZHM7XFxuIFxcdHBpZF90ICp0Z2lkcztcXG4gXFx0Y2hhciAqKmNvbW1zO1xcbitcXHRjaGFyICoqbW9kdWxlcztcXG4gXFx0aW50IHBpZHNfc2l6ZTtcXG4gXFx0aW50IHRnaWRzX3NpemU7XFxuIFxcdGludCBjb21tc19zaXplO1xcbitcXHRpbnQgbW9kdWxlc19zaXplO1xcbiB9O1xcbiBzdHJ1Y3Qgc29ydF9jb25kaXRpb24ge1xcbiBcXHRpbnQgKCoqY21wcykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopO1xcbkBAIC0xMDEsNiArMTA5LDcgQEAgc3RhdGljIHJlZ2V4X3QgcGlkX3BhdHRlcm47XFxuIHN0YXRpYyByZWdleF90IHRnaWRfcGF0dGVybjtcXG4gc3RhdGljIHJlZ2V4X3QgY29tbV9wYXR0ZXJuO1xcbiBzdGF0aWMgcmVnZXhfdCB0c19uc2VjX3BhdHRlcm47XFxuK3N0YXRpYyByZWdleF90IG1vZHVsZV9wYXR0ZXJuO1xcbiBzdGF0aWMgc3RydWN0IGJsb2NrX2xpc3QgKmxpc3Q7XFxuIHN0YXRpYyBpbnQgbGlzdF9zaXplO1xcbiBzdGF0aWMgaW50IG1heF9zaXplO1xcbkBAIC0xODQsNiArMTkzLDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jb21tKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcXG4gXFx0cmV0dXJuIHN0cmNtcChsMS1cXHUwMDNlY29tbSwgbDItXFx1MDAzZWNvbW0pO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGNvbXBhcmVfbW9kdWxlKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYmxvY2tfbGlzdCAqbDEgPSBwMSwgKmwyID0gcDI7XFxuK1xcbitcXHRyZXR1cm4gc3RyY21wKGwxLVxcdTAwM2Vtb2R1bGUsIGwyLVxcdTAwM2Vtb2R1bGUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGNvbXBhcmVfdHMoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcXG5AQCAtMjA3LDYgKzIyMyw4IEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jdWxsX2NvbmRpdGlvbihjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpXFxuIFxcdFxcdHJldHVybiBjb21wYXJlX3RnaWQocDEsIHAyKTtcXG4gXFx0aWYgKChjdWxsIFxcdTAwMjYgQ1VMTF9DT01NKSBcXHUwMDI2XFx1MDAyNiBjb21wYXJlX2NvbW0ocDEsIHAyKSlcXG4gXFx0XFx0cmV0dXJuIGNvbXBhcmVfY29tbShwMSwgcDIpO1xcbitcXHRpZiAoKGN1bGwgXFx1MDAyNiBDVUxMX01PRFVMRSkgXFx1MDAyNlxcdTAwMjYgY29tcGFyZV9tb2R1bGUocDEsIHAyKSlcXG4rXFx0XFx0cmV0dXJuIGNvbXBhcmVfbW9kdWxlKHAxLCBwMik7XFxuIFxcdGlmICgoY3VsbCBcXHUwMDI2IENVTExfQUxMT0NBVE9SKSBcXHUwMDI2XFx1MDAyNiBjb21wYXJlX2FsbG9jYXRvcihwMSwgcDIpKVxcbiBcXHRcXHRyZXR1cm4gY29tcGFyZV9hbGxvY2F0b3IocDEsIHAyKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQxMSw5ICs0MjksMzMgQEAgc3RhdGljIGNoYXIgKmdldF9jb21tKGNoYXIgKmJ1ZilcXG4gXFx0cmV0dXJuIGNvbW1fc3RyO1xcbiB9XFxuIFxcbitzdGF0aWMgY2hhciAqZ2V0X21vZHVsZShjaGFyICpidWYpXFxuK3tcXG4rXFx0Y2hhciAqbW9kdWxlX3N0ciA9IG1hbGxvYyhNT0RVTEVfTkFNRV9MRU4pO1xcbitcXHRyZWdtYXRjaF90IHBtYXRjaFsyXTtcXG4rXFx0aW50IHZhbF9sZW47XFxuK1xcbitcXHRpZiAoIW1vZHVsZV9zdHIpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRtZW1zZXQobW9kdWxlX3N0ciwgMCwgTU9EVUxFX05BTUVfTEVOKTtcXG4rXFx0aWYgKHJlZ2V4ZWMoXFx1MDAyNm1vZHVsZV9wYXR0ZXJuLCBidWYsIDIsIHBtYXRjaCwgUkVHX05PVEJPTCkgIT0gMCB8fCBwbWF0Y2hbMV0ucm1fc28gPT0gLTEpIHtcXG4rXFx0XFx0c3RyY3B5KG1vZHVsZV9zdHIsIFxcXCJ2bWxpbnV4XFxcIik7XFxuK1xcdFxcdHJldHVybiBtb2R1bGVfc3RyO1xcbitcXHR9XFxuK1xcbitcXHR2YWxfbGVuID0gcG1hdGNoWzFdLnJtX2VvIC0gcG1hdGNoWzFdLnJtX3NvO1xcbitcXHRpZiAoKHNpemVfdCl2YWxfbGVuIFxcdTAwM2U9IE1PRFVMRV9OQU1FX0xFTilcXG4rXFx0XFx0dmFsX2xlbiA9IE1PRFVMRV9OQU1FX0xFTiAtIDE7XFxuK1xcdG1lbWNweShtb2R1bGVfc3RyLCBidWYgKyBwbWF0Y2hbMV0ucm1fc28sIHZhbF9sZW4pO1xcbitcXHRtb2R1bGVfc3RyW3ZhbF9sZW5dID0gJ1xcXFwwJztcXG4rXFxuK1xcdHJldHVybiBtb2R1bGVfc3RyO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBmcmVlX2Jsb2NrX2xpc3Qoc3RydWN0IGJsb2NrX2xpc3QgKmJsb2NrKVxcbiB7XFxuIFxcdGZyZWUoYmxvY2stXFx1MDAzZWNvbW0pO1xcbitcXHRmcmVlKGJsb2NrLVxcdTAwM2Vtb2R1bGUpO1xcbiBcXHRmcmVlKGJsb2NrLVxcdTAwM2V0eHQpO1xcbiB9XFxuIFxcbkBAIC00MzMsNiArNDc1LDggQEAgc3RhdGljIGludCBnZXRfYXJnX3R5cGUoY29uc3QgY2hhciAqYXJnKVxcbiBcXHRcXHRyZXR1cm4gQVJHX0FMTE9DX1RTO1xcbiBcXHRlbHNlIGlmICghc3RyY21wKGFyZywgXFxcImFsbG9jYXRvclxcXCIpIHx8ICFzdHJjbXAoYXJnLCBcXFwiYXRvclxcXCIpKVxcbiBcXHRcXHRyZXR1cm4gQVJHX0FMTE9DQVRPUjtcXG4rXFx0ZWxzZSBpZiAoIXN0cmNtcChhcmcsIFxcXCJtb2R1bGVcXFwiKSB8fCAhc3RyY21wKGFyZywgXFxcIm1vZFxcXCIpKVxcbitcXHRcXHRyZXR1cm4gQVJHX01PRFVMRTtcXG4gXFx0ZWxzZSB7XFxuIFxcdFxcdHJldHVybiBBUkdfVU5LTk9XTjtcXG4gXFx0fVxcbkBAIC00ODMsMjUgKzUyNywzNiBAQCBzdGF0aWMgYm9vbCBtYXRjaF9zdHJfbGlzdChjb25zdCBjaGFyICpzdHIsIGNoYXIgKipsaXN0LCBpbnQgbGlzdF9zaXplKVxcbiBcXG4gc3RhdGljIGVudW0gRklMVEVSX1JFU1VMVCBmaWx0ZXJfcmVjb3JkKGNoYXIgKmJ1ZilcXG4ge1xcbi1cXHRjaGFyICpjb21tO1xcbitcXHRjaGFyICpjb21tLCAqbW9kdWxlO1xcbiBcXG4gXFx0aWYgKChmaWx0ZXIgXFx1MDAyNiBGSUxURVJfUElEKSBcXHUwMDI2XFx1MDAyNiAhbWF0Y2hfbnVtX2xpc3QoZ2V0X3BpZChidWYpLCBmYy5waWRzLCBmYy5waWRzX3NpemUpKVxcbiBcXHRcXHRyZXR1cm4gRklMVEVSX1NLSVA7XFxuIFxcdGlmICgoZmlsdGVyIFxcdTAwMjYgRklMVEVSX1RHSUQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCFtYXRjaF9udW1fbGlzdChnZXRfdGdpZChidWYpLCBmYy50Z2lkcywgZmMudGdpZHNfc2l6ZSkpXFxuIFxcdFxcdHJldHVybiBGSUxURVJfU0tJUDtcXG4tXFx0aWYgKCEoZmlsdGVyIFxcdTAwMjYgRklMVEVSX0NPTU0pKVxcbitcXHRpZiAoIShmaWx0ZXIgXFx1MDAyNiAoRklMVEVSX0NPTU0gfCBGSUxURVJfTU9EVUxFKSkpXFxuIFxcdFxcdHJldHVybiBGSUxURVJfTUFUQ0g7XFxuIFxcbi1cXHRjb21tID0gZ2V0X2NvbW0oYnVmKTtcXG4tXFx0aWYgKCFjb21tKVxcbi1cXHRcXHRyZXR1cm4gRklMVEVSX0VSUk9SO1xcbi1cXG4tXFx0aWYgKCFtYXRjaF9zdHJfbGlzdChjb21tLCBmYy5jb21tcywgZmMuY29tbXNfc2l6ZSkpIHtcXG4rXFx0aWYgKGZpbHRlciBcXHUwMDI2IEZJTFRFUl9DT01NKSB7XFxuK1xcdFxcdGNvbW0gPSBnZXRfY29tbShidWYpO1xcbitcXHRcXHRpZiAoIWNvbW0pXFxuK1xcdFxcdFxcdHJldHVybiBGSUxURVJfRVJST1I7XFxuK1xcdFxcdGlmICghbWF0Y2hfc3RyX2xpc3QoY29tbSwgZmMuY29tbXMsIGZjLmNvbW1zX3NpemUpKSB7XFxuK1xcdFxcdFxcdGZyZWUoY29tbSk7XFxuK1xcdFxcdFxcdHJldHVybiBGSUxURVJfU0tJUDtcXG4rXFx0XFx0fVxcbiBcXHRcXHRmcmVlKGNvbW0pO1xcbi1cXHRcXHRyZXR1cm4gRklMVEVSX1NLSVA7XFxuIFxcdH1cXG4tXFx0ZnJlZShjb21tKTtcXG4rXFx0aWYgKGZpbHRlciBcXHUwMDI2IEZJTFRFUl9NT0RVTEUpIHtcXG4rXFx0XFx0bW9kdWxlID0gZ2V0X21vZHVsZShidWYpO1xcbitcXHRcXHRpZiAoIW1vZHVsZSlcXG4rXFx0XFx0XFx0cmV0dXJuIEZJTFRFUl9FUlJPUjtcXG4rXFx0XFx0aWYgKCFtYXRjaF9zdHJfbGlzdChtb2R1bGUsIGZjLm1vZHVsZXMsIGZjLm1vZHVsZXNfc2l6ZSkpIHtcXG4rXFx0XFx0XFx0ZnJlZShtb2R1bGUpO1xcbitcXHRcXHRcXHRyZXR1cm4gRklMVEVSX1NLSVA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZnJlZShtb2R1bGUpO1xcbitcXHR9XFxuIFxcdHJldHVybiBGSUxURVJfTUFUQ0g7XFxuIH1cXG4gXFxuQEAgLTU0Nyw2ICs2MDIsMTIgQEAgc3RhdGljIGJvb2wgYWRkX2xpc3QoY2hhciAqYnVmLCBpbnQgbGVuLCBjaGFyICpleHRfYnVmKVxcbiBcXHRcXHRsaXN0W2xpc3Rfc2l6ZV0uc3RhY2t0cmFjZSsrO1xcbiBcXHRsaXN0W2xpc3Rfc2l6ZV0udHNfbnNlYyA9IGdldF90c19uc2VjKGJ1Zik7XFxuIFxcdGxpc3RbbGlzdF9zaXplXS5hbGxvY2F0b3IgPSBnZXRfYWxsb2NhdG9yKGJ1ZiwgZXh0X2J1Zik7XFxuK1xcdGxpc3RbbGlzdF9zaXplXS5tb2R1bGUgPSBnZXRfbW9kdWxlKGJ1Zik7XFxuK1xcdGlmICghbGlzdFtsaXN0X3NpemVdLm1vZHVsZSkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIk91dCBvZiBtZW1vcnlcXFxcblxcXCIpO1xcbitcXHRcXHRmcmVlX2Jsb2NrX2xpc3QoXFx1MDAyNmxpc3RbbGlzdF9zaXplXSk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbiBcXHRsaXN0X3NpemUrKztcXG4gXFx0aWYgKGxpc3Rfc2l6ZSAlIDEwMDAgPT0gMCkge1xcbiBcXHRcXHRwcmludGYoXFxcImxvYWRlZCAlZFxcXFxyXFxcIiwgbGlzdF9zaXplKTtcXG5AQCAtNTczLDYgKzYzNCw4IEBAIHN0YXRpYyBib29sIHBhcnNlX2N1bGxfYXJncyhjb25zdCBjaGFyICphcmdfc3RyKVxcbiBcXHRcXHRcXHRjdWxsIHw9IENVTExfU1RBQ0tUUkFDRTtcXG4gXFx0XFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX0FMTE9DQVRPUilcXG4gXFx0XFx0XFx0Y3VsbCB8PSBDVUxMX0FMTE9DQVRPUjtcXG4rXFx0XFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSlcXG4rXFx0XFx0XFx0Y3VsbCB8PSBDVUxMX01PRFVMRTtcXG4gXFx0XFx0ZWxzZSB7XFxuIFxcdFxcdFxcdGZyZWVfZXhwbG9kZShhcmdzLCBzaXplKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbkBAIC02MzUsNiArNjk4LDggQEAgc3RhdGljIGJvb2wgcGFyc2Vfc29ydF9hcmdzKGNvbnN0IGNoYXIgKmFyZ19zdHIpXFxuIFxcdFxcdFxcdHNjLmNtcHNbaV0gPSBjb21wYXJlX3R4dDtcXG4gXFx0XFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX0FMTE9DQVRPUilcXG4gXFx0XFx0XFx0c2MuY21wc1tpXSA9IGNvbXBhcmVfYWxsb2NhdG9yO1xcbitcXHRcXHRlbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfTU9EVUxFKVxcbitcXHRcXHRcXHRzYy5jbXBzW2ldID0gY29tcGFyZV9tb2R1bGU7XFxuIFxcdFxcdGVsc2Uge1xcbiBcXHRcXHRcXHRmcmVlX2V4cGxvZGUoYXJncywgc2l6ZSk7XFxuIFxcdFxcdFxcdHNjLnNpemUgPSAwO1xcbkBAIC02OTEsNyArNzU2LDggQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcXG4gXFx0XFx0XFxcIi1wXFxcXHRcXFxcdFxcXFx0U29ydCBieSBwaWQuXFxcXG5cXFwiXFxuIFxcdFxcdFxcXCItUFxcXFx0XFxcXHRcXFxcdFNvcnQgYnkgdGdpZC5cXFxcblxcXCJcXG4gXFx0XFx0XFxcIi1zXFxcXHRcXFxcdFxcXFx0U29ydCBieSB0aGUgc3RhY2t0cmFjZS5cXFxcblxcXCJcXG4tXFx0XFx0XFxcIi10XFxcXHRcXFxcdFxcXFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxcXFxuXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCItdFxcXFx0XFxcXHRcXFxcdFNvcnQgYnkgbnVtYmVyIG9mIHRpbWVzIHJlY29yZCBpcyBzZWVuIChkZWZhdWx0KS5cXFxcblxcXCJcXG4rXFx0XFx0XFxcIi1NXFxcXHRcXFxcdFxcXFx0U29ydCBieSBtb2R1bGUgbmFtZS5cXFxcblxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiLS1waWQgXFx1MDAzY3BpZGxpc3RcXHUwMDNlXFxcXHRcXFxcdFNlbGVjdCBieSBwaWQuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cXFwiXFxuIFxcdFxcdFxcXCIgb2ZcXFxcblxcXFx0XFxcXHRcXFxcdGJsb2NrcyB3aG9zZSBwcm9jZXNzIElEIG51bWJlcnMgYXBwZWFyIGluIFxcdTAwM2NwaWRsaXN0XFx1MDAzZS5cXFxcblxcXCJcXG4gXFx0XFx0XFxcIi0tdGdpZCBcXHUwMDNjdGdpZGxpc3RcXHUwMDNlXFxcXHRTZWxlY3QgYnkgdGdpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblxcXCJcXG5AQCAtNzAwLDExICs3NjYsMjEgQEAgc3RhdGljIHZvaWQgdXNhZ2Uodm9pZClcXG4gXFx0XFx0XFxcIi0tbmFtZSBcXHUwMDNjY21kbGlzdFxcdTAwM2VcXFxcdFNlbGVjdCBieSBjb21tYW5kIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGVcXFwiXFxuIFxcdFxcdFxcXCIgaW5mb3JtYXRpb25cXFxcblxcXFx0XFxcXHRcXFxcdG9mIGJsb2NrcyB3aG9zZSBjb21tYW5kIG5hbWUgYXBwZWFycyBpblxcXCJcXG4gXFx0XFx0XFxcIiBcXHUwMDNjY21kbGlzdFxcdTAwM2UuXFxcXG5cXFwiXFxuLVxcdFxcdFxcXCItLWN1bGwgXFx1MDAzY3J1bGVzXFx1MDAzZVxcXFx0XFxcXHRDdWxsIGJ5IHVzZXItZGVmaW5lZCBydWxlcy4gXFx1MDAzY3J1bGVzXFx1MDAzZSBpcyBhIFxcXCJcXG4tXFx0XFx0XFxcInNpbmdsZVxcXFxuXFxcXHRcXFxcdFxcXFx0YXJndW1lbnQgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBcXFwiXFxuLVxcdFxcdFxcXCJ3aXRoIHNvbWVcXFxcblxcXFx0XFxcXHRcXFxcdGNvbW1vbiBmaWVsZHMgcHJlZGVmaW5lZCAocGlkLCB0Z2lkLCBjb21tLCBcXFwiXFxuLVxcdFxcdFxcXCJzdGFja3RyYWNlLCBhbGxvY2F0b3IpXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCItLW1vZHVsZSBcXHUwMDNjbW9kbGlzdFxcdTAwM2VcXFxcdFNlbGVjdCBieSBtb2R1bGUgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHRcXFxcdFxcXFx0b2YgYmxvY2tzIHdob3NlIG1vZHVsZSBuYW1lIGFwcGVhcnMgaW4gXFx1MDAzY21vZGxpc3RcXHUwMDNlLlxcXFxuXFxcIlxcbitcXHRcXHRcXFwiLS1jdWxsIFxcdTAwM2NydWxlc1xcdTAwM2VcXFxcdFxcXFx0Q3VsbCBieSB1c2VyLWRlZmluZWQgcnVsZXMuIFxcdTAwM2NydWxlc1xcdTAwM2UgaXMgYSBzaW5nbGVcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdGFyZ3VtZW50IGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgd2l0aCBzb21lXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgc3RhY2t0cmFjZSwgYWxsb2NhdG9yLCBtb2R1bGUpXFxcXG5cXFwiXFxuIFxcdFxcdFxcXCItLXNvcnQgXFx1MDAzY29yZGVyXFx1MDAzZVxcXFx0XFxcXHRTcGVjaWZ5IHNvcnQgb3JkZXIgYXM6IFsrfC1da2V5WyxbK3wtXWtleVssLi4uXV1cXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdEF2YWlsYWJsZSBrZXlzOlxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHRcXFxcdFxcXFx0ICBwaWQocCksIHRnaWQodGcpLCBuYW1lKG4pLCBzdGFja3RyYWNlKHN0KSxcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdCAgdHh0KFQpLCBhbGxvY190cyhhdCksIGFsbG9jYXRvcihhdG9yKSwgbW9kdWxlKG1vZClcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdFRoZSBcXFxcXFxcIitcXFxcXFxcIiBpcyBvcHRpb25hbCBzaW5jZSBkZWZhdWx0IGRpcmVjdGlvbiBpc1xcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHRcXFxcdFxcXFx0aW5jcmVhc2luZyBudW1lcmljYWwgb3IgbGV4aWNvZ3JhcGhpYyBvcmRlci5cXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdE1peGVkIHVzZSBvZiBhYmJyZXZpYXRlZCBhbmQgY29tcGxldGUtZm9ybSBpcyBhbGxvd2VkLlxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHRcXFxcdFxcXFx0RXhhbXBsZXM6XFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHQgIC0tc29ydD1uLCtwaWQsLXRnaWRcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdCAgLS1zb3J0PW1vZCxhdFxcXFxuXFxcIlxcbiBcXHQpO1xcbiB9XFxuIFxcbkBAIC03MjEsMTMgKzc5NywxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdHsgXFxcIm5hbWVcXFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMyB9LFxcbiBcXHRcXHR7IFxcXCJjdWxsXFxcIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDQgfSxcXG4gXFx0XFx0eyBcXFwic29ydFxcXCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA1IH0sXFxuK1xcdFxcdHsgXFxcIm1vZHVsZVxcXCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2IH0sXFxuIFxcdFxcdHsgXFxcImhlbHBcXFwiLCBub19hcmd1bWVudCwgTlVMTCwgJ2gnIH0sXFxuIFxcdFxcdHsgMCwgMCwgMCwgMH0sXFxuIFxcdH07XFxuIFxcbiBcXHRjb21wYXJlX2ZsYWcgPSBDT01QX05PX0ZMQUc7XFxuIFxcbi1cXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFxcXCJhZG1ucHN0UGhcXFwiLCBsb25nb3B0cywgTlVMTCkpICE9IC0xKVxcbitcXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFxcXCJhZG1ucHN0UE1oXFxcIiwgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSlcXG4gXFx0XFx0c3dpdGNoIChvcHQpIHtcXG4gXFx0XFx0Y2FzZSAnYSc6XFxuIFxcdFxcdFxcdGNvbXBhcmVfZmxhZyB8PSBDT01QX0FMTE9DO1xcbkBAIC03NTMsNiArODMwLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRjYXNlICduJzpcXG4gXFx0XFx0XFx0Y29tcGFyZV9mbGFnIHw9IENPTVBfQ09NTTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgJ00nOlxcbitcXHRcXHRcXHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9NT0RVTEU7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlICdoJzpcXG4gXFx0XFx0XFx0dXNhZ2UoKTtcXG4gXFx0XFx0XFx0ZXhpdCgwKTtcXG5AQCAtNzkyLDYgKzg3MiwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdFxcdGV4aXQoMSk7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgNjpcXG4rXFx0XFx0XFx0ZmlsdGVyID0gZmlsdGVyIHwgRklMVEVSX01PRFVMRTtcXG4rXFx0XFx0XFx0ZmMubW9kdWxlcyA9IGV4cGxvZGUoJywnLCBvcHRhcmcsIFxcdTAwMjZmYy5tb2R1bGVzX3NpemUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0dXNhZ2UoKTtcXG4gXFx0XFx0XFx0ZXhpdCgxKTtcXG5AQCAtODIxLDYgKzkwNSw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9zdGFja3RyYWNlLCBTT1JUX0FTQyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIENPTVBfTk9fRkxBRzpcXG4rXFx0XFx0aWYgKHNjLnNpemUgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0LyogZmFsbHRocm91Z2ggKi9cXG4gXFx0Y2FzZSBDT01QX05VTTpcXG4gXFx0XFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9udW0sIFNPUlRfREVTQyk7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC04MzAsNiArOTE3LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRjYXNlIENPTVBfQ09NTTpcXG4gXFx0XFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9jb21tLCBTT1JUX0FTQyk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIENPTVBfTU9EVUxFOlxcbitcXHRcXHRzZXRfc2luZ2xlX2NtcChjb21wYXJlX21vZHVsZSwgU09SVF9BU0MpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0dXNhZ2UoKTtcXG4gXFx0XFx0ZXhpdCgxKTtcXG5AQCAtODUzLDYgKzk0Myw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0Z290byBvdXRfY29tbTtcXG4gXFx0aWYgKCFjaGVja19yZWdjb21wKFxcdTAwMjZ0c19uc2VjX3BhdHRlcm4sIFxcXCJ0c1xcXFxcXFxccyooWzAtOV0qKVxcXFxcXFxccypuc1xcXCIpKVxcbiBcXHRcXHRnb3RvIG91dF90cztcXG4rXFx0aWYgKCFjaGVja19yZWdjb21wKFxcdTAwMjZtb2R1bGVfcGF0dGVybiwgXFxcIlxcXFxcXFxcKzB4WzAtOWEtZl0rLzB4WzAtOWEtZl0rXFxcXFxcXFxzKlxcXFxcXFxcWyhbYS16QS1aMC05Xy1dKylcXFxcXFxcXF1cXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfbW9kdWxlO1xcbiBcXG4gXFx0ZnN0YXQoZmlsZW5vKGZpbiksIFxcdTAwMjZzdCk7XFxuIFxcdG1heF9zaXplID0gc3Quc3Rfc2l6ZSAvIDEwMDsgLyogaGFjayAuLi4gKi9cXG5AQCAtOTExLDYgKzEwMDMsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdFxcdGZwcmludGYoZm91dCwgXFxcIiwgVEdJRCAlZFxcXCIsIGxpc3RbaV0udGdpZCk7XFxuIFxcdFxcdFxcdGlmIChjdWxsIFxcdTAwMjYgQ1VMTF9DT01NIHx8IGZpbHRlciBcXHUwMDI2IEZJTFRFUl9DT01NKVxcbiBcXHRcXHRcXHRcXHRmcHJpbnRmKGZvdXQsIFxcXCIsIHRhc2tfY29tbV9uYW1lOiAlc1xcXCIsIGxpc3RbaV0uY29tbSk7XFxuK1xcdFxcdFxcdGlmIChjdWxsIFxcdTAwMjYgQ1VMTF9NT0RVTEUgfHwgZmlsdGVyIFxcdTAwMjYgRklMVEVSX01PRFVMRSlcXG4rXFx0XFx0XFx0XFx0ZnByaW50Zihmb3V0LCBcXFwiLCBtb2R1bGU6ICVzXFxcIiwgbGlzdFtpXS5tb2R1bGUpO1xcbiBcXHRcXHRcXHRpZiAoY3VsbCBcXHUwMDI2IENVTExfQUxMT0NBVE9SKSB7XFxuIFxcdFxcdFxcdFxcdGZwcmludGYoZm91dCwgXFxcIiwgXFxcIik7XFxuIFxcdFxcdFxcdFxcdHByaW50X2FsbG9jYXRvcihmb3V0LCBsaXN0W2ldLmFsbG9jYXRvcik7XFxuQEAgLTkzMSw2ICsxMDI1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRcXHRmcmVlX2Jsb2NrX2xpc3QoXFx1MDAyNmxpc3RbaV0pO1xcbiBcXHRcXHRmcmVlKGxpc3QpO1xcbiBcXHR9XFxuK291dF9tb2R1bGU6XFxuK1xcdHJlZ2ZyZWUoXFx1MDAyNm1vZHVsZV9wYXR0ZXJuKTtcXG4gb3V0X3RzOlxcbiBcXHRyZWdmcmVlKFxcdTAwMjZ0c19uc2VjX3BhdHRlcm4pO1xcbiBvdXRfY29tbTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDc6MTMuNTAyNjQzNjg3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDc4NDIxOTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGVmMGNhMzcyODhmZDdlYjVlNjZiOGRkOTkwMThmZmU5ZjdkNGZkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDAzOjA3OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbmluZGV4IGE2YmQzZmU2NDIzYWQuLmJkMDI3Mzc3ZGZmNmUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XG5AQCAtMTk5LDYgKzE5OSw3IEBAIFVzYWdlXG4gXHRcdC1wXHRcdFNvcnQgYnkgcGlkLlxuIFx0XHQtUFx0XHRTb3J0IGJ5IHRnaWQuXG4gXHRcdC1uXHRcdFNvcnQgYnkgdGFzayBjb21tYW5kIG5hbWUuXG4rXHRcdC1NXHRcdFNvcnQgYnkgbW9kdWxlIG5hbWUuXG4gXHRcdC1yXHRcdFNvcnQgYnkgbWVtb3J5IHJlbGVhc2UgdGltZS5cbiBcdFx0LXNcdFx0U29ydCBieSBzdGFjayB0cmFjZS5cbiBcdFx0LXRcdFx0U29ydCBieSB0aW1lcyAoZGVmYXVsdCkuXG5AQCAtMjQwLDggKzI0MSwxMCBAQCBVc2FnZVxuIFx0XHRcdFx0XHRncm91cCBJRCBudW1iZXJzIGFwcGVhciBpbiBcdTAwM2N0Z2lkbGlzdFx1MDAzZS5cbiBcdFx0LS1uYW1lIFx1MDAzY2NtZGxpc3RcdTAwM2VcdFNlbGVjdCBieSB0YXNrIGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2VcbiBcdFx0XHRcdFx0dGFzayBjb21tYW5kIG5hbWUgYXBwZWFyIGluIFx1MDAzY2NtZGxpc3RcdTAwM2UuXG4rXHRcdC0tbW9kdWxlIFx1MDAzY21vZGxpc3RcdTAwM2VcdFNlbGVjdCBieSBtb2R1bGUgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2VcbitcdFx0XHRcdFx0bW9kdWxlIG5hbWUgYXBwZWFyIGluIFx1MDAzY21vZGxpc3RcdTAwM2UuXG4gXG4tXHRcdFx1MDAzY3BpZGxpc3RcdTAwM2UsIFx1MDAzY3RnaWRsaXN0XHUwMDNlLCBcdTAwM2NjbWRsaXN0XHUwMDNlIGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsXG4rXHRcdFx1MDAzY3BpZGxpc3RcdTAwM2UsIFx1MDAzY3RnaWRsaXN0XHUwMDNlLCBcdTAwM2NjbWRsaXN0XHUwMDNlLCBcdTAwM2Ntb2RsaXN0XHUwMDNlIGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsXG4gXHRcdHdoaWNoIG9mZmVycyBhIHdheSB0byBzcGVjaWZ5IGluZGl2aWR1YWwgc2VsZWN0aW5nIHJ1bGVzLlxuIFxuIFxuQEAgLTI0OSw2ICsyNTIsNyBAQCBVc2FnZVxuIFx0XHRcdFx0Li9wYWdlX293bmVyX3NvcnQgXHUwMDNjaW5wdXRcdTAwM2UgXHUwMDNjb3V0cHV0XHUwMDNlIC0tcGlkPTFcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLXRnaWQ9MSwyLDNcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLW5hbWUgbmFtZTEsbmFtZTJcbitcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLW1vZHVsZSB4ZnMsZXh0NFxuIFxuIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT1cbkBAIC0yNjUsNiArMjY5LDcgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlNcbiBcdGZ0XHRcdGZyZWVfdHNcdFx0dGltZXN0YW1wIG9mIHRoZSBwYWdlIHdoZW4gaXQgd2FzIHJlbGVhc2VkXG4gXHRhdFx0XHRhbGxvY190c1x0dGltZXN0YW1wIG9mIHRoZSBwYWdlIHdoZW4gaXQgd2FzIGFsbG9jYXRlZFxuIFx0YXRvclx0XHRhbGxvY2F0b3JcdG1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzXG4rXHRtb2RcdFx0bW9kdWxlXHRcdGtlcm5lbCBtb2R1bGUgbmFtZVxuIFxuICAgRm9yIC0tY3VsbCBvcHRpb246XG4gXG5AQCAtMjc1LDYgKzI4MCw3IEBAIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTXG4gXHRmXHRcdGZyZWVcdFx0d2hldGhlciB0aGUgcGFnZSBoYXMgYmVlbiByZWxlYXNlZCBvciBub3RcbiBcdHN0XHRcdHN0YWNrdHJhY2VcdHN0YWNrIHRyYWNlIG9mIHRoZSBwYWdlIGFsbG9jYXRpb25cbiBcdGF0b3JcdFx0YWxsb2NhdG9yXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xuK1x0bW9kXHRcdG1vZHVsZVx0XHRrZXJuZWwgbW9kdWxlIG5hbWVcbiBcbiBGaWx0ZXJpbmcgcGFnZV9vd25lciBvdXRwdXRcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xuaW5kZXggMzVkM2QyNTQ5NDFjOS4uMTZhYzYyMWI3NGY2MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jXG4rKysgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xuQEAgLTI1LDExICsyNSwxMyBAQFxuICNpbmNsdWRlIFx1MDAzY2dldG9wdC5oXHUwMDNlXG4gXG4gI2RlZmluZSBUQVNLX0NPTU1fTEVOIDE2XG4rI2RlZmluZSBNT0RVTEVfTkFNRV9MRU4gNjRcbiBcbiBzdHJ1Y3QgYmxvY2tfbGlzdCB7XG4gXHRjaGFyICp0eHQ7XG4gXHRjaGFyICpjb21tOyAvLyB0YXNrIGNvbW1hbmQgbmFtZVxuIFx0Y2hhciAqc3RhY2t0cmFjZTtcbitcdGNoYXIgKm1vZHVsZTsgLy8ga2VybmVsIG1vZHVsZSBuYW1lXG4gXHRfX3U2NCB0c19uc2VjO1xuIFx0aW50IGxlbjtcbiBcdGludCBudW07XG5AQCAtNDEsNyArNDMsOCBAQCBzdHJ1Y3QgYmxvY2tfbGlzdCB7XG4gZW51bSBGSUxURVJfQklUIHtcbiBcdEZJTFRFUl9QSUQgPSAxXHUwMDNjXHUwMDNjMSxcbiBcdEZJTFRFUl9UR0lEID0gMVx1MDAzY1x1MDAzYzIsXG4tXHRGSUxURVJfQ09NTSA9IDFcdTAwM2NcdTAwM2MzXG4rXHRGSUxURVJfQ09NTSA9IDFcdTAwM2NcdTAwM2MzLFxuK1x0RklMVEVSX01PRFVMRSA9IDFcdTAwM2NcdTAwM2M0XG4gfTtcbiBcbiBlbnVtIEZJTFRFUl9SRVNVTFQge1xuQEAgLTU1LDcgKzU4LDggQEAgZW51bSBDVUxMX0JJVCB7XG4gXHRDVUxMX1RHSUQgPSAxXHUwMDNjXHUwMDNjMixcbiBcdENVTExfQ09NTSA9IDFcdTAwM2NcdTAwM2MzLFxuIFx0Q1VMTF9TVEFDS1RSQUNFID0gMVx1MDAzY1x1MDAzYzQsXG4tXHRDVUxMX0FMTE9DQVRPUiA9IDFcdTAwM2NcdTAwM2M1XG4rXHRDVUxMX0FMTE9DQVRPUiA9IDFcdTAwM2NcdTAwM2M1LFxuK1x0Q1VMTF9NT0RVTEUgPSAxXHUwMDNjXHUwMDNjNlxuIH07XG4gZW51bSBBTExPQ0FUT1JfQklUIHtcbiBcdEFMTE9DQVRPUl9DTUEgPSAxXHUwMDNjXHUwMDNjMSxcbkBAIC02NSw3ICs2OSw4IEBAIGVudW0gQUxMT0NBVE9SX0JJVCB7XG4gfTtcbiBlbnVtIEFSR19UWVBFIHtcbiBcdEFSR19UWFQsIEFSR19DT01NLCBBUkdfU1RBQ0tUUkFDRSwgQVJHX0FMTE9DX1RTLCBBUkdfQ1VMTF9USU1FLFxuLVx0QVJHX1BBR0VfTlVNLCBBUkdfUElELCBBUkdfVEdJRCwgQVJHX1VOS05PV04sIEFSR19BTExPQ0FUT1JcbitcdEFSR19QQUdFX05VTSwgQVJHX1BJRCwgQVJHX1RHSUQsIEFSR19VTktOT1dOLCBBUkdfQUxMT0NBVE9SLFxuK1x0QVJHX01PRFVMRVxuIH07XG4gZW51bSBTT1JUX09SREVSIHtcbiBcdFNPUlRfQVNDID0gMSxcbkBAIC03OSwxNSArODQsMTggQEAgZW51bSBDT01QX0ZMQUcge1xuIFx0Q09NUF9TVEFDSyA9IDFcdTAwM2NcdTAwM2MzLFxuIFx0Q09NUF9OVU0gPSAxXHUwMDNjXHUwMDNjNCxcbiBcdENPTVBfVEdJRCA9IDFcdTAwM2NcdTAwM2M1LFxuLVx0Q09NUF9DT01NID0gMVx1MDAzY1x1MDAzYzZcbitcdENPTVBfQ09NTSA9IDFcdTAwM2NcdTAwM2M2LFxuK1x0Q09NUF9NT0RVTEUgPSAxXHUwMDNjXHUwMDNjN1xuIH07XG4gc3RydWN0IGZpbHRlcl9jb25kaXRpb24ge1xuIFx0cGlkX3QgKnBpZHM7XG4gXHRwaWRfdCAqdGdpZHM7XG4gXHRjaGFyICoqY29tbXM7XG4rXHRjaGFyICoqbW9kdWxlcztcbiBcdGludCBwaWRzX3NpemU7XG4gXHRpbnQgdGdpZHNfc2l6ZTtcbiBcdGludCBjb21tc19zaXplO1xuK1x0aW50IG1vZHVsZXNfc2l6ZTtcbiB9O1xuIHN0cnVjdCBzb3J0X2NvbmRpdGlvbiB7XG4gXHRpbnQgKCoqY21wcykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopO1xuQEAgLTEwMSw2ICsxMDksNyBAQCBzdGF0aWMgcmVnZXhfdCBwaWRfcGF0dGVybjtcbiBzdGF0aWMgcmVnZXhfdCB0Z2lkX3BhdHRlcm47XG4gc3RhdGljIHJlZ2V4X3QgY29tbV9wYXR0ZXJuO1xuIHN0YXRpYyByZWdleF90IHRzX25zZWNfcGF0dGVybjtcbitzdGF0aWMgcmVnZXhfdCBtb2R1bGVfcGF0dGVybjtcbiBzdGF0aWMgc3RydWN0IGJsb2NrX2xpc3QgKmxpc3Q7XG4gc3RhdGljIGludCBsaXN0X3NpemU7XG4gc3RhdGljIGludCBtYXhfc2l6ZTtcbkBAIC0xODQsNiArMTkzLDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jb21tKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiBcdHJldHVybiBzdHJjbXAobDEtXHUwMDNlY29tbSwgbDItXHUwMDNlY29tbSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgY29tcGFyZV9tb2R1bGUoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcbitcbitcdHJldHVybiBzdHJjbXAobDEtXHUwMDNlbW9kdWxlLCBsMi1cdTAwM2Vtb2R1bGUpO1xuK31cbitcbiBzdGF0aWMgaW50IGNvbXBhcmVfdHMoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcbkBAIC0yMDcsNiArMjIzLDggQEAgc3RhdGljIGludCBjb21wYXJlX2N1bGxfY29uZGl0aW9uKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiBcdFx0cmV0dXJuIGNvbXBhcmVfdGdpZChwMSwgcDIpO1xuIFx0aWYgKChjdWxsIFx1MDAyNiBDVUxMX0NPTU0pIFx1MDAyNlx1MDAyNiBjb21wYXJlX2NvbW0ocDEsIHAyKSlcbiBcdFx0cmV0dXJuIGNvbXBhcmVfY29tbShwMSwgcDIpO1xuK1x0aWYgKChjdWxsIFx1MDAyNiBDVUxMX01PRFVMRSkgXHUwMDI2XHUwMDI2IGNvbXBhcmVfbW9kdWxlKHAxLCBwMikpXG4rXHRcdHJldHVybiBjb21wYXJlX21vZHVsZShwMSwgcDIpO1xuIFx0aWYgKChjdWxsIFx1MDAyNiBDVUxMX0FMTE9DQVRPUikgXHUwMDI2XHUwMDI2IGNvbXBhcmVfYWxsb2NhdG9yKHAxLCBwMikpXG4gXHRcdHJldHVybiBjb21wYXJlX2FsbG9jYXRvcihwMSwgcDIpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDExLDkgKzQyOSwzMyBAQCBzdGF0aWMgY2hhciAqZ2V0X2NvbW0oY2hhciAqYnVmKVxuIFx0cmV0dXJuIGNvbW1fc3RyO1xuIH1cbiBcbitzdGF0aWMgY2hhciAqZ2V0X21vZHVsZShjaGFyICpidWYpXG4re1xuK1x0Y2hhciAqbW9kdWxlX3N0ciA9IG1hbGxvYyhNT0RVTEVfTkFNRV9MRU4pO1xuK1x0cmVnbWF0Y2hfdCBwbWF0Y2hbMl07XG4rXHRpbnQgdmFsX2xlbjtcbitcbitcdGlmICghbW9kdWxlX3N0cilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRtZW1zZXQobW9kdWxlX3N0ciwgMCwgTU9EVUxFX05BTUVfTEVOKTtcbitcdGlmIChyZWdleGVjKFx1MDAyNm1vZHVsZV9wYXR0ZXJuLCBidWYsIDIsIHBtYXRjaCwgUkVHX05PVEJPTCkgIT0gMCB8fCBwbWF0Y2hbMV0ucm1fc28gPT0gLTEpIHtcbitcdFx0c3RyY3B5KG1vZHVsZV9zdHIsIFwidm1saW51eFwiKTtcbitcdFx0cmV0dXJuIG1vZHVsZV9zdHI7XG4rXHR9XG4rXG4rXHR2YWxfbGVuID0gcG1hdGNoWzFdLnJtX2VvIC0gcG1hdGNoWzFdLnJtX3NvO1xuK1x0aWYgKChzaXplX3QpdmFsX2xlbiBcdTAwM2U9IE1PRFVMRV9OQU1FX0xFTilcbitcdFx0dmFsX2xlbiA9IE1PRFVMRV9OQU1FX0xFTiAtIDE7XG4rXHRtZW1jcHkobW9kdWxlX3N0ciwgYnVmICsgcG1hdGNoWzFdLnJtX3NvLCB2YWxfbGVuKTtcbitcdG1vZHVsZV9zdHJbdmFsX2xlbl0gPSAnXFwwJztcbitcbitcdHJldHVybiBtb2R1bGVfc3RyO1xuK31cbitcbiBzdGF0aWMgdm9pZCBmcmVlX2Jsb2NrX2xpc3Qoc3RydWN0IGJsb2NrX2xpc3QgKmJsb2NrKVxuIHtcbiBcdGZyZWUoYmxvY2stXHUwMDNlY29tbSk7XG4rXHRmcmVlKGJsb2NrLVx1MDAzZW1vZHVsZSk7XG4gXHRmcmVlKGJsb2NrLVx1MDAzZXR4dCk7XG4gfVxuIFxuQEAgLTQzMyw2ICs0NzUsOCBAQCBzdGF0aWMgaW50IGdldF9hcmdfdHlwZShjb25zdCBjaGFyICphcmcpXG4gXHRcdHJldHVybiBBUkdfQUxMT0NfVFM7XG4gXHRlbHNlIGlmICghc3RyY21wKGFyZywgXCJhbGxvY2F0b3JcIikgfHwgIXN0cmNtcChhcmcsIFwiYXRvclwiKSlcbiBcdFx0cmV0dXJuIEFSR19BTExPQ0FUT1I7XG4rXHRlbHNlIGlmICghc3RyY21wKGFyZywgXCJtb2R1bGVcIikgfHwgIXN0cmNtcChhcmcsIFwibW9kXCIpKVxuK1x0XHRyZXR1cm4gQVJHX01PRFVMRTtcbiBcdGVsc2Uge1xuIFx0XHRyZXR1cm4gQVJHX1VOS05PV047XG4gXHR9XG5AQCAtNDgzLDI1ICs1MjcsMzYgQEAgc3RhdGljIGJvb2wgbWF0Y2hfc3RyX2xpc3QoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqbGlzdCwgaW50IGxpc3Rfc2l6ZSlcbiBcbiBzdGF0aWMgZW51bSBGSUxURVJfUkVTVUxUIGZpbHRlcl9yZWNvcmQoY2hhciAqYnVmKVxuIHtcbi1cdGNoYXIgKmNvbW07XG4rXHRjaGFyICpjb21tLCAqbW9kdWxlO1xuIFxuIFx0aWYgKChmaWx0ZXIgXHUwMDI2IEZJTFRFUl9QSUQpIFx1MDAyNlx1MDAyNiAhbWF0Y2hfbnVtX2xpc3QoZ2V0X3BpZChidWYpLCBmYy5waWRzLCBmYy5waWRzX3NpemUpKVxuIFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4gXHRpZiAoKGZpbHRlciBcdTAwMjYgRklMVEVSX1RHSUQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhbWF0Y2hfbnVtX2xpc3QoZ2V0X3RnaWQoYnVmKSwgZmMudGdpZHMsIGZjLnRnaWRzX3NpemUpKVxuIFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4tXHRpZiAoIShmaWx0ZXIgXHUwMDI2IEZJTFRFUl9DT01NKSlcbitcdGlmICghKGZpbHRlciBcdTAwMjYgKEZJTFRFUl9DT01NIHwgRklMVEVSX01PRFVMRSkpKVxuIFx0XHRyZXR1cm4gRklMVEVSX01BVENIO1xuIFxuLVx0Y29tbSA9IGdldF9jb21tKGJ1Zik7XG4tXHRpZiAoIWNvbW0pXG4tXHRcdHJldHVybiBGSUxURVJfRVJST1I7XG4tXG4tXHRpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkge1xuK1x0aWYgKGZpbHRlciBcdTAwMjYgRklMVEVSX0NPTU0pIHtcbitcdFx0Y29tbSA9IGdldF9jb21tKGJ1Zik7XG4rXHRcdGlmICghY29tbSlcbitcdFx0XHRyZXR1cm4gRklMVEVSX0VSUk9SO1xuK1x0XHRpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkge1xuK1x0XHRcdGZyZWUoY29tbSk7XG4rXHRcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuK1x0XHR9XG4gXHRcdGZyZWUoY29tbSk7XG4tXHRcdHJldHVybiBGSUxURVJfU0tJUDtcbiBcdH1cbi1cdGZyZWUoY29tbSk7XG4rXHRpZiAoZmlsdGVyIFx1MDAyNiBGSUxURVJfTU9EVUxFKSB7XG4rXHRcdG1vZHVsZSA9IGdldF9tb2R1bGUoYnVmKTtcbitcdFx0aWYgKCFtb2R1bGUpXG4rXHRcdFx0cmV0dXJuIEZJTFRFUl9FUlJPUjtcbitcdFx0aWYgKCFtYXRjaF9zdHJfbGlzdChtb2R1bGUsIGZjLm1vZHVsZXMsIGZjLm1vZHVsZXNfc2l6ZSkpIHtcbitcdFx0XHRmcmVlKG1vZHVsZSk7XG4rXHRcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuK1x0XHR9XG4rXHRcdGZyZWUobW9kdWxlKTtcbitcdH1cbiBcdHJldHVybiBGSUxURVJfTUFUQ0g7XG4gfVxuIFxuQEAgLTU0Nyw2ICs2MDIsMTIgQEAgc3RhdGljIGJvb2wgYWRkX2xpc3QoY2hhciAqYnVmLCBpbnQgbGVuLCBjaGFyICpleHRfYnVmKVxuIFx0XHRsaXN0W2xpc3Rfc2l6ZV0uc3RhY2t0cmFjZSsrO1xuIFx0bGlzdFtsaXN0X3NpemVdLnRzX25zZWMgPSBnZXRfdHNfbnNlYyhidWYpO1xuIFx0bGlzdFtsaXN0X3NpemVdLmFsbG9jYXRvciA9IGdldF9hbGxvY2F0b3IoYnVmLCBleHRfYnVmKTtcbitcdGxpc3RbbGlzdF9zaXplXS5tb2R1bGUgPSBnZXRfbW9kdWxlKGJ1Zik7XG4rXHRpZiAoIWxpc3RbbGlzdF9zaXplXS5tb2R1bGUpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiT3V0IG9mIG1lbW9yeVxcblwiKTtcbitcdFx0ZnJlZV9ibG9ja19saXN0KFx1MDAyNmxpc3RbbGlzdF9zaXplXSk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbiBcdGxpc3Rfc2l6ZSsrO1xuIFx0aWYgKGxpc3Rfc2l6ZSAlIDEwMDAgPT0gMCkge1xuIFx0XHRwcmludGYoXCJsb2FkZWQgJWRcXHJcIiwgbGlzdF9zaXplKTtcbkBAIC01NzMsNiArNjM0LDggQEAgc3RhdGljIGJvb2wgcGFyc2VfY3VsbF9hcmdzKGNvbnN0IGNoYXIgKmFyZ19zdHIpXG4gXHRcdFx0Y3VsbCB8PSBDVUxMX1NUQUNLVFJBQ0U7XG4gXHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXG4gXHRcdFx0Y3VsbCB8PSBDVUxMX0FMTE9DQVRPUjtcbitcdFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSlcbitcdFx0XHRjdWxsIHw9IENVTExfTU9EVUxFO1xuIFx0XHRlbHNlIHtcbiBcdFx0XHRmcmVlX2V4cGxvZGUoYXJncywgc2l6ZSk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTYzNSw2ICs2OTgsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9zb3J0X2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cilcbiBcdFx0XHRzYy5jbXBzW2ldID0gY29tcGFyZV90eHQ7XG4gXHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXG4gXHRcdFx0c2MuY21wc1tpXSA9IGNvbXBhcmVfYWxsb2NhdG9yO1xuK1x0XHRlbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfTU9EVUxFKVxuK1x0XHRcdHNjLmNtcHNbaV0gPSBjb21wYXJlX21vZHVsZTtcbiBcdFx0ZWxzZSB7XG4gXHRcdFx0ZnJlZV9leHBsb2RlKGFyZ3MsIHNpemUpO1xuIFx0XHRcdHNjLnNpemUgPSAwO1xuQEAgLTY5MSw3ICs3NTYsOCBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuIFx0XHRcIi1wXFx0XFx0XFx0U29ydCBieSBwaWQuXFxuXCJcbiBcdFx0XCItUFxcdFxcdFxcdFNvcnQgYnkgdGdpZC5cXG5cIlxuIFx0XHRcIi1zXFx0XFx0XFx0U29ydCBieSB0aGUgc3RhY2t0cmFjZS5cXG5cIlxuLVx0XHRcIi10XFx0XFx0XFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxcblxcblwiXG4rXHRcdFwiLXRcXHRcXHRcXHRTb3J0IGJ5IG51bWJlciBvZiB0aW1lcyByZWNvcmQgaXMgc2VlbiAoZGVmYXVsdCkuXFxuXCJcbitcdFx0XCItTVxcdFxcdFxcdFNvcnQgYnkgbW9kdWxlIG5hbWUuXFxuXFxuXCJcbiBcdFx0XCItLXBpZCBcdTAwM2NwaWRsaXN0XHUwMDNlXFx0XFx0U2VsZWN0IGJ5IHBpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblwiXG4gXHRcdFwiIG9mXFxuXFx0XFx0XFx0YmxvY2tzIHdob3NlIHByb2Nlc3MgSUQgbnVtYmVycyBhcHBlYXIgaW4gXHUwMDNjcGlkbGlzdFx1MDAzZS5cXG5cIlxuIFx0XHRcIi0tdGdpZCBcdTAwM2N0Z2lkbGlzdFx1MDAzZVxcdFNlbGVjdCBieSB0Z2lkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uXCJcbkBAIC03MDAsMTEgKzc2NiwyMSBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuIFx0XHRcIi0tbmFtZSBcdTAwM2NjbWRsaXN0XHUwMDNlXFx0U2VsZWN0IGJ5IGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZVwiXG4gXHRcdFwiIGluZm9ybWF0aW9uXFxuXFx0XFx0XFx0b2YgYmxvY2tzIHdob3NlIGNvbW1hbmQgbmFtZSBhcHBlYXJzIGluXCJcbiBcdFx0XCIgXHUwMDNjY21kbGlzdFx1MDAzZS5cXG5cIlxuLVx0XHRcIi0tY3VsbCBcdTAwM2NydWxlc1x1MDAzZVxcdFxcdEN1bGwgYnkgdXNlci1kZWZpbmVkIHJ1bGVzLiBcdTAwM2NydWxlc1x1MDAzZSBpcyBhIFwiXG4tXHRcdFwic2luZ2xlXFxuXFx0XFx0XFx0YXJndW1lbnQgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBcIlxuLVx0XHRcIndpdGggc29tZVxcblxcdFxcdFxcdGNvbW1vbiBmaWVsZHMgcHJlZGVmaW5lZCAocGlkLCB0Z2lkLCBjb21tLCBcIlxuLVx0XHRcInN0YWNrdHJhY2UsIGFsbG9jYXRvcilcXG5cIlxuK1x0XHRcIi0tbW9kdWxlIFx1MDAzY21vZGxpc3RcdTAwM2VcXHRTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cXG5cIlxuK1x0XHRcIlxcdFxcdFxcdG9mIGJsb2NrcyB3aG9zZSBtb2R1bGUgbmFtZSBhcHBlYXJzIGluIFx1MDAzY21vZGxpc3RcdTAwM2UuXFxuXCJcbitcdFx0XCItLWN1bGwgXHUwMDNjcnVsZXNcdTAwM2VcXHRcXHRDdWxsIGJ5IHVzZXItZGVmaW5lZCBydWxlcy4gXHUwMDNjcnVsZXNcdTAwM2UgaXMgYSBzaW5nbGVcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdGFyZ3VtZW50IGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgd2l0aCBzb21lXFxuXCJcbitcdFx0XCJcXHRcXHRcXHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgc3RhY2t0cmFjZSwgYWxsb2NhdG9yLCBtb2R1bGUpXFxuXCJcbiBcdFx0XCItLXNvcnQgXHUwMDNjb3JkZXJcdTAwM2VcXHRcXHRTcGVjaWZ5IHNvcnQgb3JkZXIgYXM6IFsrfC1da2V5WyxbK3wtXWtleVssLi4uXV1cXG5cIlxuK1x0XHRcIlxcdFxcdFxcdEF2YWlsYWJsZSBrZXlzOlxcblwiXG4rXHRcdFwiXFx0XFx0XFx0ICBwaWQocCksIHRnaWQodGcpLCBuYW1lKG4pLCBzdGFja3RyYWNlKHN0KSxcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdCAgdHh0KFQpLCBhbGxvY190cyhhdCksIGFsbG9jYXRvcihhdG9yKSwgbW9kdWxlKG1vZClcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdFRoZSBcXFwiK1xcXCIgaXMgb3B0aW9uYWwgc2luY2UgZGVmYXVsdCBkaXJlY3Rpb24gaXNcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdGluY3JlYXNpbmcgbnVtZXJpY2FsIG9yIGxleGljb2dyYXBoaWMgb3JkZXIuXFxuXCJcbitcdFx0XCJcXHRcXHRcXHRNaXhlZCB1c2Ugb2YgYWJicmV2aWF0ZWQgYW5kIGNvbXBsZXRlLWZvcm0gaXMgYWxsb3dlZC5cXG5cIlxuK1x0XHRcIlxcdFxcdFxcdEV4YW1wbGVzOlxcblwiXG4rXHRcdFwiXFx0XFx0XFx0ICAtLXNvcnQ9biwrcGlkLC10Z2lkXFxuXCJcbitcdFx0XCJcXHRcXHRcXHQgIC0tc29ydD1tb2QsYXRcXG5cIlxuIFx0KTtcbiB9XG4gXG5AQCAtNzIxLDEzICs3OTcsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHR7IFwibmFtZVwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMyB9LFxuIFx0XHR7IFwiY3VsbFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNCB9LFxuIFx0XHR7IFwic29ydFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNSB9LFxuK1x0XHR7IFwibW9kdWxlXCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2IH0sXG4gXHRcdHsgXCJoZWxwXCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnaCcgfSxcbiBcdFx0eyAwLCAwLCAwLCAwfSxcbiBcdH07XG4gXG4gXHRjb21wYXJlX2ZsYWcgPSBDT01QX05PX0ZMQUc7XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwiYWRtbnBzdFBoXCIsIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpXG4rXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwiYWRtbnBzdFBNaFwiLCBsb25nb3B0cywgTlVMTCkpICE9IC0xKVxuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICdhJzpcbiBcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9BTExPQztcbkBAIC03NTMsNiArODMwLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICduJzpcbiBcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9DT01NO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdNJzpcbitcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9NT0RVTEU7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ2gnOlxuIFx0XHRcdHVzYWdlKCk7XG4gXHRcdFx0ZXhpdCgwKTtcbkBAIC03OTIsNiArODcyLDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRcdGV4aXQoMSk7XG4gXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIDY6XG4rXHRcdFx0ZmlsdGVyID0gZmlsdGVyIHwgRklMVEVSX01PRFVMRTtcbitcdFx0XHRmYy5tb2R1bGVzID0gZXhwbG9kZSgnLCcsIG9wdGFyZywgXHUwMDI2ZmMubW9kdWxlc19zaXplKTtcbitcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHR1c2FnZSgpO1xuIFx0XHRcdGV4aXQoMSk7XG5AQCAtODIxLDYgKzkwNSw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9zdGFja3RyYWNlLCBTT1JUX0FTQyk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBDT01QX05PX0ZMQUc6XG4rXHRcdGlmIChzYy5zaXplIFx1MDAzZSAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHQvKiBmYWxsdGhyb3VnaCAqL1xuIFx0Y2FzZSBDT01QX05VTTpcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9udW0sIFNPUlRfREVTQyk7XG4gXHRcdGJyZWFrO1xuQEAgLTgzMCw2ICs5MTcsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRjYXNlIENPTVBfQ09NTTpcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9jb21tLCBTT1JUX0FTQyk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBDT01QX01PRFVMRTpcbitcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9tb2R1bGUsIFNPUlRfQVNDKTtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR1c2FnZSgpO1xuIFx0XHRleGl0KDEpO1xuQEAgLTg1Myw2ICs5NDMsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGdvdG8gb3V0X2NvbW07XG4gXHRpZiAoIWNoZWNrX3JlZ2NvbXAoXHUwMDI2dHNfbnNlY19wYXR0ZXJuLCBcInRzXFxcXHMqKFswLTldKilcXFxccypuc1wiKSlcbiBcdFx0Z290byBvdXRfdHM7XG4rXHRpZiAoIWNoZWNrX3JlZ2NvbXAoXHUwMDI2bW9kdWxlX3BhdHRlcm4sIFwiXFxcXCsweFswLTlhLWZdKy8weFswLTlhLWZdK1xcXFxzKlxcXFxbKFthLXpBLVowLTlfLV0rKVxcXFxdXCIpKVxuK1x0XHRnb3RvIG91dF9tb2R1bGU7XG4gXG4gXHRmc3RhdChmaWxlbm8oZmluKSwgXHUwMDI2c3QpO1xuIFx0bWF4X3NpemUgPSBzdC5zdF9zaXplIC8gMTAwOyAvKiBoYWNrIC4uLiAqL1xuQEAgLTkxMSw2ICsxMDAzLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdFx0ZnByaW50Zihmb3V0LCBcIiwgVEdJRCAlZFwiLCBsaXN0W2ldLnRnaWQpO1xuIFx0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX0NPTU0gfHwgZmlsdGVyIFx1MDAyNiBGSUxURVJfQ09NTSlcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCIsIHRhc2tfY29tbV9uYW1lOiAlc1wiLCBsaXN0W2ldLmNvbW0pO1xuK1x0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX01PRFVMRSB8fCBmaWx0ZXIgXHUwMDI2IEZJTFRFUl9NT0RVTEUpXG4rXHRcdFx0XHRmcHJpbnRmKGZvdXQsIFwiLCBtb2R1bGU6ICVzXCIsIGxpc3RbaV0ubW9kdWxlKTtcbiBcdFx0XHRpZiAoY3VsbCBcdTAwMjYgQ1VMTF9BTExPQ0FUT1IpIHtcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCIsIFwiKTtcbiBcdFx0XHRcdHByaW50X2FsbG9jYXRvcihmb3V0LCBsaXN0W2ldLmFsbG9jYXRvcik7XG5AQCAtOTMxLDYgKzEwMjUsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0ZnJlZV9ibG9ja19saXN0KFx1MDAyNmxpc3RbaV0pO1xuIFx0XHRmcmVlKGxpc3QpO1xuIFx0fVxuK291dF9tb2R1bGU6XG4rXHRyZWdmcmVlKFx1MDAyNm1vZHVsZV9wYXR0ZXJuKTtcbiBvdXRfdHM6XG4gXHRyZWdmcmVlKFx1MDAyNnRzX25zZWNfcGF0dGVybik7XG4gb3V0X2NvbW06XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzowNzoxMy41MDI2NDQ5NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzg0MTc4Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogQSBRdWljayBBbmFseXNpcyoqXG5cbk9rYXksIGhlcmUncyB0aGUgZGVhbC4gSSd2ZSByZXZpZXdlZCB0aGlzIHBhdGNoLCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIHRvdWNoaW5nIHRoZSBgRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdGAgZmlsZSBhbmQgdGhlIGB0b29scy9tbS9wYWdlX293bmVyX3NvcnQuY2AgdXRpbGl0eS4gVGhlIGNvcmUgaWRlYSBpcyBhZGRpbmcgbW9kdWxlIG5hbWUgc29ydGluZyBhbmQgZmlsdGVyaW5nIHRvIGBwYWdlX293bmVyX3NvcnRgLiAgRXNzZW50aWFsbHksIGl0J3MgZW5oYW5jaW5nIHRoZSB1c2VyLXNwYWNlIHRvb2wgdGhhdCBwYXJzZXMgdGhlIG91dHB1dCBmcm9tIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYC5cblxuTXkgaW1tZWRpYXRlIGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nIGF0IHRoZSBrZXJuZWwgbGV2ZWwuIE5vIG1vZGlmaWNhdGlvbnMgdG8gYG1tL2AsIGBrZXJuZWwvYCwgYGRyaXZlcnMvYCwgb3IgYW55IG9mIHRoZSBjcml0aWNhbCBrZXJuZWwgc3Vic3lzdGVtcyB0aGF0IHdvdWxkIHdhcnJhbnQgZnV6emluZy4gV2UncmUgdGFsa2luZyBhYm91dCBhIHVzZXItc3BhY2UgdG9vbCBoZXJlLiBJdCdzICpwYXJzaW5nKiBrZXJuZWwgb3V0cHV0LCBub3QgKm1vZGlmeWluZyoga2VybmVsIGJlaGF2aW9yLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdC4gWWVwLCBkb3VibGUtY2hlY2tlZC4gT25seSB0aG9zZSB0d28gZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLiBObyBrZXJuZWwgY29kZSBpcyBhZmZlY3RlZC5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgdGhpcy4gSSdsbCBwcm9jZWVkIHdpdGggY2FsbGluZyBgc2V0LXJlc3VsdHNgIHdpdGggdGhhdCB2YWx1ZS4gSXQncyBhIGNsZWFuLCBub24taW52YXNpdmUgcGF0Y2ggZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3OTMsIk91dHB1dFRva2VucyI6NzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzowNzoxOC4yODY4NDIzNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2Vyc3BhY2UgdG9vbCAodG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMpIGFuZCBpdHMgZG9jdW1lbnRhdGlvbi4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2Vyc3BhY2UgdG9vbCAodG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMpIGFuZCBpdHMgZG9jdW1lbnRhdGlvbi4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6ei5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjA3OjE4LjI4Njg2NjQ5MVoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxj879[1] Phase: Running StartedAt: 2026-08-19 03:07:29 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxj879[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-19 03:07:29 +0000 UTC FinishedAt: 2026-08-19 03:07:35 +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,}