Name: series-workflowtxxqz Phase: Failed StartedAt: 2026-07-27 20:21:58 +0000 UTC FinishedAt: 2026-07-27 20:48:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxxqz[0] Phase: Succeeded StartedAt: 2026-07-27 20:21:58 +0000 UTC FinishedAt: 2026-07-27 20:47:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxxqz[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 20:21:58 +0000 UTC FinishedAt: 2026-07-27 20:47:27 +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+CgkJCTx0ZD4yMDI2LzA3LzI3IDIwOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMDo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNjYTI4MDA4YzM2ZTQ3ZjlmOTc0OTQzY2U0Zjg1YmY1MDg3Y2JmMTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAyMDo0NzowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5pbmRleCAwYzYyN2VhODlmZjdiMi4uYzFiODkyMGUyOTM0MjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbkBAIC0xNzE4LDggJiM0MzsxNzE4LDEzIEBAIHN0YXRpYyB2b2lkIHJ1bl93aXRoX3RtcGZpbGUobm9uX2Fub25fdGVzdF9mbiBmbiwgY29uc3QgY2hhciAqZGVzYylcbiBcbiBcdC8qIEZpbGUgY29uc2lzdHMgb2YgYSBzaW5nbGUgcGFnZSBmaWxsZWQgd2l0aCB6ZXJvZXMuICovXG4gXHRpZiAoZmFsbG9jYXRlKGZkLCAwLCAwLCBwYWdlc2l6ZSkpIHtcbi1cdFx0a3NmdF9wZXJyb3IoXCYjMzQ7ZmFsbG9jYXRlKCkgZmFpbGVkXCYjMzQ7KTtcbi1cdFx0bG9nX3Rlc3RfcmVzdWx0KEtTRlRfRkFJTCk7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCkge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtmYWxsb2NhdGUoKSBub3Qgc3VwcG9ydGVkIGJ5IGZpbGVzeXN0ZW1cXG5cJiMzNDspO1xuJiM0MztcdFx0XHRsb2dfdGVzdF9yZXN1bHQoS1NGVF9TS0lQKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGtzZnRfcGVycm9yKFwmIzM0O2ZhbGxvY2F0ZSgpIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGxvZ190ZXN0X3Jlc3VsdChLU0ZUX0ZBSUwpO1xuJiM0MztcdFx0fVxuIFx0XHRnb3RvIGNsb3NlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuaW5kZXggYjIxZGYzMDQwYjFjN2MuLjVjOGVjM2NhNzVkN2QyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbkBAIC0xOTEyLDcgJiM0MzsxOTEyLDcgQEAgVEVTVF9GKGd1YXJkX3JlZ2lvbnMsIGhvbGVfcHVuY2gpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbiBcdGNoYXIgKnB0cjtcbi1cdGludCBpO1xuJiM0MztcdGludCBpLCByZXQ7XG4gXG4gXHRpZiAodmFyaWFudC1cdTAwM2ViYWNraW5nID09IEFOT05fQkFDS0VEKVxuIFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7VHJ1bmNhdGlvbiB0ZXN0IHNwZWNpZmljIHRvIGZpbGUtYmFja2VkXCYjMzQ7KTtcbkBAIC0xOTQ0LDggJiM0MzsxOTQ0LDEyIEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBob2xlX3B1bmNoKVxuIFx0fVxuIFxuIFx0LyogTm93IGhvbGUgcHVuY2ggdGhlIGd1YXJkZWQgcmVnaW9uLiAqL1xuLVx0QVNTRVJUX0VRKG1hZHZpc2UoXHUwMDI2cHRyWzMgKiBwYWdlX3NpemVdLCA0ICogcGFnZV9zaXplLFxuLVx0XHRcdCAgTUFEVl9SRU1PVkUpLCAwKTtcbiYjNDM7XHRyZXQgPSBtYWR2aXNlKFx1MDAyNnB0clszICogcGFnZV9zaXplXSwgNCAqIHBhZ2Vfc2l6ZSwgTUFEVl9SRU1PVkUpO1xuJiM0MztcdGlmIChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVPUE5PVFNVUFApIHtcbiYjNDM7XHRcdEFTU0VSVF9FUShtdW5tYXAocHRyLCAxMCAqIHBhZ2Vfc2l6ZSksIDApO1xuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O01BRFZfUkVNT1ZFIG5vdCBzdXBwb3J0ZWQgYnkgZmlsZXN5c3RlbVwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuIFx0LyogRW5zdXJlIGd1YXJkIHJlZ2lvbnMgcmVtYWluLiAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTA7IGkmIzQzOyYjNDM7KSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCAxMGU4ZGVkY2IwODdkYy4uNTRlODg4ZWI0OGJiY2IgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuQEAgLTEwMCw2ICYjNDM7MTAwLDI4IEBAIHN0YXRpYyB2b2lkIHNraXAoY29uc3QgY2hhciAqbXNnKVxuIFx0ZXhpdF9zdGF0dXMgPSBLU0ZUX1NLSVA7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBpc19zd2FwX2VuYWJsZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmW01BWF9MSU5FX0xFTkdUSF07XG4mIzQzO1x0RklMRSAqZmlsZTtcbiYjNDM7XHRib29sIGVuYWJsZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0ZmlsZSA9IGZvcGVuKFwmIzM0Oy9wcm9jL3N3YXBzXCYjMzQ7LCBcJiMzNDtyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWZpbGUpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZmlsZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgZm9yIGZpcnN0IGFjdGl2ZSBzd2FwIGVudHJ5LiAqL1xuJiM0MztcdGlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKSlcbiYjNDM7XHRcdGVuYWJsZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGZjbG9zZShmaWxlKTtcbiYjNDM7XHRyZXR1cm4gZW5hYmxlZDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzYXZlX3NldHRpbmdzKHZvaWQpXG4ge1xuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U2F2ZSBUSFAgYW5kIGtodWdlcGFnZWQgc2V0dGluZ3MuLi5cJiMzNDspO1xuQEAgLTczNCwxMCAmIzQzOzc1NiwxNiBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9zd2FwaW5fc2luZ2xlX3B0ZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcFxuIHtcbiBcdHZvaWQgKnA7XG4gXG4mIzQzO1x0a3NmdF9wcmludF9tc2coXCYjMzQ7U3dhcG91dCBvbmUgcGFnZS4uLlwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFpc19zd2FwX2VuYWJsZWQoKSkge1xuJiM0MztcdFx0c2tpcChcJiMzNDtObyBhY3RpdmUgc3dhcFwmIzM0Oyk7XG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgXCYjMzQ7JXNcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKDEpO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIGhwYWdlX3BtZF9zaXplKTtcbiBcbi1cdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1N3YXBvdXQgb25lIHBhZ2UuLi5cJiMzNDspO1xuIFx0aWYgKG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX1BBR0VPVVQpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bWFkdmlzZShNQURWX1BBR0VPVVQpXCYjMzQ7KTtcbiBcdGlmIChjaGVja19zd2FwKHAsIHBhZ2Vfc2l6ZSkpIHtcbkBAIC03NjAsMTAgJiM0Mzs3ODgsMTYgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cbiBcdGludCBtYXhfcHRlc19zd2FwID0gdGhwX3JlYWRfbnVtKFwmIzM0O2todWdlcGFnZWQvbWF4X3B0ZXNfc3dhcFwmIzM0Oyk7XG4gXHR2b2lkICpwO1xuIFxuJiM0MztcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1N3YXBvdXQgJWQgb2YgJWQgcGFnZXMuLi5cJiMzNDssIG1heF9wdGVzX3N3YXAgJiM0MzsgMSwgaHBhZ2VfcG1kX25yKTtcbiYjNDM7XHRpZiAoIWlzX3N3YXBfZW5hYmxlZCgpKSB7XG4mIzQzO1x0XHRza2lwKFwmIzM0O05vIGFjdGl2ZSBzd2FwXCYjMzQ7KTtcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcJiMzNDslc1xcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEoMSk7XG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgaHBhZ2VfcG1kX3NpemUpO1xuIFxuLVx0a3NmdF9wcmludF9tc2coXCYjMzQ7U3dhcG91dCAlZCBvZiAlZCBwYWdlcy4uLlwmIzM0OywgbWF4X3B0ZXNfc3dhcCAmIzQzOyAxLCBocGFnZV9wbWRfbnIpO1xuIFx0aWYgKG1hZHZpc2UocCwgKG1heF9wdGVzX3N3YXAgJiM0MzsgMSkgKiBwYWdlX3NpemUsIE1BRFZfUEFHRU9VVCkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfUEFHRU9VVClcJiMzNDspO1xuIFx0aWYgKGNoZWNrX3N3YXAocCwgKG1heF9wdGVzX3N3YXAgJiM0MzsgMSkgKiBwYWdlX3NpemUpKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDAzMmVkOTUyMDU3YzYyLi41ZDAwYWFiMzFmOWI1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0yODMsOCAmIzQzOzI4MywxMCBAQCBURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGNsZWFuX3BhZ2VjYWNoZSlcbiBcdGlmIChmZCBcdTAwM2MgMClcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O2ZhaWxlZCB0byBvcGVuIHRlc3QgZmlsZS5cXG5cJiMzNDspO1xuIFx0ZnNfdHlwZSA9IGdldF9mc190eXBlKGZkKTtcbi1cdGlmICghZnNfdHlwZSB8fCBmc190eXBlID09IFRNUEZTX01BR0lDKVxuJiM0MztcdGlmICghZnNfdHlwZSB8fCBmc190eXBlID09IFRNUEZTX01BR0lDKSB7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDt1bnN1cHBvcnRlZCBmaWxlc3lzdGVtIDoleFxcblwmIzM0OywgZnNfdHlwZSk7XG4mIzQzO1x0fVxuIFxuIFx0YWRkciA9IG1tYXAoMCwgc2VsZi1cdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdCAgICBNQVBfU0hBUkVELCBmZCwgMCk7XG5AQCAtMzI1LDggJiM0MzszMjcsMTYgQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9wYWdlY2FjaGUpXG4gXHRpZiAoZmQgXHUwMDNjIDApXG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtmYWlsZWQgdG8gb3BlbiB0ZXN0IGZpbGUuXFxuXCYjMzQ7KTtcbiBcdGZzX3R5cGUgPSBnZXRfZnNfdHlwZShmZCk7XG4tXHRpZiAoIWZzX3R5cGUgfHwgZnNfdHlwZSA9PSBUTVBGU19NQUdJQylcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1BRFZfSEFSRCBwb2lzb25pbmcgb2YgZGlydHkgcGFnZS1jYWNoZSBkYXRhIHJlY29yZHMgYW4gZXhwZWN0ZWRcbiYjNDM7XHQgKiAtRUlPIGluIHRoZSBmaWxlIG1hcHBpbmcuIE5GUyByZXBvcnRzIHRoaXMgZXJyb3Igb24gY2xvc2UoKSwgc29cbiYjNDM7XHQgKiBza2lwIHRoaXMgdmFyaWFudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWZzX3R5cGUgfHwgZnNfdHlwZSA9PSBUTVBGU19NQUdJQyB8fFxuJiM0MztcdCAgICAoZnNfdHlwZSA9PSBORlNfU1VQRVJfTUFHSUMgXHUwMDI2XHUwMDI2IHZhcmlhbnQtXHUwMDNldHlwZSA9PSBNQURWX0hBUkQpKSB7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDt1bnN1cHBvcnRlZCBmaWxlc3lzdGVtIDoleFxcblwmIzM0OywgZnNfdHlwZSk7XG4mIzQzO1x0fVxuIFxuIFx0YWRkciA9IG1tYXAoMCwgc2VsZi1cdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdCAgICBNQVBfU0hBUkVELCBmZCwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuaW5kZXggMjlmNzQ5MjQ1M2Q0MzkuLmYxOWQ1M2M2OTU3NjQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNyw3ICYjNDM7Nyw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbi0jaW5jbHVkZSBcdTAwM2NzdHJpbmdzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NudW1hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NudW1haWYuaFx1MDAzZVxuQEAgLTIwLDcgJiM0MzsyMCw2IEBAXG4gXG4gI2RlZmluZSBUV09NRUdcdFx0KDJcdTAwM2NcdTAwM2MyMClcbiAjZGVmaW5lIFJVTlRJTUVcdFx0KDIwKVxuLSNkZWZpbmUgTUFYX1JFVFJJRVNcdDEwMFxuICNkZWZpbmUgQUxJR04oeCwgYSlcdCgoKHgpICYjNDM7IChhIC0gMSkpIFx1MDAyNiAofigoYSkgLSAxKSkpXG4gXG4gSFVHRVRMQl9TRVRVUF9ERUZBVUxUX1BBR0VTKDEpXG5AQCAtMTEwLDcgJiM0MzsxMDksNyBAQCBpbnQgbWlncmF0ZSh1aW50NjRfdCAqcHRyLCBpbnQgbjEsIGludCBuMilcbiBcdGludCByZXQsIHRtcDtcbiBcdGludCBzdGF0dXMgPSAwO1xuIFx0c3RydWN0IHRpbWVzcGVjIHRzMSwgdHMyO1xuLVx0aW50IGZhaWx1cmVzID0gMDtcbiYjNDM7XHRpbnQgc3VjY2VzcyA9IDA7XG4gXG4gXHRpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnRzMSkpXG4gXHRcdHJldHVybiAtMTtcbkBAIC0xMTksMjkgJiM0MzsxMTgsMzMgQEAgaW50IG1pZ3JhdGUodWludDY0X3QgKnB0ciwgaW50IG4xLCBpbnQgbjIpXG4gXHRcdGlmIChjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMyKSlcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRcdGlmICh0czIudHZfc2VjIC0gdHMxLnR2X3NlYyBcdTAwM2U9IFJVTlRJTUUpXG4tXHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRpZiAodHMyLnR2X3NlYyAtIHRzMS50dl9zZWMgXHUwMDNlPSBSVU5USU1FKSB7XG4mIzQzO1x0XHRcdC8qIFJlYWNoaW5nIGJvdGggdGFyZ2V0cyB2ZXJpZmllcyBhIGNyb3NzLW5vZGUgbW92ZS4gKi9cbiYjNDM7XHRcdFx0aWYgKHN1Y2Nlc3MgXHUwMDNlPSAyKVxuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0yO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRyZXQgPSBtb3ZlX3BhZ2VzKDAsIDEsICh2b2lkICoqKSBcdTAwMjZwdHIsIFx1MDAyNm4yLCBcdTAwMjZzdGF0dXMsXG4gXHRcdFx0XHRNUE9MX01GX01PVkVfQUxMKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbi1cdFx0XHRcdC8qIE1pZ3JhdGlvbiBpcyBiZXN0IGVmZm9ydDsgdHJ5IGFnYWluICovXG4tXHRcdFx0XHRpZiAoJiM0MzsmIzQzO2ZhaWx1cmVzIFx1MDAzYyBNQVhfUkVUUklFUylcbi1cdFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0XHRwcmludGYoXCYjMzQ7RGlkbiYjMzk7dCBtaWdyYXRlICVkIHBhZ2VzXFxuXCYjMzQ7LCByZXQpO1xuLVx0XHRcdH1cbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRwZXJyb3IoXCYjMzQ7Q291bGRuJiMzOTt0IG1pZ3JhdGUgcGFnZXNcJiMzNDspO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRwZXJyb3IoXCYjMzQ7Q291bGRuJiMzOTt0IG1pZ3JhdGUgcGFnZXNcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0LyogTWlncmF0aW9uIGlzIGJlc3QgZWZmb3J0LiBUcnkgYWdhaW4gKi9cbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlIDAgfHwgc3RhdHVzIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChzdGF0dXMgIT0gbjIpIHtcbiYjNDM7XHRcdFx0cHJpbnRmKFwmIzM0O1BhZ2UgaXMgb24gbm9kZSAlZCBpbnN0ZWFkIG9mIHRhcmdldCBub2RlICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgc3RhdHVzLCBuMik7XG4gXHRcdFx0cmV0dXJuIC0yO1xuIFx0XHR9XG4tXHRcdGZhaWx1cmVzID0gMDtcbiYjNDM7XHRcdHN1Y2Nlc3MmIzQzOyYjNDM7O1xuIFx0XHR0bXAgPSBuMjtcbiBcdFx0bjIgPSBuMTtcbiBcdFx0bjEgPSB0bXA7XG4gXHR9XG4tXG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4gdm9pZCAqYWNjZXNzX21lbSh2b2lkICpwdHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjA6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNjYTI4MDA4YzM2ZTQ3ZjlmOTc0OTQzY2U0Zjg1YmY1MDg3Y2JmMTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAyMDo0NzowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKaW5kZXggMGM2MjdlYTg5ZmY3YjIuLmMxYjg5MjBlMjkzNDI0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYwpAQCAtMTcxOCw4ICYjNDM7MTcxOCwxMyBAQCBzdGF0aWMgdm9pZCBydW5fd2l0aF90bXBmaWxlKG5vbl9hbm9uX3Rlc3RfZm4gZm4sIGNvbnN0IGNoYXIgKmRlc2MpCiAKIAkvKiBGaWxlIGNvbnNpc3RzIG9mIGEgc2luZ2xlIHBhZ2UgZmlsbGVkIHdpdGggemVyb2VzLiAqLwogCWlmIChmYWxsb2NhdGUoZmQsIDAsIDAsIHBhZ2VzaXplKSkgewotCQlrc2Z0X3BlcnJvcigmIzM0O2ZhbGxvY2F0ZSgpIGZhaWxlZCYjMzQ7KTsKLQkJbG9nX3Rlc3RfcmVzdWx0KEtTRlRfRkFJTCk7CiYjNDM7CQlpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCkgewomIzQzOwkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7ZmFsbG9jYXRlKCkgbm90IHN1cHBvcnRlZCBieSBmaWxlc3lzdGVtXG4mIzM0Oyk7CiYjNDM7CQkJbG9nX3Rlc3RfcmVzdWx0KEtTRlRfU0tJUCk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWtzZnRfcGVycm9yKCYjMzQ7ZmFsbG9jYXRlKCkgZmFpbGVkJiMzNDspOwomIzQzOwkJCWxvZ190ZXN0X3Jlc3VsdChLU0ZUX0ZBSUwpOwomIzQzOwkJfQogCQlnb3RvIGNsb3NlOwogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCmluZGV4IGIyMWRmMzA0MGIxYzdjLi41YzhlYzNjYTc1ZDdkMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwpAQCAtMTkxMiw3ICYjNDM7MTkxMiw3IEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBob2xlX3B1bmNoKQogewogCWNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplID0gc2VsZi0mZ3Q7cGFnZV9zaXplOwogCWNoYXIgKnB0cjsKLQlpbnQgaTsKJiM0MzsJaW50IGksIHJldDsKIAogCWlmICh2YXJpYW50LSZndDtiYWNraW5nID09IEFOT05fQkFDS0VEKQogCQlTS0lQKHJldHVybiwgJiMzNDtUcnVuY2F0aW9uIHRlc3Qgc3BlY2lmaWMgdG8gZmlsZS1iYWNrZWQmIzM0Oyk7CkBAIC0xOTQ0LDggJiM0MzsxOTQ0LDEyIEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBob2xlX3B1bmNoKQogCX0KIAogCS8qIE5vdyBob2xlIHB1bmNoIHRoZSBndWFyZGVkIHJlZ2lvbi4gKi8KLQlBU1NFUlRfRVEobWFkdmlzZSgmYW1wO3B0clszICogcGFnZV9zaXplXSwgNCAqIHBhZ2Vfc2l6ZSwKLQkJCSAgTUFEVl9SRU1PVkUpLCAwKTsKJiM0MzsJcmV0ID0gbWFkdmlzZSgmYW1wO3B0clszICogcGFnZV9zaXplXSwgNCAqIHBhZ2Vfc2l6ZSwgTUFEVl9SRU1PVkUpOwomIzQzOwlpZiAocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU9QTk9UU1VQUCkgewomIzQzOwkJQVNTRVJUX0VRKG11bm1hcChwdHIsIDEwICogcGFnZV9zaXplKSwgMCk7CiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtNQURWX1JFTU9WRSBub3Qgc3VwcG9ydGVkIGJ5IGZpbGVzeXN0ZW0mIzM0Oyk7CiYjNDM7CX0KJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiAKIAkvKiBFbnN1cmUgZ3VhcmQgcmVnaW9ucyByZW1haW4uICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IDEwOyBpJiM0MzsmIzQzOykgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDEwZThkZWRjYjA4N2RjLi41NGU4ODhlYjQ4YmJjYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwpAQCAtMTAwLDYgJiM0MzsxMDAsMjggQEAgc3RhdGljIHZvaWQgc2tpcChjb25zdCBjaGFyICptc2cpCiAJZXhpdF9zdGF0dXMgPSBLU0ZUX1NLSVA7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBpc19zd2FwX2VuYWJsZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmW01BWF9MSU5FX0xFTkdUSF07CiYjNDM7CUZJTEUgKmZpbGU7CiYjNDM7CWJvb2wgZW5hYmxlZCA9IGZhbHNlOwomIzQzOwomIzQzOwlmaWxlID0gZm9wZW4oJiMzNDsvcHJvYy9zd2FwcyYjMzQ7LCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZmlsZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBDaGVjayBmb3IgZmlyc3QgYWN0aXZlIHN3YXAgZW50cnkuICovCiYjNDM7CWlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKSkKJiM0MzsJCWVuYWJsZWQgPSB0cnVlOwomIzQzOwomIzQzO291dDoKJiM0MzsJZmNsb3NlKGZpbGUpOwomIzQzOwlyZXR1cm4gZW5hYmxlZDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBzYXZlX3NldHRpbmdzKHZvaWQpCiB7CiAJa3NmdF9wcmludF9tc2coJiMzNDtTYXZlIFRIUCBhbmQga2h1Z2VwYWdlZCBzZXR0aW5ncy4uLiYjMzQ7KTsKQEAgLTczNCwxMCAmIzQzOzc1NiwxNiBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9zd2FwaW5fc2luZ2xlX3B0ZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcAogewogCXZvaWQgKnA7CiAKJiM0MzsJa3NmdF9wcmludF9tc2coJiMzNDtTd2Fwb3V0IG9uZSBwYWdlLi4uJiMzNDspOwomIzQzOwlpZiAoIWlzX3N3YXBfZW5hYmxlZCgpKSB7CiYjNDM7CQlza2lwKCYjMzQ7Tm8gYWN0aXZlIHN3YXAmIzM0Oyk7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgJiMzNDslc1xuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXAgPSBvcHMtJmd0O3NldHVwX2FyZWEoMSk7CiAJb3BzLSZndDtmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7CiAKLQlrc2Z0X3ByaW50X21zZygmIzM0O1N3YXBvdXQgb25lIHBhZ2UuLi4mIzM0Oyk7CiAJaWYgKG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX1BBR0VPVVQpKQogCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttYWR2aXNlKE1BRFZfUEFHRU9VVCkmIzM0Oyk7CiAJaWYgKGNoZWNrX3N3YXAocCwgcGFnZV9zaXplKSkgewpAQCAtNzYwLDEwICYjNDM7Nzg4LDE2IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvCiAJaW50IG1heF9wdGVzX3N3YXAgPSB0aHBfcmVhZF9udW0oJiMzNDtraHVnZXBhZ2VkL21heF9wdGVzX3N3YXAmIzM0Oyk7CiAJdm9pZCAqcDsKIAomIzQzOwlrc2Z0X3ByaW50X21zZygmIzM0O1N3YXBvdXQgJWQgb2YgJWQgcGFnZXMuLi4mIzM0OywgbWF4X3B0ZXNfc3dhcCAmIzQzOyAxLCBocGFnZV9wbWRfbnIpOwomIzQzOwlpZiAoIWlzX3N3YXBfZW5hYmxlZCgpKSB7CiYjNDM7CQlza2lwKCYjMzQ7Tm8gYWN0aXZlIHN3YXAmIzM0Oyk7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgJiMzNDslc1xuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXAgPSBvcHMtJmd0O3NldHVwX2FyZWEoMSk7CiAJb3BzLSZndDtmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7CiAKLQlrc2Z0X3ByaW50X21zZygmIzM0O1N3YXBvdXQgJWQgb2YgJWQgcGFnZXMuLi4mIzM0OywgbWF4X3B0ZXNfc3dhcCAmIzQzOyAxLCBocGFnZV9wbWRfbnIpOwogCWlmIChtYWR2aXNlKHAsIChtYXhfcHRlc19zd2FwICYjNDM7IDEpICogcGFnZV9zaXplLCBNQURWX1BBR0VPVVQpKQogCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttYWR2aXNlKE1BRFZfUEFHRU9VVCkmIzM0Oyk7CiAJaWYgKGNoZWNrX3N3YXAocCwgKG1heF9wdGVzX3N3YXAgJiM0MzsgMSkgKiBwYWdlX3NpemUpKSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCAwMzJlZDk1MjA1N2M2Mi4uNWQwMGFhYjMxZjliNTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtMjgzLDggJiM0MzsyODMsMTAgQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBjbGVhbl9wYWdlY2FjaGUpCiAJaWYgKGZkICZsdDsgMCkKIAkJU0tJUChyZXR1cm4sICYjMzQ7ZmFpbGVkIHRvIG9wZW4gdGVzdCBmaWxlLlxuJiMzNDspOwogCWZzX3R5cGUgPSBnZXRfZnNfdHlwZShmZCk7Ci0JaWYgKCFmc190eXBlIHx8IGZzX3R5cGUgPT0gVE1QRlNfTUFHSUMpCiYjNDM7CWlmICghZnNfdHlwZSB8fCBmc190eXBlID09IFRNUEZTX01BR0lDKSB7CiYjNDM7CQljbG9zZShmZCk7CiAJCVNLSVAocmV0dXJuLCAmIzM0O3Vuc3VwcG9ydGVkIGZpbGVzeXN0ZW0gOiV4XG4mIzM0OywgZnNfdHlwZSk7CiYjNDM7CX0KIAogCWFkZHIgPSBtbWFwKDAsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJICAgIE1BUF9TSEFSRUQsIGZkLCAwKTsKQEAgLTMyNSw4ICYjNDM7MzI3LDE2IEBAIFRFU1RfRihtZW1vcnlfZmFpbHVyZSwgZGlydHlfcGFnZWNhY2hlKQogCWlmIChmZCAmbHQ7IDApCiAJCVNLSVAocmV0dXJuLCAmIzM0O2ZhaWxlZCB0byBvcGVuIHRlc3QgZmlsZS5cbiYjMzQ7KTsKIAlmc190eXBlID0gZ2V0X2ZzX3R5cGUoZmQpOwotCWlmICghZnNfdHlwZSB8fCBmc190eXBlID09IFRNUEZTX01BR0lDKQomIzQzOwkvKgomIzQzOwkgKiBNQURWX0hBUkQgcG9pc29uaW5nIG9mIGRpcnR5IHBhZ2UtY2FjaGUgZGF0YSByZWNvcmRzIGFuIGV4cGVjdGVkCiYjNDM7CSAqIC1FSU8gaW4gdGhlIGZpbGUgbWFwcGluZy4gTkZTIHJlcG9ydHMgdGhpcyBlcnJvciBvbiBjbG9zZSgpLCBzbwomIzQzOwkgKiBza2lwIHRoaXMgdmFyaWFudC4KJiM0MzsJICovCiYjNDM7CWlmICghZnNfdHlwZSB8fCBmc190eXBlID09IFRNUEZTX01BR0lDIHx8CiYjNDM7CSAgICAoZnNfdHlwZSA9PSBORlNfU1VQRVJfTUFHSUMgJmFtcDsmYW1wOyB2YXJpYW50LSZndDt0eXBlID09IE1BRFZfSEFSRCkpIHsKJiM0MzsJCWNsb3NlKGZkKTsKIAkJU0tJUChyZXR1cm4sICYjMzQ7dW5zdXBwb3J0ZWQgZmlsZXN5c3RlbSA6JXhcbiYjMzQ7LCBmc190eXBlKTsKJiM0MzsJfQogCiAJYWRkciA9IG1tYXAoMCwgc2VsZi0mZ3Q7cGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkgICAgTUFQX1NIQVJFRCwgZmQsIDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwppbmRleCAyOWY3NDkyNDUzZDQzOS4uZjE5ZDUzYzY5NTc2NDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jCkBAIC03LDcgJiM0Mzs3LDcgQEAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCi0jaW5jbHVkZSAmbHQ7c3RyaW5ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bnVtYS5oJmd0OwogI2luY2x1ZGUgJmx0O251bWFpZi5oJmd0OwpAQCAtMjAsNyAmIzQzOzIwLDYgQEAKIAogI2RlZmluZSBUV09NRUcJCSgyJmx0OyZsdDsyMCkKICNkZWZpbmUgUlVOVElNRQkJKDIwKQotI2RlZmluZSBNQVhfUkVUUklFUwkxMDAKICNkZWZpbmUgQUxJR04oeCwgYSkJKCgoeCkgJiM0MzsgKGEgLSAxKSkgJmFtcDsgKH4oKGEpIC0gMSkpKQogCiBIVUdFVExCX1NFVFVQX0RFRkFVTFRfUEFHRVMoMSkKQEAgLTExMCw3ICYjNDM7MTA5LDcgQEAgaW50IG1pZ3JhdGUodWludDY0X3QgKnB0ciwgaW50IG4xLCBpbnQgbjIpCiAJaW50IHJldCwgdG1wOwogCWludCBzdGF0dXMgPSAwOwogCXN0cnVjdCB0aW1lc3BlYyB0czEsIHRzMjsKLQlpbnQgZmFpbHVyZXMgPSAwOwomIzQzOwlpbnQgc3VjY2VzcyA9IDA7CiAKIAlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7dHMxKSkKIAkJcmV0dXJuIC0xOwpAQCAtMTE5LDI5ICYjNDM7MTE4LDMzIEBAIGludCBtaWdyYXRlKHVpbnQ2NF90ICpwdHIsIGludCBuMSwgaW50IG4yKQogCQlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7dHMyKSkKIAkJCXJldHVybiAtMTsKIAotCQlpZiAodHMyLnR2X3NlYyAtIHRzMS50dl9zZWMgJmd0Oz0gUlVOVElNRSkKLQkJCXJldHVybiAwOwomIzQzOwkJaWYgKHRzMi50dl9zZWMgLSB0czEudHZfc2VjICZndDs9IFJVTlRJTUUpIHsKJiM0MzsJCQkvKiBSZWFjaGluZyBib3RoIHRhcmdldHMgdmVyaWZpZXMgYSBjcm9zcy1ub2RlIG1vdmUuICovCiYjNDM7CQkJaWYgKHN1Y2Nlc3MgJmd0Oz0gMikKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlyZXR1cm4gLTI7CiYjNDM7CQl9CiAKIAkJcmV0ID0gbW92ZV9wYWdlcygwLCAxLCAodm9pZCAqKikgJmFtcDtwdHIsICZhbXA7bjIsICZhbXA7c3RhdHVzLAogCQkJCU1QT0xfTUZfTU9WRV9BTEwpOwotCQlpZiAocmV0KSB7Ci0JCQlpZiAocmV0ICZndDsgMCkgewotCQkJCS8qIE1pZ3JhdGlvbiBpcyBiZXN0IGVmZm9ydDsgdHJ5IGFnYWluICovCi0JCQkJaWYgKCYjNDM7JiM0MztmYWlsdXJlcyAmbHQ7IE1BWF9SRVRSSUVTKQotCQkJCQljb250aW51ZTsKLQkJCQlwcmludGYoJiMzNDtEaWRuJiMzOTt0IG1pZ3JhdGUgJWQgcGFnZXNcbiYjMzQ7LCByZXQpOwotCQkJfQotCQkJZWxzZQotCQkJCXBlcnJvcigmIzM0O0NvdWxkbiYjMzk7dCBtaWdyYXRlIHBhZ2VzJiMzNDspOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQlwZXJyb3IoJiMzNDtDb3VsZG4mIzM5O3QgbWlncmF0ZSBwYWdlcyYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwkJLyogTWlncmF0aW9uIGlzIGJlc3QgZWZmb3J0LiBUcnkgYWdhaW4gKi8KJiM0MzsJCWlmIChyZXQgJmd0OyAwIHx8IHN0YXR1cyAmbHQ7IDApCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoc3RhdHVzICE9IG4yKSB7CiYjNDM7CQkJcHJpbnRmKCYjMzQ7UGFnZSBpcyBvbiBub2RlICVkIGluc3RlYWQgb2YgdGFyZ2V0IG5vZGUgJWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBzdGF0dXMsIG4yKTsKIAkJCXJldHVybiAtMjsKIAkJfQotCQlmYWlsdXJlcyA9IDA7CiYjNDM7CQlzdWNjZXNzJiM0MzsmIzQzOzsKIAkJdG1wID0gbjI7CiAJCW4yID0gbjE7CiAJCW4xID0gdG1wOwogCX0KLQotCXJldHVybiAwOwogfQogCiB2b2lkICphY2Nlc3NfbWVtKHZvaWQgKnB0cikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5MAoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDcxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogQSBTZWxmdGVzdC1DZW50cmljIFZpZXcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQmIzM5O3MgdG91Y2hpbmcgYSBoYW5kZnVsIG9mIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gIFRoZSBmaWxlcyBhcmUgbGlzdGVkOiBgY293LmNgLCBgZ3VhcmQtcmVnaW9ucy5jYCwgYGtodWdlcGFnZWQuY2AsIGBtZW1vcnktZmFpbHVyZS5jYCwgYW5kIGBtaWdyYXRpb24uY2AuIFN0cmFpZ2h0IGF3YXksIEkmIzM5O20gdGhpbmtpbmcsIHRoZXNlIGFyZSBhbGwgc2VsZnRlc3RzLiBUaGV5JiMzOTtyZSB1c2Vyc3BhY2UgdG9vbHMgZGVzaWduZWQgdG8gZXhlcmNpc2Uga2VybmVsIGZ1bmN0aW9uYWxpdHkuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHF1aXRlIGNsZWFyLiBJZiB0aGUgcGF0Y2ggY29udGFpbnMgKm9ubHkqIG1vZGlmaWNhdGlvbnMgdG8gdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIG9yIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcsIG9yIGNoYW5nZXMgdG8gbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnRzLCBvciB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgb3Igc3BlY2lmaWMgZHJpdmVyIHRlYXItZG93biBmdW5jdGlvbnMsIHRoZW4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZW4gaXQgc2F5cyB0byBjb25maXJtIHdoZXRoZXIgJiMzNDtyZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMmIzM0OyBhcmUgbW9kaWZpZWQsIGFuZCBpZiBzbywgc2VhcmNoIGZvciBpdCB1c2luZyBjb2RlIHNlYXJjaCB0b29scywgYW5kIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLgoKTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCBob2xkIG9uIGEgc2Vjb25k4oCmIHRoZXNlIGFyZSAqc2VsZnRlc3RzKi4gVGhleSBhcmVuJiMzOTt0IGtlcm5lbCBjb2RlLiBUaGV5JiMzOTtyZSBqdXN0IHRlc3RzLiBTbywgdGhleSBkb24mIzM5O3QgbW9kaWZ5IGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIGZpbGVzIGFyZSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gIGRpcmVjdG9yeS4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGRvIEkgKmFsd2F5cyogc2F5IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBzZWxmdGVzdHM/IEl0IGRvZXMgc2VlbSB0aGF0IHdheS4gVGhleSBhcmUgdXNlcnNwYWNlIHByb2dyYW1zIHRvIHRlc3QgdGhlIGtlcm5lbCwgYnV0IHRoZSBwYXRjaCBpc24mIzM5O3QgY2hhbmdpbmcgdGhlIGtlcm5lbCBpdHNlbGYuIEZ1enppbmcgdGhlIGtlcm5lbCBiYXNlZCBvbiBzZWxmdGVzdCBjaGFuZ2VzIGRvZXNuJiMzOTt0IG1ha2UgbXVjaCBzZW5zZS4gU28gaXQmIzM5O3MgcHJvYmFibHkgYmV0dGVyIHRvIGZvY3VzIG9uIGFjdHVhbCBrZXJuZWwgY29kZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGZpbGUgbGlzdCBvbmUgbW9yZSB0aW1lOiBgY293LmNgLCBgZ3VhcmQtcmVnaW9ucy5jYCwgYGtodWdlcGFnZWQuY2AsIGBtZW1vcnktZmFpbHVyZS5jYCwgYW5kIGBtaWdyYXRpb24uY2AuIEFsbCB0aG9zZSBmaWxlcyBhcmUgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFNpbmNlIHRoZSBjaGFuZ2VzIGFyZSBhbGwgaW4gdXNlcnNwYWNlIHRlc3RzIGFuZCBkb24mIzM5O3QgdG91Y2ggY29yZSBrZXJuZWwgbG9naWMsIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBwYXRjaCBpcyBzb2xlbHkgY29uY2VybmVkIHdpdGggdGVzdGluZyBhbmQgbm90IGtlcm5lbCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMjA6NDc6MDUuODk3MTQxODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzA3NzIyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIwOjQ3OjA1Ljg5NzE0ODk4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTE3NzExNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzY2EyODAwOGMzNmU0N2Y5Zjk3NDk0M2NlNGY4NWJmNTA4N2NiZjE3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDIwOjQ3OjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG5pbmRleCAwYzYyN2VhODlmZjdiMi4uYzFiODkyMGUyOTM0MjQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xcbkBAIC0xNzE4LDggKzE3MTgsMTMgQEAgc3RhdGljIHZvaWQgcnVuX3dpdGhfdG1wZmlsZShub25fYW5vbl90ZXN0X2ZuIGZuLCBjb25zdCBjaGFyICpkZXNjKVxcbiBcXG4gXFx0LyogRmlsZSBjb25zaXN0cyBvZiBhIHNpbmdsZSBwYWdlIGZpbGxlZCB3aXRoIHplcm9lcy4gKi9cXG4gXFx0aWYgKGZhbGxvY2F0ZShmZCwgMCwgMCwgcGFnZXNpemUpKSB7XFxuLVxcdFxcdGtzZnRfcGVycm9yKFxcXCJmYWxsb2NhdGUoKSBmYWlsZWRcXFwiKTtcXG4tXFx0XFx0bG9nX3Rlc3RfcmVzdWx0KEtTRlRfRkFJTCk7XFxuK1xcdFxcdGlmIChlcnJubyA9PSBFT1BOT1RTVVBQKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJmYWxsb2NhdGUoKSBub3Qgc3VwcG9ydGVkIGJ5IGZpbGVzeXN0ZW1cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRsb2dfdGVzdF9yZXN1bHQoS1NGVF9TS0lQKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0a3NmdF9wZXJyb3IoXFxcImZhbGxvY2F0ZSgpIGZhaWxlZFxcXCIpO1xcbitcXHRcXHRcXHRsb2dfdGVzdF9yZXN1bHQoS1NGVF9GQUlMKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRnb3RvIGNsb3NlO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG5pbmRleCBiMjFkZjMwNDBiMWM3Yy4uNWM4ZWMzY2E3NWQ3ZDIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuQEAgLTE5MTIsNyArMTkxMiw3IEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBob2xlX3B1bmNoKVxcbiB7XFxuIFxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplID0gc2VsZi1cXHUwMDNlcGFnZV9zaXplO1xcbiBcXHRjaGFyICpwdHI7XFxuLVxcdGludCBpO1xcbitcXHRpbnQgaSwgcmV0O1xcbiBcXG4gXFx0aWYgKHZhcmlhbnQtXFx1MDAzZWJhY2tpbmcgPT0gQU5PTl9CQUNLRUQpXFxuIFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiVHJ1bmNhdGlvbiB0ZXN0IHNwZWNpZmljIHRvIGZpbGUtYmFja2VkXFxcIik7XFxuQEAgLTE5NDQsOCArMTk0NCwxMiBAQCBURVNUX0YoZ3VhcmRfcmVnaW9ucywgaG9sZV9wdW5jaClcXG4gXFx0fVxcbiBcXG4gXFx0LyogTm93IGhvbGUgcHVuY2ggdGhlIGd1YXJkZWQgcmVnaW9uLiAqL1xcbi1cXHRBU1NFUlRfRVEobWFkdmlzZShcXHUwMDI2cHRyWzMgKiBwYWdlX3NpemVdLCA0ICogcGFnZV9zaXplLFxcbi1cXHRcXHRcXHQgIE1BRFZfUkVNT1ZFKSwgMCk7XFxuK1xcdHJldCA9IG1hZHZpc2UoXFx1MDAyNnB0clszICogcGFnZV9zaXplXSwgNCAqIHBhZ2Vfc2l6ZSwgTUFEVl9SRU1PVkUpO1xcbitcXHRpZiAocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVPUE5PVFNVUFApIHtcXG4rXFx0XFx0QVNTRVJUX0VRKG11bm1hcChwdHIsIDEwICogcGFnZV9zaXplKSwgMCk7XFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiTUFEVl9SRU1PVkUgbm90IHN1cHBvcnRlZCBieSBmaWxlc3lzdGVtXFxcIik7XFxuK1xcdH1cXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuIFxcbiBcXHQvKiBFbnN1cmUgZ3VhcmQgcmVnaW9ucyByZW1haW4uICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDsgaSsrKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbmluZGV4IDEwZThkZWRjYjA4N2RjLi41NGU4ODhlYjQ4YmJjYiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG5AQCAtMTAwLDYgKzEwMCwyOCBAQCBzdGF0aWMgdm9pZCBza2lwKGNvbnN0IGNoYXIgKm1zZylcXG4gXFx0ZXhpdF9zdGF0dXMgPSBLU0ZUX1NLSVA7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGlzX3N3YXBfZW5hYmxlZCh2b2lkKVxcbit7XFxuK1xcdGNoYXIgYnVmW01BWF9MSU5FX0xFTkdUSF07XFxuK1xcdEZJTEUgKmZpbGU7XFxuK1xcdGJvb2wgZW5hYmxlZCA9IGZhbHNlO1xcbitcXG4rXFx0ZmlsZSA9IGZvcGVuKFxcXCIvcHJvYy9zd2Fwc1xcXCIsIFxcXCJyXFxcIik7XFxuK1xcdGlmICghZmlsZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKCFmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBDaGVjayBmb3IgZmlyc3QgYWN0aXZlIHN3YXAgZW50cnkuICovXFxuK1xcdGlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKSlcXG4rXFx0XFx0ZW5hYmxlZCA9IHRydWU7XFxuK1xcbitvdXQ6XFxuK1xcdGZjbG9zZShmaWxlKTtcXG4rXFx0cmV0dXJuIGVuYWJsZWQ7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHNhdmVfc2V0dGluZ3Modm9pZClcXG4ge1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU2F2ZSBUSFAgYW5kIGtodWdlcGFnZWQgc2V0dGluZ3MuLi5cXFwiKTtcXG5AQCAtNzM0LDEwICs3NTYsMTYgQEAgc3RhdGljIHZvaWQgY29sbGFwc2Vfc3dhcGluX3NpbmdsZV9wdGUoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BcXG4ge1xcbiBcXHR2b2lkICpwO1xcbiBcXG4rXFx0a3NmdF9wcmludF9tc2coXFxcIlN3YXBvdXQgb25lIHBhZ2UuLi5cXFwiKTtcXG4rXFx0aWYgKCFpc19zd2FwX2VuYWJsZWQoKSkge1xcbitcXHRcXHRza2lwKFxcXCJObyBhY3RpdmUgc3dhcFxcXCIpO1xcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgXFxcIiVzXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0cCA9IG9wcy1cXHUwMDNlc2V0dXBfYXJlYSgxKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuIFxcbi1cXHRrc2Z0X3ByaW50X21zZyhcXFwiU3dhcG91dCBvbmUgcGFnZS4uLlxcXCIpO1xcbiBcXHRpZiAobWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfUEFHRU9VVCkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibWFkdmlzZShNQURWX1BBR0VPVVQpXFxcIik7XFxuIFxcdGlmIChjaGVja19zd2FwKHAsIHBhZ2Vfc2l6ZSkpIHtcXG5AQCAtNzYwLDEwICs3ODgsMTYgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cXG4gXFx0aW50IG1heF9wdGVzX3N3YXAgPSB0aHBfcmVhZF9udW0oXFxcImtodWdlcGFnZWQvbWF4X3B0ZXNfc3dhcFxcXCIpO1xcbiBcXHR2b2lkICpwO1xcbiBcXG4rXFx0a3NmdF9wcmludF9tc2coXFxcIlN3YXBvdXQgJWQgb2YgJWQgcGFnZXMuLi5cXFwiLCBtYXhfcHRlc19zd2FwICsgMSwgaHBhZ2VfcG1kX25yKTtcXG4rXFx0aWYgKCFpc19zd2FwX2VuYWJsZWQoKSkge1xcbitcXHRcXHRza2lwKFxcXCJObyBhY3RpdmUgc3dhcFxcXCIpO1xcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgXFxcIiVzXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0cCA9IG9wcy1cXHUwMDNlc2V0dXBfYXJlYSgxKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuIFxcbi1cXHRrc2Z0X3ByaW50X21zZyhcXFwiU3dhcG91dCAlZCBvZiAlZCBwYWdlcy4uLlxcXCIsIG1heF9wdGVzX3N3YXAgKyAxLCBocGFnZV9wbWRfbnIpO1xcbiBcXHRpZiAobWFkdmlzZShwLCAobWF4X3B0ZXNfc3dhcCArIDEpICogcGFnZV9zaXplLCBNQURWX1BBR0VPVVQpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1hZHZpc2UoTUFEVl9QQUdFT1VUKVxcXCIpO1xcbiBcXHRpZiAoY2hlY2tfc3dhcChwLCAobWF4X3B0ZXNfc3dhcCArIDEpICogcGFnZV9zaXplKSkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IDAzMmVkOTUyMDU3YzYyLi41ZDAwYWFiMzFmOWI1NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC0yODMsOCArMjgzLDEwIEBAIFRFU1RfRihtZW1vcnlfZmFpbHVyZSwgY2xlYW5fcGFnZWNhY2hlKVxcbiBcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcImZhaWxlZCB0byBvcGVuIHRlc3QgZmlsZS5cXFxcblxcXCIpO1xcbiBcXHRmc190eXBlID0gZ2V0X2ZzX3R5cGUoZmQpO1xcbi1cXHRpZiAoIWZzX3R5cGUgfHwgZnNfdHlwZSA9PSBUTVBGU19NQUdJQylcXG4rXFx0aWYgKCFmc190eXBlIHx8IGZzX3R5cGUgPT0gVE1QRlNfTUFHSUMpIHtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcInVuc3VwcG9ydGVkIGZpbGVzeXN0ZW0gOiV4XFxcXG5cXFwiLCBmc190eXBlKTtcXG4rXFx0fVxcbiBcXG4gXFx0YWRkciA9IG1tYXAoMCwgc2VsZi1cXHUwMDNlcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbiBcXHRcXHQgICAgTUFQX1NIQVJFRCwgZmQsIDApO1xcbkBAIC0zMjUsOCArMzI3LDE2IEBAIFRFU1RfRihtZW1vcnlfZmFpbHVyZSwgZGlydHlfcGFnZWNhY2hlKVxcbiBcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcImZhaWxlZCB0byBvcGVuIHRlc3QgZmlsZS5cXFxcblxcXCIpO1xcbiBcXHRmc190eXBlID0gZ2V0X2ZzX3R5cGUoZmQpO1xcbi1cXHRpZiAoIWZzX3R5cGUgfHwgZnNfdHlwZSA9PSBUTVBGU19NQUdJQylcXG4rXFx0LypcXG4rXFx0ICogTUFEVl9IQVJEIHBvaXNvbmluZyBvZiBkaXJ0eSBwYWdlLWNhY2hlIGRhdGEgcmVjb3JkcyBhbiBleHBlY3RlZFxcbitcXHQgKiAtRUlPIGluIHRoZSBmaWxlIG1hcHBpbmcuIE5GUyByZXBvcnRzIHRoaXMgZXJyb3Igb24gY2xvc2UoKSwgc29cXG4rXFx0ICogc2tpcCB0aGlzIHZhcmlhbnQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWZzX3R5cGUgfHwgZnNfdHlwZSA9PSBUTVBGU19NQUdJQyB8fFxcbitcXHQgICAgKGZzX3R5cGUgPT0gTkZTX1NVUEVSX01BR0lDIFxcdTAwMjZcXHUwMDI2IHZhcmlhbnQtXFx1MDAzZXR5cGUgPT0gTUFEVl9IQVJEKSkge1xcbitcXHRcXHRjbG9zZShmZCk7XFxuIFxcdFxcdFNLSVAocmV0dXJuLCBcXFwidW5zdXBwb3J0ZWQgZmlsZXN5c3RlbSA6JXhcXFxcblxcXCIsIGZzX3R5cGUpO1xcbitcXHR9XFxuIFxcbiBcXHRhZGRyID0gbW1hcCgwLCBzZWxmLVxcdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuIFxcdFxcdCAgICBNQVBfU0hBUkVELCBmZCwgMCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcXG5pbmRleCAyOWY3NDkyNDUzZDQzOS4uZjE5ZDUzYzY5NTc2NDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xcbkBAIC03LDcgKzcsNyBAQFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbi0jaW5jbHVkZSBcXHUwMDNjc3RyaW5ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NudW1hLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NudW1haWYuaFxcdTAwM2VcXG5AQCAtMjAsNyArMjAsNiBAQFxcbiBcXG4gI2RlZmluZSBUV09NRUdcXHRcXHQoMlxcdTAwM2NcXHUwMDNjMjApXFxuICNkZWZpbmUgUlVOVElNRVxcdFxcdCgyMClcXG4tI2RlZmluZSBNQVhfUkVUUklFU1xcdDEwMFxcbiAjZGVmaW5lIEFMSUdOKHgsIGEpXFx0KCgoeCkgKyAoYSAtIDEpKSBcXHUwMDI2ICh+KChhKSAtIDEpKSlcXG4gXFxuIEhVR0VUTEJfU0VUVVBfREVGQVVMVF9QQUdFUygxKVxcbkBAIC0xMTAsNyArMTA5LDcgQEAgaW50IG1pZ3JhdGUodWludDY0X3QgKnB0ciwgaW50IG4xLCBpbnQgbjIpXFxuIFxcdGludCByZXQsIHRtcDtcXG4gXFx0aW50IHN0YXR1cyA9IDA7XFxuIFxcdHN0cnVjdCB0aW1lc3BlYyB0czEsIHRzMjtcXG4tXFx0aW50IGZhaWx1cmVzID0gMDtcXG4rXFx0aW50IHN1Y2Nlc3MgPSAwO1xcbiBcXG4gXFx0aWYgKGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2dHMxKSlcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbkBAIC0xMTksMjkgKzExOCwzMyBAQCBpbnQgbWlncmF0ZSh1aW50NjRfdCAqcHRyLCBpbnQgbjEsIGludCBuMilcXG4gXFx0XFx0aWYgKGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2dHMyKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4tXFx0XFx0aWYgKHRzMi50dl9zZWMgLSB0czEudHZfc2VjIFxcdTAwM2U9IFJVTlRJTUUpXFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRpZiAodHMyLnR2X3NlYyAtIHRzMS50dl9zZWMgXFx1MDAzZT0gUlVOVElNRSkge1xcbitcXHRcXHRcXHQvKiBSZWFjaGluZyBib3RoIHRhcmdldHMgdmVyaWZpZXMgYSBjcm9zcy1ub2RlIG1vdmUuICovXFxuK1xcdFxcdFxcdGlmIChzdWNjZXNzIFxcdTAwM2U9IDIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMjtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0cmV0ID0gbW92ZV9wYWdlcygwLCAxLCAodm9pZCAqKikgXFx1MDAyNnB0ciwgXFx1MDAyNm4yLCBcXHUwMDI2c3RhdHVzLFxcbiBcXHRcXHRcXHRcXHRNUE9MX01GX01PVkVfQUxMKTtcXG4tXFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRcXHQvKiBNaWdyYXRpb24gaXMgYmVzdCBlZmZvcnQ7IHRyeSBhZ2FpbiAqL1xcbi1cXHRcXHRcXHRcXHRpZiAoKytmYWlsdXJlcyBcXHUwMDNjIE1BWF9SRVRSSUVTKVxcbi1cXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0XFx0cHJpbnRmKFxcXCJEaWRuJ3QgbWlncmF0ZSAlZCBwYWdlc1xcXFxuXFxcIiwgcmV0KTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdHBlcnJvcihcXFwiQ291bGRuJ3QgbWlncmF0ZSBwYWdlc1xcXCIpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRwZXJyb3IoXFxcIkNvdWxkbid0IG1pZ3JhdGUgcGFnZXNcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHRcXHQvKiBNaWdyYXRpb24gaXMgYmVzdCBlZmZvcnQuIFRyeSBhZ2FpbiAqL1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCB8fCBzdGF0dXMgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKHN0YXR1cyAhPSBuMikge1xcbitcXHRcXHRcXHRwcmludGYoXFxcIlBhZ2UgaXMgb24gbm9kZSAlZCBpbnN0ZWFkIG9mIHRhcmdldCBub2RlICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RhdHVzLCBuMik7XFxuIFxcdFxcdFxcdHJldHVybiAtMjtcXG4gXFx0XFx0fVxcbi1cXHRcXHRmYWlsdXJlcyA9IDA7XFxuK1xcdFxcdHN1Y2Nlc3MrKztcXG4gXFx0XFx0dG1wID0gbjI7XFxuIFxcdFxcdG4yID0gbjE7XFxuIFxcdFxcdG4xID0gdG1wO1xcbiBcXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gdm9pZCAqYWNjZXNzX21lbSh2b2lkICpwdHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIwOjQ3OjA2LjgxMDA3NDI3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgzOTQ3Nzg2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2NhMjgwMDhjMzZlNDdmOWY5NzQ5NDNjZTRmODViZjUwODdjYmYxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDIwOjQ3OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuaW5kZXggMGM2MjdlYTg5ZmY3YjIuLmMxYjg5MjBlMjkzNDI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5AQCAtMTcxOCw4ICsxNzE4LDEzIEBAIHN0YXRpYyB2b2lkIHJ1bl93aXRoX3RtcGZpbGUobm9uX2Fub25fdGVzdF9mbiBmbiwgY29uc3QgY2hhciAqZGVzYylcbiBcbiBcdC8qIEZpbGUgY29uc2lzdHMgb2YgYSBzaW5nbGUgcGFnZSBmaWxsZWQgd2l0aCB6ZXJvZXMuICovXG4gXHRpZiAoZmFsbG9jYXRlKGZkLCAwLCAwLCBwYWdlc2l6ZSkpIHtcbi1cdFx0a3NmdF9wZXJyb3IoXCJmYWxsb2NhdGUoKSBmYWlsZWRcIik7XG4tXHRcdGxvZ190ZXN0X3Jlc3VsdChLU0ZUX0ZBSUwpO1xuK1x0XHRpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiZmFsbG9jYXRlKCkgbm90IHN1cHBvcnRlZCBieSBmaWxlc3lzdGVtXFxuXCIpO1xuK1x0XHRcdGxvZ190ZXN0X3Jlc3VsdChLU0ZUX1NLSVApO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGtzZnRfcGVycm9yKFwiZmFsbG9jYXRlKCkgZmFpbGVkXCIpO1xuK1x0XHRcdGxvZ190ZXN0X3Jlc3VsdChLU0ZUX0ZBSUwpO1xuK1x0XHR9XG4gXHRcdGdvdG8gY2xvc2U7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5pbmRleCBiMjFkZjMwNDBiMWM3Yy4uNWM4ZWMzY2E3NWQ3ZDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuQEAgLTE5MTIsNyArMTkxMiw3IEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBob2xlX3B1bmNoKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplID0gc2VsZi1cdTAwM2VwYWdlX3NpemU7XG4gXHRjaGFyICpwdHI7XG4tXHRpbnQgaTtcbitcdGludCBpLCByZXQ7XG4gXG4gXHRpZiAodmFyaWFudC1cdTAwM2ViYWNraW5nID09IEFOT05fQkFDS0VEKVxuIFx0XHRTS0lQKHJldHVybiwgXCJUcnVuY2F0aW9uIHRlc3Qgc3BlY2lmaWMgdG8gZmlsZS1iYWNrZWRcIik7XG5AQCAtMTk0NCw4ICsxOTQ0LDEyIEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBob2xlX3B1bmNoKVxuIFx0fVxuIFxuIFx0LyogTm93IGhvbGUgcHVuY2ggdGhlIGd1YXJkZWQgcmVnaW9uLiAqL1xuLVx0QVNTRVJUX0VRKG1hZHZpc2UoXHUwMDI2cHRyWzMgKiBwYWdlX3NpemVdLCA0ICogcGFnZV9zaXplLFxuLVx0XHRcdCAgTUFEVl9SRU1PVkUpLCAwKTtcbitcdHJldCA9IG1hZHZpc2UoXHUwMDI2cHRyWzMgKiBwYWdlX3NpemVdLCA0ICogcGFnZV9zaXplLCBNQURWX1JFTU9WRSk7XG4rXHRpZiAocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFT1BOT1RTVVBQKSB7XG4rXHRcdEFTU0VSVF9FUShtdW5tYXAocHRyLCAxMCAqIHBhZ2Vfc2l6ZSksIDApO1xuK1x0XHRTS0lQKHJldHVybiwgXCJNQURWX1JFTU9WRSBub3Qgc3VwcG9ydGVkIGJ5IGZpbGVzeXN0ZW1cIik7XG4rXHR9XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbiBcbiBcdC8qIEVuc3VyZSBndWFyZCByZWdpb25zIHJlbWFpbi4gKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwOyBpKyspIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDEwZThkZWRjYjA4N2RjLi41NGU4ODhlYjQ4YmJjYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMTAwLDYgKzEwMCwyOCBAQCBzdGF0aWMgdm9pZCBza2lwKGNvbnN0IGNoYXIgKm1zZylcbiBcdGV4aXRfc3RhdHVzID0gS1NGVF9TS0lQO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBpc19zd2FwX2VuYWJsZWQodm9pZClcbit7XG4rXHRjaGFyIGJ1ZltNQVhfTElORV9MRU5HVEhdO1xuK1x0RklMRSAqZmlsZTtcbitcdGJvb2wgZW5hYmxlZCA9IGZhbHNlO1xuK1xuK1x0ZmlsZSA9IGZvcGVuKFwiL3Byb2Mvc3dhcHNcIiwgXCJyXCIpO1xuK1x0aWYgKCFmaWxlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZpbGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIENoZWNrIGZvciBmaXJzdCBhY3RpdmUgc3dhcCBlbnRyeS4gKi9cbitcdGlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKSlcbitcdFx0ZW5hYmxlZCA9IHRydWU7XG4rXG4rb3V0OlxuK1x0ZmNsb3NlKGZpbGUpO1xuK1x0cmV0dXJuIGVuYWJsZWQ7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNhdmVfc2V0dGluZ3Modm9pZClcbiB7XG4gXHRrc2Z0X3ByaW50X21zZyhcIlNhdmUgVEhQIGFuZCBraHVnZXBhZ2VkIHNldHRpbmdzLi4uXCIpO1xuQEAgLTczNCwxMCArNzU2LDE2IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX3N3YXBpbl9zaW5nbGVfcHRlKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wXG4ge1xuIFx0dm9pZCAqcDtcbiBcbitcdGtzZnRfcHJpbnRfbXNnKFwiU3dhcG91dCBvbmUgcGFnZS4uLlwiKTtcbitcdGlmICghaXNfc3dhcF9lbmFibGVkKCkpIHtcbitcdFx0c2tpcChcIk5vIGFjdGl2ZSBzd2FwXCIpO1xuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgXCIlc1xcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdHAgPSBvcHMtXHUwMDNlc2V0dXBfYXJlYSgxKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XG4gXG4tXHRrc2Z0X3ByaW50X21zZyhcIlN3YXBvdXQgb25lIHBhZ2UuLi5cIik7XG4gXHRpZiAobWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfUEFHRU9VVCkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1hZHZpc2UoTUFEVl9QQUdFT1VUKVwiKTtcbiBcdGlmIChjaGVja19zd2FwKHAsIHBhZ2Vfc2l6ZSkpIHtcbkBAIC03NjAsMTAgKzc4OCwxNiBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb1xuIFx0aW50IG1heF9wdGVzX3N3YXAgPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL21heF9wdGVzX3N3YXBcIik7XG4gXHR2b2lkICpwO1xuIFxuK1x0a3NmdF9wcmludF9tc2coXCJTd2Fwb3V0ICVkIG9mICVkIHBhZ2VzLi4uXCIsIG1heF9wdGVzX3N3YXAgKyAxLCBocGFnZV9wbWRfbnIpO1xuK1x0aWYgKCFpc19zd2FwX2VuYWJsZWQoKSkge1xuK1x0XHRza2lwKFwiTm8gYWN0aXZlIHN3YXBcIik7XG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcIiVzXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKDEpO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIGhwYWdlX3BtZF9zaXplKTtcbiBcbi1cdGtzZnRfcHJpbnRfbXNnKFwiU3dhcG91dCAlZCBvZiAlZCBwYWdlcy4uLlwiLCBtYXhfcHRlc19zd2FwICsgMSwgaHBhZ2VfcG1kX25yKTtcbiBcdGlmIChtYWR2aXNlKHAsIChtYXhfcHRlc19zd2FwICsgMSkgKiBwYWdlX3NpemUsIE1BRFZfUEFHRU9VVCkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1hZHZpc2UoTUFEVl9QQUdFT1VUKVwiKTtcbiBcdGlmIChjaGVja19zd2FwKHAsIChtYXhfcHRlc19zd2FwICsgMSkgKiBwYWdlX3NpemUpKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDAzMmVkOTUyMDU3YzYyLi41ZDAwYWFiMzFmOWI1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0yODMsOCArMjgzLDEwIEBAIFRFU1RfRihtZW1vcnlfZmFpbHVyZSwgY2xlYW5fcGFnZWNhY2hlKVxuIFx0aWYgKGZkIFx1MDAzYyAwKVxuIFx0XHRTS0lQKHJldHVybiwgXCJmYWlsZWQgdG8gb3BlbiB0ZXN0IGZpbGUuXFxuXCIpO1xuIFx0ZnNfdHlwZSA9IGdldF9mc190eXBlKGZkKTtcbi1cdGlmICghZnNfdHlwZSB8fCBmc190eXBlID09IFRNUEZTX01BR0lDKVxuK1x0aWYgKCFmc190eXBlIHx8IGZzX3R5cGUgPT0gVE1QRlNfTUFHSUMpIHtcbitcdFx0Y2xvc2UoZmQpO1xuIFx0XHRTS0lQKHJldHVybiwgXCJ1bnN1cHBvcnRlZCBmaWxlc3lzdGVtIDoleFxcblwiLCBmc190eXBlKTtcbitcdH1cbiBcbiBcdGFkZHIgPSBtbWFwKDAsIHNlbGYtXHUwMDNlcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHQgICAgTUFQX1NIQVJFRCwgZmQsIDApO1xuQEAgLTMyNSw4ICszMjcsMTYgQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9wYWdlY2FjaGUpXG4gXHRpZiAoZmQgXHUwMDNjIDApXG4gXHRcdFNLSVAocmV0dXJuLCBcImZhaWxlZCB0byBvcGVuIHRlc3QgZmlsZS5cXG5cIik7XG4gXHRmc190eXBlID0gZ2V0X2ZzX3R5cGUoZmQpO1xuLVx0aWYgKCFmc190eXBlIHx8IGZzX3R5cGUgPT0gVE1QRlNfTUFHSUMpXG4rXHQvKlxuK1x0ICogTUFEVl9IQVJEIHBvaXNvbmluZyBvZiBkaXJ0eSBwYWdlLWNhY2hlIGRhdGEgcmVjb3JkcyBhbiBleHBlY3RlZFxuK1x0ICogLUVJTyBpbiB0aGUgZmlsZSBtYXBwaW5nLiBORlMgcmVwb3J0cyB0aGlzIGVycm9yIG9uIGNsb3NlKCksIHNvXG4rXHQgKiBza2lwIHRoaXMgdmFyaWFudC5cbitcdCAqL1xuK1x0aWYgKCFmc190eXBlIHx8IGZzX3R5cGUgPT0gVE1QRlNfTUFHSUMgfHxcbitcdCAgICAoZnNfdHlwZSA9PSBORlNfU1VQRVJfTUFHSUMgXHUwMDI2XHUwMDI2IHZhcmlhbnQtXHUwMDNldHlwZSA9PSBNQURWX0hBUkQpKSB7XG4rXHRcdGNsb3NlKGZkKTtcbiBcdFx0U0tJUChyZXR1cm4sIFwidW5zdXBwb3J0ZWQgZmlsZXN5c3RlbSA6JXhcXG5cIiwgZnNfdHlwZSk7XG4rXHR9XG4gXG4gXHRhZGRyID0gbW1hcCgwLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0ICAgIE1BUF9TSEFSRUQsIGZkLCAwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5pbmRleCAyOWY3NDkyNDUzZDQzOS4uZjE5ZDUzYzY5NTc2NDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbkBAIC03LDcgKzcsNyBAQFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4gI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbi0jaW5jbHVkZSBcdTAwM2NzdHJpbmdzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY251bWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY251bWFpZi5oXHUwMDNlXG5AQCAtMjAsNyArMjAsNiBAQFxuIFxuICNkZWZpbmUgVFdPTUVHXHRcdCgyXHUwMDNjXHUwMDNjMjApXG4gI2RlZmluZSBSVU5USU1FXHRcdCgyMClcbi0jZGVmaW5lIE1BWF9SRVRSSUVTXHQxMDBcbiAjZGVmaW5lIEFMSUdOKHgsIGEpXHQoKCh4KSArIChhIC0gMSkpIFx1MDAyNiAofigoYSkgLSAxKSkpXG4gXG4gSFVHRVRMQl9TRVRVUF9ERUZBVUxUX1BBR0VTKDEpXG5AQCAtMTEwLDcgKzEwOSw3IEBAIGludCBtaWdyYXRlKHVpbnQ2NF90ICpwdHIsIGludCBuMSwgaW50IG4yKVxuIFx0aW50IHJldCwgdG1wO1xuIFx0aW50IHN0YXR1cyA9IDA7XG4gXHRzdHJ1Y3QgdGltZXNwZWMgdHMxLCB0czI7XG4tXHRpbnQgZmFpbHVyZXMgPSAwO1xuK1x0aW50IHN1Y2Nlc3MgPSAwO1xuIFxuIFx0aWYgKGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZ0czEpKVxuIFx0XHRyZXR1cm4gLTE7XG5AQCAtMTE5LDI5ICsxMTgsMzMgQEAgaW50IG1pZ3JhdGUodWludDY0X3QgKnB0ciwgaW50IG4xLCBpbnQgbjIpXG4gXHRcdGlmIChjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMyKSlcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRcdGlmICh0czIudHZfc2VjIC0gdHMxLnR2X3NlYyBcdTAwM2U9IFJVTlRJTUUpXG4tXHRcdFx0cmV0dXJuIDA7XG4rXHRcdGlmICh0czIudHZfc2VjIC0gdHMxLnR2X3NlYyBcdTAwM2U9IFJVTlRJTUUpIHtcbitcdFx0XHQvKiBSZWFjaGluZyBib3RoIHRhcmdldHMgdmVyaWZpZXMgYSBjcm9zcy1ub2RlIG1vdmUuICovXG4rXHRcdFx0aWYgKHN1Y2Nlc3MgXHUwMDNlPSAyKVxuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0cmV0dXJuIC0yO1xuK1x0XHR9XG4gXG4gXHRcdHJldCA9IG1vdmVfcGFnZXMoMCwgMSwgKHZvaWQgKiopIFx1MDAyNnB0ciwgXHUwMDI2bjIsIFx1MDAyNnN0YXR1cyxcbiBcdFx0XHRcdE1QT0xfTUZfTU9WRV9BTEwpO1xuLVx0XHRpZiAocmV0KSB7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuLVx0XHRcdFx0LyogTWlncmF0aW9uIGlzIGJlc3QgZWZmb3J0OyB0cnkgYWdhaW4gKi9cbi1cdFx0XHRcdGlmICgrK2ZhaWx1cmVzIFx1MDAzYyBNQVhfUkVUUklFUylcbi1cdFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0XHRwcmludGYoXCJEaWRuJ3QgbWlncmF0ZSAlZCBwYWdlc1xcblwiLCByZXQpO1xuLVx0XHRcdH1cbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRwZXJyb3IoXCJDb3VsZG4ndCBtaWdyYXRlIHBhZ2VzXCIpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0cGVycm9yKFwiQ291bGRuJ3QgbWlncmF0ZSBwYWdlc1wiKTtcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHRcdC8qIE1pZ3JhdGlvbiBpcyBiZXN0IGVmZm9ydC4gVHJ5IGFnYWluICovXG4rXHRcdGlmIChyZXQgXHUwMDNlIDAgfHwgc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoc3RhdHVzICE9IG4yKSB7XG4rXHRcdFx0cHJpbnRmKFwiUGFnZSBpcyBvbiBub2RlICVkIGluc3RlYWQgb2YgdGFyZ2V0IG5vZGUgJWRcXG5cIixcbitcdFx0XHQgICAgICAgc3RhdHVzLCBuMik7XG4gXHRcdFx0cmV0dXJuIC0yO1xuIFx0XHR9XG4tXHRcdGZhaWx1cmVzID0gMDtcbitcdFx0c3VjY2VzcysrO1xuIFx0XHR0bXAgPSBuMjtcbiBcdFx0bjIgPSBuMTtcbiBcdFx0bjEgPSB0bXA7XG4gXHR9XG4tXG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4gdm9pZCAqYWNjZXNzX21lbSh2b2lkICpwdHIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMDo0NzowNi44MTAwNzc1NDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mzk0NzI5MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBBIFNlbGZ0ZXN0LUNlbnRyaWMgVmlldyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQncyB0b3VjaGluZyBhIGhhbmRmdWwgb2YgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiAgVGhlIGZpbGVzIGFyZSBsaXN0ZWQ6IGBjb3cuY2AsIGBndWFyZC1yZWdpb25zLmNgLCBga2h1Z2VwYWdlZC5jYCwgYG1lbW9yeS1mYWlsdXJlLmNgLCBhbmQgYG1pZ3JhdGlvbi5jYC4gU3RyYWlnaHQgYXdheSwgSSdtIHRoaW5raW5nLCB0aGVzZSBhcmUgYWxsIHNlbGZ0ZXN0cy4gVGhleSdyZSB1c2Vyc3BhY2UgdG9vbHMgZGVzaWduZWQgdG8gZXhlcmNpc2Uga2VybmVsIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgdGhlIGluc3RydWN0aW9ucyBhcmUgcXVpdGUgY2xlYXIuIElmIHRoZSBwYXRjaCBjb250YWlucyAqb25seSogbW9kaWZpY2F0aW9ucyB0byB0aGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGZpbGVzLCBjb21tZW50cywgb3IgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZywgb3IgY2hhbmdlcyB0byBub24tZnVuY3Rpb25hbCBjb25zdGFudHMsIG9yIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBvciBzcGVjaWZpYyBkcml2ZXIgdGVhci1kb3duIGZ1bmN0aW9ucywgdGhlbiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlbiBpdCBzYXlzIHRvIGNvbmZpcm0gd2hldGhlciBcInJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlc1wiIGFyZSBtb2RpZmllZCwgYW5kIGlmIHNvLCBzZWFyY2ggZm9yIGl0IHVzaW5nIGNvZGUgc2VhcmNoIHRvb2xzLCBhbmQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgaG9sZCBvbiBhIHNlY29uZOKApiB0aGVzZSBhcmUgKnNlbGZ0ZXN0cyouIFRoZXkgYXJlbid0IGtlcm5lbCBjb2RlLiBUaGV5J3JlIGp1c3QgdGVzdHMuIFNvLCB0aGV5IGRvbid0IG1vZGlmeSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZSBmaWxlcyBhcmUgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCBkaXJlY3RvcnkuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGRvIEkgKmFsd2F5cyogc2F5IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBzZWxmdGVzdHM/IEl0IGRvZXMgc2VlbSB0aGF0IHdheS4gVGhleSBhcmUgdXNlcnNwYWNlIHByb2dyYW1zIHRvIHRlc3QgdGhlIGtlcm5lbCwgYnV0IHRoZSBwYXRjaCBpc24ndCBjaGFuZ2luZyB0aGUga2VybmVsIGl0c2VsZi4gRnV6emluZyB0aGUga2VybmVsIGJhc2VkIG9uIHNlbGZ0ZXN0IGNoYW5nZXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UuIFNvIGl0J3MgcHJvYmFibHkgYmV0dGVyIHRvIGZvY3VzIG9uIGFjdHVhbCBrZXJuZWwgY29kZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBmaWxlIGxpc3Qgb25lIG1vcmUgdGltZTogYGNvdy5jYCwgYGd1YXJkLXJlZ2lvbnMuY2AsIGBraHVnZXBhZ2VkLmNgLCBgbWVtb3J5LWZhaWx1cmUuY2AsIGFuZCBgbWlncmF0aW9uLmNgLiBBbGwgdGhvc2UgZmlsZXMgYXJlIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBTaW5jZSB0aGUgY2hhbmdlcyBhcmUgYWxsIGluIHVzZXJzcGFjZSB0ZXN0cyBhbmQgZG9uJ3QgdG91Y2ggY29yZSBrZXJuZWwgbG9naWMsIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBwYXRjaCBpcyBzb2xlbHkgY29uY2VybmVkIHdpdGggdGVzdGluZyBhbmQgbm90IGtlcm5lbCBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5MCwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIwOjQ3OjE1LjIwNDgxMDkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowtxxqz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 20:21:58 +0000 UTC FinishedAt: 2026-07-27 20:47:16 +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+CgkJCTx0ZD4yMDI2LzA3LzI3IDIwOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMDo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNjYTI4MDA4YzM2ZTQ3ZjlmOTc0OTQzY2U0Zjg1YmY1MDg3Y2JmMTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAyMDo0NzowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5pbmRleCAwYzYyN2VhODlmZjdiMi4uYzFiODkyMGUyOTM0MjQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbkBAIC0xNzE4LDggJiM0MzsxNzE4LDEzIEBAIHN0YXRpYyB2b2lkIHJ1bl93aXRoX3RtcGZpbGUobm9uX2Fub25fdGVzdF9mbiBmbiwgY29uc3QgY2hhciAqZGVzYylcbiBcbiBcdC8qIEZpbGUgY29uc2lzdHMgb2YgYSBzaW5nbGUgcGFnZSBmaWxsZWQgd2l0aCB6ZXJvZXMuICovXG4gXHRpZiAoZmFsbG9jYXRlKGZkLCAwLCAwLCBwYWdlc2l6ZSkpIHtcbi1cdFx0a3NmdF9wZXJyb3IoXCYjMzQ7ZmFsbG9jYXRlKCkgZmFpbGVkXCYjMzQ7KTtcbi1cdFx0bG9nX3Rlc3RfcmVzdWx0KEtTRlRfRkFJTCk7XG4mIzQzO1x0XHRpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCkge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtmYWxsb2NhdGUoKSBub3Qgc3VwcG9ydGVkIGJ5IGZpbGVzeXN0ZW1cXG5cJiMzNDspO1xuJiM0MztcdFx0XHRsb2dfdGVzdF9yZXN1bHQoS1NGVF9TS0lQKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGtzZnRfcGVycm9yKFwmIzM0O2ZhbGxvY2F0ZSgpIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGxvZ190ZXN0X3Jlc3VsdChLU0ZUX0ZBSUwpO1xuJiM0MztcdFx0fVxuIFx0XHRnb3RvIGNsb3NlO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuaW5kZXggYjIxZGYzMDQwYjFjN2MuLjVjOGVjM2NhNzVkN2QyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbkBAIC0xOTEyLDcgJiM0MzsxOTEyLDcgQEAgVEVTVF9GKGd1YXJkX3JlZ2lvbnMsIGhvbGVfcHVuY2gpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbiBcdGNoYXIgKnB0cjtcbi1cdGludCBpO1xuJiM0MztcdGludCBpLCByZXQ7XG4gXG4gXHRpZiAodmFyaWFudC1cdTAwM2ViYWNraW5nID09IEFOT05fQkFDS0VEKVxuIFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7VHJ1bmNhdGlvbiB0ZXN0IHNwZWNpZmljIHRvIGZpbGUtYmFja2VkXCYjMzQ7KTtcbkBAIC0xOTQ0LDggJiM0MzsxOTQ0LDEyIEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBob2xlX3B1bmNoKVxuIFx0fVxuIFxuIFx0LyogTm93IGhvbGUgcHVuY2ggdGhlIGd1YXJkZWQgcmVnaW9uLiAqL1xuLVx0QVNTRVJUX0VRKG1hZHZpc2UoXHUwMDI2cHRyWzMgKiBwYWdlX3NpemVdLCA0ICogcGFnZV9zaXplLFxuLVx0XHRcdCAgTUFEVl9SRU1PVkUpLCAwKTtcbiYjNDM7XHRyZXQgPSBtYWR2aXNlKFx1MDAyNnB0clszICogcGFnZV9zaXplXSwgNCAqIHBhZ2Vfc2l6ZSwgTUFEVl9SRU1PVkUpO1xuJiM0MztcdGlmIChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVPUE5PVFNVUFApIHtcbiYjNDM7XHRcdEFTU0VSVF9FUShtdW5tYXAocHRyLCAxMCAqIHBhZ2Vfc2l6ZSksIDApO1xuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O01BRFZfUkVNT1ZFIG5vdCBzdXBwb3J0ZWQgYnkgZmlsZXN5c3RlbVwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuIFxuIFx0LyogRW5zdXJlIGd1YXJkIHJlZ2lvbnMgcmVtYWluLiAqL1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTA7IGkmIzQzOyYjNDM7KSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCAxMGU4ZGVkY2IwODdkYy4uNTRlODg4ZWI0OGJiY2IgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuQEAgLTEwMCw2ICYjNDM7MTAwLDI4IEBAIHN0YXRpYyB2b2lkIHNraXAoY29uc3QgY2hhciAqbXNnKVxuIFx0ZXhpdF9zdGF0dXMgPSBLU0ZUX1NLSVA7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBpc19zd2FwX2VuYWJsZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmW01BWF9MSU5FX0xFTkdUSF07XG4mIzQzO1x0RklMRSAqZmlsZTtcbiYjNDM7XHRib29sIGVuYWJsZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0ZmlsZSA9IGZvcGVuKFwmIzM0Oy9wcm9jL3N3YXBzXCYjMzQ7LCBcJiMzNDtyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWZpbGUpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZmlsZSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgZm9yIGZpcnN0IGFjdGl2ZSBzd2FwIGVudHJ5LiAqL1xuJiM0MztcdGlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKSlcbiYjNDM7XHRcdGVuYWJsZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGZjbG9zZShmaWxlKTtcbiYjNDM7XHRyZXR1cm4gZW5hYmxlZDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzYXZlX3NldHRpbmdzKHZvaWQpXG4ge1xuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7U2F2ZSBUSFAgYW5kIGtodWdlcGFnZWQgc2V0dGluZ3MuLi5cJiMzNDspO1xuQEAgLTczNCwxMCAmIzQzOzc1NiwxNiBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9zd2FwaW5fc2luZ2xlX3B0ZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcFxuIHtcbiBcdHZvaWQgKnA7XG4gXG4mIzQzO1x0a3NmdF9wcmludF9tc2coXCYjMzQ7U3dhcG91dCBvbmUgcGFnZS4uLlwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFpc19zd2FwX2VuYWJsZWQoKSkge1xuJiM0MztcdFx0c2tpcChcJiMzNDtObyBhY3RpdmUgc3dhcFwmIzM0Oyk7XG4mIzQzO1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgXCYjMzQ7JXNcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKDEpO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIGhwYWdlX3BtZF9zaXplKTtcbiBcbi1cdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1N3YXBvdXQgb25lIHBhZ2UuLi5cJiMzNDspO1xuIFx0aWYgKG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX1BBR0VPVVQpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bWFkdmlzZShNQURWX1BBR0VPVVQpXCYjMzQ7KTtcbiBcdGlmIChjaGVja19zd2FwKHAsIHBhZ2Vfc2l6ZSkpIHtcbkBAIC03NjAsMTAgJiM0Mzs3ODgsMTYgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cbiBcdGludCBtYXhfcHRlc19zd2FwID0gdGhwX3JlYWRfbnVtKFwmIzM0O2todWdlcGFnZWQvbWF4X3B0ZXNfc3dhcFwmIzM0Oyk7XG4gXHR2b2lkICpwO1xuIFxuJiM0MztcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1N3YXBvdXQgJWQgb2YgJWQgcGFnZXMuLi5cJiMzNDssIG1heF9wdGVzX3N3YXAgJiM0MzsgMSwgaHBhZ2VfcG1kX25yKTtcbiYjNDM7XHRpZiAoIWlzX3N3YXBfZW5hYmxlZCgpKSB7XG4mIzQzO1x0XHRza2lwKFwmIzM0O05vIGFjdGl2ZSBzd2FwXCYjMzQ7KTtcbiYjNDM7XHRcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcJiMzNDslc1xcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwID0gb3BzLVx1MDAzZXNldHVwX2FyZWEoMSk7XG4gXHRvcHMtXHUwMDNlZmF1bHQocCwgMCwgaHBhZ2VfcG1kX3NpemUpO1xuIFxuLVx0a3NmdF9wcmludF9tc2coXCYjMzQ7U3dhcG91dCAlZCBvZiAlZCBwYWdlcy4uLlwmIzM0OywgbWF4X3B0ZXNfc3dhcCAmIzQzOyAxLCBocGFnZV9wbWRfbnIpO1xuIFx0aWYgKG1hZHZpc2UocCwgKG1heF9wdGVzX3N3YXAgJiM0MzsgMSkgKiBwYWdlX3NpemUsIE1BRFZfUEFHRU9VVCkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcJiMzNDttYWR2aXNlKE1BRFZfUEFHRU9VVClcJiMzNDspO1xuIFx0aWYgKGNoZWNrX3N3YXAocCwgKG1heF9wdGVzX3N3YXAgJiM0MzsgMSkgKiBwYWdlX3NpemUpKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDAzMmVkOTUyMDU3YzYyLi41ZDAwYWFiMzFmOWI1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0yODMsOCAmIzQzOzI4MywxMCBAQCBURVNUX0YobWVtb3J5X2ZhaWx1cmUsIGNsZWFuX3BhZ2VjYWNoZSlcbiBcdGlmIChmZCBcdTAwM2MgMClcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O2ZhaWxlZCB0byBvcGVuIHRlc3QgZmlsZS5cXG5cJiMzNDspO1xuIFx0ZnNfdHlwZSA9IGdldF9mc190eXBlKGZkKTtcbi1cdGlmICghZnNfdHlwZSB8fCBmc190eXBlID09IFRNUEZTX01BR0lDKVxuJiM0MztcdGlmICghZnNfdHlwZSB8fCBmc190eXBlID09IFRNUEZTX01BR0lDKSB7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDt1bnN1cHBvcnRlZCBmaWxlc3lzdGVtIDoleFxcblwmIzM0OywgZnNfdHlwZSk7XG4mIzQzO1x0fVxuIFxuIFx0YWRkciA9IG1tYXAoMCwgc2VsZi1cdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdCAgICBNQVBfU0hBUkVELCBmZCwgMCk7XG5AQCAtMzI1LDggJiM0MzszMjcsMTYgQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9wYWdlY2FjaGUpXG4gXHRpZiAoZmQgXHUwMDNjIDApXG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtmYWlsZWQgdG8gb3BlbiB0ZXN0IGZpbGUuXFxuXCYjMzQ7KTtcbiBcdGZzX3R5cGUgPSBnZXRfZnNfdHlwZShmZCk7XG4tXHRpZiAoIWZzX3R5cGUgfHwgZnNfdHlwZSA9PSBUTVBGU19NQUdJQylcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1BRFZfSEFSRCBwb2lzb25pbmcgb2YgZGlydHkgcGFnZS1jYWNoZSBkYXRhIHJlY29yZHMgYW4gZXhwZWN0ZWRcbiYjNDM7XHQgKiAtRUlPIGluIHRoZSBmaWxlIG1hcHBpbmcuIE5GUyByZXBvcnRzIHRoaXMgZXJyb3Igb24gY2xvc2UoKSwgc29cbiYjNDM7XHQgKiBza2lwIHRoaXMgdmFyaWFudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWZzX3R5cGUgfHwgZnNfdHlwZSA9PSBUTVBGU19NQUdJQyB8fFxuJiM0MztcdCAgICAoZnNfdHlwZSA9PSBORlNfU1VQRVJfTUFHSUMgXHUwMDI2XHUwMDI2IHZhcmlhbnQtXHUwMDNldHlwZSA9PSBNQURWX0hBUkQpKSB7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDt1bnN1cHBvcnRlZCBmaWxlc3lzdGVtIDoleFxcblwmIzM0OywgZnNfdHlwZSk7XG4mIzQzO1x0fVxuIFxuIFx0YWRkciA9IG1tYXAoMCwgc2VsZi1cdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdCAgICBNQVBfU0hBUkVELCBmZCwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuaW5kZXggMjlmNzQ5MjQ1M2Q0MzkuLmYxOWQ1M2M2OTU3NjQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5AQCAtNyw3ICYjNDM7Nyw3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmhcJiMzNDtcbiBcbi0jaW5jbHVkZSBcdTAwM2NzdHJpbmdzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NudW1hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NudW1haWYuaFx1MDAzZVxuQEAgLTIwLDcgJiM0MzsyMCw2IEBAXG4gXG4gI2RlZmluZSBUV09NRUdcdFx0KDJcdTAwM2NcdTAwM2MyMClcbiAjZGVmaW5lIFJVTlRJTUVcdFx0KDIwKVxuLSNkZWZpbmUgTUFYX1JFVFJJRVNcdDEwMFxuICNkZWZpbmUgQUxJR04oeCwgYSlcdCgoKHgpICYjNDM7IChhIC0gMSkpIFx1MDAyNiAofigoYSkgLSAxKSkpXG4gXG4gSFVHRVRMQl9TRVRVUF9ERUZBVUxUX1BBR0VTKDEpXG5AQCAtMTEwLDcgJiM0MzsxMDksNyBAQCBpbnQgbWlncmF0ZSh1aW50NjRfdCAqcHRyLCBpbnQgbjEsIGludCBuMilcbiBcdGludCByZXQsIHRtcDtcbiBcdGludCBzdGF0dXMgPSAwO1xuIFx0c3RydWN0IHRpbWVzcGVjIHRzMSwgdHMyO1xuLVx0aW50IGZhaWx1cmVzID0gMDtcbiYjNDM7XHRpbnQgc3VjY2VzcyA9IDA7XG4gXG4gXHRpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNnRzMSkpXG4gXHRcdHJldHVybiAtMTtcbkBAIC0xMTksMjkgJiM0MzsxMTgsMzMgQEAgaW50IG1pZ3JhdGUodWludDY0X3QgKnB0ciwgaW50IG4xLCBpbnQgbjIpXG4gXHRcdGlmIChjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMyKSlcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRcdGlmICh0czIudHZfc2VjIC0gdHMxLnR2X3NlYyBcdTAwM2U9IFJVTlRJTUUpXG4tXHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRpZiAodHMyLnR2X3NlYyAtIHRzMS50dl9zZWMgXHUwMDNlPSBSVU5USU1FKSB7XG4mIzQzO1x0XHRcdC8qIFJlYWNoaW5nIGJvdGggdGFyZ2V0cyB2ZXJpZmllcyBhIGNyb3NzLW5vZGUgbW92ZS4gKi9cbiYjNDM7XHRcdFx0aWYgKHN1Y2Nlc3MgXHUwMDNlPSAyKVxuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0yO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRyZXQgPSBtb3ZlX3BhZ2VzKDAsIDEsICh2b2lkICoqKSBcdTAwMjZwdHIsIFx1MDAyNm4yLCBcdTAwMjZzdGF0dXMsXG4gXHRcdFx0XHRNUE9MX01GX01PVkVfQUxMKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbi1cdFx0XHRcdC8qIE1pZ3JhdGlvbiBpcyBiZXN0IGVmZm9ydDsgdHJ5IGFnYWluICovXG4tXHRcdFx0XHRpZiAoJiM0MzsmIzQzO2ZhaWx1cmVzIFx1MDAzYyBNQVhfUkVUUklFUylcbi1cdFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0XHRwcmludGYoXCYjMzQ7RGlkbiYjMzk7dCBtaWdyYXRlICVkIHBhZ2VzXFxuXCYjMzQ7LCByZXQpO1xuLVx0XHRcdH1cbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRwZXJyb3IoXCYjMzQ7Q291bGRuJiMzOTt0IG1pZ3JhdGUgcGFnZXNcJiMzNDspO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRwZXJyb3IoXCYjMzQ7Q291bGRuJiMzOTt0IG1pZ3JhdGUgcGFnZXNcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0LyogTWlncmF0aW9uIGlzIGJlc3QgZWZmb3J0LiBUcnkgYWdhaW4gKi9cbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlIDAgfHwgc3RhdHVzIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChzdGF0dXMgIT0gbjIpIHtcbiYjNDM7XHRcdFx0cHJpbnRmKFwmIzM0O1BhZ2UgaXMgb24gbm9kZSAlZCBpbnN0ZWFkIG9mIHRhcmdldCBub2RlICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgc3RhdHVzLCBuMik7XG4gXHRcdFx0cmV0dXJuIC0yO1xuIFx0XHR9XG4tXHRcdGZhaWx1cmVzID0gMDtcbiYjNDM7XHRcdHN1Y2Nlc3MmIzQzOyYjNDM7O1xuIFx0XHR0bXAgPSBuMjtcbiBcdFx0bjIgPSBuMTtcbiBcdFx0bjEgPSB0bXA7XG4gXHR9XG4tXG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4gdm9pZCAqYWNjZXNzX21lbSh2b2lkICpwdHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjA6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNjYTI4MDA4YzM2ZTQ3ZjlmOTc0OTQzY2U0Zjg1YmY1MDg3Y2JmMTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAyMDo0NzowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMKaW5kZXggMGM2MjdlYTg5ZmY3YjIuLmMxYjg5MjBlMjkzNDI0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuYwpAQCAtMTcxOCw4ICYjNDM7MTcxOCwxMyBAQCBzdGF0aWMgdm9pZCBydW5fd2l0aF90bXBmaWxlKG5vbl9hbm9uX3Rlc3RfZm4gZm4sIGNvbnN0IGNoYXIgKmRlc2MpCiAKIAkvKiBGaWxlIGNvbnNpc3RzIG9mIGEgc2luZ2xlIHBhZ2UgZmlsbGVkIHdpdGggemVyb2VzLiAqLwogCWlmIChmYWxsb2NhdGUoZmQsIDAsIDAsIHBhZ2VzaXplKSkgewotCQlrc2Z0X3BlcnJvcigmIzM0O2ZhbGxvY2F0ZSgpIGZhaWxlZCYjMzQ7KTsKLQkJbG9nX3Rlc3RfcmVzdWx0KEtTRlRfRkFJTCk7CiYjNDM7CQlpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCkgewomIzQzOwkJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7ZmFsbG9jYXRlKCkgbm90IHN1cHBvcnRlZCBieSBmaWxlc3lzdGVtXG4mIzM0Oyk7CiYjNDM7CQkJbG9nX3Rlc3RfcmVzdWx0KEtTRlRfU0tJUCk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWtzZnRfcGVycm9yKCYjMzQ7ZmFsbG9jYXRlKCkgZmFpbGVkJiMzNDspOwomIzQzOwkJCWxvZ190ZXN0X3Jlc3VsdChLU0ZUX0ZBSUwpOwomIzQzOwkJfQogCQlnb3RvIGNsb3NlOwogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCmluZGV4IGIyMWRmMzA0MGIxYzdjLi41YzhlYzNjYTc1ZDdkMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwpAQCAtMTkxMiw3ICYjNDM7MTkxMiw3IEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBob2xlX3B1bmNoKQogewogCWNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplID0gc2VsZi0mZ3Q7cGFnZV9zaXplOwogCWNoYXIgKnB0cjsKLQlpbnQgaTsKJiM0MzsJaW50IGksIHJldDsKIAogCWlmICh2YXJpYW50LSZndDtiYWNraW5nID09IEFOT05fQkFDS0VEKQogCQlTS0lQKHJldHVybiwgJiMzNDtUcnVuY2F0aW9uIHRlc3Qgc3BlY2lmaWMgdG8gZmlsZS1iYWNrZWQmIzM0Oyk7CkBAIC0xOTQ0LDggJiM0MzsxOTQ0LDEyIEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBob2xlX3B1bmNoKQogCX0KIAogCS8qIE5vdyBob2xlIHB1bmNoIHRoZSBndWFyZGVkIHJlZ2lvbi4gKi8KLQlBU1NFUlRfRVEobWFkdmlzZSgmYW1wO3B0clszICogcGFnZV9zaXplXSwgNCAqIHBhZ2Vfc2l6ZSwKLQkJCSAgTUFEVl9SRU1PVkUpLCAwKTsKJiM0MzsJcmV0ID0gbWFkdmlzZSgmYW1wO3B0clszICogcGFnZV9zaXplXSwgNCAqIHBhZ2Vfc2l6ZSwgTUFEVl9SRU1PVkUpOwomIzQzOwlpZiAocmV0ID09IC0xICZhbXA7JmFtcDsgZXJybm8gPT0gRU9QTk9UU1VQUCkgewomIzQzOwkJQVNTRVJUX0VRKG11bm1hcChwdHIsIDEwICogcGFnZV9zaXplKSwgMCk7CiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtNQURWX1JFTU9WRSBub3Qgc3VwcG9ydGVkIGJ5IGZpbGVzeXN0ZW0mIzM0Oyk7CiYjNDM7CX0KJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiAKIAkvKiBFbnN1cmUgZ3VhcmQgcmVnaW9ucyByZW1haW4uICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IDEwOyBpJiM0MzsmIzQzOykgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDEwZThkZWRjYjA4N2RjLi41NGU4ODhlYjQ4YmJjYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYwpAQCAtMTAwLDYgJiM0MzsxMDAsMjggQEAgc3RhdGljIHZvaWQgc2tpcChjb25zdCBjaGFyICptc2cpCiAJZXhpdF9zdGF0dXMgPSBLU0ZUX1NLSVA7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBpc19zd2FwX2VuYWJsZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmW01BWF9MSU5FX0xFTkdUSF07CiYjNDM7CUZJTEUgKmZpbGU7CiYjNDM7CWJvb2wgZW5hYmxlZCA9IGZhbHNlOwomIzQzOwomIzQzOwlmaWxlID0gZm9wZW4oJiMzNDsvcHJvYy9zd2FwcyYjMzQ7LCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZmlsZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBDaGVjayBmb3IgZmlyc3QgYWN0aXZlIHN3YXAgZW50cnkuICovCiYjNDM7CWlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKSkKJiM0MzsJCWVuYWJsZWQgPSB0cnVlOwomIzQzOwomIzQzO291dDoKJiM0MzsJZmNsb3NlKGZpbGUpOwomIzQzOwlyZXR1cm4gZW5hYmxlZDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBzYXZlX3NldHRpbmdzKHZvaWQpCiB7CiAJa3NmdF9wcmludF9tc2coJiMzNDtTYXZlIFRIUCBhbmQga2h1Z2VwYWdlZCBzZXR0aW5ncy4uLiYjMzQ7KTsKQEAgLTczNCwxMCAmIzQzOzc1NiwxNiBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9zd2FwaW5fc2luZ2xlX3B0ZShzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcAogewogCXZvaWQgKnA7CiAKJiM0MzsJa3NmdF9wcmludF9tc2coJiMzNDtTd2Fwb3V0IG9uZSBwYWdlLi4uJiMzNDspOwomIzQzOwlpZiAoIWlzX3N3YXBfZW5hYmxlZCgpKSB7CiYjNDM7CQlza2lwKCYjMzQ7Tm8gYWN0aXZlIHN3YXAmIzM0Oyk7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgJiMzNDslc1xuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXAgPSBvcHMtJmd0O3NldHVwX2FyZWEoMSk7CiAJb3BzLSZndDtmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7CiAKLQlrc2Z0X3ByaW50X21zZygmIzM0O1N3YXBvdXQgb25lIHBhZ2UuLi4mIzM0Oyk7CiAJaWYgKG1hZHZpc2UocCwgcGFnZV9zaXplLCBNQURWX1BBR0VPVVQpKQogCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttYWR2aXNlKE1BRFZfUEFHRU9VVCkmIzM0Oyk7CiAJaWYgKGNoZWNrX3N3YXAocCwgcGFnZV9zaXplKSkgewpAQCAtNzYwLDEwICYjNDM7Nzg4LDE2IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvCiAJaW50IG1heF9wdGVzX3N3YXAgPSB0aHBfcmVhZF9udW0oJiMzNDtraHVnZXBhZ2VkL21heF9wdGVzX3N3YXAmIzM0Oyk7CiAJdm9pZCAqcDsKIAomIzQzOwlrc2Z0X3ByaW50X21zZygmIzM0O1N3YXBvdXQgJWQgb2YgJWQgcGFnZXMuLi4mIzM0OywgbWF4X3B0ZXNfc3dhcCAmIzQzOyAxLCBocGFnZV9wbWRfbnIpOwomIzQzOwlpZiAoIWlzX3N3YXBfZW5hYmxlZCgpKSB7CiYjNDM7CQlza2lwKCYjMzQ7Tm8gYWN0aXZlIHN3YXAmIzM0Oyk7CiYjNDM7CQlrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgJiMzNDslc1xuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXAgPSBvcHMtJmd0O3NldHVwX2FyZWEoMSk7CiAJb3BzLSZndDtmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7CiAKLQlrc2Z0X3ByaW50X21zZygmIzM0O1N3YXBvdXQgJWQgb2YgJWQgcGFnZXMuLi4mIzM0OywgbWF4X3B0ZXNfc3dhcCAmIzQzOyAxLCBocGFnZV9wbWRfbnIpOwogCWlmIChtYWR2aXNlKHAsIChtYXhfcHRlc19zd2FwICYjNDM7IDEpICogcGFnZV9zaXplLCBNQURWX1BBR0VPVVQpKQogCQlrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoJiMzNDttYWR2aXNlKE1BRFZfUEFHRU9VVCkmIzM0Oyk7CiAJaWYgKGNoZWNrX3N3YXAocCwgKG1heF9wdGVzX3N3YXAgJiM0MzsgMSkgKiBwYWdlX3NpemUpKSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCAwMzJlZDk1MjA1N2M2Mi4uNWQwMGFhYjMxZjliNTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtMjgzLDggJiM0MzsyODMsMTAgQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBjbGVhbl9wYWdlY2FjaGUpCiAJaWYgKGZkICZsdDsgMCkKIAkJU0tJUChyZXR1cm4sICYjMzQ7ZmFpbGVkIHRvIG9wZW4gdGVzdCBmaWxlLlxuJiMzNDspOwogCWZzX3R5cGUgPSBnZXRfZnNfdHlwZShmZCk7Ci0JaWYgKCFmc190eXBlIHx8IGZzX3R5cGUgPT0gVE1QRlNfTUFHSUMpCiYjNDM7CWlmICghZnNfdHlwZSB8fCBmc190eXBlID09IFRNUEZTX01BR0lDKSB7CiYjNDM7CQljbG9zZShmZCk7CiAJCVNLSVAocmV0dXJuLCAmIzM0O3Vuc3VwcG9ydGVkIGZpbGVzeXN0ZW0gOiV4XG4mIzM0OywgZnNfdHlwZSk7CiYjNDM7CX0KIAogCWFkZHIgPSBtbWFwKDAsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJICAgIE1BUF9TSEFSRUQsIGZkLCAwKTsKQEAgLTMyNSw4ICYjNDM7MzI3LDE2IEBAIFRFU1RfRihtZW1vcnlfZmFpbHVyZSwgZGlydHlfcGFnZWNhY2hlKQogCWlmIChmZCAmbHQ7IDApCiAJCVNLSVAocmV0dXJuLCAmIzM0O2ZhaWxlZCB0byBvcGVuIHRlc3QgZmlsZS5cbiYjMzQ7KTsKIAlmc190eXBlID0gZ2V0X2ZzX3R5cGUoZmQpOwotCWlmICghZnNfdHlwZSB8fCBmc190eXBlID09IFRNUEZTX01BR0lDKQomIzQzOwkvKgomIzQzOwkgKiBNQURWX0hBUkQgcG9pc29uaW5nIG9mIGRpcnR5IHBhZ2UtY2FjaGUgZGF0YSByZWNvcmRzIGFuIGV4cGVjdGVkCiYjNDM7CSAqIC1FSU8gaW4gdGhlIGZpbGUgbWFwcGluZy4gTkZTIHJlcG9ydHMgdGhpcyBlcnJvciBvbiBjbG9zZSgpLCBzbwomIzQzOwkgKiBza2lwIHRoaXMgdmFyaWFudC4KJiM0MzsJICovCiYjNDM7CWlmICghZnNfdHlwZSB8fCBmc190eXBlID09IFRNUEZTX01BR0lDIHx8CiYjNDM7CSAgICAoZnNfdHlwZSA9PSBORlNfU1VQRVJfTUFHSUMgJmFtcDsmYW1wOyB2YXJpYW50LSZndDt0eXBlID09IE1BRFZfSEFSRCkpIHsKJiM0MzsJCWNsb3NlKGZkKTsKIAkJU0tJUChyZXR1cm4sICYjMzQ7dW5zdXBwb3J0ZWQgZmlsZXN5c3RlbSA6JXhcbiYjMzQ7LCBmc190eXBlKTsKJiM0MzsJfQogCiAJYWRkciA9IG1tYXAoMCwgc2VsZi0mZ3Q7cGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkgICAgTUFQX1NIQVJFRCwgZmQsIDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYwppbmRleCAyOWY3NDkyNDUzZDQzOS4uZjE5ZDUzYzY5NTc2NDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jCkBAIC03LDcgJiM0Mzs3LDcgQEAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2h1Z2VwYWdlX3NldHRpbmdzLmgmIzM0OwogCi0jaW5jbHVkZSAmbHQ7c3RyaW5ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtwdGhyZWFkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bnVtYS5oJmd0OwogI2luY2x1ZGUgJmx0O251bWFpZi5oJmd0OwpAQCAtMjAsNyAmIzQzOzIwLDYgQEAKIAogI2RlZmluZSBUV09NRUcJCSgyJmx0OyZsdDsyMCkKICNkZWZpbmUgUlVOVElNRQkJKDIwKQotI2RlZmluZSBNQVhfUkVUUklFUwkxMDAKICNkZWZpbmUgQUxJR04oeCwgYSkJKCgoeCkgJiM0MzsgKGEgLSAxKSkgJmFtcDsgKH4oKGEpIC0gMSkpKQogCiBIVUdFVExCX1NFVFVQX0RFRkFVTFRfUEFHRVMoMSkKQEAgLTExMCw3ICYjNDM7MTA5LDcgQEAgaW50IG1pZ3JhdGUodWludDY0X3QgKnB0ciwgaW50IG4xLCBpbnQgbjIpCiAJaW50IHJldCwgdG1wOwogCWludCBzdGF0dXMgPSAwOwogCXN0cnVjdCB0aW1lc3BlYyB0czEsIHRzMjsKLQlpbnQgZmFpbHVyZXMgPSAwOwomIzQzOwlpbnQgc3VjY2VzcyA9IDA7CiAKIAlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7dHMxKSkKIAkJcmV0dXJuIC0xOwpAQCAtMTE5LDI5ICYjNDM7MTE4LDMzIEBAIGludCBtaWdyYXRlKHVpbnQ2NF90ICpwdHIsIGludCBuMSwgaW50IG4yKQogCQlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7dHMyKSkKIAkJCXJldHVybiAtMTsKIAotCQlpZiAodHMyLnR2X3NlYyAtIHRzMS50dl9zZWMgJmd0Oz0gUlVOVElNRSkKLQkJCXJldHVybiAwOwomIzQzOwkJaWYgKHRzMi50dl9zZWMgLSB0czEudHZfc2VjICZndDs9IFJVTlRJTUUpIHsKJiM0MzsJCQkvKiBSZWFjaGluZyBib3RoIHRhcmdldHMgdmVyaWZpZXMgYSBjcm9zcy1ub2RlIG1vdmUuICovCiYjNDM7CQkJaWYgKHN1Y2Nlc3MgJmd0Oz0gMikKJiM0MzsJCQkJcmV0dXJuIDA7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlyZXR1cm4gLTI7CiYjNDM7CQl9CiAKIAkJcmV0ID0gbW92ZV9wYWdlcygwLCAxLCAodm9pZCAqKikgJmFtcDtwdHIsICZhbXA7bjIsICZhbXA7c3RhdHVzLAogCQkJCU1QT0xfTUZfTU9WRV9BTEwpOwotCQlpZiAocmV0KSB7Ci0JCQlpZiAocmV0ICZndDsgMCkgewotCQkJCS8qIE1pZ3JhdGlvbiBpcyBiZXN0IGVmZm9ydDsgdHJ5IGFnYWluICovCi0JCQkJaWYgKCYjNDM7JiM0MztmYWlsdXJlcyAmbHQ7IE1BWF9SRVRSSUVTKQotCQkJCQljb250aW51ZTsKLQkJCQlwcmludGYoJiMzNDtEaWRuJiMzOTt0IG1pZ3JhdGUgJWQgcGFnZXNcbiYjMzQ7LCByZXQpOwotCQkJfQotCQkJZWxzZQotCQkJCXBlcnJvcigmIzM0O0NvdWxkbiYjMzk7dCBtaWdyYXRlIHBhZ2VzJiMzNDspOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQlwZXJyb3IoJiMzNDtDb3VsZG4mIzM5O3QgbWlncmF0ZSBwYWdlcyYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwkJLyogTWlncmF0aW9uIGlzIGJlc3QgZWZmb3J0LiBUcnkgYWdhaW4gKi8KJiM0MzsJCWlmIChyZXQgJmd0OyAwIHx8IHN0YXR1cyAmbHQ7IDApCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoc3RhdHVzICE9IG4yKSB7CiYjNDM7CQkJcHJpbnRmKCYjMzQ7UGFnZSBpcyBvbiBub2RlICVkIGluc3RlYWQgb2YgdGFyZ2V0IG5vZGUgJWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBzdGF0dXMsIG4yKTsKIAkJCXJldHVybiAtMjsKIAkJfQotCQlmYWlsdXJlcyA9IDA7CiYjNDM7CQlzdWNjZXNzJiM0MzsmIzQzOzsKIAkJdG1wID0gbjI7CiAJCW4yID0gbjE7CiAJCW4xID0gdG1wOwogCX0KLQotCXJldHVybiAwOwogfQogCiB2b2lkICphY2Nlc3NfbWVtKHZvaWQgKnB0cikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5MAoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDcxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogQSBTZWxmdGVzdC1DZW50cmljIFZpZXcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQmIzM5O3MgdG91Y2hpbmcgYSBoYW5kZnVsIG9mIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gIFRoZSBmaWxlcyBhcmUgbGlzdGVkOiBgY293LmNgLCBgZ3VhcmQtcmVnaW9ucy5jYCwgYGtodWdlcGFnZWQuY2AsIGBtZW1vcnktZmFpbHVyZS5jYCwgYW5kIGBtaWdyYXRpb24uY2AuIFN0cmFpZ2h0IGF3YXksIEkmIzM5O20gdGhpbmtpbmcsIHRoZXNlIGFyZSBhbGwgc2VsZnRlc3RzLiBUaGV5JiMzOTtyZSB1c2Vyc3BhY2UgdG9vbHMgZGVzaWduZWQgdG8gZXhlcmNpc2Uga2VybmVsIGZ1bmN0aW9uYWxpdHkuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHF1aXRlIGNsZWFyLiBJZiB0aGUgcGF0Y2ggY29udGFpbnMgKm9ubHkqIG1vZGlmaWNhdGlvbnMgdG8gdGhpbmdzIGxpa2UgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBmaWxlcywgY29tbWVudHMsIG9yIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcsIG9yIGNoYW5nZXMgdG8gbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnRzLCBvciB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgb3Igc3BlY2lmaWMgZHJpdmVyIHRlYXItZG93biBmdW5jdGlvbnMsIHRoZW4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZW4gaXQgc2F5cyB0byBjb25maXJtIHdoZXRoZXIgJiMzNDtyZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMmIzM0OyBhcmUgbW9kaWZpZWQsIGFuZCBpZiBzbywgc2VhcmNoIGZvciBpdCB1c2luZyBjb2RlIHNlYXJjaCB0b29scywgYW5kIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLgoKTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCBob2xkIG9uIGEgc2Vjb25k4oCmIHRoZXNlIGFyZSAqc2VsZnRlc3RzKi4gVGhleSBhcmVuJiMzOTt0IGtlcm5lbCBjb2RlLiBUaGV5JiMzOTtyZSBqdXN0IHRlc3RzLiBTbywgdGhleSBkb24mIzM5O3QgbW9kaWZ5IGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gVGhlIGZpbGVzIGFyZSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gIGRpcmVjdG9yeS4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGRvIEkgKmFsd2F5cyogc2F5IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBzZWxmdGVzdHM/IEl0IGRvZXMgc2VlbSB0aGF0IHdheS4gVGhleSBhcmUgdXNlcnNwYWNlIHByb2dyYW1zIHRvIHRlc3QgdGhlIGtlcm5lbCwgYnV0IHRoZSBwYXRjaCBpc24mIzM5O3QgY2hhbmdpbmcgdGhlIGtlcm5lbCBpdHNlbGYuIEZ1enppbmcgdGhlIGtlcm5lbCBiYXNlZCBvbiBzZWxmdGVzdCBjaGFuZ2VzIGRvZXNuJiMzOTt0IG1ha2UgbXVjaCBzZW5zZS4gU28gaXQmIzM5O3MgcHJvYmFibHkgYmV0dGVyIHRvIGZvY3VzIG9uIGFjdHVhbCBrZXJuZWwgY29kZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGZpbGUgbGlzdCBvbmUgbW9yZSB0aW1lOiBgY293LmNgLCBgZ3VhcmQtcmVnaW9ucy5jYCwgYGtodWdlcGFnZWQuY2AsIGBtZW1vcnktZmFpbHVyZS5jYCwgYW5kIGBtaWdyYXRpb24uY2AuIEFsbCB0aG9zZSBmaWxlcyBhcmUgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2AuIFNpbmNlIHRoZSBjaGFuZ2VzIGFyZSBhbGwgaW4gdXNlcnNwYWNlIHRlc3RzIGFuZCBkb24mIzM5O3QgdG91Y2ggY29yZSBrZXJuZWwgbG9naWMsIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBwYXRjaCBpcyBzb2xlbHkgY29uY2VybmVkIHdpdGggdGVzdGluZyBhbmQgbm90IGtlcm5lbCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMjA6NDc6MDUuODk3MTQxODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzA3NzIyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIwOjQ3OjA1Ljg5NzE0ODk4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTE3NzExNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzY2EyODAwOGMzNmU0N2Y5Zjk3NDk0M2NlNGY4NWJmNTA4N2NiZjE3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDIwOjQ3OjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG5pbmRleCAwYzYyN2VhODlmZjdiMi4uYzFiODkyMGUyOTM0MjQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xcbkBAIC0xNzE4LDggKzE3MTgsMTMgQEAgc3RhdGljIHZvaWQgcnVuX3dpdGhfdG1wZmlsZShub25fYW5vbl90ZXN0X2ZuIGZuLCBjb25zdCBjaGFyICpkZXNjKVxcbiBcXG4gXFx0LyogRmlsZSBjb25zaXN0cyBvZiBhIHNpbmdsZSBwYWdlIGZpbGxlZCB3aXRoIHplcm9lcy4gKi9cXG4gXFx0aWYgKGZhbGxvY2F0ZShmZCwgMCwgMCwgcGFnZXNpemUpKSB7XFxuLVxcdFxcdGtzZnRfcGVycm9yKFxcXCJmYWxsb2NhdGUoKSBmYWlsZWRcXFwiKTtcXG4tXFx0XFx0bG9nX3Rlc3RfcmVzdWx0KEtTRlRfRkFJTCk7XFxuK1xcdFxcdGlmIChlcnJubyA9PSBFT1BOT1RTVVBQKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJmYWxsb2NhdGUoKSBub3Qgc3VwcG9ydGVkIGJ5IGZpbGVzeXN0ZW1cXFxcblxcXCIpO1xcbitcXHRcXHRcXHRsb2dfdGVzdF9yZXN1bHQoS1NGVF9TS0lQKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0a3NmdF9wZXJyb3IoXFxcImZhbGxvY2F0ZSgpIGZhaWxlZFxcXCIpO1xcbitcXHRcXHRcXHRsb2dfdGVzdF9yZXN1bHQoS1NGVF9GQUlMKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRnb3RvIGNsb3NlO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG5pbmRleCBiMjFkZjMwNDBiMWM3Yy4uNWM4ZWMzY2E3NWQ3ZDIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXFxuQEAgLTE5MTIsNyArMTkxMiw3IEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBob2xlX3B1bmNoKVxcbiB7XFxuIFxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplID0gc2VsZi1cXHUwMDNlcGFnZV9zaXplO1xcbiBcXHRjaGFyICpwdHI7XFxuLVxcdGludCBpO1xcbitcXHRpbnQgaSwgcmV0O1xcbiBcXG4gXFx0aWYgKHZhcmlhbnQtXFx1MDAzZWJhY2tpbmcgPT0gQU5PTl9CQUNLRUQpXFxuIFxcdFxcdFNLSVAocmV0dXJuLCBcXFwiVHJ1bmNhdGlvbiB0ZXN0IHNwZWNpZmljIHRvIGZpbGUtYmFja2VkXFxcIik7XFxuQEAgLTE5NDQsOCArMTk0NCwxMiBAQCBURVNUX0YoZ3VhcmRfcmVnaW9ucywgaG9sZV9wdW5jaClcXG4gXFx0fVxcbiBcXG4gXFx0LyogTm93IGhvbGUgcHVuY2ggdGhlIGd1YXJkZWQgcmVnaW9uLiAqL1xcbi1cXHRBU1NFUlRfRVEobWFkdmlzZShcXHUwMDI2cHRyWzMgKiBwYWdlX3NpemVdLCA0ICogcGFnZV9zaXplLFxcbi1cXHRcXHRcXHQgIE1BRFZfUkVNT1ZFKSwgMCk7XFxuK1xcdHJldCA9IG1hZHZpc2UoXFx1MDAyNnB0clszICogcGFnZV9zaXplXSwgNCAqIHBhZ2Vfc2l6ZSwgTUFEVl9SRU1PVkUpO1xcbitcXHRpZiAocmV0ID09IC0xIFxcdTAwMjZcXHUwMDI2IGVycm5vID09IEVPUE5PVFNVUFApIHtcXG4rXFx0XFx0QVNTRVJUX0VRKG11bm1hcChwdHIsIDEwICogcGFnZV9zaXplKSwgMCk7XFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiTUFEVl9SRU1PVkUgbm90IHN1cHBvcnRlZCBieSBmaWxlc3lzdGVtXFxcIik7XFxuK1xcdH1cXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuIFxcbiBcXHQvKiBFbnN1cmUgZ3VhcmQgcmVnaW9ucyByZW1haW4uICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDsgaSsrKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xcbmluZGV4IDEwZThkZWRjYjA4N2RjLi41NGU4ODhlYjQ4YmJjYiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcXG5AQCAtMTAwLDYgKzEwMCwyOCBAQCBzdGF0aWMgdm9pZCBza2lwKGNvbnN0IGNoYXIgKm1zZylcXG4gXFx0ZXhpdF9zdGF0dXMgPSBLU0ZUX1NLSVA7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGlzX3N3YXBfZW5hYmxlZCh2b2lkKVxcbit7XFxuK1xcdGNoYXIgYnVmW01BWF9MSU5FX0xFTkdUSF07XFxuK1xcdEZJTEUgKmZpbGU7XFxuK1xcdGJvb2wgZW5hYmxlZCA9IGZhbHNlO1xcbitcXG4rXFx0ZmlsZSA9IGZvcGVuKFxcXCIvcHJvYy9zd2Fwc1xcXCIsIFxcXCJyXFxcIik7XFxuK1xcdGlmICghZmlsZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKCFmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBDaGVjayBmb3IgZmlyc3QgYWN0aXZlIHN3YXAgZW50cnkuICovXFxuK1xcdGlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKSlcXG4rXFx0XFx0ZW5hYmxlZCA9IHRydWU7XFxuK1xcbitvdXQ6XFxuK1xcdGZjbG9zZShmaWxlKTtcXG4rXFx0cmV0dXJuIGVuYWJsZWQ7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHNhdmVfc2V0dGluZ3Modm9pZClcXG4ge1xcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiU2F2ZSBUSFAgYW5kIGtodWdlcGFnZWQgc2V0dGluZ3MuLi5cXFwiKTtcXG5AQCAtNzM0LDEwICs3NTYsMTYgQEAgc3RhdGljIHZvaWQgY29sbGFwc2Vfc3dhcGluX3NpbmdsZV9wdGUoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BcXG4ge1xcbiBcXHR2b2lkICpwO1xcbiBcXG4rXFx0a3NmdF9wcmludF9tc2coXFxcIlN3YXBvdXQgb25lIHBhZ2UuLi5cXFwiKTtcXG4rXFx0aWYgKCFpc19zd2FwX2VuYWJsZWQoKSkge1xcbitcXHRcXHRza2lwKFxcXCJObyBhY3RpdmUgc3dhcFxcXCIpO1xcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgXFxcIiVzXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0cCA9IG9wcy1cXHUwMDNlc2V0dXBfYXJlYSgxKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuIFxcbi1cXHRrc2Z0X3ByaW50X21zZyhcXFwiU3dhcG91dCBvbmUgcGFnZS4uLlxcXCIpO1xcbiBcXHRpZiAobWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfUEFHRU9VVCkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcXFwibWFkdmlzZShNQURWX1BBR0VPVVQpXFxcIik7XFxuIFxcdGlmIChjaGVja19zd2FwKHAsIHBhZ2Vfc2l6ZSkpIHtcXG5AQCAtNzYwLDEwICs3ODgsMTYgQEAgc3RhdGljIHZvaWQgY29sbGFwc2VfbWF4X3B0ZXNfc3dhcChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9cXG4gXFx0aW50IG1heF9wdGVzX3N3YXAgPSB0aHBfcmVhZF9udW0oXFxcImtodWdlcGFnZWQvbWF4X3B0ZXNfc3dhcFxcXCIpO1xcbiBcXHR2b2lkICpwO1xcbiBcXG4rXFx0a3NmdF9wcmludF9tc2coXFxcIlN3YXBvdXQgJWQgb2YgJWQgcGFnZXMuLi5cXFwiLCBtYXhfcHRlc19zd2FwICsgMSwgaHBhZ2VfcG1kX25yKTtcXG4rXFx0aWYgKCFpc19zd2FwX2VuYWJsZWQoKSkge1xcbitcXHRcXHRza2lwKFxcXCJObyBhY3RpdmUgc3dhcFxcXCIpO1xcbitcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgXFxcIiVzXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0cCA9IG9wcy1cXHUwMDNlc2V0dXBfYXJlYSgxKTtcXG4gXFx0b3BzLVxcdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuIFxcbi1cXHRrc2Z0X3ByaW50X21zZyhcXFwiU3dhcG91dCAlZCBvZiAlZCBwYWdlcy4uLlxcXCIsIG1heF9wdGVzX3N3YXAgKyAxLCBocGFnZV9wbWRfbnIpO1xcbiBcXHRpZiAobWFkdmlzZShwLCAobWF4X3B0ZXNfc3dhcCArIDEpICogcGFnZV9zaXplLCBNQURWX1BBR0VPVVQpKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1hZHZpc2UoTUFEVl9QQUdFT1VUKVxcXCIpO1xcbiBcXHRpZiAoY2hlY2tfc3dhcChwLCAobWF4X3B0ZXNfc3dhcCArIDEpICogcGFnZV9zaXplKSkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IDAzMmVkOTUyMDU3YzYyLi41ZDAwYWFiMzFmOWI1NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC0yODMsOCArMjgzLDEwIEBAIFRFU1RfRihtZW1vcnlfZmFpbHVyZSwgY2xlYW5fcGFnZWNhY2hlKVxcbiBcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcImZhaWxlZCB0byBvcGVuIHRlc3QgZmlsZS5cXFxcblxcXCIpO1xcbiBcXHRmc190eXBlID0gZ2V0X2ZzX3R5cGUoZmQpO1xcbi1cXHRpZiAoIWZzX3R5cGUgfHwgZnNfdHlwZSA9PSBUTVBGU19NQUdJQylcXG4rXFx0aWYgKCFmc190eXBlIHx8IGZzX3R5cGUgPT0gVE1QRlNfTUFHSUMpIHtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcInVuc3VwcG9ydGVkIGZpbGVzeXN0ZW0gOiV4XFxcXG5cXFwiLCBmc190eXBlKTtcXG4rXFx0fVxcbiBcXG4gXFx0YWRkciA9IG1tYXAoMCwgc2VsZi1cXHUwMDNlcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbiBcXHRcXHQgICAgTUFQX1NIQVJFRCwgZmQsIDApO1xcbkBAIC0zMjUsOCArMzI3LDE2IEBAIFRFU1RfRihtZW1vcnlfZmFpbHVyZSwgZGlydHlfcGFnZWNhY2hlKVxcbiBcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcImZhaWxlZCB0byBvcGVuIHRlc3QgZmlsZS5cXFxcblxcXCIpO1xcbiBcXHRmc190eXBlID0gZ2V0X2ZzX3R5cGUoZmQpO1xcbi1cXHRpZiAoIWZzX3R5cGUgfHwgZnNfdHlwZSA9PSBUTVBGU19NQUdJQylcXG4rXFx0LypcXG4rXFx0ICogTUFEVl9IQVJEIHBvaXNvbmluZyBvZiBkaXJ0eSBwYWdlLWNhY2hlIGRhdGEgcmVjb3JkcyBhbiBleHBlY3RlZFxcbitcXHQgKiAtRUlPIGluIHRoZSBmaWxlIG1hcHBpbmcuIE5GUyByZXBvcnRzIHRoaXMgZXJyb3Igb24gY2xvc2UoKSwgc29cXG4rXFx0ICogc2tpcCB0aGlzIHZhcmlhbnQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWZzX3R5cGUgfHwgZnNfdHlwZSA9PSBUTVBGU19NQUdJQyB8fFxcbitcXHQgICAgKGZzX3R5cGUgPT0gTkZTX1NVUEVSX01BR0lDIFxcdTAwMjZcXHUwMDI2IHZhcmlhbnQtXFx1MDAzZXR5cGUgPT0gTUFEVl9IQVJEKSkge1xcbitcXHRcXHRjbG9zZShmZCk7XFxuIFxcdFxcdFNLSVAocmV0dXJuLCBcXFwidW5zdXBwb3J0ZWQgZmlsZXN5c3RlbSA6JXhcXFxcblxcXCIsIGZzX3R5cGUpO1xcbitcXHR9XFxuIFxcbiBcXHRhZGRyID0gbW1hcCgwLCBzZWxmLVxcdTAwM2VwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuIFxcdFxcdCAgICBNQVBfU0hBUkVELCBmZCwgMCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcXG5pbmRleCAyOWY3NDkyNDUzZDQzOS4uZjE5ZDUzYzY5NTc2NDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xcbkBAIC03LDcgKzcsNyBAQFxcbiAjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImh1Z2VwYWdlX3NldHRpbmdzLmhcXFwiXFxuIFxcbi0jaW5jbHVkZSBcXHUwMDNjc3RyaW5ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NudW1hLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NudW1haWYuaFxcdTAwM2VcXG5AQCAtMjAsNyArMjAsNiBAQFxcbiBcXG4gI2RlZmluZSBUV09NRUdcXHRcXHQoMlxcdTAwM2NcXHUwMDNjMjApXFxuICNkZWZpbmUgUlVOVElNRVxcdFxcdCgyMClcXG4tI2RlZmluZSBNQVhfUkVUUklFU1xcdDEwMFxcbiAjZGVmaW5lIEFMSUdOKHgsIGEpXFx0KCgoeCkgKyAoYSAtIDEpKSBcXHUwMDI2ICh+KChhKSAtIDEpKSlcXG4gXFxuIEhVR0VUTEJfU0VUVVBfREVGQVVMVF9QQUdFUygxKVxcbkBAIC0xMTAsNyArMTA5LDcgQEAgaW50IG1pZ3JhdGUodWludDY0X3QgKnB0ciwgaW50IG4xLCBpbnQgbjIpXFxuIFxcdGludCByZXQsIHRtcDtcXG4gXFx0aW50IHN0YXR1cyA9IDA7XFxuIFxcdHN0cnVjdCB0aW1lc3BlYyB0czEsIHRzMjtcXG4tXFx0aW50IGZhaWx1cmVzID0gMDtcXG4rXFx0aW50IHN1Y2Nlc3MgPSAwO1xcbiBcXG4gXFx0aWYgKGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2dHMxKSlcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbkBAIC0xMTksMjkgKzExOCwzMyBAQCBpbnQgbWlncmF0ZSh1aW50NjRfdCAqcHRyLCBpbnQgbjEsIGludCBuMilcXG4gXFx0XFx0aWYgKGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2dHMyKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXG4tXFx0XFx0aWYgKHRzMi50dl9zZWMgLSB0czEudHZfc2VjIFxcdTAwM2U9IFJVTlRJTUUpXFxuLVxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRpZiAodHMyLnR2X3NlYyAtIHRzMS50dl9zZWMgXFx1MDAzZT0gUlVOVElNRSkge1xcbitcXHRcXHRcXHQvKiBSZWFjaGluZyBib3RoIHRhcmdldHMgdmVyaWZpZXMgYSBjcm9zcy1ub2RlIG1vdmUuICovXFxuK1xcdFxcdFxcdGlmIChzdWNjZXNzIFxcdTAwM2U9IDIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMjtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0cmV0ID0gbW92ZV9wYWdlcygwLCAxLCAodm9pZCAqKikgXFx1MDAyNnB0ciwgXFx1MDAyNm4yLCBcXHUwMDI2c3RhdHVzLFxcbiBcXHRcXHRcXHRcXHRNUE9MX01GX01PVkVfQUxMKTtcXG4tXFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRcXHQvKiBNaWdyYXRpb24gaXMgYmVzdCBlZmZvcnQ7IHRyeSBhZ2FpbiAqL1xcbi1cXHRcXHRcXHRcXHRpZiAoKytmYWlsdXJlcyBcXHUwMDNjIE1BWF9SRVRSSUVTKVxcbi1cXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0XFx0cHJpbnRmKFxcXCJEaWRuJ3QgbWlncmF0ZSAlZCBwYWdlc1xcXFxuXFxcIiwgcmV0KTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdHBlcnJvcihcXFwiQ291bGRuJ3QgbWlncmF0ZSBwYWdlc1xcXCIpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRwZXJyb3IoXFxcIkNvdWxkbid0IG1pZ3JhdGUgcGFnZXNcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHRcXHQvKiBNaWdyYXRpb24gaXMgYmVzdCBlZmZvcnQuIFRyeSBhZ2FpbiAqL1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCB8fCBzdGF0dXMgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKHN0YXR1cyAhPSBuMikge1xcbitcXHRcXHRcXHRwcmludGYoXFxcIlBhZ2UgaXMgb24gbm9kZSAlZCBpbnN0ZWFkIG9mIHRhcmdldCBub2RlICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RhdHVzLCBuMik7XFxuIFxcdFxcdFxcdHJldHVybiAtMjtcXG4gXFx0XFx0fVxcbi1cXHRcXHRmYWlsdXJlcyA9IDA7XFxuK1xcdFxcdHN1Y2Nlc3MrKztcXG4gXFx0XFx0dG1wID0gbjI7XFxuIFxcdFxcdG4yID0gbjE7XFxuIFxcdFxcdG4xID0gdG1wO1xcbiBcXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gdm9pZCAqYWNjZXNzX21lbSh2b2lkICpwdHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIwOjQ3OjA2LjgxMDA3NDI3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgzOTQ3Nzg2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2NhMjgwMDhjMzZlNDdmOWY5NzQ5NDNjZTRmODViZjUwODdjYmYxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDIwOjQ3OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb3cuY1xuaW5kZXggMGM2MjdlYTg5ZmY3YjIuLmMxYjg5MjBlMjkzNDI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY293LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Nvdy5jXG5AQCAtMTcxOCw4ICsxNzE4LDEzIEBAIHN0YXRpYyB2b2lkIHJ1bl93aXRoX3RtcGZpbGUobm9uX2Fub25fdGVzdF9mbiBmbiwgY29uc3QgY2hhciAqZGVzYylcbiBcbiBcdC8qIEZpbGUgY29uc2lzdHMgb2YgYSBzaW5nbGUgcGFnZSBmaWxsZWQgd2l0aCB6ZXJvZXMuICovXG4gXHRpZiAoZmFsbG9jYXRlKGZkLCAwLCAwLCBwYWdlc2l6ZSkpIHtcbi1cdFx0a3NmdF9wZXJyb3IoXCJmYWxsb2NhdGUoKSBmYWlsZWRcIik7XG4tXHRcdGxvZ190ZXN0X3Jlc3VsdChLU0ZUX0ZBSUwpO1xuK1x0XHRpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiZmFsbG9jYXRlKCkgbm90IHN1cHBvcnRlZCBieSBmaWxlc3lzdGVtXFxuXCIpO1xuK1x0XHRcdGxvZ190ZXN0X3Jlc3VsdChLU0ZUX1NLSVApO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGtzZnRfcGVycm9yKFwiZmFsbG9jYXRlKCkgZmFpbGVkXCIpO1xuK1x0XHRcdGxvZ190ZXN0X3Jlc3VsdChLU0ZUX0ZBSUwpO1xuK1x0XHR9XG4gXHRcdGdvdG8gY2xvc2U7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5pbmRleCBiMjFkZjMwNDBiMWM3Yy4uNWM4ZWMzY2E3NWQ3ZDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuQEAgLTE5MTIsNyArMTkxMiw3IEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBob2xlX3B1bmNoKVxuIHtcbiBcdGNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplID0gc2VsZi1cdTAwM2VwYWdlX3NpemU7XG4gXHRjaGFyICpwdHI7XG4tXHRpbnQgaTtcbitcdGludCBpLCByZXQ7XG4gXG4gXHRpZiAodmFyaWFudC1cdTAwM2ViYWNraW5nID09IEFOT05fQkFDS0VEKVxuIFx0XHRTS0lQKHJldHVybiwgXCJUcnVuY2F0aW9uIHRlc3Qgc3BlY2lmaWMgdG8gZmlsZS1iYWNrZWRcIik7XG5AQCAtMTk0NCw4ICsxOTQ0LDEyIEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBob2xlX3B1bmNoKVxuIFx0fVxuIFxuIFx0LyogTm93IGhvbGUgcHVuY2ggdGhlIGd1YXJkZWQgcmVnaW9uLiAqL1xuLVx0QVNTRVJUX0VRKG1hZHZpc2UoXHUwMDI2cHRyWzMgKiBwYWdlX3NpemVdLCA0ICogcGFnZV9zaXplLFxuLVx0XHRcdCAgTUFEVl9SRU1PVkUpLCAwKTtcbitcdHJldCA9IG1hZHZpc2UoXHUwMDI2cHRyWzMgKiBwYWdlX3NpemVdLCA0ICogcGFnZV9zaXplLCBNQURWX1JFTU9WRSk7XG4rXHRpZiAocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFT1BOT1RTVVBQKSB7XG4rXHRcdEFTU0VSVF9FUShtdW5tYXAocHRyLCAxMCAqIHBhZ2Vfc2l6ZSksIDApO1xuK1x0XHRTS0lQKHJldHVybiwgXCJNQURWX1JFTU9WRSBub3Qgc3VwcG9ydGVkIGJ5IGZpbGVzeXN0ZW1cIik7XG4rXHR9XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbiBcbiBcdC8qIEVuc3VyZSBndWFyZCByZWdpb25zIHJlbWFpbi4gKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwOyBpKyspIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDEwZThkZWRjYjA4N2RjLi41NGU4ODhlYjQ4YmJjYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMTAwLDYgKzEwMCwyOCBAQCBzdGF0aWMgdm9pZCBza2lwKGNvbnN0IGNoYXIgKm1zZylcbiBcdGV4aXRfc3RhdHVzID0gS1NGVF9TS0lQO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBpc19zd2FwX2VuYWJsZWQodm9pZClcbit7XG4rXHRjaGFyIGJ1ZltNQVhfTElORV9MRU5HVEhdO1xuK1x0RklMRSAqZmlsZTtcbitcdGJvb2wgZW5hYmxlZCA9IGZhbHNlO1xuK1xuK1x0ZmlsZSA9IGZvcGVuKFwiL3Byb2Mvc3dhcHNcIiwgXCJyXCIpO1xuK1x0aWYgKCFmaWxlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZpbGUpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIENoZWNrIGZvciBmaXJzdCBhY3RpdmUgc3dhcCBlbnRyeS4gKi9cbitcdGlmIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmaWxlKSlcbitcdFx0ZW5hYmxlZCA9IHRydWU7XG4rXG4rb3V0OlxuK1x0ZmNsb3NlKGZpbGUpO1xuK1x0cmV0dXJuIGVuYWJsZWQ7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNhdmVfc2V0dGluZ3Modm9pZClcbiB7XG4gXHRrc2Z0X3ByaW50X21zZyhcIlNhdmUgVEhQIGFuZCBraHVnZXBhZ2VkIHNldHRpbmdzLi4uXCIpO1xuQEAgLTczNCwxMCArNzU2LDE2IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlX3N3YXBpbl9zaW5nbGVfcHRlKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wXG4ge1xuIFx0dm9pZCAqcDtcbiBcbitcdGtzZnRfcHJpbnRfbXNnKFwiU3dhcG91dCBvbmUgcGFnZS4uLlwiKTtcbitcdGlmICghaXNfc3dhcF9lbmFibGVkKCkpIHtcbitcdFx0c2tpcChcIk5vIGFjdGl2ZSBzd2FwXCIpO1xuK1x0XHRrc2Z0X3Rlc3RfcmVzdWx0X3JlcG9ydChleGl0X3N0YXR1cywgXCIlc1xcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdHAgPSBvcHMtXHUwMDNlc2V0dXBfYXJlYSgxKTtcbiBcdG9wcy1cdTAwM2VmYXVsdChwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XG4gXG4tXHRrc2Z0X3ByaW50X21zZyhcIlN3YXBvdXQgb25lIHBhZ2UuLi5cIik7XG4gXHRpZiAobWFkdmlzZShwLCBwYWdlX3NpemUsIE1BRFZfUEFHRU9VVCkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1hZHZpc2UoTUFEVl9QQUdFT1VUKVwiKTtcbiBcdGlmIChjaGVja19zd2FwKHAsIHBhZ2Vfc2l6ZSkpIHtcbkBAIC03NjAsMTAgKzc4OCwxNiBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKHN0cnVjdCBjb2xsYXBzZV9jb250ZXh0ICpjLCBzdHJ1Y3QgbWVtX29wcyAqb1xuIFx0aW50IG1heF9wdGVzX3N3YXAgPSB0aHBfcmVhZF9udW0oXCJraHVnZXBhZ2VkL21heF9wdGVzX3N3YXBcIik7XG4gXHR2b2lkICpwO1xuIFxuK1x0a3NmdF9wcmludF9tc2coXCJTd2Fwb3V0ICVkIG9mICVkIHBhZ2VzLi4uXCIsIG1heF9wdGVzX3N3YXAgKyAxLCBocGFnZV9wbWRfbnIpO1xuK1x0aWYgKCFpc19zd2FwX2VuYWJsZWQoKSkge1xuK1x0XHRza2lwKFwiTm8gYWN0aXZlIHN3YXBcIik7XG4rXHRcdGtzZnRfdGVzdF9yZXN1bHRfcmVwb3J0KGV4aXRfc3RhdHVzLCBcIiVzXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0cCA9IG9wcy1cdTAwM2VzZXR1cF9hcmVhKDEpO1xuIFx0b3BzLVx1MDAzZWZhdWx0KHAsIDAsIGhwYWdlX3BtZF9zaXplKTtcbiBcbi1cdGtzZnRfcHJpbnRfbXNnKFwiU3dhcG91dCAlZCBvZiAlZCBwYWdlcy4uLlwiLCBtYXhfcHRlc19zd2FwICsgMSwgaHBhZ2VfcG1kX25yKTtcbiBcdGlmIChtYWR2aXNlKHAsIChtYXhfcHRlc19zd2FwICsgMSkgKiBwYWdlX3NpemUsIE1BRFZfUEFHRU9VVCkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX3BlcnJvcihcIm1hZHZpc2UoTUFEVl9QQUdFT1VUKVwiKTtcbiBcdGlmIChjaGVja19zd2FwKHAsIChtYXhfcHRlc19zd2FwICsgMSkgKiBwYWdlX3NpemUpKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IDAzMmVkOTUyMDU3YzYyLi41ZDAwYWFiMzFmOWI1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0yODMsOCArMjgzLDEwIEBAIFRFU1RfRihtZW1vcnlfZmFpbHVyZSwgY2xlYW5fcGFnZWNhY2hlKVxuIFx0aWYgKGZkIFx1MDAzYyAwKVxuIFx0XHRTS0lQKHJldHVybiwgXCJmYWlsZWQgdG8gb3BlbiB0ZXN0IGZpbGUuXFxuXCIpO1xuIFx0ZnNfdHlwZSA9IGdldF9mc190eXBlKGZkKTtcbi1cdGlmICghZnNfdHlwZSB8fCBmc190eXBlID09IFRNUEZTX01BR0lDKVxuK1x0aWYgKCFmc190eXBlIHx8IGZzX3R5cGUgPT0gVE1QRlNfTUFHSUMpIHtcbitcdFx0Y2xvc2UoZmQpO1xuIFx0XHRTS0lQKHJldHVybiwgXCJ1bnN1cHBvcnRlZCBmaWxlc3lzdGVtIDoleFxcblwiLCBmc190eXBlKTtcbitcdH1cbiBcbiBcdGFkZHIgPSBtbWFwKDAsIHNlbGYtXHUwMDNlcGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHQgICAgTUFQX1NIQVJFRCwgZmQsIDApO1xuQEAgLTMyNSw4ICszMjcsMTYgQEAgVEVTVF9GKG1lbW9yeV9mYWlsdXJlLCBkaXJ0eV9wYWdlY2FjaGUpXG4gXHRpZiAoZmQgXHUwMDNjIDApXG4gXHRcdFNLSVAocmV0dXJuLCBcImZhaWxlZCB0byBvcGVuIHRlc3QgZmlsZS5cXG5cIik7XG4gXHRmc190eXBlID0gZ2V0X2ZzX3R5cGUoZmQpO1xuLVx0aWYgKCFmc190eXBlIHx8IGZzX3R5cGUgPT0gVE1QRlNfTUFHSUMpXG4rXHQvKlxuK1x0ICogTUFEVl9IQVJEIHBvaXNvbmluZyBvZiBkaXJ0eSBwYWdlLWNhY2hlIGRhdGEgcmVjb3JkcyBhbiBleHBlY3RlZFxuK1x0ICogLUVJTyBpbiB0aGUgZmlsZSBtYXBwaW5nLiBORlMgcmVwb3J0cyB0aGlzIGVycm9yIG9uIGNsb3NlKCksIHNvXG4rXHQgKiBza2lwIHRoaXMgdmFyaWFudC5cbitcdCAqL1xuK1x0aWYgKCFmc190eXBlIHx8IGZzX3R5cGUgPT0gVE1QRlNfTUFHSUMgfHxcbitcdCAgICAoZnNfdHlwZSA9PSBORlNfU1VQRVJfTUFHSUMgXHUwMDI2XHUwMDI2IHZhcmlhbnQtXHUwMDNldHlwZSA9PSBNQURWX0hBUkQpKSB7XG4rXHRcdGNsb3NlKGZkKTtcbiBcdFx0U0tJUChyZXR1cm4sIFwidW5zdXBwb3J0ZWQgZmlsZXN5c3RlbSA6JXhcXG5cIiwgZnNfdHlwZSk7XG4rXHR9XG4gXG4gXHRhZGRyID0gbW1hcCgwLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0ICAgIE1BUF9TSEFSRUQsIGZkLCAwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21pZ3JhdGlvbi5jXG5pbmRleCAyOWY3NDkyNDUzZDQzOS4uZjE5ZDUzYzY5NTc2NDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9taWdyYXRpb24uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWlncmF0aW9uLmNcbkBAIC03LDcgKzcsNyBAQFxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4gI2luY2x1ZGUgXCJodWdlcGFnZV9zZXR0aW5ncy5oXCJcbiBcbi0jaW5jbHVkZSBcdTAwM2NzdHJpbmdzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY251bWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY251bWFpZi5oXHUwMDNlXG5AQCAtMjAsNyArMjAsNiBAQFxuIFxuICNkZWZpbmUgVFdPTUVHXHRcdCgyXHUwMDNjXHUwMDNjMjApXG4gI2RlZmluZSBSVU5USU1FXHRcdCgyMClcbi0jZGVmaW5lIE1BWF9SRVRSSUVTXHQxMDBcbiAjZGVmaW5lIEFMSUdOKHgsIGEpXHQoKCh4KSArIChhIC0gMSkpIFx1MDAyNiAofigoYSkgLSAxKSkpXG4gXG4gSFVHRVRMQl9TRVRVUF9ERUZBVUxUX1BBR0VTKDEpXG5AQCAtMTEwLDcgKzEwOSw3IEBAIGludCBtaWdyYXRlKHVpbnQ2NF90ICpwdHIsIGludCBuMSwgaW50IG4yKVxuIFx0aW50IHJldCwgdG1wO1xuIFx0aW50IHN0YXR1cyA9IDA7XG4gXHRzdHJ1Y3QgdGltZXNwZWMgdHMxLCB0czI7XG4tXHRpbnQgZmFpbHVyZXMgPSAwO1xuK1x0aW50IHN1Y2Nlc3MgPSAwO1xuIFxuIFx0aWYgKGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZ0czEpKVxuIFx0XHRyZXR1cm4gLTE7XG5AQCAtMTE5LDI5ICsxMTgsMzMgQEAgaW50IG1pZ3JhdGUodWludDY0X3QgKnB0ciwgaW50IG4xLCBpbnQgbjIpXG4gXHRcdGlmIChjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2dHMyKSlcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRcdGlmICh0czIudHZfc2VjIC0gdHMxLnR2X3NlYyBcdTAwM2U9IFJVTlRJTUUpXG4tXHRcdFx0cmV0dXJuIDA7XG4rXHRcdGlmICh0czIudHZfc2VjIC0gdHMxLnR2X3NlYyBcdTAwM2U9IFJVTlRJTUUpIHtcbitcdFx0XHQvKiBSZWFjaGluZyBib3RoIHRhcmdldHMgdmVyaWZpZXMgYSBjcm9zcy1ub2RlIG1vdmUuICovXG4rXHRcdFx0aWYgKHN1Y2Nlc3MgXHUwMDNlPSAyKVxuK1x0XHRcdFx0cmV0dXJuIDA7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0cmV0dXJuIC0yO1xuK1x0XHR9XG4gXG4gXHRcdHJldCA9IG1vdmVfcGFnZXMoMCwgMSwgKHZvaWQgKiopIFx1MDAyNnB0ciwgXHUwMDI2bjIsIFx1MDAyNnN0YXR1cyxcbiBcdFx0XHRcdE1QT0xfTUZfTU9WRV9BTEwpO1xuLVx0XHRpZiAocmV0KSB7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuLVx0XHRcdFx0LyogTWlncmF0aW9uIGlzIGJlc3QgZWZmb3J0OyB0cnkgYWdhaW4gKi9cbi1cdFx0XHRcdGlmICgrK2ZhaWx1cmVzIFx1MDAzYyBNQVhfUkVUUklFUylcbi1cdFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0XHRwcmludGYoXCJEaWRuJ3QgbWlncmF0ZSAlZCBwYWdlc1xcblwiLCByZXQpO1xuLVx0XHRcdH1cbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRwZXJyb3IoXCJDb3VsZG4ndCBtaWdyYXRlIHBhZ2VzXCIpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0cGVycm9yKFwiQ291bGRuJ3QgbWlncmF0ZSBwYWdlc1wiKTtcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHRcdC8qIE1pZ3JhdGlvbiBpcyBiZXN0IGVmZm9ydC4gVHJ5IGFnYWluICovXG4rXHRcdGlmIChyZXQgXHUwMDNlIDAgfHwgc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoc3RhdHVzICE9IG4yKSB7XG4rXHRcdFx0cHJpbnRmKFwiUGFnZSBpcyBvbiBub2RlICVkIGluc3RlYWQgb2YgdGFyZ2V0IG5vZGUgJWRcXG5cIixcbitcdFx0XHQgICAgICAgc3RhdHVzLCBuMik7XG4gXHRcdFx0cmV0dXJuIC0yO1xuIFx0XHR9XG4tXHRcdGZhaWx1cmVzID0gMDtcbitcdFx0c3VjY2VzcysrO1xuIFx0XHR0bXAgPSBuMjtcbiBcdFx0bjIgPSBuMTtcbiBcdFx0bjEgPSB0bXA7XG4gXHR9XG4tXG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4gdm9pZCAqYWNjZXNzX21lbSh2b2lkICpwdHIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMDo0NzowNi44MTAwNzc1NDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mzk0NzI5MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBBIFNlbGZ0ZXN0LUNlbnRyaWMgVmlldyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQncyB0b3VjaGluZyBhIGhhbmRmdWwgb2YgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiAgVGhlIGZpbGVzIGFyZSBsaXN0ZWQ6IGBjb3cuY2AsIGBndWFyZC1yZWdpb25zLmNgLCBga2h1Z2VwYWdlZC5jYCwgYG1lbW9yeS1mYWlsdXJlLmNgLCBhbmQgYG1pZ3JhdGlvbi5jYC4gU3RyYWlnaHQgYXdheSwgSSdtIHRoaW5raW5nLCB0aGVzZSBhcmUgYWxsIHNlbGZ0ZXN0cy4gVGhleSdyZSB1c2Vyc3BhY2UgdG9vbHMgZGVzaWduZWQgdG8gZXhlcmNpc2Uga2VybmVsIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgdGhlIGluc3RydWN0aW9ucyBhcmUgcXVpdGUgY2xlYXIuIElmIHRoZSBwYXRjaCBjb250YWlucyAqb25seSogbW9kaWZpY2F0aW9ucyB0byB0aGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uLCBLY29uZmlnIGZpbGVzLCBjb21tZW50cywgb3IgcHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZywgb3IgY2hhbmdlcyB0byBub24tZnVuY3Rpb25hbCBjb25zdGFudHMsIG9yIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBvciBzcGVjaWZpYyBkcml2ZXIgdGVhci1kb3duIGZ1bmN0aW9ucywgdGhlbiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlbiBpdCBzYXlzIHRvIGNvbmZpcm0gd2hldGhlciBcInJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlc1wiIGFyZSBtb2RpZmllZCwgYW5kIGlmIHNvLCBzZWFyY2ggZm9yIGl0IHVzaW5nIGNvZGUgc2VhcmNoIHRvb2xzLCBhbmQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgaG9sZCBvbiBhIHNlY29uZOKApiB0aGVzZSBhcmUgKnNlbGZ0ZXN0cyouIFRoZXkgYXJlbid0IGtlcm5lbCBjb2RlLiBUaGV5J3JlIGp1c3QgdGVzdHMuIFNvLCB0aGV5IGRvbid0IG1vZGlmeSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuIFRoZSBmaWxlcyBhcmUgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCBkaXJlY3RvcnkuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGRvIEkgKmFsd2F5cyogc2F5IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBzZWxmdGVzdHM/IEl0IGRvZXMgc2VlbSB0aGF0IHdheS4gVGhleSBhcmUgdXNlcnNwYWNlIHByb2dyYW1zIHRvIHRlc3QgdGhlIGtlcm5lbCwgYnV0IHRoZSBwYXRjaCBpc24ndCBjaGFuZ2luZyB0aGUga2VybmVsIGl0c2VsZi4gRnV6emluZyB0aGUga2VybmVsIGJhc2VkIG9uIHNlbGZ0ZXN0IGNoYW5nZXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UuIFNvIGl0J3MgcHJvYmFibHkgYmV0dGVyIHRvIGZvY3VzIG9uIGFjdHVhbCBrZXJuZWwgY29kZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBmaWxlIGxpc3Qgb25lIG1vcmUgdGltZTogYGNvdy5jYCwgYGd1YXJkLXJlZ2lvbnMuY2AsIGBraHVnZXBhZ2VkLmNgLCBgbWVtb3J5LWZhaWx1cmUuY2AsIGFuZCBgbWlncmF0aW9uLmNgLiBBbGwgdGhvc2UgZmlsZXMgYXJlIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBTaW5jZSB0aGUgY2hhbmdlcyBhcmUgYWxsIGluIHVzZXJzcGFjZSB0ZXN0cyBhbmQgZG9uJ3QgdG91Y2ggY29yZSBrZXJuZWwgbG9naWMsIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBwYXRjaCBpcyBzb2xlbHkgY29uY2VybmVkIHdpdGggdGVzdGluZyBhbmQgbm90IGtlcm5lbCBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5MCwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIwOjQ3OjE1LjIwNDgxMDkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowtxxqz[1] Phase: Running StartedAt: 2026-07-27 20:47:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxxqz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-27 20:47:27 +0000 UTC FinishedAt: 2026-07-27 20:47:54 +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,}