Name: series-workflowp24t8 Phase: Failed StartedAt: 2026-08-13 11:15:07 +0000 UTC FinishedAt: 2026-08-13 12:06:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp24t8[0] Phase: Succeeded StartedAt: 2026-08-13 11:15:07 +0000 UTC FinishedAt: 2026-08-13 12:05:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp24t8[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 11:15:07 +0000 UTC FinishedAt: 2026-08-13 12:05:45 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0pIHRvIGFkZCBSSVNDLVYgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgZm9yIHRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNDM1MDdhMTIzNzAyMmQwYTdlNzVkMjIwZTk1YmQ0ZDA2NGVhNDBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTI6MDU6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuaW5kZXggZTNhY2YyYWU5ODgxZS4uNjg1YmFlZmViZGIxMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuQEAgLTI1LDYgJiM0MzsyNSwxOSBAQFxuICNkZWZpbmUgR0VUX1JNKGluc24pICAgICAgICAgICAgKCgoaW5zbikgXHUwMDI2IElOU05fTUFTS19GVU5DVDMpIFx1MDAzZVx1MDAzZSBJTlNOX1NISUZUX0ZVTkNUMylcbiAjZGVmaW5lIEdFVF9DU1JfTlVNKGluc24pICAgICAgICgoKGluc24pIFx1MDAyNiBJTlNOX0NTUl9NQVNLKSBcdTAwM2VcdTAwM2UgSU5TTl9DU1JfU0hJRlQpXG4gXG4mIzQzOy8qIFZlY3RvciAoVikgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcsIG1hdGNoaW5nIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW5zbi5oICovXG4mIzQzOyNkZWZpbmUgUlZfSU5TTl9PUENPREVfTUFTS1x0MHg3ZlxuJiM0MzsjZGVmaW5lIFJWR19PUENPREVfU1lTVEVNXHQweDczXG4mIzQzOyNkZWZpbmUgUlZWX09QQ09ERV9WRUNUT1JcdDB4NTdcbiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZMXHRcdDB4MDdcbiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZTXHRcdDB4MjdcbiYjNDM7I2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfOFx0MFxuJiM0MzsjZGVmaW5lIFJWVl9WTF9WU19XSURUSF8xNlx0NVxuJiM0MzsjZGVmaW5lIFJWVl9WTF9WU19XSURUSF8zMlx0NlxuJiM0MzsjZGVmaW5lIFJWVl9WTF9WU19XSURUSF82NFx0N1xuJiM0MzsjZGVmaW5lIFJWVl9FWFRSQUNUX1ZMX1ZTX1dJRFRIKGluc24pXHQoKChpbnNuKSBcdTAwM2VcdTAwM2UgMTIpIFx1MDAyNiAweDcpXG4mIzQzOyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKVx0KCgoaW5zbikgXHUwMDNlXHUwMDNlIDIwKSBcdTAwMjYgMHhmZmYpXG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdTY0IF9fa3ZtX3JlZ19pZCh1NjQgdHlwZSwgdTY0IHN1YnR5cGUsIHU2NCBpZHgsIHU2NCBzaXplKVxuIHtcbiBcdHJldHVybiBLVk1fUkVHX1JJU0NWIHwgdHlwZSB8IHN1YnR5cGUgfCBpZHggfCBzaXplO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5lNjc3MTM3ZDVlNDQ4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuQEAgLTE3LDYgJiM0MzsxNywxMSBAQFxuIFxuIHN0YXRpYyBndmFfdCBleGNlcHRpb25faGFuZGxlcnM7XG4gXG4mIzQzO3N0cnVjdCBoYW5kbGVycyB7XG4mIzQzO1x0ZXhjZXB0aW9uX2hhbmRsZXJfZm4gZXhjZXB0aW9uX2hhbmRsZXJzW05SX1ZFQ1RPUlNdW05SX0VYQ0VQVElPTlNdO1xuJiM0MztcdGJvb2wgdl9hdmFpbGFibGU7XG4mIzQzO307XG4mIzQzO1xuIGJvb2wgX192Y3B1X2hhc19leHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXh0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwO1xuQEAgLTI5OCwxMyAmIzQzOzMwMyw2IEBAIHZvaWQgdmNwdV9hcmNoX2R1bXAoRklMRSAqc3RyZWFtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IGluZGVudClcbiBcdFx0Y29yZS5yZWdzLnQzLCBjb3JlLnJlZ3MudDQsIGNvcmUucmVncy50NSwgY29yZS5yZWdzLnQ2KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19hbGlnbmVkKDE2KSBndWVzdF91bmV4cF90cmFwKHZvaWQpXG4te1xuLVx0c2JpX2VjYWxsKEtWTV9SSVNDVl9TRUxGVEVTVFNfU0JJX0VYVCxcbi1cdFx0ICBLVk1fUklTQ1ZfU0VMRlRFU1RTX1NCSV9VTkVYUCxcbi1cdFx0ICAwLCAwLCAwLCAwLCAwLCAwKTtcbi19XG4tXG4gdm9pZCB2Y3B1X2FyY2hfc2V0X2VudHJ5X3BvaW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqZ3Vlc3RfY29kZSlcbiB7XG4gXHR2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfQ09SRV9SRUcocmVncy5wYyksICh1bnNpZ25lZCBsb25nKWd1ZXN0X2NvZGUpO1xuQEAgLTM0OCw4ICYjNDM7MzQ2LDI2IEBAIHN0cnVjdCBrdm1fdmNwdSAqdm1fYXJjaF92Y3B1X2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHZjcHVfaWQpXG4gXHQvKiBTZXR1cCBzc2NyYXRjaCBmb3IgZ3Vlc3RfZ2V0X3ZjcHVpZCgpICovXG4gXHR2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHNzY3JhdGNoKSwgdmNwdV9pZCk7XG4gXG4tXHQvKiBTZXR1cCBkZWZhdWx0IGV4Y2VwdGlvbiB2ZWN0b3Igb2YgZ3Vlc3QgKi9cbi1cdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9HRU5FUkFMX0NTUl9SRUcoc3R2ZWMpLCAodW5zaWduZWQgbG9uZylndWVzdF91bmV4cF90cmFwKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFkdmVydGlzZSBWIHRvIEtWTSBzbyAtTzIgYXV0by12ZWN0b3JpemF0aW9uIGluIGd1ZXN0IGNvZGUgaXMgdmFsaWQ7XG4mIzQzO1x0ICogaWdub3JlIGVycm9ycyBzaW5jZSB0aGUgdGVzdHMgd29yayB3aXRob3V0IFYgdG9vLiBVc2UgdGhlIGZ1bGxcbiYjNDM7XHQgKiBleGNlcHRpb24gdmVjdG9yIHRhYmxlICh3aGljaCBsYXppbHkgZW5hYmxlcyBWIGluIHJvdXRlX2V4Y2VwdGlvbigpKVxuJiM0MztcdCAqIGFzIHRoZSBkZWZhdWx0IGhhbmRsZXI7IHZtX2luaXRfdmVjdG9yX3RhYmxlcygpIGlzIGlkZW1wb3RlbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0X192Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfSVNBX0VYVF9SRUcoS1ZNX1JJU0NWX0lTQV9FWFRfViksIDEpO1xuJiM0MztcdHZtX2luaXRfdmVjdG9yX3RhYmxlcyh2bSk7XG4mIzQzO1x0dmNwdV9pbml0X3ZlY3Rvcl90YWJsZXModmNwdSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVjb3JkIFYgYXZhaWxhYmlsaXR5IGZvciByb3V0ZV9leGNlcHRpb24oKSwgd2hpY2ggcnVucyBpbiBndWVzdFxuJiM0MztcdCAqIGNvbnRleHQuIFYgaXMgZW5hYmxlZCB1bmlmb3JtbHkgZm9yIGV2ZXJ5IHZDUFUsIHNvIHRoaXMgaXMgYVxuJiM0MztcdCAqIFZNLXdpZGUgcHJvcGVydHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0e1xuJiM0MztcdFx0c3RydWN0IGhhbmRsZXJzICpoID0gYWRkcl9ndmEyaHZhKHZtLCB2bS1cdTAwM2VoYW5kbGVycyk7XG4mIzQzO1xuJiM0MztcdFx0aC1cdTAwM2V2X2F2YWlsYWJsZSA9IF9fdmNwdV9oYXNfaXNhX2V4dCh2Y3B1LCBLVk1fUklTQ1ZfSVNBX0VYVF9WKTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gdmNwdTtcbiB9XG5AQCAtNDA4LDE5ICYjNDM7NDI0LDQzIEBAIHZvaWQgYXNzZXJ0X29uX3VuaGFuZGxlZF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3RydWN0IHVjYWxsIHVjO1xuIFxuIFx0aWYgKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YykgPT0gVUNBTExfVU5IQU5ETEVEKSB7XG4mIzQzO1x0XHR2Y3B1X2R1bXAoc3RkZXJyLCB2Y3B1LCAyKTtcbiBcdFx0VEVTVF9GQUlMKFwmIzM0O1VuZXhwZWN0ZWQgZXhjZXB0aW9uICh2ZWN0b3I6MHglbHgsIGVjOjB4JWx4KVwmIzM0OyxcbiBcdFx0XHR1Yy5hcmdzWzBdLCB1Yy5hcmdzWzFdKTtcbiBcdH1cbiB9XG4gXG4tc3RydWN0IGhhbmRsZXJzIHtcbi1cdGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGV4Y2VwdGlvbl9oYW5kbGVyc1tOUl9WRUNUT1JTXVtOUl9FWENFUFRJT05TXTtcbi19O1xuJiM0MztzdGF0aWMgYm9vbCBpbnNuX2lzX3ZlY3Rvcih1MzIgaW5zbilcbiYjNDM7e1xuJiM0MztcdHUzMiBvcGNvZGUgPSBpbnNuIFx1MDAyNiBSVl9JTlNOX09QQ09ERV9NQVNLO1xuJiM0MztcdHUzMiB3aWR0aCwgY3NyO1xuJiM0MztcbiYjNDM7XHQvKiBBbGwgVi1yZWxhdGVkIGluc3RydWN0aW9ucyBhcmUgNC1ieXRlLCBpLmUuIG5vdCBjb21wcmVzc2VkLiAqL1xuJiM0MztcdGlmICgoaW5zbiBcdTAwMjYgMHgzKSAhPSAweDMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAob3Bjb2RlKSB7XG4mIzQzO1x0Y2FzZSBSVlZfT1BDT0RFX1ZFQ1RPUjpcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGNhc2UgUlZWX09QQ09ERV9WTDpcbiYjNDM7XHRjYXNlIFJWVl9PUENPREVfVlM6XG4mIzQzO1x0XHR3aWR0aCA9IFJWVl9FWFRSQUNUX1ZMX1ZTX1dJRFRIKGluc24pO1xuJiM0MztcdFx0cmV0dXJuIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF84IHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8xNiB8fFxuJiM0MztcdFx0ICAgICAgIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8zMiB8fCB3aWR0aCA9PSBSVlZfVkxfVlNfV0lEVEhfNjQ7XG4mIzQzO1x0Y2FzZSBSVkdfT1BDT0RFX1NZU1RFTTpcbiYjNDM7XHRcdGNzciA9IFJWR19FWFRSQUNUX1NZU1RFTV9DU1IoaW5zbik7XG4mIzQzO1x0XHRyZXR1cm4gKGNzciBcdTAwM2U9IENTUl9WU1RBUlQgXHUwMDI2XHUwMDI2IGNzciBcdTAwM2M9IENTUl9WQ1NSKSB8fFxuJiM0MztcdFx0ICAgICAgIChjc3IgXHUwMDNlPSBDU1JfVkwgXHUwMDI2XHUwMDI2IGNzciBcdTAwM2M9IENTUl9WTEVOQik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiBcbiB2b2lkIHJvdXRlX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHRzdHJ1Y3QgaGFuZGxlcnMgKmhhbmRsZXJzID0gKHN0cnVjdCBoYW5kbGVycyAqKWV4Y2VwdGlvbl9oYW5kbGVycztcbi1cdGludCB2ZWN0b3IgPSAwLCBlYztcbiYjNDM7XHRpbnQgdmVjdG9yID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGVjO1xuIFxuIFx0ZWMgPSByZWdzLVx1MDAzZWNhdXNlIFx1MDAyNiB+Q0FVU0VfSVJRX0ZMQUc7XG4gXHRpZiAoZWMgXHUwMDNlPSBOUl9FWENFUFRJT05TKVxuQEAgLTQzMiw2ICYjNDM7NDcyLDM3IEBAIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRlYyA9IDA7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMYXppbHkgZW5hYmxlIFYgb24gdGhlIGZpcnN0IHZlY3RvciBpbnN0cnVjdGlvbjogaWYgdGhlIGZhdWx0aW5nXG4mIzQzO1x0ICogaW5zdHJ1Y3Rpb24gZGVjb2RlcyBhcyB2ZWN0b3Igd2hpbGUgVlMgaXMgb2ZmLCBzZXQgVlMgdG8gSW5pdGlhbFxuJiM0MztcdCAqIGFuZCByZS1leGVjdXRlIGl0LCBsaWtlIHRoZSBrZXJuZWwmIzM5O3MgcmlzY3Zfdl9maXJzdF91c2VfaGFuZGxlcigpLlxuJiM0MztcdCAqIEdlbnVpbmVseSBpbGxlZ2FsIGluc3RydWN0aW9ucyBjb250aW51ZSB0byB0aGUgdW5leHBlY3RlZC1leGNlcHRpb25cbiYjNDM7XHQgKiBwYXRoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghKHJlZ3MtXHUwMDNlY2F1c2UgXHUwMDI2IENBVVNFX0lSUV9GTEFHKSBcdTAwMjZcdTAwMjYgZWMgPT0gRVhDX0lOU1RfSUxMRUdBTCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaGFuZGxlcnMgXHUwMDI2XHUwMDI2IGhhbmRsZXJzLVx1MDAzZXZfYXZhaWxhYmxlIFx1MDAyNlx1MDAyNiAhKHJlZ3MtXHUwMDNlc3RhdHVzIFx1MDAyNiBTUl9WUykpIHtcbiYjNDM7XHRcdHUzMiBpbnNuID0gKHUzMilyZWdzLVx1MDAzZWJhZGFkZHI7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIHN0dmFsIGlzIG5vdCBndWFyYW50ZWVkIHRvIGhvbGQgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uLlxuJiM0MztcdFx0ICogVmVjdG9yIGluc3RydWN0aW9ucyBhcmUgYWx3YXlzIDMyLWJpdCwgc28gcmVhZCBhIDE2LWJpdFxuJiM0MztcdFx0ICogaGFsZndvcmQgZmlyc3QgYW5kIG9ubHkgbG9hZCB0aGUgZnVsbCAzMi1iaXQgaW5zdHJ1Y3Rpb24gd2hlblxuJiM0MztcdFx0ICogaXQgaXMgbm90IGNvbXByZXNzZWQ7IHRoaXMgYXZvaWRzIGFuIHVuYWxpZ25lZCBvciBjcm9zcy1wYWdlXG4mIzQzO1x0XHQgKiBhY2Nlc3Mgb24gYSBjb21wcmVzc2VkIGluc3RydWN0aW9uLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWluc24pIHtcbiYjNDM7XHRcdFx0dTE2IGhhbGYgPSAqKHUxNiAqKXJlZ3MtXHUwMDNlZXBjO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKChoYWxmIFx1MDAyNiAweDMpID09IDB4MylcbiYjNDM7XHRcdFx0XHRpbnNuID0gKih1MzIgKilyZWdzLVx1MDAzZWVwYztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5zbl9pc192ZWN0b3IoaW5zbikpIHtcbiYjNDM7XHRcdFx0cmVncy1cdTAwM2VzdGF0dXMgfD0gU1JfVlNfSU5JVElBTDtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaGFuZGxlcnMgXHUwMDI2XHUwMDI2IGhhbmRsZXJzLVx1MDAzZWV4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXSlcbiBcdFx0cmV0dXJuIGhhbmRsZXJzLVx1MDAzZWV4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXShyZWdzKTtcbiBcbkBAIC00NDgsNiAmIzQzOzUxOSw5IEBAIHZvaWQgdmNwdV9pbml0X3ZlY3Rvcl90YWJsZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHZvaWQgdm1faW5pdF92ZWN0b3JfdGFibGVzKHN0cnVjdCBrdm1fdm0gKnZtKVxuIHtcbiYjNDM7XHRpZiAodm0tXHUwMDNlaGFuZGxlcnMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0dm0tXHUwMDNlaGFuZGxlcnMgPSBfX3ZtX2FsbG9jKHZtLCBzaXplb2Yoc3RydWN0IGhhbmRsZXJzKSwgdm0tXHUwMDNlcGFnZV9zaXplLFxuIFx0XHRcdFx0ICBNRU1fUkVHSU9OX0RBVEEpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bSkgdG8gYWRkIFJJU0MtViB2ZWN0b3IgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGxhenkgViBleHRlbnNpb24gZW5hYmxlbWVudCBmb3IgdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM0MzUwN2ExMjM3MDIyZDBhN2U3NWQyMjBlOTViZDRkMDY0ZWE0MGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjowNToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKaW5kZXggZTNhY2YyYWU5ODgxZS4uNjg1YmFlZmViZGIxMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKQEAgLTI1LDYgJiM0MzsyNSwxOSBAQAogI2RlZmluZSBHRVRfUk0oaW5zbikgICAgICAgICAgICAoKChpbnNuKSAmYW1wOyBJTlNOX01BU0tfRlVOQ1QzKSAmZ3Q7Jmd0OyBJTlNOX1NISUZUX0ZVTkNUMykKICNkZWZpbmUgR0VUX0NTUl9OVU0oaW5zbikgICAgICAgKCgoaW5zbikgJmFtcDsgSU5TTl9DU1JfTUFTSykgJmd0OyZndDsgSU5TTl9DU1JfU0hJRlQpCiAKJiM0MzsvKiBWZWN0b3IgKFYpIGluc3RydWN0aW9uIGRlY29kaW5nLCBtYXRjaGluZyBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2luc24uaCAqLwomIzQzOyNkZWZpbmUgUlZfSU5TTl9PUENPREVfTUFTSwkweDdmCiYjNDM7I2RlZmluZSBSVkdfT1BDT0RFX1NZU1RFTQkweDczCiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUgkweDU3CiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZMCQkweDA3CiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZTCQkweDI3CiYjNDM7I2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfOAkwCiYjNDM7I2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfMTYJNQomIzQzOyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzMyCTYKJiM0MzsjZGVmaW5lIFJWVl9WTF9WU19XSURUSF82NAk3CiYjNDM7I2RlZmluZSBSVlZfRVhUUkFDVF9WTF9WU19XSURUSChpbnNuKQkoKChpbnNuKSAmZ3Q7Jmd0OyAxMikgJmFtcDsgMHg3KQomIzQzOyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKQkoKChpbnNuKSAmZ3Q7Jmd0OyAyMCkgJmFtcDsgMHhmZmYpCiYjNDM7CiBzdGF0aWMgaW5saW5lIHU2NCBfX2t2bV9yZWdfaWQodTY0IHR5cGUsIHU2NCBzdWJ0eXBlLCB1NjQgaWR4LCB1NjQgc2l6ZSkKIHsKIAlyZXR1cm4gS1ZNX1JFR19SSVNDViB8IHR5cGUgfCBzdWJ0eXBlIHwgaWR4IHwgc2l6ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCmluZGV4IGRlZDU0MjlmMzQ0ODMuLmU2NzcxMzdkNWU0NDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwpAQCAtMTcsNiAmIzQzOzE3LDExIEBACiAKIHN0YXRpYyBndmFfdCBleGNlcHRpb25faGFuZGxlcnM7CiAKJiM0MztzdHJ1Y3QgaGFuZGxlcnMgewomIzQzOwlleGNlcHRpb25faGFuZGxlcl9mbiBleGNlcHRpb25faGFuZGxlcnNbTlJfVkVDVE9SU11bTlJfRVhDRVBUSU9OU107CiYjNDM7CWJvb2wgdl9hdmFpbGFibGU7CiYjNDM7fTsKJiM0MzsKIGJvb2wgX192Y3B1X2hhc19leHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXh0KQogewogCXVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwOwpAQCAtMjk4LDEzICYjNDM7MzAzLDYgQEAgdm9pZCB2Y3B1X2FyY2hfZHVtcChGSUxFICpzdHJlYW0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggaW5kZW50KQogCQljb3JlLnJlZ3MudDMsIGNvcmUucmVncy50NCwgY29yZS5yZWdzLnQ1LCBjb3JlLnJlZ3MudDYpOwogfQogCi1zdGF0aWMgdm9pZCBfX2FsaWduZWQoMTYpIGd1ZXN0X3VuZXhwX3RyYXAodm9pZCkKLXsKLQlzYmlfZWNhbGwoS1ZNX1JJU0NWX1NFTEZURVNUU19TQklfRVhULAotCQkgIEtWTV9SSVNDVl9TRUxGVEVTVFNfU0JJX1VORVhQLAotCQkgIDAsIDAsIDAsIDAsIDAsIDApOwotfQotCiB2b2lkIHZjcHVfYXJjaF9zZXRfZW50cnlfcG9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpndWVzdF9jb2RlKQogewogCXZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9DT1JFX1JFRyhyZWdzLnBjKSwgKHVuc2lnbmVkIGxvbmcpZ3Vlc3RfY29kZSk7CkBAIC0zNDgsOCAmIzQzOzM0NiwyNiBAQCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZtX2FyY2hfdmNwdV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIHUzMiB2Y3B1X2lkKQogCS8qIFNldHVwIHNzY3JhdGNoIGZvciBndWVzdF9nZXRfdmNwdWlkKCkgKi8KIAl2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHNzY3JhdGNoKSwgdmNwdV9pZCk7CiAKLQkvKiBTZXR1cCBkZWZhdWx0IGV4Y2VwdGlvbiB2ZWN0b3Igb2YgZ3Vlc3QgKi8KLQl2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHN0dmVjKSwgKHVuc2lnbmVkIGxvbmcpZ3Vlc3RfdW5leHBfdHJhcCk7CiYjNDM7CS8qCiYjNDM7CSAqIEFkdmVydGlzZSBWIHRvIEtWTSBzbyAtTzIgYXV0by12ZWN0b3JpemF0aW9uIGluIGd1ZXN0IGNvZGUgaXMgdmFsaWQ7CiYjNDM7CSAqIGlnbm9yZSBlcnJvcnMgc2luY2UgdGhlIHRlc3RzIHdvcmsgd2l0aG91dCBWIHRvby4gVXNlIHRoZSBmdWxsCiYjNDM7CSAqIGV4Y2VwdGlvbiB2ZWN0b3IgdGFibGUgKHdoaWNoIGxhemlseSBlbmFibGVzIFYgaW4gcm91dGVfZXhjZXB0aW9uKCkpCiYjNDM7CSAqIGFzIHRoZSBkZWZhdWx0IGhhbmRsZXI7IHZtX2luaXRfdmVjdG9yX3RhYmxlcygpIGlzIGlkZW1wb3RlbnQuCiYjNDM7CSAqLwomIzQzOwlfX3ZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9JU0FfRVhUX1JFRyhLVk1fUklTQ1ZfSVNBX0VYVF9WKSwgMSk7CiYjNDM7CXZtX2luaXRfdmVjdG9yX3RhYmxlcyh2bSk7CiYjNDM7CXZjcHVfaW5pdF92ZWN0b3JfdGFibGVzKHZjcHUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWNvcmQgViBhdmFpbGFiaWxpdHkgZm9yIHJvdXRlX2V4Y2VwdGlvbigpLCB3aGljaCBydW5zIGluIGd1ZXN0CiYjNDM7CSAqIGNvbnRleHQuIFYgaXMgZW5hYmxlZCB1bmlmb3JtbHkgZm9yIGV2ZXJ5IHZDUFUsIHNvIHRoaXMgaXMgYQomIzQzOwkgKiBWTS13aWRlIHByb3BlcnR5LgomIzQzOwkgKi8KJiM0MzsJewomIzQzOwkJc3RydWN0IGhhbmRsZXJzICpoID0gYWRkcl9ndmEyaHZhKHZtLCB2bS0mZ3Q7aGFuZGxlcnMpOwomIzQzOwomIzQzOwkJaC0mZ3Q7dl9hdmFpbGFibGUgPSBfX3ZjcHVfaGFzX2lzYV9leHQodmNwdSwgS1ZNX1JJU0NWX0lTQV9FWFRfVik7CiYjNDM7CX0KIAogCXJldHVybiB2Y3B1OwogfQpAQCAtNDA4LDE5ICYjNDM7NDI0LDQzIEBAIHZvaWQgYXNzZXJ0X29uX3VuaGFuZGxlZF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN0cnVjdCB1Y2FsbCB1YzsKIAogCWlmIChnZXRfdWNhbGwodmNwdSwgJmFtcDt1YykgPT0gVUNBTExfVU5IQU5ETEVEKSB7CiYjNDM7CQl2Y3B1X2R1bXAoc3RkZXJyLCB2Y3B1LCAyKTsKIAkJVEVTVF9GQUlMKCYjMzQ7VW5leHBlY3RlZCBleGNlcHRpb24gKHZlY3RvcjoweCVseCwgZWM6MHglbHgpJiMzNDssCiAJCQl1Yy5hcmdzWzBdLCB1Yy5hcmdzWzFdKTsKIAl9CiB9CiAKLXN0cnVjdCBoYW5kbGVycyB7Ci0JZXhjZXB0aW9uX2hhbmRsZXJfZm4gZXhjZXB0aW9uX2hhbmRsZXJzW05SX1ZFQ1RPUlNdW05SX0VYQ0VQVElPTlNdOwotfTsKJiM0MztzdGF0aWMgYm9vbCBpbnNuX2lzX3ZlY3Rvcih1MzIgaW5zbikKJiM0Mzt7CiYjNDM7CXUzMiBvcGNvZGUgPSBpbnNuICZhbXA7IFJWX0lOU05fT1BDT0RFX01BU0s7CiYjNDM7CXUzMiB3aWR0aCwgY3NyOwomIzQzOwomIzQzOwkvKiBBbGwgVi1yZWxhdGVkIGluc3RydWN0aW9ucyBhcmUgNC1ieXRlLCBpLmUuIG5vdCBjb21wcmVzc2VkLiAqLwomIzQzOwlpZiAoKGluc24gJmFtcDsgMHgzKSAhPSAweDMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAob3Bjb2RlKSB7CiYjNDM7CWNhc2UgUlZWX09QQ09ERV9WRUNUT1I6CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY2FzZSBSVlZfT1BDT0RFX1ZMOgomIzQzOwljYXNlIFJWVl9PUENPREVfVlM6CiYjNDM7CQl3aWR0aCA9IFJWVl9FWFRSQUNUX1ZMX1ZTX1dJRFRIKGluc24pOwomIzQzOwkJcmV0dXJuIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF84IHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8xNiB8fAomIzQzOwkJICAgICAgIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8zMiB8fCB3aWR0aCA9PSBSVlZfVkxfVlNfV0lEVEhfNjQ7CiYjNDM7CWNhc2UgUlZHX09QQ09ERV9TWVNURU06CiYjNDM7CQljc3IgPSBSVkdfRVhUUkFDVF9TWVNURU1fQ1NSKGluc24pOwomIzQzOwkJcmV0dXJuIChjc3IgJmd0Oz0gQ1NSX1ZTVEFSVCAmYW1wOyZhbXA7IGNzciAmbHQ7PSBDU1JfVkNTUikgfHwKJiM0MzsJCSAgICAgICAoY3NyICZndDs9IENTUl9WTCAmYW1wOyZhbXA7IGNzciAmbHQ7PSBDU1JfVkxFTkIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiAKIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBoYW5kbGVycyAqaGFuZGxlcnMgPSAoc3RydWN0IGhhbmRsZXJzICopZXhjZXB0aW9uX2hhbmRsZXJzOwotCWludCB2ZWN0b3IgPSAwLCBlYzsKJiM0MzsJaW50IHZlY3RvciA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZWM7CiAKIAllYyA9IHJlZ3MtJmd0O2NhdXNlICZhbXA7IH5DQVVTRV9JUlFfRkxBRzsKIAlpZiAoZWMgJmd0Oz0gTlJfRVhDRVBUSU9OUykKQEAgLTQzMiw2ICYjNDM7NDcyLDM3IEBAIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQllYyA9IDA7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIExhemlseSBlbmFibGUgViBvbiB0aGUgZmlyc3QgdmVjdG9yIGluc3RydWN0aW9uOiBpZiB0aGUgZmF1bHRpbmcKJiM0MzsJICogaW5zdHJ1Y3Rpb24gZGVjb2RlcyBhcyB2ZWN0b3Igd2hpbGUgVlMgaXMgb2ZmLCBzZXQgVlMgdG8gSW5pdGlhbAomIzQzOwkgKiBhbmQgcmUtZXhlY3V0ZSBpdCwgbGlrZSB0aGUga2VybmVsJiMzOTtzIHJpc2N2X3ZfZmlyc3RfdXNlX2hhbmRsZXIoKS4KJiM0MzsJICogR2VudWluZWx5IGlsbGVnYWwgaW5zdHJ1Y3Rpb25zIGNvbnRpbnVlIHRvIHRoZSB1bmV4cGVjdGVkLWV4Y2VwdGlvbgomIzQzOwkgKiBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKCEocmVncy0mZ3Q7Y2F1c2UgJmFtcDsgQ0FVU0VfSVJRX0ZMQUcpICZhbXA7JmFtcDsgZWMgPT0gRVhDX0lOU1RfSUxMRUdBTCAmYW1wOyZhbXA7CiYjNDM7CSAgICBoYW5kbGVycyAmYW1wOyZhbXA7IGhhbmRsZXJzLSZndDt2X2F2YWlsYWJsZSAmYW1wOyZhbXA7ICEocmVncy0mZ3Q7c3RhdHVzICZhbXA7IFNSX1ZTKSkgewomIzQzOwkJdTMyIGluc24gPSAodTMyKXJlZ3MtJmd0O2JhZGFkZHI7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogc3R2YWwgaXMgbm90IGd1YXJhbnRlZWQgdG8gaG9sZCB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24uCiYjNDM7CQkgKiBWZWN0b3IgaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgMzItYml0LCBzbyByZWFkIGEgMTYtYml0CiYjNDM7CQkgKiBoYWxmd29yZCBmaXJzdCBhbmQgb25seSBsb2FkIHRoZSBmdWxsIDMyLWJpdCBpbnN0cnVjdGlvbiB3aGVuCiYjNDM7CQkgKiBpdCBpcyBub3QgY29tcHJlc3NlZDsgdGhpcyBhdm9pZHMgYW4gdW5hbGlnbmVkIG9yIGNyb3NzLXBhZ2UKJiM0MzsJCSAqIGFjY2VzcyBvbiBhIGNvbXByZXNzZWQgaW5zdHJ1Y3Rpb24uCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghaW5zbikgewomIzQzOwkJCXUxNiBoYWxmID0gKih1MTYgKilyZWdzLSZndDtlcGM7CiYjNDM7CiYjNDM7CQkJaWYgKChoYWxmICZhbXA7IDB4MykgPT0gMHgzKQomIzQzOwkJCQlpbnNuID0gKih1MzIgKilyZWdzLSZndDtlcGM7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoaW5zbl9pc192ZWN0b3IoaW5zbikpIHsKJiM0MzsJCQlyZWdzLSZndDtzdGF0dXMgfD0gU1JfVlNfSU5JVElBTDsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoaGFuZGxlcnMgJmFtcDsmYW1wOyBoYW5kbGVycy0mZ3Q7ZXhjZXB0aW9uX2hhbmRsZXJzW3ZlY3Rvcl1bZWNdKQogCQlyZXR1cm4gaGFuZGxlcnMtJmd0O2V4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXShyZWdzKTsKIApAQCAtNDQ4LDYgJiM0Mzs1MTksOSBAQCB2b2lkIHZjcHVfaW5pdF92ZWN0b3JfdGFibGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogdm9pZCB2bV9pbml0X3ZlY3Rvcl90YWJsZXMoc3RydWN0IGt2bV92bSAqdm0pCiB7CiYjNDM7CWlmICh2bS0mZ3Q7aGFuZGxlcnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJdm0tJmd0O2hhbmRsZXJzID0gX192bV9hbGxvYyh2bSwgc2l6ZW9mKHN0cnVjdCBoYW5kbGVycyksIHZtLSZndDtwYWdlX3NpemUsCiAJCQkJICBNRU1fUkVHSU9OX0RBVEEpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyOTIKCQkJCQkJCW91dHB1dDogODIKCQkJCQkJCXRob3VnaHRzOiA2MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIGNoYW5nZXMgdG8gdGhlIEtWTSBzZWxmLXRlc3RzIGZvciBSSVNDLVYsIHNwZWNpZmljYWxseSB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyB2ZWN0b3IgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGxhemlseSBlbmFibGluZyB0aGUgViBleHRlbnNpb24gZm9yIHRoZXNlIHRlc3RzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnRzIGZ1enppbmc/CgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcHJvbXB0IG91dGxpbmVzIGEgcHJldHR5IGNsZWFyIHNldCBvZiBjcml0ZXJpYSBmb3Igd2hlbiBhIHBhdGNoICpzaG91bGRuJiMzOTt0KiBiZSBmdXp6ZWQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGZpbHRlcmluZyBvdXQgdGhpbmdzIHRoYXQgZG9uJiMzOTt0IGRpcmVjdGx5IGltcGFjdCB0aGUgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSwgZm9jdXNpbmcgb24gdGVzdCBjb2RlLCBkb2N1bWVudGF0aW9uLCBsb2dnaW5nLCBjb25zdGFudCBjaGFuZ2VzLCBhbmQgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gYXZvaWQgd2FzdGluZyBmdXp6aW5nIHJlc291cmNlcyBvbiBpcnJlbGV2YW50IGFyZWFzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBsb29rcyBsaWtlIGEgcmVzb3VuZGluZyAmIzM0O25vLiYjMzQ7IEl0JiMzOTtzIG1vZGlmeWluZyBjb2RlIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcgaW1tZWRpYXRlbHkuIFRlc3QgY29kZSwgYnkgZGVmaW5pdGlvbiwgaXMgbWVhbnQgZm9yIHZhbGlkYXRpbmcgdGhlIGtlcm5lbCwgbm90IG1vZGlmeWluZyBpdC4gU2VsZnRlc3RzIGFyZSBkZXNpZ25lZCB0byBiZSBpc29sYXRlZCBmcm9tIGNvcmUga2VybmVsIGxvZ2ljLiBUaGV5IGFyZSB0aGVyZSB0byBlbnN1cmUgdGhlIGNvZGUgYmVoYXZlcyBhcyBleHBlY3RlZCB1bmRlciB2YXJpb3VzIHNjZW5hcmlvcy4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBkaWZmLiBUaGUgb25seSBmaWxlcyBiZWluZyB0b3VjaGVkIGFyZSB0aG9zZSB0d28gd2l0aGluIHRoZSBzZWxmdGVzdHMgZGlyZWN0b3J5LiBOb3RoaW5nIGVsc2UuIE5vIGNvcmUga2VybmVsIGZpbGVzLCBubyBkcml2ZXJzLCBub3RoaW5nIHRoYXQgd291bGQgc3VnZ2VzdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHN5c3RlbS4gSXQgaXMgcHVyZWx5IHRlc3QgaW5mcmFzdHJ1Y3R1cmUuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCAqb25seSogbW9kaWZpZXMgdGVzdCBjb2RlLCBpdCBkb2VzbiYjMzk7dCBhZmZlY3QgdGhlIGtlcm5lbCYjMzk7cyBmdW5jdGlvbmFsIGJlaGF2aW9yLCBzZWN1cml0eSwgb3Igc3RhYmlsaXR5LiBJJiMzOTttIGdvaW5nIHRvIGNvbmZpZGVudGx5IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgaXMgbGltaXRlZCB0byB0ZXN0IGNvZGUgYWRkaXRpb25zLCBub3QgZnVuZGFtZW50YWwga2VybmVsIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bSkgdG8gYWRkIFJJU0MtViB2ZWN0b3IgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGxhenkgViBleHRlbnNpb24gZW5hYmxlbWVudCBmb3IgdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0pIHRvIGFkZCBSSVNDLVYgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgZm9yIHRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjA1OjIyLjc1NTgwMDg3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDI4OTQzNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0pIHRvIGFkZCBSSVNDLVYgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgZm9yIHRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjA1OjIyLjc1NTgxMTUzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MjU0Mzc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM0MzUwN2ExMjM3MDIyZDBhN2U3NWQyMjBlOTViZDRkMDY0ZWE0MGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTI6MDU6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxcbmluZGV4IGUzYWNmMmFlOTg4MWUuLjY4NWJhZWZlYmRiMTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxcbkBAIC0yNSw2ICsyNSwxOSBAQFxcbiAjZGVmaW5lIEdFVF9STShpbnNuKSAgICAgICAgICAgICgoKGluc24pIFxcdTAwMjYgSU5TTl9NQVNLX0ZVTkNUMykgXFx1MDAzZVxcdTAwM2UgSU5TTl9TSElGVF9GVU5DVDMpXFxuICNkZWZpbmUgR0VUX0NTUl9OVU0oaW5zbikgICAgICAgKCgoaW5zbikgXFx1MDAyNiBJTlNOX0NTUl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBJTlNOX0NTUl9TSElGVClcXG4gXFxuKy8qIFZlY3RvciAoVikgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcsIG1hdGNoaW5nIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW5zbi5oICovXFxuKyNkZWZpbmUgUlZfSU5TTl9PUENPREVfTUFTS1xcdDB4N2ZcXG4rI2RlZmluZSBSVkdfT1BDT0RFX1NZU1RFTVxcdDB4NzNcXG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUlxcdDB4NTdcXG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZMXFx0XFx0MHgwN1xcbisjZGVmaW5lIFJWVl9PUENPREVfVlNcXHRcXHQweDI3XFxuKyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzhcXHQwXFxuKyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzE2XFx0NVxcbisjZGVmaW5lIFJWVl9WTF9WU19XSURUSF8zMlxcdDZcXG4rI2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfNjRcXHQ3XFxuKyNkZWZpbmUgUlZWX0VYVFJBQ1RfVkxfVlNfV0lEVEgoaW5zbilcXHQoKChpbnNuKSBcXHUwMDNlXFx1MDAzZSAxMikgXFx1MDAyNiAweDcpXFxuKyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKVxcdCgoKGluc24pIFxcdTAwM2VcXHUwMDNlIDIwKSBcXHUwMDI2IDB4ZmZmKVxcbitcXG4gc3RhdGljIGlubGluZSB1NjQgX19rdm1fcmVnX2lkKHU2NCB0eXBlLCB1NjQgc3VidHlwZSwgdTY0IGlkeCwgdTY0IHNpemUpXFxuIHtcXG4gXFx0cmV0dXJuIEtWTV9SRUdfUklTQ1YgfCB0eXBlIHwgc3VidHlwZSB8IGlkeCB8IHNpemU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuaW5kZXggZGVkNTQyOWYzNDQ4My4uZTY3NzEzN2Q1ZTQ0OCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xcbkBAIC0xNyw2ICsxNywxMSBAQFxcbiBcXG4gc3RhdGljIGd2YV90IGV4Y2VwdGlvbl9oYW5kbGVycztcXG4gXFxuK3N0cnVjdCBoYW5kbGVycyB7XFxuK1xcdGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGV4Y2VwdGlvbl9oYW5kbGVyc1tOUl9WRUNUT1JTXVtOUl9FWENFUFRJT05TXTtcXG4rXFx0Ym9vbCB2X2F2YWlsYWJsZTtcXG4rfTtcXG4rXFxuIGJvb2wgX192Y3B1X2hhc19leHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXh0KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwO1xcbkBAIC0yOTgsMTMgKzMwMyw2IEBAIHZvaWQgdmNwdV9hcmNoX2R1bXAoRklMRSAqc3RyZWFtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IGluZGVudClcXG4gXFx0XFx0Y29yZS5yZWdzLnQzLCBjb3JlLnJlZ3MudDQsIGNvcmUucmVncy50NSwgY29yZS5yZWdzLnQ2KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX19hbGlnbmVkKDE2KSBndWVzdF91bmV4cF90cmFwKHZvaWQpXFxuLXtcXG4tXFx0c2JpX2VjYWxsKEtWTV9SSVNDVl9TRUxGVEVTVFNfU0JJX0VYVCxcXG4tXFx0XFx0ICBLVk1fUklTQ1ZfU0VMRlRFU1RTX1NCSV9VTkVYUCxcXG4tXFx0XFx0ICAwLCAwLCAwLCAwLCAwLCAwKTtcXG4tfVxcbi1cXG4gdm9pZCB2Y3B1X2FyY2hfc2V0X2VudHJ5X3BvaW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqZ3Vlc3RfY29kZSlcXG4ge1xcbiBcXHR2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfQ09SRV9SRUcocmVncy5wYyksICh1bnNpZ25lZCBsb25nKWd1ZXN0X2NvZGUpO1xcbkBAIC0zNDgsOCArMzQ2LDI2IEBAIHN0cnVjdCBrdm1fdmNwdSAqdm1fYXJjaF92Y3B1X2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHZjcHVfaWQpXFxuIFxcdC8qIFNldHVwIHNzY3JhdGNoIGZvciBndWVzdF9nZXRfdmNwdWlkKCkgKi9cXG4gXFx0dmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0dFTkVSQUxfQ1NSX1JFRyhzc2NyYXRjaCksIHZjcHVfaWQpO1xcbiBcXG4tXFx0LyogU2V0dXAgZGVmYXVsdCBleGNlcHRpb24gdmVjdG9yIG9mIGd1ZXN0ICovXFxuLVxcdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9HRU5FUkFMX0NTUl9SRUcoc3R2ZWMpLCAodW5zaWduZWQgbG9uZylndWVzdF91bmV4cF90cmFwKTtcXG4rXFx0LypcXG4rXFx0ICogQWR2ZXJ0aXNlIFYgdG8gS1ZNIHNvIC1PMiBhdXRvLXZlY3Rvcml6YXRpb24gaW4gZ3Vlc3QgY29kZSBpcyB2YWxpZDtcXG4rXFx0ICogaWdub3JlIGVycm9ycyBzaW5jZSB0aGUgdGVzdHMgd29yayB3aXRob3V0IFYgdG9vLiBVc2UgdGhlIGZ1bGxcXG4rXFx0ICogZXhjZXB0aW9uIHZlY3RvciB0YWJsZSAod2hpY2ggbGF6aWx5IGVuYWJsZXMgViBpbiByb3V0ZV9leGNlcHRpb24oKSlcXG4rXFx0ICogYXMgdGhlIGRlZmF1bHQgaGFuZGxlcjsgdm1faW5pdF92ZWN0b3JfdGFibGVzKCkgaXMgaWRlbXBvdGVudC5cXG4rXFx0ICovXFxuK1xcdF9fdmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0lTQV9FWFRfUkVHKEtWTV9SSVNDVl9JU0FfRVhUX1YpLCAxKTtcXG4rXFx0dm1faW5pdF92ZWN0b3JfdGFibGVzKHZtKTtcXG4rXFx0dmNwdV9pbml0X3ZlY3Rvcl90YWJsZXModmNwdSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZWNvcmQgViBhdmFpbGFiaWxpdHkgZm9yIHJvdXRlX2V4Y2VwdGlvbigpLCB3aGljaCBydW5zIGluIGd1ZXN0XFxuK1xcdCAqIGNvbnRleHQuIFYgaXMgZW5hYmxlZCB1bmlmb3JtbHkgZm9yIGV2ZXJ5IHZDUFUsIHNvIHRoaXMgaXMgYVxcbitcXHQgKiBWTS13aWRlIHByb3BlcnR5LlxcbitcXHQgKi9cXG4rXFx0e1xcbitcXHRcXHRzdHJ1Y3QgaGFuZGxlcnMgKmggPSBhZGRyX2d2YTJodmEodm0sIHZtLVxcdTAwM2VoYW5kbGVycyk7XFxuK1xcbitcXHRcXHRoLVxcdTAwM2V2X2F2YWlsYWJsZSA9IF9fdmNwdV9oYXNfaXNhX2V4dCh2Y3B1LCBLVk1fUklTQ1ZfSVNBX0VYVF9WKTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHZjcHU7XFxuIH1cXG5AQCAtNDA4LDE5ICs0MjQsNDMgQEAgdm9pZCBhc3NlcnRfb25fdW5oYW5kbGVkX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN0cnVjdCB1Y2FsbCB1YztcXG4gXFxuIFxcdGlmIChnZXRfdWNhbGwodmNwdSwgXFx1MDAyNnVjKSA9PSBVQ0FMTF9VTkhBTkRMRUQpIHtcXG4rXFx0XFx0dmNwdV9kdW1wKHN0ZGVyciwgdmNwdSwgMik7XFxuIFxcdFxcdFRFU1RfRkFJTChcXFwiVW5leHBlY3RlZCBleGNlcHRpb24gKHZlY3RvcjoweCVseCwgZWM6MHglbHgpXFxcIixcXG4gXFx0XFx0XFx0dWMuYXJnc1swXSwgdWMuYXJnc1sxXSk7XFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RydWN0IGhhbmRsZXJzIHtcXG4tXFx0ZXhjZXB0aW9uX2hhbmRsZXJfZm4gZXhjZXB0aW9uX2hhbmRsZXJzW05SX1ZFQ1RPUlNdW05SX0VYQ0VQVElPTlNdO1xcbi19O1xcbitzdGF0aWMgYm9vbCBpbnNuX2lzX3ZlY3Rvcih1MzIgaW5zbilcXG4re1xcbitcXHR1MzIgb3Bjb2RlID0gaW5zbiBcXHUwMDI2IFJWX0lOU05fT1BDT0RFX01BU0s7XFxuK1xcdHUzMiB3aWR0aCwgY3NyO1xcbitcXG4rXFx0LyogQWxsIFYtcmVsYXRlZCBpbnN0cnVjdGlvbnMgYXJlIDQtYnl0ZSwgaS5lLiBub3QgY29tcHJlc3NlZC4gKi9cXG4rXFx0aWYgKChpbnNuIFxcdTAwMjYgMHgzKSAhPSAweDMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHN3aXRjaCAob3Bjb2RlKSB7XFxuK1xcdGNhc2UgUlZWX09QQ09ERV9WRUNUT1I6XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRjYXNlIFJWVl9PUENPREVfVkw6XFxuK1xcdGNhc2UgUlZWX09QQ09ERV9WUzpcXG4rXFx0XFx0d2lkdGggPSBSVlZfRVhUUkFDVF9WTF9WU19XSURUSChpbnNuKTtcXG4rXFx0XFx0cmV0dXJuIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF84IHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8xNiB8fFxcbitcXHRcXHQgICAgICAgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzMyIHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF82NDtcXG4rXFx0Y2FzZSBSVkdfT1BDT0RFX1NZU1RFTTpcXG4rXFx0XFx0Y3NyID0gUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKTtcXG4rXFx0XFx0cmV0dXJuIChjc3IgXFx1MDAzZT0gQ1NSX1ZTVEFSVCBcXHUwMDI2XFx1MDAyNiBjc3IgXFx1MDAzYz0gQ1NSX1ZDU1IpIHx8XFxuK1xcdFxcdCAgICAgICAoY3NyIFxcdTAwM2U9IENTUl9WTCBcXHUwMDI2XFx1MDAyNiBjc3IgXFx1MDAzYz0gQ1NSX1ZMRU5CKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuIFxcbiB2b2lkIHJvdXRlX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4ge1xcbiBcXHRzdHJ1Y3QgaGFuZGxlcnMgKmhhbmRsZXJzID0gKHN0cnVjdCBoYW5kbGVycyAqKWV4Y2VwdGlvbl9oYW5kbGVycztcXG4tXFx0aW50IHZlY3RvciA9IDAsIGVjO1xcbitcXHRpbnQgdmVjdG9yID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBlYztcXG4gXFxuIFxcdGVjID0gcmVncy1cXHUwMDNlY2F1c2UgXFx1MDAyNiB+Q0FVU0VfSVJRX0ZMQUc7XFxuIFxcdGlmIChlYyBcXHUwMDNlPSBOUl9FWENFUFRJT05TKVxcbkBAIC00MzIsNiArNDcyLDM3IEBAIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRlYyA9IDA7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIExhemlseSBlbmFibGUgViBvbiB0aGUgZmlyc3QgdmVjdG9yIGluc3RydWN0aW9uOiBpZiB0aGUgZmF1bHRpbmdcXG4rXFx0ICogaW5zdHJ1Y3Rpb24gZGVjb2RlcyBhcyB2ZWN0b3Igd2hpbGUgVlMgaXMgb2ZmLCBzZXQgVlMgdG8gSW5pdGlhbFxcbitcXHQgKiBhbmQgcmUtZXhlY3V0ZSBpdCwgbGlrZSB0aGUga2VybmVsJ3MgcmlzY3Zfdl9maXJzdF91c2VfaGFuZGxlcigpLlxcbitcXHQgKiBHZW51aW5lbHkgaWxsZWdhbCBpbnN0cnVjdGlvbnMgY29udGludWUgdG8gdGhlIHVuZXhwZWN0ZWQtZXhjZXB0aW9uXFxuK1xcdCAqIHBhdGguXFxuK1xcdCAqL1xcbitcXHRpZiAoIShyZWdzLVxcdTAwM2VjYXVzZSBcXHUwMDI2IENBVVNFX0lSUV9GTEFHKSBcXHUwMDI2XFx1MDAyNiBlYyA9PSBFWENfSU5TVF9JTExFR0FMIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBoYW5kbGVycyBcXHUwMDI2XFx1MDAyNiBoYW5kbGVycy1cXHUwMDNldl9hdmFpbGFibGUgXFx1MDAyNlxcdTAwMjYgIShyZWdzLVxcdTAwM2VzdGF0dXMgXFx1MDAyNiBTUl9WUykpIHtcXG4rXFx0XFx0dTMyIGluc24gPSAodTMyKXJlZ3MtXFx1MDAzZWJhZGFkZHI7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBzdHZhbCBpcyBub3QgZ3VhcmFudGVlZCB0byBob2xkIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbi5cXG4rXFx0XFx0ICogVmVjdG9yIGluc3RydWN0aW9ucyBhcmUgYWx3YXlzIDMyLWJpdCwgc28gcmVhZCBhIDE2LWJpdFxcbitcXHRcXHQgKiBoYWxmd29yZCBmaXJzdCBhbmQgb25seSBsb2FkIHRoZSBmdWxsIDMyLWJpdCBpbnN0cnVjdGlvbiB3aGVuXFxuK1xcdFxcdCAqIGl0IGlzIG5vdCBjb21wcmVzc2VkOyB0aGlzIGF2b2lkcyBhbiB1bmFsaWduZWQgb3IgY3Jvc3MtcGFnZVxcbitcXHRcXHQgKiBhY2Nlc3Mgb24gYSBjb21wcmVzc2VkIGluc3RydWN0aW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFpbnNuKSB7XFxuK1xcdFxcdFxcdHUxNiBoYWxmID0gKih1MTYgKilyZWdzLVxcdTAwM2VlcGM7XFxuK1xcbitcXHRcXHRcXHRpZiAoKGhhbGYgXFx1MDAyNiAweDMpID09IDB4MylcXG4rXFx0XFx0XFx0XFx0aW5zbiA9ICoodTMyICopcmVncy1cXHUwMDNlZXBjO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoaW5zbl9pc192ZWN0b3IoaW5zbikpIHtcXG4rXFx0XFx0XFx0cmVncy1cXHUwMDNlc3RhdHVzIHw9IFNSX1ZTX0lOSVRJQUw7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRpZiAoaGFuZGxlcnMgXFx1MDAyNlxcdTAwMjYgaGFuZGxlcnMtXFx1MDAzZWV4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXSlcXG4gXFx0XFx0cmV0dXJuIGhhbmRsZXJzLVxcdTAwM2VleGNlcHRpb25faGFuZGxlcnNbdmVjdG9yXVtlY10ocmVncyk7XFxuIFxcbkBAIC00NDgsNiArNTE5LDkgQEAgdm9pZCB2Y3B1X2luaXRfdmVjdG9yX3RhYmxlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiB2b2lkIHZtX2luaXRfdmVjdG9yX3RhYmxlcyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4ge1xcbitcXHRpZiAodm0tXFx1MDAzZWhhbmRsZXJzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHR2bS1cXHUwMDNlaGFuZGxlcnMgPSBfX3ZtX2FsbG9jKHZtLCBzaXplb2Yoc3RydWN0IGhhbmRsZXJzKSwgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICBNRU1fUkVHSU9OX0RBVEEpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MDU6MjQuMTI5MTUwNzI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTY1NTU3NTY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0pIHRvIGFkZCBSSVNDLVYgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgZm9yIHRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM0MzUwN2ExMjM3MDIyZDBhN2U3NWQyMjBlOTViZDRkMDY0ZWE0MGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjowNToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbmluZGV4IGUzYWNmMmFlOTg4MWUuLjY4NWJhZWZlYmRiMTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbkBAIC0yNSw2ICsyNSwxOSBAQFxuICNkZWZpbmUgR0VUX1JNKGluc24pICAgICAgICAgICAgKCgoaW5zbikgXHUwMDI2IElOU05fTUFTS19GVU5DVDMpIFx1MDAzZVx1MDAzZSBJTlNOX1NISUZUX0ZVTkNUMylcbiAjZGVmaW5lIEdFVF9DU1JfTlVNKGluc24pICAgICAgICgoKGluc24pIFx1MDAyNiBJTlNOX0NTUl9NQVNLKSBcdTAwM2VcdTAwM2UgSU5TTl9DU1JfU0hJRlQpXG4gXG4rLyogVmVjdG9yIChWKSBpbnN0cnVjdGlvbiBkZWNvZGluZywgbWF0Y2hpbmcgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9pbnNuLmggKi9cbisjZGVmaW5lIFJWX0lOU05fT1BDT0RFX01BU0tcdDB4N2ZcbisjZGVmaW5lIFJWR19PUENPREVfU1lTVEVNXHQweDczXG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUlx0MHg1N1xuKyNkZWZpbmUgUlZWX09QQ09ERV9WTFx0XHQweDA3XG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZTXHRcdDB4MjdcbisjZGVmaW5lIFJWVl9WTF9WU19XSURUSF84XHQwXG4rI2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfMTZcdDVcbisjZGVmaW5lIFJWVl9WTF9WU19XSURUSF8zMlx0NlxuKyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzY0XHQ3XG4rI2RlZmluZSBSVlZfRVhUUkFDVF9WTF9WU19XSURUSChpbnNuKVx0KCgoaW5zbikgXHUwMDNlXHUwMDNlIDEyKSBcdTAwMjYgMHg3KVxuKyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKVx0KCgoaW5zbikgXHUwMDNlXHUwMDNlIDIwKSBcdTAwMjYgMHhmZmYpXG4rXG4gc3RhdGljIGlubGluZSB1NjQgX19rdm1fcmVnX2lkKHU2NCB0eXBlLCB1NjQgc3VidHlwZSwgdTY0IGlkeCwgdTY0IHNpemUpXG4ge1xuIFx0cmV0dXJuIEtWTV9SRUdfUklTQ1YgfCB0eXBlIHwgc3VidHlwZSB8IGlkeCB8IHNpemU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmU2NzcxMzdkNWU0NDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtMTcsNiArMTcsMTEgQEBcbiBcbiBzdGF0aWMgZ3ZhX3QgZXhjZXB0aW9uX2hhbmRsZXJzO1xuIFxuK3N0cnVjdCBoYW5kbGVycyB7XG4rXHRleGNlcHRpb25faGFuZGxlcl9mbiBleGNlcHRpb25faGFuZGxlcnNbTlJfVkVDVE9SU11bTlJfRVhDRVBUSU9OU107XG4rXHRib29sIHZfYXZhaWxhYmxlO1xuK307XG4rXG4gYm9vbCBfX3ZjcHVfaGFzX2V4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBleHQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IDA7XG5AQCAtMjk4LDEzICszMDMsNiBAQCB2b2lkIHZjcHVfYXJjaF9kdW1wKEZJTEUgKnN0cmVhbSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBpbmRlbnQpXG4gXHRcdGNvcmUucmVncy50MywgY29yZS5yZWdzLnQ0LCBjb3JlLnJlZ3MudDUsIGNvcmUucmVncy50Nik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fYWxpZ25lZCgxNikgZ3Vlc3RfdW5leHBfdHJhcCh2b2lkKVxuLXtcbi1cdHNiaV9lY2FsbChLVk1fUklTQ1ZfU0VMRlRFU1RTX1NCSV9FWFQsXG4tXHRcdCAgS1ZNX1JJU0NWX1NFTEZURVNUU19TQklfVU5FWFAsXG4tXHRcdCAgMCwgMCwgMCwgMCwgMCwgMCk7XG4tfVxuLVxuIHZvaWQgdmNwdV9hcmNoX3NldF9lbnRyeV9wb2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKmd1ZXN0X2NvZGUpXG4ge1xuIFx0dmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0NPUkVfUkVHKHJlZ3MucGMpLCAodW5zaWduZWQgbG9uZylndWVzdF9jb2RlKTtcbkBAIC0zNDgsOCArMzQ2LDI2IEBAIHN0cnVjdCBrdm1fdmNwdSAqdm1fYXJjaF92Y3B1X2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHZjcHVfaWQpXG4gXHQvKiBTZXR1cCBzc2NyYXRjaCBmb3IgZ3Vlc3RfZ2V0X3ZjcHVpZCgpICovXG4gXHR2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHNzY3JhdGNoKSwgdmNwdV9pZCk7XG4gXG4tXHQvKiBTZXR1cCBkZWZhdWx0IGV4Y2VwdGlvbiB2ZWN0b3Igb2YgZ3Vlc3QgKi9cbi1cdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9HRU5FUkFMX0NTUl9SRUcoc3R2ZWMpLCAodW5zaWduZWQgbG9uZylndWVzdF91bmV4cF90cmFwKTtcbitcdC8qXG4rXHQgKiBBZHZlcnRpc2UgViB0byBLVk0gc28gLU8yIGF1dG8tdmVjdG9yaXphdGlvbiBpbiBndWVzdCBjb2RlIGlzIHZhbGlkO1xuK1x0ICogaWdub3JlIGVycm9ycyBzaW5jZSB0aGUgdGVzdHMgd29yayB3aXRob3V0IFYgdG9vLiBVc2UgdGhlIGZ1bGxcbitcdCAqIGV4Y2VwdGlvbiB2ZWN0b3IgdGFibGUgKHdoaWNoIGxhemlseSBlbmFibGVzIFYgaW4gcm91dGVfZXhjZXB0aW9uKCkpXG4rXHQgKiBhcyB0aGUgZGVmYXVsdCBoYW5kbGVyOyB2bV9pbml0X3ZlY3Rvcl90YWJsZXMoKSBpcyBpZGVtcG90ZW50LlxuK1x0ICovXG4rXHRfX3ZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9JU0FfRVhUX1JFRyhLVk1fUklTQ1ZfSVNBX0VYVF9WKSwgMSk7XG4rXHR2bV9pbml0X3ZlY3Rvcl90YWJsZXModm0pO1xuK1x0dmNwdV9pbml0X3ZlY3Rvcl90YWJsZXModmNwdSk7XG4rXG4rXHQvKlxuK1x0ICogUmVjb3JkIFYgYXZhaWxhYmlsaXR5IGZvciByb3V0ZV9leGNlcHRpb24oKSwgd2hpY2ggcnVucyBpbiBndWVzdFxuK1x0ICogY29udGV4dC4gViBpcyBlbmFibGVkIHVuaWZvcm1seSBmb3IgZXZlcnkgdkNQVSwgc28gdGhpcyBpcyBhXG4rXHQgKiBWTS13aWRlIHByb3BlcnR5LlxuK1x0ICovXG4rXHR7XG4rXHRcdHN0cnVjdCBoYW5kbGVycyAqaCA9IGFkZHJfZ3ZhMmh2YSh2bSwgdm0tXHUwMDNlaGFuZGxlcnMpO1xuK1xuK1x0XHRoLVx1MDAzZXZfYXZhaWxhYmxlID0gX192Y3B1X2hhc19pc2FfZXh0KHZjcHUsIEtWTV9SSVNDVl9JU0FfRVhUX1YpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHZjcHU7XG4gfVxuQEAgLTQwOCwxOSArNDI0LDQzIEBAIHZvaWQgYXNzZXJ0X29uX3VuaGFuZGxlZF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3RydWN0IHVjYWxsIHVjO1xuIFxuIFx0aWYgKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YykgPT0gVUNBTExfVU5IQU5ETEVEKSB7XG4rXHRcdHZjcHVfZHVtcChzdGRlcnIsIHZjcHUsIDIpO1xuIFx0XHRURVNUX0ZBSUwoXCJVbmV4cGVjdGVkIGV4Y2VwdGlvbiAodmVjdG9yOjB4JWx4LCBlYzoweCVseClcIixcbiBcdFx0XHR1Yy5hcmdzWzBdLCB1Yy5hcmdzWzFdKTtcbiBcdH1cbiB9XG4gXG4tc3RydWN0IGhhbmRsZXJzIHtcbi1cdGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGV4Y2VwdGlvbl9oYW5kbGVyc1tOUl9WRUNUT1JTXVtOUl9FWENFUFRJT05TXTtcbi19O1xuK3N0YXRpYyBib29sIGluc25faXNfdmVjdG9yKHUzMiBpbnNuKVxuK3tcbitcdHUzMiBvcGNvZGUgPSBpbnNuIFx1MDAyNiBSVl9JTlNOX09QQ09ERV9NQVNLO1xuK1x0dTMyIHdpZHRoLCBjc3I7XG4rXG4rXHQvKiBBbGwgVi1yZWxhdGVkIGluc3RydWN0aW9ucyBhcmUgNC1ieXRlLCBpLmUuIG5vdCBjb21wcmVzc2VkLiAqL1xuK1x0aWYgKChpbnNuIFx1MDAyNiAweDMpICE9IDB4MylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0c3dpdGNoIChvcGNvZGUpIHtcbitcdGNhc2UgUlZWX09QQ09ERV9WRUNUT1I6XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0Y2FzZSBSVlZfT1BDT0RFX1ZMOlxuK1x0Y2FzZSBSVlZfT1BDT0RFX1ZTOlxuK1x0XHR3aWR0aCA9IFJWVl9FWFRSQUNUX1ZMX1ZTX1dJRFRIKGluc24pO1xuK1x0XHRyZXR1cm4gd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzggfHwgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzE2IHx8XG4rXHRcdCAgICAgICB3aWR0aCA9PSBSVlZfVkxfVlNfV0lEVEhfMzIgfHwgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzY0O1xuK1x0Y2FzZSBSVkdfT1BDT0RFX1NZU1RFTTpcbitcdFx0Y3NyID0gUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKTtcbitcdFx0cmV0dXJuIChjc3IgXHUwMDNlPSBDU1JfVlNUQVJUIFx1MDAyNlx1MDAyNiBjc3IgXHUwMDNjPSBDU1JfVkNTUikgfHxcbitcdFx0ICAgICAgIChjc3IgXHUwMDNlPSBDU1JfVkwgXHUwMDI2XHUwMDI2IGNzciBcdTAwM2M9IENTUl9WTEVOQik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuIFxuIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdHN0cnVjdCBoYW5kbGVycyAqaGFuZGxlcnMgPSAoc3RydWN0IGhhbmRsZXJzICopZXhjZXB0aW9uX2hhbmRsZXJzO1xuLVx0aW50IHZlY3RvciA9IDAsIGVjO1xuK1x0aW50IHZlY3RvciA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIGVjO1xuIFxuIFx0ZWMgPSByZWdzLVx1MDAzZWNhdXNlIFx1MDAyNiB+Q0FVU0VfSVJRX0ZMQUc7XG4gXHRpZiAoZWMgXHUwMDNlPSBOUl9FWENFUFRJT05TKVxuQEAgLTQzMiw2ICs0NzIsMzcgQEAgdm9pZCByb3V0ZV9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGVjID0gMDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBMYXppbHkgZW5hYmxlIFYgb24gdGhlIGZpcnN0IHZlY3RvciBpbnN0cnVjdGlvbjogaWYgdGhlIGZhdWx0aW5nXG4rXHQgKiBpbnN0cnVjdGlvbiBkZWNvZGVzIGFzIHZlY3RvciB3aGlsZSBWUyBpcyBvZmYsIHNldCBWUyB0byBJbml0aWFsXG4rXHQgKiBhbmQgcmUtZXhlY3V0ZSBpdCwgbGlrZSB0aGUga2VybmVsJ3MgcmlzY3Zfdl9maXJzdF91c2VfaGFuZGxlcigpLlxuK1x0ICogR2VudWluZWx5IGlsbGVnYWwgaW5zdHJ1Y3Rpb25zIGNvbnRpbnVlIHRvIHRoZSB1bmV4cGVjdGVkLWV4Y2VwdGlvblxuK1x0ICogcGF0aC5cbitcdCAqL1xuK1x0aWYgKCEocmVncy1cdTAwM2VjYXVzZSBcdTAwMjYgQ0FVU0VfSVJRX0ZMQUcpIFx1MDAyNlx1MDAyNiBlYyA9PSBFWENfSU5TVF9JTExFR0FMIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGhhbmRsZXJzIFx1MDAyNlx1MDAyNiBoYW5kbGVycy1cdTAwM2V2X2F2YWlsYWJsZSBcdTAwMjZcdTAwMjYgIShyZWdzLVx1MDAzZXN0YXR1cyBcdTAwMjYgU1JfVlMpKSB7XG4rXHRcdHUzMiBpbnNuID0gKHUzMilyZWdzLVx1MDAzZWJhZGFkZHI7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIHN0dmFsIGlzIG5vdCBndWFyYW50ZWVkIHRvIGhvbGQgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uLlxuK1x0XHQgKiBWZWN0b3IgaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgMzItYml0LCBzbyByZWFkIGEgMTYtYml0XG4rXHRcdCAqIGhhbGZ3b3JkIGZpcnN0IGFuZCBvbmx5IGxvYWQgdGhlIGZ1bGwgMzItYml0IGluc3RydWN0aW9uIHdoZW5cbitcdFx0ICogaXQgaXMgbm90IGNvbXByZXNzZWQ7IHRoaXMgYXZvaWRzIGFuIHVuYWxpZ25lZCBvciBjcm9zcy1wYWdlXG4rXHRcdCAqIGFjY2VzcyBvbiBhIGNvbXByZXNzZWQgaW5zdHJ1Y3Rpb24uXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWluc24pIHtcbitcdFx0XHR1MTYgaGFsZiA9ICoodTE2ICopcmVncy1cdTAwM2VlcGM7XG4rXG4rXHRcdFx0aWYgKChoYWxmIFx1MDAyNiAweDMpID09IDB4MylcbitcdFx0XHRcdGluc24gPSAqKHUzMiAqKXJlZ3MtXHUwMDNlZXBjO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChpbnNuX2lzX3ZlY3RvcihpbnNuKSkge1xuK1x0XHRcdHJlZ3MtXHUwMDNlc3RhdHVzIHw9IFNSX1ZTX0lOSVRJQUw7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRpZiAoaGFuZGxlcnMgXHUwMDI2XHUwMDI2IGhhbmRsZXJzLVx1MDAzZWV4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXSlcbiBcdFx0cmV0dXJuIGhhbmRsZXJzLVx1MDAzZWV4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXShyZWdzKTtcbiBcbkBAIC00NDgsNiArNTE5LDkgQEAgdm9pZCB2Y3B1X2luaXRfdmVjdG9yX3RhYmxlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCB2bV9pbml0X3ZlY3Rvcl90YWJsZXMoc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuK1x0aWYgKHZtLVx1MDAzZWhhbmRsZXJzKVxuK1x0XHRyZXR1cm47XG4rXG4gXHR2bS1cdTAwM2VoYW5kbGVycyA9IF9fdm1fYWxsb2Modm0sIHNpemVvZihzdHJ1Y3QgaGFuZGxlcnMpLCB2bS1cdTAwM2VwYWdlX3NpemUsXG4gXHRcdFx0XHQgIE1FTV9SRUdJT05fREFUQSk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjowNToyNC4xMjkxNTIwMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjU1NTM3ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQncyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIHRoZSBLVk0gc2VsZi10ZXN0cyBmb3IgUklTQy1WLCBzcGVjaWZpY2FsbHkgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaGAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyB2ZWN0b3IgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGxhemlseSBlbmFibGluZyB0aGUgViBleHRlbnNpb24gZm9yIHRoZXNlIHRlc3RzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnRzIGZ1enppbmc/XG5cbkxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHByb21wdCBvdXRsaW5lcyBhIHByZXR0eSBjbGVhciBzZXQgb2YgY3JpdGVyaWEgZm9yIHdoZW4gYSBwYXRjaCAqc2hvdWxkbid0KiBiZSBmdXp6ZWQuIEl0J3MgZXNzZW50aWFsbHkgZmlsdGVyaW5nIG91dCB0aGluZ3MgdGhhdCBkb24ndCBkaXJlY3RseSBpbXBhY3QgdGhlIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHksIGZvY3VzaW5nIG9uIHRlc3QgY29kZSwgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgY29uc3RhbnQgY2hhbmdlcywgYW5kIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGF2b2lkIHdhc3RpbmcgZnV6emluZyByZXNvdXJjZXMgb24gaXJyZWxldmFudCBhcmVhcy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBsb29rcyBsaWtlIGEgcmVzb3VuZGluZyBcIm5vLlwiIEl0J3MgbW9kaWZ5aW5nIGNvZGUgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBkaXJlY3RvcnkuIFRoYXQncyBhIHJlZCBmbGFnIGltbWVkaWF0ZWx5LiBUZXN0IGNvZGUsIGJ5IGRlZmluaXRpb24sIGlzIG1lYW50IGZvciB2YWxpZGF0aW5nIHRoZSBrZXJuZWwsIG5vdCBtb2RpZnlpbmcgaXQuIFNlbGZ0ZXN0cyBhcmUgZGVzaWduZWQgdG8gYmUgaXNvbGF0ZWQgZnJvbSBjb3JlIGtlcm5lbCBsb2dpYy4gVGhleSBhcmUgdGhlcmUgdG8gZW5zdXJlIHRoZSBjb2RlIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgdW5kZXIgdmFyaW91cyBzY2VuYXJpb3MuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBkb3VibGUtY2hlY2sgdGhlIGRpZmYuIFRoZSBvbmx5IGZpbGVzIGJlaW5nIHRvdWNoZWQgYXJlIHRob3NlIHR3byB3aXRoaW4gdGhlIHNlbGZ0ZXN0cyBkaXJlY3RvcnkuIE5vdGhpbmcgZWxzZS4gTm8gY29yZSBrZXJuZWwgZmlsZXMsIG5vIGRyaXZlcnMsIG5vdGhpbmcgdGhhdCB3b3VsZCBzdWdnZXN0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgc3lzdGVtLiBJdCBpcyBwdXJlbHkgdGVzdCBpbmZyYXN0cnVjdHVyZS5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIHRlc3QgY29kZSwgaXQgZG9lc24ndCBhZmZlY3QgdGhlIGtlcm5lbCdzIGZ1bmN0aW9uYWwgYmVoYXZpb3IsIHNlY3VyaXR5LCBvciBzdGFiaWxpdHkuIEknbSBnb2luZyB0byBjb25maWRlbnRseSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIGlzIGxpbWl0ZWQgdG8gdGVzdCBjb2RlIGFkZGl0aW9ucywgbm90IGZ1bmRhbWVudGFsIGtlcm5lbCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjkyLCJPdXRwdXRUb2tlbnMiOjgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MDU6MzMuNzg0NjkyNjg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjA5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bSkgdG8gYWRkIFJJU0MtViB2ZWN0b3IgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGxhenkgViBleHRlbnNpb24gZW5hYmxlbWVudCBmb3IgdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0pIHRvIGFkZCBSSVNDLVYgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgZm9yIHRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjA1OjMzLjc4NDcyOTExOFoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp24t8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 11:15:07 +0000 UTC FinishedAt: 2026-08-13 12:05:35 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0pIHRvIGFkZCBSSVNDLVYgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgZm9yIHRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNDM1MDdhMTIzNzAyMmQwYTdlNzVkMjIwZTk1YmQ0ZDA2NGVhNDBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTI6MDU6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuaW5kZXggZTNhY2YyYWU5ODgxZS4uNjg1YmFlZmViZGIxMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuQEAgLTI1LDYgJiM0MzsyNSwxOSBAQFxuICNkZWZpbmUgR0VUX1JNKGluc24pICAgICAgICAgICAgKCgoaW5zbikgXHUwMDI2IElOU05fTUFTS19GVU5DVDMpIFx1MDAzZVx1MDAzZSBJTlNOX1NISUZUX0ZVTkNUMylcbiAjZGVmaW5lIEdFVF9DU1JfTlVNKGluc24pICAgICAgICgoKGluc24pIFx1MDAyNiBJTlNOX0NTUl9NQVNLKSBcdTAwM2VcdTAwM2UgSU5TTl9DU1JfU0hJRlQpXG4gXG4mIzQzOy8qIFZlY3RvciAoVikgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcsIG1hdGNoaW5nIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW5zbi5oICovXG4mIzQzOyNkZWZpbmUgUlZfSU5TTl9PUENPREVfTUFTS1x0MHg3ZlxuJiM0MzsjZGVmaW5lIFJWR19PUENPREVfU1lTVEVNXHQweDczXG4mIzQzOyNkZWZpbmUgUlZWX09QQ09ERV9WRUNUT1JcdDB4NTdcbiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZMXHRcdDB4MDdcbiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZTXHRcdDB4MjdcbiYjNDM7I2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfOFx0MFxuJiM0MzsjZGVmaW5lIFJWVl9WTF9WU19XSURUSF8xNlx0NVxuJiM0MzsjZGVmaW5lIFJWVl9WTF9WU19XSURUSF8zMlx0NlxuJiM0MzsjZGVmaW5lIFJWVl9WTF9WU19XSURUSF82NFx0N1xuJiM0MzsjZGVmaW5lIFJWVl9FWFRSQUNUX1ZMX1ZTX1dJRFRIKGluc24pXHQoKChpbnNuKSBcdTAwM2VcdTAwM2UgMTIpIFx1MDAyNiAweDcpXG4mIzQzOyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKVx0KCgoaW5zbikgXHUwMDNlXHUwMDNlIDIwKSBcdTAwMjYgMHhmZmYpXG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdTY0IF9fa3ZtX3JlZ19pZCh1NjQgdHlwZSwgdTY0IHN1YnR5cGUsIHU2NCBpZHgsIHU2NCBzaXplKVxuIHtcbiBcdHJldHVybiBLVk1fUkVHX1JJU0NWIHwgdHlwZSB8IHN1YnR5cGUgfCBpZHggfCBzaXplO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5lNjc3MTM3ZDVlNDQ4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuQEAgLTE3LDYgJiM0MzsxNywxMSBAQFxuIFxuIHN0YXRpYyBndmFfdCBleGNlcHRpb25faGFuZGxlcnM7XG4gXG4mIzQzO3N0cnVjdCBoYW5kbGVycyB7XG4mIzQzO1x0ZXhjZXB0aW9uX2hhbmRsZXJfZm4gZXhjZXB0aW9uX2hhbmRsZXJzW05SX1ZFQ1RPUlNdW05SX0VYQ0VQVElPTlNdO1xuJiM0MztcdGJvb2wgdl9hdmFpbGFibGU7XG4mIzQzO307XG4mIzQzO1xuIGJvb2wgX192Y3B1X2hhc19leHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXh0KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwO1xuQEAgLTI5OCwxMyAmIzQzOzMwMyw2IEBAIHZvaWQgdmNwdV9hcmNoX2R1bXAoRklMRSAqc3RyZWFtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IGluZGVudClcbiBcdFx0Y29yZS5yZWdzLnQzLCBjb3JlLnJlZ3MudDQsIGNvcmUucmVncy50NSwgY29yZS5yZWdzLnQ2KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19hbGlnbmVkKDE2KSBndWVzdF91bmV4cF90cmFwKHZvaWQpXG4te1xuLVx0c2JpX2VjYWxsKEtWTV9SSVNDVl9TRUxGVEVTVFNfU0JJX0VYVCxcbi1cdFx0ICBLVk1fUklTQ1ZfU0VMRlRFU1RTX1NCSV9VTkVYUCxcbi1cdFx0ICAwLCAwLCAwLCAwLCAwLCAwKTtcbi19XG4tXG4gdm9pZCB2Y3B1X2FyY2hfc2V0X2VudHJ5X3BvaW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqZ3Vlc3RfY29kZSlcbiB7XG4gXHR2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfQ09SRV9SRUcocmVncy5wYyksICh1bnNpZ25lZCBsb25nKWd1ZXN0X2NvZGUpO1xuQEAgLTM0OCw4ICYjNDM7MzQ2LDI2IEBAIHN0cnVjdCBrdm1fdmNwdSAqdm1fYXJjaF92Y3B1X2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHZjcHVfaWQpXG4gXHQvKiBTZXR1cCBzc2NyYXRjaCBmb3IgZ3Vlc3RfZ2V0X3ZjcHVpZCgpICovXG4gXHR2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHNzY3JhdGNoKSwgdmNwdV9pZCk7XG4gXG4tXHQvKiBTZXR1cCBkZWZhdWx0IGV4Y2VwdGlvbiB2ZWN0b3Igb2YgZ3Vlc3QgKi9cbi1cdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9HRU5FUkFMX0NTUl9SRUcoc3R2ZWMpLCAodW5zaWduZWQgbG9uZylndWVzdF91bmV4cF90cmFwKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFkdmVydGlzZSBWIHRvIEtWTSBzbyAtTzIgYXV0by12ZWN0b3JpemF0aW9uIGluIGd1ZXN0IGNvZGUgaXMgdmFsaWQ7XG4mIzQzO1x0ICogaWdub3JlIGVycm9ycyBzaW5jZSB0aGUgdGVzdHMgd29yayB3aXRob3V0IFYgdG9vLiBVc2UgdGhlIGZ1bGxcbiYjNDM7XHQgKiBleGNlcHRpb24gdmVjdG9yIHRhYmxlICh3aGljaCBsYXppbHkgZW5hYmxlcyBWIGluIHJvdXRlX2V4Y2VwdGlvbigpKVxuJiM0MztcdCAqIGFzIHRoZSBkZWZhdWx0IGhhbmRsZXI7IHZtX2luaXRfdmVjdG9yX3RhYmxlcygpIGlzIGlkZW1wb3RlbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0X192Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfSVNBX0VYVF9SRUcoS1ZNX1JJU0NWX0lTQV9FWFRfViksIDEpO1xuJiM0MztcdHZtX2luaXRfdmVjdG9yX3RhYmxlcyh2bSk7XG4mIzQzO1x0dmNwdV9pbml0X3ZlY3Rvcl90YWJsZXModmNwdSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVjb3JkIFYgYXZhaWxhYmlsaXR5IGZvciByb3V0ZV9leGNlcHRpb24oKSwgd2hpY2ggcnVucyBpbiBndWVzdFxuJiM0MztcdCAqIGNvbnRleHQuIFYgaXMgZW5hYmxlZCB1bmlmb3JtbHkgZm9yIGV2ZXJ5IHZDUFUsIHNvIHRoaXMgaXMgYVxuJiM0MztcdCAqIFZNLXdpZGUgcHJvcGVydHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0e1xuJiM0MztcdFx0c3RydWN0IGhhbmRsZXJzICpoID0gYWRkcl9ndmEyaHZhKHZtLCB2bS1cdTAwM2VoYW5kbGVycyk7XG4mIzQzO1xuJiM0MztcdFx0aC1cdTAwM2V2X2F2YWlsYWJsZSA9IF9fdmNwdV9oYXNfaXNhX2V4dCh2Y3B1LCBLVk1fUklTQ1ZfSVNBX0VYVF9WKTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gdmNwdTtcbiB9XG5AQCAtNDA4LDE5ICYjNDM7NDI0LDQzIEBAIHZvaWQgYXNzZXJ0X29uX3VuaGFuZGxlZF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3RydWN0IHVjYWxsIHVjO1xuIFxuIFx0aWYgKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YykgPT0gVUNBTExfVU5IQU5ETEVEKSB7XG4mIzQzO1x0XHR2Y3B1X2R1bXAoc3RkZXJyLCB2Y3B1LCAyKTtcbiBcdFx0VEVTVF9GQUlMKFwmIzM0O1VuZXhwZWN0ZWQgZXhjZXB0aW9uICh2ZWN0b3I6MHglbHgsIGVjOjB4JWx4KVwmIzM0OyxcbiBcdFx0XHR1Yy5hcmdzWzBdLCB1Yy5hcmdzWzFdKTtcbiBcdH1cbiB9XG4gXG4tc3RydWN0IGhhbmRsZXJzIHtcbi1cdGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGV4Y2VwdGlvbl9oYW5kbGVyc1tOUl9WRUNUT1JTXVtOUl9FWENFUFRJT05TXTtcbi19O1xuJiM0MztzdGF0aWMgYm9vbCBpbnNuX2lzX3ZlY3Rvcih1MzIgaW5zbilcbiYjNDM7e1xuJiM0MztcdHUzMiBvcGNvZGUgPSBpbnNuIFx1MDAyNiBSVl9JTlNOX09QQ09ERV9NQVNLO1xuJiM0MztcdHUzMiB3aWR0aCwgY3NyO1xuJiM0MztcbiYjNDM7XHQvKiBBbGwgVi1yZWxhdGVkIGluc3RydWN0aW9ucyBhcmUgNC1ieXRlLCBpLmUuIG5vdCBjb21wcmVzc2VkLiAqL1xuJiM0MztcdGlmICgoaW5zbiBcdTAwMjYgMHgzKSAhPSAweDMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAob3Bjb2RlKSB7XG4mIzQzO1x0Y2FzZSBSVlZfT1BDT0RFX1ZFQ1RPUjpcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGNhc2UgUlZWX09QQ09ERV9WTDpcbiYjNDM7XHRjYXNlIFJWVl9PUENPREVfVlM6XG4mIzQzO1x0XHR3aWR0aCA9IFJWVl9FWFRSQUNUX1ZMX1ZTX1dJRFRIKGluc24pO1xuJiM0MztcdFx0cmV0dXJuIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF84IHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8xNiB8fFxuJiM0MztcdFx0ICAgICAgIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8zMiB8fCB3aWR0aCA9PSBSVlZfVkxfVlNfV0lEVEhfNjQ7XG4mIzQzO1x0Y2FzZSBSVkdfT1BDT0RFX1NZU1RFTTpcbiYjNDM7XHRcdGNzciA9IFJWR19FWFRSQUNUX1NZU1RFTV9DU1IoaW5zbik7XG4mIzQzO1x0XHRyZXR1cm4gKGNzciBcdTAwM2U9IENTUl9WU1RBUlQgXHUwMDI2XHUwMDI2IGNzciBcdTAwM2M9IENTUl9WQ1NSKSB8fFxuJiM0MztcdFx0ICAgICAgIChjc3IgXHUwMDNlPSBDU1JfVkwgXHUwMDI2XHUwMDI2IGNzciBcdTAwM2M9IENTUl9WTEVOQik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiBcbiB2b2lkIHJvdXRlX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiB7XG4gXHRzdHJ1Y3QgaGFuZGxlcnMgKmhhbmRsZXJzID0gKHN0cnVjdCBoYW5kbGVycyAqKWV4Y2VwdGlvbl9oYW5kbGVycztcbi1cdGludCB2ZWN0b3IgPSAwLCBlYztcbiYjNDM7XHRpbnQgdmVjdG9yID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGVjO1xuIFxuIFx0ZWMgPSByZWdzLVx1MDAzZWNhdXNlIFx1MDAyNiB+Q0FVU0VfSVJRX0ZMQUc7XG4gXHRpZiAoZWMgXHUwMDNlPSBOUl9FWENFUFRJT05TKVxuQEAgLTQzMiw2ICYjNDM7NDcyLDM3IEBAIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIFx0XHRlYyA9IDA7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBMYXppbHkgZW5hYmxlIFYgb24gdGhlIGZpcnN0IHZlY3RvciBpbnN0cnVjdGlvbjogaWYgdGhlIGZhdWx0aW5nXG4mIzQzO1x0ICogaW5zdHJ1Y3Rpb24gZGVjb2RlcyBhcyB2ZWN0b3Igd2hpbGUgVlMgaXMgb2ZmLCBzZXQgVlMgdG8gSW5pdGlhbFxuJiM0MztcdCAqIGFuZCByZS1leGVjdXRlIGl0LCBsaWtlIHRoZSBrZXJuZWwmIzM5O3MgcmlzY3Zfdl9maXJzdF91c2VfaGFuZGxlcigpLlxuJiM0MztcdCAqIEdlbnVpbmVseSBpbGxlZ2FsIGluc3RydWN0aW9ucyBjb250aW51ZSB0byB0aGUgdW5leHBlY3RlZC1leGNlcHRpb25cbiYjNDM7XHQgKiBwYXRoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghKHJlZ3MtXHUwMDNlY2F1c2UgXHUwMDI2IENBVVNFX0lSUV9GTEFHKSBcdTAwMjZcdTAwMjYgZWMgPT0gRVhDX0lOU1RfSUxMRUdBTCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaGFuZGxlcnMgXHUwMDI2XHUwMDI2IGhhbmRsZXJzLVx1MDAzZXZfYXZhaWxhYmxlIFx1MDAyNlx1MDAyNiAhKHJlZ3MtXHUwMDNlc3RhdHVzIFx1MDAyNiBTUl9WUykpIHtcbiYjNDM7XHRcdHUzMiBpbnNuID0gKHUzMilyZWdzLVx1MDAzZWJhZGFkZHI7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIHN0dmFsIGlzIG5vdCBndWFyYW50ZWVkIHRvIGhvbGQgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uLlxuJiM0MztcdFx0ICogVmVjdG9yIGluc3RydWN0aW9ucyBhcmUgYWx3YXlzIDMyLWJpdCwgc28gcmVhZCBhIDE2LWJpdFxuJiM0MztcdFx0ICogaGFsZndvcmQgZmlyc3QgYW5kIG9ubHkgbG9hZCB0aGUgZnVsbCAzMi1iaXQgaW5zdHJ1Y3Rpb24gd2hlblxuJiM0MztcdFx0ICogaXQgaXMgbm90IGNvbXByZXNzZWQ7IHRoaXMgYXZvaWRzIGFuIHVuYWxpZ25lZCBvciBjcm9zcy1wYWdlXG4mIzQzO1x0XHQgKiBhY2Nlc3Mgb24gYSBjb21wcmVzc2VkIGluc3RydWN0aW9uLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWluc24pIHtcbiYjNDM7XHRcdFx0dTE2IGhhbGYgPSAqKHUxNiAqKXJlZ3MtXHUwMDNlZXBjO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKChoYWxmIFx1MDAyNiAweDMpID09IDB4MylcbiYjNDM7XHRcdFx0XHRpbnNuID0gKih1MzIgKilyZWdzLVx1MDAzZWVwYztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5zbl9pc192ZWN0b3IoaW5zbikpIHtcbiYjNDM7XHRcdFx0cmVncy1cdTAwM2VzdGF0dXMgfD0gU1JfVlNfSU5JVElBTDtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaGFuZGxlcnMgXHUwMDI2XHUwMDI2IGhhbmRsZXJzLVx1MDAzZWV4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXSlcbiBcdFx0cmV0dXJuIGhhbmRsZXJzLVx1MDAzZWV4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXShyZWdzKTtcbiBcbkBAIC00NDgsNiAmIzQzOzUxOSw5IEBAIHZvaWQgdmNwdV9pbml0X3ZlY3Rvcl90YWJsZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIHZvaWQgdm1faW5pdF92ZWN0b3JfdGFibGVzKHN0cnVjdCBrdm1fdm0gKnZtKVxuIHtcbiYjNDM7XHRpZiAodm0tXHUwMDNlaGFuZGxlcnMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0dm0tXHUwMDNlaGFuZGxlcnMgPSBfX3ZtX2FsbG9jKHZtLCBzaXplb2Yoc3RydWN0IGhhbmRsZXJzKSwgdm0tXHUwMDNlcGFnZV9zaXplLFxuIFx0XHRcdFx0ICBNRU1fUkVHSU9OX0RBVEEpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bSkgdG8gYWRkIFJJU0MtViB2ZWN0b3IgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGxhenkgViBleHRlbnNpb24gZW5hYmxlbWVudCBmb3IgdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM0MzUwN2ExMjM3MDIyZDBhN2U3NWQyMjBlOTViZDRkMDY0ZWE0MGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjowNToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKaW5kZXggZTNhY2YyYWU5ODgxZS4uNjg1YmFlZmViZGIxMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKQEAgLTI1LDYgJiM0MzsyNSwxOSBAQAogI2RlZmluZSBHRVRfUk0oaW5zbikgICAgICAgICAgICAoKChpbnNuKSAmYW1wOyBJTlNOX01BU0tfRlVOQ1QzKSAmZ3Q7Jmd0OyBJTlNOX1NISUZUX0ZVTkNUMykKICNkZWZpbmUgR0VUX0NTUl9OVU0oaW5zbikgICAgICAgKCgoaW5zbikgJmFtcDsgSU5TTl9DU1JfTUFTSykgJmd0OyZndDsgSU5TTl9DU1JfU0hJRlQpCiAKJiM0MzsvKiBWZWN0b3IgKFYpIGluc3RydWN0aW9uIGRlY29kaW5nLCBtYXRjaGluZyBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2luc24uaCAqLwomIzQzOyNkZWZpbmUgUlZfSU5TTl9PUENPREVfTUFTSwkweDdmCiYjNDM7I2RlZmluZSBSVkdfT1BDT0RFX1NZU1RFTQkweDczCiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUgkweDU3CiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZMCQkweDA3CiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZTCQkweDI3CiYjNDM7I2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfOAkwCiYjNDM7I2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfMTYJNQomIzQzOyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzMyCTYKJiM0MzsjZGVmaW5lIFJWVl9WTF9WU19XSURUSF82NAk3CiYjNDM7I2RlZmluZSBSVlZfRVhUUkFDVF9WTF9WU19XSURUSChpbnNuKQkoKChpbnNuKSAmZ3Q7Jmd0OyAxMikgJmFtcDsgMHg3KQomIzQzOyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKQkoKChpbnNuKSAmZ3Q7Jmd0OyAyMCkgJmFtcDsgMHhmZmYpCiYjNDM7CiBzdGF0aWMgaW5saW5lIHU2NCBfX2t2bV9yZWdfaWQodTY0IHR5cGUsIHU2NCBzdWJ0eXBlLCB1NjQgaWR4LCB1NjQgc2l6ZSkKIHsKIAlyZXR1cm4gS1ZNX1JFR19SSVNDViB8IHR5cGUgfCBzdWJ0eXBlIHwgaWR4IHwgc2l6ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCmluZGV4IGRlZDU0MjlmMzQ0ODMuLmU2NzcxMzdkNWU0NDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwpAQCAtMTcsNiAmIzQzOzE3LDExIEBACiAKIHN0YXRpYyBndmFfdCBleGNlcHRpb25faGFuZGxlcnM7CiAKJiM0MztzdHJ1Y3QgaGFuZGxlcnMgewomIzQzOwlleGNlcHRpb25faGFuZGxlcl9mbiBleGNlcHRpb25faGFuZGxlcnNbTlJfVkVDVE9SU11bTlJfRVhDRVBUSU9OU107CiYjNDM7CWJvb2wgdl9hdmFpbGFibGU7CiYjNDM7fTsKJiM0MzsKIGJvb2wgX192Y3B1X2hhc19leHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXh0KQogewogCXVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwOwpAQCAtMjk4LDEzICYjNDM7MzAzLDYgQEAgdm9pZCB2Y3B1X2FyY2hfZHVtcChGSUxFICpzdHJlYW0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggaW5kZW50KQogCQljb3JlLnJlZ3MudDMsIGNvcmUucmVncy50NCwgY29yZS5yZWdzLnQ1LCBjb3JlLnJlZ3MudDYpOwogfQogCi1zdGF0aWMgdm9pZCBfX2FsaWduZWQoMTYpIGd1ZXN0X3VuZXhwX3RyYXAodm9pZCkKLXsKLQlzYmlfZWNhbGwoS1ZNX1JJU0NWX1NFTEZURVNUU19TQklfRVhULAotCQkgIEtWTV9SSVNDVl9TRUxGVEVTVFNfU0JJX1VORVhQLAotCQkgIDAsIDAsIDAsIDAsIDAsIDApOwotfQotCiB2b2lkIHZjcHVfYXJjaF9zZXRfZW50cnlfcG9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpndWVzdF9jb2RlKQogewogCXZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9DT1JFX1JFRyhyZWdzLnBjKSwgKHVuc2lnbmVkIGxvbmcpZ3Vlc3RfY29kZSk7CkBAIC0zNDgsOCAmIzQzOzM0NiwyNiBAQCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZtX2FyY2hfdmNwdV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIHUzMiB2Y3B1X2lkKQogCS8qIFNldHVwIHNzY3JhdGNoIGZvciBndWVzdF9nZXRfdmNwdWlkKCkgKi8KIAl2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHNzY3JhdGNoKSwgdmNwdV9pZCk7CiAKLQkvKiBTZXR1cCBkZWZhdWx0IGV4Y2VwdGlvbiB2ZWN0b3Igb2YgZ3Vlc3QgKi8KLQl2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHN0dmVjKSwgKHVuc2lnbmVkIGxvbmcpZ3Vlc3RfdW5leHBfdHJhcCk7CiYjNDM7CS8qCiYjNDM7CSAqIEFkdmVydGlzZSBWIHRvIEtWTSBzbyAtTzIgYXV0by12ZWN0b3JpemF0aW9uIGluIGd1ZXN0IGNvZGUgaXMgdmFsaWQ7CiYjNDM7CSAqIGlnbm9yZSBlcnJvcnMgc2luY2UgdGhlIHRlc3RzIHdvcmsgd2l0aG91dCBWIHRvby4gVXNlIHRoZSBmdWxsCiYjNDM7CSAqIGV4Y2VwdGlvbiB2ZWN0b3IgdGFibGUgKHdoaWNoIGxhemlseSBlbmFibGVzIFYgaW4gcm91dGVfZXhjZXB0aW9uKCkpCiYjNDM7CSAqIGFzIHRoZSBkZWZhdWx0IGhhbmRsZXI7IHZtX2luaXRfdmVjdG9yX3RhYmxlcygpIGlzIGlkZW1wb3RlbnQuCiYjNDM7CSAqLwomIzQzOwlfX3ZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9JU0FfRVhUX1JFRyhLVk1fUklTQ1ZfSVNBX0VYVF9WKSwgMSk7CiYjNDM7CXZtX2luaXRfdmVjdG9yX3RhYmxlcyh2bSk7CiYjNDM7CXZjcHVfaW5pdF92ZWN0b3JfdGFibGVzKHZjcHUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWNvcmQgViBhdmFpbGFiaWxpdHkgZm9yIHJvdXRlX2V4Y2VwdGlvbigpLCB3aGljaCBydW5zIGluIGd1ZXN0CiYjNDM7CSAqIGNvbnRleHQuIFYgaXMgZW5hYmxlZCB1bmlmb3JtbHkgZm9yIGV2ZXJ5IHZDUFUsIHNvIHRoaXMgaXMgYQomIzQzOwkgKiBWTS13aWRlIHByb3BlcnR5LgomIzQzOwkgKi8KJiM0MzsJewomIzQzOwkJc3RydWN0IGhhbmRsZXJzICpoID0gYWRkcl9ndmEyaHZhKHZtLCB2bS0mZ3Q7aGFuZGxlcnMpOwomIzQzOwomIzQzOwkJaC0mZ3Q7dl9hdmFpbGFibGUgPSBfX3ZjcHVfaGFzX2lzYV9leHQodmNwdSwgS1ZNX1JJU0NWX0lTQV9FWFRfVik7CiYjNDM7CX0KIAogCXJldHVybiB2Y3B1OwogfQpAQCAtNDA4LDE5ICYjNDM7NDI0LDQzIEBAIHZvaWQgYXNzZXJ0X29uX3VuaGFuZGxlZF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN0cnVjdCB1Y2FsbCB1YzsKIAogCWlmIChnZXRfdWNhbGwodmNwdSwgJmFtcDt1YykgPT0gVUNBTExfVU5IQU5ETEVEKSB7CiYjNDM7CQl2Y3B1X2R1bXAoc3RkZXJyLCB2Y3B1LCAyKTsKIAkJVEVTVF9GQUlMKCYjMzQ7VW5leHBlY3RlZCBleGNlcHRpb24gKHZlY3RvcjoweCVseCwgZWM6MHglbHgpJiMzNDssCiAJCQl1Yy5hcmdzWzBdLCB1Yy5hcmdzWzFdKTsKIAl9CiB9CiAKLXN0cnVjdCBoYW5kbGVycyB7Ci0JZXhjZXB0aW9uX2hhbmRsZXJfZm4gZXhjZXB0aW9uX2hhbmRsZXJzW05SX1ZFQ1RPUlNdW05SX0VYQ0VQVElPTlNdOwotfTsKJiM0MztzdGF0aWMgYm9vbCBpbnNuX2lzX3ZlY3Rvcih1MzIgaW5zbikKJiM0Mzt7CiYjNDM7CXUzMiBvcGNvZGUgPSBpbnNuICZhbXA7IFJWX0lOU05fT1BDT0RFX01BU0s7CiYjNDM7CXUzMiB3aWR0aCwgY3NyOwomIzQzOwomIzQzOwkvKiBBbGwgVi1yZWxhdGVkIGluc3RydWN0aW9ucyBhcmUgNC1ieXRlLCBpLmUuIG5vdCBjb21wcmVzc2VkLiAqLwomIzQzOwlpZiAoKGluc24gJmFtcDsgMHgzKSAhPSAweDMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAob3Bjb2RlKSB7CiYjNDM7CWNhc2UgUlZWX09QQ09ERV9WRUNUT1I6CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY2FzZSBSVlZfT1BDT0RFX1ZMOgomIzQzOwljYXNlIFJWVl9PUENPREVfVlM6CiYjNDM7CQl3aWR0aCA9IFJWVl9FWFRSQUNUX1ZMX1ZTX1dJRFRIKGluc24pOwomIzQzOwkJcmV0dXJuIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF84IHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8xNiB8fAomIzQzOwkJICAgICAgIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8zMiB8fCB3aWR0aCA9PSBSVlZfVkxfVlNfV0lEVEhfNjQ7CiYjNDM7CWNhc2UgUlZHX09QQ09ERV9TWVNURU06CiYjNDM7CQljc3IgPSBSVkdfRVhUUkFDVF9TWVNURU1fQ1NSKGluc24pOwomIzQzOwkJcmV0dXJuIChjc3IgJmd0Oz0gQ1NSX1ZTVEFSVCAmYW1wOyZhbXA7IGNzciAmbHQ7PSBDU1JfVkNTUikgfHwKJiM0MzsJCSAgICAgICAoY3NyICZndDs9IENTUl9WTCAmYW1wOyZhbXA7IGNzciAmbHQ7PSBDU1JfVkxFTkIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiAKIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBoYW5kbGVycyAqaGFuZGxlcnMgPSAoc3RydWN0IGhhbmRsZXJzICopZXhjZXB0aW9uX2hhbmRsZXJzOwotCWludCB2ZWN0b3IgPSAwLCBlYzsKJiM0MzsJaW50IHZlY3RvciA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZWM7CiAKIAllYyA9IHJlZ3MtJmd0O2NhdXNlICZhbXA7IH5DQVVTRV9JUlFfRkxBRzsKIAlpZiAoZWMgJmd0Oz0gTlJfRVhDRVBUSU9OUykKQEAgLTQzMiw2ICYjNDM7NDcyLDM3IEBAIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQllYyA9IDA7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIExhemlseSBlbmFibGUgViBvbiB0aGUgZmlyc3QgdmVjdG9yIGluc3RydWN0aW9uOiBpZiB0aGUgZmF1bHRpbmcKJiM0MzsJICogaW5zdHJ1Y3Rpb24gZGVjb2RlcyBhcyB2ZWN0b3Igd2hpbGUgVlMgaXMgb2ZmLCBzZXQgVlMgdG8gSW5pdGlhbAomIzQzOwkgKiBhbmQgcmUtZXhlY3V0ZSBpdCwgbGlrZSB0aGUga2VybmVsJiMzOTtzIHJpc2N2X3ZfZmlyc3RfdXNlX2hhbmRsZXIoKS4KJiM0MzsJICogR2VudWluZWx5IGlsbGVnYWwgaW5zdHJ1Y3Rpb25zIGNvbnRpbnVlIHRvIHRoZSB1bmV4cGVjdGVkLWV4Y2VwdGlvbgomIzQzOwkgKiBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKCEocmVncy0mZ3Q7Y2F1c2UgJmFtcDsgQ0FVU0VfSVJRX0ZMQUcpICZhbXA7JmFtcDsgZWMgPT0gRVhDX0lOU1RfSUxMRUdBTCAmYW1wOyZhbXA7CiYjNDM7CSAgICBoYW5kbGVycyAmYW1wOyZhbXA7IGhhbmRsZXJzLSZndDt2X2F2YWlsYWJsZSAmYW1wOyZhbXA7ICEocmVncy0mZ3Q7c3RhdHVzICZhbXA7IFNSX1ZTKSkgewomIzQzOwkJdTMyIGluc24gPSAodTMyKXJlZ3MtJmd0O2JhZGFkZHI7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogc3R2YWwgaXMgbm90IGd1YXJhbnRlZWQgdG8gaG9sZCB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24uCiYjNDM7CQkgKiBWZWN0b3IgaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgMzItYml0LCBzbyByZWFkIGEgMTYtYml0CiYjNDM7CQkgKiBoYWxmd29yZCBmaXJzdCBhbmQgb25seSBsb2FkIHRoZSBmdWxsIDMyLWJpdCBpbnN0cnVjdGlvbiB3aGVuCiYjNDM7CQkgKiBpdCBpcyBub3QgY29tcHJlc3NlZDsgdGhpcyBhdm9pZHMgYW4gdW5hbGlnbmVkIG9yIGNyb3NzLXBhZ2UKJiM0MzsJCSAqIGFjY2VzcyBvbiBhIGNvbXByZXNzZWQgaW5zdHJ1Y3Rpb24uCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghaW5zbikgewomIzQzOwkJCXUxNiBoYWxmID0gKih1MTYgKilyZWdzLSZndDtlcGM7CiYjNDM7CiYjNDM7CQkJaWYgKChoYWxmICZhbXA7IDB4MykgPT0gMHgzKQomIzQzOwkJCQlpbnNuID0gKih1MzIgKilyZWdzLSZndDtlcGM7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoaW5zbl9pc192ZWN0b3IoaW5zbikpIHsKJiM0MzsJCQlyZWdzLSZndDtzdGF0dXMgfD0gU1JfVlNfSU5JVElBTDsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoaGFuZGxlcnMgJmFtcDsmYW1wOyBoYW5kbGVycy0mZ3Q7ZXhjZXB0aW9uX2hhbmRsZXJzW3ZlY3Rvcl1bZWNdKQogCQlyZXR1cm4gaGFuZGxlcnMtJmd0O2V4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXShyZWdzKTsKIApAQCAtNDQ4LDYgJiM0Mzs1MTksOSBAQCB2b2lkIHZjcHVfaW5pdF92ZWN0b3JfdGFibGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogdm9pZCB2bV9pbml0X3ZlY3Rvcl90YWJsZXMoc3RydWN0IGt2bV92bSAqdm0pCiB7CiYjNDM7CWlmICh2bS0mZ3Q7aGFuZGxlcnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJdm0tJmd0O2hhbmRsZXJzID0gX192bV9hbGxvYyh2bSwgc2l6ZW9mKHN0cnVjdCBoYW5kbGVycyksIHZtLSZndDtwYWdlX3NpemUsCiAJCQkJICBNRU1fUkVHSU9OX0RBVEEpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyOTIKCQkJCQkJCW91dHB1dDogODIKCQkJCQkJCXRob3VnaHRzOiA2MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIGNoYW5nZXMgdG8gdGhlIEtWTSBzZWxmLXRlc3RzIGZvciBSSVNDLVYsIHNwZWNpZmljYWxseSB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyB2ZWN0b3IgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGxhemlseSBlbmFibGluZyB0aGUgViBleHRlbnNpb24gZm9yIHRoZXNlIHRlc3RzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnRzIGZ1enppbmc/CgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcHJvbXB0IG91dGxpbmVzIGEgcHJldHR5IGNsZWFyIHNldCBvZiBjcml0ZXJpYSBmb3Igd2hlbiBhIHBhdGNoICpzaG91bGRuJiMzOTt0KiBiZSBmdXp6ZWQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGZpbHRlcmluZyBvdXQgdGhpbmdzIHRoYXQgZG9uJiMzOTt0IGRpcmVjdGx5IGltcGFjdCB0aGUgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSwgZm9jdXNpbmcgb24gdGVzdCBjb2RlLCBkb2N1bWVudGF0aW9uLCBsb2dnaW5nLCBjb25zdGFudCBjaGFuZ2VzLCBhbmQgdW5yZWFjaGFibGUgY29kZSBwYXRocy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gYXZvaWQgd2FzdGluZyBmdXp6aW5nIHJlc291cmNlcyBvbiBpcnJlbGV2YW50IGFyZWFzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBsb29rcyBsaWtlIGEgcmVzb3VuZGluZyAmIzM0O25vLiYjMzQ7IEl0JiMzOTtzIG1vZGlmeWluZyBjb2RlIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcgaW1tZWRpYXRlbHkuIFRlc3QgY29kZSwgYnkgZGVmaW5pdGlvbiwgaXMgbWVhbnQgZm9yIHZhbGlkYXRpbmcgdGhlIGtlcm5lbCwgbm90IG1vZGlmeWluZyBpdC4gU2VsZnRlc3RzIGFyZSBkZXNpZ25lZCB0byBiZSBpc29sYXRlZCBmcm9tIGNvcmUga2VybmVsIGxvZ2ljLiBUaGV5IGFyZSB0aGVyZSB0byBlbnN1cmUgdGhlIGNvZGUgYmVoYXZlcyBhcyBleHBlY3RlZCB1bmRlciB2YXJpb3VzIHNjZW5hcmlvcy4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBkaWZmLiBUaGUgb25seSBmaWxlcyBiZWluZyB0b3VjaGVkIGFyZSB0aG9zZSB0d28gd2l0aGluIHRoZSBzZWxmdGVzdHMgZGlyZWN0b3J5LiBOb3RoaW5nIGVsc2UuIE5vIGNvcmUga2VybmVsIGZpbGVzLCBubyBkcml2ZXJzLCBub3RoaW5nIHRoYXQgd291bGQgc3VnZ2VzdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIHN5c3RlbS4gSXQgaXMgcHVyZWx5IHRlc3QgaW5mcmFzdHJ1Y3R1cmUuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCAqb25seSogbW9kaWZpZXMgdGVzdCBjb2RlLCBpdCBkb2VzbiYjMzk7dCBhZmZlY3QgdGhlIGtlcm5lbCYjMzk7cyBmdW5jdGlvbmFsIGJlaGF2aW9yLCBzZWN1cml0eSwgb3Igc3RhYmlsaXR5LiBJJiMzOTttIGdvaW5nIHRvIGNvbmZpZGVudGx5IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgaXMgbGltaXRlZCB0byB0ZXN0IGNvZGUgYWRkaXRpb25zLCBub3QgZnVuZGFtZW50YWwga2VybmVsIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bSkgdG8gYWRkIFJJU0MtViB2ZWN0b3IgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGxhenkgViBleHRlbnNpb24gZW5hYmxlbWVudCBmb3IgdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0pIHRvIGFkZCBSSVNDLVYgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgZm9yIHRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjA1OjIyLjc1NTgwMDg3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDI4OTQzNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0pIHRvIGFkZCBSSVNDLVYgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgZm9yIHRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjA1OjIyLjc1NTgxMTUzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MjU0Mzc2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM0MzUwN2ExMjM3MDIyZDBhN2U3NWQyMjBlOTViZDRkMDY0ZWE0MGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTI6MDU6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxcbmluZGV4IGUzYWNmMmFlOTg4MWUuLjY4NWJhZWZlYmRiMTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxcbkBAIC0yNSw2ICsyNSwxOSBAQFxcbiAjZGVmaW5lIEdFVF9STShpbnNuKSAgICAgICAgICAgICgoKGluc24pIFxcdTAwMjYgSU5TTl9NQVNLX0ZVTkNUMykgXFx1MDAzZVxcdTAwM2UgSU5TTl9TSElGVF9GVU5DVDMpXFxuICNkZWZpbmUgR0VUX0NTUl9OVU0oaW5zbikgICAgICAgKCgoaW5zbikgXFx1MDAyNiBJTlNOX0NTUl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBJTlNOX0NTUl9TSElGVClcXG4gXFxuKy8qIFZlY3RvciAoVikgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcsIG1hdGNoaW5nIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW5zbi5oICovXFxuKyNkZWZpbmUgUlZfSU5TTl9PUENPREVfTUFTS1xcdDB4N2ZcXG4rI2RlZmluZSBSVkdfT1BDT0RFX1NZU1RFTVxcdDB4NzNcXG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUlxcdDB4NTdcXG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZMXFx0XFx0MHgwN1xcbisjZGVmaW5lIFJWVl9PUENPREVfVlNcXHRcXHQweDI3XFxuKyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzhcXHQwXFxuKyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzE2XFx0NVxcbisjZGVmaW5lIFJWVl9WTF9WU19XSURUSF8zMlxcdDZcXG4rI2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfNjRcXHQ3XFxuKyNkZWZpbmUgUlZWX0VYVFJBQ1RfVkxfVlNfV0lEVEgoaW5zbilcXHQoKChpbnNuKSBcXHUwMDNlXFx1MDAzZSAxMikgXFx1MDAyNiAweDcpXFxuKyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKVxcdCgoKGluc24pIFxcdTAwM2VcXHUwMDNlIDIwKSBcXHUwMDI2IDB4ZmZmKVxcbitcXG4gc3RhdGljIGlubGluZSB1NjQgX19rdm1fcmVnX2lkKHU2NCB0eXBlLCB1NjQgc3VidHlwZSwgdTY0IGlkeCwgdTY0IHNpemUpXFxuIHtcXG4gXFx0cmV0dXJuIEtWTV9SRUdfUklTQ1YgfCB0eXBlIHwgc3VidHlwZSB8IGlkeCB8IHNpemU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuaW5kZXggZGVkNTQyOWYzNDQ4My4uZTY3NzEzN2Q1ZTQ0OCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xcbkBAIC0xNyw2ICsxNywxMSBAQFxcbiBcXG4gc3RhdGljIGd2YV90IGV4Y2VwdGlvbl9oYW5kbGVycztcXG4gXFxuK3N0cnVjdCBoYW5kbGVycyB7XFxuK1xcdGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGV4Y2VwdGlvbl9oYW5kbGVyc1tOUl9WRUNUT1JTXVtOUl9FWENFUFRJT05TXTtcXG4rXFx0Ym9vbCB2X2F2YWlsYWJsZTtcXG4rfTtcXG4rXFxuIGJvb2wgX192Y3B1X2hhc19leHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXh0KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwO1xcbkBAIC0yOTgsMTMgKzMwMyw2IEBAIHZvaWQgdmNwdV9hcmNoX2R1bXAoRklMRSAqc3RyZWFtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IGluZGVudClcXG4gXFx0XFx0Y29yZS5yZWdzLnQzLCBjb3JlLnJlZ3MudDQsIGNvcmUucmVncy50NSwgY29yZS5yZWdzLnQ2KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX19hbGlnbmVkKDE2KSBndWVzdF91bmV4cF90cmFwKHZvaWQpXFxuLXtcXG4tXFx0c2JpX2VjYWxsKEtWTV9SSVNDVl9TRUxGVEVTVFNfU0JJX0VYVCxcXG4tXFx0XFx0ICBLVk1fUklTQ1ZfU0VMRlRFU1RTX1NCSV9VTkVYUCxcXG4tXFx0XFx0ICAwLCAwLCAwLCAwLCAwLCAwKTtcXG4tfVxcbi1cXG4gdm9pZCB2Y3B1X2FyY2hfc2V0X2VudHJ5X3BvaW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqZ3Vlc3RfY29kZSlcXG4ge1xcbiBcXHR2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfQ09SRV9SRUcocmVncy5wYyksICh1bnNpZ25lZCBsb25nKWd1ZXN0X2NvZGUpO1xcbkBAIC0zNDgsOCArMzQ2LDI2IEBAIHN0cnVjdCBrdm1fdmNwdSAqdm1fYXJjaF92Y3B1X2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHZjcHVfaWQpXFxuIFxcdC8qIFNldHVwIHNzY3JhdGNoIGZvciBndWVzdF9nZXRfdmNwdWlkKCkgKi9cXG4gXFx0dmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0dFTkVSQUxfQ1NSX1JFRyhzc2NyYXRjaCksIHZjcHVfaWQpO1xcbiBcXG4tXFx0LyogU2V0dXAgZGVmYXVsdCBleGNlcHRpb24gdmVjdG9yIG9mIGd1ZXN0ICovXFxuLVxcdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9HRU5FUkFMX0NTUl9SRUcoc3R2ZWMpLCAodW5zaWduZWQgbG9uZylndWVzdF91bmV4cF90cmFwKTtcXG4rXFx0LypcXG4rXFx0ICogQWR2ZXJ0aXNlIFYgdG8gS1ZNIHNvIC1PMiBhdXRvLXZlY3Rvcml6YXRpb24gaW4gZ3Vlc3QgY29kZSBpcyB2YWxpZDtcXG4rXFx0ICogaWdub3JlIGVycm9ycyBzaW5jZSB0aGUgdGVzdHMgd29yayB3aXRob3V0IFYgdG9vLiBVc2UgdGhlIGZ1bGxcXG4rXFx0ICogZXhjZXB0aW9uIHZlY3RvciB0YWJsZSAod2hpY2ggbGF6aWx5IGVuYWJsZXMgViBpbiByb3V0ZV9leGNlcHRpb24oKSlcXG4rXFx0ICogYXMgdGhlIGRlZmF1bHQgaGFuZGxlcjsgdm1faW5pdF92ZWN0b3JfdGFibGVzKCkgaXMgaWRlbXBvdGVudC5cXG4rXFx0ICovXFxuK1xcdF9fdmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0lTQV9FWFRfUkVHKEtWTV9SSVNDVl9JU0FfRVhUX1YpLCAxKTtcXG4rXFx0dm1faW5pdF92ZWN0b3JfdGFibGVzKHZtKTtcXG4rXFx0dmNwdV9pbml0X3ZlY3Rvcl90YWJsZXModmNwdSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZWNvcmQgViBhdmFpbGFiaWxpdHkgZm9yIHJvdXRlX2V4Y2VwdGlvbigpLCB3aGljaCBydW5zIGluIGd1ZXN0XFxuK1xcdCAqIGNvbnRleHQuIFYgaXMgZW5hYmxlZCB1bmlmb3JtbHkgZm9yIGV2ZXJ5IHZDUFUsIHNvIHRoaXMgaXMgYVxcbitcXHQgKiBWTS13aWRlIHByb3BlcnR5LlxcbitcXHQgKi9cXG4rXFx0e1xcbitcXHRcXHRzdHJ1Y3QgaGFuZGxlcnMgKmggPSBhZGRyX2d2YTJodmEodm0sIHZtLVxcdTAwM2VoYW5kbGVycyk7XFxuK1xcbitcXHRcXHRoLVxcdTAwM2V2X2F2YWlsYWJsZSA9IF9fdmNwdV9oYXNfaXNhX2V4dCh2Y3B1LCBLVk1fUklTQ1ZfSVNBX0VYVF9WKTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHZjcHU7XFxuIH1cXG5AQCAtNDA4LDE5ICs0MjQsNDMgQEAgdm9pZCBhc3NlcnRfb25fdW5oYW5kbGVkX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN0cnVjdCB1Y2FsbCB1YztcXG4gXFxuIFxcdGlmIChnZXRfdWNhbGwodmNwdSwgXFx1MDAyNnVjKSA9PSBVQ0FMTF9VTkhBTkRMRUQpIHtcXG4rXFx0XFx0dmNwdV9kdW1wKHN0ZGVyciwgdmNwdSwgMik7XFxuIFxcdFxcdFRFU1RfRkFJTChcXFwiVW5leHBlY3RlZCBleGNlcHRpb24gKHZlY3RvcjoweCVseCwgZWM6MHglbHgpXFxcIixcXG4gXFx0XFx0XFx0dWMuYXJnc1swXSwgdWMuYXJnc1sxXSk7XFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RydWN0IGhhbmRsZXJzIHtcXG4tXFx0ZXhjZXB0aW9uX2hhbmRsZXJfZm4gZXhjZXB0aW9uX2hhbmRsZXJzW05SX1ZFQ1RPUlNdW05SX0VYQ0VQVElPTlNdO1xcbi19O1xcbitzdGF0aWMgYm9vbCBpbnNuX2lzX3ZlY3Rvcih1MzIgaW5zbilcXG4re1xcbitcXHR1MzIgb3Bjb2RlID0gaW5zbiBcXHUwMDI2IFJWX0lOU05fT1BDT0RFX01BU0s7XFxuK1xcdHUzMiB3aWR0aCwgY3NyO1xcbitcXG4rXFx0LyogQWxsIFYtcmVsYXRlZCBpbnN0cnVjdGlvbnMgYXJlIDQtYnl0ZSwgaS5lLiBub3QgY29tcHJlc3NlZC4gKi9cXG4rXFx0aWYgKChpbnNuIFxcdTAwMjYgMHgzKSAhPSAweDMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHN3aXRjaCAob3Bjb2RlKSB7XFxuK1xcdGNhc2UgUlZWX09QQ09ERV9WRUNUT1I6XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRjYXNlIFJWVl9PUENPREVfVkw6XFxuK1xcdGNhc2UgUlZWX09QQ09ERV9WUzpcXG4rXFx0XFx0d2lkdGggPSBSVlZfRVhUUkFDVF9WTF9WU19XSURUSChpbnNuKTtcXG4rXFx0XFx0cmV0dXJuIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF84IHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8xNiB8fFxcbitcXHRcXHQgICAgICAgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzMyIHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF82NDtcXG4rXFx0Y2FzZSBSVkdfT1BDT0RFX1NZU1RFTTpcXG4rXFx0XFx0Y3NyID0gUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKTtcXG4rXFx0XFx0cmV0dXJuIChjc3IgXFx1MDAzZT0gQ1NSX1ZTVEFSVCBcXHUwMDI2XFx1MDAyNiBjc3IgXFx1MDAzYz0gQ1NSX1ZDU1IpIHx8XFxuK1xcdFxcdCAgICAgICAoY3NyIFxcdTAwM2U9IENTUl9WTCBcXHUwMDI2XFx1MDAyNiBjc3IgXFx1MDAzYz0gQ1NSX1ZMRU5CKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuIFxcbiB2b2lkIHJvdXRlX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4ge1xcbiBcXHRzdHJ1Y3QgaGFuZGxlcnMgKmhhbmRsZXJzID0gKHN0cnVjdCBoYW5kbGVycyAqKWV4Y2VwdGlvbl9oYW5kbGVycztcXG4tXFx0aW50IHZlY3RvciA9IDAsIGVjO1xcbitcXHRpbnQgdmVjdG9yID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBlYztcXG4gXFxuIFxcdGVjID0gcmVncy1cXHUwMDNlY2F1c2UgXFx1MDAyNiB+Q0FVU0VfSVJRX0ZMQUc7XFxuIFxcdGlmIChlYyBcXHUwMDNlPSBOUl9FWENFUFRJT05TKVxcbkBAIC00MzIsNiArNDcyLDM3IEBAIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRlYyA9IDA7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIExhemlseSBlbmFibGUgViBvbiB0aGUgZmlyc3QgdmVjdG9yIGluc3RydWN0aW9uOiBpZiB0aGUgZmF1bHRpbmdcXG4rXFx0ICogaW5zdHJ1Y3Rpb24gZGVjb2RlcyBhcyB2ZWN0b3Igd2hpbGUgVlMgaXMgb2ZmLCBzZXQgVlMgdG8gSW5pdGlhbFxcbitcXHQgKiBhbmQgcmUtZXhlY3V0ZSBpdCwgbGlrZSB0aGUga2VybmVsJ3MgcmlzY3Zfdl9maXJzdF91c2VfaGFuZGxlcigpLlxcbitcXHQgKiBHZW51aW5lbHkgaWxsZWdhbCBpbnN0cnVjdGlvbnMgY29udGludWUgdG8gdGhlIHVuZXhwZWN0ZWQtZXhjZXB0aW9uXFxuK1xcdCAqIHBhdGguXFxuK1xcdCAqL1xcbitcXHRpZiAoIShyZWdzLVxcdTAwM2VjYXVzZSBcXHUwMDI2IENBVVNFX0lSUV9GTEFHKSBcXHUwMDI2XFx1MDAyNiBlYyA9PSBFWENfSU5TVF9JTExFR0FMIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBoYW5kbGVycyBcXHUwMDI2XFx1MDAyNiBoYW5kbGVycy1cXHUwMDNldl9hdmFpbGFibGUgXFx1MDAyNlxcdTAwMjYgIShyZWdzLVxcdTAwM2VzdGF0dXMgXFx1MDAyNiBTUl9WUykpIHtcXG4rXFx0XFx0dTMyIGluc24gPSAodTMyKXJlZ3MtXFx1MDAzZWJhZGFkZHI7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBzdHZhbCBpcyBub3QgZ3VhcmFudGVlZCB0byBob2xkIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbi5cXG4rXFx0XFx0ICogVmVjdG9yIGluc3RydWN0aW9ucyBhcmUgYWx3YXlzIDMyLWJpdCwgc28gcmVhZCBhIDE2LWJpdFxcbitcXHRcXHQgKiBoYWxmd29yZCBmaXJzdCBhbmQgb25seSBsb2FkIHRoZSBmdWxsIDMyLWJpdCBpbnN0cnVjdGlvbiB3aGVuXFxuK1xcdFxcdCAqIGl0IGlzIG5vdCBjb21wcmVzc2VkOyB0aGlzIGF2b2lkcyBhbiB1bmFsaWduZWQgb3IgY3Jvc3MtcGFnZVxcbitcXHRcXHQgKiBhY2Nlc3Mgb24gYSBjb21wcmVzc2VkIGluc3RydWN0aW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFpbnNuKSB7XFxuK1xcdFxcdFxcdHUxNiBoYWxmID0gKih1MTYgKilyZWdzLVxcdTAwM2VlcGM7XFxuK1xcbitcXHRcXHRcXHRpZiAoKGhhbGYgXFx1MDAyNiAweDMpID09IDB4MylcXG4rXFx0XFx0XFx0XFx0aW5zbiA9ICoodTMyICopcmVncy1cXHUwMDNlZXBjO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoaW5zbl9pc192ZWN0b3IoaW5zbikpIHtcXG4rXFx0XFx0XFx0cmVncy1cXHUwMDNlc3RhdHVzIHw9IFNSX1ZTX0lOSVRJQUw7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRpZiAoaGFuZGxlcnMgXFx1MDAyNlxcdTAwMjYgaGFuZGxlcnMtXFx1MDAzZWV4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXSlcXG4gXFx0XFx0cmV0dXJuIGhhbmRsZXJzLVxcdTAwM2VleGNlcHRpb25faGFuZGxlcnNbdmVjdG9yXVtlY10ocmVncyk7XFxuIFxcbkBAIC00NDgsNiArNTE5LDkgQEAgdm9pZCB2Y3B1X2luaXRfdmVjdG9yX3RhYmxlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcbiB2b2lkIHZtX2luaXRfdmVjdG9yX3RhYmxlcyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4ge1xcbitcXHRpZiAodm0tXFx1MDAzZWhhbmRsZXJzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHR2bS1cXHUwMDNlaGFuZGxlcnMgPSBfX3ZtX2FsbG9jKHZtLCBzaXplb2Yoc3RydWN0IGhhbmRsZXJzKSwgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICBNRU1fUkVHSU9OX0RBVEEpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MDU6MjQuMTI5MTUwNzI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTY1NTU3NTY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0pIHRvIGFkZCBSSVNDLVYgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgZm9yIHRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM0MzUwN2ExMjM3MDIyZDBhN2U3NWQyMjBlOTViZDRkMDY0ZWE0MGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjowNToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbmluZGV4IGUzYWNmMmFlOTg4MWUuLjY4NWJhZWZlYmRiMTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbkBAIC0yNSw2ICsyNSwxOSBAQFxuICNkZWZpbmUgR0VUX1JNKGluc24pICAgICAgICAgICAgKCgoaW5zbikgXHUwMDI2IElOU05fTUFTS19GVU5DVDMpIFx1MDAzZVx1MDAzZSBJTlNOX1NISUZUX0ZVTkNUMylcbiAjZGVmaW5lIEdFVF9DU1JfTlVNKGluc24pICAgICAgICgoKGluc24pIFx1MDAyNiBJTlNOX0NTUl9NQVNLKSBcdTAwM2VcdTAwM2UgSU5TTl9DU1JfU0hJRlQpXG4gXG4rLyogVmVjdG9yIChWKSBpbnN0cnVjdGlvbiBkZWNvZGluZywgbWF0Y2hpbmcgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9pbnNuLmggKi9cbisjZGVmaW5lIFJWX0lOU05fT1BDT0RFX01BU0tcdDB4N2ZcbisjZGVmaW5lIFJWR19PUENPREVfU1lTVEVNXHQweDczXG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUlx0MHg1N1xuKyNkZWZpbmUgUlZWX09QQ09ERV9WTFx0XHQweDA3XG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZTXHRcdDB4MjdcbisjZGVmaW5lIFJWVl9WTF9WU19XSURUSF84XHQwXG4rI2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfMTZcdDVcbisjZGVmaW5lIFJWVl9WTF9WU19XSURUSF8zMlx0NlxuKyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzY0XHQ3XG4rI2RlZmluZSBSVlZfRVhUUkFDVF9WTF9WU19XSURUSChpbnNuKVx0KCgoaW5zbikgXHUwMDNlXHUwMDNlIDEyKSBcdTAwMjYgMHg3KVxuKyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKVx0KCgoaW5zbikgXHUwMDNlXHUwMDNlIDIwKSBcdTAwMjYgMHhmZmYpXG4rXG4gc3RhdGljIGlubGluZSB1NjQgX19rdm1fcmVnX2lkKHU2NCB0eXBlLCB1NjQgc3VidHlwZSwgdTY0IGlkeCwgdTY0IHNpemUpXG4ge1xuIFx0cmV0dXJuIEtWTV9SRUdfUklTQ1YgfCB0eXBlIHwgc3VidHlwZSB8IGlkeCB8IHNpemU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmU2NzcxMzdkNWU0NDggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtMTcsNiArMTcsMTEgQEBcbiBcbiBzdGF0aWMgZ3ZhX3QgZXhjZXB0aW9uX2hhbmRsZXJzO1xuIFxuK3N0cnVjdCBoYW5kbGVycyB7XG4rXHRleGNlcHRpb25faGFuZGxlcl9mbiBleGNlcHRpb25faGFuZGxlcnNbTlJfVkVDVE9SU11bTlJfRVhDRVBUSU9OU107XG4rXHRib29sIHZfYXZhaWxhYmxlO1xuK307XG4rXG4gYm9vbCBfX3ZjcHVfaGFzX2V4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBleHQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IDA7XG5AQCAtMjk4LDEzICszMDMsNiBAQCB2b2lkIHZjcHVfYXJjaF9kdW1wKEZJTEUgKnN0cmVhbSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBpbmRlbnQpXG4gXHRcdGNvcmUucmVncy50MywgY29yZS5yZWdzLnQ0LCBjb3JlLnJlZ3MudDUsIGNvcmUucmVncy50Nik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fYWxpZ25lZCgxNikgZ3Vlc3RfdW5leHBfdHJhcCh2b2lkKVxuLXtcbi1cdHNiaV9lY2FsbChLVk1fUklTQ1ZfU0VMRlRFU1RTX1NCSV9FWFQsXG4tXHRcdCAgS1ZNX1JJU0NWX1NFTEZURVNUU19TQklfVU5FWFAsXG4tXHRcdCAgMCwgMCwgMCwgMCwgMCwgMCk7XG4tfVxuLVxuIHZvaWQgdmNwdV9hcmNoX3NldF9lbnRyeV9wb2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKmd1ZXN0X2NvZGUpXG4ge1xuIFx0dmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0NPUkVfUkVHKHJlZ3MucGMpLCAodW5zaWduZWQgbG9uZylndWVzdF9jb2RlKTtcbkBAIC0zNDgsOCArMzQ2LDI2IEBAIHN0cnVjdCBrdm1fdmNwdSAqdm1fYXJjaF92Y3B1X2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHZjcHVfaWQpXG4gXHQvKiBTZXR1cCBzc2NyYXRjaCBmb3IgZ3Vlc3RfZ2V0X3ZjcHVpZCgpICovXG4gXHR2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHNzY3JhdGNoKSwgdmNwdV9pZCk7XG4gXG4tXHQvKiBTZXR1cCBkZWZhdWx0IGV4Y2VwdGlvbiB2ZWN0b3Igb2YgZ3Vlc3QgKi9cbi1cdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9HRU5FUkFMX0NTUl9SRUcoc3R2ZWMpLCAodW5zaWduZWQgbG9uZylndWVzdF91bmV4cF90cmFwKTtcbitcdC8qXG4rXHQgKiBBZHZlcnRpc2UgViB0byBLVk0gc28gLU8yIGF1dG8tdmVjdG9yaXphdGlvbiBpbiBndWVzdCBjb2RlIGlzIHZhbGlkO1xuK1x0ICogaWdub3JlIGVycm9ycyBzaW5jZSB0aGUgdGVzdHMgd29yayB3aXRob3V0IFYgdG9vLiBVc2UgdGhlIGZ1bGxcbitcdCAqIGV4Y2VwdGlvbiB2ZWN0b3IgdGFibGUgKHdoaWNoIGxhemlseSBlbmFibGVzIFYgaW4gcm91dGVfZXhjZXB0aW9uKCkpXG4rXHQgKiBhcyB0aGUgZGVmYXVsdCBoYW5kbGVyOyB2bV9pbml0X3ZlY3Rvcl90YWJsZXMoKSBpcyBpZGVtcG90ZW50LlxuK1x0ICovXG4rXHRfX3ZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9JU0FfRVhUX1JFRyhLVk1fUklTQ1ZfSVNBX0VYVF9WKSwgMSk7XG4rXHR2bV9pbml0X3ZlY3Rvcl90YWJsZXModm0pO1xuK1x0dmNwdV9pbml0X3ZlY3Rvcl90YWJsZXModmNwdSk7XG4rXG4rXHQvKlxuK1x0ICogUmVjb3JkIFYgYXZhaWxhYmlsaXR5IGZvciByb3V0ZV9leGNlcHRpb24oKSwgd2hpY2ggcnVucyBpbiBndWVzdFxuK1x0ICogY29udGV4dC4gViBpcyBlbmFibGVkIHVuaWZvcm1seSBmb3IgZXZlcnkgdkNQVSwgc28gdGhpcyBpcyBhXG4rXHQgKiBWTS13aWRlIHByb3BlcnR5LlxuK1x0ICovXG4rXHR7XG4rXHRcdHN0cnVjdCBoYW5kbGVycyAqaCA9IGFkZHJfZ3ZhMmh2YSh2bSwgdm0tXHUwMDNlaGFuZGxlcnMpO1xuK1xuK1x0XHRoLVx1MDAzZXZfYXZhaWxhYmxlID0gX192Y3B1X2hhc19pc2FfZXh0KHZjcHUsIEtWTV9SSVNDVl9JU0FfRVhUX1YpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHZjcHU7XG4gfVxuQEAgLTQwOCwxOSArNDI0LDQzIEBAIHZvaWQgYXNzZXJ0X29uX3VuaGFuZGxlZF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3RydWN0IHVjYWxsIHVjO1xuIFxuIFx0aWYgKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YykgPT0gVUNBTExfVU5IQU5ETEVEKSB7XG4rXHRcdHZjcHVfZHVtcChzdGRlcnIsIHZjcHUsIDIpO1xuIFx0XHRURVNUX0ZBSUwoXCJVbmV4cGVjdGVkIGV4Y2VwdGlvbiAodmVjdG9yOjB4JWx4LCBlYzoweCVseClcIixcbiBcdFx0XHR1Yy5hcmdzWzBdLCB1Yy5hcmdzWzFdKTtcbiBcdH1cbiB9XG4gXG4tc3RydWN0IGhhbmRsZXJzIHtcbi1cdGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGV4Y2VwdGlvbl9oYW5kbGVyc1tOUl9WRUNUT1JTXVtOUl9FWENFUFRJT05TXTtcbi19O1xuK3N0YXRpYyBib29sIGluc25faXNfdmVjdG9yKHUzMiBpbnNuKVxuK3tcbitcdHUzMiBvcGNvZGUgPSBpbnNuIFx1MDAyNiBSVl9JTlNOX09QQ09ERV9NQVNLO1xuK1x0dTMyIHdpZHRoLCBjc3I7XG4rXG4rXHQvKiBBbGwgVi1yZWxhdGVkIGluc3RydWN0aW9ucyBhcmUgNC1ieXRlLCBpLmUuIG5vdCBjb21wcmVzc2VkLiAqL1xuK1x0aWYgKChpbnNuIFx1MDAyNiAweDMpICE9IDB4MylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0c3dpdGNoIChvcGNvZGUpIHtcbitcdGNhc2UgUlZWX09QQ09ERV9WRUNUT1I6XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0Y2FzZSBSVlZfT1BDT0RFX1ZMOlxuK1x0Y2FzZSBSVlZfT1BDT0RFX1ZTOlxuK1x0XHR3aWR0aCA9IFJWVl9FWFRSQUNUX1ZMX1ZTX1dJRFRIKGluc24pO1xuK1x0XHRyZXR1cm4gd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzggfHwgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzE2IHx8XG4rXHRcdCAgICAgICB3aWR0aCA9PSBSVlZfVkxfVlNfV0lEVEhfMzIgfHwgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzY0O1xuK1x0Y2FzZSBSVkdfT1BDT0RFX1NZU1RFTTpcbitcdFx0Y3NyID0gUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKTtcbitcdFx0cmV0dXJuIChjc3IgXHUwMDNlPSBDU1JfVlNUQVJUIFx1MDAyNlx1MDAyNiBjc3IgXHUwMDNjPSBDU1JfVkNTUikgfHxcbitcdFx0ICAgICAgIChjc3IgXHUwMDNlPSBDU1JfVkwgXHUwMDI2XHUwMDI2IGNzciBcdTAwM2M9IENTUl9WTEVOQik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuIFxuIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdHN0cnVjdCBoYW5kbGVycyAqaGFuZGxlcnMgPSAoc3RydWN0IGhhbmRsZXJzICopZXhjZXB0aW9uX2hhbmRsZXJzO1xuLVx0aW50IHZlY3RvciA9IDAsIGVjO1xuK1x0aW50IHZlY3RvciA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIGVjO1xuIFxuIFx0ZWMgPSByZWdzLVx1MDAzZWNhdXNlIFx1MDAyNiB+Q0FVU0VfSVJRX0ZMQUc7XG4gXHRpZiAoZWMgXHUwMDNlPSBOUl9FWENFUFRJT05TKVxuQEAgLTQzMiw2ICs0NzIsMzcgQEAgdm9pZCByb3V0ZV9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGVjID0gMDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBMYXppbHkgZW5hYmxlIFYgb24gdGhlIGZpcnN0IHZlY3RvciBpbnN0cnVjdGlvbjogaWYgdGhlIGZhdWx0aW5nXG4rXHQgKiBpbnN0cnVjdGlvbiBkZWNvZGVzIGFzIHZlY3RvciB3aGlsZSBWUyBpcyBvZmYsIHNldCBWUyB0byBJbml0aWFsXG4rXHQgKiBhbmQgcmUtZXhlY3V0ZSBpdCwgbGlrZSB0aGUga2VybmVsJ3MgcmlzY3Zfdl9maXJzdF91c2VfaGFuZGxlcigpLlxuK1x0ICogR2VudWluZWx5IGlsbGVnYWwgaW5zdHJ1Y3Rpb25zIGNvbnRpbnVlIHRvIHRoZSB1bmV4cGVjdGVkLWV4Y2VwdGlvblxuK1x0ICogcGF0aC5cbitcdCAqL1xuK1x0aWYgKCEocmVncy1cdTAwM2VjYXVzZSBcdTAwMjYgQ0FVU0VfSVJRX0ZMQUcpIFx1MDAyNlx1MDAyNiBlYyA9PSBFWENfSU5TVF9JTExFR0FMIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGhhbmRsZXJzIFx1MDAyNlx1MDAyNiBoYW5kbGVycy1cdTAwM2V2X2F2YWlsYWJsZSBcdTAwMjZcdTAwMjYgIShyZWdzLVx1MDAzZXN0YXR1cyBcdTAwMjYgU1JfVlMpKSB7XG4rXHRcdHUzMiBpbnNuID0gKHUzMilyZWdzLVx1MDAzZWJhZGFkZHI7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIHN0dmFsIGlzIG5vdCBndWFyYW50ZWVkIHRvIGhvbGQgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uLlxuK1x0XHQgKiBWZWN0b3IgaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgMzItYml0LCBzbyByZWFkIGEgMTYtYml0XG4rXHRcdCAqIGhhbGZ3b3JkIGZpcnN0IGFuZCBvbmx5IGxvYWQgdGhlIGZ1bGwgMzItYml0IGluc3RydWN0aW9uIHdoZW5cbitcdFx0ICogaXQgaXMgbm90IGNvbXByZXNzZWQ7IHRoaXMgYXZvaWRzIGFuIHVuYWxpZ25lZCBvciBjcm9zcy1wYWdlXG4rXHRcdCAqIGFjY2VzcyBvbiBhIGNvbXByZXNzZWQgaW5zdHJ1Y3Rpb24uXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWluc24pIHtcbitcdFx0XHR1MTYgaGFsZiA9ICoodTE2ICopcmVncy1cdTAwM2VlcGM7XG4rXG4rXHRcdFx0aWYgKChoYWxmIFx1MDAyNiAweDMpID09IDB4MylcbitcdFx0XHRcdGluc24gPSAqKHUzMiAqKXJlZ3MtXHUwMDNlZXBjO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChpbnNuX2lzX3ZlY3RvcihpbnNuKSkge1xuK1x0XHRcdHJlZ3MtXHUwMDNlc3RhdHVzIHw9IFNSX1ZTX0lOSVRJQUw7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRpZiAoaGFuZGxlcnMgXHUwMDI2XHUwMDI2IGhhbmRsZXJzLVx1MDAzZWV4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXSlcbiBcdFx0cmV0dXJuIGhhbmRsZXJzLVx1MDAzZWV4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXShyZWdzKTtcbiBcbkBAIC00NDgsNiArNTE5LDkgQEAgdm9pZCB2Y3B1X2luaXRfdmVjdG9yX3RhYmxlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gdm9pZCB2bV9pbml0X3ZlY3Rvcl90YWJsZXMoc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuK1x0aWYgKHZtLVx1MDAzZWhhbmRsZXJzKVxuK1x0XHRyZXR1cm47XG4rXG4gXHR2bS1cdTAwM2VoYW5kbGVycyA9IF9fdm1fYWxsb2Modm0sIHNpemVvZihzdHJ1Y3QgaGFuZGxlcnMpLCB2bS1cdTAwM2VwYWdlX3NpemUsXG4gXHRcdFx0XHQgIE1FTV9SRUdJT05fREFUQSk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjowNToyNC4xMjkxNTIwMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjU1NTM3ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQncyBtYWtpbmcgc29tZSBjaGFuZ2VzIHRvIHRoZSBLVk0gc2VsZi10ZXN0cyBmb3IgUklTQy1WLCBzcGVjaWZpY2FsbHkgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaGAgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyB2ZWN0b3IgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGxhemlseSBlbmFibGluZyB0aGUgViBleHRlbnNpb24gZm9yIHRoZXNlIHRlc3RzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnRzIGZ1enppbmc/XG5cbkxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHByb21wdCBvdXRsaW5lcyBhIHByZXR0eSBjbGVhciBzZXQgb2YgY3JpdGVyaWEgZm9yIHdoZW4gYSBwYXRjaCAqc2hvdWxkbid0KiBiZSBmdXp6ZWQuIEl0J3MgZXNzZW50aWFsbHkgZmlsdGVyaW5nIG91dCB0aGluZ3MgdGhhdCBkb24ndCBkaXJlY3RseSBpbXBhY3QgdGhlIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHksIGZvY3VzaW5nIG9uIHRlc3QgY29kZSwgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgY29uc3RhbnQgY2hhbmdlcywgYW5kIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGF2b2lkIHdhc3RpbmcgZnV6emluZyByZXNvdXJjZXMgb24gaXJyZWxldmFudCBhcmVhcy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBsb29rcyBsaWtlIGEgcmVzb3VuZGluZyBcIm5vLlwiIEl0J3MgbW9kaWZ5aW5nIGNvZGUgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCBkaXJlY3RvcnkuIFRoYXQncyBhIHJlZCBmbGFnIGltbWVkaWF0ZWx5LiBUZXN0IGNvZGUsIGJ5IGRlZmluaXRpb24sIGlzIG1lYW50IGZvciB2YWxpZGF0aW5nIHRoZSBrZXJuZWwsIG5vdCBtb2RpZnlpbmcgaXQuIFNlbGZ0ZXN0cyBhcmUgZGVzaWduZWQgdG8gYmUgaXNvbGF0ZWQgZnJvbSBjb3JlIGtlcm5lbCBsb2dpYy4gVGhleSBhcmUgdGhlcmUgdG8gZW5zdXJlIHRoZSBjb2RlIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgdW5kZXIgdmFyaW91cyBzY2VuYXJpb3MuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBkb3VibGUtY2hlY2sgdGhlIGRpZmYuIFRoZSBvbmx5IGZpbGVzIGJlaW5nIHRvdWNoZWQgYXJlIHRob3NlIHR3byB3aXRoaW4gdGhlIHNlbGZ0ZXN0cyBkaXJlY3RvcnkuIE5vdGhpbmcgZWxzZS4gTm8gY29yZSBrZXJuZWwgZmlsZXMsIG5vIGRyaXZlcnMsIG5vdGhpbmcgdGhhdCB3b3VsZCBzdWdnZXN0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgc3lzdGVtLiBJdCBpcyBwdXJlbHkgdGVzdCBpbmZyYXN0cnVjdHVyZS5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIHRlc3QgY29kZSwgaXQgZG9lc24ndCBhZmZlY3QgdGhlIGtlcm5lbCdzIGZ1bmN0aW9uYWwgYmVoYXZpb3IsIHNlY3VyaXR5LCBvciBzdGFiaWxpdHkuIEknbSBnb2luZyB0byBjb25maWRlbnRseSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIGlzIGxpbWl0ZWQgdG8gdGVzdCBjb2RlIGFkZGl0aW9ucywgbm90IGZ1bmRhbWVudGFsIGtlcm5lbCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjkyLCJPdXRwdXRUb2tlbnMiOjgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MDU6MzMuNzg0NjkyNjg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjA5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEtWTSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bSkgdG8gYWRkIFJJU0MtViB2ZWN0b3IgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcgYW5kIGxhenkgViBleHRlbnNpb24gZW5hYmxlbWVudCBmb3IgdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0pIHRvIGFkZCBSSVNDLVYgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgZm9yIHRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjA1OjMzLjc4NDcyOTExOFoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp24t8[1] Phase: Running StartedAt: 2026-08-13 12:05:45 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp24t8[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-13 12:05:45 +0000 UTC FinishedAt: 2026-08-13 12:06:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}