Name: series-workflowln4hz Phase: Failed StartedAt: 2026-07-28 16:46:52 +0000 UTC FinishedAt: 2026-07-28 17:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowln4hz[0] Phase: Succeeded StartedAt: 2026-07-28 16:46:52 +0000 UTC FinishedAt: 2026-07-28 17:12:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowln4hz[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 16:46:52 +0000 UTC FinishedAt: 2026-07-28 17:12:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDE3OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24gdXNlZCBpbiBTRVYtU05QIGhvc3QgZW52aXJvbm1lbnRzLiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIEFNRCBoYXJkd2FyZSB3aXRoIFNFVi1TTlAgYW5kIFJNUE9QVCBzdXBwb3J0IGVuYWJsZWQgaW4gdGhlIEJJT1MuIFRoZXNlIGhhcmR3YXJlIGZlYXR1cmVzIGFyZSBub3Qgc29mdHdhcmUtZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9UQ0cgb3IgYXZhaWxhYmxlIGluIHR5cGljYWwgR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTc6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNTMzMzk5NTMwMTg4NmU3NGNhMGI2NDNiMjAzOWE1Mjk2NWQzZjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTc6MTE6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbmluZGV4IDNkMDk0MGEzYjlmMzcuLmRiY2NkZTllZTVjZDUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5AQCAtNzYsNyAmIzQzOzc2LDcgQEBcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0s4XHRcdFx0KCAzKjMyJiM0MzsgNCkgLyogT3B0ZXJvbiwgQXRobG9uNjQgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjVcdFx0KCAzKjMyJiM0MzsgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjZcdFx0KCAzKjMyJiM0MzsgNikgLyogQ1BVIGJhc2VkIG9uIFplbjYgbWljcm9hcmNoaXRlY3R1cmUgKi9cbi0vKiBGcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzKjMyJiM0MzsgNykgKi9cbiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRcdFx0KCAzKjMyJiM0MzsgNykgLyogU3VwcG9ydCBmb3IgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDXHQoIDMqMzImIzQzOyA4KSAvKiBcJiMzNDtjb25zdGFudF90c2NcJiMzNDsgVFNDIHRpY2tzIGF0IGEgY29uc3RhbnQgcmF0ZSAqL1xuIC8qIGZyZWU6IHdhcyAjZGVmaW5lIFg4Nl9GRUFUVVJFX1VQXHQoIDMqMzImIzQzOyA5KSAqIFwmIzM0O3VwXCYjMzQ7IFNNUCBrZXJuZWwgcnVubmluZyBvbiBVUCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQVJUXHRcdFx0KCAzKjMyJiM0MzsxMCkgLyogXCYjMzQ7YXJ0XCYjMzQ7IEFsd2F5cyBydW5uaW5nIHRpbWVyIChBUlQpICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuaW5kZXggMThjNGJlNzVlOTI3MS4uZDJjYjBhN2NkMGEyZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuQEAgLTc2MSw2ICYjNDM7NzYxLDkgQEBcbiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUXHQwXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEXHRCSVRfVUxMKE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUKVxuICNkZWZpbmUgTVNSX0FNRDY0X1JNUF9TRUdNRU5UX1NISUZUKHgpXHQoKCh4KSBcdTAwMjYgR0VOTUFTS19VTEwoMTMsIDgpKSBcdTAwM2VcdTAwM2UgOClcbiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcdFx0MHhjMDAxMDEzOVxuJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVFx0MFxuJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFXHRcdEJJVF9VTEwoTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUKVxuIFxuICNkZWZpbmUgTVNSX1NWU01fQ0FBXHRcdFx0MHhjMDAxZjAwMFxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbmluZGV4IDU5NGNmYTE5Y2JkNGIuLjA5YjFjNWQzMzc5MDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbkBAIC02NjIsNiAmIzQzOzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4gXHRfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpO1xuIH1cbiBpbnQgc25wX3ByZXBhcmUodm9pZCk7XG4mIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKTtcbiYjNDM7dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpO1xuIHZvaWQgc25wX3NodXRkb3duKHZvaWQpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG5AQCAtNjgwLDYgJiM0Mzs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9zaHV0ZG93bih2b2lkKSB7fVxuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG5pbmRleCA5MzcxMjljZTZhOTY0Li4wMjFjMGJmMjJkZTIwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMixcdFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFx0XHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcbiYjNDM7XHR7IFg4Nl9GRUFUVVJFX1JNUE9QVCxcdFx0XHRDUFVJRF9FRFgsICAwLCAweDgwMDAwMDI1LCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9IVFJfQ09SRVMsXHRcdENQVUlEX0VBWCwgMzAsIDB4ODAwMDAwMjYsIDAgfSxcbiBcdHsgMCwgMCwgMCwgMCwgMCB9XG4gfTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNDI3MjI5MzQ3ODc2Ni4uYzU3NDg0OWIxNTg3OCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0yOTkyLDYgJiM0MzsyOTkyLDE2IEBAIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHQgKi9cbiBcdFx0aWYgKHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pKVxuIFx0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmdcbiYjNDM7XHRcdCAqIGd1ZXN0cy4gIFRoZSBzY2FuIGlzIGRlZmVycmVkLCBzbyBpdCBub3JtYWxseSBydW5zIGFmdGVyXG4mIzQzO1x0XHQgKiBzZXZfZ21lbV9pbnZhbGlkYXRlKCkgaGFzIGNvbnZlcnRlZCB0aGlzIGd1ZXN0JiMzOTtzIHBhZ2VzIGJhY2sgdG9cbiYjNDM7XHRcdCAqIHNoYXJlZCwgYW5kIHBpY2tzIHRoZW0gdXAgdGhlbi4gIEEgdmVyeSBsYXJnZSBndWVzdCB3aG9zZVxuJiM0MztcdFx0ICogY29udmVyc2lvbiBoYXMgbm90IGZpbmlzaGVkIGJ5IHRoZW4gaXMgcGlja2VkIHVwIGJ5IGEgbGF0ZXJcbiYjNDM7XHRcdCAqIHRlYXJkb3duJiMzOTtzIHNjYW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHNldl91bmJpbmRfYXNpZChrdm0sIHNldi1cdTAwM2VoYW5kbGUpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbmluZGV4IGNmZjI4NWQ4YWQ4ZTMuLjI5MWEzNjAyOTFlYjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbWQtaW9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vc3BlYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Nldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtMTI0LDYgJiM0MzsxMjUsMjAgQEAgc3RhdGljIHZvaWQgKnJtcF9ib29ra2VlcGluZyBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTtcbiBcbiYjNDM7c3RhdGljIGNwdW1hc2tfdmFyX3Qgcm1wb3B0X2NwdW1hc2s7XG4mIzQzO3N0YXRpYyBwaHlzX2FkZHJfdCBybXBvcHRfcGFfc3RhcnQsIHJtcG9wdF9wYV9lbmQ7XG4mIzQzO1xuJiM0MztlbnVtIHJtcG9wdF9mdW5jdGlvbiB7XG4mIzQzO1x0Uk1QT1BUX0ZVTkNfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLFxuJiM0MztcdFJNUE9QVF9GVU5DX1JFUE9SVF9TVEFUVVNcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUk1QT1BUX1dPUktfVElNRU9VVFx0MTAwMDBcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcm1wb3B0X3dxO1xuJiM0MztzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrO1xuJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuIHN0YXRpYyBMSVNUX0hFQUQoc25wX2xlYWtlZF9wYWdlc19saXN0KTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTtcbiBcbkBAIC01MTMsNyAmIzQzOzUyOCw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcbiBcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcbiB7XG4tXHRpbnQgcmV0O1xuIFx0dTY0IHZhbDtcbiBcbiBcdC8qXG5AQCAtNTI2LDE0ICYjNDM7NTQwLDIxIEBAIGludCBzbnBfcHJlcGFyZSh2b2lkKVxuIFxuIFx0Y2xlYXJfcm1wKCk7XG4gXG4tXHRjcHVzX3JlYWRfbG9jaygpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBDUFUgaG90cGx1ZyBiZWZvcmUgZW5hYmxpbmcgU05QOiBubyBDUFUgbWF5IGNvbWUgb25saW5lXG4mIzQzO1x0ICogd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlLCBhbmQgbm9uZSBtYXkgZ28gb2ZmbGluZSBkdXJpbmdcbiYjNDM7XHQgKiBlbmFibGUuICBUaGlzIGtlZXBzIGNwdV9vbmxpbmVfbWFzayBzdGFibGUgZm9yIHRoZSBjaGVjayBhbmQgdGhlXG4mIzQzO1x0ICogb25fZWFjaF9jcHUoKSBjYWxscyBiZWxvdywgc28gY3B1c19yZWFkX2xvY2soKSBpcyBub3QgbmVlZGVkLiAgSXQgaXNcbiYjNDM7XHQgKiByZS1lbmFibGVkIGluIHNucF9zaHV0ZG93bigpIG9uY2UgdGhlIGZpcm13YXJlIGRpc2FibGVzIFNOUC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkge1xuLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xuIFx0XHRwcl93YXJuKFwmIzM0O1NOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSBcdTAwM2MtXHUwMDNlICUqcGJsIHByZXNlbnQgbWFza3MpLlxcblwmIzM0OyxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X29ubGluZV9tYXNrKSxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X3ByZXNlbnRfbWFzaykpO1xuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbiBcdHdiaW52ZF9vbl9hbGxfY3B1cygpO1xuQEAgLTU0OCwxNCAmIzQzOzU2OSwyOSBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcbiBcdC8qIFNOUF9JTklUIHJlcXVpcmVzIE1TUl9WTV9IU0FWRV9QQSB0byBiZSBjbGVhcmVkIG9uIGFsbCBDUFVzLiAqL1xuIFx0b25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpO1xuIFxuLVx0cmV0ID0gMDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcJiMzNDtjY3BcJiMzNDspO1xuIFxuLXVubG9jazpcbi1cdGNwdXNfcmVhZF91bmxvY2soKTtcbiYjNDM7c3RhdGljIHZvaWQgc25wX2NsZWFudXBfcm1wb3B0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3B1O1xuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFybXBvcHRfd3EpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzaylcbiYjNDM7XHRcdHdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIDApO1xuJiM0MztcbiYjNDM7XHRmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9jcHVtYXNrKTtcbiYjNDM7XHRybXBvcHRfcGFfc3RhcnQgPSBybXBvcHRfcGFfZW5kID0gMDtcbiYjNDM7XHRybXBvcHRfd3EgPSBOVUxMO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcJiMzNDtjY3BcJiMzNDspO1xuIFxuIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXG4ge1xuQEAgLTU2NSwxMSAmIzQzOzYwMSwyMDkgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZClcbiBcdGlmIChzeXNjZmcgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDbGVhciB0aGUgUk1QT1BUX0JBU0UgTVNScyB3aGlsZSBDUFUgaG90cGx1ZyBpcyBzdGlsbCBkaXNhYmxlZCwgdGhlblxuJiM0MztcdCAqIHJlLWVuYWJsZSBob3RwbHVnIG5vdyB0aGF0IHRoZSBmaXJtd2FyZSBoYXMgZGlzYWJsZWQgU05QLiAgQSBsZWdhY3kgU05QXG4mIzQzO1x0ICogc2h1dGRvd24gcmV0dXJucyBhYm92ZSB3aXRoIFNucEVuIHN0aWxsIHNldCBhbmQgbGVhdmVzIGhvdHBsdWcgZGlzYWJsZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c25wX2NsZWFudXBfcm1wb3B0KCk7XG4mIzQzO1x0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4mIzQzO1xuIFx0Y2xlYXJfcm1wKCk7XG4gXHRvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbiYjNDM7c3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJNUE9QVDogRjIgMEYgMDEgRkNcbiYjNDM7ICogICBJbnB1dDogIFJBWCA9IHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzICgxR0IgYWxpZ25lZClcbiYjNDM7ICogICAgICAgICAgIFJDWCA9IG9wZXJhdGlvbiB0eXBlXG4mIzQzOyAqICAgT3V0cHV0OiBDRiBzZXQgaWYgdGhlIHJhbmdlIHdhcyBvcHRpbWl6ZWRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JtcG9wdCh1NjQgcGFfc3RhcnQsIHU2NCBvcF90eXBlKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBvcHRpbWl6ZWQ7XG4mIzQzO1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDsuYnl0ZSAweGYyLCAweDBmLCAweDAxLCAweGZjXCYjMzQ7XG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7PUBjY2NcJiMzNDsgKG9wdGltaXplZClcbiYjNDM7XHRcdCAgICAgOiBcJiMzNDthXCYjMzQ7IChwYV9zdGFydCksIFwmIzM0O2NcJiMzNDsgKG9wX3R5cGUpXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvcHRpbWl6ZWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcGFfc3RhcnQgPSBBTElHTl9ET1dOKHBhLCBTWl8xRyk7XG4mIzQzO1x0dTY0IG9wX3R5cGUgPSBSTVBPUFRfRlVOQ19WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVM7XG4mIzQzO1xuJiM0MztcdF9fcm1wb3B0KHBhX3N0YXJ0LCBvcF90eXBlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogJiMzOTt2YWwmIzM5OyBpcyBhIHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcm1wb3B0X3NtcCh2b2lkICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRybXBvcHQoKHU2NCl2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXNcbiYjNDM7ICogcmFuZ2Ugb2YgbWVtb3J5IGRvZXMgbm90IGNvbnRhaW4gYW55IFNOUCBndWVzdCBtZW1vcnkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBybXBvcHRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdGNwdW1hc2tfdmFyX3QgZm9sbG93ZXJfbWFzaztcbiYjNDM7XHRwaHlzX2FkZHJfdCBwYTtcbiYjNDM7XHRpbnQgdGhpc19jcHU7XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7QXR0ZW1wdCBSTVAgb3B0aW1pemF0aW9ucyBvbiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIEAxR0IgYWxpZ25tZW50IFsweCUwMTZsbHggLSAweCUwMTZsbHhdXFxuXCYjMzQ7LFxuJiM0MztcdFx0cm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhbGxvY19jcHVtYXNrX3ZhcihcdTAwMjZmb2xsb3dlcl9tYXNrLCBHRlBfS0VSTkVMKSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtSTVAgb3B0aW1pemF0aW9uIHBhc3Mgc2tpcHBlZDogY3B1bWFzayBhbGxvY2F0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJNUE9QVCBzY2FucyB0aGUgUk1QIHRhYmxlLCBzdG9yZXMgdGhlIHJlc3VsdCBvZiB0aGUgc2NhbiBpbiB0aGVcbiYjNDM7XHQgKiByZXNlcnZlZCBwcm9jZXNzb3IgbWVtb3J5LiBUaGUgUk1QIHNjYW4gaXMgdGhlIG1vc3QgZXhwZW5zaXZlXG4mIzQzO1x0ICogcGFydC4gSWYgYSBzZWNvbmQgUk1QT1BUIG9jY3VycywgaXQgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBzY2FuXG4mIzQzO1x0ICogaWYgdGhleSBjYW4gc2VlIGEgY2FjaGVkIHJlc3VsdCBpbiB0aGUgcmVzZXJ2ZWQgcHJvY2Vzc29yIG1lbW9yeS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIERvIFJNUE9QVCBvbiBvbmUgQ1BVIGFsb25lLiBUaGVuLCBmb2xsb3cgdGhhdCB1cCB3aXRoIFJNUE9QVFxuJiM0MztcdCAqIG9uIGV2ZXJ5IG90aGVyIHByaW1hcnkgdGhyZWFkLiBGb2xsb3dlcnMgYXJlIFwmIzM0O2Rlc2lnbmVkIHRvXCYjMzQ7XG4mIzQzO1x0ICogc2tpcCB0aGUgc2NhbiBpZiB0aGV5IHNlZSB0aGUgXCYjMzQ7Y2FjaGVkXCYjMzQ7IHNjYW4gcmVzdWx0cy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFBpbiB0aGUgd29ya2VyIHRvIHRoZSBjdXJyZW50IENQVSBmb3IgdGhlIGxlYWRlciBsb29wIHNvIHRoYXRcbiYjNDM7XHQgKiB0aGlzX2NwdSByZW1haW5zIHZhbGlkIGFuZCB0aGUgUk1QT1BUIGluc3RydWN0aW9uIGV4ZWN1dGVzIG9uXG4mIzQzO1x0ICogdGhlIGNvcnJlY3QgQ1BVLiAgVXNlIG1pZ3JhdGVfZGlzYWJsZSgpIHJhdGhlciB0aGFuIGdldF9jcHUoKSB0b1xuJiM0MztcdCAqIHByZXZlbnQgbWlncmF0aW9uIHdoaWxlIHN0aWxsIGFsbG93aW5nIHByZWVtcHRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0bWlncmF0ZV9kaXNhYmxlKCk7XG4mIzQzO1x0dGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4mIzQzO1xuJiM0MztcdGNwdW1hc2tfYW5kbm90KGZvbGxvd2VyX21hc2ssIHJtcG9wdF9jcHVtYXNrLFxuJiM0MztcdFx0ICAgICAgIHRvcG9sb2d5X3NpYmxpbmdfY3B1bWFzayh0aGlzX2NwdSkpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHBhID0gcm1wb3B0X3BhX3N0YXJ0OyBwYSBcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgJiM0Mzs9IFNaXzFHKVxuJiM0MztcdFx0cm1wb3B0KHBhKTtcbiYjNDM7XG4mIzQzO1x0bWlncmF0ZV9lbmFibGUoKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb2xsb3dlcnM6IHJ1biBSTVBPUFQgb24gdGhlIHJlbWFpbmluZyBjb3Jlcy4gIGNwdXNfcmVhZF9sb2NrKCkgaXNcbiYjNDM7XHQgKiBpbnRlbnRpb25hbGx5IG5vdCBoZWxkIGhlcmU6IENQVSBob3RwbHVnIGlzIGRpc2FibGVkIGZvciB0aGUgZW50aXJlXG4mIzQzO1x0ICogdGltZSBTTlAgaXMgYWN0aXZlIChzZWUgc25wX3ByZXBhcmUoKSksIGFuZCB0aGlzIHdvcmsgb25seSBydW5zIHdoaWxlXG4mIzQzO1x0ICogU05QIGlzIGFjdGl2ZSwgc28gdGhlIGZvbGxvd2VyIHNldCBzdGF5cyB2YWxpZCBhY3Jvc3MgdGhlIHdob2xlIHNjYW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChwYSA9IHJtcG9wdF9wYV9zdGFydDsgcGEgXHUwMDNjIHJtcG9wdF9wYV9lbmQ7IHBhICYjNDM7PSBTWl8xRylcbiYjNDM7XHRcdG9uX2VhY2hfY3B1X21hc2soZm9sbG93ZXJfbWFzaywgcm1wb3B0X3NtcCwgKHZvaWQgKilwYSwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGZyZWVfY3B1bWFza192YXIoZm9sbG93ZXJfbWFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFybXBvcHRfd3EpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLFxuJiM0MztcdFx0XHQgbXNlY3NfdG9famlmZmllcyhSTVBPUFRfV09SS19USU1FT1VUKSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBcJiMzNDtrdm0tYW1kXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJtcG9wdF9iYXNlO1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT24gcmUtaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBsZWdhY3kgU05QIHNodXRkb3duIChTTlBfU0hVVERPV05fRVhcbiYjNDM7XHQgKiB3aXRoIHg4Nl9zbnBfc2h1dGRvd249MCksIHNucF9zaHV0ZG93bigpIGFuZCB0aHVzIHNucF9jbGVhbnVwX3JtcG9wdCgpXG4mIzQzO1x0ICogYXJlIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yaywgY3B1bWFzayBhbmQgcGVyLUNQVVxuJiM0MztcdCAqIFJNUE9QVF9CQVNFIE1TUnMgYXJlIHN0aWxsIHNldCB1cCBhbmQgdmFsaWQgKFNucEVuIHN0YXllZCBzZXQgYW5kXG4mIzQzO1x0ICogQ1BVIGhvdHBsdWcgc3RheWVkIGRpc2FibGVkKS4gIFJhdGhlciB0aGFuIHJlLWRvaW5nIHRoZSBzZXR1cCwgd2hpY2hcbiYjNDM7XHQgKiB3b3VsZCBsZWFrIHRoZSBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3NcbiYjNDM7XHQgKiB0byByZS1vcHRpbWl6ZSBhbnkgbWVtb3J5IHRoZSBwcmV2aW91cyBTTlAgc2Vzc2lvbiBkZS1vcHRpbWl6ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJtcG9wdF93cSkge1xuJiM0MztcdFx0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENyZWF0ZSBhbiBSTVBPUFQtc3BlY2lmaWMgd29ya3F1ZXVlIHRvIGF2b2lkIHNjaGVkdWxpbmdcbiYjNDM7XHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtybXBvcHRfd3FcJiMzNDssIFdRX1VOQk9VTkQsIDEpO1xuJiM0MztcdGlmICghcm1wb3B0X3dxKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCB3b3JrcXVldWVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgcm1wb3B0X3dvcmtfaGFuZGxlcik7XG4mIzQzO1xuJiM0MztcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNnJtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgY3B1bWFza1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xuJiM0MztcdFx0cm1wb3B0X3dxID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIFJNUE9QVF9CQVNFIE1TUiBpcyBwZXItY29yZSwgc28gb25seSBvbmUgdGhyZWFkIHBlciBjb3JlIG5lZWRzXG4mIzQzO1x0ICogdG8gc2V0IHVwIHRoZSBSTVBPUFRfQkFTRSBNU1IuICBBbGwgcHJpbWFyeSB0aHJlYWRzIGFyZSBvbmxpbmUsXG4mIzQzO1x0ICogb3RoZXJ3aXNlIFNOUCB3b3VsZCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXG4mIzQzO1x0XHRpZiAodG9wb2xvZ3lfaXNfcHJpbWFyeV90aHJlYWQoY3B1KSlcbiYjNDM7XHRcdFx0Y3B1bWFza19zZXRfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spO1xuJiM0MztcbiYjNDM7XHRybXBvcHRfcGFfc3RhcnQgPSBBTElHTl9ET1dOKFBGTl9QSFlTKG1pbl9sb3dfcGZuKSwgU1pfMUcpO1xuJiM0MztcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUGVyLUNQVSBSTVBPUFQgdGFibGVzIGNvdmVyIGF0IG1vc3QgMiBUQi4gIFByb2dyYW0gZWFjaCBjb3JlJiMzOTtzXG4mIzQzO1x0ICogUk1QT1BUX0JBU0Ugd2l0aCB0aGUgc3RhcnQgb2YgUkFNIHRvIG9wdGltaXplIHVwIHRvIDIgVEIuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yX2VhY2hfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spXG4mIzQzO1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XG4mIzQzO1xuJiM0MztcdHJtcG9wdF9wYV9lbmQgPSBBTElHTihQRk5fUEhZUyhtYXhfcGZuKSwgU1pfMUcpO1xuJiM0MztcbiYjNDM7XHQvKiBMaW1pdCBtZW1vcnkgc2Nhbm5pbmcgdG8gMlRCIG9mIFJBTSAqL1xuJiM0MztcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXHUwMDNlIFNaXzJUKSB7XG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O1JNUE9QVCBjb3ZlcmFnZSBsaW1pdGVkIHRvIDJUQjsgbWVtb3J5IGFib3ZlIDB4JWxseCBub3Qgb3B0aW1pemVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRybXBvcHRfcGFfc3RhcnQgJiM0MzsgU1pfMlQpO1xuJiM0MztcdFx0cm1wb3B0X3BhX2VuZCA9IHJtcG9wdF9wYV9zdGFydCAmIzQzOyBTWl8yVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT25jZSBhbGwgcGVyLUNQVSBSTVBPUFQgdGFibGVzIGhhdmUgYmVlbiBjb25maWd1cmVkLCBlbmFibGUgUk1QT1BUXG4mIzQzO1x0ICogb3B0aW1pemF0aW9ucyBvbiBhbGwgcGh5c2ljYWwgbWVtb3J5LlxuJiM0MztcdCAqL1xuJiM0MztcdHF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIDApO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiYjNDM7XG4gLypcbiAgKiBEbyB0aGUgbmVjZXNzYXJ5IHByZXBhcmF0aW9ucyB3aGljaCBhcmUgdmVyaWZpZWQgYnkgdGhlIGZpcm13YXJlIGFzXG4gICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlBcbkBAIC01NzcsNiAmIzQzOzgxMSw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcJiMzNDtjY3BcJiMzNDspO1xuICAqL1xuIGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbiB7XG4mIzQzO1x0dTY0IHZhbDtcbiYjNDM7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcbiBcdFx0cmV0dXJuIC1FTk9TWVM7XG4gXG5AQCAtNTg2LDYgJiM0Mzs4MjIsMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuIFx0aWYgKCFzZXR1cF9ybXB0YWJsZSgpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uIGEga2V4ZWMgYm9vdCBTTlAgbWF5IGFscmVhZHkgYmUgZW5hYmxlZCAobGVnYWN5IGZpcm13YXJlIGxlYXZlc1xuJiM0MztcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxuJiM0MztcdCAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xuJiM0MztcdGlmICh2YWwgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuJiM0MztcdFx0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBTZXR0aW5nIGNyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzIHRvICYjMzk7dHJ1ZSYjMzk7IHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pY1xuIFx0ICogbm90aWZpZXIgaXMgaW52b2tlZCB0byBkbyBTTlAgSU9NTVUgc2h1dGRvd24gYmVmb3JlIGtkdW1wLlxuQEAgLTY4NiwxMCAmIzQzOzkzMSwxMiBAQCBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXG4gXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSlcbiBcdFx0cmRtc3JxKE1TUl9BTUQ2NF9STVBfQ0ZHLCBybXBfY2ZnKTtcbiBcbi1cdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxuJiM0MztcdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKSB7XG4gXHRcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xuLVx0ZWxzZVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1JNUE9QVCk7XG4gXHRcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbiYjNDM7XHR9XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbmluZGV4IGNhNDczY2ExOThiODEuLmMwMDJhN2NhMjZhOGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG5AQCAtMTQ3Nyw2ICYjNDM7MTQ3Nyw5IEBAIHN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXG4gXHR9XG4gXG4gXHRzbnBfaHZfZml4ZWRfcGFnZXNfc3RhdGVfdXBkYXRlKHNldiwgSFZfRklYRUQpO1xuJiM0MztcbiYjNDM7XHRzbnBfc2V0dXBfcm1wb3B0KCk7XG4mIzQzO1xuIFx0c2V2LVx1MDAzZXNucF9pbml0aWFsaXplZCA9IHRydWU7XG4gXHRkZXZfZGJnKHNldi1cdTAwM2VkZXYsIFwmIzM0O1NFVi1TTlAgZmlybXdhcmUgaW5pdGlhbGl6ZWQsIFNFVi1USU8gaXMgJXNcXG5cJiMzNDssXG4gXHRcdGRhdGEudGlvX2VuID8gXCYjMzQ7ZW5hYmxlZFwmIzM0OyA6IFwmIzM0O2Rpc2FibGVkXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNzoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiB1c2VkIGluIFNFVi1TTlAgaG9zdCBlbnZpcm9ubWVudHMuIFRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgQU1EIGhhcmR3YXJlIHdpdGggU0VWLVNOUCBhbmQgUk1QT1BUIHN1cHBvcnQgZW5hYmxlZCBpbiB0aGUgQklPUy4gVGhlc2UgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBzb2Z0d2FyZS1lbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL1RDRyBvciBhdmFpbGFibGUgaW4gdHlwaWNhbCBHQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG5ldyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE1MzMzOTk1MzAxODg2ZTc0Y2EwYjY0M2IyMDM5YTUyOTY1ZDNmOGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyOCAxNzoxMTo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCmluZGV4IDNkMDk0MGEzYjlmMzcuLmRiY2NkZTllZTVjZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaApAQCAtNzYsNyAmIzQzOzc2LDcgQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzgJCQkoIDMqMzImIzQzOyA0KSAvKiBPcHRlcm9uLCBBdGhsb242NCAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9aRU41CQkoIDMqMzImIzQzOyA1KSAvKiBDUFUgYmFzZWQgb24gWmVuNSBtaWNyb2FyY2hpdGVjdHVyZSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9aRU42CQkoIDMqMzImIzQzOyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqLwotLyogRnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMyozMiYjNDM7IDcpICovCiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFQJCSggMyozMiYjNDM7IDcpIC8qIFN1cHBvcnQgZm9yIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24gKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDCSggMyozMiYjNDM7IDgpIC8qICYjMzQ7Y29uc3RhbnRfdHNjJiMzNDsgVFNDIHRpY2tzIGF0IGEgY29uc3RhbnQgcmF0ZSAqLwogLyogZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfVVAJKCAzKjMyJiM0MzsgOSkgKiAmIzM0O3VwJiMzNDsgU01QIGtlcm5lbCBydW5uaW5nIG9uIFVQICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FSVAkJCSggMyozMiYjNDM7MTApIC8qICYjMzQ7YXJ0JiMzNDsgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKaW5kZXggMThjNGJlNzVlOTI3MS4uZDJjYjBhN2NkMGEyZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTc2MSw2ICYjNDM7NzYxLDkgQEAKICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRF9CSVQJMAogI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVECUJJVF9VTEwoTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRF9CSVQpCiAjZGVmaW5lIE1TUl9BTUQ2NF9STVBfU0VHTUVOVF9TSElGVCh4KQkoKCh4KSAmYW1wOyBHRU5NQVNLX1VMTCgxMywgOCkpICZndDsmZ3Q7IDgpCiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0UJCTB4YzAwMTAxMzkKJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVAkwCiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRQkJQklUX1VMTChNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVQpCiAKICNkZWZpbmUgTVNSX1NWU01fQ0FBCQkJMHhjMDAxZjAwMAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oCmluZGV4IDU5NGNmYTE5Y2JkNGIuLjA5YjFjNWQzMzc5MDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oCkBAIC02NjIsNiAmIzQzOzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpCiAJX19zbnBfbGVha19wYWdlcyhwZm4sIHBhZ2VzLCB0cnVlKTsKIH0KIGludCBzbnBfcHJlcGFyZSh2b2lkKTsKJiM0Mzt2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCk7CiYjNDM7dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpOwogdm9pZCBzbnBfc2h1dGRvd24odm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC02ODAsNiAmIzQzOzY4Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgbnBhZ2VzKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGtkdW1wX3Nldl9jYWxsYmFjayh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge30KIHN0YXRpYyBpbmxpbmUgaW50IHNucF9wcmVwYXJlKHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NodXRkb3duKHZvaWQpIHt9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMKaW5kZXggOTM3MTI5Y2U2YTk2NC4uMDIxYzBiZjIyZGUyMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCkBAIC02Nyw2ICYjNDM7NjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBjcHVpZF9iaXRzW10gPSB7CiAJeyBYODZfRkVBVFVSRV9QRVJGTU9OX1YyLAkJQ1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LAogCXsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMiwJCUNQVUlEX0VBWCwgIDEsIDB4ODAwMDAwMjIsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSwJQ1BVSURfRUFYLCAgMiwgMHg4MDAwMDAyMiwgMCB9LAomIzQzOwl7IFg4Nl9GRUFUVVJFX1JNUE9QVCwJCQlDUFVJRF9FRFgsICAwLCAweDgwMDAwMDI1LCAwIH0sCiAJeyBYODZfRkVBVFVSRV9BTURfSFRSX0NPUkVTLAkJQ1BVSURfRUFYLCAzMCwgMHg4MDAwMDAyNiwgMCB9LAogCXsgMCwgMCwgMCwgMCwgMCB9CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKaW5kZXggNDI3MjI5MzQ3ODc2Ni4uYzU3NDg0OWIxNTg3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCkBAIC0yOTkyLDYgJiM0MzsyOTkyLDE2IEBAIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKQogCQkgKi8KIAkJaWYgKHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pKQogCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFBlcmZvcm0gUk1QIG9wdGltaXphdGlvbnMgb24gbWVtb3J5IGZyZWVkIGJ5IHRlcm1pbmF0aW5nCiYjNDM7CQkgKiBndWVzdHMuICBUaGUgc2NhbiBpcyBkZWZlcnJlZCwgc28gaXQgbm9ybWFsbHkgcnVucyBhZnRlcgomIzQzOwkJICogc2V2X2dtZW1faW52YWxpZGF0ZSgpIGhhcyBjb252ZXJ0ZWQgdGhpcyBndWVzdCYjMzk7cyBwYWdlcyBiYWNrIHRvCiYjNDM7CQkgKiBzaGFyZWQsIGFuZCBwaWNrcyB0aGVtIHVwIHRoZW4uICBBIHZlcnkgbGFyZ2UgZ3Vlc3Qgd2hvc2UKJiM0MzsJCSAqIGNvbnZlcnNpb24gaGFzIG5vdCBmaW5pc2hlZCBieSB0aGVuIGlzIHBpY2tlZCB1cCBieSBhIGxhdGVyCiYjNDM7CQkgKiB0ZWFyZG93biYjMzk7cyBzY2FuLgomIzQzOwkJICovCiYjNDM7CQlzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7CiAJfSBlbHNlIHsKIAkJc2V2X3VuYmluZF9hc2lkKGt2bSwgc2V2LSZndDtoYW5kbGUpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMKaW5kZXggY2ZmMjg1ZDhhZDhlMy4uMjkxYTM2MDI5MWViNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMKQEAgLTE5LDYgJiM0MzsxOSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW9tbXUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9hbWQtaW9tbXUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ub3NwZWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vc2V2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3Byb2Nlc3Nvci5oJmd0OwpAQCAtMTI0LDYgJiM0MzsxMjUsMjAgQEAgc3RhdGljIHZvaWQgKnJtcF9ib29ra2VlcGluZyBfX3JvX2FmdGVyX2luaXQ7CiAKIHN0YXRpYyB1NjQgcHJvYmVkX3JtcF9iYXNlLCBwcm9iZWRfcm1wX3NpemU7CiAKJiM0MztzdGF0aWMgY3B1bWFza192YXJfdCBybXBvcHRfY3B1bWFzazsKJiM0MztzdGF0aWMgcGh5c19hZGRyX3Qgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kOwomIzQzOwomIzQzO2VudW0gcm1wb3B0X2Z1bmN0aW9uIHsKJiM0MzsJUk1QT1BUX0ZVTkNfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLAomIzQzOwlSTVBPUFRfRlVOQ19SRVBPUlRfU1RBVFVTCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVQJMTAwMDAKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTsKJiM0MztzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrOwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgocm1wb3B0X3dxX211dGV4KTsKJiM0MzsKIHN0YXRpYyBMSVNUX0hFQUQoc25wX2xlYWtlZF9wYWdlc19saXN0KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc25wX2xlYWtlZF9wYWdlc19saXN0X2xvY2spOwogCkBAIC01MTMsNyAmIzQzOzUyOCw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZykKIAogaW50IHNucF9wcmVwYXJlKHZvaWQpCiB7Ci0JaW50IHJldDsKIAl1NjQgdmFsOwogCiAJLyoKQEAgLTUyNiwxNCAmIzQzOzU0MCwyMSBAQCBpbnQgc25wX3ByZXBhcmUodm9pZCkKIAogCWNsZWFyX3JtcCgpOwogCi0JY3B1c19yZWFkX2xvY2soKTsKJiM0MzsJLyoKJiM0MzsJICogRGlzYWJsZSBDUFUgaG90cGx1ZyBiZWZvcmUgZW5hYmxpbmcgU05QOiBubyBDUFUgbWF5IGNvbWUgb25saW5lCiYjNDM7CSAqIHdpdGhvdXQgU25wRW4gd2hpbGUgU05QIGlzIGFjdGl2ZSwgYW5kIG5vbmUgbWF5IGdvIG9mZmxpbmUgZHVyaW5nCiYjNDM7CSAqIGVuYWJsZS4gIFRoaXMga2VlcHMgY3B1X29ubGluZV9tYXNrIHN0YWJsZSBmb3IgdGhlIGNoZWNrIGFuZCB0aGUKJiM0MzsJICogb25fZWFjaF9jcHUoKSBjYWxscyBiZWxvdywgc28gY3B1c19yZWFkX2xvY2soKSBpcyBub3QgbmVlZGVkLiAgSXQgaXMKJiM0MzsJICogcmUtZW5hYmxlZCBpbiBzbnBfc2h1dGRvd24oKSBvbmNlIHRoZSBmaXJtd2FyZSBkaXNhYmxlcyBTTlAuCiYjNDM7CSAqLwomIzQzOwljcHVfaG90cGx1Z19kaXNhYmxlKCk7CiAKIAlpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkgewotCQlyZXQgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWNwdV9ob3RwbHVnX2VuYWJsZSgpOwogCQlwcl93YXJuKCYjMzQ7U05QIGluaXQgZmFpbGVkOiBub3QgYWxsIENQVXMgb25saW5lLiAoJSpwYmwgb25saW5lICZsdDstJmd0OyAlKnBibCBwcmVzZW50IG1hc2tzKS5cbiYjMzQ7LAogCQkJY3B1bWFza19wcl9hcmdzKGNwdV9vbmxpbmVfbWFzayksCiAJCQljcHVtYXNrX3ByX2FyZ3MoY3B1X3ByZXNlbnRfbWFzaykpOwotCQlnb3RvIHVubG9jazsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKIAl3YmludmRfb25fYWxsX2NwdXMoKTsKQEAgLTU0OCwxNCAmIzQzOzU2OSwyOSBAQCBpbnQgc25wX3ByZXBhcmUodm9pZCkKIAkvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi8KIAlvbl9lYWNoX2NwdShjbGVhcl9oc2F2ZV9wYSwgTlVMTCwgMSk7CiAKLQlyZXQgPSAwOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgJiMzNDtjY3AmIzM0Oyk7CiAKLXVubG9jazoKLQljcHVzX3JlYWRfdW5sb2NrKCk7CiYjNDM7c3RhdGljIHZvaWQgc25wX2NsZWFudXBfcm1wb3B0KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgY3B1OwogCi0JcmV0dXJuIHJldDsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cm1wb3B0X3dxX211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKCFybXBvcHRfd3EpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmspOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpOwomIzQzOwomIzQzOwlmb3JfZWFjaF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzaykKJiM0MzsJCXdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIDApOwomIzQzOwomIzQzOwlmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9jcHVtYXNrKTsKJiM0MzsJcm1wb3B0X3BhX3N0YXJ0ID0gcm1wb3B0X3BhX2VuZCA9IDA7CiYjNDM7CXJtcG9wdF93cSA9IE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCAmIzM0O2NjcCYjMzQ7KTsKIAogdm9pZCBzbnBfc2h1dGRvd24odm9pZCkKIHsKQEAgLTU2NSwxMSAmIzQzOzYwMSwyMDkgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkKIAlpZiAoc3lzY2ZnICZhbXA7IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKQogCQlyZXR1cm47CiAKJiM0MzsJLyoKJiM0MzsJICogQ2xlYXIgdGhlIFJNUE9QVF9CQVNFIE1TUnMgd2hpbGUgQ1BVIGhvdHBsdWcgaXMgc3RpbGwgZGlzYWJsZWQsIHRoZW4KJiM0MzsJICogcmUtZW5hYmxlIGhvdHBsdWcgbm93IHRoYXQgdGhlIGZpcm13YXJlIGhhcyBkaXNhYmxlZCBTTlAuICBBIGxlZ2FjeSBTTlAKJiM0MzsJICogc2h1dGRvd24gcmV0dXJucyBhYm92ZSB3aXRoIFNucEVuIHN0aWxsIHNldCBhbmQgbGVhdmVzIGhvdHBsdWcgZGlzYWJsZWQuCiYjNDM7CSAqLwomIzQzOwlzbnBfY2xlYW51cF9ybXBvcHQoKTsKJiM0MzsJY3B1X2hvdHBsdWdfZW5hYmxlKCk7CiYjNDM7CiAJY2xlYXJfcm1wKCk7CiAJb25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTsKIH0KIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCAmIzM0O2NjcCYjMzQ7KTsKIAomIzQzO3N0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9STVBPUFQpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUk1QT1BUOiBGMiAwRiAwMSBGQwomIzQzOyAqICAgSW5wdXQ6ICBSQVggPSBzeXN0ZW0gcGh5c2ljYWwgYWRkcmVzcyAoMUdCIGFsaWduZWQpCiYjNDM7ICogICAgICAgICAgIFJDWCA9IG9wZXJhdGlvbiB0eXBlCiYjNDM7ICogICBPdXRwdXQ6IENGIHNldCBpZiB0aGUgcmFuZ2Ugd2FzIG9wdGltaXplZAomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JtcG9wdCh1NjQgcGFfc3RhcnQsIHU2NCBvcF90eXBlKQomIzQzO3sKJiM0MzsJYm9vbCBvcHRpbWl6ZWQ7CiYjNDM7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0Oy5ieXRlIDB4ZjIsIDB4MGYsIDB4MDEsIDB4ZmMmIzM0OwomIzQzOwkJICAgICA6ICYjMzQ7PUBjY2MmIzM0OyAob3B0aW1pemVkKQomIzQzOwkJICAgICA6ICYjMzQ7YSYjMzQ7IChwYV9zdGFydCksICYjMzQ7YyYjMzQ7IChvcF90eXBlKQomIzQzOwkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBvcHRpbWl6ZWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpCiYjNDM7ewomIzQzOwl1NjQgcGFfc3RhcnQgPSBBTElHTl9ET1dOKHBhLCBTWl8xRyk7CiYjNDM7CXU2NCBvcF90eXBlID0gUk1QT1BUX0ZVTkNfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTOwomIzQzOwomIzQzOwlfX3JtcG9wdChwYV9zdGFydCwgb3BfdHlwZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogJiMzOTt2YWwmIzM5OyBpcyBhIHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdF9zbXAodm9pZCAqdmFsKQomIzQzO3sKJiM0MzsJcm1wb3B0KCh1NjQpdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXMKJiM0MzsgKiByYW5nZSBvZiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBybXBvcHRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CWNwdW1hc2tfdmFyX3QgZm9sbG93ZXJfbWFzazsKJiM0MzsJcGh5c19hZGRyX3QgcGE7CiYjNDM7CWludCB0aGlzX2NwdTsKJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0O0F0dGVtcHQgUk1QIG9wdGltaXphdGlvbnMgb24gcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBAMUdCIGFsaWdubWVudCBbMHglMDE2bGx4IC0gMHglMDE2bGx4XVxuJiMzNDssCiYjNDM7CQlybXBvcHRfcGFfc3RhcnQsIHJtcG9wdF9wYV9lbmQpOwomIzQzOwomIzQzOwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZhbXA7Zm9sbG93ZXJfbWFzaywgR0ZQX0tFUk5FTCkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtSTVAgb3B0aW1pemF0aW9uIHBhc3Mgc2tpcHBlZDogY3B1bWFzayBhbGxvY2F0aW9uIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJNUE9QVCBzY2FucyB0aGUgUk1QIHRhYmxlLCBzdG9yZXMgdGhlIHJlc3VsdCBvZiB0aGUgc2NhbiBpbiB0aGUKJiM0MzsJICogcmVzZXJ2ZWQgcHJvY2Vzc29yIG1lbW9yeS4gVGhlIFJNUCBzY2FuIGlzIHRoZSBtb3N0IGV4cGVuc2l2ZQomIzQzOwkgKiBwYXJ0LiBJZiBhIHNlY29uZCBSTVBPUFQgb2NjdXJzLCBpdCBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIHNjYW4KJiM0MzsJICogaWYgdGhleSBjYW4gc2VlIGEgY2FjaGVkIHJlc3VsdCBpbiB0aGUgcmVzZXJ2ZWQgcHJvY2Vzc29yIG1lbW9yeS4KJiM0MzsJICoKJiM0MzsJICogRG8gUk1QT1BUIG9uIG9uZSBDUFUgYWxvbmUuIFRoZW4sIGZvbGxvdyB0aGF0IHVwIHdpdGggUk1QT1BUCiYjNDM7CSAqIG9uIGV2ZXJ5IG90aGVyIHByaW1hcnkgdGhyZWFkLiBGb2xsb3dlcnMgYXJlICYjMzQ7ZGVzaWduZWQgdG8mIzM0OwomIzQzOwkgKiBza2lwIHRoZSBzY2FuIGlmIHRoZXkgc2VlIHRoZSAmIzM0O2NhY2hlZCYjMzQ7IHNjYW4gcmVzdWx0cy4KJiM0MzsJICoKJiM0MzsJICogUGluIHRoZSB3b3JrZXIgdG8gdGhlIGN1cnJlbnQgQ1BVIGZvciB0aGUgbGVhZGVyIGxvb3Agc28gdGhhdAomIzQzOwkgKiB0aGlzX2NwdSByZW1haW5zIHZhbGlkIGFuZCB0aGUgUk1QT1BUIGluc3RydWN0aW9uIGV4ZWN1dGVzIG9uCiYjNDM7CSAqIHRoZSBjb3JyZWN0IENQVS4gIFVzZSBtaWdyYXRlX2Rpc2FibGUoKSByYXRoZXIgdGhhbiBnZXRfY3B1KCkgdG8KJiM0MzsJICogcHJldmVudCBtaWdyYXRpb24gd2hpbGUgc3RpbGwgYWxsb3dpbmcgcHJlZW1wdGlvbi4KJiM0MzsJICovCiYjNDM7CW1pZ3JhdGVfZGlzYWJsZSgpOwomIzQzOwl0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKJiM0MzsKJiM0MzsJY3B1bWFza19hbmRub3QoZm9sbG93ZXJfbWFzaywgcm1wb3B0X2NwdW1hc2ssCiYjNDM7CQkgICAgICAgdG9wb2xvZ3lfc2libGluZ19jcHVtYXNrKHRoaXNfY3B1KSk7CiYjNDM7CiYjNDM7CWZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhICZsdDsgcm1wb3B0X3BhX2VuZDsgcGEgJiM0Mzs9IFNaXzFHKQomIzQzOwkJcm1wb3B0KHBhKTsKJiM0MzsKJiM0MzsJbWlncmF0ZV9lbmFibGUoKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRm9sbG93ZXJzOiBydW4gUk1QT1BUIG9uIHRoZSByZW1haW5pbmcgY29yZXMuICBjcHVzX3JlYWRfbG9jaygpIGlzCiYjNDM7CSAqIGludGVudGlvbmFsbHkgbm90IGhlbGQgaGVyZTogQ1BVIGhvdHBsdWcgaXMgZGlzYWJsZWQgZm9yIHRoZSBlbnRpcmUKJiM0MzsJICogdGltZSBTTlAgaXMgYWN0aXZlIChzZWUgc25wX3ByZXBhcmUoKSksIGFuZCB0aGlzIHdvcmsgb25seSBydW5zIHdoaWxlCiYjNDM7CSAqIFNOUCBpcyBhY3RpdmUsIHNvIHRoZSBmb2xsb3dlciBzZXQgc3RheXMgdmFsaWQgYWNyb3NzIHRoZSB3aG9sZSBzY2FuLgomIzQzOwkgKi8KJiM0MzsJZm9yIChwYSA9IHJtcG9wdF9wYV9zdGFydDsgcGEgJmx0OyBybXBvcHRfcGFfZW5kOyBwYSAmIzQzOz0gU1pfMUcpCiYjNDM7CQlvbl9lYWNoX2NwdV9tYXNrKGZvbGxvd2VyX21hc2ssIHJtcG9wdF9zbXAsICh2b2lkICopcGEsIHRydWUpOwomIzQzOwomIzQzOwlmcmVlX2NwdW1hc2tfdmFyKGZvbGxvd2VyX21hc2spOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghcm1wb3B0X2NhcGFibGUoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cm1wb3B0X3dxX211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKCFybXBvcHRfd3EpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCAmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssCiYjNDM7CQkJIG1zZWNzX3RvX2ppZmZpZXMoUk1QT1BUX1dPUktfVElNRU9VVCkpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sICYjMzQ7a3ZtLWFtZCYjMzQ7KTsKJiM0MzsKJiM0Mzt2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCkKJiM0Mzt7CiYjNDM7CXU2NCBybXBvcHRfYmFzZTsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFybXBvcHRfY2FwYWJsZSgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtybXBvcHRfd3FfbXV0ZXgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPbiByZS1pbml0aWFsaXphdGlvbiBhZnRlciBhIGxlZ2FjeSBTTlAgc2h1dGRvd24gKFNOUF9TSFVURE9XTl9FWAomIzQzOwkgKiB3aXRoIHg4Nl9zbnBfc2h1dGRvd249MCksIHNucF9zaHV0ZG93bigpIGFuZCB0aHVzIHNucF9jbGVhbnVwX3JtcG9wdCgpCiYjNDM7CSAqIGFyZSBza2lwcGVkLCBzbyB0aGUgd29ya3F1ZXVlLCBkZWxheWVkIHdvcmssIGNwdW1hc2sgYW5kIHBlci1DUFUKJiM0MzsJICogUk1QT1BUX0JBU0UgTVNScyBhcmUgc3RpbGwgc2V0IHVwIGFuZCB2YWxpZCAoU25wRW4gc3RheWVkIHNldCBhbmQKJiM0MzsJICogQ1BVIGhvdHBsdWcgc3RheWVkIGRpc2FibGVkKS4gIFJhdGhlciB0aGFuIHJlLWRvaW5nIHRoZSBzZXR1cCwgd2hpY2gKJiM0MzsJICogd291bGQgbGVhayB0aGUgZXhpc3Rpbmcgc3RhdGUsIGp1c3QgcmUtcXVldWUgdGhlIG9wdGltaXphdGlvbiBwYXNzCiYjNDM7CSAqIHRvIHJlLW9wdGltaXplIGFueSBtZW1vcnkgdGhlIHByZXZpb3VzIFNOUCBzZXNzaW9uIGRlLW9wdGltaXplZC4KJiM0MzsJICovCiYjNDM7CWlmIChybXBvcHRfd3EpIHsKJiM0MzsJCXF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsICZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ3JlYXRlIGFuIFJNUE9QVC1zcGVjaWZpYyB3b3JrcXVldWUgdG8gYXZvaWQgc2NoZWR1bGluZwomIzQzOwkgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLgomIzQzOwkgKi8KJiM0MzsJcm1wb3B0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7cm1wb3B0X3dxJiMzNDssIFdRX1VOQk9VTkQsIDEpOwomIzQzOwlpZiAoIXJtcG9wdF93cSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssIHJtcG9wdF93b3JrX2hhbmRsZXIpOwomIzQzOwomIzQzOwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO3JtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCBjcHVtYXNrXG4mIzM0Oyk7CiYjNDM7CQlkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpOwomIzQzOwkJcm1wb3B0X3dxID0gTlVMTDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgUk1QT1BUX0JBU0UgTVNSIGlzIHBlci1jb3JlLCBzbyBvbmx5IG9uZSB0aHJlYWQgcGVyIGNvcmUgbmVlZHMKJiM0MzsJICogdG8gc2V0IHVwIHRoZSBSTVBPUFRfQkFTRSBNU1IuICBBbGwgcHJpbWFyeSB0aHJlYWRzIGFyZSBvbmxpbmUsCiYjNDM7CSAqIG90aGVyd2lzZSBTTlAgd291bGQgbm90IGhhdmUgYmVlbiBlbmFibGVkLgomIzQzOwkgKi8KJiM0MzsJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCiYjNDM7CQlpZiAodG9wb2xvZ3lfaXNfcHJpbWFyeV90aHJlYWQoY3B1KSkKJiM0MzsJCQljcHVtYXNrX3NldF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzayk7CiYjNDM7CiYjNDM7CXJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7CiYjNDM7CXJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBlci1DUFUgUk1QT1BUIHRhYmxlcyBjb3ZlciBhdCBtb3N0IDIgVEIuICBQcm9ncmFtIGVhY2ggY29yZSYjMzk7cwomIzQzOwkgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX2NwdShjcHUsIHJtcG9wdF9jcHVtYXNrKQomIzQzOwkJd3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgcm1wb3B0X2Jhc2UpOwomIzQzOwomIzQzOwlybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTsKJiM0MzsKJiM0MzsJLyogTGltaXQgbWVtb3J5IHNjYW5uaW5nIHRvIDJUQiBvZiBSQU0gKi8KJiM0MzsJaWYgKChybXBvcHRfcGFfZW5kIC0gcm1wb3B0X3BhX3N0YXJ0KSAmZ3Q7IFNaXzJUKSB7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7Uk1QT1BUIGNvdmVyYWdlIGxpbWl0ZWQgdG8gMlRCOyBtZW1vcnkgYWJvdmUgMHglbGx4IG5vdCBvcHRpbWl6ZWRcbiYjMzQ7LAomIzQzOwkJCXJtcG9wdF9wYV9zdGFydCAmIzQzOyBTWl8yVCk7CiYjNDM7CQlybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICYjNDM7IFNaXzJUOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9uY2UgYWxsIHBlci1DUFUgUk1QT1BUIHRhYmxlcyBoYXZlIGJlZW4gY29uZmlndXJlZCwgZW5hYmxlIFJNUE9QVAomIzQzOwkgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuCiYjNDM7CSAqLwomIzQzOwlxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCAmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssIDApOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsICYjMzQ7Y2NwJiMzNDspOwomIzQzOwogLyoKICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXMKICAqIGRlc2NyaWJlZCBpbiB0aGUgU05QX0lOSVRfRVggZmlybXdhcmUgY29tbWFuZCBkZXNjcmlwdGlvbiBpbiB0aGUgU05QCkBAIC01NzcsNiAmIzQzOzgxMSw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCAmIzM0O2NjcCYjMzQ7KTsKICAqLwogaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKQogewomIzQzOwl1NjQgdmFsOwomIzQzOwogCWlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKQogCQlyZXR1cm4gLUVOT1NZUzsKIApAQCAtNTg2LDYgJiM0Mzs4MjIsMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKQogCWlmICghc2V0dXBfcm1wdGFibGUoKSkKIAkJcmV0dXJuIC1FTk9TWVM7CiAKJiM0MzsJLyoKJiM0MzsJICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzCiYjNDM7CSAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dAomIzQzOwkgKiBkaXNhYmxpbmcgQ1BVIGhvdHBsdWcsIHNvIGRpc2FibGUgaXQgaGVyZS4KJiM0MzsJICovCiYjNDM7CXJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpOwomIzQzOwlpZiAodmFsICZhbXA7IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKQomIzQzOwkJY3B1X2hvdHBsdWdfZGlzYWJsZSgpOwomIzQzOwogCS8qCiAJICogU2V0dGluZyBjcmFzaF9rZXhlY19wb3N0X25vdGlmaWVycyB0byAmIzM5O3RydWUmIzM5OyB0byBlbnN1cmUgdGhhdCBTTlAgcGFuaWMKIAkgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuCkBAIC02ODYsMTAgJiM0Mzs5MzEsMTIgQEAgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKQogCWlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKQogCQlyZG1zcnEoTVNSX0FNRDY0X1JNUF9DRkcsIHJtcF9jZmcpOwogCi0JaWYgKHJtcF9jZmcgJmFtcDsgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRCkKJiM0MzsJaWYgKHJtcF9jZmcgJmFtcDsgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRCkgewogCQlyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTsKLQllbHNlCiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1JNUE9QVCk7CiAJCXJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTsKJiM0MzsJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMKaW5kZXggY2E0NzNjYTE5OGI4MS4uYzAwMmE3Y2EyNmE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jCkBAIC0xNDc3LDYgJiM0MzsxNDc3LDkgQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZCkKIAl9CiAKIAlzbnBfaHZfZml4ZWRfcGFnZXNfc3RhdGVfdXBkYXRlKHNldiwgSFZfRklYRUQpOwomIzQzOwomIzQzOwlzbnBfc2V0dXBfcm1wb3B0KCk7CiYjNDM7CiAJc2V2LSZndDtzbnBfaW5pdGlhbGl6ZWQgPSB0cnVlOwogCWRldl9kYmcoc2V2LSZndDtkZXYsICYjMzQ7U0VWLVNOUCBmaXJtd2FyZSBpbml0aWFsaXplZCwgU0VWLVRJTyBpcyAlc1xuJiMzNDssCiAJCWRhdGEudGlvX2VuID8gJiMzNDtlbmFibGVkJiMzNDsgOiAmIzM0O2Rpc2FibGVkJiMzNDspOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDE4CgkJCQkJCQlvdXRwdXQ6IDEwOQoJCQkJCQkJdGhvdWdodHM6IDEyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50OiBBTUQgUk1QT1BUIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiwgc3BlY2lmaWNhbGx5IHRpZWQgdG8gU0VWLVNOUC4gSXQgdG91Y2hlcyBmaWxlcyBpbiBgYXJjaC94ODZgLCBgZHJpdmVycy9jcnlwdG9gIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgbWVtb3J5IGVuY3J5cHRpb24gYW5kIHNlY3VyZSBuZXN0ZWQgcGFnaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmcgaW4gb3VyIHR5cGljYWwgZW52aXJvbm1lbnQ/JiMzNDsKClRoaXMgZGVwZW5kcyBvbiBTRVYtU05QLCBhbmQgd2UgYWxsIGtub3cgdGhhdCYjMzk7cyBBTUQtc3BlY2lmaWMgaGFyZHdhcmUsIG5hbWVseSBFUFlDIHByb2Nlc3NvcnMgd2l0aCB0aGUgZmVhdHVyZSBlbmFibGVkLiBJIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IG91ciBzZXR1cCDigJMgR0NFIGluc3RhbmNlcywgc3RhbmRhcmQgUUVNVS4gQ2FuIHdlIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGU/ICBXZSBrbm93IFFFTVUgKmNhbiogZW11bGF0ZSAqc29tZSogU0VWIGZlYXR1cmVzLCBidXQgZm9yIFNFVi1TTlAgKmhvc3QqIGZlYXR1cmVzLCBpdCYjMzk7cyBwcmV0dHkgbXVjaCBhIGdpdmVuIHlvdSBuZWVkIGEgcGh5c2ljYWwgbWFjaGluZSB3aXRoIFNOUCBlbmFibGVkLCBvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aCBTTlAuCgpUaGUgY29kZSBpdHNlbGYgaGFzIGNoZWNrcywgdGhhbmtmdWxseS4gVGhlcmUmIzM5O3MgYSBgcm1wb3B0X2NhcGFibGUoKWAgZnVuY3Rpb24gd2hpY2gsIGluIHR1cm4sIGNoZWNrcyBmb3IgYm90aCBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBhbmQgYENDX0FUVFJfSE9TVF9TRVZfU05QYC4gSWYgZWl0aGVyIG9mIHRob3NlIGFyZSBmYWxzZSwgdGhlIHdob2xlIHRoaW5nIGp1c3QgYmFpbHMgZWFybHkuICBNeSBodW5jaCBpcywgdGhvc2UgY2hlY2tzIGFyZSBnb2luZyB0byBmYWlsIGluIG91ciBzdGFuZGFyZCBTeXprYWxsZXIgZW52aXJvbm1lbnRzLiAgR0NFIGluc3RhbmNlcz8gIE5vcGUsIHRoZXkgZG9uJiMzOTt0IGV4cG9zZSBTRVYtU05QIGhvc3QgY2FwYWJpbGl0aWVzIHRvIHRoZSBndWVzdCwgZXZlbiBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAqaXMqIEFNRC4gSXQgd2lsbCBiZSB1bmxpa2VseSwgZXZlbiBpZiB0aGV5IGFyZSBBTUQsIHRvIHN1cHBvcnQgbmVzdGVkIFNFVi1TTlAuCgpBbHJpZ2h0LCBTeXprYWxsZXIgZG9lcyB0ZXN0IEtWTSwgYnV0IGRvZXMgaXQgdGVzdCBTRVYtU05QPyBJIGJlbGlldmUgaXQgZG9lcywgYnV0IHRlc3RpbmcgdGhlIGhvc3Qtc2lkZSBTRVYtU05QIGZ1bmN0aW9uYWxpdHkgYWJzb2x1dGVseSByZXF1aXJlcyB0aGUgaG9zdCB0byAqaGF2ZSogU0VWLVNOUC4gIFNvLCBoZXJlIGlzIHRoZSBsaXRtdXMgdGVzdDogVGhlIGd1aWRhbmNlIHNheXMgaWYgdGhlIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLCB0aGVuIGl04oCZcyBub3Qgd29ydGggZnV6emluZy4KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgUUVNVSBkb2VzbiYjMzk7dCAqZW11bGF0ZSogU0VWLVNOUCBhdCB0aGUgaG9zdCBsZXZlbC4gSXQgcmVsaWVzIG9uIEtWTSBhbmQgdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgdGhhdCBmdW5jdGlvbmFsaXR5LiAgSXQgZG9lc24mIzM5O3Qgc29mdHdhcmUtZW11bGF0ZSB0aGUgbWVtb3J5IGVuY3J5cHRpb24gYW5kIENQVSBtaWNyb2NvZGUgbmVlZGVkIGZvciB0aGUgUk1QIHRhYmxlIGFuZCBgUk1QT1BUYCBpbnN0cnVjdGlvbi4gVGhlIFRDRyBlbXVsYXRpb24gaXNu4oCZdCBldmVuIGluIHRoZSBnYW1lIGhlcmUg4oCTIFRDRyBkb2VzbuKAmXQgZW11bGF0ZSBtZW1vcnkgZW5jcnlwdGlvbi4KClNvLCBpbiBzdGFuZGFyZCBRRU1VL0dDRSwgYFg4Nl9GRUFUVVJFX1JNUE9QVGAgYW5kIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgYXJlIGdvaW5nIHRvIGJlIGZhbHNlLiBUaGUgY29kZSBpcyB1bnJlYWNoYWJsZS4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgaG93IGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgaXMgZGV0ZXJtaW5lZDogaXQgY2hlY2tzIGBYODZfRkVBVFVSRV9TRVZfU05QYCwgd2hpY2ggb25seSBzaG93cyB1cCBvbiBBTUQgQ1BVcyB3aXRoIFNOUCBlbmFibGVkIGluIHRoZSBCSU9TLiAgU3l6a2FsbGVyIHJ1bnMgaW4gUUVNVSBWTXMuIFVubGVzcyB3ZSYjMzk7cmUgcnVubmluZyBpdCBvbiBhICpzcGVjaWZpYyogYmFyZS1tZXRhbCBBTUQgbWFjaGluZSB3aXRoIFNOUCBlbmFibGVkLCB0aGF0IGZlYXR1cmUgYml0IHdvbuKAmXQgYmUgc2V0LiAgSXQmIzM5O3MganVzdCBub3QgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgoqKldvcnRoRnV6emluZz1mYWxzZS4qKgoKTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWxpdHkgdGhhdCBkZXBlbmRzIG9uIFNFVi1TTlAgaG9zdCBlbnZpcm9ubWVudHMsIHJlcXVpcmluZyBzcGVjaWZpYyBBTUQgaGFyZHdhcmUgYW5kIEJJT1MgY29uZmlndXJhdGlvbi4gVGhlc2UgZmVhdHVyZXMgYXJlbiYjMzk7dCBlbXVsYXRlZCBieSBvdXIgc3RhbmRhcmQgUUVNVSBvciBhdmFpbGFibGUgaW4gdHlwaWNhbCBHQ0UgVk1zLCBtYWtpbmcgdGhlIG5ldyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlLiBJIGNhbiBzZWUgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW1gLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgc2V2X3ZtX2Rlc3Ryb3lgIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgYW5kIEkgc2VlIGBzbnBfc2V0dXBfcm1wb3B0YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYF9fc2V2X3NucF9pbml0X2xvY2tlZGAgaW4gYGRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNgLCBhbmQgYm90aCBmdW5jdGlvbnMgc3RhcnQgd2l0aCBgaWYgKCFybXBvcHRfY2FwYWJsZSgpKSByZXR1cm47YC4gVGhlcmVmb3JlLCBnaXZlbiBhbGwgb2YgdGhlIGFib3ZlLCBJ4oCZbSBnb29kIHdpdGggdGhhdCBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIGluc3RydWN0aW9uIHVzZWQgaW4gU0VWLVNOUCBob3N0IGVudmlyb25tZW50cy4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBBTUQgaGFyZHdhcmUgd2l0aCBTRVYtU05QIGFuZCBSTVBPUFQgc3VwcG9ydCBlbmFibGVkIGluIHRoZSBCSU9TLiBUaGVzZSBoYXJkd2FyZSBmZWF0dXJlcyBhcmUgbm90IHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvVENHIG9yIGF2YWlsYWJsZSBpbiB0eXBpY2FsIEdDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbmV3IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIGluc3RydWN0aW9uIHVzZWQgaW4gU0VWLVNOUCBob3N0IGVudmlyb25tZW50cy4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBBTUQgaGFyZHdhcmUgd2l0aCBTRVYtU05QIGFuZCBSTVBPUFQgc3VwcG9ydCBlbmFibGVkIGluIHRoZSBCSU9TLiBUaGVzZSBoYXJkd2FyZSBmZWF0dXJlcyBhcmUgbm90IHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvVENHIG9yIGF2YWlsYWJsZSBpbiB0eXBpY2FsIEdDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbmV3IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMTc6MTE6NDUuMzQ2Njg4ODM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNTYzODU3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24gdXNlZCBpbiBTRVYtU05QIGhvc3QgZW52aXJvbm1lbnRzLiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIEFNRCBoYXJkd2FyZSB3aXRoIFNFVi1TTlAgYW5kIFJNUE9QVCBzdXBwb3J0IGVuYWJsZWQgaW4gdGhlIEJJT1MuIFRoZXNlIGhhcmR3YXJlIGZlYXR1cmVzIGFyZSBub3Qgc29mdHdhcmUtZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9UQ0cgb3IgYXZhaWxhYmxlIGluIHR5cGljYWwgR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE3OjExOjQ1LjM0NjY5NTMzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxMDk3NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTUzMzM5OTUzMDE4ODZlNzRjYTBiNjQzYjIwMzlhNTI5NjVkM2Y4ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAxNzoxMTo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbmluZGV4IDNkMDk0MGEzYjlmMzcuLmRiY2NkZTllZTVjZDUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcXG5AQCAtNzYsNyArNzYsNyBAQFxcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0s4XFx0XFx0XFx0KCAzKjMyKyA0KSAvKiBPcHRlcm9uLCBBdGhsb242NCAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjVcXHRcXHQoIDMqMzIrIDUpIC8qIENQVSBiYXNlZCBvbiBaZW41IG1pY3JvYXJjaGl0ZWN0dXJlICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONlxcdFxcdCggMyozMisgNikgLyogQ1BVIGJhc2VkIG9uIFplbjYgbWljcm9hcmNoaXRlY3R1cmUgKi9cXG4tLyogRnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMyozMisgNykgKi9cXG4rI2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRcXHRcXHQoIDMqMzIrIDcpIC8qIFN1cHBvcnQgZm9yIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24gKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0NcXHQoIDMqMzIrIDgpIC8qIFxcXCJjb25zdGFudF90c2NcXFwiIFRTQyB0aWNrcyBhdCBhIGNvbnN0YW50IHJhdGUgKi9cXG4gLyogZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfVVBcXHQoIDMqMzIrIDkpICogXFxcInVwXFxcIiBTTVAga2VybmVsIHJ1bm5pbmcgb24gVVAgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9BUlRcXHRcXHRcXHQoIDMqMzIrMTApIC8qIFxcXCJhcnRcXFwiIEFsd2F5cyBydW5uaW5nIHRpbWVyIChBUlQpICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcXG5pbmRleCAxOGM0YmU3NWU5MjcxLi5kMmNiMGE3Y2QwYTJmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcXG5AQCAtNzYxLDYgKzc2MSw5IEBAXFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRF9CSVRcXHQwXFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRFxcdEJJVF9VTEwoTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRF9CSVQpXFxuICNkZWZpbmUgTVNSX0FNRDY0X1JNUF9TRUdNRU5UX1NISUZUKHgpXFx0KCgoeCkgXFx1MDAyNiBHRU5NQVNLX1VMTCgxMywgOCkpIFxcdTAwM2VcXHUwMDNlIDgpXFxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9CQVNFXFx0XFx0MHhjMDAxMDEzOVxcbisjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVFxcdDBcXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRVxcdFxcdEJJVF9VTEwoTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUKVxcbiBcXG4gI2RlZmluZSBNU1JfU1ZTTV9DQUFcXHRcXHRcXHQweGMwMDFmMDAwXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXFxuaW5kZXggNTk0Y2ZhMTljYmQ0Yi4uMDliMWM1ZDMzNzkwMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXFxuQEAgLTY2Miw2ICs2NjIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IHBhZ2VzKVxcbiBcXHRfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpO1xcbiB9XFxuIGludCBzbnBfcHJlcGFyZSh2b2lkKTtcXG4rdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpO1xcbit2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCk7XFxuIHZvaWQgc25wX3NodXRkb3duKHZvaWQpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG5AQCAtNjgwLDYgKzY4Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgbnBhZ2VzKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2ZpeHVwX2U4MjBfdGFibGVzKHZvaWQpIHt9XFxuIHN0YXRpYyBpbmxpbmUgaW50IHNucF9wcmVwYXJlKHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge31cXG4rc3RhdGljIGlubGluZSB2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCkge31cXG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9zaHV0ZG93bih2b2lkKSB7fVxcbiAjZW5kaWZcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXFxuaW5kZXggOTM3MTI5Y2U2YTk2NC4uMDIxYzBiZjIyZGUyMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xcbkBAIC02Nyw2ICs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcXG4gXFx0eyBYODZfRkVBVFVSRV9QRVJGTU9OX1YyLFxcdFxcdENQVUlEX0VBWCwgIDAsIDB4ODAwMDAwMjIsIDAgfSxcXG4gXFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFxcdFxcdENQVUlEX0VBWCwgIDEsIDB4ODAwMDAwMjIsIDAgfSxcXG4gXFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1BNQ19GUkVFWkUsXFx0Q1BVSURfRUFYLCAgMiwgMHg4MDAwMDAyMiwgMCB9LFxcbitcXHR7IFg4Nl9GRUFUVVJFX1JNUE9QVCxcXHRcXHRcXHRDUFVJRF9FRFgsICAwLCAweDgwMDAwMDI1LCAwIH0sXFxuIFxcdHsgWDg2X0ZFQVRVUkVfQU1EX0hUUl9DT1JFUyxcXHRcXHRDUFVJRF9FQVgsIDMwLCAweDgwMDAwMDI2LCAwIH0sXFxuIFxcdHsgMCwgMCwgMCwgMCwgMCB9XFxuIH07XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuaW5kZXggNDI3MjI5MzQ3ODc2Ni4uYzU3NDg0OWIxNTg3OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbkBAIC0yOTkyLDYgKzI5OTIsMTYgQEAgdm9pZCBzZXZfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc25wX2RlY29tbWlzc2lvbl9jb250ZXh0KGt2bSkpXFxuIFxcdFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFBlcmZvcm0gUk1QIG9wdGltaXphdGlvbnMgb24gbWVtb3J5IGZyZWVkIGJ5IHRlcm1pbmF0aW5nXFxuK1xcdFxcdCAqIGd1ZXN0cy4gIFRoZSBzY2FuIGlzIGRlZmVycmVkLCBzbyBpdCBub3JtYWxseSBydW5zIGFmdGVyXFxuK1xcdFxcdCAqIHNldl9nbWVtX2ludmFsaWRhdGUoKSBoYXMgY29udmVydGVkIHRoaXMgZ3Vlc3QncyBwYWdlcyBiYWNrIHRvXFxuK1xcdFxcdCAqIHNoYXJlZCwgYW5kIHBpY2tzIHRoZW0gdXAgdGhlbi4gIEEgdmVyeSBsYXJnZSBndWVzdCB3aG9zZVxcbitcXHRcXHQgKiBjb252ZXJzaW9uIGhhcyBub3QgZmluaXNoZWQgYnkgdGhlbiBpcyBwaWNrZWQgdXAgYnkgYSBsYXRlclxcbitcXHRcXHQgKiB0ZWFyZG93bidzIHNjYW4uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHNldl91bmJpbmRfYXNpZChrdm0sIHNldi1cXHUwMDNlaGFuZGxlKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXFxuaW5kZXggY2ZmMjg1ZDhhZDhlMy4uMjkxYTM2MDI5MWViNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXFxuQEAgLTE5LDYgKzE5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hbWQtaW9tbXUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vc3BlYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Nldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXFx1MDAzZVxcbkBAIC0xMjQsNiArMTI1LDIwIEBAIHN0YXRpYyB2b2lkICpybXBfYm9va2tlZXBpbmcgX19yb19hZnRlcl9pbml0O1xcbiBcXG4gc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTtcXG4gXFxuK3N0YXRpYyBjcHVtYXNrX3Zhcl90IHJtcG9wdF9jcHVtYXNrO1xcbitzdGF0aWMgcGh5c19hZGRyX3Qgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kO1xcbitcXG4rZW51bSBybXBvcHRfZnVuY3Rpb24ge1xcbitcXHRSTVBPUFRfRlVOQ19WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVMsXFxuK1xcdFJNUE9QVF9GVU5DX1JFUE9SVF9TVEFUVVNcXG4rfTtcXG4rXFxuKyNkZWZpbmUgUk1QT1BUX1dPUktfVElNRU9VVFxcdDEwMDAwXFxuK1xcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcXG4rc3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yaztcXG4rc3RhdGljIERFRklORV9NVVRFWChybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4gc3RhdGljIExJU1RfSEVBRChzbnBfbGVha2VkX3BhZ2VzX2xpc3QpO1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTtcXG4gXFxuQEAgLTUxMyw3ICs1MjgsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpXFxuIFxcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbiBcXHR1NjQgdmFsO1xcbiBcXG4gXFx0LypcXG5AQCAtNTI2LDE0ICs1NDAsMjEgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXFxuIFxcbiBcXHRjbGVhcl9ybXAoKTtcXG4gXFxuLVxcdGNwdXNfcmVhZF9sb2NrKCk7XFxuK1xcdC8qXFxuK1xcdCAqIERpc2FibGUgQ1BVIGhvdHBsdWcgYmVmb3JlIGVuYWJsaW5nIFNOUDogbm8gQ1BVIG1heSBjb21lIG9ubGluZVxcbitcXHQgKiB3aXRob3V0IFNucEVuIHdoaWxlIFNOUCBpcyBhY3RpdmUsIGFuZCBub25lIG1heSBnbyBvZmZsaW5lIGR1cmluZ1xcbitcXHQgKiBlbmFibGUuICBUaGlzIGtlZXBzIGNwdV9vbmxpbmVfbWFzayBzdGFibGUgZm9yIHRoZSBjaGVjayBhbmQgdGhlXFxuK1xcdCAqIG9uX2VhY2hfY3B1KCkgY2FsbHMgYmVsb3csIHNvIGNwdXNfcmVhZF9sb2NrKCkgaXMgbm90IG5lZWRlZC4gIEl0IGlzXFxuK1xcdCAqIHJlLWVuYWJsZWQgaW4gc25wX3NodXRkb3duKCkgb25jZSB0aGUgZmlybXdhcmUgZGlzYWJsZXMgU05QLlxcbitcXHQgKi9cXG4rXFx0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xcbiBcXG4gXFx0aWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHtcXG4tXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xcbiBcXHRcXHRwcl93YXJuKFxcXCJTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXFx1MDAzYy1cXHUwMDNlICUqcGJsIHByZXNlbnQgbWFza3MpLlxcXFxuXFxcIixcXG4gXFx0XFx0XFx0Y3B1bWFza19wcl9hcmdzKGNwdV9vbmxpbmVfbWFzayksXFxuIFxcdFxcdFxcdGNwdW1hc2tfcHJfYXJncyhjcHVfcHJlc2VudF9tYXNrKSk7XFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4gXFxuIFxcdHdiaW52ZF9vbl9hbGxfY3B1cygpO1xcbkBAIC01NDgsMTQgKzU2OSwyOSBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4gXFx0LyogU05QX0lOSVQgcmVxdWlyZXMgTVNSX1ZNX0hTQVZFX1BBIHRvIGJlIGNsZWFyZWQgb24gYWxsIENQVXMuICovXFxuIFxcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcXG4gXFxuLVxcdHJldCA9IDA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsIFxcXCJjY3BcXFwiKTtcXG4gXFxuLXVubG9jazpcXG4tXFx0Y3B1c19yZWFkX3VubG9jaygpO1xcbitzdGF0aWMgdm9pZCBzbnBfY2xlYW51cF9ybXBvcHQodm9pZClcXG4re1xcbitcXHRpbnQgY3B1O1xcbiBcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4rXFx0aWYgKCFybXBvcHRfd3EpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7XFxuK1xcbitcXHRmb3JfZWFjaF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzaylcXG4rXFx0XFx0d3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgMCk7XFxuK1xcbitcXHRmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9jcHVtYXNrKTtcXG4rXFx0cm1wb3B0X3BhX3N0YXJ0ID0gcm1wb3B0X3BhX2VuZCA9IDA7XFxuK1xcdHJtcG9wdF93cSA9IE5VTEw7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXFxcImNjcFxcXCIpO1xcbiBcXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZClcXG4ge1xcbkBAIC01NjUsMTEgKzYwMSwyMDkgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZClcXG4gXFx0aWYgKHN5c2NmZyBcXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHQvKlxcbitcXHQgKiBDbGVhciB0aGUgUk1QT1BUX0JBU0UgTVNScyB3aGlsZSBDUFUgaG90cGx1ZyBpcyBzdGlsbCBkaXNhYmxlZCwgdGhlblxcbitcXHQgKiByZS1lbmFibGUgaG90cGx1ZyBub3cgdGhhdCB0aGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUC4gIEEgbGVnYWN5IFNOUFxcbitcXHQgKiBzaHV0ZG93biByZXR1cm5zIGFib3ZlIHdpdGggU25wRW4gc3RpbGwgc2V0IGFuZCBsZWF2ZXMgaG90cGx1ZyBkaXNhYmxlZC5cXG4rXFx0ICovXFxuK1xcdHNucF9jbGVhbnVwX3JtcG9wdCgpO1xcbitcXHRjcHVfaG90cGx1Z19lbmFibGUoKTtcXG4rXFxuIFxcdGNsZWFyX3JtcCgpO1xcbiBcXHRvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcXFwiY2NwXFxcIik7XFxuIFxcbitzdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJNUE9QVDogRjIgMEYgMDEgRkNcXG4rICogICBJbnB1dDogIFJBWCA9IHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzICgxR0IgYWxpZ25lZClcXG4rICogICAgICAgICAgIFJDWCA9IG9wZXJhdGlvbiB0eXBlXFxuKyAqICAgT3V0cHV0OiBDRiBzZXQgaWYgdGhlIHJhbmdlIHdhcyBvcHRpbWl6ZWRcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JtcG9wdCh1NjQgcGFfc3RhcnQsIHU2NCBvcF90eXBlKVxcbit7XFxuK1xcdGJvb2wgb3B0aW1pemVkO1xcbitcXG4rXFx0YXNtIHZvbGF0aWxlKFxcXCIuYnl0ZSAweGYyLCAweDBmLCAweDAxLCAweGZjXFxcIlxcbitcXHRcXHQgICAgIDogXFxcIj1AY2NjXFxcIiAob3B0aW1pemVkKVxcbitcXHRcXHQgICAgIDogXFxcImFcXFwiIChwYV9zdGFydCksIFxcXCJjXFxcIiAob3BfdHlwZSlcXG4rXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4rXFxuK1xcdHJldHVybiBvcHRpbWl6ZWQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXFxuK3tcXG4rXFx0dTY0IHBhX3N0YXJ0ID0gQUxJR05fRE9XTihwYSwgU1pfMUcpO1xcbitcXHR1NjQgb3BfdHlwZSA9IFJNUE9QVF9GVU5DX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUztcXG4rXFxuK1xcdF9fcm1wb3B0KHBhX3N0YXJ0LCBvcF90eXBlKTtcXG4rfVxcbitcXG4rLypcXG4rICogJ3ZhbCcgaXMgYSBzeXN0ZW0gcGh5c2ljYWwgYWRkcmVzcy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJtcG9wdF9zbXAodm9pZCAqdmFsKVxcbit7XFxuK1xcdHJtcG9wdCgodTY0KXZhbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJNUE9QVCBvcHRpbWl6YXRpb25zIHNraXAgUk1QIGNoZWNrcyBhdCAxR0IgZ3JhbnVsYXJpdHkgaWYgdGhpc1xcbisgKiByYW5nZSBvZiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJtcG9wdF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdGNwdW1hc2tfdmFyX3QgZm9sbG93ZXJfbWFzaztcXG4rXFx0cGh5c19hZGRyX3QgcGE7XFxuK1xcdGludCB0aGlzX2NwdTtcXG4rXFxuK1xcdHByX2luZm8oXFxcIkF0dGVtcHQgUk1QIG9wdGltaXphdGlvbnMgb24gcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBAMUdCIGFsaWdubWVudCBbMHglMDE2bGx4IC0gMHglMDE2bGx4XVxcXFxuXFxcIixcXG4rXFx0XFx0cm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kKTtcXG4rXFxuK1xcdGlmICghYWxsb2NfY3B1bWFza192YXIoXFx1MDAyNmZvbGxvd2VyX21hc2ssIEdGUF9LRVJORUwpKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIlJNUCBvcHRpbWl6YXRpb24gcGFzcyBza2lwcGVkOiBjcHVtYXNrIGFsbG9jYXRpb24gZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSTVBPUFQgc2NhbnMgdGhlIFJNUCB0YWJsZSwgc3RvcmVzIHRoZSByZXN1bHQgb2YgdGhlIHNjYW4gaW4gdGhlXFxuK1xcdCAqIHJlc2VydmVkIHByb2Nlc3NvciBtZW1vcnkuIFRoZSBSTVAgc2NhbiBpcyB0aGUgbW9zdCBleHBlbnNpdmVcXG4rXFx0ICogcGFydC4gSWYgYSBzZWNvbmQgUk1QT1BUIG9jY3VycywgaXQgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBzY2FuXFxuK1xcdCAqIGlmIHRoZXkgY2FuIHNlZSBhIGNhY2hlZCByZXN1bHQgaW4gdGhlIHJlc2VydmVkIHByb2Nlc3NvciBtZW1vcnkuXFxuK1xcdCAqXFxuK1xcdCAqIERvIFJNUE9QVCBvbiBvbmUgQ1BVIGFsb25lLiBUaGVuLCBmb2xsb3cgdGhhdCB1cCB3aXRoIFJNUE9QVFxcbitcXHQgKiBvbiBldmVyeSBvdGhlciBwcmltYXJ5IHRocmVhZC4gRm9sbG93ZXJzIGFyZSBcXFwiZGVzaWduZWQgdG9cXFwiXFxuK1xcdCAqIHNraXAgdGhlIHNjYW4gaWYgdGhleSBzZWUgdGhlIFxcXCJjYWNoZWRcXFwiIHNjYW4gcmVzdWx0cy5cXG4rXFx0ICpcXG4rXFx0ICogUGluIHRoZSB3b3JrZXIgdG8gdGhlIGN1cnJlbnQgQ1BVIGZvciB0aGUgbGVhZGVyIGxvb3Agc28gdGhhdFxcbitcXHQgKiB0aGlzX2NwdSByZW1haW5zIHZhbGlkIGFuZCB0aGUgUk1QT1BUIGluc3RydWN0aW9uIGV4ZWN1dGVzIG9uXFxuK1xcdCAqIHRoZSBjb3JyZWN0IENQVS4gIFVzZSBtaWdyYXRlX2Rpc2FibGUoKSByYXRoZXIgdGhhbiBnZXRfY3B1KCkgdG9cXG4rXFx0ICogcHJldmVudCBtaWdyYXRpb24gd2hpbGUgc3RpbGwgYWxsb3dpbmcgcHJlZW1wdGlvbi5cXG4rXFx0ICovXFxuK1xcdG1pZ3JhdGVfZGlzYWJsZSgpO1xcbitcXHR0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcXG4rXFxuK1xcdGNwdW1hc2tfYW5kbm90KGZvbGxvd2VyX21hc2ssIHJtcG9wdF9jcHVtYXNrLFxcbitcXHRcXHQgICAgICAgdG9wb2xvZ3lfc2libGluZ19jcHVtYXNrKHRoaXNfY3B1KSk7XFxuK1xcbitcXHRmb3IgKHBhID0gcm1wb3B0X3BhX3N0YXJ0OyBwYSBcXHUwMDNjIHJtcG9wdF9wYV9lbmQ7IHBhICs9IFNaXzFHKVxcbitcXHRcXHRybXBvcHQocGEpO1xcbitcXG4rXFx0bWlncmF0ZV9lbmFibGUoKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZvbGxvd2VyczogcnVuIFJNUE9QVCBvbiB0aGUgcmVtYWluaW5nIGNvcmVzLiAgY3B1c19yZWFkX2xvY2soKSBpc1xcbitcXHQgKiBpbnRlbnRpb25hbGx5IG5vdCBoZWxkIGhlcmU6IENQVSBob3RwbHVnIGlzIGRpc2FibGVkIGZvciB0aGUgZW50aXJlXFxuK1xcdCAqIHRpbWUgU05QIGlzIGFjdGl2ZSAoc2VlIHNucF9wcmVwYXJlKCkpLCBhbmQgdGhpcyB3b3JrIG9ubHkgcnVucyB3aGlsZVxcbitcXHQgKiBTTlAgaXMgYWN0aXZlLCBzbyB0aGUgZm9sbG93ZXIgc2V0IHN0YXlzIHZhbGlkIGFjcm9zcyB0aGUgd2hvbGUgc2Nhbi5cXG4rXFx0ICovXFxuK1xcdGZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhIFxcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgKz0gU1pfMUcpXFxuK1xcdFxcdG9uX2VhY2hfY3B1X21hc2soZm9sbG93ZXJfbWFzaywgcm1wb3B0X3NtcCwgKHZvaWQgKilwYSwgdHJ1ZSk7XFxuK1xcbitcXHRmcmVlX2NwdW1hc2tfdmFyKGZvbGxvd2VyX21hc2spO1xcbit9XFxuK1xcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZClcXG4re1xcbitcXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcXG4rXFxuK1xcdGlmICghcm1wb3B0X3dxKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtb2RfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssXFxuK1xcdFxcdFxcdCBtc2Vjc190b19qaWZmaWVzKFJNUE9QVF9XT1JLX1RJTUVPVVQpKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIFxcXCJrdm0tYW1kXFxcIik7XFxuK1xcbit2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcXG4re1xcbitcXHR1NjQgcm1wb3B0X2Jhc2U7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9uIHJlLWluaXRpYWxpemF0aW9uIGFmdGVyIGEgbGVnYWN5IFNOUCBzaHV0ZG93biAoU05QX1NIVVRET1dOX0VYXFxuK1xcdCAqIHdpdGggeDg2X3NucF9zaHV0ZG93bj0wKSwgc25wX3NodXRkb3duKCkgYW5kIHRodXMgc25wX2NsZWFudXBfcm1wb3B0KClcXG4rXFx0ICogYXJlIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yaywgY3B1bWFzayBhbmQgcGVyLUNQVVxcbitcXHQgKiBSTVBPUFRfQkFTRSBNU1JzIGFyZSBzdGlsbCBzZXQgdXAgYW5kIHZhbGlkIChTbnBFbiBzdGF5ZWQgc2V0IGFuZFxcbitcXHQgKiBDUFUgaG90cGx1ZyBzdGF5ZWQgZGlzYWJsZWQpLiAgUmF0aGVyIHRoYW4gcmUtZG9pbmcgdGhlIHNldHVwLCB3aGljaFxcbitcXHQgKiB3b3VsZCBsZWFrIHRoZSBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3NcXG4rXFx0ICogdG8gcmUtb3B0aW1pemUgYW55IG1lbW9yeSB0aGUgcHJldmlvdXMgU05QIHNlc3Npb24gZGUtb3B0aW1pemVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJtcG9wdF93cSkge1xcbitcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQ3JlYXRlIGFuIFJNUE9QVC1zcGVjaWZpYyB3b3JrcXVldWUgdG8gYXZvaWQgc2NoZWR1bGluZ1xcbitcXHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxcbitcXHQgKi9cXG4rXFx0cm1wb3B0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJybXBvcHRfd3FcXFwiLCBXUV9VTkJPVU5ELCAxKTtcXG4rXFx0aWYgKCFybXBvcHRfd3EpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIHJtcG9wdF93b3JrX2hhbmRsZXIpO1xcbitcXG4rXFx0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXFx1MDAyNnJtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgY3B1bWFza1xcXFxuXFxcIik7XFxuK1xcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7XFxuK1xcdFxcdHJtcG9wdF93cSA9IE5VTEw7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIFJNUE9QVF9CQVNFIE1TUiBpcyBwZXItY29yZSwgc28gb25seSBvbmUgdGhyZWFkIHBlciBjb3JlIG5lZWRzXFxuK1xcdCAqIHRvIHNldCB1cCB0aGUgUk1QT1BUX0JBU0UgTVNSLiAgQWxsIHByaW1hcnkgdGhyZWFkcyBhcmUgb25saW5lLFxcbitcXHQgKiBvdGhlcndpc2UgU05QIHdvdWxkIG5vdCBoYXZlIGJlZW4gZW5hYmxlZC5cXG4rXFx0ICovXFxuK1xcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxcbitcXHRcXHRpZiAodG9wb2xvZ3lfaXNfcHJpbWFyeV90aHJlYWQoY3B1KSlcXG4rXFx0XFx0XFx0Y3B1bWFza19zZXRfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spO1xcbitcXG4rXFx0cm1wb3B0X3BhX3N0YXJ0ID0gQUxJR05fRE9XTihQRk5fUEhZUyhtaW5fbG93X3BmbiksIFNaXzFHKTtcXG4rXFx0cm1wb3B0X2Jhc2UgPSBybXBvcHRfcGFfc3RhcnQgfCBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFBlci1DUFUgUk1QT1BUIHRhYmxlcyBjb3ZlciBhdCBtb3N0IDIgVEIuICBQcm9ncmFtIGVhY2ggY29yZSdzXFxuK1xcdCAqIFJNUE9QVF9CQVNFIHdpdGggdGhlIHN0YXJ0IG9mIFJBTSB0byBvcHRpbWl6ZSB1cCB0byAyIFRCLlxcbitcXHQgKi9cXG4rXFx0Zm9yX2VhY2hfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spXFxuK1xcdFxcdHdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIHJtcG9wdF9iYXNlKTtcXG4rXFxuK1xcdHJtcG9wdF9wYV9lbmQgPSBBTElHTihQRk5fUEhZUyhtYXhfcGZuKSwgU1pfMUcpO1xcbitcXG4rXFx0LyogTGltaXQgbWVtb3J5IHNjYW5uaW5nIHRvIDJUQiBvZiBSQU0gKi9cXG4rXFx0aWYgKChybXBvcHRfcGFfZW5kIC0gcm1wb3B0X3BhX3N0YXJ0KSBcXHUwMDNlIFNaXzJUKSB7XFxuK1xcdFxcdHByX2luZm8oXFxcIlJNUE9QVCBjb3ZlcmFnZSBsaW1pdGVkIHRvIDJUQjsgbWVtb3J5IGFib3ZlIDB4JWxseCBub3Qgb3B0aW1pemVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRybXBvcHRfcGFfc3RhcnQgKyBTWl8yVCk7XFxuK1xcdFxcdHJtcG9wdF9wYV9lbmQgPSBybXBvcHRfcGFfc3RhcnQgKyBTWl8yVDtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogT25jZSBhbGwgcGVyLUNQVSBSTVBPUFQgdGFibGVzIGhhdmUgYmVlbiBjb25maWd1cmVkLCBlbmFibGUgUk1QT1BUXFxuK1xcdCAqIG9wdGltaXphdGlvbnMgb24gYWxsIHBoeXNpY2FsIG1lbW9yeS5cXG4rXFx0ICovXFxuK1xcdHF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFxcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCAwKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsIFxcXCJjY3BcXFwiKTtcXG4rXFxuIC8qXFxuICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXNcXG4gICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlBcXG5AQCAtNTc3LDYgKzgxMSw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcXFwiY2NwXFxcIik7XFxuICAqL1xcbiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuIHtcXG4rXFx0dTY0IHZhbDtcXG4rXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gXFxuQEAgLTU4Niw2ICs4MjIsMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxcbiBcXHRpZiAoIXNldHVwX3JtcHRhYmxlKCkpXFxuIFxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXFxuK1xcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxcbitcXHQgKiBkaXNhYmxpbmcgQ1BVIGhvdHBsdWcsIHNvIGRpc2FibGUgaXQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xcbitcXHRpZiAodmFsIFxcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXFxuK1xcdFxcdGNwdV9ob3RwbHVnX2Rpc2FibGUoKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFNldHRpbmcgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMgdG8gJ3RydWUnIHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pY1xcbiBcXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXFxuQEAgLTY4NiwxMCArOTMxLDEyIEBAIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZClcXG4gXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpXFxuIFxcdFxcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XFxuIFxcbi1cXHRpZiAocm1wX2NmZyBcXHUwMDI2IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpXFxuK1xcdGlmIChybXBfY2ZnIFxcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRCkge1xcbiBcXHRcXHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcXG4tXFx0ZWxzZVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1JNUE9QVCk7XFxuIFxcdFxcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xcbmluZGV4IGNhNDczY2ExOThiODEuLmMwMDJhN2NhMjZhOGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xcbisrKyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcXG5AQCAtMTQ3Nyw2ICsxNDc3LDkgQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcXG4gXFx0fVxcbiBcXG4gXFx0c25wX2h2X2ZpeGVkX3BhZ2VzX3N0YXRlX3VwZGF0ZShzZXYsIEhWX0ZJWEVEKTtcXG4rXFxuK1xcdHNucF9zZXR1cF9ybXBvcHQoKTtcXG4rXFxuIFxcdHNldi1cXHUwMDNlc25wX2luaXRpYWxpemVkID0gdHJ1ZTtcXG4gXFx0ZGV2X2RiZyhzZXYtXFx1MDAzZWRldiwgXFxcIlNFVi1TTlAgZmlybXdhcmUgaW5pdGlhbGl6ZWQsIFNFVi1USU8gaXMgJXNcXFxcblxcXCIsXFxuIFxcdFxcdGRhdGEudGlvX2VuID8gXFxcImVuYWJsZWRcXFwiIDogXFxcImRpc2FibGVkXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE3OjExOjQ1LjkyODU5NDQwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3NTc0NDY3OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIGluc3RydWN0aW9uIHVzZWQgaW4gU0VWLVNOUCBob3N0IGVudmlyb25tZW50cy4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBBTUQgaGFyZHdhcmUgd2l0aCBTRVYtU05QIGFuZCBSTVBPUFQgc3VwcG9ydCBlbmFibGVkIGluIHRoZSBCSU9TLiBUaGVzZSBoYXJkd2FyZSBmZWF0dXJlcyBhcmUgbm90IHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvVENHIG9yIGF2YWlsYWJsZSBpbiB0eXBpY2FsIEdDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbmV3IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNTMzMzk5NTMwMTg4NmU3NGNhMGI2NDNiMjAzOWE1Mjk2NWQzZjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTc6MTE6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuaW5kZXggM2QwOTQwYTNiOWYzNy4uZGJjY2RlOWVlNWNkNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbkBAIC03Niw3ICs3Niw3IEBAXG4gI2RlZmluZSBYODZfRkVBVFVSRV9LOFx0XHRcdCggMyozMisgNCkgLyogT3B0ZXJvbiwgQXRobG9uNjQgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjVcdFx0KCAzKjMyKyA1KSAvKiBDUFUgYmFzZWQgb24gWmVuNSBtaWNyb2FyY2hpdGVjdHVyZSAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONlx0XHQoIDMqMzIrIDYpIC8qIENQVSBiYXNlZCBvbiBaZW42IG1pY3JvYXJjaGl0ZWN0dXJlICovXG4tLyogRnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMyozMisgNykgKi9cbisjZGVmaW5lIFg4Nl9GRUFUVVJFX1JNUE9QVFx0XHQoIDMqMzIrIDcpIC8qIFN1cHBvcnQgZm9yIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24gKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQ1x0KCAzKjMyKyA4KSAvKiBcImNvbnN0YW50X3RzY1wiIFRTQyB0aWNrcyBhdCBhIGNvbnN0YW50IHJhdGUgKi9cbiAvKiBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9VUFx0KCAzKjMyKyA5KSAqIFwidXBcIiBTTVAga2VybmVsIHJ1bm5pbmcgb24gVVAgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FSVFx0XHRcdCggMyozMisxMCkgLyogXCJhcnRcIiBBbHdheXMgcnVubmluZyB0aW1lciAoQVJUKSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbmluZGV4IDE4YzRiZTc1ZTkyNzEuLmQyY2IwYTdjZDBhMmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbkBAIC03NjEsNiArNzYxLDkgQEBcbiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUXHQwXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEXHRCSVRfVUxMKE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUKVxuICNkZWZpbmUgTVNSX0FNRDY0X1JNUF9TRUdNRU5UX1NISUZUKHgpXHQoKCh4KSBcdTAwMjYgR0VOTUFTS19VTEwoMTMsIDgpKSBcdTAwM2VcdTAwM2UgOClcbisjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfQkFTRVx0XHQweGMwMDEwMTM5XG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVRcdDBcbisjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFXHRcdEJJVF9VTEwoTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUKVxuIFxuICNkZWZpbmUgTVNSX1NWU01fQ0FBXHRcdFx0MHhjMDAxZjAwMFxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbmluZGV4IDU5NGNmYTE5Y2JkNGIuLjA5YjFjNWQzMzc5MDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbkBAIC02NjIsNiArNjYyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcylcbiBcdF9fc25wX2xlYWtfcGFnZXMocGZuLCBwYWdlcywgdHJ1ZSk7XG4gfVxuIGludCBzbnBfcHJlcGFyZSh2b2lkKTtcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCk7XG4rdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpO1xuIHZvaWQgc25wX3NodXRkb3duKHZvaWQpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG5AQCAtNjgwLDYgKzY4Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgbnBhZ2VzKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9maXh1cF9lODIwX3RhYmxlcyh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHNucF9wcmVwYXJlKHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9zaHV0ZG93bih2b2lkKSB7fVxuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG5pbmRleCA5MzcxMjljZTZhOTY0Li4wMjFjMGJmMjJkZTIwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuQEAgLTY3LDYgKzY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0ge1xuIFx0eyBYODZfRkVBVFVSRV9QRVJGTU9OX1YyLFx0XHRDUFVJRF9FQVgsICAwLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIsXHRcdENQVUlEX0VBWCwgIDEsIDB4ODAwMDAwMjIsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFLFx0Q1BVSURfRUFYLCAgMiwgMHg4MDAwMDAyMiwgMCB9LFxuK1x0eyBYODZfRkVBVFVSRV9STVBPUFQsXHRcdFx0Q1BVSURfRURYLCAgMCwgMHg4MDAwMDAyNSwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfSFRSX0NPUkVTLFx0XHRDUFVJRF9FQVgsIDMwLCAweDgwMDAwMDI2LCAwIH0sXG4gXHR7IDAsIDAsIDAsIDAsIDAgfVxuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDQyNzIyOTM0Nzg3NjYuLmM1NzQ4NDliMTU4NzggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtMjk5Miw2ICsyOTkyLDE2IEBAIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHQgKi9cbiBcdFx0aWYgKHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pKVxuIFx0XHRcdHJldHVybjtcbitcbitcdFx0LypcbitcdFx0ICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmdcbitcdFx0ICogZ3Vlc3RzLiAgVGhlIHNjYW4gaXMgZGVmZXJyZWQsIHNvIGl0IG5vcm1hbGx5IHJ1bnMgYWZ0ZXJcbitcdFx0ICogc2V2X2dtZW1faW52YWxpZGF0ZSgpIGhhcyBjb252ZXJ0ZWQgdGhpcyBndWVzdCdzIHBhZ2VzIGJhY2sgdG9cbitcdFx0ICogc2hhcmVkLCBhbmQgcGlja3MgdGhlbSB1cCB0aGVuLiAgQSB2ZXJ5IGxhcmdlIGd1ZXN0IHdob3NlXG4rXHRcdCAqIGNvbnZlcnNpb24gaGFzIG5vdCBmaW5pc2hlZCBieSB0aGVuIGlzIHBpY2tlZCB1cCBieSBhIGxhdGVyXG4rXHRcdCAqIHRlYXJkb3duJ3Mgc2Nhbi5cbitcdFx0ICovXG4rXHRcdHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHNldl91bmJpbmRfYXNpZChrdm0sIHNldi1cdTAwM2VoYW5kbGUpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbmluZGV4IGNmZjI4NWQ4YWQ4ZTMuLjI5MWEzNjAyOTFlYjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbkBAIC0xOSw2ICsxOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2FtZC1pb21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm9zcGVjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9zZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTEyNCw2ICsxMjUsMjAgQEAgc3RhdGljIHZvaWQgKnJtcF9ib29ra2VlcGluZyBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTtcbiBcbitzdGF0aWMgY3B1bWFza192YXJfdCBybXBvcHRfY3B1bWFzaztcbitzdGF0aWMgcGh5c19hZGRyX3Qgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kO1xuK1xuK2VudW0gcm1wb3B0X2Z1bmN0aW9uIHtcbitcdFJNUE9QVF9GVU5DX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUyxcbitcdFJNUE9QVF9GVU5DX1JFUE9SVF9TVEFUVVNcbit9O1xuK1xuKyNkZWZpbmUgUk1QT1BUX1dPUktfVElNRU9VVFx0MTAwMDBcbitcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcbitzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrO1xuK3N0YXRpYyBERUZJTkVfTVVURVgocm1wb3B0X3dxX211dGV4KTtcbitcbiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhzbnBfbGVha2VkX3BhZ2VzX2xpc3RfbG9jayk7XG4gXG5AQCAtNTEzLDcgKzUyOCw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcbiBcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcbiB7XG4tXHRpbnQgcmV0O1xuIFx0dTY0IHZhbDtcbiBcbiBcdC8qXG5AQCAtNTI2LDE0ICs1NDAsMjEgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXG4gXHRjbGVhcl9ybXAoKTtcbiBcbi1cdGNwdXNfcmVhZF9sb2NrKCk7XG4rXHQvKlxuK1x0ICogRGlzYWJsZSBDUFUgaG90cGx1ZyBiZWZvcmUgZW5hYmxpbmcgU05QOiBubyBDUFUgbWF5IGNvbWUgb25saW5lXG4rXHQgKiB3aXRob3V0IFNucEVuIHdoaWxlIFNOUCBpcyBhY3RpdmUsIGFuZCBub25lIG1heSBnbyBvZmZsaW5lIGR1cmluZ1xuK1x0ICogZW5hYmxlLiAgVGhpcyBrZWVwcyBjcHVfb25saW5lX21hc2sgc3RhYmxlIGZvciB0aGUgY2hlY2sgYW5kIHRoZVxuK1x0ICogb25fZWFjaF9jcHUoKSBjYWxscyBiZWxvdywgc28gY3B1c19yZWFkX2xvY2soKSBpcyBub3QgbmVlZGVkLiAgSXQgaXNcbitcdCAqIHJlLWVuYWJsZWQgaW4gc25wX3NodXRkb3duKCkgb25jZSB0aGUgZmlybXdhcmUgZGlzYWJsZXMgU05QLlxuK1x0ICovXG4rXHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkge1xuLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4gXHRcdHByX3dhcm4oXCJTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXHUwMDNjLVx1MDAzZSAlKnBibCBwcmVzZW50IG1hc2tzKS5cXG5cIixcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X29ubGluZV9tYXNrKSxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X3ByZXNlbnRfbWFzaykpO1xuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuIFx0d2JpbnZkX29uX2FsbF9jcHVzKCk7XG5AQCAtNTQ4LDE0ICs1NjksMjkgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXHQvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi9cbiBcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcbiBcbi1cdHJldCA9IDA7XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCJjY3BcIik7XG4gXG4tdW5sb2NrOlxuLVx0Y3B1c19yZWFkX3VubG9jaygpO1xuK3N0YXRpYyB2b2lkIHNucF9jbGVhbnVwX3JtcG9wdCh2b2lkKVxuK3tcbitcdGludCBjcHU7XG4gXG4tXHRyZXR1cm4gcmV0O1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4rXG4rXHRpZiAoIXJtcG9wdF93cSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmspO1xuK1x0ZGVzdHJveV93b3JrcXVldWUocm1wb3B0X3dxKTtcbitcbitcdGZvcl9lYWNoX2NwdShjcHUsIHJtcG9wdF9jcHVtYXNrKVxuK1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCAwKTtcbitcbitcdGZyZWVfY3B1bWFza192YXIocm1wb3B0X2NwdW1hc2spO1xuK1x0cm1wb3B0X3BhX3N0YXJ0ID0gcm1wb3B0X3BhX2VuZCA9IDA7XG4rXHRybXBvcHRfd3EgPSBOVUxMO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcImNjcFwiKTtcbiBcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxuIHtcbkBAIC01NjUsMTEgKzYwMSwyMDkgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZClcbiBcdGlmIChzeXNjZmcgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuIFx0XHRyZXR1cm47XG4gXG4rXHQvKlxuK1x0ICogQ2xlYXIgdGhlIFJNUE9QVF9CQVNFIE1TUnMgd2hpbGUgQ1BVIGhvdHBsdWcgaXMgc3RpbGwgZGlzYWJsZWQsIHRoZW5cbitcdCAqIHJlLWVuYWJsZSBob3RwbHVnIG5vdyB0aGF0IHRoZSBmaXJtd2FyZSBoYXMgZGlzYWJsZWQgU05QLiAgQSBsZWdhY3kgU05QXG4rXHQgKiBzaHV0ZG93biByZXR1cm5zIGFib3ZlIHdpdGggU25wRW4gc3RpbGwgc2V0IGFuZCBsZWF2ZXMgaG90cGx1ZyBkaXNhYmxlZC5cbitcdCAqL1xuK1x0c25wX2NsZWFudXBfcm1wb3B0KCk7XG4rXHRjcHVfaG90cGx1Z19lbmFibGUoKTtcbitcbiBcdGNsZWFyX3JtcCgpO1xuIFx0b25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFwiY2NwXCIpO1xuIFxuK3N0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXG4re1xuK1x0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuK31cbitcbisvKlxuKyAqIFJNUE9QVDogRjIgMEYgMDEgRkNcbisgKiAgIElucHV0OiAgUkFYID0gc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3MgKDFHQiBhbGlnbmVkKVxuKyAqICAgICAgICAgICBSQ1ggPSBvcGVyYXRpb24gdHlwZVxuKyAqICAgT3V0cHV0OiBDRiBzZXQgaWYgdGhlIHJhbmdlIHdhcyBvcHRpbWl6ZWRcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgX19ybXBvcHQodTY0IHBhX3N0YXJ0LCB1NjQgb3BfdHlwZSlcbit7XG4rXHRib29sIG9wdGltaXplZDtcbitcbitcdGFzbSB2b2xhdGlsZShcIi5ieXRlIDB4ZjIsIDB4MGYsIDB4MDEsIDB4ZmNcIlxuK1x0XHQgICAgIDogXCI9QGNjY1wiIChvcHRpbWl6ZWQpXG4rXHRcdCAgICAgOiBcImFcIiAocGFfc3RhcnQpLCBcImNcIiAob3BfdHlwZSlcbitcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIik7XG4rXG4rXHRyZXR1cm4gb3B0aW1pemVkO1xuK31cbitcbitzdGF0aWMgdm9pZCBybXBvcHQodTY0IHBhKVxuK3tcbitcdHU2NCBwYV9zdGFydCA9IEFMSUdOX0RPV04ocGEsIFNaXzFHKTtcbitcdHU2NCBvcF90eXBlID0gUk1QT1BUX0ZVTkNfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTO1xuK1xuK1x0X19ybXBvcHQocGFfc3RhcnQsIG9wX3R5cGUpO1xuK31cbitcbisvKlxuKyAqICd2YWwnIGlzIGEgc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3MuXG4rICovXG4rc3RhdGljIHZvaWQgcm1wb3B0X3NtcCh2b2lkICp2YWwpXG4re1xuK1x0cm1wb3B0KCh1NjQpdmFsKTtcbit9XG4rXG4rLypcbisgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXNcbisgKiByYW5nZSBvZiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS5cbisgKi9cbitzdGF0aWMgdm9pZCBybXBvcHRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRjcHVtYXNrX3Zhcl90IGZvbGxvd2VyX21hc2s7XG4rXHRwaHlzX2FkZHJfdCBwYTtcbitcdGludCB0aGlzX2NwdTtcbitcbitcdHByX2luZm8oXCJBdHRlbXB0IFJNUCBvcHRpbWl6YXRpb25zIG9uIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgQDFHQiBhbGlnbm1lbnQgWzB4JTAxNmxseCAtIDB4JTAxNmxseF1cXG5cIixcbitcdFx0cm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kKTtcbitcbitcdGlmICghYWxsb2NfY3B1bWFza192YXIoXHUwMDI2Zm9sbG93ZXJfbWFzaywgR0ZQX0tFUk5FTCkpIHtcbitcdFx0cHJfd2FybihcIlJNUCBvcHRpbWl6YXRpb24gcGFzcyBza2lwcGVkOiBjcHVtYXNrIGFsbG9jYXRpb24gZmFpbGVkXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogUk1QT1BUIHNjYW5zIHRoZSBSTVAgdGFibGUsIHN0b3JlcyB0aGUgcmVzdWx0IG9mIHRoZSBzY2FuIGluIHRoZVxuK1x0ICogcmVzZXJ2ZWQgcHJvY2Vzc29yIG1lbW9yeS4gVGhlIFJNUCBzY2FuIGlzIHRoZSBtb3N0IGV4cGVuc2l2ZVxuK1x0ICogcGFydC4gSWYgYSBzZWNvbmQgUk1QT1BUIG9jY3VycywgaXQgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBzY2FuXG4rXHQgKiBpZiB0aGV5IGNhbiBzZWUgYSBjYWNoZWQgcmVzdWx0IGluIHRoZSByZXNlcnZlZCBwcm9jZXNzb3IgbWVtb3J5LlxuK1x0ICpcbitcdCAqIERvIFJNUE9QVCBvbiBvbmUgQ1BVIGFsb25lLiBUaGVuLCBmb2xsb3cgdGhhdCB1cCB3aXRoIFJNUE9QVFxuK1x0ICogb24gZXZlcnkgb3RoZXIgcHJpbWFyeSB0aHJlYWQuIEZvbGxvd2VycyBhcmUgXCJkZXNpZ25lZCB0b1wiXG4rXHQgKiBza2lwIHRoZSBzY2FuIGlmIHRoZXkgc2VlIHRoZSBcImNhY2hlZFwiIHNjYW4gcmVzdWx0cy5cbitcdCAqXG4rXHQgKiBQaW4gdGhlIHdvcmtlciB0byB0aGUgY3VycmVudCBDUFUgZm9yIHRoZSBsZWFkZXIgbG9vcCBzbyB0aGF0XG4rXHQgKiB0aGlzX2NwdSByZW1haW5zIHZhbGlkIGFuZCB0aGUgUk1QT1BUIGluc3RydWN0aW9uIGV4ZWN1dGVzIG9uXG4rXHQgKiB0aGUgY29ycmVjdCBDUFUuICBVc2UgbWlncmF0ZV9kaXNhYmxlKCkgcmF0aGVyIHRoYW4gZ2V0X2NwdSgpIHRvXG4rXHQgKiBwcmV2ZW50IG1pZ3JhdGlvbiB3aGlsZSBzdGlsbCBhbGxvd2luZyBwcmVlbXB0aW9uLlxuK1x0ICovXG4rXHRtaWdyYXRlX2Rpc2FibGUoKTtcbitcdHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xuK1xuK1x0Y3B1bWFza19hbmRub3QoZm9sbG93ZXJfbWFzaywgcm1wb3B0X2NwdW1hc2ssXG4rXHRcdCAgICAgICB0b3BvbG9neV9zaWJsaW5nX2NwdW1hc2sodGhpc19jcHUpKTtcbitcbitcdGZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhIFx1MDAzYyBybXBvcHRfcGFfZW5kOyBwYSArPSBTWl8xRylcbitcdFx0cm1wb3B0KHBhKTtcbitcbitcdG1pZ3JhdGVfZW5hYmxlKCk7XG4rXG4rXHQvKlxuK1x0ICogRm9sbG93ZXJzOiBydW4gUk1QT1BUIG9uIHRoZSByZW1haW5pbmcgY29yZXMuICBjcHVzX3JlYWRfbG9jaygpIGlzXG4rXHQgKiBpbnRlbnRpb25hbGx5IG5vdCBoZWxkIGhlcmU6IENQVSBob3RwbHVnIGlzIGRpc2FibGVkIGZvciB0aGUgZW50aXJlXG4rXHQgKiB0aW1lIFNOUCBpcyBhY3RpdmUgKHNlZSBzbnBfcHJlcGFyZSgpKSwgYW5kIHRoaXMgd29yayBvbmx5IHJ1bnMgd2hpbGVcbitcdCAqIFNOUCBpcyBhY3RpdmUsIHNvIHRoZSBmb2xsb3dlciBzZXQgc3RheXMgdmFsaWQgYWNyb3NzIHRoZSB3aG9sZSBzY2FuLlxuK1x0ICovXG4rXHRmb3IgKHBhID0gcm1wb3B0X3BhX3N0YXJ0OyBwYSBcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgKz0gU1pfMUcpXG4rXHRcdG9uX2VhY2hfY3B1X21hc2soZm9sbG93ZXJfbWFzaywgcm1wb3B0X3NtcCwgKHZvaWQgKilwYSwgdHJ1ZSk7XG4rXG4rXHRmcmVlX2NwdW1hc2tfdmFyKGZvbGxvd2VyX21hc2spO1xuK31cbitcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZClcbit7XG4rXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXG4rXHRcdHJldHVybjtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xuK1xuK1x0aWYgKCFybXBvcHRfd3EpXG4rXHRcdHJldHVybjtcbitcbitcdG1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLFxuK1x0XHRcdCBtc2Vjc190b19qaWZmaWVzKFJNUE9QVF9XT1JLX1RJTUVPVVQpKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBcImt2bS1hbWRcIik7XG4rXG4rdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpXG4re1xuK1x0dTY0IHJtcG9wdF9iYXNlO1xuK1x0aW50IGNwdTtcbitcbitcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4rXG4rXHQvKlxuK1x0ICogT24gcmUtaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBsZWdhY3kgU05QIHNodXRkb3duIChTTlBfU0hVVERPV05fRVhcbitcdCAqIHdpdGggeDg2X3NucF9zaHV0ZG93bj0wKSwgc25wX3NodXRkb3duKCkgYW5kIHRodXMgc25wX2NsZWFudXBfcm1wb3B0KClcbitcdCAqIGFyZSBza2lwcGVkLCBzbyB0aGUgd29ya3F1ZXVlLCBkZWxheWVkIHdvcmssIGNwdW1hc2sgYW5kIHBlci1DUFVcbitcdCAqIFJNUE9QVF9CQVNFIE1TUnMgYXJlIHN0aWxsIHNldCB1cCBhbmQgdmFsaWQgKFNucEVuIHN0YXllZCBzZXQgYW5kXG4rXHQgKiBDUFUgaG90cGx1ZyBzdGF5ZWQgZGlzYWJsZWQpLiAgUmF0aGVyIHRoYW4gcmUtZG9pbmcgdGhlIHNldHVwLCB3aGljaFxuK1x0ICogd291bGQgbGVhayB0aGUgZXhpc3Rpbmcgc3RhdGUsIGp1c3QgcmUtcXVldWUgdGhlIG9wdGltaXphdGlvbiBwYXNzXG4rXHQgKiB0byByZS1vcHRpbWl6ZSBhbnkgbWVtb3J5IHRoZSBwcmV2aW91cyBTTlAgc2Vzc2lvbiBkZS1vcHRpbWl6ZWQuXG4rXHQgKi9cbitcdGlmIChybXBvcHRfd3EpIHtcbitcdFx0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBDcmVhdGUgYW4gUk1QT1BULXNwZWNpZmljIHdvcmtxdWV1ZSB0byBhdm9pZCBzY2hlZHVsaW5nXG4rXHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxuK1x0ICovXG4rXHRybXBvcHRfd3EgPSBhbGxvY193b3JrcXVldWUoXCJybXBvcHRfd3FcIiwgV1FfVU5CT1VORCwgMSk7XG4rXHRpZiAoIXJtcG9wdF93cSkge1xuK1x0XHRwcl9lcnIoXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgcm1wb3B0X3dvcmtfaGFuZGxlcik7XG4rXG4rXHRpZiAoIXphbGxvY19jcHVtYXNrX3ZhcihcdTAwMjZybXBvcHRfY3B1bWFzaywgR0ZQX0tFUk5FTCkpIHtcbitcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCBjcHVtYXNrXFxuXCIpO1xuK1x0XHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xuK1x0XHRybXBvcHRfd3EgPSBOVUxMO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogVGhlIFJNUE9QVF9CQVNFIE1TUiBpcyBwZXItY29yZSwgc28gb25seSBvbmUgdGhyZWFkIHBlciBjb3JlIG5lZWRzXG4rXHQgKiB0byBzZXQgdXAgdGhlIFJNUE9QVF9CQVNFIE1TUi4gIEFsbCBwcmltYXJ5IHRocmVhZHMgYXJlIG9ubGluZSxcbitcdCAqIG90aGVyd2lzZSBTTlAgd291bGQgbm90IGhhdmUgYmVlbiBlbmFibGVkLlxuK1x0ICovXG4rXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcbitcdFx0aWYgKHRvcG9sb2d5X2lzX3ByaW1hcnlfdGhyZWFkKGNwdSkpXG4rXHRcdFx0Y3B1bWFza19zZXRfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spO1xuK1xuK1x0cm1wb3B0X3BhX3N0YXJ0ID0gQUxJR05fRE9XTihQRk5fUEhZUyhtaW5fbG93X3BmbiksIFNaXzFHKTtcbitcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XG4rXG4rXHQvKlxuK1x0ICogUGVyLUNQVSBSTVBPUFQgdGFibGVzIGNvdmVyIGF0IG1vc3QgMiBUQi4gIFByb2dyYW0gZWFjaCBjb3JlJ3NcbitcdCAqIFJNUE9QVF9CQVNFIHdpdGggdGhlIHN0YXJ0IG9mIFJBTSB0byBvcHRpbWl6ZSB1cCB0byAyIFRCLlxuK1x0ICovXG4rXHRmb3JfZWFjaF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzaylcbitcdFx0d3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgcm1wb3B0X2Jhc2UpO1xuK1xuK1x0cm1wb3B0X3BhX2VuZCA9IEFMSUdOKFBGTl9QSFlTKG1heF9wZm4pLCBTWl8xRyk7XG4rXG4rXHQvKiBMaW1pdCBtZW1vcnkgc2Nhbm5pbmcgdG8gMlRCIG9mIFJBTSAqL1xuK1x0aWYgKChybXBvcHRfcGFfZW5kIC0gcm1wb3B0X3BhX3N0YXJ0KSBcdTAwM2UgU1pfMlQpIHtcbitcdFx0cHJfaW5mbyhcIlJNUE9QVCBjb3ZlcmFnZSBsaW1pdGVkIHRvIDJUQjsgbWVtb3J5IGFib3ZlIDB4JWxseCBub3Qgb3B0aW1pemVkXFxuXCIsXG4rXHRcdFx0cm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQpO1xuK1x0XHRybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogT25jZSBhbGwgcGVyLUNQVSBSTVBPUFQgdGFibGVzIGhhdmUgYmVlbiBjb25maWd1cmVkLCBlbmFibGUgUk1QT1BUXG4rXHQgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuXG4rXHQgKi9cbitcdHF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIDApO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsIFwiY2NwXCIpO1xuK1xuIC8qXG4gICogRG8gdGhlIG5lY2Vzc2FyeSBwcmVwYXJhdGlvbnMgd2hpY2ggYXJlIHZlcmlmaWVkIGJ5IHRoZSBmaXJtd2FyZSBhc1xuICAqIGRlc2NyaWJlZCBpbiB0aGUgU05QX0lOSVRfRVggZmlybXdhcmUgY29tbWFuZCBkZXNjcmlwdGlvbiBpbiB0aGUgU05QXG5AQCAtNTc3LDYgKzgxMSw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcImNjcFwiKTtcbiAgKi9cbiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG4ge1xuK1x0dTY0IHZhbDtcbitcbiBcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbkBAIC01ODYsNiArODIyLDE1IEBAIGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbiBcdGlmICghc2V0dXBfcm1wdGFibGUoKSlcbiBcdFx0cmV0dXJuIC1FTk9TWVM7XG4gXG4rXHQvKlxuK1x0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXG4rXHQgKiBTbnBFbiBzZXQgYWNyb3NzIHNodXRkb3duKSwgaW4gd2hpY2ggY2FzZSBzbnBfcHJlcGFyZSgpIGJhaWxzIHdpdGhvdXRcbitcdCAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLlxuK1x0ICovXG4rXHRyZG1zcnEoTVNSX0FNRDY0X1NZU0NGRywgdmFsKTtcbitcdGlmICh2YWwgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuK1x0XHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4rXG4gXHQvKlxuIFx0ICogU2V0dGluZyBjcmFzaF9rZXhlY19wb3N0X25vdGlmaWVycyB0byAndHJ1ZScgdG8gZW5zdXJlIHRoYXQgU05QIHBhbmljXG4gXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXG5AQCAtNjg2LDEwICs5MzEsMTIgQEAgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKVxuIFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpXG4gXHRcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XG4gXG4tXHRpZiAocm1wX2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcbitcdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKSB7XG4gXHRcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xuLVx0ZWxzZVxuK1x0fSBlbHNlIHtcbitcdFx0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpO1xuIFx0XHRyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7XG4rXHR9XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbmluZGV4IGNhNDczY2ExOThiODEuLmMwMDJhN2NhMjZhOGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG4rKysgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG5AQCAtMTQ3Nyw2ICsxNDc3LDkgQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcbiBcdH1cbiBcbiBcdHNucF9odl9maXhlZF9wYWdlc19zdGF0ZV91cGRhdGUoc2V2LCBIVl9GSVhFRCk7XG4rXG4rXHRzbnBfc2V0dXBfcm1wb3B0KCk7XG4rXG4gXHRzZXYtXHUwMDNlc25wX2luaXRpYWxpemVkID0gdHJ1ZTtcbiBcdGRldl9kYmcoc2V2LVx1MDAzZWRldiwgXCJTRVYtU05QIGZpcm13YXJlIGluaXRpYWxpemVkLCBTRVYtVElPIGlzICVzXFxuXCIsXG4gXHRcdGRhdGEudGlvX2VuID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTc6MTE6NDUuOTI4NTk1NDk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc1NzQ0NDQxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50OiBBTUQgUk1QT1BUIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24sIHNwZWNpZmljYWxseSB0aWVkIHRvIFNFVi1TTlAuIEl0IHRvdWNoZXMgZmlsZXMgaW4gYGFyY2gveDg2YCwgYGRyaXZlcnMvY3J5cHRvYCBhbmQgaXQncyBhbGwgYWJvdXQgbWVtb3J5IGVuY3J5cHRpb24gYW5kIHNlY3VyZSBuZXN0ZWQgcGFnaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmcgaW4gb3VyIHR5cGljYWwgZW52aXJvbm1lbnQ/XCJcblxuVGhpcyBkZXBlbmRzIG9uIFNFVi1TTlAsIGFuZCB3ZSBhbGwga25vdyB0aGF0J3MgQU1ELXNwZWNpZmljIGhhcmR3YXJlLCBuYW1lbHkgRVBZQyBwcm9jZXNzb3JzIHdpdGggdGhlIGZlYXR1cmUgZW5hYmxlZC4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBvdXIgc2V0dXAg4oCTIEdDRSBpbnN0YW5jZXMsIHN0YW5kYXJkIFFFTVUuIENhbiB3ZSBldmVuICpyZWFjaCogdGhpcyBjb2RlPyAgV2Uga25vdyBRRU1VICpjYW4qIGVtdWxhdGUgKnNvbWUqIFNFViBmZWF0dXJlcywgYnV0IGZvciBTRVYtU05QICpob3N0KiBmZWF0dXJlcywgaXQncyBwcmV0dHkgbXVjaCBhIGdpdmVuIHlvdSBuZWVkIGEgcGh5c2ljYWwgbWFjaGluZSB3aXRoIFNOUCBlbmFibGVkLCBvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aCBTTlAuXG5cblRoZSBjb2RlIGl0c2VsZiBoYXMgY2hlY2tzLCB0aGFua2Z1bGx5LiBUaGVyZSdzIGEgYHJtcG9wdF9jYXBhYmxlKClgIGZ1bmN0aW9uIHdoaWNoLCBpbiB0dXJuLCBjaGVja3MgZm9yIGJvdGggYFg4Nl9GRUFUVVJFX1JNUE9QVGAgYW5kIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAuIElmIGVpdGhlciBvZiB0aG9zZSBhcmUgZmFsc2UsIHRoZSB3aG9sZSB0aGluZyBqdXN0IGJhaWxzIGVhcmx5LiAgTXkgaHVuY2ggaXMsIHRob3NlIGNoZWNrcyBhcmUgZ29pbmcgdG8gZmFpbCBpbiBvdXIgc3RhbmRhcmQgU3l6a2FsbGVyIGVudmlyb25tZW50cy4gIEdDRSBpbnN0YW5jZXM/ICBOb3BlLCB0aGV5IGRvbid0IGV4cG9zZSBTRVYtU05QIGhvc3QgY2FwYWJpbGl0aWVzIHRvIHRoZSBndWVzdCwgZXZlbiBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAqaXMqIEFNRC4gSXQgd2lsbCBiZSB1bmxpa2VseSwgZXZlbiBpZiB0aGV5IGFyZSBBTUQsIHRvIHN1cHBvcnQgbmVzdGVkIFNFVi1TTlAuXG5cbkFscmlnaHQsIFN5emthbGxlciBkb2VzIHRlc3QgS1ZNLCBidXQgZG9lcyBpdCB0ZXN0IFNFVi1TTlA/IEkgYmVsaWV2ZSBpdCBkb2VzLCBidXQgdGVzdGluZyB0aGUgaG9zdC1zaWRlIFNFVi1TTlAgZnVuY3Rpb25hbGl0eSBhYnNvbHV0ZWx5IHJlcXVpcmVzIHRoZSBob3N0IHRvICpoYXZlKiBTRVYtU05QLiAgU28sIGhlcmUgaXMgdGhlIGxpdG11cyB0ZXN0OiBUaGUgZ3VpZGFuY2Ugc2F5cyBpZiB0aGUgY29kZSBwYXRoIGlzIGltcG9zc2libGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24sIHRoZW4gaXTigJlzIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIFFFTVUgZG9lc24ndCAqZW11bGF0ZSogU0VWLVNOUCBhdCB0aGUgaG9zdCBsZXZlbC4gSXQgcmVsaWVzIG9uIEtWTSBhbmQgdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgdGhhdCBmdW5jdGlvbmFsaXR5LiAgSXQgZG9lc24ndCBzb2Z0d2FyZS1lbXVsYXRlIHRoZSBtZW1vcnkgZW5jcnlwdGlvbiBhbmQgQ1BVIG1pY3JvY29kZSBuZWVkZWQgZm9yIHRoZSBSTVAgdGFibGUgYW5kIGBSTVBPUFRgIGluc3RydWN0aW9uLiBUaGUgVENHIGVtdWxhdGlvbiBpc27igJl0IGV2ZW4gaW4gdGhlIGdhbWUgaGVyZSDigJMgVENHIGRvZXNu4oCZdCBlbXVsYXRlIG1lbW9yeSBlbmNyeXB0aW9uLlxuXG5TbywgaW4gc3RhbmRhcmQgUUVNVS9HQ0UsIGBYODZfRkVBVFVSRV9STVBPUFRgIGFuZCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGFyZSBnb2luZyB0byBiZSBmYWxzZS4gVGhlIGNvZGUgaXMgdW5yZWFjaGFibGUuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBob3cgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBkZXRlcm1pbmVkOiBpdCBjaGVja3MgYFg4Nl9GRUFUVVJFX1NFVl9TTlBgLCB3aGljaCBvbmx5IHNob3dzIHVwIG9uIEFNRCBDUFVzIHdpdGggU05QIGVuYWJsZWQgaW4gdGhlIEJJT1MuICBTeXprYWxsZXIgcnVucyBpbiBRRU1VIFZNcy4gVW5sZXNzIHdlJ3JlIHJ1bm5pbmcgaXQgb24gYSAqc3BlY2lmaWMqIGJhcmUtbWV0YWwgQU1EIG1hY2hpbmUgd2l0aCBTTlAgZW5hYmxlZCwgdGhhdCBmZWF0dXJlIGJpdCB3b27igJl0IGJlIHNldC4gIEl0J3MganVzdCBub3QgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbioqV29ydGhGdXp6aW5nPWZhbHNlLioqXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsaXR5IHRoYXQgZGVwZW5kcyBvbiBTRVYtU05QIGhvc3QgZW52aXJvbm1lbnRzLCByZXF1aXJpbmcgc3BlY2lmaWMgQU1EIGhhcmR3YXJlIGFuZCBCSU9TIGNvbmZpZ3VyYXRpb24uIFRoZXNlIGZlYXR1cmVzIGFyZW4ndCBlbXVsYXRlZCBieSBvdXIgc3RhbmRhcmQgUUVNVSBvciBhdmFpbGFibGUgaW4gdHlwaWNhbCBHQ0UgVk1zLCBtYWtpbmcgdGhlIG5ldyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlLiBJIGNhbiBzZWUgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW1gLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgc2V2X3ZtX2Rlc3Ryb3lgIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgYW5kIEkgc2VlIGBzbnBfc2V0dXBfcm1wb3B0YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYF9fc2V2X3NucF9pbml0X2xvY2tlZGAgaW4gYGRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNgLCBhbmQgYm90aCBmdW5jdGlvbnMgc3RhcnQgd2l0aCBgaWYgKCFybXBvcHRfY2FwYWJsZSgpKSByZXR1cm47YC4gVGhlcmVmb3JlLCBnaXZlbiBhbGwgb2YgdGhlIGFib3ZlLCBJ4oCZbSBnb29kIHdpdGggdGhhdCBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTgsIk91dHB1dFRva2VucyI6MTA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE3OjEyOjAzLjUwMzA0MjU5OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiB1c2VkIGluIFNFVi1TTlAgaG9zdCBlbnZpcm9ubWVudHMuIFRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgQU1EIGhhcmR3YXJlIHdpdGggU0VWLVNOUCBhbmQgUk1QT1BUIHN1cHBvcnQgZW5hYmxlZCBpbiB0aGUgQklPUy4gVGhlc2UgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBzb2Z0d2FyZS1lbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL1RDRyBvciBhdmFpbGFibGUgaW4gdHlwaWNhbCBHQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG5ldyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiB1c2VkIGluIFNFVi1TTlAgaG9zdCBlbnZpcm9ubWVudHMuIFRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgQU1EIGhhcmR3YXJlIHdpdGggU0VWLVNOUCBhbmQgUk1QT1BUIHN1cHBvcnQgZW5hYmxlZCBpbiB0aGUgQklPUy4gVGhlc2UgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBzb2Z0d2FyZS1lbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL1RDRyBvciBhdmFpbGFibGUgaW4gdHlwaWNhbCBHQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG5ldyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowln4hz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 16:46:52 +0000 UTC FinishedAt: 2026-07-28 17:12:04 +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+CgkJCTx0ZD4yMDI2LzA3LzI4IDE3OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24gdXNlZCBpbiBTRVYtU05QIGhvc3QgZW52aXJvbm1lbnRzLiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIEFNRCBoYXJkd2FyZSB3aXRoIFNFVi1TTlAgYW5kIFJNUE9QVCBzdXBwb3J0IGVuYWJsZWQgaW4gdGhlIEJJT1MuIFRoZXNlIGhhcmR3YXJlIGZlYXR1cmVzIGFyZSBub3Qgc29mdHdhcmUtZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9UQ0cgb3IgYXZhaWxhYmxlIGluIHR5cGljYWwgR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTc6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNTMzMzk5NTMwMTg4NmU3NGNhMGI2NDNiMjAzOWE1Mjk2NWQzZjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTc6MTE6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbmluZGV4IDNkMDk0MGEzYjlmMzcuLmRiY2NkZTllZTVjZDUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5AQCAtNzYsNyAmIzQzOzc2LDcgQEBcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0s4XHRcdFx0KCAzKjMyJiM0MzsgNCkgLyogT3B0ZXJvbiwgQXRobG9uNjQgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjVcdFx0KCAzKjMyJiM0MzsgNSkgLyogQ1BVIGJhc2VkIG9uIFplbjUgbWljcm9hcmNoaXRlY3R1cmUgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjZcdFx0KCAzKjMyJiM0MzsgNikgLyogQ1BVIGJhc2VkIG9uIFplbjYgbWljcm9hcmNoaXRlY3R1cmUgKi9cbi0vKiBGcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAzKjMyJiM0MzsgNykgKi9cbiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRcdFx0KCAzKjMyJiM0MzsgNykgLyogU3VwcG9ydCBmb3IgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDXHQoIDMqMzImIzQzOyA4KSAvKiBcJiMzNDtjb25zdGFudF90c2NcJiMzNDsgVFNDIHRpY2tzIGF0IGEgY29uc3RhbnQgcmF0ZSAqL1xuIC8qIGZyZWU6IHdhcyAjZGVmaW5lIFg4Nl9GRUFUVVJFX1VQXHQoIDMqMzImIzQzOyA5KSAqIFwmIzM0O3VwXCYjMzQ7IFNNUCBrZXJuZWwgcnVubmluZyBvbiBVUCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQVJUXHRcdFx0KCAzKjMyJiM0MzsxMCkgLyogXCYjMzQ7YXJ0XCYjMzQ7IEFsd2F5cyBydW5uaW5nIHRpbWVyIChBUlQpICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuaW5kZXggMThjNGJlNzVlOTI3MS4uZDJjYjBhN2NkMGEyZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuQEAgLTc2MSw2ICYjNDM7NzYxLDkgQEBcbiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUXHQwXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEXHRCSVRfVUxMKE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUKVxuICNkZWZpbmUgTVNSX0FNRDY0X1JNUF9TRUdNRU5UX1NISUZUKHgpXHQoKCh4KSBcdTAwMjYgR0VOTUFTS19VTEwoMTMsIDgpKSBcdTAwM2VcdTAwM2UgOClcbiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0VcdFx0MHhjMDAxMDEzOVxuJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVFx0MFxuJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFXHRcdEJJVF9VTEwoTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUKVxuIFxuICNkZWZpbmUgTVNSX1NWU01fQ0FBXHRcdFx0MHhjMDAxZjAwMFxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbmluZGV4IDU5NGNmYTE5Y2JkNGIuLjA5YjFjNWQzMzc5MDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbkBAIC02NjIsNiAmIzQzOzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4gXHRfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpO1xuIH1cbiBpbnQgc25wX3ByZXBhcmUodm9pZCk7XG4mIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKTtcbiYjNDM7dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpO1xuIHZvaWQgc25wX3NodXRkb3duKHZvaWQpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG5AQCAtNjgwLDYgJiM0Mzs2ODIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IG5wYWdlcykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge31cbiBzdGF0aWMgaW5saW5lIGludCBzbnBfcHJlcGFyZSh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9zaHV0ZG93bih2b2lkKSB7fVxuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG5pbmRleCA5MzcxMjljZTZhOTY0Li4wMjFjMGJmMjJkZTIwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcbiBcdHsgWDg2X0ZFQVRVUkVfUEVSRk1PTl9WMixcdFx0Q1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFx0XHRDUFVJRF9FQVgsICAxLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSxcdENQVUlEX0VBWCwgIDIsIDB4ODAwMDAwMjIsIDAgfSxcbiYjNDM7XHR7IFg4Nl9GRUFUVVJFX1JNUE9QVCxcdFx0XHRDUFVJRF9FRFgsICAwLCAweDgwMDAwMDI1LCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9IVFJfQ09SRVMsXHRcdENQVUlEX0VBWCwgMzAsIDB4ODAwMDAwMjYsIDAgfSxcbiBcdHsgMCwgMCwgMCwgMCwgMCB9XG4gfTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNDI3MjI5MzQ3ODc2Ni4uYzU3NDg0OWIxNTg3OCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC0yOTkyLDYgJiM0MzsyOTkyLDE2IEBAIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHQgKi9cbiBcdFx0aWYgKHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pKVxuIFx0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmdcbiYjNDM7XHRcdCAqIGd1ZXN0cy4gIFRoZSBzY2FuIGlzIGRlZmVycmVkLCBzbyBpdCBub3JtYWxseSBydW5zIGFmdGVyXG4mIzQzO1x0XHQgKiBzZXZfZ21lbV9pbnZhbGlkYXRlKCkgaGFzIGNvbnZlcnRlZCB0aGlzIGd1ZXN0JiMzOTtzIHBhZ2VzIGJhY2sgdG9cbiYjNDM7XHRcdCAqIHNoYXJlZCwgYW5kIHBpY2tzIHRoZW0gdXAgdGhlbi4gIEEgdmVyeSBsYXJnZSBndWVzdCB3aG9zZVxuJiM0MztcdFx0ICogY29udmVyc2lvbiBoYXMgbm90IGZpbmlzaGVkIGJ5IHRoZW4gaXMgcGlja2VkIHVwIGJ5IGEgbGF0ZXJcbiYjNDM7XHRcdCAqIHRlYXJkb3duJiMzOTtzIHNjYW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHNldl91bmJpbmRfYXNpZChrdm0sIHNldi1cdTAwM2VoYW5kbGUpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbmluZGV4IGNmZjI4NWQ4YWQ4ZTMuLjI5MWEzNjAyOTFlYjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hbWQtaW9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vc3BlYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Nldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtMTI0LDYgJiM0MzsxMjUsMjAgQEAgc3RhdGljIHZvaWQgKnJtcF9ib29ra2VlcGluZyBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTtcbiBcbiYjNDM7c3RhdGljIGNwdW1hc2tfdmFyX3Qgcm1wb3B0X2NwdW1hc2s7XG4mIzQzO3N0YXRpYyBwaHlzX2FkZHJfdCBybXBvcHRfcGFfc3RhcnQsIHJtcG9wdF9wYV9lbmQ7XG4mIzQzO1xuJiM0MztlbnVtIHJtcG9wdF9mdW5jdGlvbiB7XG4mIzQzO1x0Uk1QT1BUX0ZVTkNfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLFxuJiM0MztcdFJNUE9QVF9GVU5DX1JFUE9SVF9TVEFUVVNcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUk1QT1BUX1dPUktfVElNRU9VVFx0MTAwMDBcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcm1wb3B0X3dxO1xuJiM0MztzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrO1xuJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuIHN0YXRpYyBMSVNUX0hFQUQoc25wX2xlYWtlZF9wYWdlc19saXN0KTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTtcbiBcbkBAIC01MTMsNyAmIzQzOzUyOCw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcbiBcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcbiB7XG4tXHRpbnQgcmV0O1xuIFx0dTY0IHZhbDtcbiBcbiBcdC8qXG5AQCAtNTI2LDE0ICYjNDM7NTQwLDIxIEBAIGludCBzbnBfcHJlcGFyZSh2b2lkKVxuIFxuIFx0Y2xlYXJfcm1wKCk7XG4gXG4tXHRjcHVzX3JlYWRfbG9jaygpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBDUFUgaG90cGx1ZyBiZWZvcmUgZW5hYmxpbmcgU05QOiBubyBDUFUgbWF5IGNvbWUgb25saW5lXG4mIzQzO1x0ICogd2l0aG91dCBTbnBFbiB3aGlsZSBTTlAgaXMgYWN0aXZlLCBhbmQgbm9uZSBtYXkgZ28gb2ZmbGluZSBkdXJpbmdcbiYjNDM7XHQgKiBlbmFibGUuICBUaGlzIGtlZXBzIGNwdV9vbmxpbmVfbWFzayBzdGFibGUgZm9yIHRoZSBjaGVjayBhbmQgdGhlXG4mIzQzO1x0ICogb25fZWFjaF9jcHUoKSBjYWxscyBiZWxvdywgc28gY3B1c19yZWFkX2xvY2soKSBpcyBub3QgbmVlZGVkLiAgSXQgaXNcbiYjNDM7XHQgKiByZS1lbmFibGVkIGluIHNucF9zaHV0ZG93bigpIG9uY2UgdGhlIGZpcm13YXJlIGRpc2FibGVzIFNOUC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkge1xuLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xuIFx0XHRwcl93YXJuKFwmIzM0O1NOUCBpbml0IGZhaWxlZDogbm90IGFsbCBDUFVzIG9ubGluZS4gKCUqcGJsIG9ubGluZSBcdTAwM2MtXHUwMDNlICUqcGJsIHByZXNlbnQgbWFza3MpLlxcblwmIzM0OyxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X29ubGluZV9tYXNrKSxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X3ByZXNlbnRfbWFzaykpO1xuLVx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbiBcdHdiaW52ZF9vbl9hbGxfY3B1cygpO1xuQEAgLTU0OCwxNCAmIzQzOzU2OSwyOSBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcbiBcdC8qIFNOUF9JTklUIHJlcXVpcmVzIE1TUl9WTV9IU0FWRV9QQSB0byBiZSBjbGVhcmVkIG9uIGFsbCBDUFVzLiAqL1xuIFx0b25fZWFjaF9jcHUoY2xlYXJfaHNhdmVfcGEsIE5VTEwsIDEpO1xuIFxuLVx0cmV0ID0gMDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcJiMzNDtjY3BcJiMzNDspO1xuIFxuLXVubG9jazpcbi1cdGNwdXNfcmVhZF91bmxvY2soKTtcbiYjNDM7c3RhdGljIHZvaWQgc25wX2NsZWFudXBfcm1wb3B0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3B1O1xuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFybXBvcHRfd3EpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrKTtcbiYjNDM7XHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzaylcbiYjNDM7XHRcdHdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIDApO1xuJiM0MztcbiYjNDM7XHRmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9jcHVtYXNrKTtcbiYjNDM7XHRybXBvcHRfcGFfc3RhcnQgPSBybXBvcHRfcGFfZW5kID0gMDtcbiYjNDM7XHRybXBvcHRfd3EgPSBOVUxMO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcJiMzNDtjY3BcJiMzNDspO1xuIFxuIHZvaWQgc25wX3NodXRkb3duKHZvaWQpXG4ge1xuQEAgLTU2NSwxMSAmIzQzOzYwMSwyMDkgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZClcbiBcdGlmIChzeXNjZmcgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDbGVhciB0aGUgUk1QT1BUX0JBU0UgTVNScyB3aGlsZSBDUFUgaG90cGx1ZyBpcyBzdGlsbCBkaXNhYmxlZCwgdGhlblxuJiM0MztcdCAqIHJlLWVuYWJsZSBob3RwbHVnIG5vdyB0aGF0IHRoZSBmaXJtd2FyZSBoYXMgZGlzYWJsZWQgU05QLiAgQSBsZWdhY3kgU05QXG4mIzQzO1x0ICogc2h1dGRvd24gcmV0dXJucyBhYm92ZSB3aXRoIFNucEVuIHN0aWxsIHNldCBhbmQgbGVhdmVzIGhvdHBsdWcgZGlzYWJsZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c25wX2NsZWFudXBfcm1wb3B0KCk7XG4mIzQzO1x0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4mIzQzO1xuIFx0Y2xlYXJfcm1wKCk7XG4gXHRvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zaHV0ZG93biwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiBcbiYjNDM7c3RhdGljIGJvb2wgcm1wb3B0X2NhcGFibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJNUE9QVDogRjIgMEYgMDEgRkNcbiYjNDM7ICogICBJbnB1dDogIFJBWCA9IHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzICgxR0IgYWxpZ25lZClcbiYjNDM7ICogICAgICAgICAgIFJDWCA9IG9wZXJhdGlvbiB0eXBlXG4mIzQzOyAqICAgT3V0cHV0OiBDRiBzZXQgaWYgdGhlIHJhbmdlIHdhcyBvcHRpbWl6ZWRcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JtcG9wdCh1NjQgcGFfc3RhcnQsIHU2NCBvcF90eXBlKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBvcHRpbWl6ZWQ7XG4mIzQzO1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDsuYnl0ZSAweGYyLCAweDBmLCAweDAxLCAweGZjXCYjMzQ7XG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7PUBjY2NcJiMzNDsgKG9wdGltaXplZClcbiYjNDM7XHRcdCAgICAgOiBcJiMzNDthXCYjMzQ7IChwYV9zdGFydCksIFwmIzM0O2NcJiMzNDsgKG9wX3R5cGUpXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7bWVtb3J5XCYjMzQ7LCBcJiMzNDtjY1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvcHRpbWl6ZWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcGFfc3RhcnQgPSBBTElHTl9ET1dOKHBhLCBTWl8xRyk7XG4mIzQzO1x0dTY0IG9wX3R5cGUgPSBSTVBPUFRfRlVOQ19WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVM7XG4mIzQzO1xuJiM0MztcdF9fcm1wb3B0KHBhX3N0YXJ0LCBvcF90eXBlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogJiMzOTt2YWwmIzM5OyBpcyBhIHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcm1wb3B0X3NtcCh2b2lkICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRybXBvcHQoKHU2NCl2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXNcbiYjNDM7ICogcmFuZ2Ugb2YgbWVtb3J5IGRvZXMgbm90IGNvbnRhaW4gYW55IFNOUCBndWVzdCBtZW1vcnkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBybXBvcHRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdGNwdW1hc2tfdmFyX3QgZm9sbG93ZXJfbWFzaztcbiYjNDM7XHRwaHlzX2FkZHJfdCBwYTtcbiYjNDM7XHRpbnQgdGhpc19jcHU7XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7QXR0ZW1wdCBSTVAgb3B0aW1pemF0aW9ucyBvbiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIEAxR0IgYWxpZ25tZW50IFsweCUwMTZsbHggLSAweCUwMTZsbHhdXFxuXCYjMzQ7LFxuJiM0MztcdFx0cm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhbGxvY19jcHVtYXNrX3ZhcihcdTAwMjZmb2xsb3dlcl9tYXNrLCBHRlBfS0VSTkVMKSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtSTVAgb3B0aW1pemF0aW9uIHBhc3Mgc2tpcHBlZDogY3B1bWFzayBhbGxvY2F0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJNUE9QVCBzY2FucyB0aGUgUk1QIHRhYmxlLCBzdG9yZXMgdGhlIHJlc3VsdCBvZiB0aGUgc2NhbiBpbiB0aGVcbiYjNDM7XHQgKiByZXNlcnZlZCBwcm9jZXNzb3IgbWVtb3J5LiBUaGUgUk1QIHNjYW4gaXMgdGhlIG1vc3QgZXhwZW5zaXZlXG4mIzQzO1x0ICogcGFydC4gSWYgYSBzZWNvbmQgUk1QT1BUIG9jY3VycywgaXQgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBzY2FuXG4mIzQzO1x0ICogaWYgdGhleSBjYW4gc2VlIGEgY2FjaGVkIHJlc3VsdCBpbiB0aGUgcmVzZXJ2ZWQgcHJvY2Vzc29yIG1lbW9yeS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIERvIFJNUE9QVCBvbiBvbmUgQ1BVIGFsb25lLiBUaGVuLCBmb2xsb3cgdGhhdCB1cCB3aXRoIFJNUE9QVFxuJiM0MztcdCAqIG9uIGV2ZXJ5IG90aGVyIHByaW1hcnkgdGhyZWFkLiBGb2xsb3dlcnMgYXJlIFwmIzM0O2Rlc2lnbmVkIHRvXCYjMzQ7XG4mIzQzO1x0ICogc2tpcCB0aGUgc2NhbiBpZiB0aGV5IHNlZSB0aGUgXCYjMzQ7Y2FjaGVkXCYjMzQ7IHNjYW4gcmVzdWx0cy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFBpbiB0aGUgd29ya2VyIHRvIHRoZSBjdXJyZW50IENQVSBmb3IgdGhlIGxlYWRlciBsb29wIHNvIHRoYXRcbiYjNDM7XHQgKiB0aGlzX2NwdSByZW1haW5zIHZhbGlkIGFuZCB0aGUgUk1QT1BUIGluc3RydWN0aW9uIGV4ZWN1dGVzIG9uXG4mIzQzO1x0ICogdGhlIGNvcnJlY3QgQ1BVLiAgVXNlIG1pZ3JhdGVfZGlzYWJsZSgpIHJhdGhlciB0aGFuIGdldF9jcHUoKSB0b1xuJiM0MztcdCAqIHByZXZlbnQgbWlncmF0aW9uIHdoaWxlIHN0aWxsIGFsbG93aW5nIHByZWVtcHRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0bWlncmF0ZV9kaXNhYmxlKCk7XG4mIzQzO1x0dGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4mIzQzO1xuJiM0MztcdGNwdW1hc2tfYW5kbm90KGZvbGxvd2VyX21hc2ssIHJtcG9wdF9jcHVtYXNrLFxuJiM0MztcdFx0ICAgICAgIHRvcG9sb2d5X3NpYmxpbmdfY3B1bWFzayh0aGlzX2NwdSkpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHBhID0gcm1wb3B0X3BhX3N0YXJ0OyBwYSBcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgJiM0Mzs9IFNaXzFHKVxuJiM0MztcdFx0cm1wb3B0KHBhKTtcbiYjNDM7XG4mIzQzO1x0bWlncmF0ZV9lbmFibGUoKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb2xsb3dlcnM6IHJ1biBSTVBPUFQgb24gdGhlIHJlbWFpbmluZyBjb3Jlcy4gIGNwdXNfcmVhZF9sb2NrKCkgaXNcbiYjNDM7XHQgKiBpbnRlbnRpb25hbGx5IG5vdCBoZWxkIGhlcmU6IENQVSBob3RwbHVnIGlzIGRpc2FibGVkIGZvciB0aGUgZW50aXJlXG4mIzQzO1x0ICogdGltZSBTTlAgaXMgYWN0aXZlIChzZWUgc25wX3ByZXBhcmUoKSksIGFuZCB0aGlzIHdvcmsgb25seSBydW5zIHdoaWxlXG4mIzQzO1x0ICogU05QIGlzIGFjdGl2ZSwgc28gdGhlIGZvbGxvd2VyIHNldCBzdGF5cyB2YWxpZCBhY3Jvc3MgdGhlIHdob2xlIHNjYW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChwYSA9IHJtcG9wdF9wYV9zdGFydDsgcGEgXHUwMDNjIHJtcG9wdF9wYV9lbmQ7IHBhICYjNDM7PSBTWl8xRylcbiYjNDM7XHRcdG9uX2VhY2hfY3B1X21hc2soZm9sbG93ZXJfbWFzaywgcm1wb3B0X3NtcCwgKHZvaWQgKilwYSwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGZyZWVfY3B1bWFza192YXIoZm9sbG93ZXJfbWFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFybXBvcHRfY2FwYWJsZSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFybXBvcHRfd3EpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLFxuJiM0MztcdFx0XHQgbXNlY3NfdG9famlmZmllcyhSTVBPUFRfV09SS19USU1FT1VUKSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBcJiMzNDtrdm0tYW1kXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3ZvaWQgc25wX3NldHVwX3JtcG9wdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJtcG9wdF9iYXNlO1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT24gcmUtaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBsZWdhY3kgU05QIHNodXRkb3duIChTTlBfU0hVVERPV05fRVhcbiYjNDM7XHQgKiB3aXRoIHg4Nl9zbnBfc2h1dGRvd249MCksIHNucF9zaHV0ZG93bigpIGFuZCB0aHVzIHNucF9jbGVhbnVwX3JtcG9wdCgpXG4mIzQzO1x0ICogYXJlIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yaywgY3B1bWFzayBhbmQgcGVyLUNQVVxuJiM0MztcdCAqIFJNUE9QVF9CQVNFIE1TUnMgYXJlIHN0aWxsIHNldCB1cCBhbmQgdmFsaWQgKFNucEVuIHN0YXllZCBzZXQgYW5kXG4mIzQzO1x0ICogQ1BVIGhvdHBsdWcgc3RheWVkIGRpc2FibGVkKS4gIFJhdGhlciB0aGFuIHJlLWRvaW5nIHRoZSBzZXR1cCwgd2hpY2hcbiYjNDM7XHQgKiB3b3VsZCBsZWFrIHRoZSBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3NcbiYjNDM7XHQgKiB0byByZS1vcHRpbWl6ZSBhbnkgbWVtb3J5IHRoZSBwcmV2aW91cyBTTlAgc2Vzc2lvbiBkZS1vcHRpbWl6ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJtcG9wdF93cSkge1xuJiM0MztcdFx0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENyZWF0ZSBhbiBSTVBPUFQtc3BlY2lmaWMgd29ya3F1ZXVlIHRvIGF2b2lkIHNjaGVkdWxpbmdcbiYjNDM7XHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJtcG9wdF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtybXBvcHRfd3FcJiMzNDssIFdRX1VOQk9VTkQsIDEpO1xuJiM0MztcdGlmICghcm1wb3B0X3dxKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCB3b3JrcXVldWVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgcm1wb3B0X3dvcmtfaGFuZGxlcik7XG4mIzQzO1xuJiM0MztcdGlmICghemFsbG9jX2NwdW1hc2tfdmFyKFx1MDAyNnJtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgY3B1bWFza1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xuJiM0MztcdFx0cm1wb3B0X3dxID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIFJNUE9QVF9CQVNFIE1TUiBpcyBwZXItY29yZSwgc28gb25seSBvbmUgdGhyZWFkIHBlciBjb3JlIG5lZWRzXG4mIzQzO1x0ICogdG8gc2V0IHVwIHRoZSBSTVBPUFRfQkFTRSBNU1IuICBBbGwgcHJpbWFyeSB0aHJlYWRzIGFyZSBvbmxpbmUsXG4mIzQzO1x0ICogb3RoZXJ3aXNlIFNOUCB3b3VsZCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXG4mIzQzO1x0XHRpZiAodG9wb2xvZ3lfaXNfcHJpbWFyeV90aHJlYWQoY3B1KSlcbiYjNDM7XHRcdFx0Y3B1bWFza19zZXRfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spO1xuJiM0MztcbiYjNDM7XHRybXBvcHRfcGFfc3RhcnQgPSBBTElHTl9ET1dOKFBGTl9QSFlTKG1pbl9sb3dfcGZuKSwgU1pfMUcpO1xuJiM0MztcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUGVyLUNQVSBSTVBPUFQgdGFibGVzIGNvdmVyIGF0IG1vc3QgMiBUQi4gIFByb2dyYW0gZWFjaCBjb3JlJiMzOTtzXG4mIzQzO1x0ICogUk1QT1BUX0JBU0Ugd2l0aCB0aGUgc3RhcnQgb2YgUkFNIHRvIG9wdGltaXplIHVwIHRvIDIgVEIuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yX2VhY2hfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spXG4mIzQzO1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCBybXBvcHRfYmFzZSk7XG4mIzQzO1xuJiM0MztcdHJtcG9wdF9wYV9lbmQgPSBBTElHTihQRk5fUEhZUyhtYXhfcGZuKSwgU1pfMUcpO1xuJiM0MztcbiYjNDM7XHQvKiBMaW1pdCBtZW1vcnkgc2Nhbm5pbmcgdG8gMlRCIG9mIFJBTSAqL1xuJiM0MztcdGlmICgocm1wb3B0X3BhX2VuZCAtIHJtcG9wdF9wYV9zdGFydCkgXHUwMDNlIFNaXzJUKSB7XG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O1JNUE9QVCBjb3ZlcmFnZSBsaW1pdGVkIHRvIDJUQjsgbWVtb3J5IGFib3ZlIDB4JWxseCBub3Qgb3B0aW1pemVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRybXBvcHRfcGFfc3RhcnQgJiM0MzsgU1pfMlQpO1xuJiM0MztcdFx0cm1wb3B0X3BhX2VuZCA9IHJtcG9wdF9wYV9zdGFydCAmIzQzOyBTWl8yVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT25jZSBhbGwgcGVyLUNQVSBSTVBPUFQgdGFibGVzIGhhdmUgYmVlbiBjb25maWd1cmVkLCBlbmFibGUgUk1QT1BUXG4mIzQzO1x0ICogb3B0aW1pemF0aW9ucyBvbiBhbGwgcGh5c2ljYWwgbWVtb3J5LlxuJiM0MztcdCAqL1xuJiM0MztcdHF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIDApO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NldHVwX3JtcG9wdCwgXCYjMzQ7Y2NwXCYjMzQ7KTtcbiYjNDM7XG4gLypcbiAgKiBEbyB0aGUgbmVjZXNzYXJ5IHByZXBhcmF0aW9ucyB3aGljaCBhcmUgdmVyaWZpZWQgYnkgdGhlIGZpcm13YXJlIGFzXG4gICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlBcbkBAIC01NzcsNiAmIzQzOzgxMSw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcJiMzNDtjY3BcJiMzNDspO1xuICAqL1xuIGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbiB7XG4mIzQzO1x0dTY0IHZhbDtcbiYjNDM7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApKSlcbiBcdFx0cmV0dXJuIC1FTk9TWVM7XG4gXG5AQCAtNTg2LDYgJiM0Mzs4MjIsMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxuIFx0aWYgKCFzZXR1cF9ybXB0YWJsZSgpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uIGEga2V4ZWMgYm9vdCBTTlAgbWF5IGFscmVhZHkgYmUgZW5hYmxlZCAobGVnYWN5IGZpcm13YXJlIGxlYXZlc1xuJiM0MztcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxuJiM0MztcdCAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xuJiM0MztcdGlmICh2YWwgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuJiM0MztcdFx0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBTZXR0aW5nIGNyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzIHRvICYjMzk7dHJ1ZSYjMzk7IHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pY1xuIFx0ICogbm90aWZpZXIgaXMgaW52b2tlZCB0byBkbyBTTlAgSU9NTVUgc2h1dGRvd24gYmVmb3JlIGtkdW1wLlxuQEAgLTY4NiwxMCAmIzQzOzkzMSwxMiBAQCBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpXG4gXHRpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUdNRU5URURfUk1QKSlcbiBcdFx0cmRtc3JxKE1TUl9BTUQ2NF9STVBfQ0ZHLCBybXBfY2ZnKTtcbiBcbi1cdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKVxuJiM0MztcdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKSB7XG4gXHRcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xuLVx0ZWxzZVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1JNUE9QVCk7XG4gXHRcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcbiYjNDM7XHR9XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbmluZGV4IGNhNDczY2ExOThiODEuLmMwMDJhN2NhMjZhOGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG5AQCAtMTQ3Nyw2ICYjNDM7MTQ3Nyw5IEBAIHN0YXRpYyBpbnQgX19zZXZfc25wX2luaXRfbG9ja2VkKGludCAqZXJyb3IsIHVuc2lnbmVkIGludCBtYXhfc25wX2FzaWQpXG4gXHR9XG4gXG4gXHRzbnBfaHZfZml4ZWRfcGFnZXNfc3RhdGVfdXBkYXRlKHNldiwgSFZfRklYRUQpO1xuJiM0MztcbiYjNDM7XHRzbnBfc2V0dXBfcm1wb3B0KCk7XG4mIzQzO1xuIFx0c2V2LVx1MDAzZXNucF9pbml0aWFsaXplZCA9IHRydWU7XG4gXHRkZXZfZGJnKHNldi1cdTAwM2VkZXYsIFwmIzM0O1NFVi1TTlAgZmlybXdhcmUgaW5pdGlhbGl6ZWQsIFNFVi1USU8gaXMgJXNcXG5cJiMzNDssXG4gXHRcdGRhdGEudGlvX2VuID8gXCYjMzQ7ZW5hYmxlZFwmIzM0OyA6IFwmIzM0O2Rpc2FibGVkXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNzoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiB1c2VkIGluIFNFVi1TTlAgaG9zdCBlbnZpcm9ubWVudHMuIFRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgQU1EIGhhcmR3YXJlIHdpdGggU0VWLVNOUCBhbmQgUk1QT1BUIHN1cHBvcnQgZW5hYmxlZCBpbiB0aGUgQklPUy4gVGhlc2UgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBzb2Z0d2FyZS1lbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL1RDRyBvciBhdmFpbGFibGUgaW4gdHlwaWNhbCBHQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG5ldyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE1MzMzOTk1MzAxODg2ZTc0Y2EwYjY0M2IyMDM5YTUyOTY1ZDNmOGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyOCAxNzoxMTo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCmluZGV4IDNkMDk0MGEzYjlmMzcuLmRiY2NkZTllZTVjZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaApAQCAtNzYsNyAmIzQzOzc2LDcgQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfSzgJCQkoIDMqMzImIzQzOyA0KSAvKiBPcHRlcm9uLCBBdGhsb242NCAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9aRU41CQkoIDMqMzImIzQzOyA1KSAvKiBDUFUgYmFzZWQgb24gWmVuNSBtaWNyb2FyY2hpdGVjdHVyZSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9aRU42CQkoIDMqMzImIzQzOyA2KSAvKiBDUFUgYmFzZWQgb24gWmVuNiBtaWNyb2FyY2hpdGVjdHVyZSAqLwotLyogRnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMyozMiYjNDM7IDcpICovCiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFQJCSggMyozMiYjNDM7IDcpIC8qIFN1cHBvcnQgZm9yIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24gKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDCSggMyozMiYjNDM7IDgpIC8qICYjMzQ7Y29uc3RhbnRfdHNjJiMzNDsgVFNDIHRpY2tzIGF0IGEgY29uc3RhbnQgcmF0ZSAqLwogLyogZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfVVAJKCAzKjMyJiM0MzsgOSkgKiAmIzM0O3VwJiMzNDsgU01QIGtlcm5lbCBydW5uaW5nIG9uIFVQICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FSVAkJCSggMyozMiYjNDM7MTApIC8qICYjMzQ7YXJ0JiMzNDsgQWx3YXlzIHJ1bm5pbmcgdGltZXIgKEFSVCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKaW5kZXggMThjNGJlNzVlOTI3MS4uZDJjYjBhN2NkMGEyZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTc2MSw2ICYjNDM7NzYxLDkgQEAKICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRF9CSVQJMAogI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVECUJJVF9VTEwoTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRF9CSVQpCiAjZGVmaW5lIE1TUl9BTUQ2NF9STVBfU0VHTUVOVF9TSElGVCh4KQkoKCh4KSAmYW1wOyBHRU5NQVNLX1VMTCgxMywgOCkpICZndDsmZ3Q7IDgpCiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0JBU0UJCTB4YzAwMTAxMzkKJiM0MzsjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVAkwCiYjNDM7I2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRQkJQklUX1VMTChNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVQpCiAKICNkZWZpbmUgTVNSX1NWU01fQ0FBCQkJMHhjMDAxZjAwMAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oCmluZGV4IDU5NGNmYTE5Y2JkNGIuLjA5YjFjNWQzMzc5MDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oCkBAIC02NjIsNiAmIzQzOzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgcGFnZXMpCiAJX19zbnBfbGVha19wYWdlcyhwZm4sIHBhZ2VzLCB0cnVlKTsKIH0KIGludCBzbnBfcHJlcGFyZSh2b2lkKTsKJiM0Mzt2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCk7CiYjNDM7dm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpOwogdm9pZCBzbnBfc2h1dGRvd24odm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC02ODAsNiAmIzQzOzY4Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgbnBhZ2VzKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGtkdW1wX3Nldl9jYWxsYmFjayh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfZml4dXBfZTgyMF90YWJsZXModm9pZCkge30KIHN0YXRpYyBpbmxpbmUgaW50IHNucF9wcmVwYXJlKHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKSB7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NodXRkb3duKHZvaWQpIHt9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMKaW5kZXggOTM3MTI5Y2U2YTk2NC4uMDIxYzBiZjIyZGUyMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCkBAIC02Nyw2ICYjNDM7NjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBjcHVpZF9iaXRzW10gPSB7CiAJeyBYODZfRkVBVFVSRV9QRVJGTU9OX1YyLAkJQ1BVSURfRUFYLCAgMCwgMHg4MDAwMDAyMiwgMCB9LAogCXsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9WMiwJCUNQVUlEX0VBWCwgIDEsIDB4ODAwMDAwMjIsIDAgfSwKIAl7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfUE1DX0ZSRUVaRSwJQ1BVSURfRUFYLCAgMiwgMHg4MDAwMDAyMiwgMCB9LAomIzQzOwl7IFg4Nl9GRUFUVVJFX1JNUE9QVCwJCQlDUFVJRF9FRFgsICAwLCAweDgwMDAwMDI1LCAwIH0sCiAJeyBYODZfRkVBVFVSRV9BTURfSFRSX0NPUkVTLAkJQ1BVSURfRUFYLCAzMCwgMHg4MDAwMDAyNiwgMCB9LAogCXsgMCwgMCwgMCwgMCwgMCB9CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKaW5kZXggNDI3MjI5MzQ3ODc2Ni4uYzU3NDg0OWIxNTg3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCkBAIC0yOTkyLDYgJiM0MzsyOTkyLDE2IEBAIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKQogCQkgKi8KIAkJaWYgKHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pKQogCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFBlcmZvcm0gUk1QIG9wdGltaXphdGlvbnMgb24gbWVtb3J5IGZyZWVkIGJ5IHRlcm1pbmF0aW5nCiYjNDM7CQkgKiBndWVzdHMuICBUaGUgc2NhbiBpcyBkZWZlcnJlZCwgc28gaXQgbm9ybWFsbHkgcnVucyBhZnRlcgomIzQzOwkJICogc2V2X2dtZW1faW52YWxpZGF0ZSgpIGhhcyBjb252ZXJ0ZWQgdGhpcyBndWVzdCYjMzk7cyBwYWdlcyBiYWNrIHRvCiYjNDM7CQkgKiBzaGFyZWQsIGFuZCBwaWNrcyB0aGVtIHVwIHRoZW4uICBBIHZlcnkgbGFyZ2UgZ3Vlc3Qgd2hvc2UKJiM0MzsJCSAqIGNvbnZlcnNpb24gaGFzIG5vdCBmaW5pc2hlZCBieSB0aGVuIGlzIHBpY2tlZCB1cCBieSBhIGxhdGVyCiYjNDM7CQkgKiB0ZWFyZG93biYjMzk7cyBzY2FuLgomIzQzOwkJICovCiYjNDM7CQlzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7CiAJfSBlbHNlIHsKIAkJc2V2X3VuYmluZF9hc2lkKGt2bSwgc2V2LSZndDtoYW5kbGUpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMKaW5kZXggY2ZmMjg1ZDhhZDhlMy4uMjkxYTM2MDI5MWViNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmMKQEAgLTE5LDYgJiM0MzsxOSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW9tbXUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9hbWQtaW9tbXUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ub3NwZWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vc2V2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3Byb2Nlc3Nvci5oJmd0OwpAQCAtMTI0LDYgJiM0MzsxMjUsMjAgQEAgc3RhdGljIHZvaWQgKnJtcF9ib29ra2VlcGluZyBfX3JvX2FmdGVyX2luaXQ7CiAKIHN0YXRpYyB1NjQgcHJvYmVkX3JtcF9iYXNlLCBwcm9iZWRfcm1wX3NpemU7CiAKJiM0MztzdGF0aWMgY3B1bWFza192YXJfdCBybXBvcHRfY3B1bWFzazsKJiM0MztzdGF0aWMgcGh5c19hZGRyX3Qgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kOwomIzQzOwomIzQzO2VudW0gcm1wb3B0X2Z1bmN0aW9uIHsKJiM0MzsJUk1QT1BUX0ZVTkNfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTLAomIzQzOwlSTVBPUFRfRlVOQ19SRVBPUlRfU1RBVFVTCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFJNUE9QVF9XT1JLX1RJTUVPVVQJMTAwMDAKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTsKJiM0MztzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrOwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgocm1wb3B0X3dxX211dGV4KTsKJiM0MzsKIHN0YXRpYyBMSVNUX0hFQUQoc25wX2xlYWtlZF9wYWdlc19saXN0KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc25wX2xlYWtlZF9wYWdlc19saXN0X2xvY2spOwogCkBAIC01MTMsNyAmIzQzOzUyOCw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZykKIAogaW50IHNucF9wcmVwYXJlKHZvaWQpCiB7Ci0JaW50IHJldDsKIAl1NjQgdmFsOwogCiAJLyoKQEAgLTUyNiwxNCAmIzQzOzU0MCwyMSBAQCBpbnQgc25wX3ByZXBhcmUodm9pZCkKIAogCWNsZWFyX3JtcCgpOwogCi0JY3B1c19yZWFkX2xvY2soKTsKJiM0MzsJLyoKJiM0MzsJICogRGlzYWJsZSBDUFUgaG90cGx1ZyBiZWZvcmUgZW5hYmxpbmcgU05QOiBubyBDUFUgbWF5IGNvbWUgb25saW5lCiYjNDM7CSAqIHdpdGhvdXQgU25wRW4gd2hpbGUgU05QIGlzIGFjdGl2ZSwgYW5kIG5vbmUgbWF5IGdvIG9mZmxpbmUgZHVyaW5nCiYjNDM7CSAqIGVuYWJsZS4gIFRoaXMga2VlcHMgY3B1X29ubGluZV9tYXNrIHN0YWJsZSBmb3IgdGhlIGNoZWNrIGFuZCB0aGUKJiM0MzsJICogb25fZWFjaF9jcHUoKSBjYWxscyBiZWxvdywgc28gY3B1c19yZWFkX2xvY2soKSBpcyBub3QgbmVlZGVkLiAgSXQgaXMKJiM0MzsJICogcmUtZW5hYmxlZCBpbiBzbnBfc2h1dGRvd24oKSBvbmNlIHRoZSBmaXJtd2FyZSBkaXNhYmxlcyBTTlAuCiYjNDM7CSAqLwomIzQzOwljcHVfaG90cGx1Z19kaXNhYmxlKCk7CiAKIAlpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkgewotCQlyZXQgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWNwdV9ob3RwbHVnX2VuYWJsZSgpOwogCQlwcl93YXJuKCYjMzQ7U05QIGluaXQgZmFpbGVkOiBub3QgYWxsIENQVXMgb25saW5lLiAoJSpwYmwgb25saW5lICZsdDstJmd0OyAlKnBibCBwcmVzZW50IG1hc2tzKS5cbiYjMzQ7LAogCQkJY3B1bWFza19wcl9hcmdzKGNwdV9vbmxpbmVfbWFzayksCiAJCQljcHVtYXNrX3ByX2FyZ3MoY3B1X3ByZXNlbnRfbWFzaykpOwotCQlnb3RvIHVubG9jazsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKIAl3YmludmRfb25fYWxsX2NwdXMoKTsKQEAgLTU0OCwxNCAmIzQzOzU2OSwyOSBAQCBpbnQgc25wX3ByZXBhcmUodm9pZCkKIAkvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi8KIAlvbl9lYWNoX2NwdShjbGVhcl9oc2F2ZV9wYSwgTlVMTCwgMSk7CiAKLQlyZXQgPSAwOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgJiMzNDtjY3AmIzM0Oyk7CiAKLXVubG9jazoKLQljcHVzX3JlYWRfdW5sb2NrKCk7CiYjNDM7c3RhdGljIHZvaWQgc25wX2NsZWFudXBfcm1wb3B0KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgY3B1OwogCi0JcmV0dXJuIHJldDsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cm1wb3B0X3dxX211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKCFybXBvcHRfd3EpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmspOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpOwomIzQzOwomIzQzOwlmb3JfZWFjaF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzaykKJiM0MzsJCXdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIDApOwomIzQzOwomIzQzOwlmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9jcHVtYXNrKTsKJiM0MzsJcm1wb3B0X3BhX3N0YXJ0ID0gcm1wb3B0X3BhX2VuZCA9IDA7CiYjNDM7CXJtcG9wdF93cSA9IE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCAmIzM0O2NjcCYjMzQ7KTsKIAogdm9pZCBzbnBfc2h1dGRvd24odm9pZCkKIHsKQEAgLTU2NSwxMSAmIzQzOzYwMSwyMDkgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZCkKIAlpZiAoc3lzY2ZnICZhbXA7IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKQogCQlyZXR1cm47CiAKJiM0MzsJLyoKJiM0MzsJICogQ2xlYXIgdGhlIFJNUE9QVF9CQVNFIE1TUnMgd2hpbGUgQ1BVIGhvdHBsdWcgaXMgc3RpbGwgZGlzYWJsZWQsIHRoZW4KJiM0MzsJICogcmUtZW5hYmxlIGhvdHBsdWcgbm93IHRoYXQgdGhlIGZpcm13YXJlIGhhcyBkaXNhYmxlZCBTTlAuICBBIGxlZ2FjeSBTTlAKJiM0MzsJICogc2h1dGRvd24gcmV0dXJucyBhYm92ZSB3aXRoIFNucEVuIHN0aWxsIHNldCBhbmQgbGVhdmVzIGhvdHBsdWcgZGlzYWJsZWQuCiYjNDM7CSAqLwomIzQzOwlzbnBfY2xlYW51cF9ybXBvcHQoKTsKJiM0MzsJY3B1X2hvdHBsdWdfZW5hYmxlKCk7CiYjNDM7CiAJY2xlYXJfcm1wKCk7CiAJb25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTsKIH0KIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCAmIzM0O2NjcCYjMzQ7KTsKIAomIzQzO3N0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9STVBPUFQpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUk1QT1BUOiBGMiAwRiAwMSBGQwomIzQzOyAqICAgSW5wdXQ6ICBSQVggPSBzeXN0ZW0gcGh5c2ljYWwgYWRkcmVzcyAoMUdCIGFsaWduZWQpCiYjNDM7ICogICAgICAgICAgIFJDWCA9IG9wZXJhdGlvbiB0eXBlCiYjNDM7ICogICBPdXRwdXQ6IENGIHNldCBpZiB0aGUgcmFuZ2Ugd2FzIG9wdGltaXplZAomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JtcG9wdCh1NjQgcGFfc3RhcnQsIHU2NCBvcF90eXBlKQomIzQzO3sKJiM0MzsJYm9vbCBvcHRpbWl6ZWQ7CiYjNDM7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0Oy5ieXRlIDB4ZjIsIDB4MGYsIDB4MDEsIDB4ZmMmIzM0OwomIzQzOwkJICAgICA6ICYjMzQ7PUBjY2MmIzM0OyAob3B0aW1pemVkKQomIzQzOwkJICAgICA6ICYjMzQ7YSYjMzQ7IChwYV9zdGFydCksICYjMzQ7YyYjMzQ7IChvcF90eXBlKQomIzQzOwkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDssICYjMzQ7Y2MmIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBvcHRpbWl6ZWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpCiYjNDM7ewomIzQzOwl1NjQgcGFfc3RhcnQgPSBBTElHTl9ET1dOKHBhLCBTWl8xRyk7CiYjNDM7CXU2NCBvcF90eXBlID0gUk1QT1BUX0ZVTkNfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTOwomIzQzOwomIzQzOwlfX3JtcG9wdChwYV9zdGFydCwgb3BfdHlwZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogJiMzOTt2YWwmIzM5OyBpcyBhIHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJtcG9wdF9zbXAodm9pZCAqdmFsKQomIzQzO3sKJiM0MzsJcm1wb3B0KCh1NjQpdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXMKJiM0MzsgKiByYW5nZSBvZiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBybXBvcHRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CWNwdW1hc2tfdmFyX3QgZm9sbG93ZXJfbWFzazsKJiM0MzsJcGh5c19hZGRyX3QgcGE7CiYjNDM7CWludCB0aGlzX2NwdTsKJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0O0F0dGVtcHQgUk1QIG9wdGltaXphdGlvbnMgb24gcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBAMUdCIGFsaWdubWVudCBbMHglMDE2bGx4IC0gMHglMDE2bGx4XVxuJiMzNDssCiYjNDM7CQlybXBvcHRfcGFfc3RhcnQsIHJtcG9wdF9wYV9lbmQpOwomIzQzOwomIzQzOwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZhbXA7Zm9sbG93ZXJfbWFzaywgR0ZQX0tFUk5FTCkpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtSTVAgb3B0aW1pemF0aW9uIHBhc3Mgc2tpcHBlZDogY3B1bWFzayBhbGxvY2F0aW9uIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJNUE9QVCBzY2FucyB0aGUgUk1QIHRhYmxlLCBzdG9yZXMgdGhlIHJlc3VsdCBvZiB0aGUgc2NhbiBpbiB0aGUKJiM0MzsJICogcmVzZXJ2ZWQgcHJvY2Vzc29yIG1lbW9yeS4gVGhlIFJNUCBzY2FuIGlzIHRoZSBtb3N0IGV4cGVuc2l2ZQomIzQzOwkgKiBwYXJ0LiBJZiBhIHNlY29uZCBSTVBPUFQgb2NjdXJzLCBpdCBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIHNjYW4KJiM0MzsJICogaWYgdGhleSBjYW4gc2VlIGEgY2FjaGVkIHJlc3VsdCBpbiB0aGUgcmVzZXJ2ZWQgcHJvY2Vzc29yIG1lbW9yeS4KJiM0MzsJICoKJiM0MzsJICogRG8gUk1QT1BUIG9uIG9uZSBDUFUgYWxvbmUuIFRoZW4sIGZvbGxvdyB0aGF0IHVwIHdpdGggUk1QT1BUCiYjNDM7CSAqIG9uIGV2ZXJ5IG90aGVyIHByaW1hcnkgdGhyZWFkLiBGb2xsb3dlcnMgYXJlICYjMzQ7ZGVzaWduZWQgdG8mIzM0OwomIzQzOwkgKiBza2lwIHRoZSBzY2FuIGlmIHRoZXkgc2VlIHRoZSAmIzM0O2NhY2hlZCYjMzQ7IHNjYW4gcmVzdWx0cy4KJiM0MzsJICoKJiM0MzsJICogUGluIHRoZSB3b3JrZXIgdG8gdGhlIGN1cnJlbnQgQ1BVIGZvciB0aGUgbGVhZGVyIGxvb3Agc28gdGhhdAomIzQzOwkgKiB0aGlzX2NwdSByZW1haW5zIHZhbGlkIGFuZCB0aGUgUk1QT1BUIGluc3RydWN0aW9uIGV4ZWN1dGVzIG9uCiYjNDM7CSAqIHRoZSBjb3JyZWN0IENQVS4gIFVzZSBtaWdyYXRlX2Rpc2FibGUoKSByYXRoZXIgdGhhbiBnZXRfY3B1KCkgdG8KJiM0MzsJICogcHJldmVudCBtaWdyYXRpb24gd2hpbGUgc3RpbGwgYWxsb3dpbmcgcHJlZW1wdGlvbi4KJiM0MzsJICovCiYjNDM7CW1pZ3JhdGVfZGlzYWJsZSgpOwomIzQzOwl0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKJiM0MzsKJiM0MzsJY3B1bWFza19hbmRub3QoZm9sbG93ZXJfbWFzaywgcm1wb3B0X2NwdW1hc2ssCiYjNDM7CQkgICAgICAgdG9wb2xvZ3lfc2libGluZ19jcHVtYXNrKHRoaXNfY3B1KSk7CiYjNDM7CiYjNDM7CWZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhICZsdDsgcm1wb3B0X3BhX2VuZDsgcGEgJiM0Mzs9IFNaXzFHKQomIzQzOwkJcm1wb3B0KHBhKTsKJiM0MzsKJiM0MzsJbWlncmF0ZV9lbmFibGUoKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRm9sbG93ZXJzOiBydW4gUk1QT1BUIG9uIHRoZSByZW1haW5pbmcgY29yZXMuICBjcHVzX3JlYWRfbG9jaygpIGlzCiYjNDM7CSAqIGludGVudGlvbmFsbHkgbm90IGhlbGQgaGVyZTogQ1BVIGhvdHBsdWcgaXMgZGlzYWJsZWQgZm9yIHRoZSBlbnRpcmUKJiM0MzsJICogdGltZSBTTlAgaXMgYWN0aXZlIChzZWUgc25wX3ByZXBhcmUoKSksIGFuZCB0aGlzIHdvcmsgb25seSBydW5zIHdoaWxlCiYjNDM7CSAqIFNOUCBpcyBhY3RpdmUsIHNvIHRoZSBmb2xsb3dlciBzZXQgc3RheXMgdmFsaWQgYWNyb3NzIHRoZSB3aG9sZSBzY2FuLgomIzQzOwkgKi8KJiM0MzsJZm9yIChwYSA9IHJtcG9wdF9wYV9zdGFydDsgcGEgJmx0OyBybXBvcHRfcGFfZW5kOyBwYSAmIzQzOz0gU1pfMUcpCiYjNDM7CQlvbl9lYWNoX2NwdV9tYXNrKGZvbGxvd2VyX21hc2ssIHJtcG9wdF9zbXAsICh2b2lkICopcGEsIHRydWUpOwomIzQzOwomIzQzOwlmcmVlX2NwdW1hc2tfdmFyKGZvbGxvd2VyX21hc2spOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghcm1wb3B0X2NhcGFibGUoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7cm1wb3B0X3dxX211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKCFybXBvcHRfd3EpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCAmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssCiYjNDM7CQkJIG1zZWNzX3RvX2ppZmZpZXMoUk1QT1BUX1dPUktfVElNRU9VVCkpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sICYjMzQ7a3ZtLWFtZCYjMzQ7KTsKJiM0MzsKJiM0Mzt2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCkKJiM0Mzt7CiYjNDM7CXU2NCBybXBvcHRfYmFzZTsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFybXBvcHRfY2FwYWJsZSgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtybXBvcHRfd3FfbXV0ZXgpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBPbiByZS1pbml0aWFsaXphdGlvbiBhZnRlciBhIGxlZ2FjeSBTTlAgc2h1dGRvd24gKFNOUF9TSFVURE9XTl9FWAomIzQzOwkgKiB3aXRoIHg4Nl9zbnBfc2h1dGRvd249MCksIHNucF9zaHV0ZG93bigpIGFuZCB0aHVzIHNucF9jbGVhbnVwX3JtcG9wdCgpCiYjNDM7CSAqIGFyZSBza2lwcGVkLCBzbyB0aGUgd29ya3F1ZXVlLCBkZWxheWVkIHdvcmssIGNwdW1hc2sgYW5kIHBlci1DUFUKJiM0MzsJICogUk1QT1BUX0JBU0UgTVNScyBhcmUgc3RpbGwgc2V0IHVwIGFuZCB2YWxpZCAoU25wRW4gc3RheWVkIHNldCBhbmQKJiM0MzsJICogQ1BVIGhvdHBsdWcgc3RheWVkIGRpc2FibGVkKS4gIFJhdGhlciB0aGFuIHJlLWRvaW5nIHRoZSBzZXR1cCwgd2hpY2gKJiM0MzsJICogd291bGQgbGVhayB0aGUgZXhpc3Rpbmcgc3RhdGUsIGp1c3QgcmUtcXVldWUgdGhlIG9wdGltaXphdGlvbiBwYXNzCiYjNDM7CSAqIHRvIHJlLW9wdGltaXplIGFueSBtZW1vcnkgdGhlIHByZXZpb3VzIFNOUCBzZXNzaW9uIGRlLW9wdGltaXplZC4KJiM0MzsJICovCiYjNDM7CWlmIChybXBvcHRfd3EpIHsKJiM0MzsJCXF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsICZhbXA7cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ3JlYXRlIGFuIFJNUE9QVC1zcGVjaWZpYyB3b3JrcXVldWUgdG8gYXZvaWQgc2NoZWR1bGluZwomIzQzOwkgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLgomIzQzOwkgKi8KJiM0MzsJcm1wb3B0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7cm1wb3B0X3dxJiMzNDssIFdRX1VOQk9VTkQsIDEpOwomIzQzOwlpZiAoIXJtcG9wdF93cSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCB3b3JrcXVldWVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssIHJtcG9wdF93b3JrX2hhbmRsZXIpOwomIzQzOwomIzQzOwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmYW1wO3JtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCBjcHVtYXNrXG4mIzM0Oyk7CiYjNDM7CQlkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpOwomIzQzOwkJcm1wb3B0X3dxID0gTlVMTDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgUk1QT1BUX0JBU0UgTVNSIGlzIHBlci1jb3JlLCBzbyBvbmx5IG9uZSB0aHJlYWQgcGVyIGNvcmUgbmVlZHMKJiM0MzsJICogdG8gc2V0IHVwIHRoZSBSTVBPUFRfQkFTRSBNU1IuICBBbGwgcHJpbWFyeSB0aHJlYWRzIGFyZSBvbmxpbmUsCiYjNDM7CSAqIG90aGVyd2lzZSBTTlAgd291bGQgbm90IGhhdmUgYmVlbiBlbmFibGVkLgomIzQzOwkgKi8KJiM0MzsJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCiYjNDM7CQlpZiAodG9wb2xvZ3lfaXNfcHJpbWFyeV90aHJlYWQoY3B1KSkKJiM0MzsJCQljcHVtYXNrX3NldF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzayk7CiYjNDM7CiYjNDM7CXJtcG9wdF9wYV9zdGFydCA9IEFMSUdOX0RPV04oUEZOX1BIWVMobWluX2xvd19wZm4pLCBTWl8xRyk7CiYjNDM7CXJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBlci1DUFUgUk1QT1BUIHRhYmxlcyBjb3ZlciBhdCBtb3N0IDIgVEIuICBQcm9ncmFtIGVhY2ggY29yZSYjMzk7cwomIzQzOwkgKiBSTVBPUFRfQkFTRSB3aXRoIHRoZSBzdGFydCBvZiBSQU0gdG8gb3B0aW1pemUgdXAgdG8gMiBUQi4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX2NwdShjcHUsIHJtcG9wdF9jcHVtYXNrKQomIzQzOwkJd3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgcm1wb3B0X2Jhc2UpOwomIzQzOwomIzQzOwlybXBvcHRfcGFfZW5kID0gQUxJR04oUEZOX1BIWVMobWF4X3BmbiksIFNaXzFHKTsKJiM0MzsKJiM0MzsJLyogTGltaXQgbWVtb3J5IHNjYW5uaW5nIHRvIDJUQiBvZiBSQU0gKi8KJiM0MzsJaWYgKChybXBvcHRfcGFfZW5kIC0gcm1wb3B0X3BhX3N0YXJ0KSAmZ3Q7IFNaXzJUKSB7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7Uk1QT1BUIGNvdmVyYWdlIGxpbWl0ZWQgdG8gMlRCOyBtZW1vcnkgYWJvdmUgMHglbGx4IG5vdCBvcHRpbWl6ZWRcbiYjMzQ7LAomIzQzOwkJCXJtcG9wdF9wYV9zdGFydCAmIzQzOyBTWl8yVCk7CiYjNDM7CQlybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICYjNDM7IFNaXzJUOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9uY2UgYWxsIHBlci1DUFUgUk1QT1BUIHRhYmxlcyBoYXZlIGJlZW4gY29uZmlndXJlZCwgZW5hYmxlIFJNUE9QVAomIzQzOwkgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuCiYjNDM7CSAqLwomIzQzOwlxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCAmYW1wO3JtcG9wdF9kZWxheWVkX3dvcmssIDApOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsICYjMzQ7Y2NwJiMzNDspOwomIzQzOwogLyoKICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXMKICAqIGRlc2NyaWJlZCBpbiB0aGUgU05QX0lOSVRfRVggZmlybXdhcmUgY29tbWFuZCBkZXNjcmlwdGlvbiBpbiB0aGUgU05QCkBAIC01NzcsNiAmIzQzOzgxMSw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCAmIzM0O2NjcCYjMzQ7KTsKICAqLwogaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKQogewomIzQzOwl1NjQgdmFsOwomIzQzOwogCWlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKQogCQlyZXR1cm4gLUVOT1NZUzsKIApAQCAtNTg2LDYgJiM0Mzs4MjIsMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKQogCWlmICghc2V0dXBfcm1wdGFibGUoKSkKIAkJcmV0dXJuIC1FTk9TWVM7CiAKJiM0MzsJLyoKJiM0MzsJICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzCiYjNDM7CSAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dAomIzQzOwkgKiBkaXNhYmxpbmcgQ1BVIGhvdHBsdWcsIHNvIGRpc2FibGUgaXQgaGVyZS4KJiM0MzsJICovCiYjNDM7CXJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpOwomIzQzOwlpZiAodmFsICZhbXA7IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKQomIzQzOwkJY3B1X2hvdHBsdWdfZGlzYWJsZSgpOwomIzQzOwogCS8qCiAJICogU2V0dGluZyBjcmFzaF9rZXhlY19wb3N0X25vdGlmaWVycyB0byAmIzM5O3RydWUmIzM5OyB0byBlbnN1cmUgdGhhdCBTTlAgcGFuaWMKIAkgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuCkBAIC02ODYsMTAgJiM0Mzs5MzEsMTIgQEAgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKQogCWlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFR01FTlRFRF9STVApKQogCQlyZG1zcnEoTVNSX0FNRDY0X1JNUF9DRkcsIHJtcF9jZmcpOwogCi0JaWYgKHJtcF9jZmcgJmFtcDsgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRCkKJiM0MzsJaWYgKHJtcF9jZmcgJmFtcDsgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRCkgewogCQlyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTsKLQllbHNlCiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1JNUE9QVCk7CiAJCXJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTsKJiM0MzsJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMKaW5kZXggY2E0NzNjYTE5OGI4MS4uYzAwMmE3Y2EyNmE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jCkBAIC0xNDc3LDYgJiM0MzsxNDc3LDkgQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZCkKIAl9CiAKIAlzbnBfaHZfZml4ZWRfcGFnZXNfc3RhdGVfdXBkYXRlKHNldiwgSFZfRklYRUQpOwomIzQzOwomIzQzOwlzbnBfc2V0dXBfcm1wb3B0KCk7CiYjNDM7CiAJc2V2LSZndDtzbnBfaW5pdGlhbGl6ZWQgPSB0cnVlOwogCWRldl9kYmcoc2V2LSZndDtkZXYsICYjMzQ7U0VWLVNOUCBmaXJtd2FyZSBpbml0aWFsaXplZCwgU0VWLVRJTyBpcyAlc1xuJiMzNDssCiAJCWRhdGEudGlvX2VuID8gJiMzNDtlbmFibGVkJiMzNDsgOiAmIzM0O2Rpc2FibGVkJiMzNDspOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDE4CgkJCQkJCQlvdXRwdXQ6IDEwOQoJCQkJCQkJdGhvdWdodHM6IDEyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50OiBBTUQgUk1QT1BUIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiwgc3BlY2lmaWNhbGx5IHRpZWQgdG8gU0VWLVNOUC4gSXQgdG91Y2hlcyBmaWxlcyBpbiBgYXJjaC94ODZgLCBgZHJpdmVycy9jcnlwdG9gIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgbWVtb3J5IGVuY3J5cHRpb24gYW5kIHNlY3VyZSBuZXN0ZWQgcGFnaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmcgaW4gb3VyIHR5cGljYWwgZW52aXJvbm1lbnQ/JiMzNDsKClRoaXMgZGVwZW5kcyBvbiBTRVYtU05QLCBhbmQgd2UgYWxsIGtub3cgdGhhdCYjMzk7cyBBTUQtc3BlY2lmaWMgaGFyZHdhcmUsIG5hbWVseSBFUFlDIHByb2Nlc3NvcnMgd2l0aCB0aGUgZmVhdHVyZSBlbmFibGVkLiBJIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IG91ciBzZXR1cCDigJMgR0NFIGluc3RhbmNlcywgc3RhbmRhcmQgUUVNVS4gQ2FuIHdlIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGU/ICBXZSBrbm93IFFFTVUgKmNhbiogZW11bGF0ZSAqc29tZSogU0VWIGZlYXR1cmVzLCBidXQgZm9yIFNFVi1TTlAgKmhvc3QqIGZlYXR1cmVzLCBpdCYjMzk7cyBwcmV0dHkgbXVjaCBhIGdpdmVuIHlvdSBuZWVkIGEgcGh5c2ljYWwgbWFjaGluZSB3aXRoIFNOUCBlbmFibGVkLCBvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aCBTTlAuCgpUaGUgY29kZSBpdHNlbGYgaGFzIGNoZWNrcywgdGhhbmtmdWxseS4gVGhlcmUmIzM5O3MgYSBgcm1wb3B0X2NhcGFibGUoKWAgZnVuY3Rpb24gd2hpY2gsIGluIHR1cm4sIGNoZWNrcyBmb3IgYm90aCBgWDg2X0ZFQVRVUkVfUk1QT1BUYCBhbmQgYENDX0FUVFJfSE9TVF9TRVZfU05QYC4gSWYgZWl0aGVyIG9mIHRob3NlIGFyZSBmYWxzZSwgdGhlIHdob2xlIHRoaW5nIGp1c3QgYmFpbHMgZWFybHkuICBNeSBodW5jaCBpcywgdGhvc2UgY2hlY2tzIGFyZSBnb2luZyB0byBmYWlsIGluIG91ciBzdGFuZGFyZCBTeXprYWxsZXIgZW52aXJvbm1lbnRzLiAgR0NFIGluc3RhbmNlcz8gIE5vcGUsIHRoZXkgZG9uJiMzOTt0IGV4cG9zZSBTRVYtU05QIGhvc3QgY2FwYWJpbGl0aWVzIHRvIHRoZSBndWVzdCwgZXZlbiBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAqaXMqIEFNRC4gSXQgd2lsbCBiZSB1bmxpa2VseSwgZXZlbiBpZiB0aGV5IGFyZSBBTUQsIHRvIHN1cHBvcnQgbmVzdGVkIFNFVi1TTlAuCgpBbHJpZ2h0LCBTeXprYWxsZXIgZG9lcyB0ZXN0IEtWTSwgYnV0IGRvZXMgaXQgdGVzdCBTRVYtU05QPyBJIGJlbGlldmUgaXQgZG9lcywgYnV0IHRlc3RpbmcgdGhlIGhvc3Qtc2lkZSBTRVYtU05QIGZ1bmN0aW9uYWxpdHkgYWJzb2x1dGVseSByZXF1aXJlcyB0aGUgaG9zdCB0byAqaGF2ZSogU0VWLVNOUC4gIFNvLCBoZXJlIGlzIHRoZSBsaXRtdXMgdGVzdDogVGhlIGd1aWRhbmNlIHNheXMgaWYgdGhlIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLCB0aGVuIGl04oCZcyBub3Qgd29ydGggZnV6emluZy4KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgUUVNVSBkb2VzbiYjMzk7dCAqZW11bGF0ZSogU0VWLVNOUCBhdCB0aGUgaG9zdCBsZXZlbC4gSXQgcmVsaWVzIG9uIEtWTSBhbmQgdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgdGhhdCBmdW5jdGlvbmFsaXR5LiAgSXQgZG9lc24mIzM5O3Qgc29mdHdhcmUtZW11bGF0ZSB0aGUgbWVtb3J5IGVuY3J5cHRpb24gYW5kIENQVSBtaWNyb2NvZGUgbmVlZGVkIGZvciB0aGUgUk1QIHRhYmxlIGFuZCBgUk1QT1BUYCBpbnN0cnVjdGlvbi4gVGhlIFRDRyBlbXVsYXRpb24gaXNu4oCZdCBldmVuIGluIHRoZSBnYW1lIGhlcmUg4oCTIFRDRyBkb2VzbuKAmXQgZW11bGF0ZSBtZW1vcnkgZW5jcnlwdGlvbi4KClNvLCBpbiBzdGFuZGFyZCBRRU1VL0dDRSwgYFg4Nl9GRUFUVVJFX1JNUE9QVGAgYW5kIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgYXJlIGdvaW5nIHRvIGJlIGZhbHNlLiBUaGUgY29kZSBpcyB1bnJlYWNoYWJsZS4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgaG93IGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAgaXMgZGV0ZXJtaW5lZDogaXQgY2hlY2tzIGBYODZfRkVBVFVSRV9TRVZfU05QYCwgd2hpY2ggb25seSBzaG93cyB1cCBvbiBBTUQgQ1BVcyB3aXRoIFNOUCBlbmFibGVkIGluIHRoZSBCSU9TLiAgU3l6a2FsbGVyIHJ1bnMgaW4gUUVNVSBWTXMuIFVubGVzcyB3ZSYjMzk7cmUgcnVubmluZyBpdCBvbiBhICpzcGVjaWZpYyogYmFyZS1tZXRhbCBBTUQgbWFjaGluZSB3aXRoIFNOUCBlbmFibGVkLCB0aGF0IGZlYXR1cmUgYml0IHdvbuKAmXQgYmUgc2V0LiAgSXQmIzM5O3MganVzdCBub3QgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgoqKldvcnRoRnV6emluZz1mYWxzZS4qKgoKTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWxpdHkgdGhhdCBkZXBlbmRzIG9uIFNFVi1TTlAgaG9zdCBlbnZpcm9ubWVudHMsIHJlcXVpcmluZyBzcGVjaWZpYyBBTUQgaGFyZHdhcmUgYW5kIEJJT1MgY29uZmlndXJhdGlvbi4gVGhlc2UgZmVhdHVyZXMgYXJlbiYjMzk7dCBlbXVsYXRlZCBieSBvdXIgc3RhbmRhcmQgUUVNVSBvciBhdmFpbGFibGUgaW4gdHlwaWNhbCBHQ0UgVk1zLCBtYWtpbmcgdGhlIG5ldyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlLiBJIGNhbiBzZWUgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW1gLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgc2V2X3ZtX2Rlc3Ryb3lgIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgYW5kIEkgc2VlIGBzbnBfc2V0dXBfcm1wb3B0YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYF9fc2V2X3NucF9pbml0X2xvY2tlZGAgaW4gYGRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNgLCBhbmQgYm90aCBmdW5jdGlvbnMgc3RhcnQgd2l0aCBgaWYgKCFybXBvcHRfY2FwYWJsZSgpKSByZXR1cm47YC4gVGhlcmVmb3JlLCBnaXZlbiBhbGwgb2YgdGhlIGFib3ZlLCBJ4oCZbSBnb29kIHdpdGggdGhhdCBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTc6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIGluc3RydWN0aW9uIHVzZWQgaW4gU0VWLVNOUCBob3N0IGVudmlyb25tZW50cy4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBBTUQgaGFyZHdhcmUgd2l0aCBTRVYtU05QIGFuZCBSTVBPUFQgc3VwcG9ydCBlbmFibGVkIGluIHRoZSBCSU9TLiBUaGVzZSBoYXJkd2FyZSBmZWF0dXJlcyBhcmUgbm90IHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvVENHIG9yIGF2YWlsYWJsZSBpbiB0eXBpY2FsIEdDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbmV3IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIGluc3RydWN0aW9uIHVzZWQgaW4gU0VWLVNOUCBob3N0IGVudmlyb25tZW50cy4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBBTUQgaGFyZHdhcmUgd2l0aCBTRVYtU05QIGFuZCBSTVBPUFQgc3VwcG9ydCBlbmFibGVkIGluIHRoZSBCSU9TLiBUaGVzZSBoYXJkd2FyZSBmZWF0dXJlcyBhcmUgbm90IHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvVENHIG9yIGF2YWlsYWJsZSBpbiB0eXBpY2FsIEdDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbmV3IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMTc6MTE6NDUuMzQ2Njg4ODM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNTYzODU3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24gdXNlZCBpbiBTRVYtU05QIGhvc3QgZW52aXJvbm1lbnRzLiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIEFNRCBoYXJkd2FyZSB3aXRoIFNFVi1TTlAgYW5kIFJNUE9QVCBzdXBwb3J0IGVuYWJsZWQgaW4gdGhlIEJJT1MuIFRoZXNlIGhhcmR3YXJlIGZlYXR1cmVzIGFyZSBub3Qgc29mdHdhcmUtZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9UQ0cgb3IgYXZhaWxhYmxlIGluIHR5cGljYWwgR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBuZXcgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE3OjExOjQ1LjM0NjY5NTMzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxMDk3NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTUzMzM5OTUzMDE4ODZlNzRjYTBiNjQzYjIwMzlhNTI5NjVkM2Y4ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAxNzoxMTo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbmluZGV4IDNkMDk0MGEzYjlmMzcuLmRiY2NkZTllZTVjZDUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcXG5AQCAtNzYsNyArNzYsNyBAQFxcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0s4XFx0XFx0XFx0KCAzKjMyKyA0KSAvKiBPcHRlcm9uLCBBdGhsb242NCAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjVcXHRcXHQoIDMqMzIrIDUpIC8qIENQVSBiYXNlZCBvbiBaZW41IG1pY3JvYXJjaGl0ZWN0dXJlICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONlxcdFxcdCggMyozMisgNikgLyogQ1BVIGJhc2VkIG9uIFplbjYgbWljcm9hcmNoaXRlY3R1cmUgKi9cXG4tLyogRnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMyozMisgNykgKi9cXG4rI2RlZmluZSBYODZfRkVBVFVSRV9STVBPUFRcXHRcXHQoIDMqMzIrIDcpIC8qIFN1cHBvcnQgZm9yIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24gKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0NcXHQoIDMqMzIrIDgpIC8qIFxcXCJjb25zdGFudF90c2NcXFwiIFRTQyB0aWNrcyBhdCBhIGNvbnN0YW50IHJhdGUgKi9cXG4gLyogZnJlZTogd2FzICNkZWZpbmUgWDg2X0ZFQVRVUkVfVVBcXHQoIDMqMzIrIDkpICogXFxcInVwXFxcIiBTTVAga2VybmVsIHJ1bm5pbmcgb24gVVAgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9BUlRcXHRcXHRcXHQoIDMqMzIrMTApIC8qIFxcXCJhcnRcXFwiIEFsd2F5cyBydW5uaW5nIHRpbWVyIChBUlQpICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcXG5pbmRleCAxOGM0YmU3NWU5MjcxLi5kMmNiMGE3Y2QwYTJmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcXG5AQCAtNzYxLDYgKzc2MSw5IEBAXFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRF9CSVRcXHQwXFxuICNkZWZpbmUgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRFxcdEJJVF9VTEwoTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRF9CSVQpXFxuICNkZWZpbmUgTVNSX0FNRDY0X1JNUF9TRUdNRU5UX1NISUZUKHgpXFx0KCgoeCkgXFx1MDAyNiBHRU5NQVNLX1VMTCgxMywgOCkpIFxcdTAwM2VcXHUwMDNlIDgpXFxuKyNkZWZpbmUgTVNSX0FNRDY0X1JNUE9QVF9CQVNFXFx0XFx0MHhjMDAxMDEzOVxcbisjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFX0JJVFxcdDBcXG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRVxcdFxcdEJJVF9VTEwoTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUKVxcbiBcXG4gI2RlZmluZSBNU1JfU1ZTTV9DQUFcXHRcXHRcXHQweGMwMDFmMDAwXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXFxuaW5kZXggNTk0Y2ZhMTljYmQ0Yi4uMDliMWM1ZDMzNzkwMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oXFxuQEAgLTY2Miw2ICs2NjIsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2xlYWtfcGFnZXModTY0IHBmbiwgdW5zaWduZWQgaW50IHBhZ2VzKVxcbiBcXHRfX3NucF9sZWFrX3BhZ2VzKHBmbiwgcGFnZXMsIHRydWUpO1xcbiB9XFxuIGludCBzbnBfcHJlcGFyZSh2b2lkKTtcXG4rdm9pZCBzbnBfcm1wb3B0X2FsbF9waHlzbWVtKHZvaWQpO1xcbit2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCk7XFxuIHZvaWQgc25wX3NodXRkb3duKHZvaWQpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG5AQCAtNjgwLDYgKzY4Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgbnBhZ2VzKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQga2R1bXBfc2V2X2NhbGxiYWNrKHZvaWQpIHsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc25wX2ZpeHVwX2U4MjBfdGFibGVzKHZvaWQpIHt9XFxuIHN0YXRpYyBpbmxpbmUgaW50IHNucF9wcmVwYXJlKHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH1cXG4rc3RhdGljIGlubGluZSB2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCkge31cXG4rc3RhdGljIGlubGluZSB2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZCkge31cXG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9zaHV0ZG93bih2b2lkKSB7fVxcbiAjZW5kaWZcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXFxuaW5kZXggOTM3MTI5Y2U2YTk2NC4uMDIxYzBiZjIyZGUyMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xcbkBAIC02Nyw2ICs2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IGNwdWlkX2JpdHNbXSA9IHtcXG4gXFx0eyBYODZfRkVBVFVSRV9QRVJGTU9OX1YyLFxcdFxcdENQVUlEX0VBWCwgIDAsIDB4ODAwMDAwMjIsIDAgfSxcXG4gXFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1YyLFxcdFxcdENQVUlEX0VBWCwgIDEsIDB4ODAwMDAwMjIsIDAgfSxcXG4gXFx0eyBYODZfRkVBVFVSRV9BTURfTEJSX1BNQ19GUkVFWkUsXFx0Q1BVSURfRUFYLCAgMiwgMHg4MDAwMDAyMiwgMCB9LFxcbitcXHR7IFg4Nl9GRUFUVVJFX1JNUE9QVCxcXHRcXHRcXHRDUFVJRF9FRFgsICAwLCAweDgwMDAwMDI1LCAwIH0sXFxuIFxcdHsgWDg2X0ZFQVRVUkVfQU1EX0hUUl9DT1JFUyxcXHRcXHRDUFVJRF9FQVgsIDMwLCAweDgwMDAwMDI2LCAwIH0sXFxuIFxcdHsgMCwgMCwgMCwgMCwgMCB9XFxuIH07XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuaW5kZXggNDI3MjI5MzQ3ODc2Ni4uYzU3NDg0OWIxNTg3OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xcbkBAIC0yOTkyLDYgKzI5OTIsMTYgQEAgdm9pZCBzZXZfdm1fZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc25wX2RlY29tbWlzc2lvbl9jb250ZXh0KGt2bSkpXFxuIFxcdFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFBlcmZvcm0gUk1QIG9wdGltaXphdGlvbnMgb24gbWVtb3J5IGZyZWVkIGJ5IHRlcm1pbmF0aW5nXFxuK1xcdFxcdCAqIGd1ZXN0cy4gIFRoZSBzY2FuIGlzIGRlZmVycmVkLCBzbyBpdCBub3JtYWxseSBydW5zIGFmdGVyXFxuK1xcdFxcdCAqIHNldl9nbWVtX2ludmFsaWRhdGUoKSBoYXMgY29udmVydGVkIHRoaXMgZ3Vlc3QncyBwYWdlcyBiYWNrIHRvXFxuK1xcdFxcdCAqIHNoYXJlZCwgYW5kIHBpY2tzIHRoZW0gdXAgdGhlbi4gIEEgdmVyeSBsYXJnZSBndWVzdCB3aG9zZVxcbitcXHRcXHQgKiBjb252ZXJzaW9uIGhhcyBub3QgZmluaXNoZWQgYnkgdGhlbiBpcyBwaWNrZWQgdXAgYnkgYSBsYXRlclxcbitcXHRcXHQgKiB0ZWFyZG93bidzIHNjYW4uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzbnBfcm1wb3B0X2FsbF9waHlzbWVtKCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHNldl91bmJpbmRfYXNpZChrdm0sIHNldi1cXHUwMDNlaGFuZGxlKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuYyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXFxuaW5kZXggY2ZmMjg1ZDhhZDhlMy4uMjkxYTM2MDI5MWViNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xcbisrKyBiL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jXFxuQEAgLTE5LDYgKzE5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hbWQtaW9tbXUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vc3BlYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Nldi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXFx1MDAzZVxcbkBAIC0xMjQsNiArMTI1LDIwIEBAIHN0YXRpYyB2b2lkICpybXBfYm9va2tlZXBpbmcgX19yb19hZnRlcl9pbml0O1xcbiBcXG4gc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTtcXG4gXFxuK3N0YXRpYyBjcHVtYXNrX3Zhcl90IHJtcG9wdF9jcHVtYXNrO1xcbitzdGF0aWMgcGh5c19hZGRyX3Qgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kO1xcbitcXG4rZW51bSBybXBvcHRfZnVuY3Rpb24ge1xcbitcXHRSTVBPUFRfRlVOQ19WRVJJRllfQU5EX1JFUE9SVF9TVEFUVVMsXFxuK1xcdFJNUE9QVF9GVU5DX1JFUE9SVF9TVEFUVVNcXG4rfTtcXG4rXFxuKyNkZWZpbmUgUk1QT1BUX1dPUktfVElNRU9VVFxcdDEwMDAwXFxuK1xcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcXG4rc3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgcm1wb3B0X2RlbGF5ZWRfd29yaztcXG4rc3RhdGljIERFRklORV9NVVRFWChybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4gc3RhdGljIExJU1RfSEVBRChzbnBfbGVha2VkX3BhZ2VzX2xpc3QpO1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNucF9sZWFrZWRfcGFnZXNfbGlzdF9sb2NrKTtcXG4gXFxuQEAgLTUxMyw3ICs1MjgsNiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9oc2F2ZV9wYSh2b2lkICphcmcpXFxuIFxcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbiBcXHR1NjQgdmFsO1xcbiBcXG4gXFx0LypcXG5AQCAtNTI2LDE0ICs1NDAsMjEgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXFxuIFxcbiBcXHRjbGVhcl9ybXAoKTtcXG4gXFxuLVxcdGNwdXNfcmVhZF9sb2NrKCk7XFxuK1xcdC8qXFxuK1xcdCAqIERpc2FibGUgQ1BVIGhvdHBsdWcgYmVmb3JlIGVuYWJsaW5nIFNOUDogbm8gQ1BVIG1heSBjb21lIG9ubGluZVxcbitcXHQgKiB3aXRob3V0IFNucEVuIHdoaWxlIFNOUCBpcyBhY3RpdmUsIGFuZCBub25lIG1heSBnbyBvZmZsaW5lIGR1cmluZ1xcbitcXHQgKiBlbmFibGUuICBUaGlzIGtlZXBzIGNwdV9vbmxpbmVfbWFzayBzdGFibGUgZm9yIHRoZSBjaGVjayBhbmQgdGhlXFxuK1xcdCAqIG9uX2VhY2hfY3B1KCkgY2FsbHMgYmVsb3csIHNvIGNwdXNfcmVhZF9sb2NrKCkgaXMgbm90IG5lZWRlZC4gIEl0IGlzXFxuK1xcdCAqIHJlLWVuYWJsZWQgaW4gc25wX3NodXRkb3duKCkgb25jZSB0aGUgZmlybXdhcmUgZGlzYWJsZXMgU05QLlxcbitcXHQgKi9cXG4rXFx0Y3B1X2hvdHBsdWdfZGlzYWJsZSgpO1xcbiBcXG4gXFx0aWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpIHtcXG4tXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGNwdV9ob3RwbHVnX2VuYWJsZSgpO1xcbiBcXHRcXHRwcl93YXJuKFxcXCJTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXFx1MDAzYy1cXHUwMDNlICUqcGJsIHByZXNlbnQgbWFza3MpLlxcXFxuXFxcIixcXG4gXFx0XFx0XFx0Y3B1bWFza19wcl9hcmdzKGNwdV9vbmxpbmVfbWFzayksXFxuIFxcdFxcdFxcdGNwdW1hc2tfcHJfYXJncyhjcHVfcHJlc2VudF9tYXNrKSk7XFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4gXFxuIFxcdHdiaW52ZF9vbl9hbGxfY3B1cygpO1xcbkBAIC01NDgsMTQgKzU2OSwyOSBAQCBpbnQgc25wX3ByZXBhcmUodm9pZClcXG4gXFx0LyogU05QX0lOSVQgcmVxdWlyZXMgTVNSX1ZNX0hTQVZFX1BBIHRvIGJlIGNsZWFyZWQgb24gYWxsIENQVXMuICovXFxuIFxcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcXG4gXFxuLVxcdHJldCA9IDA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3ByZXBhcmUsIFxcXCJjY3BcXFwiKTtcXG4gXFxuLXVubG9jazpcXG4tXFx0Y3B1c19yZWFkX3VubG9jaygpO1xcbitzdGF0aWMgdm9pZCBzbnBfY2xlYW51cF9ybXBvcHQodm9pZClcXG4re1xcbitcXHRpbnQgY3B1O1xcbiBcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xcbitcXG4rXFx0aWYgKCFybXBvcHRfd3EpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yayk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7XFxuK1xcbitcXHRmb3JfZWFjaF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzaylcXG4rXFx0XFx0d3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgMCk7XFxuK1xcbitcXHRmcmVlX2NwdW1hc2tfdmFyKHJtcG9wdF9jcHVtYXNrKTtcXG4rXFx0cm1wb3B0X3BhX3N0YXJ0ID0gcm1wb3B0X3BhX2VuZCA9IDA7XFxuK1xcdHJtcG9wdF93cSA9IE5VTEw7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXFxcImNjcFxcXCIpO1xcbiBcXG4gdm9pZCBzbnBfc2h1dGRvd24odm9pZClcXG4ge1xcbkBAIC01NjUsMTEgKzYwMSwyMDkgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZClcXG4gXFx0aWYgKHN5c2NmZyBcXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHQvKlxcbitcXHQgKiBDbGVhciB0aGUgUk1QT1BUX0JBU0UgTVNScyB3aGlsZSBDUFUgaG90cGx1ZyBpcyBzdGlsbCBkaXNhYmxlZCwgdGhlblxcbitcXHQgKiByZS1lbmFibGUgaG90cGx1ZyBub3cgdGhhdCB0aGUgZmlybXdhcmUgaGFzIGRpc2FibGVkIFNOUC4gIEEgbGVnYWN5IFNOUFxcbitcXHQgKiBzaHV0ZG93biByZXR1cm5zIGFib3ZlIHdpdGggU25wRW4gc3RpbGwgc2V0IGFuZCBsZWF2ZXMgaG90cGx1ZyBkaXNhYmxlZC5cXG4rXFx0ICovXFxuK1xcdHNucF9jbGVhbnVwX3JtcG9wdCgpO1xcbitcXHRjcHVfaG90cGx1Z19lbmFibGUoKTtcXG4rXFxuIFxcdGNsZWFyX3JtcCgpO1xcbiBcXHRvbl9lYWNoX2NwdShtZmRfcmVjb25maWd1cmUsIE5VTEwsIDEpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcXFwiY2NwXFxcIik7XFxuIFxcbitzdGF0aWMgYm9vbCBybXBvcHRfY2FwYWJsZSh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1JNUE9QVCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJNUE9QVDogRjIgMEYgMDEgRkNcXG4rICogICBJbnB1dDogIFJBWCA9IHN5c3RlbSBwaHlzaWNhbCBhZGRyZXNzICgxR0IgYWxpZ25lZClcXG4rICogICAgICAgICAgIFJDWCA9IG9wZXJhdGlvbiB0eXBlXFxuKyAqICAgT3V0cHV0OiBDRiBzZXQgaWYgdGhlIHJhbmdlIHdhcyBvcHRpbWl6ZWRcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBfX3JtcG9wdCh1NjQgcGFfc3RhcnQsIHU2NCBvcF90eXBlKVxcbit7XFxuK1xcdGJvb2wgb3B0aW1pemVkO1xcbitcXG4rXFx0YXNtIHZvbGF0aWxlKFxcXCIuYnl0ZSAweGYyLCAweDBmLCAweDAxLCAweGZjXFxcIlxcbitcXHRcXHQgICAgIDogXFxcIj1AY2NjXFxcIiAob3B0aW1pemVkKVxcbitcXHRcXHQgICAgIDogXFxcImFcXFwiIChwYV9zdGFydCksIFxcXCJjXFxcIiAob3BfdHlwZSlcXG4rXFx0XFx0ICAgICA6IFxcXCJtZW1vcnlcXFwiLCBcXFwiY2NcXFwiKTtcXG4rXFxuK1xcdHJldHVybiBvcHRpbWl6ZWQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJtcG9wdCh1NjQgcGEpXFxuK3tcXG4rXFx0dTY0IHBhX3N0YXJ0ID0gQUxJR05fRE9XTihwYSwgU1pfMUcpO1xcbitcXHR1NjQgb3BfdHlwZSA9IFJNUE9QVF9GVU5DX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUztcXG4rXFxuK1xcdF9fcm1wb3B0KHBhX3N0YXJ0LCBvcF90eXBlKTtcXG4rfVxcbitcXG4rLypcXG4rICogJ3ZhbCcgaXMgYSBzeXN0ZW0gcGh5c2ljYWwgYWRkcmVzcy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJtcG9wdF9zbXAodm9pZCAqdmFsKVxcbit7XFxuK1xcdHJtcG9wdCgodTY0KXZhbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJNUE9QVCBvcHRpbWl6YXRpb25zIHNraXAgUk1QIGNoZWNrcyBhdCAxR0IgZ3JhbnVsYXJpdHkgaWYgdGhpc1xcbisgKiByYW5nZSBvZiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJtcG9wdF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdGNwdW1hc2tfdmFyX3QgZm9sbG93ZXJfbWFzaztcXG4rXFx0cGh5c19hZGRyX3QgcGE7XFxuK1xcdGludCB0aGlzX2NwdTtcXG4rXFxuK1xcdHByX2luZm8oXFxcIkF0dGVtcHQgUk1QIG9wdGltaXphdGlvbnMgb24gcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBAMUdCIGFsaWdubWVudCBbMHglMDE2bGx4IC0gMHglMDE2bGx4XVxcXFxuXFxcIixcXG4rXFx0XFx0cm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kKTtcXG4rXFxuK1xcdGlmICghYWxsb2NfY3B1bWFza192YXIoXFx1MDAyNmZvbGxvd2VyX21hc2ssIEdGUF9LRVJORUwpKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIlJNUCBvcHRpbWl6YXRpb24gcGFzcyBza2lwcGVkOiBjcHVtYXNrIGFsbG9jYXRpb24gZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSTVBPUFQgc2NhbnMgdGhlIFJNUCB0YWJsZSwgc3RvcmVzIHRoZSByZXN1bHQgb2YgdGhlIHNjYW4gaW4gdGhlXFxuK1xcdCAqIHJlc2VydmVkIHByb2Nlc3NvciBtZW1vcnkuIFRoZSBSTVAgc2NhbiBpcyB0aGUgbW9zdCBleHBlbnNpdmVcXG4rXFx0ICogcGFydC4gSWYgYSBzZWNvbmQgUk1QT1BUIG9jY3VycywgaXQgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBzY2FuXFxuK1xcdCAqIGlmIHRoZXkgY2FuIHNlZSBhIGNhY2hlZCByZXN1bHQgaW4gdGhlIHJlc2VydmVkIHByb2Nlc3NvciBtZW1vcnkuXFxuK1xcdCAqXFxuK1xcdCAqIERvIFJNUE9QVCBvbiBvbmUgQ1BVIGFsb25lLiBUaGVuLCBmb2xsb3cgdGhhdCB1cCB3aXRoIFJNUE9QVFxcbitcXHQgKiBvbiBldmVyeSBvdGhlciBwcmltYXJ5IHRocmVhZC4gRm9sbG93ZXJzIGFyZSBcXFwiZGVzaWduZWQgdG9cXFwiXFxuK1xcdCAqIHNraXAgdGhlIHNjYW4gaWYgdGhleSBzZWUgdGhlIFxcXCJjYWNoZWRcXFwiIHNjYW4gcmVzdWx0cy5cXG4rXFx0ICpcXG4rXFx0ICogUGluIHRoZSB3b3JrZXIgdG8gdGhlIGN1cnJlbnQgQ1BVIGZvciB0aGUgbGVhZGVyIGxvb3Agc28gdGhhdFxcbitcXHQgKiB0aGlzX2NwdSByZW1haW5zIHZhbGlkIGFuZCB0aGUgUk1QT1BUIGluc3RydWN0aW9uIGV4ZWN1dGVzIG9uXFxuK1xcdCAqIHRoZSBjb3JyZWN0IENQVS4gIFVzZSBtaWdyYXRlX2Rpc2FibGUoKSByYXRoZXIgdGhhbiBnZXRfY3B1KCkgdG9cXG4rXFx0ICogcHJldmVudCBtaWdyYXRpb24gd2hpbGUgc3RpbGwgYWxsb3dpbmcgcHJlZW1wdGlvbi5cXG4rXFx0ICovXFxuK1xcdG1pZ3JhdGVfZGlzYWJsZSgpO1xcbitcXHR0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcXG4rXFxuK1xcdGNwdW1hc2tfYW5kbm90KGZvbGxvd2VyX21hc2ssIHJtcG9wdF9jcHVtYXNrLFxcbitcXHRcXHQgICAgICAgdG9wb2xvZ3lfc2libGluZ19jcHVtYXNrKHRoaXNfY3B1KSk7XFxuK1xcbitcXHRmb3IgKHBhID0gcm1wb3B0X3BhX3N0YXJ0OyBwYSBcXHUwMDNjIHJtcG9wdF9wYV9lbmQ7IHBhICs9IFNaXzFHKVxcbitcXHRcXHRybXBvcHQocGEpO1xcbitcXG4rXFx0bWlncmF0ZV9lbmFibGUoKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZvbGxvd2VyczogcnVuIFJNUE9QVCBvbiB0aGUgcmVtYWluaW5nIGNvcmVzLiAgY3B1c19yZWFkX2xvY2soKSBpc1xcbitcXHQgKiBpbnRlbnRpb25hbGx5IG5vdCBoZWxkIGhlcmU6IENQVSBob3RwbHVnIGlzIGRpc2FibGVkIGZvciB0aGUgZW50aXJlXFxuK1xcdCAqIHRpbWUgU05QIGlzIGFjdGl2ZSAoc2VlIHNucF9wcmVwYXJlKCkpLCBhbmQgdGhpcyB3b3JrIG9ubHkgcnVucyB3aGlsZVxcbitcXHQgKiBTTlAgaXMgYWN0aXZlLCBzbyB0aGUgZm9sbG93ZXIgc2V0IHN0YXlzIHZhbGlkIGFjcm9zcyB0aGUgd2hvbGUgc2Nhbi5cXG4rXFx0ICovXFxuK1xcdGZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhIFxcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgKz0gU1pfMUcpXFxuK1xcdFxcdG9uX2VhY2hfY3B1X21hc2soZm9sbG93ZXJfbWFzaywgcm1wb3B0X3NtcCwgKHZvaWQgKilwYSwgdHJ1ZSk7XFxuK1xcbitcXHRmcmVlX2NwdW1hc2tfdmFyKGZvbGxvd2VyX21hc2spO1xcbit9XFxuK1xcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZClcXG4re1xcbitcXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcXG4rXFxuK1xcdGlmICghcm1wb3B0X3dxKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtb2RfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssXFxuK1xcdFxcdFxcdCBtc2Vjc190b19qaWZmaWVzKFJNUE9QVF9XT1JLX1RJTUVPVVQpKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9ybXBvcHRfYWxsX3BoeXNtZW0sIFxcXCJrdm0tYW1kXFxcIik7XFxuK1xcbit2b2lkIHNucF9zZXR1cF9ybXBvcHQodm9pZClcXG4re1xcbitcXHR1NjQgcm1wb3B0X2Jhc2U7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cm1wb3B0X3dxX211dGV4KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE9uIHJlLWluaXRpYWxpemF0aW9uIGFmdGVyIGEgbGVnYWN5IFNOUCBzaHV0ZG93biAoU05QX1NIVVRET1dOX0VYXFxuK1xcdCAqIHdpdGggeDg2X3NucF9zaHV0ZG93bj0wKSwgc25wX3NodXRkb3duKCkgYW5kIHRodXMgc25wX2NsZWFudXBfcm1wb3B0KClcXG4rXFx0ICogYXJlIHNraXBwZWQsIHNvIHRoZSB3b3JrcXVldWUsIGRlbGF5ZWQgd29yaywgY3B1bWFzayBhbmQgcGVyLUNQVVxcbitcXHQgKiBSTVBPUFRfQkFTRSBNU1JzIGFyZSBzdGlsbCBzZXQgdXAgYW5kIHZhbGlkIChTbnBFbiBzdGF5ZWQgc2V0IGFuZFxcbitcXHQgKiBDUFUgaG90cGx1ZyBzdGF5ZWQgZGlzYWJsZWQpLiAgUmF0aGVyIHRoYW4gcmUtZG9pbmcgdGhlIHNldHVwLCB3aGljaFxcbitcXHQgKiB3b3VsZCBsZWFrIHRoZSBleGlzdGluZyBzdGF0ZSwganVzdCByZS1xdWV1ZSB0aGUgb3B0aW1pemF0aW9uIHBhc3NcXG4rXFx0ICogdG8gcmUtb3B0aW1pemUgYW55IG1lbW9yeSB0aGUgcHJldmlvdXMgU05QIHNlc3Npb24gZGUtb3B0aW1pemVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJtcG9wdF93cSkge1xcbitcXHRcXHRxdWV1ZV9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogQ3JlYXRlIGFuIFJNUE9QVC1zcGVjaWZpYyB3b3JrcXVldWUgdG8gYXZvaWQgc2NoZWR1bGluZ1xcbitcXHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxcbitcXHQgKi9cXG4rXFx0cm1wb3B0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJybXBvcHRfd3FcXFwiLCBXUV9VTkJPVU5ELCAxKTtcXG4rXFx0aWYgKCFybXBvcHRfd3EpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIHJtcG9wdF93b3JrX2hhbmRsZXIpO1xcbitcXG4rXFx0aWYgKCF6YWxsb2NfY3B1bWFza192YXIoXFx1MDAyNnJtcG9wdF9jcHVtYXNrLCBHRlBfS0VSTkVMKSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBSTVBPUFQgY3B1bWFza1xcXFxuXFxcIik7XFxuK1xcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHJtcG9wdF93cSk7XFxuK1xcdFxcdHJtcG9wdF93cSA9IE5VTEw7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIFJNUE9QVF9CQVNFIE1TUiBpcyBwZXItY29yZSwgc28gb25seSBvbmUgdGhyZWFkIHBlciBjb3JlIG5lZWRzXFxuK1xcdCAqIHRvIHNldCB1cCB0aGUgUk1QT1BUX0JBU0UgTVNSLiAgQWxsIHByaW1hcnkgdGhyZWFkcyBhcmUgb25saW5lLFxcbitcXHQgKiBvdGhlcndpc2UgU05QIHdvdWxkIG5vdCBoYXZlIGJlZW4gZW5hYmxlZC5cXG4rXFx0ICovXFxuK1xcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxcbitcXHRcXHRpZiAodG9wb2xvZ3lfaXNfcHJpbWFyeV90aHJlYWQoY3B1KSlcXG4rXFx0XFx0XFx0Y3B1bWFza19zZXRfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spO1xcbitcXG4rXFx0cm1wb3B0X3BhX3N0YXJ0ID0gQUxJR05fRE9XTihQRk5fUEhZUyhtaW5fbG93X3BmbiksIFNaXzFHKTtcXG4rXFx0cm1wb3B0X2Jhc2UgPSBybXBvcHRfcGFfc3RhcnQgfCBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFBlci1DUFUgUk1QT1BUIHRhYmxlcyBjb3ZlciBhdCBtb3N0IDIgVEIuICBQcm9ncmFtIGVhY2ggY29yZSdzXFxuK1xcdCAqIFJNUE9QVF9CQVNFIHdpdGggdGhlIHN0YXJ0IG9mIFJBTSB0byBvcHRpbWl6ZSB1cCB0byAyIFRCLlxcbitcXHQgKi9cXG4rXFx0Zm9yX2VhY2hfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spXFxuK1xcdFxcdHdybXNycV9vbl9jcHUoY3B1LCBNU1JfQU1ENjRfUk1QT1BUX0JBU0UsIHJtcG9wdF9iYXNlKTtcXG4rXFxuK1xcdHJtcG9wdF9wYV9lbmQgPSBBTElHTihQRk5fUEhZUyhtYXhfcGZuKSwgU1pfMUcpO1xcbitcXG4rXFx0LyogTGltaXQgbWVtb3J5IHNjYW5uaW5nIHRvIDJUQiBvZiBSQU0gKi9cXG4rXFx0aWYgKChybXBvcHRfcGFfZW5kIC0gcm1wb3B0X3BhX3N0YXJ0KSBcXHUwMDNlIFNaXzJUKSB7XFxuK1xcdFxcdHByX2luZm8oXFxcIlJNUE9QVCBjb3ZlcmFnZSBsaW1pdGVkIHRvIDJUQjsgbWVtb3J5IGFib3ZlIDB4JWxseCBub3Qgb3B0aW1pemVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRybXBvcHRfcGFfc3RhcnQgKyBTWl8yVCk7XFxuK1xcdFxcdHJtcG9wdF9wYV9lbmQgPSBybXBvcHRfcGFfc3RhcnQgKyBTWl8yVDtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogT25jZSBhbGwgcGVyLUNQVSBSTVBPUFQgdGFibGVzIGhhdmUgYmVlbiBjb25maWd1cmVkLCBlbmFibGUgUk1QT1BUXFxuK1xcdCAqIG9wdGltaXphdGlvbnMgb24gYWxsIHBoeXNpY2FsIG1lbW9yeS5cXG4rXFx0ICovXFxuK1xcdHF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFxcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLCAwKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsIFxcXCJjY3BcXFwiKTtcXG4rXFxuIC8qXFxuICAqIERvIHRoZSBuZWNlc3NhcnkgcHJlcGFyYXRpb25zIHdoaWNoIGFyZSB2ZXJpZmllZCBieSB0aGUgZmlybXdhcmUgYXNcXG4gICogZGVzY3JpYmVkIGluIHRoZSBTTlBfSU5JVF9FWCBmaXJtd2FyZSBjb21tYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBTTlBcXG5AQCAtNTc3LDYgKzgxMSw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcXFwiY2NwXFxcIik7XFxuICAqL1xcbiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXFxuIHtcXG4rXFx0dTY0IHZhbDtcXG4rXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT1NZUztcXG4gXFxuQEAgLTU4Niw2ICs4MjIsMTUgQEAgaW50IF9faW5pdCBzbnBfcm1wdGFibGVfaW5pdCh2b2lkKVxcbiBcXHRpZiAoIXNldHVwX3JtcHRhYmxlKCkpXFxuIFxcdFxcdHJldHVybiAtRU5PU1lTO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXFxuK1xcdCAqIFNucEVuIHNldCBhY3Jvc3Mgc2h1dGRvd24pLCBpbiB3aGljaCBjYXNlIHNucF9wcmVwYXJlKCkgYmFpbHMgd2l0aG91dFxcbitcXHQgKiBkaXNhYmxpbmcgQ1BVIGhvdHBsdWcsIHNvIGRpc2FibGUgaXQgaGVyZS5cXG4rXFx0ICovXFxuK1xcdHJkbXNycShNU1JfQU1ENjRfU1lTQ0ZHLCB2YWwpO1xcbitcXHRpZiAodmFsIFxcdTAwMjYgTVNSX0FNRDY0X1NZU0NGR19TTlBfRU4pXFxuK1xcdFxcdGNwdV9ob3RwbHVnX2Rpc2FibGUoKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFNldHRpbmcgY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMgdG8gJ3RydWUnIHRvIGVuc3VyZSB0aGF0IFNOUCBwYW5pY1xcbiBcXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXFxuQEAgLTY4NiwxMCArOTMxLDEyIEBAIGJvb2wgc25wX3Byb2JlX3JtcHRhYmxlX2luZm8odm9pZClcXG4gXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpXFxuIFxcdFxcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XFxuIFxcbi1cXHRpZiAocm1wX2NmZyBcXHUwMDI2IE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRUQpXFxuK1xcdGlmIChybXBfY2ZnIFxcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRCkge1xcbiBcXHRcXHRyZXR1cm4gcHJvYmVfc2VnbWVudGVkX3JtcHRhYmxlX2luZm8oKTtcXG4tXFx0ZWxzZVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1JNUE9QVCk7XFxuIFxcdFxcdHJldHVybiBwcm9iZV9jb250aWd1b3VzX3JtcHRhYmxlX2luZm8oKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jIGIvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xcbmluZGV4IGNhNDczY2ExOThiODEuLmMwMDJhN2NhMjZhOGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuY1xcbisrKyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcXG5AQCAtMTQ3Nyw2ICsxNDc3LDkgQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcXG4gXFx0fVxcbiBcXG4gXFx0c25wX2h2X2ZpeGVkX3BhZ2VzX3N0YXRlX3VwZGF0ZShzZXYsIEhWX0ZJWEVEKTtcXG4rXFxuK1xcdHNucF9zZXR1cF9ybXBvcHQoKTtcXG4rXFxuIFxcdHNldi1cXHUwMDNlc25wX2luaXRpYWxpemVkID0gdHJ1ZTtcXG4gXFx0ZGV2X2RiZyhzZXYtXFx1MDAzZWRldiwgXFxcIlNFVi1TTlAgZmlybXdhcmUgaW5pdGlhbGl6ZWQsIFNFVi1USU8gaXMgJXNcXFxcblxcXCIsXFxuIFxcdFxcdGRhdGEudGlvX2VuID8gXFxcImVuYWJsZWRcXFwiIDogXFxcImRpc2FibGVkXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE3OjExOjQ1LjkyODU5NDQwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3NTc0NDY3OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBTUQgUk1QT1BUIGluc3RydWN0aW9uIHVzZWQgaW4gU0VWLVNOUCBob3N0IGVudmlyb25tZW50cy4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBBTUQgaGFyZHdhcmUgd2l0aCBTRVYtU05QIGFuZCBSTVBPUFQgc3VwcG9ydCBlbmFibGVkIGluIHRoZSBCSU9TLiBUaGVzZSBoYXJkd2FyZSBmZWF0dXJlcyBhcmUgbm90IHNvZnR3YXJlLWVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvVENHIG9yIGF2YWlsYWJsZSBpbiB0eXBpY2FsIEdDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbmV3IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNTMzMzk5NTMwMTg4NmU3NGNhMGI2NDNiMjAzOWE1Mjk2NWQzZjhlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTc6MTE6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuaW5kZXggM2QwOTQwYTNiOWYzNy4uZGJjY2RlOWVlNWNkNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbkBAIC03Niw3ICs3Niw3IEBAXG4gI2RlZmluZSBYODZfRkVBVFVSRV9LOFx0XHRcdCggMyozMisgNCkgLyogT3B0ZXJvbiwgQXRobG9uNjQgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1pFTjVcdFx0KCAzKjMyKyA1KSAvKiBDUFUgYmFzZWQgb24gWmVuNSBtaWNyb2FyY2hpdGVjdHVyZSAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfWkVONlx0XHQoIDMqMzIrIDYpIC8qIENQVSBiYXNlZCBvbiBaZW42IG1pY3JvYXJjaGl0ZWN0dXJlICovXG4tLyogRnJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggMyozMisgNykgKi9cbisjZGVmaW5lIFg4Nl9GRUFUVVJFX1JNUE9QVFx0XHQoIDMqMzIrIDcpIC8qIFN1cHBvcnQgZm9yIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24gKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQ1x0KCAzKjMyKyA4KSAvKiBcImNvbnN0YW50X3RzY1wiIFRTQyB0aWNrcyBhdCBhIGNvbnN0YW50IHJhdGUgKi9cbiAvKiBmcmVlOiB3YXMgI2RlZmluZSBYODZfRkVBVFVSRV9VUFx0KCAzKjMyKyA5KSAqIFwidXBcIiBTTVAga2VybmVsIHJ1bm5pbmcgb24gVVAgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FSVFx0XHRcdCggMyozMisxMCkgLyogXCJhcnRcIiBBbHdheXMgcnVubmluZyB0aW1lciAoQVJUKSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbmluZGV4IDE4YzRiZTc1ZTkyNzEuLmQyY2IwYTdjZDBhMmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmhcbkBAIC03NjEsNiArNzYxLDkgQEBcbiAjZGVmaW5lIE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUXHQwXG4gI2RlZmluZSBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEXHRCSVRfVUxMKE1TUl9BTUQ2NF9TRUdfUk1QX0VOQUJMRURfQklUKVxuICNkZWZpbmUgTVNSX0FNRDY0X1JNUF9TRUdNRU5UX1NISUZUKHgpXHQoKCh4KSBcdTAwMjYgR0VOTUFTS19VTEwoMTMsIDgpKSBcdTAwM2VcdTAwM2UgOClcbisjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfQkFTRVx0XHQweGMwMDEwMTM5XG4rI2RlZmluZSBNU1JfQU1ENjRfUk1QT1BUX0VOQUJMRV9CSVRcdDBcbisjZGVmaW5lIE1TUl9BTUQ2NF9STVBPUFRfRU5BQkxFXHRcdEJJVF9VTEwoTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEVfQklUKVxuIFxuICNkZWZpbmUgTVNSX1NWU01fQ0FBXHRcdFx0MHhjMDAxZjAwMFxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbmluZGV4IDU5NGNmYTE5Y2JkNGIuLjA5YjFjNWQzMzc5MDIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmhcbkBAIC02NjIsNiArNjYyLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNucF9sZWFrX3BhZ2VzKHU2NCBwZm4sIHVuc2lnbmVkIGludCBwYWdlcylcbiBcdF9fc25wX2xlYWtfcGFnZXMocGZuLCBwYWdlcywgdHJ1ZSk7XG4gfVxuIGludCBzbnBfcHJlcGFyZSh2b2lkKTtcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZCk7XG4rdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpO1xuIHZvaWQgc25wX3NodXRkb3duKHZvaWQpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBib29sIHNucF9wcm9iZV9ybXB0YWJsZV9pbmZvKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG5AQCAtNjgwLDYgKzY4Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfbGVha19wYWdlcyh1NjQgcGZuLCB1bnNpZ25lZCBpbnQgbnBhZ2VzKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBrZHVtcF9zZXZfY2FsbGJhY2sodm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9maXh1cF9lODIwX3RhYmxlcyh2b2lkKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IHNucF9wcmVwYXJlKHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgc25wX3JtcG9wdF9hbGxfcGh5c21lbSh2b2lkKSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIHNucF9zaHV0ZG93bih2b2lkKSB7fVxuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jXG5pbmRleCA5MzcxMjljZTZhOTY0Li4wMjFjMGJmMjJkZTIwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9zY2F0dGVyZWQuY1xuQEAgLTY3LDYgKzY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0ge1xuIFx0eyBYODZfRkVBVFVSRV9QRVJGTU9OX1YyLFx0XHRDUFVJRF9FQVgsICAwLCAweDgwMDAwMDIyLCAwIH0sXG4gXHR7IFg4Nl9GRUFUVVJFX0FNRF9MQlJfVjIsXHRcdENQVUlEX0VBWCwgIDEsIDB4ODAwMDAwMjIsIDAgfSxcbiBcdHsgWDg2X0ZFQVRVUkVfQU1EX0xCUl9QTUNfRlJFRVpFLFx0Q1BVSURfRUFYLCAgMiwgMHg4MDAwMDAyMiwgMCB9LFxuK1x0eyBYODZfRkVBVFVSRV9STVBPUFQsXHRcdFx0Q1BVSURfRURYLCAgMCwgMHg4MDAwMDAyNSwgMCB9LFxuIFx0eyBYODZfRkVBVFVSRV9BTURfSFRSX0NPUkVTLFx0XHRDUFVJRF9FQVgsIDMwLCAweDgwMDAwMDI2LCAwIH0sXG4gXHR7IDAsIDAsIDAsIDAsIDAgfVxuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDQyNzIyOTM0Nzg3NjYuLmM1NzQ4NDliMTU4NzggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtMjk5Miw2ICsyOTkyLDE2IEBAIHZvaWQgc2V2X3ZtX2Rlc3Ryb3koc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHQgKi9cbiBcdFx0aWYgKHNucF9kZWNvbW1pc3Npb25fY29udGV4dChrdm0pKVxuIFx0XHRcdHJldHVybjtcbitcbitcdFx0LypcbitcdFx0ICogUGVyZm9ybSBSTVAgb3B0aW1pemF0aW9ucyBvbiBtZW1vcnkgZnJlZWQgYnkgdGVybWluYXRpbmdcbitcdFx0ICogZ3Vlc3RzLiAgVGhlIHNjYW4gaXMgZGVmZXJyZWQsIHNvIGl0IG5vcm1hbGx5IHJ1bnMgYWZ0ZXJcbitcdFx0ICogc2V2X2dtZW1faW52YWxpZGF0ZSgpIGhhcyBjb252ZXJ0ZWQgdGhpcyBndWVzdCdzIHBhZ2VzIGJhY2sgdG9cbitcdFx0ICogc2hhcmVkLCBhbmQgcGlja3MgdGhlbSB1cCB0aGVuLiAgQSB2ZXJ5IGxhcmdlIGd1ZXN0IHdob3NlXG4rXHRcdCAqIGNvbnZlcnNpb24gaGFzIG5vdCBmaW5pc2hlZCBieSB0aGVuIGlzIHBpY2tlZCB1cCBieSBhIGxhdGVyXG4rXHRcdCAqIHRlYXJkb3duJ3Mgc2Nhbi5cbitcdFx0ICovXG4rXHRcdHNucF9ybXBvcHRfYWxsX3BoeXNtZW0oKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHNldl91bmJpbmRfYXNpZChrdm0sIHNldi1cdTAwM2VoYW5kbGUpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvc3ZtL3Nldi5jIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbmluZGV4IGNmZjI4NWQ4YWQ4ZTMuLjI5MWEzNjAyOTFlYjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3N2bS9zZXYuY1xuKysrIGIvYXJjaC94ODYvdmlydC9zdm0vc2V2LmNcbkBAIC0xOSw2ICsxOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2FtZC1pb21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm9zcGVjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9zZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTEyNCw2ICsxMjUsMjAgQEAgc3RhdGljIHZvaWQgKnJtcF9ib29ra2VlcGluZyBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gc3RhdGljIHU2NCBwcm9iZWRfcm1wX2Jhc2UsIHByb2JlZF9ybXBfc2l6ZTtcbiBcbitzdGF0aWMgY3B1bWFza192YXJfdCBybXBvcHRfY3B1bWFzaztcbitzdGF0aWMgcGh5c19hZGRyX3Qgcm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kO1xuK1xuK2VudW0gcm1wb3B0X2Z1bmN0aW9uIHtcbitcdFJNUE9QVF9GVU5DX1ZFUklGWV9BTkRfUkVQT1JUX1NUQVRVUyxcbitcdFJNUE9QVF9GVU5DX1JFUE9SVF9TVEFUVVNcbit9O1xuK1xuKyNkZWZpbmUgUk1QT1BUX1dPUktfVElNRU9VVFx0MTAwMDBcbitcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJtcG9wdF93cTtcbitzdGF0aWMgc3RydWN0IGRlbGF5ZWRfd29yayBybXBvcHRfZGVsYXllZF93b3JrO1xuK3N0YXRpYyBERUZJTkVfTVVURVgocm1wb3B0X3dxX211dGV4KTtcbitcbiBzdGF0aWMgTElTVF9IRUFEKHNucF9sZWFrZWRfcGFnZXNfbGlzdCk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhzbnBfbGVha2VkX3BhZ2VzX2xpc3RfbG9jayk7XG4gXG5AQCAtNTEzLDcgKzUyOCw2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2hzYXZlX3BhKHZvaWQgKmFyZylcbiBcbiBpbnQgc25wX3ByZXBhcmUodm9pZClcbiB7XG4tXHRpbnQgcmV0O1xuIFx0dTY0IHZhbDtcbiBcbiBcdC8qXG5AQCAtNTI2LDE0ICs1NDAsMjEgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXG4gXHRjbGVhcl9ybXAoKTtcbiBcbi1cdGNwdXNfcmVhZF9sb2NrKCk7XG4rXHQvKlxuK1x0ICogRGlzYWJsZSBDUFUgaG90cGx1ZyBiZWZvcmUgZW5hYmxpbmcgU05QOiBubyBDUFUgbWF5IGNvbWUgb25saW5lXG4rXHQgKiB3aXRob3V0IFNucEVuIHdoaWxlIFNOUCBpcyBhY3RpdmUsIGFuZCBub25lIG1heSBnbyBvZmZsaW5lIGR1cmluZ1xuK1x0ICogZW5hYmxlLiAgVGhpcyBrZWVwcyBjcHVfb25saW5lX21hc2sgc3RhYmxlIGZvciB0aGUgY2hlY2sgYW5kIHRoZVxuK1x0ICogb25fZWFjaF9jcHUoKSBjYWxscyBiZWxvdywgc28gY3B1c19yZWFkX2xvY2soKSBpcyBub3QgbmVlZGVkLiAgSXQgaXNcbitcdCAqIHJlLWVuYWJsZWQgaW4gc25wX3NodXRkb3duKCkgb25jZSB0aGUgZmlybXdhcmUgZGlzYWJsZXMgU05QLlxuK1x0ICovXG4rXHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4gXG4gXHRpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X29ubGluZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKSkge1xuLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0Y3B1X2hvdHBsdWdfZW5hYmxlKCk7XG4gXHRcdHByX3dhcm4oXCJTTlAgaW5pdCBmYWlsZWQ6IG5vdCBhbGwgQ1BVcyBvbmxpbmUuICglKnBibCBvbmxpbmUgXHUwMDNjLVx1MDAzZSAlKnBibCBwcmVzZW50IG1hc2tzKS5cXG5cIixcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X29ubGluZV9tYXNrKSxcbiBcdFx0XHRjcHVtYXNrX3ByX2FyZ3MoY3B1X3ByZXNlbnRfbWFzaykpO1xuLVx0XHRnb3RvIHVubG9jaztcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuIFx0d2JpbnZkX29uX2FsbF9jcHVzKCk7XG5AQCAtNTQ4LDE0ICs1NjksMjkgQEAgaW50IHNucF9wcmVwYXJlKHZvaWQpXG4gXHQvKiBTTlBfSU5JVCByZXF1aXJlcyBNU1JfVk1fSFNBVkVfUEEgdG8gYmUgY2xlYXJlZCBvbiBhbGwgQ1BVcy4gKi9cbiBcdG9uX2VhY2hfY3B1KGNsZWFyX2hzYXZlX3BhLCBOVUxMLCAxKTtcbiBcbi1cdHJldCA9IDA7XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcHJlcGFyZSwgXCJjY3BcIik7XG4gXG4tdW5sb2NrOlxuLVx0Y3B1c19yZWFkX3VubG9jaygpO1xuK3N0YXRpYyB2b2lkIHNucF9jbGVhbnVwX3JtcG9wdCh2b2lkKVxuK3tcbitcdGludCBjcHU7XG4gXG4tXHRyZXR1cm4gcmV0O1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4rXG4rXHRpZiAoIXJtcG9wdF93cSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmspO1xuK1x0ZGVzdHJveV93b3JrcXVldWUocm1wb3B0X3dxKTtcbitcbitcdGZvcl9lYWNoX2NwdShjcHUsIHJtcG9wdF9jcHVtYXNrKVxuK1x0XHR3cm1zcnFfb25fY3B1KGNwdSwgTVNSX0FNRDY0X1JNUE9QVF9CQVNFLCAwKTtcbitcbitcdGZyZWVfY3B1bWFza192YXIocm1wb3B0X2NwdW1hc2spO1xuK1x0cm1wb3B0X3BhX3N0YXJ0ID0gcm1wb3B0X3BhX2VuZCA9IDA7XG4rXHRybXBvcHRfd3EgPSBOVUxMO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9wcmVwYXJlLCBcImNjcFwiKTtcbiBcbiB2b2lkIHNucF9zaHV0ZG93bih2b2lkKVxuIHtcbkBAIC01NjUsMTEgKzYwMSwyMDkgQEAgdm9pZCBzbnBfc2h1dGRvd24odm9pZClcbiBcdGlmIChzeXNjZmcgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuIFx0XHRyZXR1cm47XG4gXG4rXHQvKlxuK1x0ICogQ2xlYXIgdGhlIFJNUE9QVF9CQVNFIE1TUnMgd2hpbGUgQ1BVIGhvdHBsdWcgaXMgc3RpbGwgZGlzYWJsZWQsIHRoZW5cbitcdCAqIHJlLWVuYWJsZSBob3RwbHVnIG5vdyB0aGF0IHRoZSBmaXJtd2FyZSBoYXMgZGlzYWJsZWQgU05QLiAgQSBsZWdhY3kgU05QXG4rXHQgKiBzaHV0ZG93biByZXR1cm5zIGFib3ZlIHdpdGggU25wRW4gc3RpbGwgc2V0IGFuZCBsZWF2ZXMgaG90cGx1ZyBkaXNhYmxlZC5cbitcdCAqL1xuK1x0c25wX2NsZWFudXBfcm1wb3B0KCk7XG4rXHRjcHVfaG90cGx1Z19lbmFibGUoKTtcbitcbiBcdGNsZWFyX3JtcCgpO1xuIFx0b25fZWFjaF9jcHUobWZkX3JlY29uZmlndXJlLCBOVUxMLCAxKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfc2h1dGRvd24sIFwiY2NwXCIpO1xuIFxuK3N0YXRpYyBib29sIHJtcG9wdF9jYXBhYmxlKHZvaWQpXG4re1xuK1x0cmV0dXJuIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfUk1QT1BUKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9IT1NUX1NFVl9TTlApO1xuK31cbitcbisvKlxuKyAqIFJNUE9QVDogRjIgMEYgMDEgRkNcbisgKiAgIElucHV0OiAgUkFYID0gc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3MgKDFHQiBhbGlnbmVkKVxuKyAqICAgICAgICAgICBSQ1ggPSBvcGVyYXRpb24gdHlwZVxuKyAqICAgT3V0cHV0OiBDRiBzZXQgaWYgdGhlIHJhbmdlIHdhcyBvcHRpbWl6ZWRcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgX19ybXBvcHQodTY0IHBhX3N0YXJ0LCB1NjQgb3BfdHlwZSlcbit7XG4rXHRib29sIG9wdGltaXplZDtcbitcbitcdGFzbSB2b2xhdGlsZShcIi5ieXRlIDB4ZjIsIDB4MGYsIDB4MDEsIDB4ZmNcIlxuK1x0XHQgICAgIDogXCI9QGNjY1wiIChvcHRpbWl6ZWQpXG4rXHRcdCAgICAgOiBcImFcIiAocGFfc3RhcnQpLCBcImNcIiAob3BfdHlwZSlcbitcdFx0ICAgICA6IFwibWVtb3J5XCIsIFwiY2NcIik7XG4rXG4rXHRyZXR1cm4gb3B0aW1pemVkO1xuK31cbitcbitzdGF0aWMgdm9pZCBybXBvcHQodTY0IHBhKVxuK3tcbitcdHU2NCBwYV9zdGFydCA9IEFMSUdOX0RPV04ocGEsIFNaXzFHKTtcbitcdHU2NCBvcF90eXBlID0gUk1QT1BUX0ZVTkNfVkVSSUZZX0FORF9SRVBPUlRfU1RBVFVTO1xuK1xuK1x0X19ybXBvcHQocGFfc3RhcnQsIG9wX3R5cGUpO1xuK31cbitcbisvKlxuKyAqICd2YWwnIGlzIGEgc3lzdGVtIHBoeXNpY2FsIGFkZHJlc3MuXG4rICovXG4rc3RhdGljIHZvaWQgcm1wb3B0X3NtcCh2b2lkICp2YWwpXG4re1xuK1x0cm1wb3B0KCh1NjQpdmFsKTtcbit9XG4rXG4rLypcbisgKiBSTVBPUFQgb3B0aW1pemF0aW9ucyBza2lwIFJNUCBjaGVja3MgYXQgMUdCIGdyYW51bGFyaXR5IGlmIHRoaXNcbisgKiByYW5nZSBvZiBtZW1vcnkgZG9lcyBub3QgY29udGFpbiBhbnkgU05QIGd1ZXN0IG1lbW9yeS5cbisgKi9cbitzdGF0aWMgdm9pZCBybXBvcHRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRjcHVtYXNrX3Zhcl90IGZvbGxvd2VyX21hc2s7XG4rXHRwaHlzX2FkZHJfdCBwYTtcbitcdGludCB0aGlzX2NwdTtcbitcbitcdHByX2luZm8oXCJBdHRlbXB0IFJNUCBvcHRpbWl6YXRpb25zIG9uIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgQDFHQiBhbGlnbm1lbnQgWzB4JTAxNmxseCAtIDB4JTAxNmxseF1cXG5cIixcbitcdFx0cm1wb3B0X3BhX3N0YXJ0LCBybXBvcHRfcGFfZW5kKTtcbitcbitcdGlmICghYWxsb2NfY3B1bWFza192YXIoXHUwMDI2Zm9sbG93ZXJfbWFzaywgR0ZQX0tFUk5FTCkpIHtcbitcdFx0cHJfd2FybihcIlJNUCBvcHRpbWl6YXRpb24gcGFzcyBza2lwcGVkOiBjcHVtYXNrIGFsbG9jYXRpb24gZmFpbGVkXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogUk1QT1BUIHNjYW5zIHRoZSBSTVAgdGFibGUsIHN0b3JlcyB0aGUgcmVzdWx0IG9mIHRoZSBzY2FuIGluIHRoZVxuK1x0ICogcmVzZXJ2ZWQgcHJvY2Vzc29yIG1lbW9yeS4gVGhlIFJNUCBzY2FuIGlzIHRoZSBtb3N0IGV4cGVuc2l2ZVxuK1x0ICogcGFydC4gSWYgYSBzZWNvbmQgUk1QT1BUIG9jY3VycywgaXQgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBzY2FuXG4rXHQgKiBpZiB0aGV5IGNhbiBzZWUgYSBjYWNoZWQgcmVzdWx0IGluIHRoZSByZXNlcnZlZCBwcm9jZXNzb3IgbWVtb3J5LlxuK1x0ICpcbitcdCAqIERvIFJNUE9QVCBvbiBvbmUgQ1BVIGFsb25lLiBUaGVuLCBmb2xsb3cgdGhhdCB1cCB3aXRoIFJNUE9QVFxuK1x0ICogb24gZXZlcnkgb3RoZXIgcHJpbWFyeSB0aHJlYWQuIEZvbGxvd2VycyBhcmUgXCJkZXNpZ25lZCB0b1wiXG4rXHQgKiBza2lwIHRoZSBzY2FuIGlmIHRoZXkgc2VlIHRoZSBcImNhY2hlZFwiIHNjYW4gcmVzdWx0cy5cbitcdCAqXG4rXHQgKiBQaW4gdGhlIHdvcmtlciB0byB0aGUgY3VycmVudCBDUFUgZm9yIHRoZSBsZWFkZXIgbG9vcCBzbyB0aGF0XG4rXHQgKiB0aGlzX2NwdSByZW1haW5zIHZhbGlkIGFuZCB0aGUgUk1QT1BUIGluc3RydWN0aW9uIGV4ZWN1dGVzIG9uXG4rXHQgKiB0aGUgY29ycmVjdCBDUFUuICBVc2UgbWlncmF0ZV9kaXNhYmxlKCkgcmF0aGVyIHRoYW4gZ2V0X2NwdSgpIHRvXG4rXHQgKiBwcmV2ZW50IG1pZ3JhdGlvbiB3aGlsZSBzdGlsbCBhbGxvd2luZyBwcmVlbXB0aW9uLlxuK1x0ICovXG4rXHRtaWdyYXRlX2Rpc2FibGUoKTtcbitcdHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xuK1xuK1x0Y3B1bWFza19hbmRub3QoZm9sbG93ZXJfbWFzaywgcm1wb3B0X2NwdW1hc2ssXG4rXHRcdCAgICAgICB0b3BvbG9neV9zaWJsaW5nX2NwdW1hc2sodGhpc19jcHUpKTtcbitcbitcdGZvciAocGEgPSBybXBvcHRfcGFfc3RhcnQ7IHBhIFx1MDAzYyBybXBvcHRfcGFfZW5kOyBwYSArPSBTWl8xRylcbitcdFx0cm1wb3B0KHBhKTtcbitcbitcdG1pZ3JhdGVfZW5hYmxlKCk7XG4rXG4rXHQvKlxuK1x0ICogRm9sbG93ZXJzOiBydW4gUk1QT1BUIG9uIHRoZSByZW1haW5pbmcgY29yZXMuICBjcHVzX3JlYWRfbG9jaygpIGlzXG4rXHQgKiBpbnRlbnRpb25hbGx5IG5vdCBoZWxkIGhlcmU6IENQVSBob3RwbHVnIGlzIGRpc2FibGVkIGZvciB0aGUgZW50aXJlXG4rXHQgKiB0aW1lIFNOUCBpcyBhY3RpdmUgKHNlZSBzbnBfcHJlcGFyZSgpKSwgYW5kIHRoaXMgd29yayBvbmx5IHJ1bnMgd2hpbGVcbitcdCAqIFNOUCBpcyBhY3RpdmUsIHNvIHRoZSBmb2xsb3dlciBzZXQgc3RheXMgdmFsaWQgYWNyb3NzIHRoZSB3aG9sZSBzY2FuLlxuK1x0ICovXG4rXHRmb3IgKHBhID0gcm1wb3B0X3BhX3N0YXJ0OyBwYSBcdTAwM2Mgcm1wb3B0X3BhX2VuZDsgcGEgKz0gU1pfMUcpXG4rXHRcdG9uX2VhY2hfY3B1X21hc2soZm9sbG93ZXJfbWFzaywgcm1wb3B0X3NtcCwgKHZvaWQgKilwYSwgdHJ1ZSk7XG4rXG4rXHRmcmVlX2NwdW1hc2tfdmFyKGZvbGxvd2VyX21hc2spO1xuK31cbitcbit2b2lkIHNucF9ybXBvcHRfYWxsX3BoeXNtZW0odm9pZClcbit7XG4rXHRpZiAoIXJtcG9wdF9jYXBhYmxlKCkpXG4rXHRcdHJldHVybjtcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZybXBvcHRfd3FfbXV0ZXgpO1xuK1xuK1x0aWYgKCFybXBvcHRfd3EpXG4rXHRcdHJldHVybjtcbitcbitcdG1vZF9kZWxheWVkX3dvcmsocm1wb3B0X3dxLCBcdTAwMjZybXBvcHRfZGVsYXllZF93b3JrLFxuK1x0XHRcdCBtc2Vjc190b19qaWZmaWVzKFJNUE9QVF9XT1JLX1RJTUVPVVQpKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhzbnBfcm1wb3B0X2FsbF9waHlzbWVtLCBcImt2bS1hbWRcIik7XG4rXG4rdm9pZCBzbnBfc2V0dXBfcm1wb3B0KHZvaWQpXG4re1xuK1x0dTY0IHJtcG9wdF9iYXNlO1xuK1x0aW50IGNwdTtcbitcbitcdGlmICghcm1wb3B0X2NhcGFibGUoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJtcG9wdF93cV9tdXRleCk7XG4rXG4rXHQvKlxuK1x0ICogT24gcmUtaW5pdGlhbGl6YXRpb24gYWZ0ZXIgYSBsZWdhY3kgU05QIHNodXRkb3duIChTTlBfU0hVVERPV05fRVhcbitcdCAqIHdpdGggeDg2X3NucF9zaHV0ZG93bj0wKSwgc25wX3NodXRkb3duKCkgYW5kIHRodXMgc25wX2NsZWFudXBfcm1wb3B0KClcbitcdCAqIGFyZSBza2lwcGVkLCBzbyB0aGUgd29ya3F1ZXVlLCBkZWxheWVkIHdvcmssIGNwdW1hc2sgYW5kIHBlci1DUFVcbitcdCAqIFJNUE9QVF9CQVNFIE1TUnMgYXJlIHN0aWxsIHNldCB1cCBhbmQgdmFsaWQgKFNucEVuIHN0YXllZCBzZXQgYW5kXG4rXHQgKiBDUFUgaG90cGx1ZyBzdGF5ZWQgZGlzYWJsZWQpLiAgUmF0aGVyIHRoYW4gcmUtZG9pbmcgdGhlIHNldHVwLCB3aGljaFxuK1x0ICogd291bGQgbGVhayB0aGUgZXhpc3Rpbmcgc3RhdGUsIGp1c3QgcmUtcXVldWUgdGhlIG9wdGltaXphdGlvbiBwYXNzXG4rXHQgKiB0byByZS1vcHRpbWl6ZSBhbnkgbWVtb3J5IHRoZSBwcmV2aW91cyBTTlAgc2Vzc2lvbiBkZS1vcHRpbWl6ZWQuXG4rXHQgKi9cbitcdGlmIChybXBvcHRfd3EpIHtcbitcdFx0cXVldWVfZGVsYXllZF93b3JrKHJtcG9wdF93cSwgXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgMCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBDcmVhdGUgYW4gUk1QT1BULXNwZWNpZmljIHdvcmtxdWV1ZSB0byBhdm9pZCBzY2hlZHVsaW5nXG4rXHQgKiBSTVBPUFQgd29ya2l0ZW0gb24gdGhlIGdsb2JhbCBzeXN0ZW0gd29ya3F1ZXVlLlxuK1x0ICovXG4rXHRybXBvcHRfd3EgPSBhbGxvY193b3JrcXVldWUoXCJybXBvcHRfd3FcIiwgV1FfVU5CT1VORCwgMSk7XG4rXHRpZiAoIXJtcG9wdF93cSkge1xuK1x0XHRwcl9lcnIoXCJGYWlsZWQgdG8gYWxsb2NhdGUgUk1QT1BUIHdvcmtxdWV1ZVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cm1wb3B0X2RlbGF5ZWRfd29yaywgcm1wb3B0X3dvcmtfaGFuZGxlcik7XG4rXG4rXHRpZiAoIXphbGxvY19jcHVtYXNrX3ZhcihcdTAwMjZybXBvcHRfY3B1bWFzaywgR0ZQX0tFUk5FTCkpIHtcbitcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIGFsbG9jYXRlIFJNUE9QVCBjcHVtYXNrXFxuXCIpO1xuK1x0XHRkZXN0cm95X3dvcmtxdWV1ZShybXBvcHRfd3EpO1xuK1x0XHRybXBvcHRfd3EgPSBOVUxMO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogVGhlIFJNUE9QVF9CQVNFIE1TUiBpcyBwZXItY29yZSwgc28gb25seSBvbmUgdGhyZWFkIHBlciBjb3JlIG5lZWRzXG4rXHQgKiB0byBzZXQgdXAgdGhlIFJNUE9QVF9CQVNFIE1TUi4gIEFsbCBwcmltYXJ5IHRocmVhZHMgYXJlIG9ubGluZSxcbitcdCAqIG90aGVyd2lzZSBTTlAgd291bGQgbm90IGhhdmUgYmVlbiBlbmFibGVkLlxuK1x0ICovXG4rXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcbitcdFx0aWYgKHRvcG9sb2d5X2lzX3ByaW1hcnlfdGhyZWFkKGNwdSkpXG4rXHRcdFx0Y3B1bWFza19zZXRfY3B1KGNwdSwgcm1wb3B0X2NwdW1hc2spO1xuK1xuK1x0cm1wb3B0X3BhX3N0YXJ0ID0gQUxJR05fRE9XTihQRk5fUEhZUyhtaW5fbG93X3BmbiksIFNaXzFHKTtcbitcdHJtcG9wdF9iYXNlID0gcm1wb3B0X3BhX3N0YXJ0IHwgTVNSX0FNRDY0X1JNUE9QVF9FTkFCTEU7XG4rXG4rXHQvKlxuK1x0ICogUGVyLUNQVSBSTVBPUFQgdGFibGVzIGNvdmVyIGF0IG1vc3QgMiBUQi4gIFByb2dyYW0gZWFjaCBjb3JlJ3NcbitcdCAqIFJNUE9QVF9CQVNFIHdpdGggdGhlIHN0YXJ0IG9mIFJBTSB0byBvcHRpbWl6ZSB1cCB0byAyIFRCLlxuK1x0ICovXG4rXHRmb3JfZWFjaF9jcHUoY3B1LCBybXBvcHRfY3B1bWFzaylcbitcdFx0d3Jtc3JxX29uX2NwdShjcHUsIE1TUl9BTUQ2NF9STVBPUFRfQkFTRSwgcm1wb3B0X2Jhc2UpO1xuK1xuK1x0cm1wb3B0X3BhX2VuZCA9IEFMSUdOKFBGTl9QSFlTKG1heF9wZm4pLCBTWl8xRyk7XG4rXG4rXHQvKiBMaW1pdCBtZW1vcnkgc2Nhbm5pbmcgdG8gMlRCIG9mIFJBTSAqL1xuK1x0aWYgKChybXBvcHRfcGFfZW5kIC0gcm1wb3B0X3BhX3N0YXJ0KSBcdTAwM2UgU1pfMlQpIHtcbitcdFx0cHJfaW5mbyhcIlJNUE9QVCBjb3ZlcmFnZSBsaW1pdGVkIHRvIDJUQjsgbWVtb3J5IGFib3ZlIDB4JWxseCBub3Qgb3B0aW1pemVkXFxuXCIsXG4rXHRcdFx0cm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQpO1xuK1x0XHRybXBvcHRfcGFfZW5kID0gcm1wb3B0X3BhX3N0YXJ0ICsgU1pfMlQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogT25jZSBhbGwgcGVyLUNQVSBSTVBPUFQgdGFibGVzIGhhdmUgYmVlbiBjb25maWd1cmVkLCBlbmFibGUgUk1QT1BUXG4rXHQgKiBvcHRpbWl6YXRpb25zIG9uIGFsbCBwaHlzaWNhbCBtZW1vcnkuXG4rXHQgKi9cbitcdHF1ZXVlX2RlbGF5ZWRfd29yayhybXBvcHRfd3EsIFx1MDAyNnJtcG9wdF9kZWxheWVkX3dvcmssIDApO1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHNucF9zZXR1cF9ybXBvcHQsIFwiY2NwXCIpO1xuK1xuIC8qXG4gICogRG8gdGhlIG5lY2Vzc2FyeSBwcmVwYXJhdGlvbnMgd2hpY2ggYXJlIHZlcmlmaWVkIGJ5IHRoZSBmaXJtd2FyZSBhc1xuICAqIGRlc2NyaWJlZCBpbiB0aGUgU05QX0lOSVRfRVggZmlybXdhcmUgY29tbWFuZCBkZXNjcmlwdGlvbiBpbiB0aGUgU05QXG5AQCAtNTc3LDYgKzgxMSw4IEBAIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc25wX3NodXRkb3duLCBcImNjcFwiKTtcbiAgKi9cbiBpbnQgX19pbml0IHNucF9ybXB0YWJsZV9pbml0KHZvaWQpXG4ge1xuK1x0dTY0IHZhbDtcbitcbiBcdGlmIChXQVJOX09OX09OQ0UoIWNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0hPU1RfU0VWX1NOUCkpKVxuIFx0XHRyZXR1cm4gLUVOT1NZUztcbiBcbkBAIC01ODYsNiArODIyLDE1IEBAIGludCBfX2luaXQgc25wX3JtcHRhYmxlX2luaXQodm9pZClcbiBcdGlmICghc2V0dXBfcm1wdGFibGUoKSlcbiBcdFx0cmV0dXJuIC1FTk9TWVM7XG4gXG4rXHQvKlxuK1x0ICogT24gYSBrZXhlYyBib290IFNOUCBtYXkgYWxyZWFkeSBiZSBlbmFibGVkIChsZWdhY3kgZmlybXdhcmUgbGVhdmVzXG4rXHQgKiBTbnBFbiBzZXQgYWNyb3NzIHNodXRkb3duKSwgaW4gd2hpY2ggY2FzZSBzbnBfcHJlcGFyZSgpIGJhaWxzIHdpdGhvdXRcbitcdCAqIGRpc2FibGluZyBDUFUgaG90cGx1Zywgc28gZGlzYWJsZSBpdCBoZXJlLlxuK1x0ICovXG4rXHRyZG1zcnEoTVNSX0FNRDY0X1NZU0NGRywgdmFsKTtcbitcdGlmICh2YWwgXHUwMDI2IE1TUl9BTUQ2NF9TWVNDRkdfU05QX0VOKVxuK1x0XHRjcHVfaG90cGx1Z19kaXNhYmxlKCk7XG4rXG4gXHQvKlxuIFx0ICogU2V0dGluZyBjcmFzaF9rZXhlY19wb3N0X25vdGlmaWVycyB0byAndHJ1ZScgdG8gZW5zdXJlIHRoYXQgU05QIHBhbmljXG4gXHQgKiBub3RpZmllciBpcyBpbnZva2VkIHRvIGRvIFNOUCBJT01NVSBzaHV0ZG93biBiZWZvcmUga2R1bXAuXG5AQCAtNjg2LDEwICs5MzEsMTIgQEAgYm9vbCBzbnBfcHJvYmVfcm1wdGFibGVfaW5mbyh2b2lkKVxuIFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VHTUVOVEVEX1JNUCkpXG4gXHRcdHJkbXNycShNU1JfQU1ENjRfUk1QX0NGRywgcm1wX2NmZyk7XG4gXG4tXHRpZiAocm1wX2NmZyBcdTAwMjYgTVNSX0FNRDY0X1NFR19STVBfRU5BQkxFRClcbitcdGlmIChybXBfY2ZnIFx1MDAyNiBNU1JfQU1ENjRfU0VHX1JNUF9FTkFCTEVEKSB7XG4gXHRcdHJldHVybiBwcm9iZV9zZWdtZW50ZWRfcm1wdGFibGVfaW5mbygpO1xuLVx0ZWxzZVxuK1x0fSBlbHNlIHtcbitcdFx0c2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9STVBPUFQpO1xuIFx0XHRyZXR1cm4gcHJvYmVfY29udGlndW91c19ybXB0YWJsZV9pbmZvKCk7XG4rXHR9XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYyBiL2RyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNcbmluZGV4IGNhNDczY2ExOThiODEuLmMwMDJhN2NhMjZhOGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG4rKysgYi9kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jXG5AQCAtMTQ3Nyw2ICsxNDc3LDkgQEAgc3RhdGljIGludCBfX3Nldl9zbnBfaW5pdF9sb2NrZWQoaW50ICplcnJvciwgdW5zaWduZWQgaW50IG1heF9zbnBfYXNpZClcbiBcdH1cbiBcbiBcdHNucF9odl9maXhlZF9wYWdlc19zdGF0ZV91cGRhdGUoc2V2LCBIVl9GSVhFRCk7XG4rXG4rXHRzbnBfc2V0dXBfcm1wb3B0KCk7XG4rXG4gXHRzZXYtXHUwMDNlc25wX2luaXRpYWxpemVkID0gdHJ1ZTtcbiBcdGRldl9kYmcoc2V2LVx1MDAzZWRldiwgXCJTRVYtU05QIGZpcm13YXJlIGluaXRpYWxpemVkLCBTRVYtVElPIGlzICVzXFxuXCIsXG4gXHRcdGRhdGEudGlvX2VuID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTc6MTE6NDUuOTI4NTk1NDk1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc1NzQ0NDQxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50OiBBTUQgUk1QT1BUIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIEFNRCBSTVBPUFQgaW5zdHJ1Y3Rpb24sIHNwZWNpZmljYWxseSB0aWVkIHRvIFNFVi1TTlAuIEl0IHRvdWNoZXMgZmlsZXMgaW4gYGFyY2gveDg2YCwgYGRyaXZlcnMvY3J5cHRvYCBhbmQgaXQncyBhbGwgYWJvdXQgbWVtb3J5IGVuY3J5cHRpb24gYW5kIHNlY3VyZSBuZXN0ZWQgcGFnaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmcgaW4gb3VyIHR5cGljYWwgZW52aXJvbm1lbnQ/XCJcblxuVGhpcyBkZXBlbmRzIG9uIFNFVi1TTlAsIGFuZCB3ZSBhbGwga25vdyB0aGF0J3MgQU1ELXNwZWNpZmljIGhhcmR3YXJlLCBuYW1lbHkgRVBZQyBwcm9jZXNzb3JzIHdpdGggdGhlIGZlYXR1cmUgZW5hYmxlZC4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBvdXIgc2V0dXAg4oCTIEdDRSBpbnN0YW5jZXMsIHN0YW5kYXJkIFFFTVUuIENhbiB3ZSBldmVuICpyZWFjaCogdGhpcyBjb2RlPyAgV2Uga25vdyBRRU1VICpjYW4qIGVtdWxhdGUgKnNvbWUqIFNFViBmZWF0dXJlcywgYnV0IGZvciBTRVYtU05QICpob3N0KiBmZWF0dXJlcywgaXQncyBwcmV0dHkgbXVjaCBhIGdpdmVuIHlvdSBuZWVkIGEgcGh5c2ljYWwgbWFjaGluZSB3aXRoIFNOUCBlbmFibGVkLCBvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gd2l0aCBTTlAuXG5cblRoZSBjb2RlIGl0c2VsZiBoYXMgY2hlY2tzLCB0aGFua2Z1bGx5LiBUaGVyZSdzIGEgYHJtcG9wdF9jYXBhYmxlKClgIGZ1bmN0aW9uIHdoaWNoLCBpbiB0dXJuLCBjaGVja3MgZm9yIGJvdGggYFg4Nl9GRUFUVVJFX1JNUE9QVGAgYW5kIGBDQ19BVFRSX0hPU1RfU0VWX1NOUGAuIElmIGVpdGhlciBvZiB0aG9zZSBhcmUgZmFsc2UsIHRoZSB3aG9sZSB0aGluZyBqdXN0IGJhaWxzIGVhcmx5LiAgTXkgaHVuY2ggaXMsIHRob3NlIGNoZWNrcyBhcmUgZ29pbmcgdG8gZmFpbCBpbiBvdXIgc3RhbmRhcmQgU3l6a2FsbGVyIGVudmlyb25tZW50cy4gIEdDRSBpbnN0YW5jZXM/ICBOb3BlLCB0aGV5IGRvbid0IGV4cG9zZSBTRVYtU05QIGhvc3QgY2FwYWJpbGl0aWVzIHRvIHRoZSBndWVzdCwgZXZlbiBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAqaXMqIEFNRC4gSXQgd2lsbCBiZSB1bmxpa2VseSwgZXZlbiBpZiB0aGV5IGFyZSBBTUQsIHRvIHN1cHBvcnQgbmVzdGVkIFNFVi1TTlAuXG5cbkFscmlnaHQsIFN5emthbGxlciBkb2VzIHRlc3QgS1ZNLCBidXQgZG9lcyBpdCB0ZXN0IFNFVi1TTlA/IEkgYmVsaWV2ZSBpdCBkb2VzLCBidXQgdGVzdGluZyB0aGUgaG9zdC1zaWRlIFNFVi1TTlAgZnVuY3Rpb25hbGl0eSBhYnNvbHV0ZWx5IHJlcXVpcmVzIHRoZSBob3N0IHRvICpoYXZlKiBTRVYtU05QLiAgU28sIGhlcmUgaXMgdGhlIGxpdG11cyB0ZXN0OiBUaGUgZ3VpZGFuY2Ugc2F5cyBpZiB0aGUgY29kZSBwYXRoIGlzIGltcG9zc2libGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb24sIHRoZW4gaXTigJlzIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIFFFTVUgZG9lc24ndCAqZW11bGF0ZSogU0VWLVNOUCBhdCB0aGUgaG9zdCBsZXZlbC4gSXQgcmVsaWVzIG9uIEtWTSBhbmQgdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgdGhhdCBmdW5jdGlvbmFsaXR5LiAgSXQgZG9lc24ndCBzb2Z0d2FyZS1lbXVsYXRlIHRoZSBtZW1vcnkgZW5jcnlwdGlvbiBhbmQgQ1BVIG1pY3JvY29kZSBuZWVkZWQgZm9yIHRoZSBSTVAgdGFibGUgYW5kIGBSTVBPUFRgIGluc3RydWN0aW9uLiBUaGUgVENHIGVtdWxhdGlvbiBpc27igJl0IGV2ZW4gaW4gdGhlIGdhbWUgaGVyZSDigJMgVENHIGRvZXNu4oCZdCBlbXVsYXRlIG1lbW9yeSBlbmNyeXB0aW9uLlxuXG5TbywgaW4gc3RhbmRhcmQgUUVNVS9HQ0UsIGBYODZfRkVBVFVSRV9STVBPUFRgIGFuZCBgQ0NfQVRUUl9IT1NUX1NFVl9TTlBgIGFyZSBnb2luZyB0byBiZSBmYWxzZS4gVGhlIGNvZGUgaXMgdW5yZWFjaGFibGUuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBob3cgYENDX0FUVFJfSE9TVF9TRVZfU05QYCBpcyBkZXRlcm1pbmVkOiBpdCBjaGVja3MgYFg4Nl9GRUFUVVJFX1NFVl9TTlBgLCB3aGljaCBvbmx5IHNob3dzIHVwIG9uIEFNRCBDUFVzIHdpdGggU05QIGVuYWJsZWQgaW4gdGhlIEJJT1MuICBTeXprYWxsZXIgcnVucyBpbiBRRU1VIFZNcy4gVW5sZXNzIHdlJ3JlIHJ1bm5pbmcgaXQgb24gYSAqc3BlY2lmaWMqIGJhcmUtbWV0YWwgQU1EIG1hY2hpbmUgd2l0aCBTTlAgZW5hYmxlZCwgdGhhdCBmZWF0dXJlIGJpdCB3b27igJl0IGJlIHNldC4gIEl0J3MganVzdCBub3QgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbioqV29ydGhGdXp6aW5nPWZhbHNlLioqXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsaXR5IHRoYXQgZGVwZW5kcyBvbiBTRVYtU05QIGhvc3QgZW52aXJvbm1lbnRzLCByZXF1aXJpbmcgc3BlY2lmaWMgQU1EIGhhcmR3YXJlIGFuZCBCSU9TIGNvbmZpZ3VyYXRpb24uIFRoZXNlIGZlYXR1cmVzIGFyZW4ndCBlbXVsYXRlZCBieSBvdXIgc3RhbmRhcmQgUUVNVSBvciBhdmFpbGFibGUgaW4gdHlwaWNhbCBHQ0UgVk1zLCBtYWtpbmcgdGhlIG5ldyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlLiBJIGNhbiBzZWUgYHNucF9ybXBvcHRfYWxsX3BoeXNtZW1gLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgc2V2X3ZtX2Rlc3Ryb3lgIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCwgYW5kIEkgc2VlIGBzbnBfc2V0dXBfcm1wb3B0YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYF9fc2V2X3NucF9pbml0X2xvY2tlZGAgaW4gYGRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmNgLCBhbmQgYm90aCBmdW5jdGlvbnMgc3RhcnQgd2l0aCBgaWYgKCFybXBvcHRfY2FwYWJsZSgpKSByZXR1cm47YC4gVGhlcmVmb3JlLCBnaXZlbiBhbGwgb2YgdGhlIGFib3ZlLCBJ4oCZbSBnb29kIHdpdGggdGhhdCBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTgsIk91dHB1dFRva2VucyI6MTA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDE3OjEyOjAzLjUwMzA0MjU5OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiB1c2VkIGluIFNFVi1TTlAgaG9zdCBlbnZpcm9ubWVudHMuIFRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgQU1EIGhhcmR3YXJlIHdpdGggU0VWLVNOUCBhbmQgUk1QT1BUIHN1cHBvcnQgZW5hYmxlZCBpbiB0aGUgQklPUy4gVGhlc2UgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBzb2Z0d2FyZS1lbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL1RDRyBvciBhdmFpbGFibGUgaW4gdHlwaWNhbCBHQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG5ldyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgQU1EIFJNUE9QVCBpbnN0cnVjdGlvbiB1c2VkIGluIFNFVi1TTlAgaG9zdCBlbnZpcm9ubWVudHMuIFRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgQU1EIGhhcmR3YXJlIHdpdGggU0VWLVNOUCBhbmQgUk1QT1BUIHN1cHBvcnQgZW5hYmxlZCBpbiB0aGUgQklPUy4gVGhlc2UgaGFyZHdhcmUgZmVhdHVyZXMgYXJlIG5vdCBzb2Z0d2FyZS1lbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL1RDRyBvciBhdmFpbGFibGUgaW4gdHlwaWNhbCBHQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG5ldyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowln4hz[1] Phase: Running StartedAt: 2026-07-28 17:12:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowln4hz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-28 17:12:58 +0000 UTC FinishedAt: 2026-07-28 17:13: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,}