Name: series-workflowjxnrs Phase: Failed StartedAt: 2026-09-10 00:01:00 +0000 UTC FinishedAt: 2026-09-10 00:27:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjxnrs[0] Phase: Succeeded StartedAt: 2026-09-10 00:01:00 +0000 UTC FinishedAt: 2026-09-10 00:27:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjxnrs[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 00:01:00 +0000 UTC FinishedAt: 2026-09-10 00:27:15 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgYW5kIHRlc3QgZnJhbWV3b3JrIGZpbGVzIHdpdGhpbiB0b29scy90ZXN0aW5nL21lbWJsb2NrLyAoYWRkaW5nIHRlc3QgY2FzZXMgZm9yIG1lbWJsb2NrX2FsbG9jX2xvdykuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFiNjdlNzBkNDhjYmJmZTEwZjljZDBjMjZiZGNjZWFjZWU1NTJhOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMDoyNjo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9NYWtlZmlsZVxuaW5kZXggZDgwOTgyY2NkYzIwOS4uMjA1MjRmY2JlM2M3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svTWFrZWZpbGVcbkBAIC03LDcgJiM0Mzs3LDggQEAgQ0ZMQUdTICYjNDM7PSAtSS4gLUkuLi8uLi9pbmNsdWRlIC1XYWxsIC1PMiAtZnNhbml0aXplPWFkZHJlc3MgXFxcbiBMREZMQUdTICYjNDM7PSAtZnNhbml0aXplPWFkZHJlc3MgLWZzYW5pdGl6ZT11bmRlZmluZWRcbiBUQVJHRVRTID0gbWFpblxuIFRFU1RfT0ZJTEVTID0gdGVzdHMvYWxsb2NfbmlkX2FwaS5vIHRlc3RzL2FsbG9jX2hlbHBlcnNfYXBpLm8gdGVzdHMvYWxsb2NfYXBpLm8gXFxcbi1cdFx0ICB0ZXN0cy9iYXNpY19hcGkubyB0ZXN0cy9jb21tb24ubyB0ZXN0cy9hbGxvY19leGFjdF9uaWRfYXBpLm9cbiYjNDM7XHRcdCAgdGVzdHMvYmFzaWNfYXBpLm8gdGVzdHMvY29tbW9uLm8gdGVzdHMvYWxsb2NfZXhhY3RfbmlkX2FwaS5vIFxcXG4mIzQzO1x0XHQgIHRlc3RzL2FsbG9jX2xvd19hcGkub1xuIERFUF9PRklMRVMgPSBtZW1ibG9jay5vIGxpYi9zbGFiLm8gbW16b25lLm8gc2xhYi5vIGNtZGxpbmUub1xuIE9GSUxFUyA9IG1haW4ubyAkKERFUF9PRklMRVMpICQoVEVTVF9PRklMRVMpXG4gRVhUUl9TUkMgPSAuLi8uLi8uLi9tbS9tZW1ibG9jay5jXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9SRUFETUUgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRVxuaW5kZXggYjQzNWY0OGQ4YTcwMC4uNGVhMjkzMjA5NTQ4NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRVxuQEAgLTY3LDEzICYjNDM7NjcsMTMgQEAgbWVtYmxvY2tcbiB8LS0gdGVzdHNcbiB8ICAgIHwtLSBhbGxvY19hcGkuKGN8aCkgICAgICAgICAtLSBtZW1ibG9ja19hbGxvYyB0ZXN0c1xuIHwgICAgfC0tIGFsbG9jX2hlbHBlcnNfYXBpLihjfGgpIC0tIG1lbWJsb2NrX2FsbG9jX2Zyb20gdGVzdHNcbiYjNDM7fCAgICB8LS0gYWxsb2NfbG93X2FwaS4oY3xoKSAgICAgLS0gbWVtYmxvY2tfYWxsb2NfbG93IHRlc3RzXG4gfCAgICB8LS0gYWxsb2NfbmlkX2FwaS4oY3xoKSAgICAgLS0gbWVtYmxvY2tfYWxsb2NfdHJ5X25pZCB0ZXN0c1xuIHwgICAgfC0tIGJhc2ljX2FwaS4oY3xoKSAgICAgICAgIC0tIG1lbWJsb2NrX2FkZC9tZW1ibG9ja19yZXNlcnZlLy4uLiB0ZXN0c1xuIHwgICAgfC0tIGNvbW1vbi4oY3xoKSAgICAgICAgICAgIC0tIGhlbHBlciBmdW5jdGlvbnMgZm9yIHJlc2V0dGluZyBtZW1ibG9jaztcbiB8LS0gbWFpbi5jICAgICAgICAtLS0tLS0tLS0tLS0tLS4gICBkdW1teSBwaHlzaWNhbCBtZW1vcnkgZGVmaW5pdGlvblxuIHwtLSBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIGAtIHRlc3QgcnVubmVyXG4gfC0tIFJFQURNRVxuLXwtLSBUT0RPXG4gfC0tIC5naXRpZ25vcmVcbiBcbiBTaW11bGF0aW5nIHBoeXNpY2FsIG1lbW9yeVxuQEAgLTEwMSwxMiAmIzQzOzEwMSwxMCBAQCBUaGVyZSYjMzk7cyBubyBuZWVkIHRvIGV4cGxpY2l0bHkgZnJlZSB0aGUgZHVtbXkgbWVtb3J5IGZyb20gbWVtYmxvY2sgdmlhXG4gbWVtYmxvY2tfZnJlZSgpIGNhbGwuIFRoZSBlbnRyeSB3aWxsIGJlIGVyYXNlZCBieSByZXNldF9tZW1ibG9ja19yZWdpb25zKCksXG4gY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCB0ZXN0LlxuIFxuLUtub3duIGlzc3Vlc1xuLT09PT09PT09PT09PVxuLVxuLTEuIFRlc3RzIGZvciBtZW1ibG9ja19hbGxvY19sb3coKSBjYW4mIzM5O3QgYmUgZWFzaWx5IGltcGxlbWVudGVkLiBUaGUgZnVuY3Rpb24gdXNlc1xuLSAgIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgbWFyY28sIHdoaWNoIGNhbiYjMzk7dCBiZSBjaGFuZ2VkIHRvIHBvaW50IGF0IHRoZSBsb3dcbi0gICBtZW1vcnkgb2YgdGhlIG1lbW9yeV9ibG9jay5cbiYjNDM7VGhlIHNpbXVsYXRvciBkZWZpbmVzIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgaW4gYXNtL2RtYS5oIHVzaW5nIHRoZSBtaWRwb2ludFxuJiM0MztvZiB0aGUgTUVNX1NJWkUgcmFuZ2UgcmVnaXN0ZXJlZCBieSBzZXR1cF9tZW1ibG9jaygpLiBUaGlzIGxlYXZlcyByZWdpc3RlcmVkXG4mIzQzO21lbW9yeSBib3RoIGJlbG93IGFuZCBhYm92ZSB0aGUgbGltaXQuIFRoZSBsaW1pdCBpcyB0aGUgZmlyc3QgYWRkcmVzcyBhblxuJiM0MzthbGxvY2F0aW9uIG11c3Qgbm90IHVzZTsgYW4gYWxsb2NhdGlvbiYjMzk7cyBiYXNlIHBsdXMgaXRzIHNpemUgbWF5IGVxdWFsIHRoZSBsaW1pdC5cbiBcbiBSZWZlcmVuY2VzXG4gPT09PT09PT09PVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svVE9ETyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svVE9ET1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBjMTNhZDBkYWU3NzYzLi4wMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL1RPRE9cbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDUgJiM0MzswLDAgQEBcbi1UT0RPXG4tPT09PT1cbi1cbi0xLiBBZGQgdGVzdHMgZm9yIG1lbWJsb2NrX2FsbG9jX2xvdygpIG9uY2UgdGhlIHNpbXVsYXRvciBjYW4gbW9kZWxcbi0gICBBUkNIX0xPV19BRERSRVNTX0xJTUlUIGFnYWluc3QgdGhlIGxvdyBtZW1vcnkgaW4gbWVtb3J5X2Jsb2NrXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9hc20vZG1hLmggYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaFxuaW5kZXggMTNmZjhlNWQyMmVmNi4uNjYwNzQwOGRjZjI1ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svYXNtL2RtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaFxuQEAgLTIsNCAmIzQzOzIsMTAgQEBcbiAjaWZuZGVmIF9UT09MU19ETUFfSFxuICNkZWZpbmUgX1RPT0xTX0RNQV9IXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3BoeXNfYWRkcl90IGR1bW15X3BoeXNpY2FsX21lbW9yeV9sb3dfbGltaXQodm9pZCk7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2xvd19saW1pdCgpXG4mIzQzO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svbWFpbi5jIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9tYWluLmNcbmluZGV4IDI3OGY5ZGVjNTAwODcuLjlhOTZlMTc4NTUxYjggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9tYWluLmNcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0cy9hbGxvY19oZWxwZXJzX2FwaS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdHMvYWxsb2NfbmlkX2FwaS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdHMvYWxsb2NfZXhhY3RfbmlkX2FwaS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RzL2FsbG9jX2xvd19hcGkuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Rlc3RzL2NvbW1vbi5oXCYjMzQ7XG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuQEAgLTEyLDYgJiM0MzsxMyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdG1lbWJsb2NrX2Jhc2ljX2NoZWNrcygpO1xuIFx0bWVtYmxvY2tfYWxsb2NfY2hlY2tzKCk7XG4gXHRtZW1ibG9ja19hbGxvY19oZWxwZXJzX2NoZWNrcygpO1xuJiM0MztcdG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3MoKTtcbiBcdG1lbWJsb2NrX2FsbG9jX25pZF9jaGVja3MoKTtcbiBcdG1lbWJsb2NrX2FsbG9jX2V4YWN0X25pZF9jaGVja3MoKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuYyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTExNzQzMWYxZjcxNVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9hbGxvY19sb3dfYXBpLmNcbkBAIC0wLDAgJiM0MzsxLDE0OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsjaW5jbHVkZSBcJiMzNDthbGxvY19sb3dfYXBpLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYWxpZ24uaFx1MDAzZVxuJiM0MztcbiYjNDM7LyogQWxsb2NhdGUgYXQgdGhlIGZpcnN0IG9yIGxhc3QgYWxpZ25lZCBhZGRyZXNzIGJlbG93IHRoZSBsb3cgbGltaXQuICovXG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NfbG93X3NpbXBsZV9jaGVjayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmduID0gXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uc1swXTtcbiYjNDM7XHRwaHlzX2FkZHJfdCBzaXplID0gU1pfNjQ7XG4mIzQzO1x0cGh5c19hZGRyX3QgZXhwZWN0ZWQ7XG4mIzQzO1x0dm9pZCAqYWxsb2NhdGVkX3B0cjtcbiYjNDM7XG4mIzQzO1x0UFJFRklYX1BVU0goKTtcbiYjNDM7XHRzZXR1cF9tZW1ibG9jaygpO1xuJiM0MztcbiYjNDM7XHQvKiBTaW11bGF0ZWQgcGh5c2ljYWwgUkFNIGlzIG5vdCBuZWNlc3NhcmlseSBTTVBfQ0FDSEVfQllURVMgYWxpZ25lZC4gKi9cbiYjNDM7XHRpZiAobWVtYmxvY2tfYm90dG9tX3VwKCkpXG4mIzQzO1x0XHRleHBlY3RlZCA9IEFMSUdOKG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSwgU01QX0NBQ0hFX0JZVEVTKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRleHBlY3RlZCA9IEFMSUdOX0RPV04oQVJDSF9MT1dfQUREUkVTU19MSU1JVCAtIHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgICAgU01QX0NBQ0hFX0JZVEVTKTtcbiYjNDM7XG4mIzQzO1x0YWxsb2NhdGVkX3B0ciA9IG1lbWJsb2NrX2FsbG9jX2xvdyhzaXplLCBTTVBfQ0FDSEVfQllURVMpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfTkUoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX0VRKChwaHlzX2FkZHJfdCkodWludHB0cl90KWFsbG9jYXRlZF9wdHIsIGV4cGVjdGVkKTtcbiYjNDM7XHRBU1NFUlRfTUVNX0VRKGFsbG9jYXRlZF9wdHIsIDAsIHNpemUpO1xuJiM0MztcdEFTU0VSVF9FUShyZ24tXHUwMDNlYmFzZSwgZXhwZWN0ZWQpO1xuJiM0MztcdEFTU0VSVF9FUShyZ24tXHUwMDNlc2l6ZSwgc2l6ZSk7XG4mIzQzO1x0QVNTRVJUX0xFKHJlZ2lvbl9lbmQocmduKSwgQVJDSF9MT1dfQUREUkVTU19MSU1JVCk7XG4mIzQzO1x0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLmNudCwgMSk7XG4mIzQzO1x0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnRvdGFsX3NpemUsIHNpemUpO1xuJiM0MztcbiYjNDM7XHR0ZXN0X3Bhc3NfcG9wKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSBsYXN0IGJ5dGUgb2YgdGhlIGFsbG9jYXRpb24gaXMgaW1tZWRpYXRlbHkgYmVsb3cgdGhlIGxvdyBsaW1pdC4gKi9cbiYjNDM7c3RhdGljIGludCBhbGxvY19sb3dfZXhhY3RfbGltaXRfY2hlY2sodm9pZClcbiYjNDM7e1xuJiM0MztcdHBoeXNfYWRkcl90IGxpbWl0ID0gQVJDSF9MT1dfQUREUkVTU19MSU1JVDtcbiYjNDM7XHRwaHlzX2FkZHJfdCBiYXNlID0gQUxJR05fRE9XTihsaW1pdCAtIFNaXzY0LCBTTVBfQ0FDSEVfQllURVMpO1xuJiM0MztcdHBoeXNfYWRkcl90IHNpemUgPSBsaW1pdCAtIGJhc2U7XG4mIzQzO1x0dm9pZCAqYWxsb2NhdGVkX3B0cjtcbiYjNDM7XG4mIzQzO1x0UFJFRklYX1BVU0goKTtcbiYjNDM7XHRzZXR1cF9tZW1ibG9jaygpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9ja19yZW1vdmUobWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpLFxuJiM0MztcdFx0XHRcdCAgYmFzZSAtIG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSksIDApO1xuJiM0MztcbiYjNDM7XHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShhbGxvY2F0ZWRfcHRyLCBOVUxMKTtcbiYjNDM7XHRBU1NFUlRfRVEoKHBoeXNfYWRkcl90KSh1aW50cHRyX3QpYWxsb2NhdGVkX3B0ciwgYmFzZSk7XG4mIzQzO1x0QVNTRVJUX01FTV9FUShhbGxvY2F0ZWRfcHRyLCAwLCBzaXplKTtcbiYjNDM7XHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uc1swXS5iYXNlLCBiYXNlKTtcbiYjNDM7XHRBU1NFUlRfRVEocmVnaW9uX2VuZChcdTAwMjZtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdKSwgbGltaXQpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5jbnQsIDEpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC50b3RhbF9zaXplLCBzaXplKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9wYXNzX3BvcCgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGVyZSBhcmUgc2l6ZSBieXRlcyBiZWxvdyB0aGUgbGltaXQsIGJ1dCBhbGlnbmluZyB0aGUgc3RhcnQgbWFrZXMgdGhlXG4mIzQzOyAqIGFsbG9jYXRpb24gY3Jvc3MgaXQuIE1lbW9yeSBhYm92ZSB0aGUgbGltaXQgbXVzdCBub3Qgc2F0aXNmeSB0aGUgcmVxdWVzdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NfbG93X2FsaWdubWVudF9jcm9zc2VzX2xpbWl0X2NoZWNrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRwaHlzX2FkZHJfdCBsaW1pdCA9IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQ7XG4mIzQzO1x0cGh5c19hZGRyX3QgYmFzZSA9IEFMSUdOX0RPV04obGltaXQsIFNNUF9DQUNIRV9CWVRFUykgLSAxO1xuJiM0MztcdHBoeXNfYWRkcl90IHNpemUgPSBsaW1pdCAtIGJhc2U7XG4mIzQzO1x0dm9pZCAqYWxsb2NhdGVkX3B0cjtcbiYjNDM7XG4mIzQzO1x0UFJFRklYX1BVU0goKTtcbiYjNDM7XHRzZXR1cF9tZW1ibG9jaygpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9ja19yZW1vdmUobWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpLFxuJiM0MztcdFx0XHRcdCAgYmFzZSAtIG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSksIDApO1xuJiM0MztcbiYjNDM7XHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShhbGxvY2F0ZWRfcHRyLCBOVUxMKTtcbiYjNDM7XHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQudG90YWxfc2l6ZSwgMCk7XG4mIzQzO1x0QVNTRVJUX01FTV9FUSgodm9pZCAqKSh1aW50cHRyX3QpYmFzZSwgMSwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSAtIGJhc2UpO1xuJiM0MztcbiYjNDM7XHR0ZXN0X3Bhc3NfcG9wKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEFsbG9jYXRpb24gbXVzdCBmYWlsIGFmdGVyIHJlc2VydmluZyBhbGwgbG93IG1lbW9yeSwgd2l0aCBoaWdoIG1lbW9yeSBmcmVlLiAqL1xuJiM0MztzdGF0aWMgaW50IGFsbG9jX2xvd19yZXNlcnZlZF9jaGVjayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cGh5c19hZGRyX3QgbGltaXQgPSBBUkNIX0xPV19BRERSRVNTX0xJTUlUO1xuJiM0MztcdHBoeXNfYWRkcl90IGJhc2UgPSBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSgpO1xuJiM0MztcdHBoeXNfYWRkcl90IHNpemUgPSBTWl82NDtcbiYjNDM7XHR2b2lkICphbGxvY2F0ZWRfcHRyO1xuJiM0MztcbiYjNDM7XHRQUkVGSVhfUFVTSCgpO1xuJiM0MztcdHNldHVwX21lbWJsb2NrKCk7XG4mIzQzO1x0QVNTRVJUX0VRKG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgbGltaXQgLSBiYXNlKSwgMCk7XG4mIzQzO1xuJiM0MztcdGFsbG9jYXRlZF9wdHIgPSBtZW1ibG9ja19hbGxvY19sb3coc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGFsbG9jYXRlZF9wdHIsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5jbnQsIDEpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdLmJhc2UsIGJhc2UpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdLnNpemUsIGxpbWl0IC0gYmFzZSk7XG4mIzQzO1x0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnRvdGFsX3NpemUsIGxpbWl0IC0gYmFzZSk7XG4mIzQzO1x0QVNTRVJUX01FTV9FUSgodm9pZCAqKSh1aW50cHRyX3QpYmFzZSwgMSwgTUVNX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcbiYjNDM7XHRBU1NFUlRfTkUoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX0xFKGxpbWl0LCAocGh5c19hZGRyX3QpKHVpbnRwdHJfdClhbGxvY2F0ZWRfcHRyKTtcbiYjNDM7XHRBU1NFUlRfTUVNX0VRKGFsbG9jYXRlZF9wdHIsIDAsIHNpemUpO1xuJiM0MztcbiYjNDM7XHR0ZXN0X3Bhc3NfcG9wKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NfbG93X2NoZWNrcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YWxsb2NfbG93X3NpbXBsZV9jaGVjaygpO1xuJiM0MztcdGFsbG9jX2xvd19leGFjdF9saW1pdF9jaGVjaygpO1xuJiM0MztcdGFsbG9jX2xvd19hbGlnbm1lbnRfY3Jvc3Nlc19saW1pdF9jaGVjaygpO1xuJiM0MztcdGFsbG9jX2xvd19yZXNlcnZlZF9jaGVjaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHByZWZpeF9yZXNldCgpO1xuJiM0MztcdHByZWZpeF9wdXNoKFwmIzM0O21lbWJsb2NrX2FsbG9jX2xvd1wmIzM0Oyk7XG4mIzQzO1x0dGVzdF9wcmludChcJiMzNDtSdW5uaW5nIG1lbWJsb2NrX2FsbG9jX2xvdyB0ZXN0cy4uLlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJlc2V0X21lbWJsb2NrX2F0dHJpYnV0ZXMoKTtcbiYjNDM7XHRkdW1teV9waHlzaWNhbF9tZW1vcnlfaW5pdCgpO1xuJiM0MztcbiYjNDM7XHRydW5fdG9wX2Rvd24oYWxsb2NfbG93X2NoZWNrcyk7XG4mIzQzO1x0cnVuX2JvdHRvbV91cChhbGxvY19sb3dfY2hlY2tzKTtcbiYjNDM7XG4mIzQzO1x0ZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2NsZWFudXAoKTtcbiYjNDM7XHRwcmVmaXhfcG9wKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9hbGxvY19sb3dfYXBpLmggYi90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjJlM2NiZTMzNmY1ZGFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5oXG5AQCAtMCwwICYjNDM7MSw5IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzOyNpZm5kZWYgX01FTUJMT0NLX0FMTE9DX0xPV19IXG4mIzQzOyNkZWZpbmUgX01FTUJMT0NLX0FMTE9DX0xPV19IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7aW50IG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3Modm9pZCk7XG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2NvbW1vbi5jIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9jb21tb24uY1xuaW5kZXggMzI1MGM4ZTUxMjRiMy4uYWMwMzI2MTBhNTZlYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvY29tbW9uLmNcbkBAIC0xMTgsNiAmIzQzOzExOCwxMiBAQCBwaHlzX2FkZHJfdCBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSh2b2lkKVxuIFx0cmV0dXJuIChwaHlzX2FkZHJfdCltZW1vcnlfYmxvY2suYmFzZTtcbiB9XG4gXG4mIzQzO3BoeXNfYWRkcl90IGR1bW15X3BoeXNpY2FsX21lbW9yeV9sb3dfbGltaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdC8qIFRoZSBsb3cgbGltaXQgaXMgaGFsZndheSB0aHJvdWdoIG1lbW9yeSByZWdpc3RlcmVkIGJ5IHNldHVwX21lbWJsb2NrKCkuICovXG4mIzQzO1x0cmV0dXJuIGR1bW15X3BoeXNpY2FsX21lbW9yeV9iYXNlKCkgJiM0MzsgTUVNX1NJWkUgLyAyO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpXG4ge1xuIFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoaGVscF9vcHRzKSAhPSBBUlJBWV9TSVpFKGxvbmdfb3B0cykgLSAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyBhbmQgdGVzdCBmcmFtZXdvcmsgZmlsZXMgd2l0aGluIHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svIChhZGRpbmcgdGVzdCBjYXNlcyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWI2N2U3MGQ0OGNiYmZlMTBmOWNkMGMyNmJkY2NlYWNlZTU1MmE5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDAwOjI2OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svTWFrZWZpbGUKaW5kZXggZDgwOTgyY2NkYzIwOS4uMjA1MjRmY2JlM2M3MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL01ha2VmaWxlCkBAIC03LDcgJiM0Mzs3LDggQEAgQ0ZMQUdTICYjNDM7PSAtSS4gLUkuLi8uLi9pbmNsdWRlIC1XYWxsIC1PMiAtZnNhbml0aXplPWFkZHJlc3MgXAogTERGTEFHUyAmIzQzOz0gLWZzYW5pdGl6ZT1hZGRyZXNzIC1mc2FuaXRpemU9dW5kZWZpbmVkCiBUQVJHRVRTID0gbWFpbgogVEVTVF9PRklMRVMgPSB0ZXN0cy9hbGxvY19uaWRfYXBpLm8gdGVzdHMvYWxsb2NfaGVscGVyc19hcGkubyB0ZXN0cy9hbGxvY19hcGkubyBcCi0JCSAgdGVzdHMvYmFzaWNfYXBpLm8gdGVzdHMvY29tbW9uLm8gdGVzdHMvYWxsb2NfZXhhY3RfbmlkX2FwaS5vCiYjNDM7CQkgIHRlc3RzL2Jhc2ljX2FwaS5vIHRlc3RzL2NvbW1vbi5vIHRlc3RzL2FsbG9jX2V4YWN0X25pZF9hcGkubyBcCiYjNDM7CQkgIHRlc3RzL2FsbG9jX2xvd19hcGkubwogREVQX09GSUxFUyA9IG1lbWJsb2NrLm8gbGliL3NsYWIubyBtbXpvbmUubyBzbGFiLm8gY21kbGluZS5vCiBPRklMRVMgPSBtYWluLm8gJChERVBfT0ZJTEVTKSAkKFRFU1RfT0ZJTEVTKQogRVhUUl9TUkMgPSAuLi8uLi8uLi9tbS9tZW1ibG9jay5jCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRSBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FCmluZGV4IGI0MzVmNDhkOGE3MDAuLjRlYTI5MzIwOTU0ODcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FCkBAIC02NywxMyAmIzQzOzY3LDEzIEBAIG1lbWJsb2NrCiB8LS0gdGVzdHMKIHwgICAgfC0tIGFsbG9jX2FwaS4oY3xoKSAgICAgICAgIC0tIG1lbWJsb2NrX2FsbG9jIHRlc3RzCiB8ICAgIHwtLSBhbGxvY19oZWxwZXJzX2FwaS4oY3xoKSAtLSBtZW1ibG9ja19hbGxvY19mcm9tIHRlc3RzCiYjNDM7fCAgICB8LS0gYWxsb2NfbG93X2FwaS4oY3xoKSAgICAgLS0gbWVtYmxvY2tfYWxsb2NfbG93IHRlc3RzCiB8ICAgIHwtLSBhbGxvY19uaWRfYXBpLihjfGgpICAgICAtLSBtZW1ibG9ja19hbGxvY190cnlfbmlkIHRlc3RzCiB8ICAgIHwtLSBiYXNpY19hcGkuKGN8aCkgICAgICAgICAtLSBtZW1ibG9ja19hZGQvbWVtYmxvY2tfcmVzZXJ2ZS8uLi4gdGVzdHMKIHwgICAgfC0tIGNvbW1vbi4oY3xoKSAgICAgICAgICAgIC0tIGhlbHBlciBmdW5jdGlvbnMgZm9yIHJlc2V0dGluZyBtZW1ibG9jazsKIHwtLSBtYWluLmMgICAgICAgIC0tLS0tLS0tLS0tLS0tLiAgIGR1bW15IHBoeXNpY2FsIG1lbW9yeSBkZWZpbml0aW9uCiB8LS0gTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICBgLSB0ZXN0IHJ1bm5lcgogfC0tIFJFQURNRQotfC0tIFRPRE8KIHwtLSAuZ2l0aWdub3JlCiAKIFNpbXVsYXRpbmcgcGh5c2ljYWwgbWVtb3J5CkBAIC0xMDEsMTIgJiM0MzsxMDEsMTAgQEAgVGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IGZyZWUgdGhlIGR1bW15IG1lbW9yeSBmcm9tIG1lbWJsb2NrIHZpYQogbWVtYmxvY2tfZnJlZSgpIGNhbGwuIFRoZSBlbnRyeSB3aWxsIGJlIGVyYXNlZCBieSByZXNldF9tZW1ibG9ja19yZWdpb25zKCksCiBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHRlc3QuCiAKLUtub3duIGlzc3VlcwotPT09PT09PT09PT09Ci0KLTEuIFRlc3RzIGZvciBtZW1ibG9ja19hbGxvY19sb3coKSBjYW4mIzM5O3QgYmUgZWFzaWx5IGltcGxlbWVudGVkLiBUaGUgZnVuY3Rpb24gdXNlcwotICAgQVJDSF9MT1dfQUREUkVTU19MSU1JVCBtYXJjbywgd2hpY2ggY2FuJiMzOTt0IGJlIGNoYW5nZWQgdG8gcG9pbnQgYXQgdGhlIGxvdwotICAgbWVtb3J5IG9mIHRoZSBtZW1vcnlfYmxvY2suCiYjNDM7VGhlIHNpbXVsYXRvciBkZWZpbmVzIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgaW4gYXNtL2RtYS5oIHVzaW5nIHRoZSBtaWRwb2ludAomIzQzO29mIHRoZSBNRU1fU0laRSByYW5nZSByZWdpc3RlcmVkIGJ5IHNldHVwX21lbWJsb2NrKCkuIFRoaXMgbGVhdmVzIHJlZ2lzdGVyZWQKJiM0MzttZW1vcnkgYm90aCBiZWxvdyBhbmQgYWJvdmUgdGhlIGxpbWl0LiBUaGUgbGltaXQgaXMgdGhlIGZpcnN0IGFkZHJlc3MgYW4KJiM0MzthbGxvY2F0aW9uIG11c3Qgbm90IHVzZTsgYW4gYWxsb2NhdGlvbiYjMzk7cyBiYXNlIHBsdXMgaXRzIHNpemUgbWF5IGVxdWFsIHRoZSBsaW1pdC4KIAogUmVmZXJlbmNlcwogPT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9UT0RPIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9UT0RPCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTNhZDBkYWU3NzYzLi4wMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svVE9ETwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDUgJiM0MzswLDAgQEAKLVRPRE8KLT09PT09Ci0KLTEuIEFkZCB0ZXN0cyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KCkgb25jZSB0aGUgc2ltdWxhdG9yIGNhbiBtb2RlbAotICAgQVJDSF9MT1dfQUREUkVTU19MSU1JVCBhZ2FpbnN0IHRoZSBsb3cgbWVtb3J5IGluIG1lbW9yeV9ibG9jawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9hc20vZG1hLmggYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaAppbmRleCAxM2ZmOGU1ZDIyZWY2Li42NjA3NDA4ZGNmMjVkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaApAQCAtMiw0ICYjNDM7MiwxMCBAQAogI2lmbmRlZiBfVE9PTFNfRE1BX0gKICNkZWZpbmUgX1RPT0xTX0RNQV9ICiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsKJiM0MztwaHlzX2FkZHJfdCBkdW1teV9waHlzaWNhbF9tZW1vcnlfbG93X2xpbWl0KHZvaWQpOwomIzQzOwomIzQzOyNkZWZpbmUgQVJDSF9MT1dfQUREUkVTU19MSU1JVCBkdW1teV9waHlzaWNhbF9tZW1vcnlfbG93X2xpbWl0KCkKJiM0MzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9tYWluLmMgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uYwppbmRleCAyNzhmOWRlYzUwMDg3Li45YTk2ZTE3ODU1MWI4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uYwpAQCAtNCw2ICYjNDM7NCw3IEBACiAjaW5jbHVkZSAmIzM0O3Rlc3RzL2FsbG9jX2hlbHBlcnNfYXBpLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0cy9hbGxvY19uaWRfYXBpLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0cy9hbGxvY19leGFjdF9uaWRfYXBpLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdHMvYWxsb2NfbG93X2FwaS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGVzdHMvY29tbW9uLmgmIzM0OwogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCkBAIC0xMiw2ICYjNDM7MTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJbWVtYmxvY2tfYmFzaWNfY2hlY2tzKCk7CiAJbWVtYmxvY2tfYWxsb2NfY2hlY2tzKCk7CiAJbWVtYmxvY2tfYWxsb2NfaGVscGVyc19jaGVja3MoKTsKJiM0MzsJbWVtYmxvY2tfYWxsb2NfbG93X2NoZWNrcygpOwogCW1lbWJsb2NrX2FsbG9jX25pZF9jaGVja3MoKTsKIAltZW1ibG9ja19hbGxvY19leGFjdF9uaWRfY2hlY2tzKCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5jIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9hbGxvY19sb3dfYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYTExNzQzMWYxZjcxNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5jCkBAIC0wLDAgJiM0MzsxLDE0OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7I2luY2x1ZGUgJiMzNDthbGxvY19sb3dfYXBpLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hbGlnbi5oJmd0OwomIzQzOwomIzQzOy8qIEFsbG9jYXRlIGF0IHRoZSBmaXJzdCBvciBsYXN0IGFsaWduZWQgYWRkcmVzcyBiZWxvdyB0aGUgbG93IGxpbWl0LiAqLwomIzQzO3N0YXRpYyBpbnQgYWxsb2NfbG93X3NpbXBsZV9jaGVjayh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmduID0gJmFtcDttZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdOwomIzQzOwlwaHlzX2FkZHJfdCBzaXplID0gU1pfNjQ7CiYjNDM7CXBoeXNfYWRkcl90IGV4cGVjdGVkOwomIzQzOwl2b2lkICphbGxvY2F0ZWRfcHRyOwomIzQzOwomIzQzOwlQUkVGSVhfUFVTSCgpOwomIzQzOwlzZXR1cF9tZW1ibG9jaygpOwomIzQzOwomIzQzOwkvKiBTaW11bGF0ZWQgcGh5c2ljYWwgUkFNIGlzIG5vdCBuZWNlc3NhcmlseSBTTVBfQ0FDSEVfQllURVMgYWxpZ25lZC4gKi8KJiM0MzsJaWYgKG1lbWJsb2NrX2JvdHRvbV91cCgpKQomIzQzOwkJZXhwZWN0ZWQgPSBBTElHTihtZW1ibG9ja19zdGFydF9vZl9EUkFNKCksIFNNUF9DQUNIRV9CWVRFUyk7CiYjNDM7CWVsc2UKJiM0MzsJCWV4cGVjdGVkID0gQUxJR05fRE9XTihBUkNIX0xPV19BRERSRVNTX0xJTUlUIC0gc2l6ZSwKJiM0MzsJCQkJICAgICAgU01QX0NBQ0hFX0JZVEVTKTsKJiM0MzsKJiM0MzsJYWxsb2NhdGVkX3B0ciA9IG1lbWJsb2NrX2FsbG9jX2xvdyhzaXplLCBTTVBfQ0FDSEVfQllURVMpOwomIzQzOwomIzQzOwlBU1NFUlRfTkUoYWxsb2NhdGVkX3B0ciwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUSgocGh5c19hZGRyX3QpKHVpbnRwdHJfdClhbGxvY2F0ZWRfcHRyLCBleHBlY3RlZCk7CiYjNDM7CUFTU0VSVF9NRU1fRVEoYWxsb2NhdGVkX3B0ciwgMCwgc2l6ZSk7CiYjNDM7CUFTU0VSVF9FUShyZ24tJmd0O2Jhc2UsIGV4cGVjdGVkKTsKJiM0MzsJQVNTRVJUX0VRKHJnbi0mZ3Q7c2l6ZSwgc2l6ZSk7CiYjNDM7CUFTU0VSVF9MRShyZWdpb25fZW5kKHJnbiksIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAxKTsKJiM0MzsJQVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnRvdGFsX3NpemUsIHNpemUpOwomIzQzOwomIzQzOwl0ZXN0X3Bhc3NfcG9wKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgbGFzdCBieXRlIG9mIHRoZSBhbGxvY2F0aW9uIGlzIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBsb3cgbGltaXQuICovCiYjNDM7c3RhdGljIGludCBhbGxvY19sb3dfZXhhY3RfbGltaXRfY2hlY2sodm9pZCkKJiM0Mzt7CiYjNDM7CXBoeXNfYWRkcl90IGxpbWl0ID0gQVJDSF9MT1dfQUREUkVTU19MSU1JVDsKJiM0MzsJcGh5c19hZGRyX3QgYmFzZSA9IEFMSUdOX0RPV04obGltaXQgLSBTWl82NCwgU01QX0NBQ0hFX0JZVEVTKTsKJiM0MzsJcGh5c19hZGRyX3Qgc2l6ZSA9IGxpbWl0IC0gYmFzZTsKJiM0MzsJdm9pZCAqYWxsb2NhdGVkX3B0cjsKJiM0MzsKJiM0MzsJUFJFRklYX1BVU0goKTsKJiM0MzsJc2V0dXBfbWVtYmxvY2soKTsKJiM0MzsJQVNTRVJUX0VRKG1lbWJsb2NrX3JlbW92ZShtZW1ibG9ja19zdGFydF9vZl9EUkFNKCksCiYjNDM7CQkJCSAgYmFzZSAtIG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSksIDApOwomIzQzOwomIzQzOwlhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9ORShhbGxvY2F0ZWRfcHRyLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKChwaHlzX2FkZHJfdCkodWludHB0cl90KWFsbG9jYXRlZF9wdHIsIGJhc2UpOwomIzQzOwlBU1NFUlRfTUVNX0VRKGFsbG9jYXRlZF9wdHIsIDAsIHNpemUpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uc1swXS5iYXNlLCBiYXNlKTsKJiM0MzsJQVNTRVJUX0VRKHJlZ2lvbl9lbmQoJmFtcDttZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdKSwgbGltaXQpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAxKTsKJiM0MzsJQVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnRvdGFsX3NpemUsIHNpemUpOwomIzQzOwomIzQzOwl0ZXN0X3Bhc3NfcG9wKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZXJlIGFyZSBzaXplIGJ5dGVzIGJlbG93IHRoZSBsaW1pdCwgYnV0IGFsaWduaW5nIHRoZSBzdGFydCBtYWtlcyB0aGUKJiM0MzsgKiBhbGxvY2F0aW9uIGNyb3NzIGl0LiBNZW1vcnkgYWJvdmUgdGhlIGxpbWl0IG11c3Qgbm90IHNhdGlzZnkgdGhlIHJlcXVlc3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhbGxvY19sb3dfYWxpZ25tZW50X2Nyb3NzZXNfbGltaXRfY2hlY2sodm9pZCkKJiM0Mzt7CiYjNDM7CXBoeXNfYWRkcl90IGxpbWl0ID0gQVJDSF9MT1dfQUREUkVTU19MSU1JVDsKJiM0MzsJcGh5c19hZGRyX3QgYmFzZSA9IEFMSUdOX0RPV04obGltaXQsIFNNUF9DQUNIRV9CWVRFUykgLSAxOwomIzQzOwlwaHlzX2FkZHJfdCBzaXplID0gbGltaXQgLSBiYXNlOwomIzQzOwl2b2lkICphbGxvY2F0ZWRfcHRyOwomIzQzOwomIzQzOwlQUkVGSVhfUFVTSCgpOwomIzQzOwlzZXR1cF9tZW1ibG9jaygpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2tfcmVtb3ZlKG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSwKJiM0MzsJCQkJICBiYXNlIC0gbWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpKSwgMCk7CiYjNDM7CiYjNDM7CWFsbG9jYXRlZF9wdHIgPSBtZW1ibG9ja19hbGxvY19sb3coc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGFsbG9jYXRlZF9wdHIsIE5VTEwpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAwKTsKJiM0MzsJQVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnRvdGFsX3NpemUsIDApOwomIzQzOwlBU1NFUlRfTUVNX0VRKCh2b2lkICopKHVpbnRwdHJfdCliYXNlLCAxLCBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIC0gYmFzZSk7CiYjNDM7CiYjNDM7CXRlc3RfcGFzc19wb3AoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIEFsbG9jYXRpb24gbXVzdCBmYWlsIGFmdGVyIHJlc2VydmluZyBhbGwgbG93IG1lbW9yeSwgd2l0aCBoaWdoIG1lbW9yeSBmcmVlLiAqLwomIzQzO3N0YXRpYyBpbnQgYWxsb2NfbG93X3Jlc2VydmVkX2NoZWNrKHZvaWQpCiYjNDM7ewomIzQzOwlwaHlzX2FkZHJfdCBsaW1pdCA9IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQ7CiYjNDM7CXBoeXNfYWRkcl90IGJhc2UgPSBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSgpOwomIzQzOwlwaHlzX2FkZHJfdCBzaXplID0gU1pfNjQ7CiYjNDM7CXZvaWQgKmFsbG9jYXRlZF9wdHI7CiYjNDM7CiYjNDM7CVBSRUZJWF9QVVNIKCk7CiYjNDM7CXNldHVwX21lbWJsb2NrKCk7CiYjNDM7CUFTU0VSVF9FUShtZW1ibG9ja19yZXNlcnZlKGJhc2UsIGxpbWl0IC0gYmFzZSksIDApOwomIzQzOwomIzQzOwlhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShhbGxvY2F0ZWRfcHRyLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLmNudCwgMSk7CiYjNDM7CUFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdLmJhc2UsIGJhc2UpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uc1swXS5zaXplLCBsaW1pdCAtIGJhc2UpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQudG90YWxfc2l6ZSwgbGltaXQgLSBiYXNlKTsKJiM0MzsJQVNTRVJUX01FTV9FUSgodm9pZCAqKSh1aW50cHRyX3QpYmFzZSwgMSwgTUVNX1NJWkUpOwomIzQzOwomIzQzOwlhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTsKJiM0MzsJQVNTRVJUX05FKGFsbG9jYXRlZF9wdHIsIE5VTEwpOwomIzQzOwlBU1NFUlRfTEUobGltaXQsIChwaHlzX2FkZHJfdCkodWludHB0cl90KWFsbG9jYXRlZF9wdHIpOwomIzQzOwlBU1NFUlRfTUVNX0VRKGFsbG9jYXRlZF9wdHIsIDAsIHNpemUpOwomIzQzOwomIzQzOwl0ZXN0X3Bhc3NfcG9wKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFsbG9jX2xvd19jaGVja3Modm9pZCkKJiM0Mzt7CiYjNDM7CWFsbG9jX2xvd19zaW1wbGVfY2hlY2soKTsKJiM0MzsJYWxsb2NfbG93X2V4YWN0X2xpbWl0X2NoZWNrKCk7CiYjNDM7CWFsbG9jX2xvd19hbGlnbm1lbnRfY3Jvc3Nlc19saW1pdF9jaGVjaygpOwomIzQzOwlhbGxvY19sb3dfcmVzZXJ2ZWRfY2hlY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtZW1ibG9ja19hbGxvY19sb3dfY2hlY2tzKHZvaWQpCiYjNDM7ewomIzQzOwlwcmVmaXhfcmVzZXQoKTsKJiM0MzsJcHJlZml4X3B1c2goJiMzNDttZW1ibG9ja19hbGxvY19sb3cmIzM0Oyk7CiYjNDM7CXRlc3RfcHJpbnQoJiMzNDtSdW5uaW5nIG1lbWJsb2NrX2FsbG9jX2xvdyB0ZXN0cy4uLlxuJiMzNDspOwomIzQzOwomIzQzOwlyZXNldF9tZW1ibG9ja19hdHRyaWJ1dGVzKCk7CiYjNDM7CWR1bW15X3BoeXNpY2FsX21lbW9yeV9pbml0KCk7CiYjNDM7CiYjNDM7CXJ1bl90b3BfZG93bihhbGxvY19sb3dfY2hlY2tzKTsKJiM0MzsJcnVuX2JvdHRvbV91cChhbGxvY19sb3dfY2hlY2tzKTsKJiM0MzsKJiM0MzsJZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2NsZWFudXAoKTsKJiM0MzsJcHJlZml4X3BvcCgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuaCBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjJlM2NiZTMzNmY1ZGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuaApAQCAtMCwwICYjNDM7MSw5IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsjaWZuZGVmIF9NRU1CTE9DS19BTExPQ19MT1dfSAomIzQzOyNkZWZpbmUgX01FTUJMT0NLX0FMTE9DX0xPV19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjb21tb24uaCYjMzQ7CiYjNDM7CiYjNDM7aW50IG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3Modm9pZCk7CiYjNDM7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2NvbW1vbi5jIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9jb21tb24uYwppbmRleCAzMjUwYzhlNTEyNGIzLi5hYzAzMjYxMGE1NmVjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvY29tbW9uLmMKQEAgLTExOCw2ICYjNDM7MTE4LDEyIEBAIHBoeXNfYWRkcl90IGR1bW15X3BoeXNpY2FsX21lbW9yeV9iYXNlKHZvaWQpCiAJcmV0dXJuIChwaHlzX2FkZHJfdCltZW1vcnlfYmxvY2suYmFzZTsKIH0KIAomIzQzO3BoeXNfYWRkcl90IGR1bW15X3BoeXNpY2FsX21lbW9yeV9sb3dfbGltaXQodm9pZCkKJiM0Mzt7CiYjNDM7CS8qIFRoZSBsb3cgbGltaXQgaXMgaGFsZndheSB0aHJvdWdoIG1lbW9yeSByZWdpc3RlcmVkIGJ5IHNldHVwX21lbWJsb2NrKCkuICovCiYjNDM7CXJldHVybiBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSgpICYjNDM7IE1FTV9TSVpFIC8gMjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nKQogewogCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGhlbHBfb3B0cykgIT0gQVJSQVlfU0laRShsb25nX29wdHMpIC0gMSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTcKCQkJCQkJCW91dHB1dDogODEKCQkJCQkJCXRob3VnaHRzOiA2ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGFuYWx5emUgdGhlIHBhdGNoIGRpZmYuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGFsbCBjb25maW5lZCB0byB0aGUgYHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgYE1ha2VmaWxlYCwgYFJFQURNRWAsIGBUT0RPYCwgYW5kIHNldmVyYWwgQyBhbmQgaGVhZGVyIGZpbGVzIHdpdGhpbiB0aGF0IGRpcmVjdG9yeTogYGFzbS9kbWEuaGAsIGBtYWluLmNgLCBgdGVzdHMvYWxsb2NfbG93X2FwaS5jYCwgYHRlc3RzL2FsbG9jX2xvd19hcGkuaGAsIGFuZCBgdGVzdHMvY29tbW9uLmNgLgoKTm93LCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMgaW4gc2VjdGlvbiAyLCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXM6ICpEb2VzIHRoZSBtb2RpZmllZCBjb2RlIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcz8qCgpMb29raW5nIGF0IHRoZSBjb250ZXh0LCB0aGlzIGlzIGEgdXNlcnNwYWNlIHRlc3QgaGFybmVzcyBvciB1bml0IHRlc3RzIGZvciB0aGUgYG1lbWJsb2NrYCBmdW5jdGlvbmFsaXR5LiBJdCBjb21waWxlcyBhIHVzZXJzcGFjZSBiaW5hcnkgYG1haW5gLCBwcmVzdW1hYmx5IHVzaW5nIGNvbXBpbGVyIGZsYWdzIGxpa2UgYC1mc2FuaXRpemU9YWRkcmVzc2AsIHdoaWNoIGZ1cnRoZXIgc3VwcG9ydHMgdGhhdCB0aGlzIGlzbiYjMzk7dCBrZXJuZWwtbGV2ZWwgY29kZS4gQW5kLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgbm8gb3RoZXIgZmlsZXMgb3V0c2lkZSBvZiBgdG9vbHMvdGVzdGluZy9tZW1ibG9jay9gIGFyZSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gWWVwLCB0aGUgZGlmZiBjb25maXJtcyBpdDogYWxsIHRoZSBsaXN0ZWQgZmlsZXMgYXJlIHN0cmljdGx5IHdpdGhpbiB0aGF0IGRpcmVjdG9yeS4KClRoZXJlZm9yZSwgdW5kZXIgdGhvc2UgZ3VpZGVsaW5lcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gVGhlIHBhdGNoIG1vZGlmaWVzIGV4Y2x1c2l2ZWx5IHVzZXJzcGFjZSB0ZXN0IGNvZGUuCgpOb3csIHRvIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbCwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZSBjb3JyZWN0IGZvcm1hdDogYEVuYWJsZUNvbmZpZ3NgIG5lZWRzIHRvIGJlIGBbXWAgb3IgYG51bGxgLCBgRm9jdXNTeW1ib2xzYCBpcyBhbHNvIGBbXWAsIGFuZCBJJiMzOTtsbCBuZWVkIGEgY2xlYXIgYFJlYXNvbmluZ2AuCgpJJiMzOTtsbCBwaHJhc2UgdGhlIHJlYXNvbmluZyB0aGlzIHdheTogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgdG91Y2hlcyB1c2Vyc3BhY2UgdW5pdCB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9tZW1ibG9jay9gIHRvIGFkZCB0ZXN0cyBmb3IgYG1lbWJsb2NrX2FsbG9jX2xvdygpYC4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyBub3QgcGFydCBvZiB0aGUga2VybmVsIGFuZCBpcyBub3QgdGFyZ2V0YWJsZS9yZWFjaGFibGUgYnkgc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLiYjMzQ7IFRoYXQmIzM5O3MgY29uY2lzZSBhbmQgZXhwbGFpbnMgKndoeSogaXQmIzM5O3Mgbm90IHdvcnRoIGZ1enppbmcuCgpBbHJpZ2h0LCB3aXRoIHRoZSByZWFzb25pbmcgZm9ybXVsYXRlZCwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyBhbmQgdGVzdCBmcmFtZXdvcmsgZmlsZXMgd2l0aGluIHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svIChhZGRpbmcgdGVzdCBjYXNlcyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyBhbmQgdGVzdCBmcmFtZXdvcmsgZmlsZXMgd2l0aGluIHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svIChhZGRpbmcgdGVzdCBjYXNlcyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDoyNjo1OC42MTI3NDM3MTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjI5NTExMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgYW5kIHRlc3QgZnJhbWV3b3JrIGZpbGVzIHdpdGhpbiB0b29scy90ZXN0aW5nL21lbWJsb2NrLyAoYWRkaW5nIHRlc3QgY2FzZXMgZm9yIG1lbWJsb2NrX2FsbG9jX2xvdykuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MjY6NTguNjEyNzQ3NDA1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDE3NTk5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxYjY3ZTcwZDQ4Y2JiZmUxMGY5Y2QwYzI2YmRjY2VhY2VlNTUyYTk2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDAwOjI2OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL01ha2VmaWxlXFxuaW5kZXggZDgwOTgyY2NkYzIwOS4uMjA1MjRmY2JlM2M3MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9NYWtlZmlsZVxcbkBAIC03LDcgKzcsOCBAQCBDRkxBR1MgKz0gLUkuIC1JLi4vLi4vaW5jbHVkZSAtV2FsbCAtTzIgLWZzYW5pdGl6ZT1hZGRyZXNzIFxcXFxcXG4gTERGTEFHUyArPSAtZnNhbml0aXplPWFkZHJlc3MgLWZzYW5pdGl6ZT11bmRlZmluZWRcXG4gVEFSR0VUUyA9IG1haW5cXG4gVEVTVF9PRklMRVMgPSB0ZXN0cy9hbGxvY19uaWRfYXBpLm8gdGVzdHMvYWxsb2NfaGVscGVyc19hcGkubyB0ZXN0cy9hbGxvY19hcGkubyBcXFxcXFxuLVxcdFxcdCAgdGVzdHMvYmFzaWNfYXBpLm8gdGVzdHMvY29tbW9uLm8gdGVzdHMvYWxsb2NfZXhhY3RfbmlkX2FwaS5vXFxuK1xcdFxcdCAgdGVzdHMvYmFzaWNfYXBpLm8gdGVzdHMvY29tbW9uLm8gdGVzdHMvYWxsb2NfZXhhY3RfbmlkX2FwaS5vIFxcXFxcXG4rXFx0XFx0ICB0ZXN0cy9hbGxvY19sb3dfYXBpLm9cXG4gREVQX09GSUxFUyA9IG1lbWJsb2NrLm8gbGliL3NsYWIubyBtbXpvbmUubyBzbGFiLm8gY21kbGluZS5vXFxuIE9GSUxFUyA9IG1haW4ubyAkKERFUF9PRklMRVMpICQoVEVTVF9PRklMRVMpXFxuIEVYVFJfU1JDID0gLi4vLi4vLi4vbW0vbWVtYmxvY2suY1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRSBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FXFxuaW5kZXggYjQzNWY0OGQ4YTcwMC4uNGVhMjkzMjA5NTQ4NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRVxcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FXFxuQEAgLTY3LDEzICs2NywxMyBAQCBtZW1ibG9ja1xcbiB8LS0gdGVzdHNcXG4gfCAgICB8LS0gYWxsb2NfYXBpLihjfGgpICAgICAgICAgLS0gbWVtYmxvY2tfYWxsb2MgdGVzdHNcXG4gfCAgICB8LS0gYWxsb2NfaGVscGVyc19hcGkuKGN8aCkgLS0gbWVtYmxvY2tfYWxsb2NfZnJvbSB0ZXN0c1xcbit8ICAgIHwtLSBhbGxvY19sb3dfYXBpLihjfGgpICAgICAtLSBtZW1ibG9ja19hbGxvY19sb3cgdGVzdHNcXG4gfCAgICB8LS0gYWxsb2NfbmlkX2FwaS4oY3xoKSAgICAgLS0gbWVtYmxvY2tfYWxsb2NfdHJ5X25pZCB0ZXN0c1xcbiB8ICAgIHwtLSBiYXNpY19hcGkuKGN8aCkgICAgICAgICAtLSBtZW1ibG9ja19hZGQvbWVtYmxvY2tfcmVzZXJ2ZS8uLi4gdGVzdHNcXG4gfCAgICB8LS0gY29tbW9uLihjfGgpICAgICAgICAgICAgLS0gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcmVzZXR0aW5nIG1lbWJsb2NrO1xcbiB8LS0gbWFpbi5jICAgICAgICAtLS0tLS0tLS0tLS0tLS4gICBkdW1teSBwaHlzaWNhbCBtZW1vcnkgZGVmaW5pdGlvblxcbiB8LS0gTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICBgLSB0ZXN0IHJ1bm5lclxcbiB8LS0gUkVBRE1FXFxuLXwtLSBUT0RPXFxuIHwtLSAuZ2l0aWdub3JlXFxuIFxcbiBTaW11bGF0aW5nIHBoeXNpY2FsIG1lbW9yeVxcbkBAIC0xMDEsMTIgKzEwMSwxMCBAQCBUaGVyZSdzIG5vIG5lZWQgdG8gZXhwbGljaXRseSBmcmVlIHRoZSBkdW1teSBtZW1vcnkgZnJvbSBtZW1ibG9jayB2aWFcXG4gbWVtYmxvY2tfZnJlZSgpIGNhbGwuIFRoZSBlbnRyeSB3aWxsIGJlIGVyYXNlZCBieSByZXNldF9tZW1ibG9ja19yZWdpb25zKCksXFxuIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggdGVzdC5cXG4gXFxuLUtub3duIGlzc3Vlc1xcbi09PT09PT09PT09PT1cXG4tXFxuLTEuIFRlc3RzIGZvciBtZW1ibG9ja19hbGxvY19sb3coKSBjYW4ndCBiZSBlYXNpbHkgaW1wbGVtZW50ZWQuIFRoZSBmdW5jdGlvbiB1c2VzXFxuLSAgIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgbWFyY28sIHdoaWNoIGNhbid0IGJlIGNoYW5nZWQgdG8gcG9pbnQgYXQgdGhlIGxvd1xcbi0gICBtZW1vcnkgb2YgdGhlIG1lbW9yeV9ibG9jay5cXG4rVGhlIHNpbXVsYXRvciBkZWZpbmVzIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgaW4gYXNtL2RtYS5oIHVzaW5nIHRoZSBtaWRwb2ludFxcbitvZiB0aGUgTUVNX1NJWkUgcmFuZ2UgcmVnaXN0ZXJlZCBieSBzZXR1cF9tZW1ibG9jaygpLiBUaGlzIGxlYXZlcyByZWdpc3RlcmVkXFxuK21lbW9yeSBib3RoIGJlbG93IGFuZCBhYm92ZSB0aGUgbGltaXQuIFRoZSBsaW1pdCBpcyB0aGUgZmlyc3QgYWRkcmVzcyBhblxcbithbGxvY2F0aW9uIG11c3Qgbm90IHVzZTsgYW4gYWxsb2NhdGlvbidzIGJhc2UgcGx1cyBpdHMgc2l6ZSBtYXkgZXF1YWwgdGhlIGxpbWl0LlxcbiBcXG4gUmVmZXJlbmNlc1xcbiA9PT09PT09PT09XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svVE9ETyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svVE9ET1xcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IGMxM2FkMGRhZTc3NjMuLjAwMDAwMDAwMDAwMDBcXG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL1RPRE9cXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsNSArMCwwIEBAXFxuLVRPRE9cXG4tPT09PT1cXG4tXFxuLTEuIEFkZCB0ZXN0cyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KCkgb25jZSB0aGUgc2ltdWxhdG9yIGNhbiBtb2RlbFxcbi0gICBBUkNIX0xPV19BRERSRVNTX0xJTUlUIGFnYWluc3QgdGhlIGxvdyBtZW1vcnkgaW4gbWVtb3J5X2Jsb2NrXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svYXNtL2RtYS5oIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9hc20vZG1hLmhcXG5pbmRleCAxM2ZmOGU1ZDIyZWY2Li42NjA3NDA4ZGNmMjVkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svYXNtL2RtYS5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9hc20vZG1hLmhcXG5AQCAtMiw0ICsyLDEwIEBAXFxuICNpZm5kZWYgX1RPT0xTX0RNQV9IXFxuICNkZWZpbmUgX1RPT0xTX0RNQV9IXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuK3BoeXNfYWRkcl90IGR1bW15X3BoeXNpY2FsX21lbW9yeV9sb3dfbGltaXQodm9pZCk7XFxuK1xcbisjZGVmaW5lIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2xvd19saW1pdCgpXFxuK1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9tYWluLmMgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uY1xcbmluZGV4IDI3OGY5ZGVjNTAwODcuLjlhOTZlMTc4NTUxYjggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9tYWluLmNcXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uY1xcbkBAIC00LDYgKzQsNyBAQFxcbiAjaW5jbHVkZSBcXFwidGVzdHMvYWxsb2NfaGVscGVyc19hcGkuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3RzL2FsbG9jX25pZF9hcGkuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3RzL2FsbG9jX2V4YWN0X25pZF9hcGkuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RzL2FsbG9jX2xvd19hcGkuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3RzL2NvbW1vbi5oXFxcIlxcbiBcXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbkBAIC0xMiw2ICsxMyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0bWVtYmxvY2tfYmFzaWNfY2hlY2tzKCk7XFxuIFxcdG1lbWJsb2NrX2FsbG9jX2NoZWNrcygpO1xcbiBcXHRtZW1ibG9ja19hbGxvY19oZWxwZXJzX2NoZWNrcygpO1xcbitcXHRtZW1ibG9ja19hbGxvY19sb3dfY2hlY2tzKCk7XFxuIFxcdG1lbWJsb2NrX2FsbG9jX25pZF9jaGVja3MoKTtcXG4gXFx0bWVtYmxvY2tfYWxsb2NfZXhhY3RfbmlkX2NoZWNrcygpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9hbGxvY19sb3dfYXBpLmMgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTExNzQzMWYxZjcxNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuY1xcbkBAIC0wLDAgKzEsMTQ4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKyNpbmNsdWRlIFxcXCJhbGxvY19sb3dfYXBpLmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hbGlnbi5oXFx1MDAzZVxcbitcXG4rLyogQWxsb2NhdGUgYXQgdGhlIGZpcnN0IG9yIGxhc3QgYWxpZ25lZCBhZGRyZXNzIGJlbG93IHRoZSBsb3cgbGltaXQuICovXFxuK3N0YXRpYyBpbnQgYWxsb2NfbG93X3NpbXBsZV9jaGVjayh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJnbiA9IFxcdTAwMjZtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdO1xcbitcXHRwaHlzX2FkZHJfdCBzaXplID0gU1pfNjQ7XFxuK1xcdHBoeXNfYWRkcl90IGV4cGVjdGVkO1xcbitcXHR2b2lkICphbGxvY2F0ZWRfcHRyO1xcbitcXG4rXFx0UFJFRklYX1BVU0goKTtcXG4rXFx0c2V0dXBfbWVtYmxvY2soKTtcXG4rXFxuK1xcdC8qIFNpbXVsYXRlZCBwaHlzaWNhbCBSQU0gaXMgbm90IG5lY2Vzc2FyaWx5IFNNUF9DQUNIRV9CWVRFUyBhbGlnbmVkLiAqL1xcbitcXHRpZiAobWVtYmxvY2tfYm90dG9tX3VwKCkpXFxuK1xcdFxcdGV4cGVjdGVkID0gQUxJR04obWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpLCBTTVBfQ0FDSEVfQllURVMpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGV4cGVjdGVkID0gQUxJR05fRE9XTihBUkNIX0xPV19BRERSRVNTX0xJTUlUIC0gc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgU01QX0NBQ0hFX0JZVEVTKTtcXG4rXFxuK1xcdGFsbG9jYXRlZF9wdHIgPSBtZW1ibG9ja19hbGxvY19sb3coc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcXG4rXFxuK1xcdEFTU0VSVF9ORShhbGxvY2F0ZWRfcHRyLCBOVUxMKTtcXG4rXFx0QVNTRVJUX0VRKChwaHlzX2FkZHJfdCkodWludHB0cl90KWFsbG9jYXRlZF9wdHIsIGV4cGVjdGVkKTtcXG4rXFx0QVNTRVJUX01FTV9FUShhbGxvY2F0ZWRfcHRyLCAwLCBzaXplKTtcXG4rXFx0QVNTRVJUX0VRKHJnbi1cXHUwMDNlYmFzZSwgZXhwZWN0ZWQpO1xcbitcXHRBU1NFUlRfRVEocmduLVxcdTAwM2VzaXplLCBzaXplKTtcXG4rXFx0QVNTRVJUX0xFKHJlZ2lvbl9lbmQocmduKSwgQVJDSF9MT1dfQUREUkVTU19MSU1JVCk7XFxuK1xcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5jbnQsIDEpO1xcbitcXHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQudG90YWxfc2l6ZSwgc2l6ZSk7XFxuK1xcbitcXHR0ZXN0X3Bhc3NfcG9wKCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBUaGUgbGFzdCBieXRlIG9mIHRoZSBhbGxvY2F0aW9uIGlzIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBsb3cgbGltaXQuICovXFxuK3N0YXRpYyBpbnQgYWxsb2NfbG93X2V4YWN0X2xpbWl0X2NoZWNrKHZvaWQpXFxuK3tcXG4rXFx0cGh5c19hZGRyX3QgbGltaXQgPSBBUkNIX0xPV19BRERSRVNTX0xJTUlUO1xcbitcXHRwaHlzX2FkZHJfdCBiYXNlID0gQUxJR05fRE9XTihsaW1pdCAtIFNaXzY0LCBTTVBfQ0FDSEVfQllURVMpO1xcbitcXHRwaHlzX2FkZHJfdCBzaXplID0gbGltaXQgLSBiYXNlO1xcbitcXHR2b2lkICphbGxvY2F0ZWRfcHRyO1xcbitcXG4rXFx0UFJFRklYX1BVU0goKTtcXG4rXFx0c2V0dXBfbWVtYmxvY2soKTtcXG4rXFx0QVNTRVJUX0VRKG1lbWJsb2NrX3JlbW92ZShtZW1ibG9ja19zdGFydF9vZl9EUkFNKCksXFxuK1xcdFxcdFxcdFxcdCAgYmFzZSAtIG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSksIDApO1xcbitcXG4rXFx0YWxsb2NhdGVkX3B0ciA9IG1lbWJsb2NrX2FsbG9jX2xvdyhzaXplLCBTTVBfQ0FDSEVfQllURVMpO1xcbitcXG4rXFx0QVNTRVJUX05FKGFsbG9jYXRlZF9wdHIsIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEoKHBoeXNfYWRkcl90KSh1aW50cHRyX3QpYWxsb2NhdGVkX3B0ciwgYmFzZSk7XFxuK1xcdEFTU0VSVF9NRU1fRVEoYWxsb2NhdGVkX3B0ciwgMCwgc2l6ZSk7XFxuK1xcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdLmJhc2UsIGJhc2UpO1xcbitcXHRBU1NFUlRfRVEocmVnaW9uX2VuZChcXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uc1swXSksIGxpbWl0KTtcXG4rXFx0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLmNudCwgMSk7XFxuK1xcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC50b3RhbF9zaXplLCBzaXplKTtcXG4rXFxuK1xcdHRlc3RfcGFzc19wb3AoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoZXJlIGFyZSBzaXplIGJ5dGVzIGJlbG93IHRoZSBsaW1pdCwgYnV0IGFsaWduaW5nIHRoZSBzdGFydCBtYWtlcyB0aGVcXG4rICogYWxsb2NhdGlvbiBjcm9zcyBpdC4gTWVtb3J5IGFib3ZlIHRoZSBsaW1pdCBtdXN0IG5vdCBzYXRpc2Z5IHRoZSByZXF1ZXN0LlxcbisgKi9cXG4rc3RhdGljIGludCBhbGxvY19sb3dfYWxpZ25tZW50X2Nyb3NzZXNfbGltaXRfY2hlY2sodm9pZClcXG4re1xcbitcXHRwaHlzX2FkZHJfdCBsaW1pdCA9IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQ7XFxuK1xcdHBoeXNfYWRkcl90IGJhc2UgPSBBTElHTl9ET1dOKGxpbWl0LCBTTVBfQ0FDSEVfQllURVMpIC0gMTtcXG4rXFx0cGh5c19hZGRyX3Qgc2l6ZSA9IGxpbWl0IC0gYmFzZTtcXG4rXFx0dm9pZCAqYWxsb2NhdGVkX3B0cjtcXG4rXFxuK1xcdFBSRUZJWF9QVVNIKCk7XFxuK1xcdHNldHVwX21lbWJsb2NrKCk7XFxuK1xcdEFTU0VSVF9FUShtZW1ibG9ja19yZW1vdmUobWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpLFxcbitcXHRcXHRcXHRcXHQgIGJhc2UgLSBtZW1ibG9ja19zdGFydF9vZl9EUkFNKCkpLCAwKTtcXG4rXFxuK1xcdGFsbG9jYXRlZF9wdHIgPSBtZW1ibG9ja19hbGxvY19sb3coc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShhbGxvY2F0ZWRfcHRyLCBOVUxMKTtcXG4rXFx0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLmNudCwgMCk7XFxuK1xcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC50b3RhbF9zaXplLCAwKTtcXG4rXFx0QVNTRVJUX01FTV9FUSgodm9pZCAqKSh1aW50cHRyX3QpYmFzZSwgMSwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSAtIGJhc2UpO1xcbitcXG4rXFx0dGVzdF9wYXNzX3BvcCgpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogQWxsb2NhdGlvbiBtdXN0IGZhaWwgYWZ0ZXIgcmVzZXJ2aW5nIGFsbCBsb3cgbWVtb3J5LCB3aXRoIGhpZ2ggbWVtb3J5IGZyZWUuICovXFxuK3N0YXRpYyBpbnQgYWxsb2NfbG93X3Jlc2VydmVkX2NoZWNrKHZvaWQpXFxuK3tcXG4rXFx0cGh5c19hZGRyX3QgbGltaXQgPSBBUkNIX0xPV19BRERSRVNTX0xJTUlUO1xcbitcXHRwaHlzX2FkZHJfdCBiYXNlID0gZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2Jhc2UoKTtcXG4rXFx0cGh5c19hZGRyX3Qgc2l6ZSA9IFNaXzY0O1xcbitcXHR2b2lkICphbGxvY2F0ZWRfcHRyO1xcbitcXG4rXFx0UFJFRklYX1BVU0goKTtcXG4rXFx0c2V0dXBfbWVtYmxvY2soKTtcXG4rXFx0QVNTRVJUX0VRKG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgbGltaXQgLSBiYXNlKSwgMCk7XFxuK1xcbitcXHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XFxuK1xcbitcXHRBU1NFUlRfRVEoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5jbnQsIDEpO1xcbitcXHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uc1swXS5iYXNlLCBiYXNlKTtcXG4rXFx0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbnNbMF0uc2l6ZSwgbGltaXQgLSBiYXNlKTtcXG4rXFx0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnRvdGFsX3NpemUsIGxpbWl0IC0gYmFzZSk7XFxuK1xcdEFTU0VSVF9NRU1fRVEoKHZvaWQgKikodWludHB0cl90KWJhc2UsIDEsIE1FTV9TSVpFKTtcXG4rXFxuK1xcdGFsbG9jYXRlZF9wdHIgPSBtZW1ibG9ja19hbGxvYyhzaXplLCBTTVBfQ0FDSEVfQllURVMpO1xcbitcXHRBU1NFUlRfTkUoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XFxuK1xcdEFTU0VSVF9MRShsaW1pdCwgKHBoeXNfYWRkcl90KSh1aW50cHRyX3QpYWxsb2NhdGVkX3B0cik7XFxuK1xcdEFTU0VSVF9NRU1fRVEoYWxsb2NhdGVkX3B0ciwgMCwgc2l6ZSk7XFxuK1xcbitcXHR0ZXN0X3Bhc3NfcG9wKCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFsbG9jX2xvd19jaGVja3Modm9pZClcXG4re1xcbitcXHRhbGxvY19sb3dfc2ltcGxlX2NoZWNrKCk7XFxuK1xcdGFsbG9jX2xvd19leGFjdF9saW1pdF9jaGVjaygpO1xcbitcXHRhbGxvY19sb3dfYWxpZ25tZW50X2Nyb3NzZXNfbGltaXRfY2hlY2soKTtcXG4rXFx0YWxsb2NfbG93X3Jlc2VydmVkX2NoZWNrKCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3Modm9pZClcXG4re1xcbitcXHRwcmVmaXhfcmVzZXQoKTtcXG4rXFx0cHJlZml4X3B1c2goXFxcIm1lbWJsb2NrX2FsbG9jX2xvd1xcXCIpO1xcbitcXHR0ZXN0X3ByaW50KFxcXCJSdW5uaW5nIG1lbWJsb2NrX2FsbG9jX2xvdyB0ZXN0cy4uLlxcXFxuXFxcIik7XFxuK1xcbitcXHRyZXNldF9tZW1ibG9ja19hdHRyaWJ1dGVzKCk7XFxuK1xcdGR1bW15X3BoeXNpY2FsX21lbW9yeV9pbml0KCk7XFxuK1xcbitcXHRydW5fdG9wX2Rvd24oYWxsb2NfbG93X2NoZWNrcyk7XFxuK1xcdHJ1bl9ib3R0b21fdXAoYWxsb2NfbG93X2NoZWNrcyk7XFxuK1xcbitcXHRkdW1teV9waHlzaWNhbF9tZW1vcnlfY2xlYW51cCgpO1xcbitcXHRwcmVmaXhfcG9wKCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuaCBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yZTNjYmUzMzZmNWRhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5oXFxuQEAgLTAsMCArMSw5IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuKyNpZm5kZWYgX01FTUJMT0NLX0FMTE9DX0xPV19IXFxuKyNkZWZpbmUgX01FTUJMT0NLX0FMTE9DX0xPV19IXFxuK1xcbisjaW5jbHVkZSBcXFwiY29tbW9uLmhcXFwiXFxuK1xcbitpbnQgbWVtYmxvY2tfYWxsb2NfbG93X2NoZWNrcyh2b2lkKTtcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2NvbW1vbi5jIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9jb21tb24uY1xcbmluZGV4IDMyNTBjOGU1MTI0YjMuLmFjMDMyNjEwYTU2ZWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9jb21tb24uY1xcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvY29tbW9uLmNcXG5AQCAtMTE4LDYgKzExOCwxMiBAQCBwaHlzX2FkZHJfdCBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSh2b2lkKVxcbiBcXHRyZXR1cm4gKHBoeXNfYWRkcl90KW1lbW9yeV9ibG9jay5iYXNlO1xcbiB9XFxuIFxcbitwaHlzX2FkZHJfdCBkdW1teV9waHlzaWNhbF9tZW1vcnlfbG93X2xpbWl0KHZvaWQpXFxuK3tcXG4rXFx0LyogVGhlIGxvdyBsaW1pdCBpcyBoYWxmd2F5IHRocm91Z2ggbWVtb3J5IHJlZ2lzdGVyZWQgYnkgc2V0dXBfbWVtYmxvY2soKS4gKi9cXG4rXFx0cmV0dXJuIGR1bW15X3BoeXNpY2FsX21lbW9yeV9iYXNlKCkgKyBNRU1fU0laRSAvIDI7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpXFxuIHtcXG4gXFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoaGVscF9vcHRzKSAhPSBBUlJBWV9TSVpFKGxvbmdfb3B0cykgLSAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MjY6NTkuMjE1MTE4NzU2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDI3MTIxMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyBhbmQgdGVzdCBmcmFtZXdvcmsgZmlsZXMgd2l0aGluIHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svIChhZGRpbmcgdGVzdCBjYXNlcyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFiNjdlNzBkNDhjYmJmZTEwZjljZDBjMjZiZGNjZWFjZWU1NTJhOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMDoyNjo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL01ha2VmaWxlXG5pbmRleCBkODA5ODJjY2RjMjA5Li4yMDUyNGZjYmUzYzcyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9NYWtlZmlsZVxuQEAgLTcsNyArNyw4IEBAIENGTEFHUyArPSAtSS4gLUkuLi8uLi9pbmNsdWRlIC1XYWxsIC1PMiAtZnNhbml0aXplPWFkZHJlc3MgXFxcbiBMREZMQUdTICs9IC1mc2FuaXRpemU9YWRkcmVzcyAtZnNhbml0aXplPXVuZGVmaW5lZFxuIFRBUkdFVFMgPSBtYWluXG4gVEVTVF9PRklMRVMgPSB0ZXN0cy9hbGxvY19uaWRfYXBpLm8gdGVzdHMvYWxsb2NfaGVscGVyc19hcGkubyB0ZXN0cy9hbGxvY19hcGkubyBcXFxuLVx0XHQgIHRlc3RzL2Jhc2ljX2FwaS5vIHRlc3RzL2NvbW1vbi5vIHRlc3RzL2FsbG9jX2V4YWN0X25pZF9hcGkub1xuK1x0XHQgIHRlc3RzL2Jhc2ljX2FwaS5vIHRlc3RzL2NvbW1vbi5vIHRlc3RzL2FsbG9jX2V4YWN0X25pZF9hcGkubyBcXFxuK1x0XHQgIHRlc3RzL2FsbG9jX2xvd19hcGkub1xuIERFUF9PRklMRVMgPSBtZW1ibG9jay5vIGxpYi9zbGFiLm8gbW16b25lLm8gc2xhYi5vIGNtZGxpbmUub1xuIE9GSUxFUyA9IG1haW4ubyAkKERFUF9PRklMRVMpICQoVEVTVF9PRklMRVMpXG4gRVhUUl9TUkMgPSAuLi8uLi8uLi9tbS9tZW1ibG9jay5jXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9SRUFETUUgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRVxuaW5kZXggYjQzNWY0OGQ4YTcwMC4uNGVhMjkzMjA5NTQ4NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRVxuQEAgLTY3LDEzICs2NywxMyBAQCBtZW1ibG9ja1xuIHwtLSB0ZXN0c1xuIHwgICAgfC0tIGFsbG9jX2FwaS4oY3xoKSAgICAgICAgIC0tIG1lbWJsb2NrX2FsbG9jIHRlc3RzXG4gfCAgICB8LS0gYWxsb2NfaGVscGVyc19hcGkuKGN8aCkgLS0gbWVtYmxvY2tfYWxsb2NfZnJvbSB0ZXN0c1xuK3wgICAgfC0tIGFsbG9jX2xvd19hcGkuKGN8aCkgICAgIC0tIG1lbWJsb2NrX2FsbG9jX2xvdyB0ZXN0c1xuIHwgICAgfC0tIGFsbG9jX25pZF9hcGkuKGN8aCkgICAgIC0tIG1lbWJsb2NrX2FsbG9jX3RyeV9uaWQgdGVzdHNcbiB8ICAgIHwtLSBiYXNpY19hcGkuKGN8aCkgICAgICAgICAtLSBtZW1ibG9ja19hZGQvbWVtYmxvY2tfcmVzZXJ2ZS8uLi4gdGVzdHNcbiB8ICAgIHwtLSBjb21tb24uKGN8aCkgICAgICAgICAgICAtLSBoZWxwZXIgZnVuY3Rpb25zIGZvciByZXNldHRpbmcgbWVtYmxvY2s7XG4gfC0tIG1haW4uYyAgICAgICAgLS0tLS0tLS0tLS0tLS0uICAgZHVtbXkgcGh5c2ljYWwgbWVtb3J5IGRlZmluaXRpb25cbiB8LS0gTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICBgLSB0ZXN0IHJ1bm5lclxuIHwtLSBSRUFETUVcbi18LS0gVE9ET1xuIHwtLSAuZ2l0aWdub3JlXG4gXG4gU2ltdWxhdGluZyBwaHlzaWNhbCBtZW1vcnlcbkBAIC0xMDEsMTIgKzEwMSwxMCBAQCBUaGVyZSdzIG5vIG5lZWQgdG8gZXhwbGljaXRseSBmcmVlIHRoZSBkdW1teSBtZW1vcnkgZnJvbSBtZW1ibG9jayB2aWFcbiBtZW1ibG9ja19mcmVlKCkgY2FsbC4gVGhlIGVudHJ5IHdpbGwgYmUgZXJhc2VkIGJ5IHJlc2V0X21lbWJsb2NrX3JlZ2lvbnMoKSxcbiBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHRlc3QuXG4gXG4tS25vd24gaXNzdWVzXG4tPT09PT09PT09PT09XG4tXG4tMS4gVGVzdHMgZm9yIG1lbWJsb2NrX2FsbG9jX2xvdygpIGNhbid0IGJlIGVhc2lseSBpbXBsZW1lbnRlZC4gVGhlIGZ1bmN0aW9uIHVzZXNcbi0gICBBUkNIX0xPV19BRERSRVNTX0xJTUlUIG1hcmNvLCB3aGljaCBjYW4ndCBiZSBjaGFuZ2VkIHRvIHBvaW50IGF0IHRoZSBsb3dcbi0gICBtZW1vcnkgb2YgdGhlIG1lbW9yeV9ibG9jay5cbitUaGUgc2ltdWxhdG9yIGRlZmluZXMgQVJDSF9MT1dfQUREUkVTU19MSU1JVCBpbiBhc20vZG1hLmggdXNpbmcgdGhlIG1pZHBvaW50XG4rb2YgdGhlIE1FTV9TSVpFIHJhbmdlIHJlZ2lzdGVyZWQgYnkgc2V0dXBfbWVtYmxvY2soKS4gVGhpcyBsZWF2ZXMgcmVnaXN0ZXJlZFxuK21lbW9yeSBib3RoIGJlbG93IGFuZCBhYm92ZSB0aGUgbGltaXQuIFRoZSBsaW1pdCBpcyB0aGUgZmlyc3QgYWRkcmVzcyBhblxuK2FsbG9jYXRpb24gbXVzdCBub3QgdXNlOyBhbiBhbGxvY2F0aW9uJ3MgYmFzZSBwbHVzIGl0cyBzaXplIG1heSBlcXVhbCB0aGUgbGltaXQuXG4gXG4gUmVmZXJlbmNlc1xuID09PT09PT09PT1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL1RPRE8gYi90b29scy90ZXN0aW5nL21lbWJsb2NrL1RPRE9cbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggYzEzYWQwZGFlNzc2My4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9UT0RPXG4rKysgL2Rldi9udWxsXG5AQCAtMSw1ICswLDAgQEBcbi1UT0RPXG4tPT09PT1cbi1cbi0xLiBBZGQgdGVzdHMgZm9yIG1lbWJsb2NrX2FsbG9jX2xvdygpIG9uY2UgdGhlIHNpbXVsYXRvciBjYW4gbW9kZWxcbi0gICBBUkNIX0xPV19BRERSRVNTX0xJTUlUIGFnYWluc3QgdGhlIGxvdyBtZW1vcnkgaW4gbWVtb3J5X2Jsb2NrXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9hc20vZG1hLmggYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaFxuaW5kZXggMTNmZjhlNWQyMmVmNi4uNjYwNzQwOGRjZjI1ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svYXNtL2RtYS5oXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaFxuQEAgLTIsNCArMiwxMCBAQFxuICNpZm5kZWYgX1RPT0xTX0RNQV9IXG4gI2RlZmluZSBfVE9PTFNfRE1BX0hcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rcGh5c19hZGRyX3QgZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2xvd19saW1pdCh2b2lkKTtcbitcbisjZGVmaW5lIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2xvd19saW1pdCgpXG4rXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9tYWluLmMgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uY1xuaW5kZXggMjc4ZjlkZWM1MDA4Ny4uOWE5NmUxNzg1NTFiOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svbWFpbi5jXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uY1xuQEAgLTQsNiArNCw3IEBAXG4gI2luY2x1ZGUgXCJ0ZXN0cy9hbGxvY19oZWxwZXJzX2FwaS5oXCJcbiAjaW5jbHVkZSBcInRlc3RzL2FsbG9jX25pZF9hcGkuaFwiXG4gI2luY2x1ZGUgXCJ0ZXN0cy9hbGxvY19leGFjdF9uaWRfYXBpLmhcIlxuKyNpbmNsdWRlIFwidGVzdHMvYWxsb2NfbG93X2FwaS5oXCJcbiAjaW5jbHVkZSBcInRlc3RzL2NvbW1vbi5oXCJcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG5AQCAtMTIsNiArMTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRtZW1ibG9ja19iYXNpY19jaGVja3MoKTtcbiBcdG1lbWJsb2NrX2FsbG9jX2NoZWNrcygpO1xuIFx0bWVtYmxvY2tfYWxsb2NfaGVscGVyc19jaGVja3MoKTtcbitcdG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3MoKTtcbiBcdG1lbWJsb2NrX2FsbG9jX25pZF9jaGVja3MoKTtcbiBcdG1lbWJsb2NrX2FsbG9jX2V4YWN0X25pZF9jaGVja3MoKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuYyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTExNzQzMWYxZjcxNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9hbGxvY19sb3dfYXBpLmNcbkBAIC0wLDAgKzEsMTQ4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisjaW5jbHVkZSBcImFsbG9jX2xvd19hcGkuaFwiXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWxpZ24uaFx1MDAzZVxuK1xuKy8qIEFsbG9jYXRlIGF0IHRoZSBmaXJzdCBvciBsYXN0IGFsaWduZWQgYWRkcmVzcyBiZWxvdyB0aGUgbG93IGxpbWl0LiAqL1xuK3N0YXRpYyBpbnQgYWxsb2NfbG93X3NpbXBsZV9jaGVjayh2b2lkKVxuK3tcbitcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJnbiA9IFx1MDAyNm1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbnNbMF07XG4rXHRwaHlzX2FkZHJfdCBzaXplID0gU1pfNjQ7XG4rXHRwaHlzX2FkZHJfdCBleHBlY3RlZDtcbitcdHZvaWQgKmFsbG9jYXRlZF9wdHI7XG4rXG4rXHRQUkVGSVhfUFVTSCgpO1xuK1x0c2V0dXBfbWVtYmxvY2soKTtcbitcbitcdC8qIFNpbXVsYXRlZCBwaHlzaWNhbCBSQU0gaXMgbm90IG5lY2Vzc2FyaWx5IFNNUF9DQUNIRV9CWVRFUyBhbGlnbmVkLiAqL1xuK1x0aWYgKG1lbWJsb2NrX2JvdHRvbV91cCgpKVxuK1x0XHRleHBlY3RlZCA9IEFMSUdOKG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSwgU01QX0NBQ0hFX0JZVEVTKTtcbitcdGVsc2VcbitcdFx0ZXhwZWN0ZWQgPSBBTElHTl9ET1dOKEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgLSBzaXplLFxuK1x0XHRcdFx0ICAgICAgU01QX0NBQ0hFX0JZVEVTKTtcbitcbitcdGFsbG9jYXRlZF9wdHIgPSBtZW1ibG9ja19hbGxvY19sb3coc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcbitcbitcdEFTU0VSVF9ORShhbGxvY2F0ZWRfcHRyLCBOVUxMKTtcbitcdEFTU0VSVF9FUSgocGh5c19hZGRyX3QpKHVpbnRwdHJfdClhbGxvY2F0ZWRfcHRyLCBleHBlY3RlZCk7XG4rXHRBU1NFUlRfTUVNX0VRKGFsbG9jYXRlZF9wdHIsIDAsIHNpemUpO1xuK1x0QVNTRVJUX0VRKHJnbi1cdTAwM2ViYXNlLCBleHBlY3RlZCk7XG4rXHRBU1NFUlRfRVEocmduLVx1MDAzZXNpemUsIHNpemUpO1xuK1x0QVNTRVJUX0xFKHJlZ2lvbl9lbmQocmduKSwgQVJDSF9MT1dfQUREUkVTU19MSU1JVCk7XG4rXHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAxKTtcbitcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC50b3RhbF9zaXplLCBzaXplKTtcbitcbitcdHRlc3RfcGFzc19wb3AoKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBUaGUgbGFzdCBieXRlIG9mIHRoZSBhbGxvY2F0aW9uIGlzIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBsb3cgbGltaXQuICovXG4rc3RhdGljIGludCBhbGxvY19sb3dfZXhhY3RfbGltaXRfY2hlY2sodm9pZClcbit7XG4rXHRwaHlzX2FkZHJfdCBsaW1pdCA9IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQ7XG4rXHRwaHlzX2FkZHJfdCBiYXNlID0gQUxJR05fRE9XTihsaW1pdCAtIFNaXzY0LCBTTVBfQ0FDSEVfQllURVMpO1xuK1x0cGh5c19hZGRyX3Qgc2l6ZSA9IGxpbWl0IC0gYmFzZTtcbitcdHZvaWQgKmFsbG9jYXRlZF9wdHI7XG4rXG4rXHRQUkVGSVhfUFVTSCgpO1xuK1x0c2V0dXBfbWVtYmxvY2soKTtcbitcdEFTU0VSVF9FUShtZW1ibG9ja19yZW1vdmUobWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpLFxuK1x0XHRcdFx0ICBiYXNlIC0gbWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpKSwgMCk7XG4rXG4rXHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG4rXG4rXHRBU1NFUlRfTkUoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XG4rXHRBU1NFUlRfRVEoKHBoeXNfYWRkcl90KSh1aW50cHRyX3QpYWxsb2NhdGVkX3B0ciwgYmFzZSk7XG4rXHRBU1NFUlRfTUVNX0VRKGFsbG9jYXRlZF9wdHIsIDAsIHNpemUpO1xuK1x0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbnNbMF0uYmFzZSwgYmFzZSk7XG4rXHRBU1NFUlRfRVEocmVnaW9uX2VuZChcdTAwMjZtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdKSwgbGltaXQpO1xuK1x0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLmNudCwgMSk7XG4rXHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQudG90YWxfc2l6ZSwgc2l6ZSk7XG4rXG4rXHR0ZXN0X3Bhc3NfcG9wKCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBUaGVyZSBhcmUgc2l6ZSBieXRlcyBiZWxvdyB0aGUgbGltaXQsIGJ1dCBhbGlnbmluZyB0aGUgc3RhcnQgbWFrZXMgdGhlXG4rICogYWxsb2NhdGlvbiBjcm9zcyBpdC4gTWVtb3J5IGFib3ZlIHRoZSBsaW1pdCBtdXN0IG5vdCBzYXRpc2Z5IHRoZSByZXF1ZXN0LlxuKyAqL1xuK3N0YXRpYyBpbnQgYWxsb2NfbG93X2FsaWdubWVudF9jcm9zc2VzX2xpbWl0X2NoZWNrKHZvaWQpXG4re1xuK1x0cGh5c19hZGRyX3QgbGltaXQgPSBBUkNIX0xPV19BRERSRVNTX0xJTUlUO1xuK1x0cGh5c19hZGRyX3QgYmFzZSA9IEFMSUdOX0RPV04obGltaXQsIFNNUF9DQUNIRV9CWVRFUykgLSAxO1xuK1x0cGh5c19hZGRyX3Qgc2l6ZSA9IGxpbWl0IC0gYmFzZTtcbitcdHZvaWQgKmFsbG9jYXRlZF9wdHI7XG4rXG4rXHRQUkVGSVhfUFVTSCgpO1xuK1x0c2V0dXBfbWVtYmxvY2soKTtcbitcdEFTU0VSVF9FUShtZW1ibG9ja19yZW1vdmUobWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpLFxuK1x0XHRcdFx0ICBiYXNlIC0gbWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpKSwgMCk7XG4rXG4rXHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG4rXG4rXHRBU1NFUlRfRVEoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XG4rXHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAwKTtcbitcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC50b3RhbF9zaXplLCAwKTtcbitcdEFTU0VSVF9NRU1fRVEoKHZvaWQgKikodWludHB0cl90KWJhc2UsIDEsIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBiYXNlKTtcbitcbitcdHRlc3RfcGFzc19wb3AoKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBBbGxvY2F0aW9uIG11c3QgZmFpbCBhZnRlciByZXNlcnZpbmcgYWxsIGxvdyBtZW1vcnksIHdpdGggaGlnaCBtZW1vcnkgZnJlZS4gKi9cbitzdGF0aWMgaW50IGFsbG9jX2xvd19yZXNlcnZlZF9jaGVjayh2b2lkKVxuK3tcbitcdHBoeXNfYWRkcl90IGxpbWl0ID0gQVJDSF9MT1dfQUREUkVTU19MSU1JVDtcbitcdHBoeXNfYWRkcl90IGJhc2UgPSBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSgpO1xuK1x0cGh5c19hZGRyX3Qgc2l6ZSA9IFNaXzY0O1xuK1x0dm9pZCAqYWxsb2NhdGVkX3B0cjtcbitcbitcdFBSRUZJWF9QVVNIKCk7XG4rXHRzZXR1cF9tZW1ibG9jaygpO1xuK1x0QVNTRVJUX0VRKG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgbGltaXQgLSBiYXNlKSwgMCk7XG4rXG4rXHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG4rXG4rXHRBU1NFUlRfRVEoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XG4rXHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAxKTtcbitcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdLmJhc2UsIGJhc2UpO1xuK1x0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbnNbMF0uc2l6ZSwgbGltaXQgLSBiYXNlKTtcbitcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC50b3RhbF9zaXplLCBsaW1pdCAtIGJhc2UpO1xuK1x0QVNTRVJUX01FTV9FUSgodm9pZCAqKSh1aW50cHRyX3QpYmFzZSwgMSwgTUVNX1NJWkUpO1xuK1xuK1x0YWxsb2NhdGVkX3B0ciA9IG1lbWJsb2NrX2FsbG9jKHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG4rXHRBU1NFUlRfTkUoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XG4rXHRBU1NFUlRfTEUobGltaXQsIChwaHlzX2FkZHJfdCkodWludHB0cl90KWFsbG9jYXRlZF9wdHIpO1xuK1x0QVNTRVJUX01FTV9FUShhbGxvY2F0ZWRfcHRyLCAwLCBzaXplKTtcbitcbitcdHRlc3RfcGFzc19wb3AoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFsbG9jX2xvd19jaGVja3Modm9pZClcbit7XG4rXHRhbGxvY19sb3dfc2ltcGxlX2NoZWNrKCk7XG4rXHRhbGxvY19sb3dfZXhhY3RfbGltaXRfY2hlY2soKTtcbitcdGFsbG9jX2xvd19hbGlnbm1lbnRfY3Jvc3Nlc19saW1pdF9jaGVjaygpO1xuK1x0YWxsb2NfbG93X3Jlc2VydmVkX2NoZWNrKCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3Modm9pZClcbit7XG4rXHRwcmVmaXhfcmVzZXQoKTtcbitcdHByZWZpeF9wdXNoKFwibWVtYmxvY2tfYWxsb2NfbG93XCIpO1xuK1x0dGVzdF9wcmludChcIlJ1bm5pbmcgbWVtYmxvY2tfYWxsb2NfbG93IHRlc3RzLi4uXFxuXCIpO1xuK1xuK1x0cmVzZXRfbWVtYmxvY2tfYXR0cmlidXRlcygpO1xuK1x0ZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2luaXQoKTtcbitcbitcdHJ1bl90b3BfZG93bihhbGxvY19sb3dfY2hlY2tzKTtcbitcdHJ1bl9ib3R0b21fdXAoYWxsb2NfbG93X2NoZWNrcyk7XG4rXG4rXHRkdW1teV9waHlzaWNhbF9tZW1vcnlfY2xlYW51cCgpO1xuK1x0cHJlZml4X3BvcCgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5oIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9hbGxvY19sb3dfYXBpLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yZTNjYmUzMzZmNWRhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuaFxuQEAgLTAsMCArMSw5IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisjaWZuZGVmIF9NRU1CTE9DS19BTExPQ19MT1dfSFxuKyNkZWZpbmUgX01FTUJMT0NLX0FMTE9DX0xPV19IXG4rXG4rI2luY2x1ZGUgXCJjb21tb24uaFwiXG4rXG4raW50IG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3Modm9pZCk7XG4rXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9jb21tb24uYyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvY29tbW9uLmNcbmluZGV4IDMyNTBjOGU1MTI0YjMuLmFjMDMyNjEwYTU2ZWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2NvbW1vbi5jXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2NvbW1vbi5jXG5AQCAtMTE4LDYgKzExOCwxMiBAQCBwaHlzX2FkZHJfdCBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSh2b2lkKVxuIFx0cmV0dXJuIChwaHlzX2FkZHJfdCltZW1vcnlfYmxvY2suYmFzZTtcbiB9XG4gXG4rcGh5c19hZGRyX3QgZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2xvd19saW1pdCh2b2lkKVxuK3tcbitcdC8qIFRoZSBsb3cgbGltaXQgaXMgaGFsZndheSB0aHJvdWdoIG1lbW9yeSByZWdpc3RlcmVkIGJ5IHNldHVwX21lbWJsb2NrKCkuICovXG4rXHRyZXR1cm4gZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2Jhc2UoKSArIE1FTV9TSVpFIC8gMjtcbit9XG4rXG4gc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZylcbiB7XG4gXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShoZWxwX29wdHMpICE9IEFSUkFZX1NJWkUobG9uZ19vcHRzKSAtIDEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MjY6NTkuMjE1MTIwMTA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAyNzA4ODkyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IFdvcnRoRnV6emluZyA9IEZhbHNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGFuYWx5emUgdGhlIHBhdGNoIGRpZmYuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGFsbCBjb25maW5lZCB0byB0aGUgYHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgYE1ha2VmaWxlYCwgYFJFQURNRWAsIGBUT0RPYCwgYW5kIHNldmVyYWwgQyBhbmQgaGVhZGVyIGZpbGVzIHdpdGhpbiB0aGF0IGRpcmVjdG9yeTogYGFzbS9kbWEuaGAsIGBtYWluLmNgLCBgdGVzdHMvYWxsb2NfbG93X2FwaS5jYCwgYHRlc3RzL2FsbG9jX2xvd19hcGkuaGAsIGFuZCBgdGVzdHMvY29tbW9uLmNgLlxuXG5Ob3csIGFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcyBpbiBzZWN0aW9uIDIsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcuIFRoZSBrZXkgaGVyZSBpczogKkRvZXMgdGhlIG1vZGlmaWVkIGNvZGUgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzPypcblxuTG9va2luZyBhdCB0aGUgY29udGV4dCwgdGhpcyBpcyBhIHVzZXJzcGFjZSB0ZXN0IGhhcm5lc3Mgb3IgdW5pdCB0ZXN0cyBmb3IgdGhlIGBtZW1ibG9ja2AgZnVuY3Rpb25hbGl0eS4gSXQgY29tcGlsZXMgYSB1c2Vyc3BhY2UgYmluYXJ5IGBtYWluYCwgcHJlc3VtYWJseSB1c2luZyBjb21waWxlciBmbGFncyBsaWtlIGAtZnNhbml0aXplPWFkZHJlc3NgLCB3aGljaCBmdXJ0aGVyIHN1cHBvcnRzIHRoYXQgdGhpcyBpc24ndCBrZXJuZWwtbGV2ZWwgY29kZS4gQW5kLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgbm8gb3RoZXIgZmlsZXMgb3V0c2lkZSBvZiBgdG9vbHMvdGVzdGluZy9tZW1ibG9jay9gIGFyZSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gWWVwLCB0aGUgZGlmZiBjb25maXJtcyBpdDogYWxsIHRoZSBsaXN0ZWQgZmlsZXMgYXJlIHN0cmljdGx5IHdpdGhpbiB0aGF0IGRpcmVjdG9yeS5cblxuVGhlcmVmb3JlLCB1bmRlciB0aG9zZSBndWlkZWxpbmVzLCBJJ20gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBwYXRjaCBtb2RpZmllcyBleGNsdXNpdmVseSB1c2Vyc3BhY2UgdGVzdCBjb2RlLlxuXG5Ob3csIHRvIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbCwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvcnJlY3QgZm9ybWF0OiBgRW5hYmxlQ29uZmlnc2AgbmVlZHMgdG8gYmUgYFtdYCBvciBgbnVsbGAsIGBGb2N1c1N5bWJvbHNgIGlzIGFsc28gYFtdYCwgYW5kIEknbGwgbmVlZCBhIGNsZWFyIGBSZWFzb25pbmdgLlxuXG5JJ2xsIHBocmFzZSB0aGUgcmVhc29uaW5nIHRoaXMgd2F5OiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSB0b3VjaGVzIHVzZXJzcGFjZSB1bml0IHRlc3RzIGluIGB0b29scy90ZXN0aW5nL21lbWJsb2NrL2AgdG8gYWRkIHRlc3RzIGZvciBgbWVtYmxvY2tfYWxsb2NfbG93KClgLiBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBrZXJuZWwgYW5kIGlzIG5vdCB0YXJnZXRhYmxlL3JlYWNoYWJsZSBieSBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuXCIgVGhhdCdzIGNvbmNpc2UgYW5kIGV4cGxhaW5zICp3aHkqIGl0J3Mgbm90IHdvcnRoIGZ1enppbmcuXG5cbkFscmlnaHQsIHdpdGggdGhlIHJlYXNvbmluZyBmb3JtdWxhdGVkLCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjk3LCJPdXRwdXRUb2tlbnMiOjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6Mjc6MDUuMjQyMjEyNTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyBhbmQgdGVzdCBmcmFtZXdvcmsgZmlsZXMgd2l0aGluIHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svIChhZGRpbmcgdGVzdCBjYXNlcyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyBhbmQgdGVzdCBmcmFtZXdvcmsgZmlsZXMgd2l0aGluIHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svIChhZGRpbmcgdGVzdCBjYXNlcyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDoyNzowNS4yNDIyNDI2MzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowjxnrs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 00:01:00 +0000 UTC FinishedAt: 2026-09-10 00:27:05 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgYW5kIHRlc3QgZnJhbWV3b3JrIGZpbGVzIHdpdGhpbiB0b29scy90ZXN0aW5nL21lbWJsb2NrLyAoYWRkaW5nIHRlc3QgY2FzZXMgZm9yIG1lbWJsb2NrX2FsbG9jX2xvdykuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFiNjdlNzBkNDhjYmJmZTEwZjljZDBjMjZiZGNjZWFjZWU1NTJhOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMDoyNjo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9NYWtlZmlsZVxuaW5kZXggZDgwOTgyY2NkYzIwOS4uMjA1MjRmY2JlM2M3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svTWFrZWZpbGVcbkBAIC03LDcgJiM0Mzs3LDggQEAgQ0ZMQUdTICYjNDM7PSAtSS4gLUkuLi8uLi9pbmNsdWRlIC1XYWxsIC1PMiAtZnNhbml0aXplPWFkZHJlc3MgXFxcbiBMREZMQUdTICYjNDM7PSAtZnNhbml0aXplPWFkZHJlc3MgLWZzYW5pdGl6ZT11bmRlZmluZWRcbiBUQVJHRVRTID0gbWFpblxuIFRFU1RfT0ZJTEVTID0gdGVzdHMvYWxsb2NfbmlkX2FwaS5vIHRlc3RzL2FsbG9jX2hlbHBlcnNfYXBpLm8gdGVzdHMvYWxsb2NfYXBpLm8gXFxcbi1cdFx0ICB0ZXN0cy9iYXNpY19hcGkubyB0ZXN0cy9jb21tb24ubyB0ZXN0cy9hbGxvY19leGFjdF9uaWRfYXBpLm9cbiYjNDM7XHRcdCAgdGVzdHMvYmFzaWNfYXBpLm8gdGVzdHMvY29tbW9uLm8gdGVzdHMvYWxsb2NfZXhhY3RfbmlkX2FwaS5vIFxcXG4mIzQzO1x0XHQgIHRlc3RzL2FsbG9jX2xvd19hcGkub1xuIERFUF9PRklMRVMgPSBtZW1ibG9jay5vIGxpYi9zbGFiLm8gbW16b25lLm8gc2xhYi5vIGNtZGxpbmUub1xuIE9GSUxFUyA9IG1haW4ubyAkKERFUF9PRklMRVMpICQoVEVTVF9PRklMRVMpXG4gRVhUUl9TUkMgPSAuLi8uLi8uLi9tbS9tZW1ibG9jay5jXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9SRUFETUUgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRVxuaW5kZXggYjQzNWY0OGQ4YTcwMC4uNGVhMjkzMjA5NTQ4NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRVxuQEAgLTY3LDEzICYjNDM7NjcsMTMgQEAgbWVtYmxvY2tcbiB8LS0gdGVzdHNcbiB8ICAgIHwtLSBhbGxvY19hcGkuKGN8aCkgICAgICAgICAtLSBtZW1ibG9ja19hbGxvYyB0ZXN0c1xuIHwgICAgfC0tIGFsbG9jX2hlbHBlcnNfYXBpLihjfGgpIC0tIG1lbWJsb2NrX2FsbG9jX2Zyb20gdGVzdHNcbiYjNDM7fCAgICB8LS0gYWxsb2NfbG93X2FwaS4oY3xoKSAgICAgLS0gbWVtYmxvY2tfYWxsb2NfbG93IHRlc3RzXG4gfCAgICB8LS0gYWxsb2NfbmlkX2FwaS4oY3xoKSAgICAgLS0gbWVtYmxvY2tfYWxsb2NfdHJ5X25pZCB0ZXN0c1xuIHwgICAgfC0tIGJhc2ljX2FwaS4oY3xoKSAgICAgICAgIC0tIG1lbWJsb2NrX2FkZC9tZW1ibG9ja19yZXNlcnZlLy4uLiB0ZXN0c1xuIHwgICAgfC0tIGNvbW1vbi4oY3xoKSAgICAgICAgICAgIC0tIGhlbHBlciBmdW5jdGlvbnMgZm9yIHJlc2V0dGluZyBtZW1ibG9jaztcbiB8LS0gbWFpbi5jICAgICAgICAtLS0tLS0tLS0tLS0tLS4gICBkdW1teSBwaHlzaWNhbCBtZW1vcnkgZGVmaW5pdGlvblxuIHwtLSBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIGAtIHRlc3QgcnVubmVyXG4gfC0tIFJFQURNRVxuLXwtLSBUT0RPXG4gfC0tIC5naXRpZ25vcmVcbiBcbiBTaW11bGF0aW5nIHBoeXNpY2FsIG1lbW9yeVxuQEAgLTEwMSwxMiAmIzQzOzEwMSwxMCBAQCBUaGVyZSYjMzk7cyBubyBuZWVkIHRvIGV4cGxpY2l0bHkgZnJlZSB0aGUgZHVtbXkgbWVtb3J5IGZyb20gbWVtYmxvY2sgdmlhXG4gbWVtYmxvY2tfZnJlZSgpIGNhbGwuIFRoZSBlbnRyeSB3aWxsIGJlIGVyYXNlZCBieSByZXNldF9tZW1ibG9ja19yZWdpb25zKCksXG4gY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCB0ZXN0LlxuIFxuLUtub3duIGlzc3Vlc1xuLT09PT09PT09PT09PVxuLVxuLTEuIFRlc3RzIGZvciBtZW1ibG9ja19hbGxvY19sb3coKSBjYW4mIzM5O3QgYmUgZWFzaWx5IGltcGxlbWVudGVkLiBUaGUgZnVuY3Rpb24gdXNlc1xuLSAgIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgbWFyY28sIHdoaWNoIGNhbiYjMzk7dCBiZSBjaGFuZ2VkIHRvIHBvaW50IGF0IHRoZSBsb3dcbi0gICBtZW1vcnkgb2YgdGhlIG1lbW9yeV9ibG9jay5cbiYjNDM7VGhlIHNpbXVsYXRvciBkZWZpbmVzIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgaW4gYXNtL2RtYS5oIHVzaW5nIHRoZSBtaWRwb2ludFxuJiM0MztvZiB0aGUgTUVNX1NJWkUgcmFuZ2UgcmVnaXN0ZXJlZCBieSBzZXR1cF9tZW1ibG9jaygpLiBUaGlzIGxlYXZlcyByZWdpc3RlcmVkXG4mIzQzO21lbW9yeSBib3RoIGJlbG93IGFuZCBhYm92ZSB0aGUgbGltaXQuIFRoZSBsaW1pdCBpcyB0aGUgZmlyc3QgYWRkcmVzcyBhblxuJiM0MzthbGxvY2F0aW9uIG11c3Qgbm90IHVzZTsgYW4gYWxsb2NhdGlvbiYjMzk7cyBiYXNlIHBsdXMgaXRzIHNpemUgbWF5IGVxdWFsIHRoZSBsaW1pdC5cbiBcbiBSZWZlcmVuY2VzXG4gPT09PT09PT09PVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svVE9ETyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svVE9ET1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBjMTNhZDBkYWU3NzYzLi4wMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL1RPRE9cbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDUgJiM0MzswLDAgQEBcbi1UT0RPXG4tPT09PT1cbi1cbi0xLiBBZGQgdGVzdHMgZm9yIG1lbWJsb2NrX2FsbG9jX2xvdygpIG9uY2UgdGhlIHNpbXVsYXRvciBjYW4gbW9kZWxcbi0gICBBUkNIX0xPV19BRERSRVNTX0xJTUlUIGFnYWluc3QgdGhlIGxvdyBtZW1vcnkgaW4gbWVtb3J5X2Jsb2NrXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9hc20vZG1hLmggYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaFxuaW5kZXggMTNmZjhlNWQyMmVmNi4uNjYwNzQwOGRjZjI1ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svYXNtL2RtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaFxuQEAgLTIsNCAmIzQzOzIsMTAgQEBcbiAjaWZuZGVmIF9UT09MU19ETUFfSFxuICNkZWZpbmUgX1RPT0xTX0RNQV9IXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3BoeXNfYWRkcl90IGR1bW15X3BoeXNpY2FsX21lbW9yeV9sb3dfbGltaXQodm9pZCk7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2xvd19saW1pdCgpXG4mIzQzO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svbWFpbi5jIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9tYWluLmNcbmluZGV4IDI3OGY5ZGVjNTAwODcuLjlhOTZlMTc4NTUxYjggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9tYWluLmNcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt0ZXN0cy9hbGxvY19oZWxwZXJzX2FwaS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdHMvYWxsb2NfbmlkX2FwaS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGVzdHMvYWxsb2NfZXhhY3RfbmlkX2FwaS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RzL2FsbG9jX2xvd19hcGkuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Rlc3RzL2NvbW1vbi5oXCYjMzQ7XG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuQEAgLTEyLDYgJiM0MzsxMyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdG1lbWJsb2NrX2Jhc2ljX2NoZWNrcygpO1xuIFx0bWVtYmxvY2tfYWxsb2NfY2hlY2tzKCk7XG4gXHRtZW1ibG9ja19hbGxvY19oZWxwZXJzX2NoZWNrcygpO1xuJiM0MztcdG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3MoKTtcbiBcdG1lbWJsb2NrX2FsbG9jX25pZF9jaGVja3MoKTtcbiBcdG1lbWJsb2NrX2FsbG9jX2V4YWN0X25pZF9jaGVja3MoKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuYyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTExNzQzMWYxZjcxNVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9hbGxvY19sb3dfYXBpLmNcbkBAIC0wLDAgJiM0MzsxLDE0OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsjaW5jbHVkZSBcJiMzNDthbGxvY19sb3dfYXBpLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYWxpZ24uaFx1MDAzZVxuJiM0MztcbiYjNDM7LyogQWxsb2NhdGUgYXQgdGhlIGZpcnN0IG9yIGxhc3QgYWxpZ25lZCBhZGRyZXNzIGJlbG93IHRoZSBsb3cgbGltaXQuICovXG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NfbG93X3NpbXBsZV9jaGVjayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmduID0gXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uc1swXTtcbiYjNDM7XHRwaHlzX2FkZHJfdCBzaXplID0gU1pfNjQ7XG4mIzQzO1x0cGh5c19hZGRyX3QgZXhwZWN0ZWQ7XG4mIzQzO1x0dm9pZCAqYWxsb2NhdGVkX3B0cjtcbiYjNDM7XG4mIzQzO1x0UFJFRklYX1BVU0goKTtcbiYjNDM7XHRzZXR1cF9tZW1ibG9jaygpO1xuJiM0MztcbiYjNDM7XHQvKiBTaW11bGF0ZWQgcGh5c2ljYWwgUkFNIGlzIG5vdCBuZWNlc3NhcmlseSBTTVBfQ0FDSEVfQllURVMgYWxpZ25lZC4gKi9cbiYjNDM7XHRpZiAobWVtYmxvY2tfYm90dG9tX3VwKCkpXG4mIzQzO1x0XHRleHBlY3RlZCA9IEFMSUdOKG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSwgU01QX0NBQ0hFX0JZVEVTKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRleHBlY3RlZCA9IEFMSUdOX0RPV04oQVJDSF9MT1dfQUREUkVTU19MSU1JVCAtIHNpemUsXG4mIzQzO1x0XHRcdFx0ICAgICAgU01QX0NBQ0hFX0JZVEVTKTtcbiYjNDM7XG4mIzQzO1x0YWxsb2NhdGVkX3B0ciA9IG1lbWJsb2NrX2FsbG9jX2xvdyhzaXplLCBTTVBfQ0FDSEVfQllURVMpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfTkUoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX0VRKChwaHlzX2FkZHJfdCkodWludHB0cl90KWFsbG9jYXRlZF9wdHIsIGV4cGVjdGVkKTtcbiYjNDM7XHRBU1NFUlRfTUVNX0VRKGFsbG9jYXRlZF9wdHIsIDAsIHNpemUpO1xuJiM0MztcdEFTU0VSVF9FUShyZ24tXHUwMDNlYmFzZSwgZXhwZWN0ZWQpO1xuJiM0MztcdEFTU0VSVF9FUShyZ24tXHUwMDNlc2l6ZSwgc2l6ZSk7XG4mIzQzO1x0QVNTRVJUX0xFKHJlZ2lvbl9lbmQocmduKSwgQVJDSF9MT1dfQUREUkVTU19MSU1JVCk7XG4mIzQzO1x0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLmNudCwgMSk7XG4mIzQzO1x0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnRvdGFsX3NpemUsIHNpemUpO1xuJiM0MztcbiYjNDM7XHR0ZXN0X3Bhc3NfcG9wKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSBsYXN0IGJ5dGUgb2YgdGhlIGFsbG9jYXRpb24gaXMgaW1tZWRpYXRlbHkgYmVsb3cgdGhlIGxvdyBsaW1pdC4gKi9cbiYjNDM7c3RhdGljIGludCBhbGxvY19sb3dfZXhhY3RfbGltaXRfY2hlY2sodm9pZClcbiYjNDM7e1xuJiM0MztcdHBoeXNfYWRkcl90IGxpbWl0ID0gQVJDSF9MT1dfQUREUkVTU19MSU1JVDtcbiYjNDM7XHRwaHlzX2FkZHJfdCBiYXNlID0gQUxJR05fRE9XTihsaW1pdCAtIFNaXzY0LCBTTVBfQ0FDSEVfQllURVMpO1xuJiM0MztcdHBoeXNfYWRkcl90IHNpemUgPSBsaW1pdCAtIGJhc2U7XG4mIzQzO1x0dm9pZCAqYWxsb2NhdGVkX3B0cjtcbiYjNDM7XG4mIzQzO1x0UFJFRklYX1BVU0goKTtcbiYjNDM7XHRzZXR1cF9tZW1ibG9jaygpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9ja19yZW1vdmUobWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpLFxuJiM0MztcdFx0XHRcdCAgYmFzZSAtIG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSksIDApO1xuJiM0MztcbiYjNDM7XHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9ORShhbGxvY2F0ZWRfcHRyLCBOVUxMKTtcbiYjNDM7XHRBU1NFUlRfRVEoKHBoeXNfYWRkcl90KSh1aW50cHRyX3QpYWxsb2NhdGVkX3B0ciwgYmFzZSk7XG4mIzQzO1x0QVNTRVJUX01FTV9FUShhbGxvY2F0ZWRfcHRyLCAwLCBzaXplKTtcbiYjNDM7XHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uc1swXS5iYXNlLCBiYXNlKTtcbiYjNDM7XHRBU1NFUlRfRVEocmVnaW9uX2VuZChcdTAwMjZtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdKSwgbGltaXQpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5jbnQsIDEpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC50b3RhbF9zaXplLCBzaXplKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9wYXNzX3BvcCgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGVyZSBhcmUgc2l6ZSBieXRlcyBiZWxvdyB0aGUgbGltaXQsIGJ1dCBhbGlnbmluZyB0aGUgc3RhcnQgbWFrZXMgdGhlXG4mIzQzOyAqIGFsbG9jYXRpb24gY3Jvc3MgaXQuIE1lbW9yeSBhYm92ZSB0aGUgbGltaXQgbXVzdCBub3Qgc2F0aXNmeSB0aGUgcmVxdWVzdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NfbG93X2FsaWdubWVudF9jcm9zc2VzX2xpbWl0X2NoZWNrKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRwaHlzX2FkZHJfdCBsaW1pdCA9IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQ7XG4mIzQzO1x0cGh5c19hZGRyX3QgYmFzZSA9IEFMSUdOX0RPV04obGltaXQsIFNNUF9DQUNIRV9CWVRFUykgLSAxO1xuJiM0MztcdHBoeXNfYWRkcl90IHNpemUgPSBsaW1pdCAtIGJhc2U7XG4mIzQzO1x0dm9pZCAqYWxsb2NhdGVkX3B0cjtcbiYjNDM7XG4mIzQzO1x0UFJFRklYX1BVU0goKTtcbiYjNDM7XHRzZXR1cF9tZW1ibG9jaygpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9ja19yZW1vdmUobWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpLFxuJiM0MztcdFx0XHRcdCAgYmFzZSAtIG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSksIDApO1xuJiM0MztcbiYjNDM7XHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShhbGxvY2F0ZWRfcHRyLCBOVUxMKTtcbiYjNDM7XHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQudG90YWxfc2l6ZSwgMCk7XG4mIzQzO1x0QVNTRVJUX01FTV9FUSgodm9pZCAqKSh1aW50cHRyX3QpYmFzZSwgMSwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSAtIGJhc2UpO1xuJiM0MztcbiYjNDM7XHR0ZXN0X3Bhc3NfcG9wKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEFsbG9jYXRpb24gbXVzdCBmYWlsIGFmdGVyIHJlc2VydmluZyBhbGwgbG93IG1lbW9yeSwgd2l0aCBoaWdoIG1lbW9yeSBmcmVlLiAqL1xuJiM0MztzdGF0aWMgaW50IGFsbG9jX2xvd19yZXNlcnZlZF9jaGVjayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cGh5c19hZGRyX3QgbGltaXQgPSBBUkNIX0xPV19BRERSRVNTX0xJTUlUO1xuJiM0MztcdHBoeXNfYWRkcl90IGJhc2UgPSBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSgpO1xuJiM0MztcdHBoeXNfYWRkcl90IHNpemUgPSBTWl82NDtcbiYjNDM7XHR2b2lkICphbGxvY2F0ZWRfcHRyO1xuJiM0MztcbiYjNDM7XHRQUkVGSVhfUFVTSCgpO1xuJiM0MztcdHNldHVwX21lbWJsb2NrKCk7XG4mIzQzO1x0QVNTRVJUX0VRKG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgbGltaXQgLSBiYXNlKSwgMCk7XG4mIzQzO1xuJiM0MztcdGFsbG9jYXRlZF9wdHIgPSBtZW1ibG9ja19hbGxvY19sb3coc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGFsbG9jYXRlZF9wdHIsIE5VTEwpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5jbnQsIDEpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdLmJhc2UsIGJhc2UpO1xuJiM0MztcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdLnNpemUsIGxpbWl0IC0gYmFzZSk7XG4mIzQzO1x0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnRvdGFsX3NpemUsIGxpbWl0IC0gYmFzZSk7XG4mIzQzO1x0QVNTRVJUX01FTV9FUSgodm9pZCAqKSh1aW50cHRyX3QpYmFzZSwgMSwgTUVNX1NJWkUpO1xuJiM0MztcbiYjNDM7XHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcbiYjNDM7XHRBU1NFUlRfTkUoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX0xFKGxpbWl0LCAocGh5c19hZGRyX3QpKHVpbnRwdHJfdClhbGxvY2F0ZWRfcHRyKTtcbiYjNDM7XHRBU1NFUlRfTUVNX0VRKGFsbG9jYXRlZF9wdHIsIDAsIHNpemUpO1xuJiM0MztcbiYjNDM7XHR0ZXN0X3Bhc3NfcG9wKCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWxsb2NfbG93X2NoZWNrcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YWxsb2NfbG93X3NpbXBsZV9jaGVjaygpO1xuJiM0MztcdGFsbG9jX2xvd19leGFjdF9saW1pdF9jaGVjaygpO1xuJiM0MztcdGFsbG9jX2xvd19hbGlnbm1lbnRfY3Jvc3Nlc19saW1pdF9jaGVjaygpO1xuJiM0MztcdGFsbG9jX2xvd19yZXNlcnZlZF9jaGVjaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHByZWZpeF9yZXNldCgpO1xuJiM0MztcdHByZWZpeF9wdXNoKFwmIzM0O21lbWJsb2NrX2FsbG9jX2xvd1wmIzM0Oyk7XG4mIzQzO1x0dGVzdF9wcmludChcJiMzNDtSdW5uaW5nIG1lbWJsb2NrX2FsbG9jX2xvdyB0ZXN0cy4uLlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJlc2V0X21lbWJsb2NrX2F0dHJpYnV0ZXMoKTtcbiYjNDM7XHRkdW1teV9waHlzaWNhbF9tZW1vcnlfaW5pdCgpO1xuJiM0MztcbiYjNDM7XHRydW5fdG9wX2Rvd24oYWxsb2NfbG93X2NoZWNrcyk7XG4mIzQzO1x0cnVuX2JvdHRvbV91cChhbGxvY19sb3dfY2hlY2tzKTtcbiYjNDM7XG4mIzQzO1x0ZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2NsZWFudXAoKTtcbiYjNDM7XHRwcmVmaXhfcG9wKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9hbGxvY19sb3dfYXBpLmggYi90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjJlM2NiZTMzNmY1ZGFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5oXG5AQCAtMCwwICYjNDM7MSw5IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzOyNpZm5kZWYgX01FTUJMT0NLX0FMTE9DX0xPV19IXG4mIzQzOyNkZWZpbmUgX01FTUJMT0NLX0FMTE9DX0xPV19IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7aW50IG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3Modm9pZCk7XG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2NvbW1vbi5jIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9jb21tb24uY1xuaW5kZXggMzI1MGM4ZTUxMjRiMy4uYWMwMzI2MTBhNTZlYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvY29tbW9uLmNcbkBAIC0xMTgsNiAmIzQzOzExOCwxMiBAQCBwaHlzX2FkZHJfdCBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSh2b2lkKVxuIFx0cmV0dXJuIChwaHlzX2FkZHJfdCltZW1vcnlfYmxvY2suYmFzZTtcbiB9XG4gXG4mIzQzO3BoeXNfYWRkcl90IGR1bW15X3BoeXNpY2FsX21lbW9yeV9sb3dfbGltaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdC8qIFRoZSBsb3cgbGltaXQgaXMgaGFsZndheSB0aHJvdWdoIG1lbW9yeSByZWdpc3RlcmVkIGJ5IHNldHVwX21lbWJsb2NrKCkuICovXG4mIzQzO1x0cmV0dXJuIGR1bW15X3BoeXNpY2FsX21lbW9yeV9iYXNlKCkgJiM0MzsgTUVNX1NJWkUgLyAyO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpXG4ge1xuIFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoaGVscF9vcHRzKSAhPSBBUlJBWV9TSVpFKGxvbmdfb3B0cykgLSAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMDoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyBhbmQgdGVzdCBmcmFtZXdvcmsgZmlsZXMgd2l0aGluIHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svIChhZGRpbmcgdGVzdCBjYXNlcyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWI2N2U3MGQ0OGNiYmZlMTBmOWNkMGMyNmJkY2NlYWNlZTU1MmE5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDAwOjI2OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svTWFrZWZpbGUKaW5kZXggZDgwOTgyY2NkYzIwOS4uMjA1MjRmY2JlM2M3MiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL01ha2VmaWxlCkBAIC03LDcgJiM0Mzs3LDggQEAgQ0ZMQUdTICYjNDM7PSAtSS4gLUkuLi8uLi9pbmNsdWRlIC1XYWxsIC1PMiAtZnNhbml0aXplPWFkZHJlc3MgXAogTERGTEFHUyAmIzQzOz0gLWZzYW5pdGl6ZT1hZGRyZXNzIC1mc2FuaXRpemU9dW5kZWZpbmVkCiBUQVJHRVRTID0gbWFpbgogVEVTVF9PRklMRVMgPSB0ZXN0cy9hbGxvY19uaWRfYXBpLm8gdGVzdHMvYWxsb2NfaGVscGVyc19hcGkubyB0ZXN0cy9hbGxvY19hcGkubyBcCi0JCSAgdGVzdHMvYmFzaWNfYXBpLm8gdGVzdHMvY29tbW9uLm8gdGVzdHMvYWxsb2NfZXhhY3RfbmlkX2FwaS5vCiYjNDM7CQkgIHRlc3RzL2Jhc2ljX2FwaS5vIHRlc3RzL2NvbW1vbi5vIHRlc3RzL2FsbG9jX2V4YWN0X25pZF9hcGkubyBcCiYjNDM7CQkgIHRlc3RzL2FsbG9jX2xvd19hcGkubwogREVQX09GSUxFUyA9IG1lbWJsb2NrLm8gbGliL3NsYWIubyBtbXpvbmUubyBzbGFiLm8gY21kbGluZS5vCiBPRklMRVMgPSBtYWluLm8gJChERVBfT0ZJTEVTKSAkKFRFU1RfT0ZJTEVTKQogRVhUUl9TUkMgPSAuLi8uLi8uLi9tbS9tZW1ibG9jay5jCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRSBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FCmluZGV4IGI0MzVmNDhkOGE3MDAuLjRlYTI5MzIwOTU0ODcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FCkBAIC02NywxMyAmIzQzOzY3LDEzIEBAIG1lbWJsb2NrCiB8LS0gdGVzdHMKIHwgICAgfC0tIGFsbG9jX2FwaS4oY3xoKSAgICAgICAgIC0tIG1lbWJsb2NrX2FsbG9jIHRlc3RzCiB8ICAgIHwtLSBhbGxvY19oZWxwZXJzX2FwaS4oY3xoKSAtLSBtZW1ibG9ja19hbGxvY19mcm9tIHRlc3RzCiYjNDM7fCAgICB8LS0gYWxsb2NfbG93X2FwaS4oY3xoKSAgICAgLS0gbWVtYmxvY2tfYWxsb2NfbG93IHRlc3RzCiB8ICAgIHwtLSBhbGxvY19uaWRfYXBpLihjfGgpICAgICAtLSBtZW1ibG9ja19hbGxvY190cnlfbmlkIHRlc3RzCiB8ICAgIHwtLSBiYXNpY19hcGkuKGN8aCkgICAgICAgICAtLSBtZW1ibG9ja19hZGQvbWVtYmxvY2tfcmVzZXJ2ZS8uLi4gdGVzdHMKIHwgICAgfC0tIGNvbW1vbi4oY3xoKSAgICAgICAgICAgIC0tIGhlbHBlciBmdW5jdGlvbnMgZm9yIHJlc2V0dGluZyBtZW1ibG9jazsKIHwtLSBtYWluLmMgICAgICAgIC0tLS0tLS0tLS0tLS0tLiAgIGR1bW15IHBoeXNpY2FsIG1lbW9yeSBkZWZpbml0aW9uCiB8LS0gTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICBgLSB0ZXN0IHJ1bm5lcgogfC0tIFJFQURNRQotfC0tIFRPRE8KIHwtLSAuZ2l0aWdub3JlCiAKIFNpbXVsYXRpbmcgcGh5c2ljYWwgbWVtb3J5CkBAIC0xMDEsMTIgJiM0MzsxMDEsMTAgQEAgVGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IGZyZWUgdGhlIGR1bW15IG1lbW9yeSBmcm9tIG1lbWJsb2NrIHZpYQogbWVtYmxvY2tfZnJlZSgpIGNhbGwuIFRoZSBlbnRyeSB3aWxsIGJlIGVyYXNlZCBieSByZXNldF9tZW1ibG9ja19yZWdpb25zKCksCiBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHRlc3QuCiAKLUtub3duIGlzc3VlcwotPT09PT09PT09PT09Ci0KLTEuIFRlc3RzIGZvciBtZW1ibG9ja19hbGxvY19sb3coKSBjYW4mIzM5O3QgYmUgZWFzaWx5IGltcGxlbWVudGVkLiBUaGUgZnVuY3Rpb24gdXNlcwotICAgQVJDSF9MT1dfQUREUkVTU19MSU1JVCBtYXJjbywgd2hpY2ggY2FuJiMzOTt0IGJlIGNoYW5nZWQgdG8gcG9pbnQgYXQgdGhlIGxvdwotICAgbWVtb3J5IG9mIHRoZSBtZW1vcnlfYmxvY2suCiYjNDM7VGhlIHNpbXVsYXRvciBkZWZpbmVzIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgaW4gYXNtL2RtYS5oIHVzaW5nIHRoZSBtaWRwb2ludAomIzQzO29mIHRoZSBNRU1fU0laRSByYW5nZSByZWdpc3RlcmVkIGJ5IHNldHVwX21lbWJsb2NrKCkuIFRoaXMgbGVhdmVzIHJlZ2lzdGVyZWQKJiM0MzttZW1vcnkgYm90aCBiZWxvdyBhbmQgYWJvdmUgdGhlIGxpbWl0LiBUaGUgbGltaXQgaXMgdGhlIGZpcnN0IGFkZHJlc3MgYW4KJiM0MzthbGxvY2F0aW9uIG11c3Qgbm90IHVzZTsgYW4gYWxsb2NhdGlvbiYjMzk7cyBiYXNlIHBsdXMgaXRzIHNpemUgbWF5IGVxdWFsIHRoZSBsaW1pdC4KIAogUmVmZXJlbmNlcwogPT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9UT0RPIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9UT0RPCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTNhZDBkYWU3NzYzLi4wMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svVE9ETwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDUgJiM0MzswLDAgQEAKLVRPRE8KLT09PT09Ci0KLTEuIEFkZCB0ZXN0cyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KCkgb25jZSB0aGUgc2ltdWxhdG9yIGNhbiBtb2RlbAotICAgQVJDSF9MT1dfQUREUkVTU19MSU1JVCBhZ2FpbnN0IHRoZSBsb3cgbWVtb3J5IGluIG1lbW9yeV9ibG9jawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9hc20vZG1hLmggYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaAppbmRleCAxM2ZmOGU1ZDIyZWY2Li42NjA3NDA4ZGNmMjVkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaApAQCAtMiw0ICYjNDM7MiwxMCBAQAogI2lmbmRlZiBfVE9PTFNfRE1BX0gKICNkZWZpbmUgX1RPT0xTX0RNQV9ICiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsKJiM0MztwaHlzX2FkZHJfdCBkdW1teV9waHlzaWNhbF9tZW1vcnlfbG93X2xpbWl0KHZvaWQpOwomIzQzOwomIzQzOyNkZWZpbmUgQVJDSF9MT1dfQUREUkVTU19MSU1JVCBkdW1teV9waHlzaWNhbF9tZW1vcnlfbG93X2xpbWl0KCkKJiM0MzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9tYWluLmMgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uYwppbmRleCAyNzhmOWRlYzUwMDg3Li45YTk2ZTE3ODU1MWI4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uYwpAQCAtNCw2ICYjNDM7NCw3IEBACiAjaW5jbHVkZSAmIzM0O3Rlc3RzL2FsbG9jX2hlbHBlcnNfYXBpLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0cy9hbGxvY19uaWRfYXBpLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0cy9hbGxvY19leGFjdF9uaWRfYXBpLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dGVzdHMvYWxsb2NfbG93X2FwaS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGVzdHMvY29tbW9uLmgmIzM0OwogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCkBAIC0xMiw2ICYjNDM7MTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJbWVtYmxvY2tfYmFzaWNfY2hlY2tzKCk7CiAJbWVtYmxvY2tfYWxsb2NfY2hlY2tzKCk7CiAJbWVtYmxvY2tfYWxsb2NfaGVscGVyc19jaGVja3MoKTsKJiM0MzsJbWVtYmxvY2tfYWxsb2NfbG93X2NoZWNrcygpOwogCW1lbWJsb2NrX2FsbG9jX25pZF9jaGVja3MoKTsKIAltZW1ibG9ja19hbGxvY19leGFjdF9uaWRfY2hlY2tzKCk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5jIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9hbGxvY19sb3dfYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYTExNzQzMWYxZjcxNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5jCkBAIC0wLDAgJiM0MzsxLDE0OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7I2luY2x1ZGUgJiMzNDthbGxvY19sb3dfYXBpLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hbGlnbi5oJmd0OwomIzQzOwomIzQzOy8qIEFsbG9jYXRlIGF0IHRoZSBmaXJzdCBvciBsYXN0IGFsaWduZWQgYWRkcmVzcyBiZWxvdyB0aGUgbG93IGxpbWl0LiAqLwomIzQzO3N0YXRpYyBpbnQgYWxsb2NfbG93X3NpbXBsZV9jaGVjayh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmduID0gJmFtcDttZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdOwomIzQzOwlwaHlzX2FkZHJfdCBzaXplID0gU1pfNjQ7CiYjNDM7CXBoeXNfYWRkcl90IGV4cGVjdGVkOwomIzQzOwl2b2lkICphbGxvY2F0ZWRfcHRyOwomIzQzOwomIzQzOwlQUkVGSVhfUFVTSCgpOwomIzQzOwlzZXR1cF9tZW1ibG9jaygpOwomIzQzOwomIzQzOwkvKiBTaW11bGF0ZWQgcGh5c2ljYWwgUkFNIGlzIG5vdCBuZWNlc3NhcmlseSBTTVBfQ0FDSEVfQllURVMgYWxpZ25lZC4gKi8KJiM0MzsJaWYgKG1lbWJsb2NrX2JvdHRvbV91cCgpKQomIzQzOwkJZXhwZWN0ZWQgPSBBTElHTihtZW1ibG9ja19zdGFydF9vZl9EUkFNKCksIFNNUF9DQUNIRV9CWVRFUyk7CiYjNDM7CWVsc2UKJiM0MzsJCWV4cGVjdGVkID0gQUxJR05fRE9XTihBUkNIX0xPV19BRERSRVNTX0xJTUlUIC0gc2l6ZSwKJiM0MzsJCQkJICAgICAgU01QX0NBQ0hFX0JZVEVTKTsKJiM0MzsKJiM0MzsJYWxsb2NhdGVkX3B0ciA9IG1lbWJsb2NrX2FsbG9jX2xvdyhzaXplLCBTTVBfQ0FDSEVfQllURVMpOwomIzQzOwomIzQzOwlBU1NFUlRfTkUoYWxsb2NhdGVkX3B0ciwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUSgocGh5c19hZGRyX3QpKHVpbnRwdHJfdClhbGxvY2F0ZWRfcHRyLCBleHBlY3RlZCk7CiYjNDM7CUFTU0VSVF9NRU1fRVEoYWxsb2NhdGVkX3B0ciwgMCwgc2l6ZSk7CiYjNDM7CUFTU0VSVF9FUShyZ24tJmd0O2Jhc2UsIGV4cGVjdGVkKTsKJiM0MzsJQVNTRVJUX0VRKHJnbi0mZ3Q7c2l6ZSwgc2l6ZSk7CiYjNDM7CUFTU0VSVF9MRShyZWdpb25fZW5kKHJnbiksIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAxKTsKJiM0MzsJQVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnRvdGFsX3NpemUsIHNpemUpOwomIzQzOwomIzQzOwl0ZXN0X3Bhc3NfcG9wKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgbGFzdCBieXRlIG9mIHRoZSBhbGxvY2F0aW9uIGlzIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBsb3cgbGltaXQuICovCiYjNDM7c3RhdGljIGludCBhbGxvY19sb3dfZXhhY3RfbGltaXRfY2hlY2sodm9pZCkKJiM0Mzt7CiYjNDM7CXBoeXNfYWRkcl90IGxpbWl0ID0gQVJDSF9MT1dfQUREUkVTU19MSU1JVDsKJiM0MzsJcGh5c19hZGRyX3QgYmFzZSA9IEFMSUdOX0RPV04obGltaXQgLSBTWl82NCwgU01QX0NBQ0hFX0JZVEVTKTsKJiM0MzsJcGh5c19hZGRyX3Qgc2l6ZSA9IGxpbWl0IC0gYmFzZTsKJiM0MzsJdm9pZCAqYWxsb2NhdGVkX3B0cjsKJiM0MzsKJiM0MzsJUFJFRklYX1BVU0goKTsKJiM0MzsJc2V0dXBfbWVtYmxvY2soKTsKJiM0MzsJQVNTRVJUX0VRKG1lbWJsb2NrX3JlbW92ZShtZW1ibG9ja19zdGFydF9vZl9EUkFNKCksCiYjNDM7CQkJCSAgYmFzZSAtIG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSksIDApOwomIzQzOwomIzQzOwlhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9ORShhbGxvY2F0ZWRfcHRyLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKChwaHlzX2FkZHJfdCkodWludHB0cl90KWFsbG9jYXRlZF9wdHIsIGJhc2UpOwomIzQzOwlBU1NFUlRfTUVNX0VRKGFsbG9jYXRlZF9wdHIsIDAsIHNpemUpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uc1swXS5iYXNlLCBiYXNlKTsKJiM0MzsJQVNTRVJUX0VRKHJlZ2lvbl9lbmQoJmFtcDttZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdKSwgbGltaXQpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAxKTsKJiM0MzsJQVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnRvdGFsX3NpemUsIHNpemUpOwomIzQzOwomIzQzOwl0ZXN0X3Bhc3NfcG9wKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZXJlIGFyZSBzaXplIGJ5dGVzIGJlbG93IHRoZSBsaW1pdCwgYnV0IGFsaWduaW5nIHRoZSBzdGFydCBtYWtlcyB0aGUKJiM0MzsgKiBhbGxvY2F0aW9uIGNyb3NzIGl0LiBNZW1vcnkgYWJvdmUgdGhlIGxpbWl0IG11c3Qgbm90IHNhdGlzZnkgdGhlIHJlcXVlc3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhbGxvY19sb3dfYWxpZ25tZW50X2Nyb3NzZXNfbGltaXRfY2hlY2sodm9pZCkKJiM0Mzt7CiYjNDM7CXBoeXNfYWRkcl90IGxpbWl0ID0gQVJDSF9MT1dfQUREUkVTU19MSU1JVDsKJiM0MzsJcGh5c19hZGRyX3QgYmFzZSA9IEFMSUdOX0RPV04obGltaXQsIFNNUF9DQUNIRV9CWVRFUykgLSAxOwomIzQzOwlwaHlzX2FkZHJfdCBzaXplID0gbGltaXQgLSBiYXNlOwomIzQzOwl2b2lkICphbGxvY2F0ZWRfcHRyOwomIzQzOwomIzQzOwlQUkVGSVhfUFVTSCgpOwomIzQzOwlzZXR1cF9tZW1ibG9jaygpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2tfcmVtb3ZlKG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSwKJiM0MzsJCQkJICBiYXNlIC0gbWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpKSwgMCk7CiYjNDM7CiYjNDM7CWFsbG9jYXRlZF9wdHIgPSBtZW1ibG9ja19hbGxvY19sb3coc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGFsbG9jYXRlZF9wdHIsIE5VTEwpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAwKTsKJiM0MzsJQVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnRvdGFsX3NpemUsIDApOwomIzQzOwlBU1NFUlRfTUVNX0VRKCh2b2lkICopKHVpbnRwdHJfdCliYXNlLCAxLCBtZW1ibG9ja19lbmRfb2ZfRFJBTSgpIC0gYmFzZSk7CiYjNDM7CiYjNDM7CXRlc3RfcGFzc19wb3AoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIEFsbG9jYXRpb24gbXVzdCBmYWlsIGFmdGVyIHJlc2VydmluZyBhbGwgbG93IG1lbW9yeSwgd2l0aCBoaWdoIG1lbW9yeSBmcmVlLiAqLwomIzQzO3N0YXRpYyBpbnQgYWxsb2NfbG93X3Jlc2VydmVkX2NoZWNrKHZvaWQpCiYjNDM7ewomIzQzOwlwaHlzX2FkZHJfdCBsaW1pdCA9IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQ7CiYjNDM7CXBoeXNfYWRkcl90IGJhc2UgPSBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSgpOwomIzQzOwlwaHlzX2FkZHJfdCBzaXplID0gU1pfNjQ7CiYjNDM7CXZvaWQgKmFsbG9jYXRlZF9wdHI7CiYjNDM7CiYjNDM7CVBSRUZJWF9QVVNIKCk7CiYjNDM7CXNldHVwX21lbWJsb2NrKCk7CiYjNDM7CUFTU0VSVF9FUShtZW1ibG9ja19yZXNlcnZlKGJhc2UsIGxpbWl0IC0gYmFzZSksIDApOwomIzQzOwomIzQzOwlhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShhbGxvY2F0ZWRfcHRyLCBOVUxMKTsKJiM0MzsJQVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLmNudCwgMSk7CiYjNDM7CUFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdLmJhc2UsIGJhc2UpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uc1swXS5zaXplLCBsaW1pdCAtIGJhc2UpOwomIzQzOwlBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQudG90YWxfc2l6ZSwgbGltaXQgLSBiYXNlKTsKJiM0MzsJQVNTRVJUX01FTV9FUSgodm9pZCAqKSh1aW50cHRyX3QpYmFzZSwgMSwgTUVNX1NJWkUpOwomIzQzOwomIzQzOwlhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTsKJiM0MzsJQVNTRVJUX05FKGFsbG9jYXRlZF9wdHIsIE5VTEwpOwomIzQzOwlBU1NFUlRfTEUobGltaXQsIChwaHlzX2FkZHJfdCkodWludHB0cl90KWFsbG9jYXRlZF9wdHIpOwomIzQzOwlBU1NFUlRfTUVNX0VRKGFsbG9jYXRlZF9wdHIsIDAsIHNpemUpOwomIzQzOwomIzQzOwl0ZXN0X3Bhc3NfcG9wKCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFsbG9jX2xvd19jaGVja3Modm9pZCkKJiM0Mzt7CiYjNDM7CWFsbG9jX2xvd19zaW1wbGVfY2hlY2soKTsKJiM0MzsJYWxsb2NfbG93X2V4YWN0X2xpbWl0X2NoZWNrKCk7CiYjNDM7CWFsbG9jX2xvd19hbGlnbm1lbnRfY3Jvc3Nlc19saW1pdF9jaGVjaygpOwomIzQzOwlhbGxvY19sb3dfcmVzZXJ2ZWRfY2hlY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtZW1ibG9ja19hbGxvY19sb3dfY2hlY2tzKHZvaWQpCiYjNDM7ewomIzQzOwlwcmVmaXhfcmVzZXQoKTsKJiM0MzsJcHJlZml4X3B1c2goJiMzNDttZW1ibG9ja19hbGxvY19sb3cmIzM0Oyk7CiYjNDM7CXRlc3RfcHJpbnQoJiMzNDtSdW5uaW5nIG1lbWJsb2NrX2FsbG9jX2xvdyB0ZXN0cy4uLlxuJiMzNDspOwomIzQzOwomIzQzOwlyZXNldF9tZW1ibG9ja19hdHRyaWJ1dGVzKCk7CiYjNDM7CWR1bW15X3BoeXNpY2FsX21lbW9yeV9pbml0KCk7CiYjNDM7CiYjNDM7CXJ1bl90b3BfZG93bihhbGxvY19sb3dfY2hlY2tzKTsKJiM0MzsJcnVuX2JvdHRvbV91cChhbGxvY19sb3dfY2hlY2tzKTsKJiM0MzsKJiM0MzsJZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2NsZWFudXAoKTsKJiM0MzsJcHJlZml4X3BvcCgpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuaCBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjJlM2NiZTMzNmY1ZGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuaApAQCAtMCwwICYjNDM7MSw5IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsjaWZuZGVmIF9NRU1CTE9DS19BTExPQ19MT1dfSAomIzQzOyNkZWZpbmUgX01FTUJMT0NLX0FMTE9DX0xPV19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjb21tb24uaCYjMzQ7CiYjNDM7CiYjNDM7aW50IG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3Modm9pZCk7CiYjNDM7CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2NvbW1vbi5jIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9jb21tb24uYwppbmRleCAzMjUwYzhlNTEyNGIzLi5hYzAzMjYxMGE1NmVjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvY29tbW9uLmMKQEAgLTExOCw2ICYjNDM7MTE4LDEyIEBAIHBoeXNfYWRkcl90IGR1bW15X3BoeXNpY2FsX21lbW9yeV9iYXNlKHZvaWQpCiAJcmV0dXJuIChwaHlzX2FkZHJfdCltZW1vcnlfYmxvY2suYmFzZTsKIH0KIAomIzQzO3BoeXNfYWRkcl90IGR1bW15X3BoeXNpY2FsX21lbW9yeV9sb3dfbGltaXQodm9pZCkKJiM0Mzt7CiYjNDM7CS8qIFRoZSBsb3cgbGltaXQgaXMgaGFsZndheSB0aHJvdWdoIG1lbW9yeSByZWdpc3RlcmVkIGJ5IHNldHVwX21lbWJsb2NrKCkuICovCiYjNDM7CXJldHVybiBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSgpICYjNDM7IE1FTV9TSVpFIC8gMjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nKQogewogCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGhlbHBfb3B0cykgIT0gQVJSQVlfU0laRShsb25nX29wdHMpIC0gMSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTcKCQkJCQkJCW91dHB1dDogODEKCQkJCQkJCXRob3VnaHRzOiA2ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGFuYWx5emUgdGhlIHBhdGNoIGRpZmYuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGFsbCBjb25maW5lZCB0byB0aGUgYHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgYE1ha2VmaWxlYCwgYFJFQURNRWAsIGBUT0RPYCwgYW5kIHNldmVyYWwgQyBhbmQgaGVhZGVyIGZpbGVzIHdpdGhpbiB0aGF0IGRpcmVjdG9yeTogYGFzbS9kbWEuaGAsIGBtYWluLmNgLCBgdGVzdHMvYWxsb2NfbG93X2FwaS5jYCwgYHRlc3RzL2FsbG9jX2xvd19hcGkuaGAsIGFuZCBgdGVzdHMvY29tbW9uLmNgLgoKTm93LCBhY2NvcmRpbmcgdG8gdGhlIGd1aWRlbGluZXMgaW4gc2VjdGlvbiAyLCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXM6ICpEb2VzIHRoZSBtb2RpZmllZCBjb2RlIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcz8qCgpMb29raW5nIGF0IHRoZSBjb250ZXh0LCB0aGlzIGlzIGEgdXNlcnNwYWNlIHRlc3QgaGFybmVzcyBvciB1bml0IHRlc3RzIGZvciB0aGUgYG1lbWJsb2NrYCBmdW5jdGlvbmFsaXR5LiBJdCBjb21waWxlcyBhIHVzZXJzcGFjZSBiaW5hcnkgYG1haW5gLCBwcmVzdW1hYmx5IHVzaW5nIGNvbXBpbGVyIGZsYWdzIGxpa2UgYC1mc2FuaXRpemU9YWRkcmVzc2AsIHdoaWNoIGZ1cnRoZXIgc3VwcG9ydHMgdGhhdCB0aGlzIGlzbiYjMzk7dCBrZXJuZWwtbGV2ZWwgY29kZS4gQW5kLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgbm8gb3RoZXIgZmlsZXMgb3V0c2lkZSBvZiBgdG9vbHMvdGVzdGluZy9tZW1ibG9jay9gIGFyZSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gWWVwLCB0aGUgZGlmZiBjb25maXJtcyBpdDogYWxsIHRoZSBsaXN0ZWQgZmlsZXMgYXJlIHN0cmljdGx5IHdpdGhpbiB0aGF0IGRpcmVjdG9yeS4KClRoZXJlZm9yZSwgdW5kZXIgdGhvc2UgZ3VpZGVsaW5lcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gVGhlIHBhdGNoIG1vZGlmaWVzIGV4Y2x1c2l2ZWx5IHVzZXJzcGFjZSB0ZXN0IGNvZGUuCgpOb3csIHRvIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbCwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZSBjb3JyZWN0IGZvcm1hdDogYEVuYWJsZUNvbmZpZ3NgIG5lZWRzIHRvIGJlIGBbXWAgb3IgYG51bGxgLCBgRm9jdXNTeW1ib2xzYCBpcyBhbHNvIGBbXWAsIGFuZCBJJiMzOTtsbCBuZWVkIGEgY2xlYXIgYFJlYXNvbmluZ2AuCgpJJiMzOTtsbCBwaHJhc2UgdGhlIHJlYXNvbmluZyB0aGlzIHdheTogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgdG91Y2hlcyB1c2Vyc3BhY2UgdW5pdCB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9tZW1ibG9jay9gIHRvIGFkZCB0ZXN0cyBmb3IgYG1lbWJsb2NrX2FsbG9jX2xvdygpYC4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgc291cmNlIGNvZGUsIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCksIG9yIGtlcm5lbCBtb2R1bGVzLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBpcyBub3QgcGFydCBvZiB0aGUga2VybmVsIGFuZCBpcyBub3QgdGFyZ2V0YWJsZS9yZWFjaGFibGUgYnkgc3l6a2FsbGVyIGtlcm5lbCBmdXp6aW5nLiYjMzQ7IFRoYXQmIzM5O3MgY29uY2lzZSBhbmQgZXhwbGFpbnMgKndoeSogaXQmIzM5O3Mgbm90IHdvcnRoIGZ1enppbmcuCgpBbHJpZ2h0LCB3aXRoIHRoZSByZWFzb25pbmcgZm9ybXVsYXRlZCwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyBhbmQgdGVzdCBmcmFtZXdvcmsgZmlsZXMgd2l0aGluIHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svIChhZGRpbmcgdGVzdCBjYXNlcyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyBhbmQgdGVzdCBmcmFtZXdvcmsgZmlsZXMgd2l0aGluIHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svIChhZGRpbmcgdGVzdCBjYXNlcyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAwOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDoyNjo1OC42MTI3NDM3MTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjI5NTExMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHVuaXQgdGVzdHMgYW5kIHRlc3QgZnJhbWV3b3JrIGZpbGVzIHdpdGhpbiB0b29scy90ZXN0aW5nL21lbWJsb2NrLyAoYWRkaW5nIHRlc3QgY2FzZXMgZm9yIG1lbWJsb2NrX2FsbG9jX2xvdykuIEl0IGRvZXMgbm90IGFsdGVyIHRoZSBMaW51eCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MjY6NTguNjEyNzQ3NDA1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDE3NTk5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxYjY3ZTcwZDQ4Y2JiZmUxMGY5Y2QwYzI2YmRjY2VhY2VlNTUyYTk2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDAwOjI2OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL01ha2VmaWxlXFxuaW5kZXggZDgwOTgyY2NkYzIwOS4uMjA1MjRmY2JlM2M3MiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9NYWtlZmlsZVxcbkBAIC03LDcgKzcsOCBAQCBDRkxBR1MgKz0gLUkuIC1JLi4vLi4vaW5jbHVkZSAtV2FsbCAtTzIgLWZzYW5pdGl6ZT1hZGRyZXNzIFxcXFxcXG4gTERGTEFHUyArPSAtZnNhbml0aXplPWFkZHJlc3MgLWZzYW5pdGl6ZT11bmRlZmluZWRcXG4gVEFSR0VUUyA9IG1haW5cXG4gVEVTVF9PRklMRVMgPSB0ZXN0cy9hbGxvY19uaWRfYXBpLm8gdGVzdHMvYWxsb2NfaGVscGVyc19hcGkubyB0ZXN0cy9hbGxvY19hcGkubyBcXFxcXFxuLVxcdFxcdCAgdGVzdHMvYmFzaWNfYXBpLm8gdGVzdHMvY29tbW9uLm8gdGVzdHMvYWxsb2NfZXhhY3RfbmlkX2FwaS5vXFxuK1xcdFxcdCAgdGVzdHMvYmFzaWNfYXBpLm8gdGVzdHMvY29tbW9uLm8gdGVzdHMvYWxsb2NfZXhhY3RfbmlkX2FwaS5vIFxcXFxcXG4rXFx0XFx0ICB0ZXN0cy9hbGxvY19sb3dfYXBpLm9cXG4gREVQX09GSUxFUyA9IG1lbWJsb2NrLm8gbGliL3NsYWIubyBtbXpvbmUubyBzbGFiLm8gY21kbGluZS5vXFxuIE9GSUxFUyA9IG1haW4ubyAkKERFUF9PRklMRVMpICQoVEVTVF9PRklMRVMpXFxuIEVYVFJfU1JDID0gLi4vLi4vLi4vbW0vbWVtYmxvY2suY1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRSBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FXFxuaW5kZXggYjQzNWY0OGQ4YTcwMC4uNGVhMjkzMjA5NTQ4NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRVxcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FXFxuQEAgLTY3LDEzICs2NywxMyBAQCBtZW1ibG9ja1xcbiB8LS0gdGVzdHNcXG4gfCAgICB8LS0gYWxsb2NfYXBpLihjfGgpICAgICAgICAgLS0gbWVtYmxvY2tfYWxsb2MgdGVzdHNcXG4gfCAgICB8LS0gYWxsb2NfaGVscGVyc19hcGkuKGN8aCkgLS0gbWVtYmxvY2tfYWxsb2NfZnJvbSB0ZXN0c1xcbit8ICAgIHwtLSBhbGxvY19sb3dfYXBpLihjfGgpICAgICAtLSBtZW1ibG9ja19hbGxvY19sb3cgdGVzdHNcXG4gfCAgICB8LS0gYWxsb2NfbmlkX2FwaS4oY3xoKSAgICAgLS0gbWVtYmxvY2tfYWxsb2NfdHJ5X25pZCB0ZXN0c1xcbiB8ICAgIHwtLSBiYXNpY19hcGkuKGN8aCkgICAgICAgICAtLSBtZW1ibG9ja19hZGQvbWVtYmxvY2tfcmVzZXJ2ZS8uLi4gdGVzdHNcXG4gfCAgICB8LS0gY29tbW9uLihjfGgpICAgICAgICAgICAgLS0gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcmVzZXR0aW5nIG1lbWJsb2NrO1xcbiB8LS0gbWFpbi5jICAgICAgICAtLS0tLS0tLS0tLS0tLS4gICBkdW1teSBwaHlzaWNhbCBtZW1vcnkgZGVmaW5pdGlvblxcbiB8LS0gTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICBgLSB0ZXN0IHJ1bm5lclxcbiB8LS0gUkVBRE1FXFxuLXwtLSBUT0RPXFxuIHwtLSAuZ2l0aWdub3JlXFxuIFxcbiBTaW11bGF0aW5nIHBoeXNpY2FsIG1lbW9yeVxcbkBAIC0xMDEsMTIgKzEwMSwxMCBAQCBUaGVyZSdzIG5vIG5lZWQgdG8gZXhwbGljaXRseSBmcmVlIHRoZSBkdW1teSBtZW1vcnkgZnJvbSBtZW1ibG9jayB2aWFcXG4gbWVtYmxvY2tfZnJlZSgpIGNhbGwuIFRoZSBlbnRyeSB3aWxsIGJlIGVyYXNlZCBieSByZXNldF9tZW1ibG9ja19yZWdpb25zKCksXFxuIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggdGVzdC5cXG4gXFxuLUtub3duIGlzc3Vlc1xcbi09PT09PT09PT09PT1cXG4tXFxuLTEuIFRlc3RzIGZvciBtZW1ibG9ja19hbGxvY19sb3coKSBjYW4ndCBiZSBlYXNpbHkgaW1wbGVtZW50ZWQuIFRoZSBmdW5jdGlvbiB1c2VzXFxuLSAgIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgbWFyY28sIHdoaWNoIGNhbid0IGJlIGNoYW5nZWQgdG8gcG9pbnQgYXQgdGhlIGxvd1xcbi0gICBtZW1vcnkgb2YgdGhlIG1lbW9yeV9ibG9jay5cXG4rVGhlIHNpbXVsYXRvciBkZWZpbmVzIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgaW4gYXNtL2RtYS5oIHVzaW5nIHRoZSBtaWRwb2ludFxcbitvZiB0aGUgTUVNX1NJWkUgcmFuZ2UgcmVnaXN0ZXJlZCBieSBzZXR1cF9tZW1ibG9jaygpLiBUaGlzIGxlYXZlcyByZWdpc3RlcmVkXFxuK21lbW9yeSBib3RoIGJlbG93IGFuZCBhYm92ZSB0aGUgbGltaXQuIFRoZSBsaW1pdCBpcyB0aGUgZmlyc3QgYWRkcmVzcyBhblxcbithbGxvY2F0aW9uIG11c3Qgbm90IHVzZTsgYW4gYWxsb2NhdGlvbidzIGJhc2UgcGx1cyBpdHMgc2l6ZSBtYXkgZXF1YWwgdGhlIGxpbWl0LlxcbiBcXG4gUmVmZXJlbmNlc1xcbiA9PT09PT09PT09XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svVE9ETyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svVE9ET1xcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IGMxM2FkMGRhZTc3NjMuLjAwMDAwMDAwMDAwMDBcXG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL1RPRE9cXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsNSArMCwwIEBAXFxuLVRPRE9cXG4tPT09PT1cXG4tXFxuLTEuIEFkZCB0ZXN0cyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KCkgb25jZSB0aGUgc2ltdWxhdG9yIGNhbiBtb2RlbFxcbi0gICBBUkNIX0xPV19BRERSRVNTX0xJTUlUIGFnYWluc3QgdGhlIGxvdyBtZW1vcnkgaW4gbWVtb3J5X2Jsb2NrXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svYXNtL2RtYS5oIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9hc20vZG1hLmhcXG5pbmRleCAxM2ZmOGU1ZDIyZWY2Li42NjA3NDA4ZGNmMjVkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svYXNtL2RtYS5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9hc20vZG1hLmhcXG5AQCAtMiw0ICsyLDEwIEBAXFxuICNpZm5kZWYgX1RPT0xTX0RNQV9IXFxuICNkZWZpbmUgX1RPT0xTX0RNQV9IXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuK3BoeXNfYWRkcl90IGR1bW15X3BoeXNpY2FsX21lbW9yeV9sb3dfbGltaXQodm9pZCk7XFxuK1xcbisjZGVmaW5lIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2xvd19saW1pdCgpXFxuK1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9tYWluLmMgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uY1xcbmluZGV4IDI3OGY5ZGVjNTAwODcuLjlhOTZlMTc4NTUxYjggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9tYWluLmNcXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uY1xcbkBAIC00LDYgKzQsNyBAQFxcbiAjaW5jbHVkZSBcXFwidGVzdHMvYWxsb2NfaGVscGVyc19hcGkuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3RzL2FsbG9jX25pZF9hcGkuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3RzL2FsbG9jX2V4YWN0X25pZF9hcGkuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RzL2FsbG9jX2xvd19hcGkuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3RzL2NvbW1vbi5oXFxcIlxcbiBcXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbkBAIC0xMiw2ICsxMyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0bWVtYmxvY2tfYmFzaWNfY2hlY2tzKCk7XFxuIFxcdG1lbWJsb2NrX2FsbG9jX2NoZWNrcygpO1xcbiBcXHRtZW1ibG9ja19hbGxvY19oZWxwZXJzX2NoZWNrcygpO1xcbitcXHRtZW1ibG9ja19hbGxvY19sb3dfY2hlY2tzKCk7XFxuIFxcdG1lbWJsb2NrX2FsbG9jX25pZF9jaGVja3MoKTtcXG4gXFx0bWVtYmxvY2tfYWxsb2NfZXhhY3RfbmlkX2NoZWNrcygpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9hbGxvY19sb3dfYXBpLmMgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTExNzQzMWYxZjcxNVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuY1xcbkBAIC0wLDAgKzEsMTQ4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKyNpbmNsdWRlIFxcXCJhbGxvY19sb3dfYXBpLmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hbGlnbi5oXFx1MDAzZVxcbitcXG4rLyogQWxsb2NhdGUgYXQgdGhlIGZpcnN0IG9yIGxhc3QgYWxpZ25lZCBhZGRyZXNzIGJlbG93IHRoZSBsb3cgbGltaXQuICovXFxuK3N0YXRpYyBpbnQgYWxsb2NfbG93X3NpbXBsZV9jaGVjayh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJnbiA9IFxcdTAwMjZtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdO1xcbitcXHRwaHlzX2FkZHJfdCBzaXplID0gU1pfNjQ7XFxuK1xcdHBoeXNfYWRkcl90IGV4cGVjdGVkO1xcbitcXHR2b2lkICphbGxvY2F0ZWRfcHRyO1xcbitcXG4rXFx0UFJFRklYX1BVU0goKTtcXG4rXFx0c2V0dXBfbWVtYmxvY2soKTtcXG4rXFxuK1xcdC8qIFNpbXVsYXRlZCBwaHlzaWNhbCBSQU0gaXMgbm90IG5lY2Vzc2FyaWx5IFNNUF9DQUNIRV9CWVRFUyBhbGlnbmVkLiAqL1xcbitcXHRpZiAobWVtYmxvY2tfYm90dG9tX3VwKCkpXFxuK1xcdFxcdGV4cGVjdGVkID0gQUxJR04obWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpLCBTTVBfQ0FDSEVfQllURVMpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGV4cGVjdGVkID0gQUxJR05fRE9XTihBUkNIX0xPV19BRERSRVNTX0xJTUlUIC0gc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgU01QX0NBQ0hFX0JZVEVTKTtcXG4rXFxuK1xcdGFsbG9jYXRlZF9wdHIgPSBtZW1ibG9ja19hbGxvY19sb3coc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcXG4rXFxuK1xcdEFTU0VSVF9ORShhbGxvY2F0ZWRfcHRyLCBOVUxMKTtcXG4rXFx0QVNTRVJUX0VRKChwaHlzX2FkZHJfdCkodWludHB0cl90KWFsbG9jYXRlZF9wdHIsIGV4cGVjdGVkKTtcXG4rXFx0QVNTRVJUX01FTV9FUShhbGxvY2F0ZWRfcHRyLCAwLCBzaXplKTtcXG4rXFx0QVNTRVJUX0VRKHJnbi1cXHUwMDNlYmFzZSwgZXhwZWN0ZWQpO1xcbitcXHRBU1NFUlRfRVEocmduLVxcdTAwM2VzaXplLCBzaXplKTtcXG4rXFx0QVNTRVJUX0xFKHJlZ2lvbl9lbmQocmduKSwgQVJDSF9MT1dfQUREUkVTU19MSU1JVCk7XFxuK1xcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5jbnQsIDEpO1xcbitcXHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQudG90YWxfc2l6ZSwgc2l6ZSk7XFxuK1xcbitcXHR0ZXN0X3Bhc3NfcG9wKCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBUaGUgbGFzdCBieXRlIG9mIHRoZSBhbGxvY2F0aW9uIGlzIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBsb3cgbGltaXQuICovXFxuK3N0YXRpYyBpbnQgYWxsb2NfbG93X2V4YWN0X2xpbWl0X2NoZWNrKHZvaWQpXFxuK3tcXG4rXFx0cGh5c19hZGRyX3QgbGltaXQgPSBBUkNIX0xPV19BRERSRVNTX0xJTUlUO1xcbitcXHRwaHlzX2FkZHJfdCBiYXNlID0gQUxJR05fRE9XTihsaW1pdCAtIFNaXzY0LCBTTVBfQ0FDSEVfQllURVMpO1xcbitcXHRwaHlzX2FkZHJfdCBzaXplID0gbGltaXQgLSBiYXNlO1xcbitcXHR2b2lkICphbGxvY2F0ZWRfcHRyO1xcbitcXG4rXFx0UFJFRklYX1BVU0goKTtcXG4rXFx0c2V0dXBfbWVtYmxvY2soKTtcXG4rXFx0QVNTRVJUX0VRKG1lbWJsb2NrX3JlbW92ZShtZW1ibG9ja19zdGFydF9vZl9EUkFNKCksXFxuK1xcdFxcdFxcdFxcdCAgYmFzZSAtIG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSksIDApO1xcbitcXG4rXFx0YWxsb2NhdGVkX3B0ciA9IG1lbWJsb2NrX2FsbG9jX2xvdyhzaXplLCBTTVBfQ0FDSEVfQllURVMpO1xcbitcXG4rXFx0QVNTRVJUX05FKGFsbG9jYXRlZF9wdHIsIE5VTEwpO1xcbitcXHRBU1NFUlRfRVEoKHBoeXNfYWRkcl90KSh1aW50cHRyX3QpYWxsb2NhdGVkX3B0ciwgYmFzZSk7XFxuK1xcdEFTU0VSVF9NRU1fRVEoYWxsb2NhdGVkX3B0ciwgMCwgc2l6ZSk7XFxuK1xcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdLmJhc2UsIGJhc2UpO1xcbitcXHRBU1NFUlRfRVEocmVnaW9uX2VuZChcXHUwMDI2bWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uc1swXSksIGxpbWl0KTtcXG4rXFx0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLmNudCwgMSk7XFxuK1xcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC50b3RhbF9zaXplLCBzaXplKTtcXG4rXFxuK1xcdHRlc3RfcGFzc19wb3AoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoZXJlIGFyZSBzaXplIGJ5dGVzIGJlbG93IHRoZSBsaW1pdCwgYnV0IGFsaWduaW5nIHRoZSBzdGFydCBtYWtlcyB0aGVcXG4rICogYWxsb2NhdGlvbiBjcm9zcyBpdC4gTWVtb3J5IGFib3ZlIHRoZSBsaW1pdCBtdXN0IG5vdCBzYXRpc2Z5IHRoZSByZXF1ZXN0LlxcbisgKi9cXG4rc3RhdGljIGludCBhbGxvY19sb3dfYWxpZ25tZW50X2Nyb3NzZXNfbGltaXRfY2hlY2sodm9pZClcXG4re1xcbitcXHRwaHlzX2FkZHJfdCBsaW1pdCA9IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQ7XFxuK1xcdHBoeXNfYWRkcl90IGJhc2UgPSBBTElHTl9ET1dOKGxpbWl0LCBTTVBfQ0FDSEVfQllURVMpIC0gMTtcXG4rXFx0cGh5c19hZGRyX3Qgc2l6ZSA9IGxpbWl0IC0gYmFzZTtcXG4rXFx0dm9pZCAqYWxsb2NhdGVkX3B0cjtcXG4rXFxuK1xcdFBSRUZJWF9QVVNIKCk7XFxuK1xcdHNldHVwX21lbWJsb2NrKCk7XFxuK1xcdEFTU0VSVF9FUShtZW1ibG9ja19yZW1vdmUobWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpLFxcbitcXHRcXHRcXHRcXHQgIGJhc2UgLSBtZW1ibG9ja19zdGFydF9vZl9EUkFNKCkpLCAwKTtcXG4rXFxuK1xcdGFsbG9jYXRlZF9wdHIgPSBtZW1ibG9ja19hbGxvY19sb3coc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShhbGxvY2F0ZWRfcHRyLCBOVUxMKTtcXG4rXFx0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLmNudCwgMCk7XFxuK1xcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC50b3RhbF9zaXplLCAwKTtcXG4rXFx0QVNTRVJUX01FTV9FUSgodm9pZCAqKSh1aW50cHRyX3QpYmFzZSwgMSwgbWVtYmxvY2tfZW5kX29mX0RSQU0oKSAtIGJhc2UpO1xcbitcXG4rXFx0dGVzdF9wYXNzX3BvcCgpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogQWxsb2NhdGlvbiBtdXN0IGZhaWwgYWZ0ZXIgcmVzZXJ2aW5nIGFsbCBsb3cgbWVtb3J5LCB3aXRoIGhpZ2ggbWVtb3J5IGZyZWUuICovXFxuK3N0YXRpYyBpbnQgYWxsb2NfbG93X3Jlc2VydmVkX2NoZWNrKHZvaWQpXFxuK3tcXG4rXFx0cGh5c19hZGRyX3QgbGltaXQgPSBBUkNIX0xPV19BRERSRVNTX0xJTUlUO1xcbitcXHRwaHlzX2FkZHJfdCBiYXNlID0gZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2Jhc2UoKTtcXG4rXFx0cGh5c19hZGRyX3Qgc2l6ZSA9IFNaXzY0O1xcbitcXHR2b2lkICphbGxvY2F0ZWRfcHRyO1xcbitcXG4rXFx0UFJFRklYX1BVU0goKTtcXG4rXFx0c2V0dXBfbWVtYmxvY2soKTtcXG4rXFx0QVNTRVJUX0VRKG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgbGltaXQgLSBiYXNlKSwgMCk7XFxuK1xcbitcXHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XFxuK1xcbitcXHRBU1NFUlRfRVEoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5jbnQsIDEpO1xcbitcXHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQucmVnaW9uc1swXS5iYXNlLCBiYXNlKTtcXG4rXFx0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbnNbMF0uc2l6ZSwgbGltaXQgLSBiYXNlKTtcXG4rXFx0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnRvdGFsX3NpemUsIGxpbWl0IC0gYmFzZSk7XFxuK1xcdEFTU0VSVF9NRU1fRVEoKHZvaWQgKikodWludHB0cl90KWJhc2UsIDEsIE1FTV9TSVpFKTtcXG4rXFxuK1xcdGFsbG9jYXRlZF9wdHIgPSBtZW1ibG9ja19hbGxvYyhzaXplLCBTTVBfQ0FDSEVfQllURVMpO1xcbitcXHRBU1NFUlRfTkUoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XFxuK1xcdEFTU0VSVF9MRShsaW1pdCwgKHBoeXNfYWRkcl90KSh1aW50cHRyX3QpYWxsb2NhdGVkX3B0cik7XFxuK1xcdEFTU0VSVF9NRU1fRVEoYWxsb2NhdGVkX3B0ciwgMCwgc2l6ZSk7XFxuK1xcbitcXHR0ZXN0X3Bhc3NfcG9wKCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFsbG9jX2xvd19jaGVja3Modm9pZClcXG4re1xcbitcXHRhbGxvY19sb3dfc2ltcGxlX2NoZWNrKCk7XFxuK1xcdGFsbG9jX2xvd19leGFjdF9saW1pdF9jaGVjaygpO1xcbitcXHRhbGxvY19sb3dfYWxpZ25tZW50X2Nyb3NzZXNfbGltaXRfY2hlY2soKTtcXG4rXFx0YWxsb2NfbG93X3Jlc2VydmVkX2NoZWNrKCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3Modm9pZClcXG4re1xcbitcXHRwcmVmaXhfcmVzZXQoKTtcXG4rXFx0cHJlZml4X3B1c2goXFxcIm1lbWJsb2NrX2FsbG9jX2xvd1xcXCIpO1xcbitcXHR0ZXN0X3ByaW50KFxcXCJSdW5uaW5nIG1lbWJsb2NrX2FsbG9jX2xvdyB0ZXN0cy4uLlxcXFxuXFxcIik7XFxuK1xcbitcXHRyZXNldF9tZW1ibG9ja19hdHRyaWJ1dGVzKCk7XFxuK1xcdGR1bW15X3BoeXNpY2FsX21lbW9yeV9pbml0KCk7XFxuK1xcbitcXHRydW5fdG9wX2Rvd24oYWxsb2NfbG93X2NoZWNrcyk7XFxuK1xcdHJ1bl9ib3R0b21fdXAoYWxsb2NfbG93X2NoZWNrcyk7XFxuK1xcbitcXHRkdW1teV9waHlzaWNhbF9tZW1vcnlfY2xlYW51cCgpO1xcbitcXHRwcmVmaXhfcG9wKCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuaCBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yZTNjYmUzMzZmNWRhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5oXFxuQEAgLTAsMCArMSw5IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuKyNpZm5kZWYgX01FTUJMT0NLX0FMTE9DX0xPV19IXFxuKyNkZWZpbmUgX01FTUJMT0NLX0FMTE9DX0xPV19IXFxuK1xcbisjaW5jbHVkZSBcXFwiY29tbW9uLmhcXFwiXFxuK1xcbitpbnQgbWVtYmxvY2tfYWxsb2NfbG93X2NoZWNrcyh2b2lkKTtcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2NvbW1vbi5jIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9jb21tb24uY1xcbmluZGV4IDMyNTBjOGU1MTI0YjMuLmFjMDMyNjEwYTU2ZWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9jb21tb24uY1xcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvY29tbW9uLmNcXG5AQCAtMTE4LDYgKzExOCwxMiBAQCBwaHlzX2FkZHJfdCBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSh2b2lkKVxcbiBcXHRyZXR1cm4gKHBoeXNfYWRkcl90KW1lbW9yeV9ibG9jay5iYXNlO1xcbiB9XFxuIFxcbitwaHlzX2FkZHJfdCBkdW1teV9waHlzaWNhbF9tZW1vcnlfbG93X2xpbWl0KHZvaWQpXFxuK3tcXG4rXFx0LyogVGhlIGxvdyBsaW1pdCBpcyBoYWxmd2F5IHRocm91Z2ggbWVtb3J5IHJlZ2lzdGVyZWQgYnkgc2V0dXBfbWVtYmxvY2soKS4gKi9cXG4rXFx0cmV0dXJuIGR1bW15X3BoeXNpY2FsX21lbW9yeV9iYXNlKCkgKyBNRU1fU0laRSAvIDI7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpXFxuIHtcXG4gXFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoaGVscF9vcHRzKSAhPSBBUlJBWV9TSVpFKGxvbmdfb3B0cykgLSAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MjY6NTkuMjE1MTE4NzU2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MDI3MTIxMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyBhbmQgdGVzdCBmcmFtZXdvcmsgZmlsZXMgd2l0aGluIHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svIChhZGRpbmcgdGVzdCBjYXNlcyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFiNjdlNzBkNDhjYmJmZTEwZjljZDBjMjZiZGNjZWFjZWU1NTJhOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAwMDoyNjo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL01ha2VmaWxlXG5pbmRleCBkODA5ODJjY2RjMjA5Li4yMDUyNGZjYmUzYzcyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9NYWtlZmlsZVxuQEAgLTcsNyArNyw4IEBAIENGTEFHUyArPSAtSS4gLUkuLi8uLi9pbmNsdWRlIC1XYWxsIC1PMiAtZnNhbml0aXplPWFkZHJlc3MgXFxcbiBMREZMQUdTICs9IC1mc2FuaXRpemU9YWRkcmVzcyAtZnNhbml0aXplPXVuZGVmaW5lZFxuIFRBUkdFVFMgPSBtYWluXG4gVEVTVF9PRklMRVMgPSB0ZXN0cy9hbGxvY19uaWRfYXBpLm8gdGVzdHMvYWxsb2NfaGVscGVyc19hcGkubyB0ZXN0cy9hbGxvY19hcGkubyBcXFxuLVx0XHQgIHRlc3RzL2Jhc2ljX2FwaS5vIHRlc3RzL2NvbW1vbi5vIHRlc3RzL2FsbG9jX2V4YWN0X25pZF9hcGkub1xuK1x0XHQgIHRlc3RzL2Jhc2ljX2FwaS5vIHRlc3RzL2NvbW1vbi5vIHRlc3RzL2FsbG9jX2V4YWN0X25pZF9hcGkubyBcXFxuK1x0XHQgIHRlc3RzL2FsbG9jX2xvd19hcGkub1xuIERFUF9PRklMRVMgPSBtZW1ibG9jay5vIGxpYi9zbGFiLm8gbW16b25lLm8gc2xhYi5vIGNtZGxpbmUub1xuIE9GSUxFUyA9IG1haW4ubyAkKERFUF9PRklMRVMpICQoVEVTVF9PRklMRVMpXG4gRVhUUl9TUkMgPSAuLi8uLi8uLi9tbS9tZW1ibG9jay5jXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9SRUFETUUgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRVxuaW5kZXggYjQzNWY0OGQ4YTcwMC4uNGVhMjkzMjA5NTQ4NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svUkVBRE1FXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL1JFQURNRVxuQEAgLTY3LDEzICs2NywxMyBAQCBtZW1ibG9ja1xuIHwtLSB0ZXN0c1xuIHwgICAgfC0tIGFsbG9jX2FwaS4oY3xoKSAgICAgICAgIC0tIG1lbWJsb2NrX2FsbG9jIHRlc3RzXG4gfCAgICB8LS0gYWxsb2NfaGVscGVyc19hcGkuKGN8aCkgLS0gbWVtYmxvY2tfYWxsb2NfZnJvbSB0ZXN0c1xuK3wgICAgfC0tIGFsbG9jX2xvd19hcGkuKGN8aCkgICAgIC0tIG1lbWJsb2NrX2FsbG9jX2xvdyB0ZXN0c1xuIHwgICAgfC0tIGFsbG9jX25pZF9hcGkuKGN8aCkgICAgIC0tIG1lbWJsb2NrX2FsbG9jX3RyeV9uaWQgdGVzdHNcbiB8ICAgIHwtLSBiYXNpY19hcGkuKGN8aCkgICAgICAgICAtLSBtZW1ibG9ja19hZGQvbWVtYmxvY2tfcmVzZXJ2ZS8uLi4gdGVzdHNcbiB8ICAgIHwtLSBjb21tb24uKGN8aCkgICAgICAgICAgICAtLSBoZWxwZXIgZnVuY3Rpb25zIGZvciByZXNldHRpbmcgbWVtYmxvY2s7XG4gfC0tIG1haW4uYyAgICAgICAgLS0tLS0tLS0tLS0tLS0uICAgZHVtbXkgcGh5c2ljYWwgbWVtb3J5IGRlZmluaXRpb25cbiB8LS0gTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICBgLSB0ZXN0IHJ1bm5lclxuIHwtLSBSRUFETUVcbi18LS0gVE9ET1xuIHwtLSAuZ2l0aWdub3JlXG4gXG4gU2ltdWxhdGluZyBwaHlzaWNhbCBtZW1vcnlcbkBAIC0xMDEsMTIgKzEwMSwxMCBAQCBUaGVyZSdzIG5vIG5lZWQgdG8gZXhwbGljaXRseSBmcmVlIHRoZSBkdW1teSBtZW1vcnkgZnJvbSBtZW1ibG9jayB2aWFcbiBtZW1ibG9ja19mcmVlKCkgY2FsbC4gVGhlIGVudHJ5IHdpbGwgYmUgZXJhc2VkIGJ5IHJlc2V0X21lbWJsb2NrX3JlZ2lvbnMoKSxcbiBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHRlc3QuXG4gXG4tS25vd24gaXNzdWVzXG4tPT09PT09PT09PT09XG4tXG4tMS4gVGVzdHMgZm9yIG1lbWJsb2NrX2FsbG9jX2xvdygpIGNhbid0IGJlIGVhc2lseSBpbXBsZW1lbnRlZC4gVGhlIGZ1bmN0aW9uIHVzZXNcbi0gICBBUkNIX0xPV19BRERSRVNTX0xJTUlUIG1hcmNvLCB3aGljaCBjYW4ndCBiZSBjaGFuZ2VkIHRvIHBvaW50IGF0IHRoZSBsb3dcbi0gICBtZW1vcnkgb2YgdGhlIG1lbW9yeV9ibG9jay5cbitUaGUgc2ltdWxhdG9yIGRlZmluZXMgQVJDSF9MT1dfQUREUkVTU19MSU1JVCBpbiBhc20vZG1hLmggdXNpbmcgdGhlIG1pZHBvaW50XG4rb2YgdGhlIE1FTV9TSVpFIHJhbmdlIHJlZ2lzdGVyZWQgYnkgc2V0dXBfbWVtYmxvY2soKS4gVGhpcyBsZWF2ZXMgcmVnaXN0ZXJlZFxuK21lbW9yeSBib3RoIGJlbG93IGFuZCBhYm92ZSB0aGUgbGltaXQuIFRoZSBsaW1pdCBpcyB0aGUgZmlyc3QgYWRkcmVzcyBhblxuK2FsbG9jYXRpb24gbXVzdCBub3QgdXNlOyBhbiBhbGxvY2F0aW9uJ3MgYmFzZSBwbHVzIGl0cyBzaXplIG1heSBlcXVhbCB0aGUgbGltaXQuXG4gXG4gUmVmZXJlbmNlc1xuID09PT09PT09PT1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL1RPRE8gYi90b29scy90ZXN0aW5nL21lbWJsb2NrL1RPRE9cbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggYzEzYWQwZGFlNzc2My4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9UT0RPXG4rKysgL2Rldi9udWxsXG5AQCAtMSw1ICswLDAgQEBcbi1UT0RPXG4tPT09PT1cbi1cbi0xLiBBZGQgdGVzdHMgZm9yIG1lbWJsb2NrX2FsbG9jX2xvdygpIG9uY2UgdGhlIHNpbXVsYXRvciBjYW4gbW9kZWxcbi0gICBBUkNIX0xPV19BRERSRVNTX0xJTUlUIGFnYWluc3QgdGhlIGxvdyBtZW1vcnkgaW4gbWVtb3J5X2Jsb2NrXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9hc20vZG1hLmggYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaFxuaW5kZXggMTNmZjhlNWQyMmVmNi4uNjYwNzQwOGRjZjI1ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svYXNtL2RtYS5oXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL2FzbS9kbWEuaFxuQEAgLTIsNCArMiwxMCBAQFxuICNpZm5kZWYgX1RPT0xTX0RNQV9IXG4gI2RlZmluZSBfVE9PTFNfRE1BX0hcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rcGh5c19hZGRyX3QgZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2xvd19saW1pdCh2b2lkKTtcbitcbisjZGVmaW5lIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2xvd19saW1pdCgpXG4rXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay9tYWluLmMgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uY1xuaW5kZXggMjc4ZjlkZWM1MDA4Ny4uOWE5NmUxNzg1NTFiOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svbWFpbi5jXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL21haW4uY1xuQEAgLTQsNiArNCw3IEBAXG4gI2luY2x1ZGUgXCJ0ZXN0cy9hbGxvY19oZWxwZXJzX2FwaS5oXCJcbiAjaW5jbHVkZSBcInRlc3RzL2FsbG9jX25pZF9hcGkuaFwiXG4gI2luY2x1ZGUgXCJ0ZXN0cy9hbGxvY19leGFjdF9uaWRfYXBpLmhcIlxuKyNpbmNsdWRlIFwidGVzdHMvYWxsb2NfbG93X2FwaS5oXCJcbiAjaW5jbHVkZSBcInRlc3RzL2NvbW1vbi5oXCJcbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG5AQCAtMTIsNiArMTMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRtZW1ibG9ja19iYXNpY19jaGVja3MoKTtcbiBcdG1lbWJsb2NrX2FsbG9jX2NoZWNrcygpO1xuIFx0bWVtYmxvY2tfYWxsb2NfaGVscGVyc19jaGVja3MoKTtcbitcdG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3MoKTtcbiBcdG1lbWJsb2NrX2FsbG9jX25pZF9jaGVja3MoKTtcbiBcdG1lbWJsb2NrX2FsbG9jX2V4YWN0X25pZF9jaGVja3MoKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuYyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTExNzQzMWYxZjcxNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9hbGxvY19sb3dfYXBpLmNcbkBAIC0wLDAgKzEsMTQ4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisjaW5jbHVkZSBcImFsbG9jX2xvd19hcGkuaFwiXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWxpZ24uaFx1MDAzZVxuK1xuKy8qIEFsbG9jYXRlIGF0IHRoZSBmaXJzdCBvciBsYXN0IGFsaWduZWQgYWRkcmVzcyBiZWxvdyB0aGUgbG93IGxpbWl0LiAqL1xuK3N0YXRpYyBpbnQgYWxsb2NfbG93X3NpbXBsZV9jaGVjayh2b2lkKVxuK3tcbitcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJnbiA9IFx1MDAyNm1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbnNbMF07XG4rXHRwaHlzX2FkZHJfdCBzaXplID0gU1pfNjQ7XG4rXHRwaHlzX2FkZHJfdCBleHBlY3RlZDtcbitcdHZvaWQgKmFsbG9jYXRlZF9wdHI7XG4rXG4rXHRQUkVGSVhfUFVTSCgpO1xuK1x0c2V0dXBfbWVtYmxvY2soKTtcbitcbitcdC8qIFNpbXVsYXRlZCBwaHlzaWNhbCBSQU0gaXMgbm90IG5lY2Vzc2FyaWx5IFNNUF9DQUNIRV9CWVRFUyBhbGlnbmVkLiAqL1xuK1x0aWYgKG1lbWJsb2NrX2JvdHRvbV91cCgpKVxuK1x0XHRleHBlY3RlZCA9IEFMSUdOKG1lbWJsb2NrX3N0YXJ0X29mX0RSQU0oKSwgU01QX0NBQ0hFX0JZVEVTKTtcbitcdGVsc2VcbitcdFx0ZXhwZWN0ZWQgPSBBTElHTl9ET1dOKEFSQ0hfTE9XX0FERFJFU1NfTElNSVQgLSBzaXplLFxuK1x0XHRcdFx0ICAgICAgU01QX0NBQ0hFX0JZVEVTKTtcbitcbitcdGFsbG9jYXRlZF9wdHIgPSBtZW1ibG9ja19hbGxvY19sb3coc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTtcbitcbitcdEFTU0VSVF9ORShhbGxvY2F0ZWRfcHRyLCBOVUxMKTtcbitcdEFTU0VSVF9FUSgocGh5c19hZGRyX3QpKHVpbnRwdHJfdClhbGxvY2F0ZWRfcHRyLCBleHBlY3RlZCk7XG4rXHRBU1NFUlRfTUVNX0VRKGFsbG9jYXRlZF9wdHIsIDAsIHNpemUpO1xuK1x0QVNTRVJUX0VRKHJnbi1cdTAwM2ViYXNlLCBleHBlY3RlZCk7XG4rXHRBU1NFUlRfRVEocmduLVx1MDAzZXNpemUsIHNpemUpO1xuK1x0QVNTRVJUX0xFKHJlZ2lvbl9lbmQocmduKSwgQVJDSF9MT1dfQUREUkVTU19MSU1JVCk7XG4rXHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAxKTtcbitcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC50b3RhbF9zaXplLCBzaXplKTtcbitcbitcdHRlc3RfcGFzc19wb3AoKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBUaGUgbGFzdCBieXRlIG9mIHRoZSBhbGxvY2F0aW9uIGlzIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBsb3cgbGltaXQuICovXG4rc3RhdGljIGludCBhbGxvY19sb3dfZXhhY3RfbGltaXRfY2hlY2sodm9pZClcbit7XG4rXHRwaHlzX2FkZHJfdCBsaW1pdCA9IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQ7XG4rXHRwaHlzX2FkZHJfdCBiYXNlID0gQUxJR05fRE9XTihsaW1pdCAtIFNaXzY0LCBTTVBfQ0FDSEVfQllURVMpO1xuK1x0cGh5c19hZGRyX3Qgc2l6ZSA9IGxpbWl0IC0gYmFzZTtcbitcdHZvaWQgKmFsbG9jYXRlZF9wdHI7XG4rXG4rXHRQUkVGSVhfUFVTSCgpO1xuK1x0c2V0dXBfbWVtYmxvY2soKTtcbitcdEFTU0VSVF9FUShtZW1ibG9ja19yZW1vdmUobWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpLFxuK1x0XHRcdFx0ICBiYXNlIC0gbWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpKSwgMCk7XG4rXG4rXHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG4rXG4rXHRBU1NFUlRfTkUoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XG4rXHRBU1NFUlRfRVEoKHBoeXNfYWRkcl90KSh1aW50cHRyX3QpYWxsb2NhdGVkX3B0ciwgYmFzZSk7XG4rXHRBU1NFUlRfTUVNX0VRKGFsbG9jYXRlZF9wdHIsIDAsIHNpemUpO1xuK1x0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbnNbMF0uYmFzZSwgYmFzZSk7XG4rXHRBU1NFUlRfRVEocmVnaW9uX2VuZChcdTAwMjZtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdKSwgbGltaXQpO1xuK1x0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLmNudCwgMSk7XG4rXHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQudG90YWxfc2l6ZSwgc2l6ZSk7XG4rXG4rXHR0ZXN0X3Bhc3NfcG9wKCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBUaGVyZSBhcmUgc2l6ZSBieXRlcyBiZWxvdyB0aGUgbGltaXQsIGJ1dCBhbGlnbmluZyB0aGUgc3RhcnQgbWFrZXMgdGhlXG4rICogYWxsb2NhdGlvbiBjcm9zcyBpdC4gTWVtb3J5IGFib3ZlIHRoZSBsaW1pdCBtdXN0IG5vdCBzYXRpc2Z5IHRoZSByZXF1ZXN0LlxuKyAqL1xuK3N0YXRpYyBpbnQgYWxsb2NfbG93X2FsaWdubWVudF9jcm9zc2VzX2xpbWl0X2NoZWNrKHZvaWQpXG4re1xuK1x0cGh5c19hZGRyX3QgbGltaXQgPSBBUkNIX0xPV19BRERSRVNTX0xJTUlUO1xuK1x0cGh5c19hZGRyX3QgYmFzZSA9IEFMSUdOX0RPV04obGltaXQsIFNNUF9DQUNIRV9CWVRFUykgLSAxO1xuK1x0cGh5c19hZGRyX3Qgc2l6ZSA9IGxpbWl0IC0gYmFzZTtcbitcdHZvaWQgKmFsbG9jYXRlZF9wdHI7XG4rXG4rXHRQUkVGSVhfUFVTSCgpO1xuK1x0c2V0dXBfbWVtYmxvY2soKTtcbitcdEFTU0VSVF9FUShtZW1ibG9ja19yZW1vdmUobWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpLFxuK1x0XHRcdFx0ICBiYXNlIC0gbWVtYmxvY2tfc3RhcnRfb2ZfRFJBTSgpKSwgMCk7XG4rXG4rXHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG4rXG4rXHRBU1NFUlRfRVEoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XG4rXHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAwKTtcbitcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC50b3RhbF9zaXplLCAwKTtcbitcdEFTU0VSVF9NRU1fRVEoKHZvaWQgKikodWludHB0cl90KWJhc2UsIDEsIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBiYXNlKTtcbitcbitcdHRlc3RfcGFzc19wb3AoKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBBbGxvY2F0aW9uIG11c3QgZmFpbCBhZnRlciByZXNlcnZpbmcgYWxsIGxvdyBtZW1vcnksIHdpdGggaGlnaCBtZW1vcnkgZnJlZS4gKi9cbitzdGF0aWMgaW50IGFsbG9jX2xvd19yZXNlcnZlZF9jaGVjayh2b2lkKVxuK3tcbitcdHBoeXNfYWRkcl90IGxpbWl0ID0gQVJDSF9MT1dfQUREUkVTU19MSU1JVDtcbitcdHBoeXNfYWRkcl90IGJhc2UgPSBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSgpO1xuK1x0cGh5c19hZGRyX3Qgc2l6ZSA9IFNaXzY0O1xuK1x0dm9pZCAqYWxsb2NhdGVkX3B0cjtcbitcbitcdFBSRUZJWF9QVVNIKCk7XG4rXHRzZXR1cF9tZW1ibG9jaygpO1xuK1x0QVNTRVJUX0VRKG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgbGltaXQgLSBiYXNlKSwgMCk7XG4rXG4rXHRhbGxvY2F0ZWRfcHRyID0gbWVtYmxvY2tfYWxsb2NfbG93KHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG4rXG4rXHRBU1NFUlRfRVEoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XG4rXHRBU1NFUlRfRVEobWVtYmxvY2sucmVzZXJ2ZWQuY250LCAxKTtcbitcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC5yZWdpb25zWzBdLmJhc2UsIGJhc2UpO1xuK1x0QVNTRVJUX0VRKG1lbWJsb2NrLnJlc2VydmVkLnJlZ2lvbnNbMF0uc2l6ZSwgbGltaXQgLSBiYXNlKTtcbitcdEFTU0VSVF9FUShtZW1ibG9jay5yZXNlcnZlZC50b3RhbF9zaXplLCBsaW1pdCAtIGJhc2UpO1xuK1x0QVNTRVJUX01FTV9FUSgodm9pZCAqKSh1aW50cHRyX3QpYmFzZSwgMSwgTUVNX1NJWkUpO1xuK1xuK1x0YWxsb2NhdGVkX3B0ciA9IG1lbWJsb2NrX2FsbG9jKHNpemUsIFNNUF9DQUNIRV9CWVRFUyk7XG4rXHRBU1NFUlRfTkUoYWxsb2NhdGVkX3B0ciwgTlVMTCk7XG4rXHRBU1NFUlRfTEUobGltaXQsIChwaHlzX2FkZHJfdCkodWludHB0cl90KWFsbG9jYXRlZF9wdHIpO1xuK1x0QVNTRVJUX01FTV9FUShhbGxvY2F0ZWRfcHRyLCAwLCBzaXplKTtcbitcbitcdHRlc3RfcGFzc19wb3AoKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFsbG9jX2xvd19jaGVja3Modm9pZClcbit7XG4rXHRhbGxvY19sb3dfc2ltcGxlX2NoZWNrKCk7XG4rXHRhbGxvY19sb3dfZXhhY3RfbGltaXRfY2hlY2soKTtcbitcdGFsbG9jX2xvd19hbGlnbm1lbnRfY3Jvc3Nlc19saW1pdF9jaGVjaygpO1xuK1x0YWxsb2NfbG93X3Jlc2VydmVkX2NoZWNrKCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3Modm9pZClcbit7XG4rXHRwcmVmaXhfcmVzZXQoKTtcbitcdHByZWZpeF9wdXNoKFwibWVtYmxvY2tfYWxsb2NfbG93XCIpO1xuK1x0dGVzdF9wcmludChcIlJ1bm5pbmcgbWVtYmxvY2tfYWxsb2NfbG93IHRlc3RzLi4uXFxuXCIpO1xuK1xuK1x0cmVzZXRfbWVtYmxvY2tfYXR0cmlidXRlcygpO1xuK1x0ZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2luaXQoKTtcbitcbitcdHJ1bl90b3BfZG93bihhbGxvY19sb3dfY2hlY2tzKTtcbitcdHJ1bl9ib3R0b21fdXAoYWxsb2NfbG93X2NoZWNrcyk7XG4rXG4rXHRkdW1teV9waHlzaWNhbF9tZW1vcnlfY2xlYW51cCgpO1xuK1x0cHJlZml4X3BvcCgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvYWxsb2NfbG93X2FwaS5oIGIvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9hbGxvY19sb3dfYXBpLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yZTNjYmUzMzZmNWRhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2FsbG9jX2xvd19hcGkuaFxuQEAgLTAsMCArMSw5IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisjaWZuZGVmIF9NRU1CTE9DS19BTExPQ19MT1dfSFxuKyNkZWZpbmUgX01FTUJMT0NLX0FMTE9DX0xPV19IXG4rXG4rI2luY2x1ZGUgXCJjb21tb24uaFwiXG4rXG4raW50IG1lbWJsb2NrX2FsbG9jX2xvd19jaGVja3Modm9pZCk7XG4rXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9tZW1ibG9jay90ZXN0cy9jb21tb24uYyBiL3Rvb2xzL3Rlc3RpbmcvbWVtYmxvY2svdGVzdHMvY29tbW9uLmNcbmluZGV4IDMyNTBjOGU1MTI0YjMuLmFjMDMyNjEwYTU2ZWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2NvbW1vbi5jXG4rKysgYi90b29scy90ZXN0aW5nL21lbWJsb2NrL3Rlc3RzL2NvbW1vbi5jXG5AQCAtMTE4LDYgKzExOCwxMiBAQCBwaHlzX2FkZHJfdCBkdW1teV9waHlzaWNhbF9tZW1vcnlfYmFzZSh2b2lkKVxuIFx0cmV0dXJuIChwaHlzX2FkZHJfdCltZW1vcnlfYmxvY2suYmFzZTtcbiB9XG4gXG4rcGh5c19hZGRyX3QgZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2xvd19saW1pdCh2b2lkKVxuK3tcbitcdC8qIFRoZSBsb3cgbGltaXQgaXMgaGFsZndheSB0aHJvdWdoIG1lbW9yeSByZWdpc3RlcmVkIGJ5IHNldHVwX21lbWJsb2NrKCkuICovXG4rXHRyZXR1cm4gZHVtbXlfcGh5c2ljYWxfbWVtb3J5X2Jhc2UoKSArIE1FTV9TSVpFIC8gMjtcbit9XG4rXG4gc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZylcbiB7XG4gXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShoZWxwX29wdHMpICE9IEFSUkFZX1NJWkUobG9uZ19vcHRzKSAtIDEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6MjY6NTkuMjE1MTIwMTA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAyNzA4ODkyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IFdvcnRoRnV6emluZyA9IEZhbHNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGFuYWx5emUgdGhlIHBhdGNoIGRpZmYuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGFsbCBjb25maW5lZCB0byB0aGUgYHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svYCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgYE1ha2VmaWxlYCwgYFJFQURNRWAsIGBUT0RPYCwgYW5kIHNldmVyYWwgQyBhbmQgaGVhZGVyIGZpbGVzIHdpdGhpbiB0aGF0IGRpcmVjdG9yeTogYGFzbS9kbWEuaGAsIGBtYWluLmNgLCBgdGVzdHMvYWxsb2NfbG93X2FwaS5jYCwgYHRlc3RzL2FsbG9jX2xvd19hcGkuaGAsIGFuZCBgdGVzdHMvY29tbW9uLmNgLlxuXG5Ob3csIGFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcyBpbiBzZWN0aW9uIDIsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcuIFRoZSBrZXkgaGVyZSBpczogKkRvZXMgdGhlIG1vZGlmaWVkIGNvZGUgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzPypcblxuTG9va2luZyBhdCB0aGUgY29udGV4dCwgdGhpcyBpcyBhIHVzZXJzcGFjZSB0ZXN0IGhhcm5lc3Mgb3IgdW5pdCB0ZXN0cyBmb3IgdGhlIGBtZW1ibG9ja2AgZnVuY3Rpb25hbGl0eS4gSXQgY29tcGlsZXMgYSB1c2Vyc3BhY2UgYmluYXJ5IGBtYWluYCwgcHJlc3VtYWJseSB1c2luZyBjb21waWxlciBmbGFncyBsaWtlIGAtZnNhbml0aXplPWFkZHJlc3NgLCB3aGljaCBmdXJ0aGVyIHN1cHBvcnRzIHRoYXQgdGhpcyBpc24ndCBrZXJuZWwtbGV2ZWwgY29kZS4gQW5kLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgbm8gb3RoZXIgZmlsZXMgb3V0c2lkZSBvZiBgdG9vbHMvdGVzdGluZy9tZW1ibG9jay9gIGFyZSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gWWVwLCB0aGUgZGlmZiBjb25maXJtcyBpdDogYWxsIHRoZSBsaXN0ZWQgZmlsZXMgYXJlIHN0cmljdGx5IHdpdGhpbiB0aGF0IGRpcmVjdG9yeS5cblxuVGhlcmVmb3JlLCB1bmRlciB0aG9zZSBndWlkZWxpbmVzLCBJJ20gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuIFRoZSBwYXRjaCBtb2RpZmllcyBleGNsdXNpdmVseSB1c2Vyc3BhY2UgdGVzdCBjb2RlLlxuXG5Ob3csIHRvIHByZXBhcmUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbCwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvcnJlY3QgZm9ybWF0OiBgRW5hYmxlQ29uZmlnc2AgbmVlZHMgdG8gYmUgYFtdYCBvciBgbnVsbGAsIGBGb2N1c1N5bWJvbHNgIGlzIGFsc28gYFtdYCwgYW5kIEknbGwgbmVlZCBhIGNsZWFyIGBSZWFzb25pbmdgLlxuXG5JJ2xsIHBocmFzZSB0aGUgcmVhc29uaW5nIHRoaXMgd2F5OiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSB0b3VjaGVzIHVzZXJzcGFjZSB1bml0IHRlc3RzIGluIGB0b29scy90ZXN0aW5nL21lbWJsb2NrL2AgdG8gYWRkIHRlc3RzIGZvciBgbWVtYmxvY2tfYWxsb2NfbG93KClgLiBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSwgb3Iga2VybmVsIG1vZHVsZXMuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBrZXJuZWwgYW5kIGlzIG5vdCB0YXJnZXRhYmxlL3JlYWNoYWJsZSBieSBzeXprYWxsZXIga2VybmVsIGZ1enppbmcuXCIgVGhhdCdzIGNvbmNpc2UgYW5kIGV4cGxhaW5zICp3aHkqIGl0J3Mgbm90IHdvcnRoIGZ1enppbmcuXG5cbkFscmlnaHQsIHdpdGggdGhlIHJlYXNvbmluZyBmb3JtdWxhdGVkLCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjk3LCJPdXRwdXRUb2tlbnMiOjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDA6Mjc6MDUuMjQyMjEyNTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyBhbmQgdGVzdCBmcmFtZXdvcmsgZmlsZXMgd2l0aGluIHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svIChhZGRpbmcgdGVzdCBjYXNlcyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdW5pdCB0ZXN0cyBhbmQgdGVzdCBmcmFtZXdvcmsgZmlsZXMgd2l0aGluIHRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svIChhZGRpbmcgdGVzdCBjYXNlcyBmb3IgbWVtYmxvY2tfYWxsb2NfbG93KS4gSXQgZG9lcyBub3QgYWx0ZXIgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMDoyNzowNS4yNDIyNDI2MzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowjxnrs[1] Phase: Running StartedAt: 2026-09-10 00:27:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjxnrs[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-10 00:27:15 +0000 UTC FinishedAt: 2026-09-10 00:27:20 +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,}