From: Date: July 3 2009 5:22pm Subject: bzr push into mysql-5.1-telco-7.1 branch (frazer:2929 to 2930) List-Archive: http://lists.mysql.com/commits/77920 Message-Id: <200907031522.n63FMd8n014421@localhost.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: BASE64 IDI5MzAgRnJhemVyIENsZW1lbnQJMjAwOS0wNy0wMyBbbWVyZ2VdDQogICAgICBN ZXJnZSA3LjAtPjcuMQ0KICAgICAgbW9kaWZpZWQ6DQogICAgICAgIHN0b3JhZ2Uv bmRiL3Rlc3QvaW5jbHVkZS9OREJUX1Rlc3QuaHBwDQogICAgICAgIHN0b3JhZ2Uv bmRiL3Rlc3QvbmRiYXBpL3Rlc3RJbmRleC5jcHANCiAgICAgICAgc3RvcmFnZS9u ZGIvdGVzdC9zcmMvTkRCVF9UZXN0LmNwcA0KICAgICAgICBzdG9yYWdlL25kYi90 ZXN0L3Rvb2xzL2NyZWF0ZV9pbmRleC5jcHANCg0KIDI5MjkgTWFnbnVzIEJsw6V1 ZGQJMjAwOS0wNy0wMyBbbWVyZ2VdDQogICAgICBNZXJnZQ0KICAgICAgcmVtb3Zl ZDoNCiAgICAgICAgc3RvcmFnZS9uZGIvaW5jbHVkZS9uZGJpbmZvLmgNCiAgICAg ICAgc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi91dGlsL25kYmluZm8uY3BwDQogICAg ICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9uZGJpbmZv X2hlbHBlcnMuY3BwDQogICAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxv Y2tzL2RiaW5mby9uZGJpbmZvX3RhYmxlaWRzLmgNCiAgICAgICAgc3RvcmFnZS9u ZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJpbmZvL25kYmluZm9fdGFibGVzLmgNCiAg ICAgICAgc3RvcmFnZS9uZGIvc3JjL21nbXNydi9tZ21fbmRiaW5mby5jcHANCiAg ICAgIGFkZGVkOg0KICAgICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL05k YmluZm8uY3BwDQogICAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vTmRi aW5mby5ocHANCiAgICAgIG1vZGlmaWVkOg0KICAgICAgICBteXNxbC10ZXN0L3N1 aXRlL25kYi9yL25kYl9iYXNpYy5yZXN1bHQNCiAgICAgICAgbXlzcWwtdGVzdC9z dWl0ZS9uZGIvci9uZGJpbmZvLnJlc3VsdA0KICAgICAgICBteXNxbC10ZXN0L3N1 aXRlL25kYi90L25kYl9iYXNpYy50ZXN0DQogICAgICAgIG15c3FsLXRlc3Qvc3Vp dGUvbmRiL3QvbmRiaW5mby50ZXN0DQogICAgICAgIHNxbC9oYV9uZGJjbHVzdGVy LmNjDQogICAgICAgIHNxbC9oYV9uZGJpbmZvLmNjDQogICAgICAgIHN0b3JhZ2Uv bmRiL2luY2x1ZGUvTWFrZWZpbGUuYW0NCiAgICAgICAgc3RvcmFnZS9uZGIvaW5j bHVkZS9rZXJuZWwvc2lnbmFsZGF0YS9EYmluZm9TY2FuLmhwcA0KICAgICAgICBz dG9yYWdlL25kYi9pbmNsdWRlL2tlcm5lbC9zaWduYWxkYXRhL0R1bXBTdGF0ZU9y ZC5ocHANCiAgICAgICAgc3RvcmFnZS9uZGIvaW5jbHVkZS9rZXJuZWwvc2lnbmFs ZGF0YS9TaWduYWxEYXRhLmhwcA0KICAgICAgICBzdG9yYWdlL25kYi9zcmMvY29t bW9uL2RlYnVnZ2VyL3NpZ25hbGRhdGEvRGJpbmZvU2Nhbi5jcHANCiAgICAgICAg c3RvcmFnZS9uZGIvc3JjL2NvbW1vbi9kZWJ1Z2dlci9zaWduYWxkYXRhL1NpZ25h bERhdGFQcmludC5jcHANCiAgICAgICAgc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi91 dGlsL01ha2VmaWxlLmFtDQogICAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwv YmxvY2tzL0xvY2FsUHJveHkuY3BwDQogICAgICAgIHN0b3JhZ2UvbmRiL3NyYy9r ZXJuZWwvYmxvY2tzL0xvY2FsUHJveHkuaHBwDQogICAgICAgIHN0b3JhZ2UvbmRi L3NyYy9rZXJuZWwvYmxvY2tzL01ha2VmaWxlLmFtDQogICAgICAgIHN0b3JhZ2Uv bmRiL3NyYy9rZXJuZWwvYmxvY2tzL2JhY2t1cC9CYWNrdXAuY3BwDQogICAgICAg IHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiYWNjL0RiYWNjTWFpbi5j cHANCiAgICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJkaWN0 L0RiZGljdC5jcHANCiAgICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9j a3MvZGJpbmZvL0NNYWtlTGlzdHMudHh0DQogICAgICAgIHN0b3JhZ2UvbmRiL3Ny Yy9rZXJuZWwvYmxvY2tzL2RiaW5mby9EYmluZm8uY3BwDQogICAgICAgIHN0b3Jh Z2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9EYmluZm8uaHBwDQogICAg ICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidGMvRGJ0Y01haW4u Y3BwDQogICAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidHVw L0RidHVwRGVidWcuY3BwDQogICAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwv YmxvY2tzL2RidHV4L0RidHV4RGVidWcuY3BwDQogICAgICAgIHN0b3JhZ2UvbmRi L3NyYy9rZXJuZWwvYmxvY2tzL2RidXRpbC9EYlV0aWwuY3BwDQogICAgICAgIHN0 b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL3N1bWEvU3VtYS5jcHANCiAgICAg ICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvdHJpeC9Ucml4LmNwcA0K ICAgICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL01ha2VmaWxlLmFtDQog ICAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vU2ltdWxhdGVkQmxvY2su Y3BwDQogICAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vU2ltdWxhdGVk QmxvY2suaHBwDQogICAgICAgIHN0b3JhZ2UvbmRiL3NyYy9tZ21zcnYvTWFrZWZp bGUuYW0NCiAgICAgICAgc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJbmZvLmNw cA0KICAgICAgICBzdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYkluZm8uaHBwDQog ICAgICAgIHN0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiSW5mb1NjYW5PcGVyYXRp b24uY3BwDQogICAgICAgIHN0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiSW5mb1Nj YW5PcGVyYXRpb24uaHBwDQogICAgICAgIHN0b3JhZ2UvbmRiL3Rlc3QvbmRiYXBp L3Rlc3ROZGJpbmZvLmNwcA0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9u ZGIvdGVzdC9pbmNsdWRlL05EQlRfVGVzdC5ocHAnDQotLS0gYS9zdG9yYWdlL25k Yi90ZXN0L2luY2x1ZGUvTkRCVF9UZXN0LmhwcAkyMDA5LTA1LTI3IDE1OjIxOjQ1 ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi90ZXN0L2luY2x1ZGUvTkRCVF9UZXN0 LmhwcAkyMDA5LTA3LTAzIDE1OjA4OjE0ICswMDAwDQpAQCAtNDE0LDYgKzQxNCw3 IEBAIHByaXZhdGU6DQogICBib29sIHRlbXBvcmFyeVRhYmxlczsNCiAgIGJvb2wg bV9sb2dnaW5nOw0KICAgTkRCVF9Ecml2ZXJUeXBlIG1fZHJpdmVyVHlwZTsNCisg IGJvb2wgbV9ub2RkbDsNCiB9Ow0KIA0KIA0KDQo9PT0gbW9kaWZpZWQgZmlsZSAn c3RvcmFnZS9uZGIvdGVzdC9uZGJhcGkvdGVzdEluZGV4LmNwcCcNCi0tLSBhL3N0 b3JhZ2UvbmRiL3Rlc3QvbmRiYXBpL3Rlc3RJbmRleC5jcHAJMjAwOS0wNS0yNyAx NToyMTo0NSArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvdGVzdC9uZGJhcGkvdGVz dEluZGV4LmNwcAkyMDA5LTA3LTAzIDE1OjA4OjE0ICswMDAwDQpAQCAtMTk3LDIx ICsxOTcsNDIgQEAgaW50IGNyZWF0ZV9pbmRleChOREJUX0NvbnRleHQqIGN0eCwg aW50IA0KIA0KICAgcElkeC5zZXRTdG9yZWRJbmRleChsb2dnZWQpOw0KICAgbmRi b3V0IDw8ICIpICI7DQotICBpZiAocE5kYi0+Z2V0RGljdGlvbmFyeSgpLT5jcmVh dGVJbmRleChwSWR4KSAhPSAwKXsNCi0gICAgYXR0ci0+aW5kZXhDcmVhdGVkID0g ZmFsc2U7DQotICAgIG5kYm91dCA8PCAiRkFJTEVEISIgPDwgZW5kbDsNCi0gICAg Y29uc3QgTmRiRXJyb3IgZXJyID0gcE5kYi0+Z2V0RGljdGlvbmFyeSgpLT5nZXRO ZGJFcnJvcigpOw0KLSAgICBFUlIoZXJyKTsNCi0gICAgaWYgKGVyci5jbGFzc2lm aWNhdGlvbiA9PSBOZGJFcnJvcjo6QXBwbGljYXRpb25FcnJvcikNCi0gICAgICBy ZXR1cm4gU0tJUF9JTkRFWDsNCisgIGJvb2wgbm9kZGw9IGN0eC0+Z2V0UHJvcGVy dHkoIk5vRERMIik7DQogDQotICAgIGlmIChlcnIuc3RhdHVzID09IE5kYkVycm9y OjpUZW1wb3JhcnlFcnJvcikNCi0gICAgICByZXR1cm4gU0tJUF9JTkRFWDsNCi0g ICAgDQotICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCi0gIH0gZWxzZSB7DQotICAg IG5kYm91dCA8PCAiT0shIiA8PCBlbmRsOw0KLSAgICBhdHRyLT5pbmRleENyZWF0 ZWQgPSB0cnVlOw0KKyAgaWYgKG5vZGRsKQ0KKyAgew0KKyAgICBjb25zdCBOZGJE aWN0aW9uYXJ5OjpJbmRleCogaWR4PSBwTmRiLT4NCisgICAgICBnZXREaWN0aW9u YXJ5KCktPmdldEluZGV4KHBJZHguZ2V0TmFtZSgpLCBwVGFiLT5nZXROYW1lKCkp Ow0KKw0KKyAgICBpZiAoIWlkeCkNCisgICAgew0KKyAgICAgIG5kYm91dCA8PCAi RmFpbGVkIC0gSW5kZXggZG9lcyBub3QgZXhpc3QgYW5kIERETCBub3QgYWxsb3dl ZCIgPDwgZW5kbDsNCisgICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgIH0N CisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgYXR0ci0+aW5kZXhDcmVhdGVkID0g ZmFsc2U7DQorICAgICAgLy8gVE9ETyA6IENoZWNrIGluZGV4IGRlZmluaXRpb24g aXMgb2sNCisgICAgfQ0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBpZiAocE5k Yi0+Z2V0RGljdGlvbmFyeSgpLT5jcmVhdGVJbmRleChwSWR4KSAhPSAwKXsNCisg ICAgICBhdHRyLT5pbmRleENyZWF0ZWQgPSBmYWxzZTsNCisgICAgICBuZGJvdXQg PDwgIkZBSUxFRCEiIDw8IGVuZGw7DQorICAgICAgY29uc3QgTmRiRXJyb3IgZXJy ID0gcE5kYi0+Z2V0RGljdGlvbmFyeSgpLT5nZXROZGJFcnJvcigpOw0KKyAgICAg IEVSUihlcnIpOw0KKyAgICAgIGlmIChlcnIuY2xhc3NpZmljYXRpb24gPT0gTmRi RXJyb3I6OkFwcGxpY2F0aW9uRXJyb3IpDQorICAgICAgICByZXR1cm4gU0tJUF9J TkRFWDsNCisgICAgICANCisgICAgICBpZiAoZXJyLnN0YXR1cyA9PSBOZGJFcnJv cjo6VGVtcG9yYXJ5RXJyb3IpDQorICAgICAgICByZXR1cm4gU0tJUF9JTkRFWDsN CisgICAgICANCisgICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgIH0gZWxz ZSB7DQorICAgICAgbmRib3V0IDw8ICJPSyEiIDw8IGVuZGw7DQorICAgICAgYXR0 ci0+aW5kZXhDcmVhdGVkID0gdHJ1ZTsNCisgICAgfQ0KICAgfQ0KICAgcmV0dXJu IHJlc3VsdDsNCiB9DQpAQCAtMzM3LDcgKzM1OCw4IEBAIGludCBjcmVhdGVQa0lu ZGV4KE5EQlRfQ29udGV4dCogY3R4LCBOREINCiAgIE5kYiogcE5kYiA9IEdFVE5E QihzdGVwKTsNCiANCiAgIGJvb2wgbG9nZ2VkID0gY3R4LT5nZXRQcm9wZXJ0eSgi TG9nZ2VkSW5kZXhlcyIsIDEpOw0KLQ0KKyAgYm9vbCBub2RkbD0gY3R4LT5nZXRQ cm9wZXJ0eSgiTm9EREwiKTsNCisgIA0KICAgLy8gQ3JlYXRlIGluZGV4ICAgIA0K ICAgQmFzZVN0cmluZzo6c25wcmludGYocGtJZHhOYW1lLCAyNTUsICJJRENfUEtf JXMiLCBwVGFiLT5nZXROYW1lKCkpOw0KICAgaWYgKG9yZGVyZWRJbmRleCkNCkBA IC0zNjMsMTEgKzM4NSwzMCBAQCBpbnQgY3JlYXRlUGtJbmRleChOREJUX0NvbnRl eHQqIGN0eCwgTkRCDQogICANCiAgIHBJZHguc2V0U3RvcmVkSW5kZXgobG9nZ2Vk KTsNCiAgIG5kYm91dCA8PCAiKSAiOw0KLSAgaWYgKHBOZGItPmdldERpY3Rpb25h cnkoKS0+Y3JlYXRlSW5kZXgocElkeCkgIT0gMCl7DQotICAgIG5kYm91dCA8PCAi RkFJTEVEISIgPDwgZW5kbDsNCi0gICAgY29uc3QgTmRiRXJyb3IgZXJyID0gcE5k Yi0+Z2V0RGljdGlvbmFyeSgpLT5nZXROZGJFcnJvcigpOw0KLSAgICBFUlIoZXJy KTsNCi0gICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAgaWYgKG5vZGRsKQ0KKyAg ew0KKyAgICBjb25zdCBOZGJEaWN0aW9uYXJ5OjpJbmRleCogaWR4PSBwTmRiLT4N CisgICAgICBnZXREaWN0aW9uYXJ5KCktPmdldEluZGV4KHBrSWR4TmFtZSwgcFRh Yi0+Z2V0TmFtZSgpKTsNCisgICAgDQorICAgIGlmICghaWR4KQ0KKyAgICB7DQor ICAgICAgbmRib3V0IDw8ICJGYWlsZWQgLSBJbmRleCBkb2VzIG5vdCBleGlzdCBh bmQgRERMIG5vdCBhbGxvd2VkIiA8PCBlbmRsOw0KKyAgICAgIEVSUihwTmRiLT5n ZXREaWN0aW9uYXJ5KCktPmdldE5kYkVycm9yKCkpOw0KKyAgICAgIHJldHVybiBO REJUX0ZBSUxFRDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAv LyBUT0RPIDogQ2hlY2sgaW5kZXggZGVmaW5pdGlvbiBpcyBvaw0KKyAgICB9DQor ICB9DQorICBlbHNlDQorICB7DQorICAgIGlmIChwTmRiLT5nZXREaWN0aW9uYXJ5 KCktPmNyZWF0ZUluZGV4KHBJZHgpICE9IDApew0KKyAgICAgIG5kYm91dCA8PCAi RkFJTEVEISIgPDwgZW5kbDsNCisgICAgICBjb25zdCBOZGJFcnJvciBlcnIgPSBw TmRiLT5nZXREaWN0aW9uYXJ5KCktPmdldE5kYkVycm9yKCk7DQorICAgICAgRVJS KGVycik7DQorICAgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAgICB9DQogICB9 DQogDQogICBuZGJvdXQgPDwgIk9LISIgPDwgZW5kbDsNCkBAIC0zNzgsMTUgKzQx OSwyMCBAQCBpbnQgY3JlYXRlUGtJbmRleF9Ecm9wKE5EQlRfQ29udGV4dCogY3R4 DQogICBjb25zdCBOZGJEaWN0aW9uYXJ5OjpUYWJsZSogcFRhYiA9IGN0eC0+Z2V0 VGFiKCk7DQogICBOZGIqIHBOZGIgPSBHRVROREIoc3RlcCk7DQogDQorICBib29s IG5vZGRsPSBjdHgtPmdldFByb3BlcnR5KCJOb0RETCIpOw0KKw0KICAgLy8gRHJv cCBpbmRleA0KLSAgbmRib3V0IDw8ICJEcm9wcGluZyBpbmRleCAiIDw8IHBrSWR4 TmFtZSA8PCAiICI7DQotICBpZiAocE5kYi0+Z2V0RGljdGlvbmFyeSgpLT5kcm9w SW5kZXgocGtJZHhOYW1lLCANCi0JCQkJICAgICAgIHBUYWItPmdldE5hbWUoKSkg IT0gMCl7DQotICAgIG5kYm91dCA8PCAiRkFJTEVEISIgPDwgZW5kbDsNCi0gICAg RVJSKHBOZGItPmdldERpY3Rpb25hcnkoKS0+Z2V0TmRiRXJyb3IoKSk7DQotICAg IHJldHVybiBOREJUX0ZBSUxFRDsNCi0gIH0gZWxzZSB7DQotICAgIG5kYm91dCA8 PCAiT0shIiA8PCBlbmRsOw0KKyAgaWYgKCFub2RkbCkNCisgIHsNCisgICAgbmRi b3V0IDw8ICJEcm9wcGluZyBpbmRleCAiIDw8IHBrSWR4TmFtZSA8PCAiICI7DQor ICAgIGlmIChwTmRiLT5nZXREaWN0aW9uYXJ5KCktPmRyb3BJbmRleChwa0lkeE5h bWUsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cFRhYi0+Z2V0TmFtZSgpKSAhPSAwKXsNCisgICAgICBuZGJvdXQgPDwgIkZBSUxF RCEiIDw8IGVuZGw7DQorICAgICAgRVJSKHBOZGItPmdldERpY3Rpb25hcnkoKS0+ Z2V0TmRiRXJyb3IoKSk7DQorICAgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAg ICB9IGVsc2Ugew0KKyAgICAgIG5kYm91dCA8PCAiT0shIiA8PCBlbmRsOw0KKyAg ICB9DQogICB9DQogICANCiAgIHJldHVybiBOREJUX09LOw0KQEAgLTg4Niw2ICs5 MzIsMTcgQEAgaW50IHJ1blN5c3RlbVJlc3RhcnQxKE5EQlRfQ29udGV4dCogY3R4 LA0KIH0NCiANCiAjZGVmaW5lIENIRUNLMihiLCB0KSBpZighYil7IGdfZXJyIDw8 IF9fTElORV9fIDw8ICI6ICIgPDwgdCA8PCBlbmRsOyBicmVhazt9DQorI2RlZmlu ZSBDSEVDS09LT1JUSU1FT1VUKGUsIHQpIHsgaW50IHJjPSAoZSk7ICAgICAgICBc DQorICAgIGlmIChyYyAhPSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcDQorICAgICAgaWYgKHJjID09IDI2NikgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICBnX2VyciA8PCAiVGlt ZW91dCA6IHJldHJpZXMgbGVmdCA6ICIgICAgICAgICAgICBcDQorICAgICAgICAg ICAgICA8PCB0aW1lb3V0UmV0cmllcyAgICAgICAgICAgICAgICAgICAgICAgICBc DQorICAgICAgICAgICAgICA8PCBlbmRsOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcDQorICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgZ19l cnIgPDwgX19MSU5FX18gPDwgIjogIiA8PCAodCkgPDwgZW5kbDsgYnJlYWs7ICBc DQorICAgIH0gfQ0KKw0KIA0KIGludA0KIHJ1bk1peGVkMShOREJUX0NvbnRleHQq IGN0eCwgTkRCVF9TdGVwKiBzdGVwKXsNCkBAIC04OTQsNiArOTUxLDcgQEAgcnVu TWl4ZWQxKE5EQlRfQ29udGV4dCogY3R4LCBOREJUX1N0ZXAqIA0KICAgTmRiKiBw TmRiID0gR0VUTkRCKHN0ZXApOw0KICAgSHVnb09wZXJhdGlvbnMgaHVnb09wcygq Y3R4LT5nZXRUYWIoKSk7DQogDQorICAvKiBPbGQsIHJhdGhlciBpbmVmZmVjdGl2 ZSB0ZXN0Y2FzZSB3aGljaCBub25ldGhlbGVzcyBwYXNzZXMgb24gNi4zICovDQog DQogICBkbyB7DQogICAgIC8vIFRDMQ0KQEAgLTk0OSw2ICsxMDA3LDQxMyBAQCBy dW5NaXhlZDEoTkRCVF9Db250ZXh0KiBjdHgsIE5EQlRfU3RlcCogDQogICByZXR1 cm4gTkRCVF9GQUlMRUQ7DQogfQ0KIA0KKw0KKw0KK2ludA0KK3J1bk1peGVkVXBk YXRlSW50ZXJsZWF2ZWQoTmRiKiBwTmRiLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgSHVnb09wZXJhdGlvbnMmIGh1Z29PcHMsDQorICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgb3V0T2ZSYW5nZVJlYywNCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCB0ZXN0U2l6ZSwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgIGJvb2wgY29tbWl0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v bCBhYm9ydCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwa0ZhaWxS ZWMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXhGYWlsUmVjLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbnZlcnRGYWlsLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgQWJvcnRPcHRpb24gYW8sDQorICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgd2hhdFRvVXBkYXRlLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHVwZGF0ZXNWYWx1ZSwNCisgICAgICAgICAg ICAgICAgICAgICAgICAgIGJvb2wgaXhGaXJzdCkNCit7DQorICBVaW50MzIgZXhl Y1JjPSAwOw0KKyAgaWYgKChwa0ZhaWxSZWMgIT0gLTEpIHx8IChpeEZhaWxSZWMg IT0gLTEpKQ0KKyAgew0KKyAgICBleGVjUmM9IDYyNjsNCisgIH0NCisgIA0KKyAg Ym9vbCB1cGRhdGVWaWFQaz0gd2hhdFRvVXBkYXRlICYgMTsNCisgIGJvb2wgdXBk YXRlVmlhSXg9IHdoYXRUb1VwZGF0ZSAmIDI7DQorDQorICBpbnQgaXhPcE51bT0g KGl4Rmlyc3Q/MDoxKTsNCisgIGludCBwa09wTnVtPSAoaXhGaXJzdD8xOjApOw0K Kw0KKyAgaW50IHRpbWVvdXRSZXRyaWVzPSAzOw0KKw0KKyAgd2hpbGUgKHRpbWVv dXRSZXRyaWVzLS0pDQorICB7DQorICAgIENIRUNLMihodWdvT3BzLnN0YXJ0VHJh bnNhY3Rpb24ocE5kYikgPT0gMCwgInN0YXJ0VHJhbnNhY3Rpb24iKTsNCisgICAg Zm9yIChpbnQgaT0wOyBpIDwgdGVzdFNpemU7IGkrKykNCisgICAgew0KKyAgICAg IC8qIGludmVydEZhaWwgY2F1c2VzIGFsbCBpc3N1ZWQgcmVhZHMgKmV4Y2VwdCog dGhlIGZhaWwgcmVjb3JkIG51bWJlcg0KKyAgICAgICAqIHRvIGZhaWwNCisgICAg ICAgKi8NCisgICAgICBpbnQgaW5keEtleT0gKChpID09IGl4RmFpbFJlYyleaW52 ZXJ0RmFpbCk/IG91dE9mUmFuZ2VSZWMgOiBpOw0KKyAgICAgIGludCBwa0tleT0g KChpID09IHBrRmFpbFJlYyleaW52ZXJ0RmFpbCk/IG91dE9mUmFuZ2VSZWMgOiBp Ow0KKyAgICAgIA0KKyAgICAgIGZvciAoaW50IG9wTnVtPTA7IG9wTnVtIDwgMjsg b3BOdW0rKykNCisgICAgICB7DQorICAgICAgICBpZiAob3BOdW0gPT0gaXhPcE51 bSkNCisgICAgICAgIHsNCisgICAgICAgICAgaWYgKHVwZGF0ZVZpYUl4KQ0KKyAg ICAgICAgICB7DQorICAgICAgICAgICAgQ0hFQ0syKGh1Z29PcHMuaW5kZXhVcGRh dGVSZWNvcmQocE5kYiwgcGtJZHhOYW1lLCBpbmR4S2V5LCAxLCB1cGRhdGVzVmFs dWUpID09IDAsDQorICAgICAgICAgICAgICAgICAgICJpbmRleFVwZGF0ZVJlY29y ZCIpOw0KKyAgICAgICAgICB9DQorICAgICAgICAgIGVsc2UNCisgICAgICAgICAg ew0KKyAgICAgICAgICAgIENIRUNLMihodWdvT3BzLmluZGV4UmVhZFJlY29yZHMo cE5kYiwgcGtJZHhOYW1lLCBpbmR4S2V5KSA9PSAwLCAiaW5kZXhSZWFkUmVjb3Jk cyIpOw0KKyAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICANCisgICAg ICAgIGlmIChvcE51bSA9PSBwa09wTnVtKQ0KKyAgICAgICAgew0KKyAgICAgICAg ICBpZiAodXBkYXRlVmlhUGspDQorICAgICAgICAgIHsNCisgICAgICAgICAgICBD SEVDSzIoaHVnb09wcy5wa1VwZGF0ZVJlY29yZChwTmRiLCBwa0tleSwgMSwgdXBk YXRlc1ZhbHVlKSA9PSAwLCANCisgICAgICAgICAgICAgICAgICAgInBrVXBkYXRl UmVjb3JkIik7DQorICAgICAgICAgIH0NCisgICAgICAgICAgZWxzZQ0KKyAgICAg ICAgICB7DQorICAgICAgICAgICAgQ0hFQ0syKGh1Z29PcHMucGtSZWFkUmVjb3Jk KHBOZGIsIHBrS2V5KSA9PSAwLCAicGtSZWFkUmVjb3JkIik7DQorICAgICAgICAg IH0NCisgICAgICAgIH0NCisgICAgICB9DQorICAgIH0NCisgICAgaWYgKGNvbW1p dCkNCisgICAgew0KKyAgICAgIGludCByYz0gaHVnb09wcy5leGVjdXRlX0NvbW1p dChwTmRiLCBhbyk7DQorICAgICAgaWYgKHJjID09IDI2NikNCisgICAgICB7DQor ICAgICAgICAvKiBUaW1lb3V0ICovDQorICAgICAgICBnX2VyciA8PCAiVGltZW91 dCA6IHJldHJpZXMgbGVmdD0iIDw8IHRpbWVvdXRSZXRyaWVzIDw8IGVuZGw7DQor ICAgICAgICBodWdvT3BzLmNsb3NlVHJhbnNhY3Rpb24ocE5kYik7DQorICAgICAg ICBjb250aW51ZTsNCisgICAgICB9DQorICAgICAgQ0hFQ0syKHJjID09IGV4ZWNS YywgImV4ZWN1dGVfQ29tbWl0Iik7DQorICAgICAgTmRiRXJyb3IgZXJyPSBodWdv T3BzLmdldFRyYW5zYWN0aW9uKCktPmdldE5kYkVycm9yKCk7DQorICAgICAgQ0hF Q0syKGVyci5jb2RlID09IGV4ZWNSYywgImdldE5kYkVycm9yIik7DQorICAgIH0N CisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgaW50IHJjPSBodWdvT3BzLmV4ZWN1 dGVfTm9Db21taXQocE5kYiwgYW8pOw0KKyAgICAgIGlmIChyYyA9PSAyNjYpDQor ICAgICAgew0KKyAgICAgICAgLyogVGltZW91dCAqLw0KKyAgICAgICAgZ19lcnIg PDwgIlRpbWVvdXQgOiByZXRyaWVzIGxlZnQ9IiA8PCB0aW1lb3V0UmV0cmllcyA8 PCBlbmRsOw0KKyAgICAgICAgaHVnb09wcy5jbG9zZVRyYW5zYWN0aW9uKHBOZGIp Ow0KKyAgICAgICAgY29udGludWU7DQorICAgICAgfQ0KKyAgICAgIENIRUNLMihy YyA9PSBleGVjUmMsICJleGVjdXRlX05vQ29tbWl0Iik7DQorICAgICAgTmRiRXJy b3IgZXJyPSBodWdvT3BzLmdldFRyYW5zYWN0aW9uKCktPmdldE5kYkVycm9yKCk7 DQorICAgICAgQ0hFQ0syKGVyci5jb2RlID09IGV4ZWNSYywgImdldE5kYkVycm9y Iik7DQorICAgICAgaWYgKGV4ZWNSYyAmJiAoYW8gPT0gQU9fSWdub3JlRXJyb3Ip KQ0KKyAgICAgIHsNCisgICAgICAgIC8qIFRyYW5zYWN0aW9uIHNob3VsZCBzdGls bCBiZSBvcGVuLCBsZXQncyBjb21taXQgaXQgKi8NCisgICAgICAgIENIRUNLMiho dWdvT3BzLmV4ZWN1dGVfQ29tbWl0KHBOZGIsIGFvKSA9PSAwLCAiZXhlY3V0ZUNv bW1pdCIpOw0KKyAgICAgIH0NCisgICAgICBlbHNlIGlmIChhYm9ydCkNCisgICAg ICB7DQorICAgICAgICBDSEVDSzIoaHVnb09wcy5leGVjdXRlX1JvbGxiYWNrKHBO ZGIpID09IDAsICJleGVjdXRlUm9sbGJhY2siKTsNCisgICAgICB9DQorICAgIH0N CisgICAgQ0hFQ0syKGh1Z29PcHMuY2xvc2VUcmFuc2FjdGlvbihwTmRiKSA9PSAw LCAiY2xvc2VUcmFuc2FjdGlvbiIpOw0KKyAgICANCisgICAgcmV0dXJuIDE7DQor ICB9DQorDQorICBodWdvT3BzLmNsb3NlVHJhbnNhY3Rpb24ocE5kYik7DQorICBy ZXR1cm4gMDsNCit9DQorDQorDQorDQoraW50DQorcnVuTWl4ZWQyKE5EQlRfQ29u dGV4dCogY3R4LCBOREJUX1N0ZXAqIHN0ZXApew0KKyAgTmRiKiBwTmRiID0gR0VU TkRCKHN0ZXApOw0KKyAgSHVnb09wZXJhdGlvbnMgaHVnb09wcygqY3R4LT5nZXRU YWIoKSk7DQorDQorICBpbnQgbnVtUmVjb3Jkc0luVGFibGU9IGN0eC0+Z2V0TnVt UmVjb3JkcygpOw0KKyAgY29uc3QgaW50IG1heFRlc3RTaXplPSAxMDAwMDsNCisg IGludCB0ZXN0U2l6ZT0gTUlOKG51bVJlY29yZHNJblRhYmxlLCBtYXhUZXN0U2l6 ZSk7DQorDQorICAvKiBBdm9pZCBvdmVybG9hZGluZyBTZW5kIEJ1ZmZlcnMgKi8N CisgIFVpbnQzMiByb3dTaXplPSAgTmRiRGljdGlvbmFyeTo6Z2V0UmVjb3JkUm93 TGVuZ3RoKGN0eC0+Z2V0VGFiKCktPmdldERlZmF1bHRSZWNvcmQoKSk7DQorICBV aW50MzIgZGF0YVhmZXI9IDIgKiByb3dTaXplICogdGVzdFNpemU7DQorICBjb25z dCBVaW50MzIgTWF4RGF0YVhmZXI9IDUwMDAwMDsgLy8gMC41TQ0KKw0KKyAgaWYg KGRhdGFYZmVyID4gTWF4RGF0YVhmZXIpDQorICB7DQorICAgIHRlc3RTaXplPSBN SU4oKGludCkoTWF4RGF0YVhmZXIvcm93U2l6ZSksIHRlc3RTaXplKTsNCisgIH0N CisNCisgIGdfZXJyIDw8ICJ0ZXN0U2l6ZT0gIiA8PCB0ZXN0U2l6ZSA8PCBlbmRs Ow0KKyAgZ19lcnIgPDwgInJvd1NpemU9ICIgPDwgcm93U2l6ZSA8PCBlbmRsOw0K Kw0KKyAgaW50IHVwZGF0ZXNWYWx1ZT0gMTsNCisgIGNvbnN0IGludCBtYXhUaW1l b3V0UmV0cmllcz0gMzsgDQorDQorICBkbyB7DQorICAgIC8vIFRDMA0KKyAgICB7 DQorICAgICAgYm9vbCBvaz0gZmFsc2U7DQorICAgICAgaW50IHRpbWVvdXRSZXRy aWVzPSBtYXhUaW1lb3V0UmV0cmllczsNCisgICAgICB3aGlsZSAodGltZW91dFJl dHJpZXMtLSkNCisgICAgICB7DQorICAgICAgICBnX2VyciA8PCAiVEMwIDogaW5k ZXhSZWFkLCBwa3JlYWQsIENvbW1pdCIgPDwgZW5kbDsNCisgICAgICAgIENIRUNL MihodWdvT3BzLnN0YXJ0VHJhbnNhY3Rpb24ocE5kYikgPT0gMCwgInN0YXJ0VHJh bnNhY3Rpb24iKTsNCisgICAgICAgIENIRUNLMihodWdvT3BzLmluZGV4UmVhZFJl Y29yZHMocE5kYiwgcGtJZHhOYW1lLCAwLCBmYWxzZSwgdGVzdFNpemUpID09IDAs ICJpbmRleFJlYWRSZWNvcmRzIik7DQorICAgICAgICBDSEVDSzIoaHVnb09wcy5w a1JlYWRSZWNvcmQocE5kYiwgMCwgdGVzdFNpemUpID09IDAsICJwa1JlYWRSZWNv cmQiKTsNCisgICAgICAgIENIRUNLT0tPUlRJTUVPVVQoaHVnb09wcy5leGVjdXRl X0NvbW1pdChwTmRiKSwgImV4ZWN1dGVDb21taXQiKTsNCisgICAgICAgIENIRUNL MihodWdvT3BzLmNsb3NlVHJhbnNhY3Rpb24ocE5kYikgPT0gMCwgImNsb3NlVHJh bnNhY3Rpb24iKTsNCisgICAgICAgIA0KKyAgICAgICAgb2s9IHRydWU7DQorICAg ICAgICBicmVhazsNCisgICAgICB9DQorICAgICAgaWYgKCFvaykgeyBicmVhazsg fTsNCisgICAgfQ0KKyAgICANCisgICAgDQorICAgIC8vIFRDMQ0KKyAgICB7DQor ICAgICAgYm9vbCBvaz0gZmFsc2U7DQorICAgICAgaW50IHRpbWVvdXRSZXRyaWVz PSBtYXhUaW1lb3V0UmV0cmllczsNCisgICAgICB3aGlsZSAodGltZW91dFJldHJp ZXMtLSkNCisgICAgICB7DQorICAgICAgICBnX2VyciA8PCAiVEMxIDogcGtSZWFk LCBpbmRleFJlYWQsIENvbW1pdCIgPDwgZW5kbDsNCisgICAgICAgIENIRUNLMiho dWdvT3BzLnN0YXJ0VHJhbnNhY3Rpb24ocE5kYikgPT0gMCwgInN0YXJ0VHJhbnNh Y3Rpb24iKTsNCisgICAgICAgIENIRUNLMihodWdvT3BzLnBrUmVhZFJlY29yZChw TmRiLCAwLCB0ZXN0U2l6ZSkgPT0gMCwgInBrUmVhZFJlY29yZCIpOw0KKyAgICAg ICAgQ0hFQ0syKGh1Z29PcHMuaW5kZXhSZWFkUmVjb3JkcyhwTmRiLCBwa0lkeE5h bWUsIDAsIGZhbHNlLCB0ZXN0U2l6ZSkgPT0gMCwgImluZGV4UmVhZFJlY29yZHMi KTsNCisgICAgICAgIENIRUNLT0tPUlRJTUVPVVQoaHVnb09wcy5leGVjdXRlX0Nv bW1pdChwTmRiKSwgImV4ZWN1dGVDb21taXQiKTsNCisgICAgICAgIENIRUNLMiho dWdvT3BzLmNsb3NlVHJhbnNhY3Rpb24ocE5kYikgPT0gMCwgImNsb3NlVHJhbnNh Y3Rpb24iKTsNCisgICAgICAgIA0KKyAgICAgICAgb2s9IHRydWU7DQorICAgICAg ICBicmVhazsNCisgICAgICB9DQorICAgICAgaWYgKCFvaykgeyBicmVhazsgfTsN CisgICAgfQ0KKyAgICANCisgICAgLy8gVEMyDQorICAgIHsNCisgICAgICBib29s IG9rPSBmYWxzZTsNCisgICAgICBpbnQgdGltZW91dFJldHJpZXM9IG1heFRpbWVv dXRSZXRyaWVzOw0KKyAgICAgIHdoaWxlICh0aW1lb3V0UmV0cmllcy0tKQ0KKyAg ICAgIHsNCisgICAgICAgIGdfZXJyIDw8ICJUQzIgOiBwa1JlYWQsIGluZGV4UmVh ZCwgTm9Db21taXQsIENvbW1pdCIgPDwgZW5kbDsNCisgICAgICAgIENIRUNLMiho dWdvT3BzLnN0YXJ0VHJhbnNhY3Rpb24ocE5kYikgPT0gMCwgInN0YXJ0VHJhbnNh Y3Rpb24iKTsNCisgICAgICAgIENIRUNLMihodWdvT3BzLnBrUmVhZFJlY29yZChw TmRiLCAwLCB0ZXN0U2l6ZSkgPT0gMCwgInBrUmVhZFJlY29yZCIpOw0KKyAgICAg ICAgQ0hFQ0syKGh1Z29PcHMuaW5kZXhSZWFkUmVjb3JkcyhwTmRiLCBwa0lkeE5h bWUsIDAsIGZhbHNlLCB0ZXN0U2l6ZSkgPT0gMCwNCisgICAgICAgICAgICAgICAi aW5kZXhSZWFkUmVjb3JkcyIpOw0KKyAgICAgICAgQ0hFQ0tPS09SVElNRU9VVCho dWdvT3BzLmV4ZWN1dGVfTm9Db21taXQocE5kYiksICJleGVjdXRlTm9Db21taXQi KTsNCisgICAgICAgIENIRUNLMihodWdvT3BzLmV4ZWN1dGVfQ29tbWl0KHBOZGIp ID09IDAsICJleGVjdXRlQ29tbWl0Iik7DQorICAgICAgICBDSEVDSzIoaHVnb09w cy5jbG9zZVRyYW5zYWN0aW9uKHBOZGIpID09IDAsICJjbG9zZVRyYW5zYWN0aW9u Iik7DQorICAgICAgICBvaz0gdHJ1ZTsNCisgICAgICAgIGJyZWFrOw0KKyAgICAg IH0NCisgICAgICBpZiAoIW9rKSB7IGJyZWFrOyB9Ow0KKyAgICB9DQorICAgIA0K KyAgICAvLyBUQzMNCisgICAgew0KKyAgICAgIGJvb2wgb2s9IGZhbHNlOw0KKyAg ICAgIGludCB0aW1lb3V0UmV0cmllcz0gbWF4VGltZW91dFJldHJpZXM7DQorICAg ICAgd2hpbGUgKHRpbWVvdXRSZXRyaWVzLS0pDQorICAgICAgew0KKyAgICAgICAg Z19lcnIgPDwgIlRDMyA6IHBrUmVhZCwgcGtSZWFkLCBDb21taXQiIDw8IGVuZGw7 DQorICAgICAgICBDSEVDSzIoaHVnb09wcy5zdGFydFRyYW5zYWN0aW9uKHBOZGIp ID09IDAsICJzdGFydFRyYW5zYWN0aW9uICIpOw0KKyAgICAgICAgQ0hFQ0syKGh1 Z29PcHMucGtSZWFkUmVjb3JkKHBOZGIsIDAsIHRlc3RTaXplKSA9PSAwLCAicGtS ZWFkUmVjb3JkcyAiKTsNCisgICAgICAgIENIRUNLMihodWdvT3BzLnBrUmVhZFJl Y29yZChwTmRiLCAwLCB0ZXN0U2l6ZSkgPT0gMCwgInBrUmVhZFJlY29yZHMgIik7 DQorICAgICAgICBDSEVDS09LT1JUSU1FT1VUKGh1Z29PcHMuZXhlY3V0ZV9Db21t aXQocE5kYiksICJleGVjdXRlQ29tbWl0Iik7DQorICAgICAgICBDSEVDSzIoaHVn b09wcy5jbG9zZVRyYW5zYWN0aW9uKHBOZGIpID09IDAsICJjbG9zZVRyYW5zYWN0 aW9uICIpOw0KKyAgICAgICAgb2s9IHRydWU7DQorICAgICAgICBicmVhazsNCisg ICAgICB9DQorICAgICAgaWYgKCFvaykgeyBicmVhazsgfTsNCisgICAgfQ0KKyAg ICANCisgICAgLy8gVEM0DQorICAgIHsNCisgICAgICBib29sIG9rPSBmYWxzZTsN CisgICAgICBpbnQgdGltZW91dFJldHJpZXM9IG1heFRpbWVvdXRSZXRyaWVzOw0K KyAgICAgIHdoaWxlICh0aW1lb3V0UmV0cmllcy0tKQ0KKyAgICAgIHsNCisgICAg ICAgIGdfZXJyIDw8ICJUQzQgOiBpbmRleFJlYWQsIGluZGV4UmVhZCwgQ29tbWl0 IiA8PCBlbmRsOw0KKyAgICAgICAgQ0hFQ0syKGh1Z29PcHMuc3RhcnRUcmFuc2Fj dGlvbihwTmRiKSA9PSAwLCAic3RhcnRUcmFuc2FjdGlvbiAiKTsNCisgICAgICAg IENIRUNLMihodWdvT3BzLmluZGV4UmVhZFJlY29yZHMocE5kYiwgcGtJZHhOYW1l LCAwLCBmYWxzZSwgdGVzdFNpemUpID09IDAsICJpbmRleFJlYWRSZWNvcmRzIik7 DQorICAgICAgICBDSEVDSzIoaHVnb09wcy5pbmRleFJlYWRSZWNvcmRzKHBOZGIs IHBrSWR4TmFtZSwgMCwgZmFsc2UsIHRlc3RTaXplKSA9PSAwLCAiaW5kZXhSZWFk UmVjb3JkcyIpOw0KKyAgICAgICAgQ0hFQ0tPS09SVElNRU9VVChodWdvT3BzLmV4 ZWN1dGVfQ29tbWl0KHBOZGIpLCAiZXhlY3V0ZUNvbW1pdCIpOw0KKyAgICAgICAg Q0hFQ0syKGh1Z29PcHMuY2xvc2VUcmFuc2FjdGlvbihwTmRiKSA9PSAwLCAiY2xv c2VUcmFuc2FjdGlvbiAiKTsNCisgICAgICAgIG9rPSB0cnVlOw0KKyAgICAgICAg YnJlYWs7DQorICAgICAgfQ0KKyAgICAgIGlmICghb2spIHsgYnJlYWs7IH07DQor ICAgIH0NCisgICAgDQorICAgIC8vIFRDNQ0KKyAgICB7DQorICAgICAgYm9vbCBv az0gZmFsc2U7DQorICAgICAgaW50IHRpbWVvdXRSZXRyaWVzPSBtYXhUaW1lb3V0 UmV0cmllczsNCisgICAgICB3aGlsZSAodGltZW91dFJldHJpZXMtLSkNCisgICAg ICB7DQorICAgICAgICBnX2VyciA8PCAiVEM1IDogaW5kZXhSZWFkLCBwa1VwZGF0 ZSwgQ29tbWl0IiA8PCBlbmRsOw0KKyAgICAgICAgQ0hFQ0syKGh1Z29PcHMuc3Rh cnRUcmFuc2FjdGlvbihwTmRiKSA9PSAwLCAic3RhcnRUcmFuc2FjdGlvbiIpOw0K KyAgICAgICAgQ0hFQ0syKGh1Z29PcHMuaW5kZXhSZWFkUmVjb3JkcyhwTmRiLCBw a0lkeE5hbWUsIDAsIGZhbHNlLCB0ZXN0U2l6ZSkgPT0gMCwgImluZGV4UmVhZFJl Y29yZHMiKTsNCisgICAgICAgIENIRUNLMihodWdvT3BzLnBrVXBkYXRlUmVjb3Jk KHBOZGIsIDAsIHRlc3RTaXplLCB1cGRhdGVzVmFsdWUrKykgPT0gMCwgInBrVXBk YXRlUmVjb3JkIik7DQorICAgICAgICBDSEVDS09LT1JUSU1FT1VUKGh1Z29PcHMu ZXhlY3V0ZV9Db21taXQocE5kYiksICJleGVjdXRlQ29tbWl0Iik7DQorICAgICAg ICBDSEVDSzIoaHVnb09wcy5jbG9zZVRyYW5zYWN0aW9uKHBOZGIpID09IDAsICJj bG9zZVRyYW5zYWN0aW9uIik7DQorICAgICAgICBvaz0gdHJ1ZTsNCisgICAgICAg IGJyZWFrOw0KKyAgICAgIH0NCisgICAgICBpZiAoIW9rKSB7IGJyZWFrOyB9Ow0K KyAgICB9DQorICAgIA0KKyAgICAvLyBUQzYNCisgICAgew0KKyAgICAgIGJvb2wg b2s9IGZhbHNlOw0KKyAgICAgIGludCB0aW1lb3V0UmV0cmllcz0gbWF4VGltZW91 dFJldHJpZXM7DQorICAgICAgd2hpbGUgKHRpbWVvdXRSZXRyaWVzLS0pDQorICAg ICAgew0KKyAgICAgICAgZ19lcnIgPDwgIlRDNiA6IHBrVXBkYXRlLCBpbmRleFJl YWQsIENvbW1pdCIgPDwgZW5kbDsNCisgICAgICAgIENIRUNLMihodWdvT3BzLnN0 YXJ0VHJhbnNhY3Rpb24ocE5kYikgPT0gMCwgInN0YXJ0VHJhbnNhY3Rpb24iKTsN CisgICAgICAgIENIRUNLMihodWdvT3BzLnBrVXBkYXRlUmVjb3JkKHBOZGIsIDAs IHRlc3RTaXplLCB1cGRhdGVzVmFsdWUrKykgPT0gMCwgInBrVXBkYXRlUmVjb3Jk Iik7DQorICAgICAgICBDSEVDSzIoaHVnb09wcy5pbmRleFJlYWRSZWNvcmRzKHBO ZGIsIHBrSWR4TmFtZSwgMCwgZmFsc2UsIHRlc3RTaXplKSA9PSAwLCAiaW5kZXhS ZWFkUmVjb3JkcyIpOw0KKyAgICAgICAgQ0hFQ0tPS09SVElNRU9VVChodWdvT3Bz LmV4ZWN1dGVfQ29tbWl0KHBOZGIpLCAiZXhlY3V0ZUNvbW1pdCIpOw0KKyAgICAg ICAgQ0hFQ0syKGh1Z29PcHMuY2xvc2VUcmFuc2FjdGlvbihwTmRiKSA9PSAwLCAi Y2xvc2VUcmFuc2FjdGlvbiIpOw0KKyAgICAgICAgb2s9IHRydWU7DQorICAgICAg ICBicmVhazsNCisgICAgICB9DQorICAgICAgaWYgKCFvaykgeyBicmVhazsgfTsN CisgICAgfQ0KKyAgICANCisgICAgLy8gVEM3DQorICAgIHsNCisgICAgICBib29s IG9rPSBmYWxzZTsNCisgICAgICBpbnQgdGltZW91dFJldHJpZXM9IG1heFRpbWVv dXRSZXRyaWVzOw0KKyAgICAgIHdoaWxlICh0aW1lb3V0UmV0cmllcy0tKQ0KKyAg ICAgIHsNCisgICAgICAgIGdfZXJyIDw8ICJUQzcgOiBwa1JlYWQsIGluZGV4VXBk YXRlLCBDb21taXQiIDw8IGVuZGw7DQorICAgICAgICBDSEVDSzIoaHVnb09wcy5z dGFydFRyYW5zYWN0aW9uKHBOZGIpID09IDAsICJzdGFydFRyYW5zYWN0aW9uIik7 DQorICAgICAgICBDSEVDSzIoaHVnb09wcy5wa1JlYWRSZWNvcmQocE5kYiwgMCwg dGVzdFNpemUpID09IDAsICJwa1JlYWRSZWNvcmQiKTsNCisgICAgICAgIENIRUNL MihodWdvT3BzLmluZGV4VXBkYXRlUmVjb3JkKHBOZGIsIHBrSWR4TmFtZSwgMCwg dGVzdFNpemUsIHVwZGF0ZXNWYWx1ZSsrKSA9PSAwLA0KKyAgICAgICAgICAgICAg ICJpbmRleFJlYWRSZWNvcmRzIik7DQorICAgICAgICBDSEVDS09LT1JUSU1FT1VU KGh1Z29PcHMuZXhlY3V0ZV9Db21taXQocE5kYiksICJleGVjdXRlQ29tbWl0Iik7 DQorICAgICAgICBDSEVDSzIoaHVnb09wcy5jbG9zZVRyYW5zYWN0aW9uKHBOZGIp ID09IDAsICJjbG9zZVRyYW5zYWN0aW9uIik7DQorICAgICAgICBvaz0gdHJ1ZTsN CisgICAgICAgIGJyZWFrOw0KKyAgICAgIH0NCisgICAgICBpZiAoIW9rKSB7IGJy ZWFrOyB9Ow0KKyAgICB9DQorICAgIA0KKyAgICAvLyBUQzgNCisgICAgew0KKyAg ICAgIGJvb2wgb2s9IGZhbHNlOw0KKyAgICAgIGludCB0aW1lb3V0UmV0cmllcz0g bWF4VGltZW91dFJldHJpZXM7DQorICAgICAgd2hpbGUgKHRpbWVvdXRSZXRyaWVz LS0pDQorICAgICAgew0KKyAgICAgICAgZ19lcnIgPDwgIlRDOCA6IGluZGV4VXBk YXRlLCBwa1JlYWQsIENvbW1pdCIgPDwgZW5kbDsNCisgICAgICAgIENIRUNLMiho dWdvT3BzLnN0YXJ0VHJhbnNhY3Rpb24ocE5kYikgPT0gMCwgInN0YXJ0VHJhbnNh Y3Rpb24gIik7DQorICAgICAgICBDSEVDSzIoaHVnb09wcy5pbmRleFVwZGF0ZVJl Y29yZChwTmRiLCBwa0lkeE5hbWUsIDAsIHRlc3RTaXplLCB1cGRhdGVzVmFsdWUr KykgPT0gMCwgDQorICAgICAgICAgICAgICAgImluZGV4UmVhZFJlY29yZHMgIik7 DQorICAgICAgICBDSEVDSzIoaHVnb09wcy5wa1JlYWRSZWNvcmQocE5kYiwgMCwg dGVzdFNpemUpID09IDAsICJwa1JlYWRSZWNvcmRzICIpOw0KKyAgICAgICAgQ0hF Q0tPS09SVElNRU9VVChodWdvT3BzLmV4ZWN1dGVfQ29tbWl0KHBOZGIpLCAiZXhl Y3V0ZUNvbW1pdCIpOw0KKyAgICAgICAgQ0hFQ0syKGh1Z29PcHMuY2xvc2VUcmFu c2FjdGlvbihwTmRiKSA9PSAwLCAiY2xvc2VUcmFuc2FjdGlvbiAiKTsNCisgICAg ICAgIG9rPSB0cnVlOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgfQ0KKyAgICAg IGlmICghb2spIHsgYnJlYWs7IH07DQorICAgIH0NCisNCisgICAgZm9yIChpbnQg YW89MDsgYW8gPCAyOyBhbysrKQ0KKyAgICB7DQorICAgICAgQWJvcnRPcHRpb24g YWJvcnRPcHRpb249IGFvP0FPX0lnbm9yZUVycm9yOkFib3J0T25FcnJvcjsNCisg ICAgICANCisgICAgICBmb3IgKGludCBleFR5cGU9MDsgZXhUeXBlIDwgMzsgZXhU eXBlKyspDQorICAgICAgew0KKyAgICAgICAgYm9vbCBjb21taXQ9IChleFR5cGUg PT0gMSk7DQorICAgICAgICBib29sIGFib3J0PSAoZXhUeXBlID09IDIpOw0KKyAg ICAgICAgDQorICAgICAgICBjb25zdCBjaGFyKiBleFR5cGVTdHI9ICgoZXhUeXBl ID09IDApID8gIk5vQ29tbWl0IiA6IA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGV4VHlwZSA9PSAxKSA/ICJDb21taXQiIDogDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiQWJvcnQiKTsNCisgICAgICAgIA0KKyAg ICAgICAgZm9yIChpbnQgZmFpbFR5cGU9IDA7IGZhaWxUeXBlIDwgNDsgZmFpbFR5 cGUrKykNCisgICAgICAgIHsNCisgICAgICAgICAgZm9yIChpbnQgZmFpbFBvcz0g MDsgZmFpbFBvcyA8IDI7IGZhaWxQb3MrKykNCisgICAgICAgICAgew0KKyAgICAg ICAgICAgIGludCBmYWlsUmVjPSAoZmFpbFBvcyA9PSAwKT8gMCA6IHRlc3RTaXpl IC0xOw0KKyAgICAgICAgICAgIGludCBwa0ZhaWxSZWM9IC0xOw0KKyAgICAgICAg ICAgIGludCBpeEZhaWxSZWM9IC0xOw0KKyAgICAgICAgICAgIGlmIChmYWlsVHlw ZSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICBpZiAoZmFpbFR5cGUg JiAxKQ0KKyAgICAgICAgICAgICAgICBwa0ZhaWxSZWM9IGZhaWxSZWM7DQorICAg ICAgICAgICAgICBpZiAoZmFpbFR5cGUgJiAyKQ0KKyAgICAgICAgICAgICAgICBp eEZhaWxSZWM9IGZhaWxSZWM7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg IA0KKyAgICAgICAgICAgIGZvciAoaW50IGludkZhaWw9IDA7IA0KKyAgICAgICAg ICAgICAgICAgaW52RmFpbCA8ICgoZmFpbFR5cGU9PTApPzE6Mik7IA0KKyAgICAg ICAgICAgICAgICAgaW52RmFpbCsrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAg ICAgICAgIGJvb2wgaW52ZXJ0RmFpbD0gKGludkZhaWwpP3RydWU6ZmFsc2U7DQor ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmYWlsVHlwZVN0cj0gKChmYWlsVHlw ZT09MCk/ICJOb25lIiA6IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKGZhaWxUeXBlPT0xKT8gIlBrIjogDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGZhaWxUeXBlPT0yKT8iSXgi OiAiQm90aCIpKSk7DQorICAgICAgICAgICAgICBmb3IgKGludCB1cGRhdGVWaWE9 IDA7IHVwZGF0ZVZpYSA8IDM7IHVwZGF0ZVZpYSsrKQ0KKyAgICAgICAgICAgICAg ew0KKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB1cGRhdGVWaWFTdHI9ICgo dXBkYXRlVmlhID09IDApPyAiTm9uZSIgOiANCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHVwZGF0ZVZpYSA9PSAxKT8gIlBrIiA6 DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1 cGRhdGVWaWEgPT0gMik/ICJJeCIgOg0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiQm90aCIpOw0KKyAgICAgICAgICAgICAgICBm b3IgKGludCB1cGRhdGVPcmRlcj0gMDsgdXBkYXRlT3JkZXIgPCAyOyB1cGRhdGVP cmRlcisrKQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAg Ym9vbCB1cGRhdGVJeEZpcnN0PSAodXBkYXRlT3JkZXIgPT0gMCk7DQorICAgICAg ICAgICAgICAgICAgZ19lcnIgPDwgZW5kbA0KKyAgICAgICAgICAgICAgICAgICAg ICAgIDw8ICJBYm9ydE9wdGlvbiA6ICIgPDwgKGFvPyJJZ25vcmVFcnJvciI6IkFi b3J0T25FcnJvciIpIDw8IGVuZGwNCisgICAgICAgICAgICAgICAgICAgICAgICA8 PCAiRXhlY1R5cGUgOiAiIDw8IGV4VHlwZVN0ciA8PCBlbmRsDQorICAgICAgICAg ICAgICAgICAgICAgICAgPDwgIkZhaWx0eXBlIDogIiA8PCBmYWlsVHlwZVN0ciA8 PCBlbmRsDQorICAgICAgICAgICAgICAgICAgICAgICAgPDwgIkZhaWxwb3MgOiAi IDw8ICgoZmFpbFBvcyA9PSAwKT8gIkVhcmx5IiA6ICJMYXRlIikgPDwgZW5kbA0K KyAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJGYWlsdXJlIHNjZW5hcmlvcyA6 ICIgPDwgKGludkZhaWw/IkFsbCBidXQgb25lIjoib25lIikgPDwgZW5kbA0KKyAg ICAgICAgICAgICAgICAgICAgICAgIDw8ICJVcGRhdGVWaWEgOiAiIDw8IHVwZGF0 ZVZpYVN0ciA8PCBlbmRsDQorICAgICAgICAgICAgICAgICAgICAgICAgPDwgIk9y ZGVyIDogIiA8PCAodXBkYXRlSXhGaXJzdD8gIkluZGV4IEZpcnN0IiA6ICJQayBm aXJzdCIpIDw8IGVuZGw7DQorICAgICAgICAgICAgICAgICAgYm9vbCBvaz0gZmFs c2U7DQorICAgICAgICAgICAgICAgICAgZG8NCisgICAgICAgICAgICAgICAgICB7 DQorICAgICAgICAgICAgICAgICAgICBnX2VyciA8PCAiTWl4ZWQgcmVhZC91cGRh dGUgaW50ZXJsZWF2ZWQiIDw8IGVuZGw7DQorICAgICAgICAgICAgICAgICAgICBD SEVDSzIocnVuTWl4ZWRVcGRhdGVJbnRlcmxlYXZlZChwTmRiLCBodWdvT3BzLCBu dW1SZWNvcmRzSW5UYWJsZSwgdGVzdFNpemUsIA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0LCAgLy8g Q29tbWl0IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYWJvcnQsIC8vIEFib3J0IA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtGYWlsUmVj LCAgICAvLyBQa0ZhaWwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGl4RmFpbFJlYywgICAvLyBJeEZhaWwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludmVydEZhaWwsIC8vIEludmVydGZhaWwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0T3B0aW9u LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdXBkYXRlVmlhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlc1ZhbHVlKyssDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1cGRhdGVJeEZpcnN0KSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRD NCIpOw0KKyAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAg ICBvaz0gdHJ1ZTsNCisgICAgICAgICAgICAgICAgICB9IHdoaWxlIChmYWxzZSk7 DQorICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgaWYgKCFv aykNCisgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICBo dWdvT3BzLmNsb3NlVHJhbnNhY3Rpb24ocE5kYik7DQorICAgICAgICAgICAgICAg ICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgICAgICAgICAgICAgICAgfQ0K KyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICB9DQorICAgICAgICAg ICAgfQ0KKyAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgfQ0KKyAgICB9 DQorDQorICAgIHJldHVybiBOREJUX09LOw0KKyAgfSB3aGlsZSAoZmFsc2UpOw0K KyAgDQorICBodWdvT3BzLmNsb3NlVHJhbnNhY3Rpb24ocE5kYik7DQorICByZXR1 cm4gTkRCVF9GQUlMRUQ7DQorfQ0KKw0KKw0KIGludA0KIHJ1bkJ1aWxkRHVyaW5n KE5EQlRfQ29udGV4dCogY3R4LCBOREJUX1N0ZXAqIHN0ZXApew0KICAgLy8gVmVy aWZ5IHRoYXQgZGF0YSBpbiBpbmRleCBtYXRjaCANCkBAIC0xMTM4LDEzICsxNjAz LDMzIEBAIHJ1blVuaXF1ZU51bGxUcmFuc2FjdGlvbnMoTkRCVF9Db250ZXh0KiAN CiAgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KICAgfQ0KICAgDQotICBpZiAocE5k Yi0+Z2V0RGljdGlvbmFyeSgpLT5jcmVhdGVJbmRleChwSWR4KSAhPSAwKXsNCi0g ICAgbmRib3V0IDw8ICJGQUlMRUQhIiA8PCBlbmRsOw0KLSAgICBjb25zdCBOZGJF cnJvciBlcnIgPSBwTmRiLT5nZXREaWN0aW9uYXJ5KCktPmdldE5kYkVycm9yKCk7 DQotICAgIEVSUihlcnIpOw0KLSAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICBi b29sIG5vZGRsPSBjdHgtPmdldFByb3BlcnR5KCJOb0RETCIpOw0KKyAgaWYgKG5v ZGRsKQ0KKyAgew0KKyAgICBjb25zdCBOZGJEaWN0aW9uYXJ5OjpJbmRleCogaWR4 PSBwTmRiLT4NCisgICAgICBnZXREaWN0aW9uYXJ5KCktPmdldEluZGV4KHBJZHgu Z2V0TmFtZSgpLCBwVGFiLT5nZXROYW1lKCkpOw0KKyAgICANCisgICAgaWYgKCFp ZHgpDQorICAgIHsNCisgICAgICBuZGJvdXQgPDwgIkZhaWxlZCAtIEluZGV4IGRv ZXMgbm90IGV4aXN0IGFuZCBEREwgbm90IGFsbG93ZWQiIDw8IGVuZGw7DQorICAg ICAgRVJSKHBOZGItPmdldERpY3Rpb25hcnkoKS0+Z2V0TmRiRXJyb3IoKSk7DQor ICAgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAgICB9DQorICAgIGVsc2UNCisg ICAgew0KKyAgICAgIC8vIFRPRE8gOiBDaGVjayBpbmRleCBkZWZpbml0aW9uIGlz IG9rDQorICAgIH0NCiAgIH0NCi0gIA0KKyAgZWxzZQ0KKyAgew0KKyAgICBpZiAo cE5kYi0+Z2V0RGljdGlvbmFyeSgpLT5jcmVhdGVJbmRleChwSWR4KSAhPSAwKXsN CisgICAgICBuZGJvdXQgPDwgIkZBSUxFRCEiIDw8IGVuZGw7DQorICAgICAgY29u c3QgTmRiRXJyb3IgZXJyID0gcE5kYi0+Z2V0RGljdGlvbmFyeSgpLT5nZXROZGJF cnJvcigpOw0KKyAgICAgIEVSUihlcnIpOw0KKyAgICAgIHJldHVybiBOREJUX0ZB SUxFRDsNCisgICAgfQ0KKyAgfQ0KKw0KICAgaW50IHJlc3VsdCA9IE5EQlRfT0s7 DQogDQogICBIdWdvVHJhbnNhY3Rpb25zIGh1Z29UcmFucygqY3R4LT5nZXRUYWIo KSk7DQpAQCAtMTY5Myw2ICsyMTc4LDE2IEBAIFRFU1RDQVNFKCJNaXhlZFRyYW5z YWN0aW9uIiwgDQogICBGSU5BTElaRVIoY3JlYXRlUGtJbmRleF9Ecm9wKTsNCiAg IEZJTkFMSVpFUihydW5DbGVhclRhYmxlKTsNCiB9DQorVEVTVENBU0UoIk1peGVk VHJhbnNhY3Rpb24yIiwgDQorCSAiVGVzdCBtaXhpbmcgb2YgaW5kZXggYW5kIG5v cm1hbCBvcGVyYXRpb25zIHdpdGggYmF0Y2hpbmciKXsgDQorICBUQ19QUk9QRVJU WSgiTG9nZ2VkSW5kZXhlcyIsICh1bnNpZ25lZCkwKTsNCisgIElOSVRJQUxJWkVS KHJ1bkNsZWFyVGFibGUpOw0KKyAgSU5JVElBTElaRVIoY3JlYXRlUGtJbmRleCk7 DQorICBJTklUSUFMSVpFUihydW5Mb2FkVGFibGUpOw0KKyAgU1RFUChydW5NaXhl ZDIpOw0KKyAgRklOQUxJWkVSKGNyZWF0ZVBrSW5kZXhfRHJvcCk7DQorICBGSU5B TElaRVIocnVuQ2xlYXJUYWJsZSk7DQorfQ0KIFRFU1RDQVNFKCJTUjFfTyIsIA0K IAkgIlRlc3QgdGhhdCBpbmRleGVzIGFyZSBjb3JyZWN0bHkgbWFpbnRhaW5lZCBk dXJpbmcgU1IiKXsgDQogICBUQ19QUk9QRVJUWSgiT3JkZXJlZEluZGV4IiwgMSk7 DQoNCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi90ZXN0L3NyYy9OREJU X1Rlc3QuY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvdGVzdC9zcmMvTkRCVF9UZXN0 LmNwcAkyMDA5LTA1LTI3IDE1OjIxOjQ1ICswMDAwDQorKysgYi9zdG9yYWdlL25k Yi90ZXN0L3NyYy9OREJUX1Rlc3QuY3BwCTIwMDktMDctMDMgMTU6MDg6MTQgKzAw MDANCkBAIC03OTAsNiArNzkwLDcgQEAgTkRCVF9UZXN0U3VpdGU6Ok5EQlRfVGVz dFN1aXRlKGNvbnN0IGNoYQ0KICAgIHRzbmFtZSA9IE5VTEw7DQogICAgdGVtcG9y YXJ5VGFibGVzID0gZmFsc2U7DQogICAgcnVub25jZSA9IGZhbHNlOw0KKyAgIG1f bm9kZGwgPSBmYWxzZTsNCiB9DQogDQogDQpAQCAtODc2LDYgKzg3Nyw3IEBAIGlu dCBOREJUX1Rlc3RTdWl0ZTo6ZXhlY3V0ZUFsbChOZGJfY2x1c3QNCiAgICAgICBj dHgtPnNldE51bVJlY29yZHMocmVjb3Jkcyk7DQogICAgICAgY3R4LT5zZXROdW1M b29wcyhsb29wcyk7DQogICAgICAgY3R4LT5zZXRTdWl0ZSh0aGlzKTsNCisgICAg ICBjdHgtPnNldFByb3BlcnR5KCJOb0RETCIsIChVaW50MzIpIG1fbm9kZGwpOw0K IA0KICAgICAgIGludCByZXN1bHQgPSB0ZXN0c1tpXS0+ZXhlY3V0ZShjdHgpOw0K IA0KQEAgLTk1MSw2ICs5NTMsNyBAQCBOREJUX1Rlc3RTdWl0ZTo6ZXhlY3V0ZU9u ZUN0eChOZGJfY2x1c3RlDQogICAgICAgY3R4LT5zZXROdW1SZWNvcmRzKHJlY29y ZHMpOw0KICAgICAgIGN0eC0+c2V0TnVtTG9vcHMobG9vcHMpOw0KICAgICAgIGN0 eC0+c2V0U3VpdGUodGhpcyk7DQorICAgICAgY3R4LT5zZXRQcm9wZXJ0eSgiTm9E REwiLCAoVWludDMyKSBtX25vZGRsKTsNCiAgICAgDQogICAgICAgcmVzdWx0ID0g dGVzdHNbdF0tPmV4ZWN1dGUoY3R4KTsNCiAgICAgICBpZiAocmVzdWx0ICE9IE5E QlRfT0spDQpAQCAtMTAyNiw2ICsxMDI5LDcgQEAgdm9pZCBOREJUX1Rlc3RTdWl0 ZTo6ZXhlY3V0ZShOZGJfY2x1c3Rlcg0KICAgICBjdHgtPnNldE51bUxvb3BzKGxv b3BzKTsNCiAgICAgY3R4LT5zZXRTdWl0ZSh0aGlzKTsNCiAgICAgY3R4LT5zZXRU YWIocFRhYik7DQorICAgIGN0eC0+c2V0UHJvcGVydHkoIk5vRERMIiwgKFVpbnQz MikgbV9ub2RkbCk7DQogDQogICAgIHJlc3VsdCA9IHRlc3RzW3RdLT5leGVjdXRl KGN0eCk7DQogICAgIHRlc3RzW3RdLT5zYXZlVGVzdFJlc3VsdChwVGFiLT5nZXRO YW1lKCksIHJlc3VsdCk7DQpAQCAtMTEyNyw3ICsxMTMxLDYgQEAgTkRCVF9UZXN0 U3VpdGU6OmRyb3BUYWJsZXMoTmRiX2NsdXN0ZXJfYw0KICAgTmRiIG5kYigmY29u LCAiVEVTVF9EQiIpOw0KICAgbmRiLmluaXQoMSk7DQogDQotICBpbnQgcmVzPSBO REJUX09LOw0KICAgTmRiRGljdGlvbmFyeTo6RGljdGlvbmFyeSogcERpY3QgPSBu ZGIuZ2V0RGljdGlvbmFyeSgpOw0KICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpPG1f dGFibGVzX2luX3Rlc3Quc2l6ZSgpOyBpKyspDQogICB7DQpAQCAtMTE1NSwxMyAr MTE1OCw1MCBAQCBydW5Ecm9wVGFibGUoTkRCVF9Db250ZXh0KiBjdHgsIE5EQlRf U3RlDQogICAgIE5kYiBuZGIoJmN0eC0+bV9jbHVzdGVyX2Nvbm5lY3Rpb24sICJU RVNUX0RCIik7DQogICAgIG5kYi5pbml0KDEpOw0KICAgICANCi0gICAgaW50IHJl cz0gTkRCVF9PSzsNCiAgICAgTmRiRGljdGlvbmFyeTo6RGljdGlvbmFyeSogcERp Y3QgPSBuZGIuZ2V0RGljdGlvbmFyeSgpOw0KICAgICBwRGljdC0+ZHJvcFRhYmxl KHRhYl9uYW1lKTsNCiAgIH0NCiAgIHJldHVybiBOREJUX09LOw0KIH0NCiANCisN CitzdGF0aWMgaW50DQorcnVuQ2hlY2tUYWJsZUV4aXN0cyhOREJUX0NvbnRleHQq IGN0eCwgTkRCVF9TdGVwKiBzdGVwKQ0KK3sNCisgIE5kYiBuZGIoJmN0eC0+bV9j bHVzdGVyX2Nvbm5lY3Rpb24sICJURVNUX0RCIik7DQorICBuZGIuaW5pdCgxKTsN CisNCisgIE5kYkRpY3Rpb25hcnk6OkRpY3Rpb25hcnkqIHBEaWN0ID0gbmRiLmdl dERpY3Rpb25hcnkoKTsNCisgIGNvbnN0IE5kYkRpY3Rpb25hcnk6OlRhYmxlKiBw VGFiID0gY3R4LT5nZXRUYWIoKTsNCisgIGNvbnN0IGNoYXIgKnRhYl9uYW1lPSAg cFRhYi0+Z2V0TmFtZSgpOw0KKw0KKyAgY29uc3QgTmRiRGljdGlvbmFyeTo6VGFi bGUqIHBEaWN0VGFiID0gcERpY3QtPmdldFRhYmxlKHRhYl9uYW1lKTsNCisNCisg IGlmIChwRGljdFRhYiA9PSBOVUxMKQ0KKyAgew0KKyAgICBnX2VyciA8PCAicnVu Q2hlY2tUYWJsZUV4aXN0cyA6IEZhaWxlZCB0byBmaW5kIHRhYmxlICIgDQorICAg ICAgICAgIDw8IHRhYl9uYW1lIDw8IGVuZGw7DQorICAgIGdfZXJyIDw8ICJSZXF1 aXJlZCBzY2hlbWEgOiAiIDw8ICooKE5EQlRfVGFibGUqKXBUYWIpIDw8IGVuZGw7 DQorICAgIHJldHVybiBOREJUX0ZBSUxFRDsNCisgIH0NCisNCisgIC8qIFRvZG8g OiBiZXR0ZXIgY2hlY2sgdGhhdCB0YWJsZSBpbiBEQiBpcyBzYW1lIGFzDQorICAg KiB0YWJsZSB3ZSBleHBlY3QNCisgICAqLw0KKw0KKyAgLy8gVXBkYXRlIGN0eCB3 aXRoIGEgcG9pbnRlciB0byBkaWN0IHRhYmxlDQorICBjdHgtPnNldFRhYihwRGlj dFRhYik7DQorICBjdHgtPnNldFByb3BlcnR5KCIkdGFibGUiLCB0YWJfbmFtZSk7 DQorDQorICByZXR1cm4gTkRCVF9PSzsNCit9DQorDQorc3RhdGljIGludA0KK3J1 bkVtcHR5RHJvcFRhYmxlKE5EQlRfQ29udGV4dCogY3R4LCBOREJUX1N0ZXAqIHN0 ZXApDQorew0KKyAgcmV0dXJuIE5EQlRfT0s7DQorfQ0KKw0KIGludCANCiBOREJU X1Rlc3RTdWl0ZTo6cmVwb3J0KGNvbnN0IGNoYXIqIF90Y25hbWUpew0KICAgaW50 IHJlc3VsdDsNCkBAIC0xMjM5LDYgKzEyNzksNyBAQCBzdGF0aWMgaW50IG9wdF92 ZXJib3NlOw0KIHN0YXRpYyBpbnQgb3B0X3NlZWQgPSAwOw0KIHN0YXRpYyBpbnQg b3B0X25vbG9nZ2luZyA9IDA7DQogc3RhdGljIGludCBvcHRfdGVtcG9yYXJ5ID0g MDsNCitzdGF0aWMgaW50IG9wdF9ub2RkbCA9IDA7DQogDQogc3RhdGljIHN0cnVj dCBteV9vcHRpb24gbXlfbG9uZ19vcHRpb25zW10gPQ0KIHsNCkBAIC0xMjc2LDYg KzEzMTcsOSBAQCBzdGF0aWMgc3RydWN0IG15X29wdGlvbiBteV9sb25nX29wdGlv bnNbDQogICB7ICJub2xvZ2dpbmciLCAwLCAiQ3JlYXRlIHRhYmxlKHMpIHdvLyBs b2dnaW5nIiwNCiAgICAgKHVjaGFyICoqKSAmb3B0X25vbG9nZ2luZywgKHVjaGFy ICoqKSAmb3B0X25vbG9nZ2luZywgMCwNCiAgICAgR0VUX0JPT0wsIE5PX0FSRywg MCwgMCwgMCwgMCwgMCwgMCB9LA0KKyAgeyAibm9kZGwiLCAwLCAiRG9uJ3QgY3Jl YXRlL2Ryb3AgdGFibGVzIGFzIHBhcnQgb2YgcnVubmluZyB0ZXN0cyIsDQorICAg ICh1Y2hhcioqKSAmb3B0X25vZGRsLCAodWNoYXIqKikgJm9wdF9ub2RkbCwgMCwN CisgICAgR0VUX0JPT0wsIE5PX0FSRywgMCwgMCwgMCwgMCwgMCwgMCB9LA0KICAg eyAwLCAwLCAwLCAwLCAwLCAwLCBHRVRfTk9fQVJHLCBOT19BUkcsIDAsIDAsIDAs IDAsIDAsIDB9DQogfTsNCiANCkBAIC0xMzQ1LDYgKzEzODksNyBAQCBpbnQgTkRC VF9UZXN0U3VpdGU6OmV4ZWN1dGUoaW50IGFyZ2MsIGNvDQogICBpZiAob3B0X25v bG9nZ2luZykNCiAgICAgc2V0TG9nZ2luZyhmYWxzZSk7DQogICB0ZW1wb3JhcnlU YWJsZXMgPSBvcHRfdGVtcG9yYXJ5Ow0KKyAgbV9ub2RkbCA9IG9wdF9ub2RkbDsN CiANCiAgIGlmIChvcHRfc2VlZCA9PSAwKQ0KICAgew0KQEAgLTEzNzUsMTYgKzE0 MjAsMzkgQEAgaW50IE5EQlRfVGVzdFN1aXRlOjpleGVjdXRlKGludCBhcmdjLCBj bw0KICAgew0KICAgICBmb3IgKHVuc2lnbmVkIHQgPSAwOyB0IDwgdGVzdHMuc2l6 ZSgpOyB0KyspDQogICAgIHsNCisgICAgICBjb25zdCBjaGFyKiBjcmVhdGVGdW5j TmFtZT0gTlVMTDsNCisgICAgICBOREJUX1RFU1RGVU5DKiBjcmVhdGVGdW5jPSBO VUxMOw0KKyAgICAgIGNvbnN0IGNoYXIqIGRyb3BGdW5jTmFtZT0gTlVMTDsNCisg ICAgICBOREJUX1RFU1RGVU5DKiBkcm9wRnVuYz0gTlVMTDsNCisNCisgICAgICBp ZiAoIW1fbm9kZGwpDQorICAgICAgew0KKyAgICAgICAgY3JlYXRlRnVuY05hbWU9 IG1fY3JlYXRlQWxsID8gInJ1bkNyZWF0ZVRhYmxlIiA6ICJydW5DcmVhdGVUYWJs ZSI7DQorICAgICAgICBjcmVhdGVGdW5jPSAgIG1fY3JlYXRlQWxsID8gJnJ1bkNy ZWF0ZVRhYmxlcyA6ICZydW5DcmVhdGVUYWJsZTsNCisgICAgICAgIGRyb3BGdW5j TmFtZT0gbV9jcmVhdGVBbGwgPyAicnVuRHJvcFRhYmxlcyIgOiAicnVuRHJvcFRh YmxlIjsNCisgICAgICAgIGRyb3BGdW5jPSBtX2NyZWF0ZUFsbCA/ICZydW5Ecm9w VGFibGVzIDogJnJ1bkRyb3BUYWJsZTsNCisgICAgICB9DQorICAgICAgZWxzZQ0K KyAgICAgIHsNCisgICAgICAgIC8qIE5vIERETCBhbGxvd2VkLCBzbyB3ZSBzdWJz dGl0dXRlICdkbyBub3RoaW5nJyB2YXJpYW50cw0KKyAgICAgICAgICogb2YgdGhl IGNyZWF0ZSArIGRyb3AgdGFibGUgdGVzdCBwcm9jcw0KKyAgICAgICAgICovDQor ICAgICAgICBjcmVhdGVGdW5jTmFtZT0gInJ1bkNoZWNrVGFibGVFeGlzdHMiOw0K KyAgICAgICAgY3JlYXRlRnVuYz0gJnJ1bkNoZWNrVGFibGVFeGlzdHM7DQorICAg ICAgICBkcm9wRnVuY05hbWU9ICJydW5FbXB0eURyb3BUYWJsZSI7DQorICAgICAg ICBkcm9wRnVuYz0gJnJ1bkVtcHR5RHJvcFRhYmxlOw0KKyAgICAgIH0NCisNCiAg ICAgICBOREJUX1Rlc3RDYXNlSW1wbDEqIHB0PSAoTkRCVF9UZXN0Q2FzZUltcGwx Kil0ZXN0c1t0XTsNCiAgICAgICBOREJUX0luaXRpYWxpemVyKiBwdGkgPQ0KICAg ICAgICAgbmV3IE5EQlRfSW5pdGlhbGl6ZXIocHQsDQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtX2NyZWF0ZUFsbCA/ICJydW5DcmVhdGVUYWJsZXMiIDog InJ1bkNyZWF0ZVRhYmxlIiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1fY3JlYXRlQWxsID8gcnVuQ3JlYXRlVGFibGVzIDogcnVuQ3JlYXRlVGFibGUp Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRnVuY05hbWUs DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY3JlYXRlRnVuYyk7DQog ICAgICAgcHQtPmFkZEluaXRpYWxpemVyKHB0aSwgdHJ1ZSk7DQogICAgICAgTkRC VF9GaW5hbGl6ZXIqIHB0ZiA9DQogICAgICAgICBuZXcgTkRCVF9GaW5hbGl6ZXIo cHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVBbGwgPyAi cnVuRHJvcFRhYmxlcyIgOiAicnVuRHJvcFRhYmxlIiwNCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICBtX2NyZWF0ZUFsbCA/IHJ1bkRyb3BUYWJsZXMgOiBydW5E cm9wVGFibGUpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BGdW5j TmFtZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAqZHJvcEZ1bmMpOw0K ICAgICAgIHB0LT5hZGRGaW5hbGl6ZXIocHRmKTsNCiAgICAgfQ0KICAgfQ0KDQo9 PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvdGVzdC90b29scy9jcmVhdGVf aW5kZXguY3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvdGVzdC90b29scy9jcmVhdGVf aW5kZXguY3BwCTIwMDktMDUtMjYgMTg6NTM6MzQgKzAwMDANCisrKyBiL3N0b3Jh Z2UvbmRiL3Rlc3QvdG9vbHMvY3JlYXRlX2luZGV4LmNwcAkyMDA5LTA3LTAzIDE0 OjE1OjA5ICswMDAwDQpAQCAtMzMsMTIgKzMzLDE2IEBAIG1haW4oaW50IGFyZ2Ms IGNvbnN0IGNoYXIqKiBhcmd2KXsNCiAgIGNvbnN0IGNoYXIqIF9kYm5hbWUgPSAi VEVTVF9EQiI7DQogICBpbnQgX2hlbHAgPSAwOw0KICAgaW50IF9vcmRlcmVkID0g MCwgX3BrID0gMTsNCisgIGNoYXIqIF9pbmFtZT0gTlVMTDsNCisgIGNoYXIqIF90 bmFtZT0gTlVMTDsNCiANCiAgIHN0cnVjdCBnZXRhcmdzIGFyZ3NbXSA9IHsNCiAg ICAgeyAiZGF0YWJhc2UiLCAnZCcsIGFyZ19zdHJpbmcsICZfZGJuYW1lLCAiZGJu YW1lIiwgDQogICAgICAgIk5hbWUgb2YgZGF0YWJhc2UgdGFibGUgaXMgaW4ifSwN CiAgICAgeyAib3JkZXJlZCIsICdvJywgYXJnX2ZsYWcsICZfb3JkZXJlZCwgIkNy ZWF0ZSBvcmRlcmVkIGluZGV4IiwgIiIgfSwNCiAgICAgeyAicGsiLCAncCcsIGFy Z19mbGFnLCAmX3BrLCAiQ3JlYXRlIGluZGV4IG9uIHByaW1hcnkga2V5IiwgIiIg fSwNCisgICAgeyAiaWR4bmFtZSIsICdpJywgYXJnX3N0cmluZywgJl9pbmFtZSwg ImlkeG5hbWUiLCAiT3ZlcnJpZGUgZGVmYXVsdCBuYW1lIGZvciBpbmRleCIgfSwN CisgICAgeyAidGFibmFtZSIsICd0JywgYXJnX3N0cmluZywgJl90bmFtZSwgInRh Ym5hbWUiLCAiU3BlY2lmeSBzaW5nbGUgdGFibmFtZSBhbmQgbGlzdCBvZiBjb2wg bmFtZXMgYXMgYXJncyIgfSwNCiAgICAgeyAidXNhZ2UiLCAnPycsIGFyZ19mbGFn LCAmX2hlbHAsICJQcmludCBoZWxwIiwgIiIgfQ0KICAgfTsNCiANCkBAIC03Mywx NiArNzcsMTUgQEAgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3Ypew0K ICAgTmRiRGljdGlvbmFyeTo6RGljdGlvbmFyeSAqIGRpY3QgPSBNeU5kYi5nZXRE aWN0aW9uYXJ5KCk7DQogICANCiAgIGZvcihpbnQgaSA9IG9wdGluZDsgaTxhcmdj OyBpKyspew0KLSAgICBjb25zdCBOZGJEaWN0aW9uYXJ5OjpUYWJsZSAqIHRhYiA9 IGRpY3QtPmdldFRhYmxlKGFyZ3ZbaV0pOw0KKyAgICBjb25zdCBjaGFyKiB0YWJO YW1lPSAoX3RuYW1lKT8gX3RuYW1lIDogYXJndltpXTsNCisgICAgY29uc3QgTmRi RGljdGlvbmFyeTo6VGFibGUgKiB0YWIgPSBkaWN0LT5nZXRUYWJsZSh0YWJOYW1l KTsNCiAgICAgaWYodGFiID09IDApew0KLSAgICAgIGdfZXJyIDw8ICJVbmtub3du IHRhYmxlOiAiIDw8IGFyZ3ZbaV0gPDwgZW5kbDsNCisgICAgICBnX2VyciA8PCAi VW5rbm93biB0YWJsZTogIiA8PCB0YWJOYW1lIDw8IGVuZGw7DQorICAgICAgaWYg KF90bmFtZSkNCisgICAgICAgIHJldHVybiBOREJUX1Byb2dyYW1FeGl0KE5EQlRf RkFJTEVEKTsNCiAgICAgICBjb250aW51ZTsNCiAgICAgfQ0KICAgICANCi0gICAg aWYodGFiLT5nZXROb09mQ29sdW1ucygpID4gMTYpew0KLSAgICAgIGdfZXJyIDw8 ICJUYWJsZSAiIDw8ICBhcmd2W2ldIDw8ICIgaGFzIG1vcmUgdGhhbiAxNiBjb2x1 bW5zIiA8PCBlbmRsOw0KLSAgICB9DQotICAgIA0KICAgICBOZGJEaWN0aW9uYXJ5 OjpJbmRleCBpbmQ7DQogICAgIGlmKF9vcmRlcmVkKXsNCiAgICAgICBpbmQuc2V0 VHlwZShOZGJEaWN0aW9uYXJ5OjpJbmRleDo6T3JkZXJlZEluZGV4KTsNCkBAIC05 MSwyMCArOTQsNTkgQEAgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3Yp ew0KICAgICAgIGluZC5zZXRUeXBlKE5kYkRpY3Rpb25hcnk6OkluZGV4OjpVbmlx dWVIYXNoSW5kZXgpOw0KICAgICB9DQogICAgIGNoYXIgYnVmWzUxMl07DQotICAg IHNwcmludGYoYnVmLCAiSU5EXyVzXyVzXyVjIiwgDQotCSAgICBhcmd2W2ldLCAo X3BrID8gIlBLIiA6ICJGVUxMIiksIChfb3JkZXJlZCA/ICdPJyA6ICdVJykpOw0K LSAgICBpbmQuc2V0TmFtZShidWYpOw0KLSAgICBpbmQuc2V0VGFibGUoYXJndltp XSk7DQotICAgIGZvcihpbnQgYyA9IDA7IGM8dGFiLT5nZXROb09mQ29sdW1ucygp OyBjKyspew0KLSAgICAgIGlmKCFfcGsgfHwgdGFiLT5nZXRDb2x1bW4oYyktPmdl dFByaW1hcnlLZXkoKSkNCi0JaW5kLmFkZEluZGV4Q29sdW1uKHRhYi0+Z2V0Q29s dW1uKGMpLT5nZXROYW1lKCkpOw0KKyAgICBpZiAoIV9pbmFtZSkNCisgICAgew0K KyAgICAgIHNwcmludGYoYnVmLCAiSU5EXyVzXyVzXyVjIiwgDQorICAgICAgICAg ICAgICBhcmd2W2ldLCAoX3BrID8gIlBLIiA6ICJGVUxMIiksIChfb3JkZXJlZCA/ ICdPJyA6ICdVJykpOw0KKyAgICAgIGluZC5zZXROYW1lKGJ1Zik7DQorICAgIH0N CisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgaW5kLnNldE5hbWUoX2luYW1lKTsN CisgICAgfQ0KKw0KKyAgICBpbmQuc2V0VGFibGUodGFiTmFtZSk7DQorDQorICAg IGlmICghX3RuYW1lKQ0KKyAgICB7DQorICAgICAgbmRib3V0IDw8ICJjcmVhdGlu ZyBpbmRleCAiIDw8IGluZC5nZXROYW1lKCkgPDwgIiBvbiB0YWJsZSAiIDw8IHRh Yk5hbWUNCisgICAgICAgICAgICAgPDwgIigiOw0KKyAgICAgIGZvcihpbnQgYyA9 IDA7IGM8dGFiLT5nZXROb09mQ29sdW1ucygpOyBjKyspew0KKyAgICAgICAgaWYo IV9wayB8fCB0YWItPmdldENvbHVtbihjKS0+Z2V0UHJpbWFyeUtleSgpKQ0KKyAg ICAgICAgew0KKyAgICAgICAgICBuZGJvdXQgPDwgdGFiLT5nZXRDb2x1bW4oYykt PmdldE5hbWUoKSA8PCAiLCAiOw0KKyAgICAgICAgICBpbmQuYWRkSW5kZXhDb2x1 bW4odGFiLT5nZXRDb2x1bW4oYyktPmdldE5hbWUoKSk7DQorICAgICAgICB9DQor ICAgICAgfQ0KKyAgICAgIG5kYm91dCA8PCAiKSIgPDwgZW5kbDsNCisgICAgfQ0K KyAgICBlbHNlDQorICAgIHsNCisgICAgICAvKiBUcmVhdCBhcmdzIGFzIGNvbHVt biBuYW1lcyAqLw0KKyAgICAgIG5kYm91dCA8PCAiY3JlYXRpbmcgaW5kZXggIiA8 PCBpbmQuZ2V0TmFtZSgpIDw8ICIgb24gdGFibGUgIiA8PCB0YWJOYW1lDQorICAg ICAgICAgICAgIDw8ICIoIjsNCisgICAgICBmb3IoaW50IGFyZ051bT1pOyBhcmdO dW0gPCBhcmdjOyBhcmdOdW0rKykNCisgICAgICB7DQorICAgICAgICBjb25zdCBj aGFyKiBjb2xOYW1lPSBhcmd2W2FyZ051bV07DQorICAgICAgICBpZiAodGFiLT5n ZXRDb2x1bW4oY29sTmFtZSkgPT0gTlVMTCkNCisgICAgICAgIHsNCisgICAgICAg ICAgZ19lcnIgPDwgIkNvbHVtbiAiIDw8IGNvbE5hbWUgPDwgIiBkb2VzIG5vdCBl eGlzdCBpbiB0YWJsZSAiIDw8IHRhYk5hbWUNCisgICAgICAgICAgICAgICAgPDwg ZW5kbDsNCisgICAgICAgICAgcmV0dXJuIE5EQlRfUHJvZ3JhbUV4aXQoTkRCVF9G QUlMRUQpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgbmRib3V0IDw8IGNvbE5hbWUg PDwgIiwgIjsNCisgICAgICAgIGluZC5hZGRJbmRleENvbHVtbihjb2xOYW1lKTsN CisgICAgICB9DQorICAgICAgbmRib3V0IDw8ICIpIiA8PCBlbmRsOw0KICAgICB9 DQotICAgIG5kYm91dCA8PCAiY3JlYXRpbmcgaW5kZXggIiA8PCBidWYgPDwgIiBv biB0YWJsZSAiIDw8IGFyZ3ZbaV0gPDwgIi4uLiI7DQogICAgIGNvbnN0IGludCBy ZXMgPSBkaWN0LT5jcmVhdGVJbmRleChpbmQpOw0KICAgICBpZihyZXMgIT0gMCkN CiAgICAgICBuZGJvdXQgPDwgZW5kbCA8PCBkaWN0LT5nZXROZGJFcnJvcigpIDw8 IGVuZGw7DQogICAgIGVsc2UNCiAgICAgICBuZGJvdXQgPDwgIk9LIiA8PCBlbmRs Ow0KKw0KKyAgICBpZiAoX3RuYW1lKSAvLyBKdXN0IGNyZWF0ZSBhIHNpbmdsZSBp bmRleA0KKyAgICAgIHJldHVybiBOREJUX1Byb2dyYW1FeGl0KE5EQlRfT0spOw0K ICAgfSAgDQogICANCiAgIHJldHVybiBOREJUX1Byb2dyYW1FeGl0KE5EQlRfT0sp Ow0KDQo=