ZGlmZiAtLWdpdCBhL2NvbnN0YW50cy9hbm5vdGF0aW9uX2NvbW1vbi5oIGIvY29uc3RhbnRzL2Fubm90YXRpb25fY29tbW9uLmgKaW5kZXggNDcxZDI0NC4uNmY5NmU2MiAxMDA2NDQKLS0tIGEvY29uc3RhbnRzL2Fubm90YXRpb25fY29tbW9uLmgKKysrIGIvY29uc3RhbnRzL2Fubm90YXRpb25fY29tbW9uLmgKQEAgLTI2LDYgKzI2LDkgQEAKIGNvbnN0ZXhwciBjaGFyIGtTdHJ1Y3RQYXJlbnRbXSA9ICJTdHJ1Y3RQYXJlbnQiOwogY29uc3RleHByIGNoYXIga09DW10gPSAiT0MiOwogCisvLyBFbnRyaWVzIGZvciBwb2x5Z29uIGFuZCBwb2x5bGluZSBhbm5vdGF0aW9ucy4KK2NvbnN0ZXhwciBjaGFyIGtWZXJ0aWNlc1tdID0gIlZlcnRpY2VzIjsKKwogfSAgLy8gbmFtZXNwYWNlIGFubm90YXRpb24KIH0gIC8vIG5hbWVzcGFjZSBwZGZpdW0KIApkaWZmIC0tZ2l0IGEvZnBkZnNkay9mcGRmX2Fubm90LmNwcCBiL2ZwZGZzZGsvZnBkZl9hbm5vdC5jcHAKaW5kZXggMjhkYmUxNC4uMTNjNzNmNiAxMDA2NDQKLS0tIGEvZnBkZnNkay9mcGRmX2Fubm90LmNwcAorKysgYi9mcGRmc2RrL2ZwZGZfYW5ub3QuY3BwCkBAIC04MDksNiArODA5LDM0IEBACiAgIHJldHVybiB0cnVlOwogfQogCitGUERGX0VYUE9SVCB1bnNpZ25lZCBsb25nIEZQREZfQ0FMTENPTlYKK0ZQREZBbm5vdF9HZXRWZXJ0aWNlcyhGUERGX0FOTk9UQVRJT04gYW5ub3QsCisgICAgICAgICAgICAgICAgICAgICAgRlNfUE9JTlRGKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgpIHsKKyAgRlBERl9BTk5PVEFUSU9OX1NVQlRZUEUgc3VidHlwZSA9IEZQREZBbm5vdF9HZXRTdWJ0eXBlKGFubm90KTsKKyAgaWYgKHN1YnR5cGUgIT0gRlBERl9BTk5PVF9QT0xZR09OICYmIHN1YnR5cGUgIT0gRlBERl9BTk5PVF9QT0xZTElORSkKKyAgICByZXR1cm4gMDsKKworICBDUERGX0RpY3Rpb25hcnkqIGFubm90X2RpY3QgPSBHZXRBbm5vdERpY3RGcm9tRlBERkFubm90YXRpb24oYW5ub3QpOworICBpZiAoIWFubm90X2RpY3QpCisgICAgcmV0dXJuIDA7CisKKyAgQ1BERl9BcnJheSogdmVydGljZXMgPSBhbm5vdF9kaWN0LT5HZXRBcnJheUZvcihwZGZpdW06OmFubm90YXRpb246OmtWZXJ0aWNlcyk7CisgIGlmICghdmVydGljZXMpCisgICAgcmV0dXJuIDA7CisKKyAgLy8gVHJ1bmNhdGUgdG8gYW4gZXZlbiBudW1iZXIuCisgIHVuc2lnbmVkIGxvbmcgcG9pbnRzX2xlbiA9IHZlcnRpY2VzLT5zaXplKCkgLyAyOworICBpZiAoYnVmZmVyICYmIGxlbmd0aCA+PSBwb2ludHNfbGVuKSB7CisgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgcG9pbnRzX2xlbjsgKytpKSB7CisgICAgICBidWZmZXJbaV0ueCA9IHZlcnRpY2VzLT5HZXROdW1iZXJBdChpICogMik7CisgICAgICBidWZmZXJbaV0ueSA9IHZlcnRpY2VzLT5HZXROdW1iZXJBdChpICogMiArIDEpOworICAgIH0KKyAgfQorCisgIHJldHVybiBwb2ludHNfbGVuOworfQorCiBGUERGX0VYUE9SVCBGUERGX0JPT0wgRlBERl9DQUxMQ09OViBGUERGQW5ub3RfSGFzS2V5KEZQREZfQU5OT1RBVElPTiBhbm5vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlBERl9CWVRFU1RSSU5HIGtleSkgewogICBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QgPSBHZXRBbm5vdERpY3RGcm9tRlBERkFubm90YXRpb24oYW5ub3QpOwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9mcGRmX2Fubm90X2VtYmVkZGVydGVzdC5jcHAgYi9mcGRmc2RrL2ZwZGZfYW5ub3RfZW1iZWRkZXJ0ZXN0LmNwcAppbmRleCA4OWUzOGU3Li4yYjY2ZTMyIDEwMDY0NAotLS0gYS9mcGRmc2RrL2ZwZGZfYW5ub3RfZW1iZWRkZXJ0ZXN0LmNwcAorKysgYi9mcGRmc2RrL2ZwZGZfYW5ub3RfZW1iZWRkZXJ0ZXN0LmNwcApAQCAtMzIyMSwzICszMjIxLDcwIEBACiAKICAgVW5sb2FkUGFnZShwYWdlKTsKIH0KKworVEVTVF9GKEZQREZBbm5vdEVtYmVkZGVyVGVzdCwgUG9seWdvbkFubm90YXRpb24pIHsKKyAgQVNTRVJUX1RSVUUoT3BlbkRvY3VtZW50KCJwb2x5Z29uX2Fubm90LnBkZiIpKTsKKyAgRlBERl9QQUdFIHBhZ2UgPSBMb2FkUGFnZSgwKTsKKyAgQVNTRVJUX1RSVUUocGFnZSk7CisgIEVYUEVDVF9FUSgyLCBGUERGUGFnZV9HZXRBbm5vdENvdW50KHBhZ2UpKTsKKworICB7CisgICAgU2NvcGVkRlBERkFubm90YXRpb24gYW5ub3QoRlBERlBhZ2VfR2V0QW5ub3QocGFnZSwgMCkpOworICAgIEFTU0VSVF9UUlVFKGFubm90KTsKKworICAgIC8vIEZQREZTaWduYXR1cmVPYmpfR2V0VGltZSgpIHBvc2l0aXZlIHRlc3RpbmcuCisgICAgdW5zaWduZWQgbG9uZyBzaXplID0gRlBERkFubm90X0dldFZlcnRpY2VzKGFubm90LmdldCgpLCBudWxscHRyLCAwKTsKKyAgICBjb25zdCBzaXplX3Qga0V4cGVjdGVkU2l6ZSA9IDM7CisgICAgQVNTRVJUX0VRKGtFeHBlY3RlZFNpemUsIHNpemUpOworICAgIHN0ZDo6dmVjdG9yPEZTX1BPSU5URj4gdmVydGljZXNfYnVmZmVyKHNpemUpOworICAgIEVYUEVDVF9FUShzaXplLAorICAgICAgICAgICAgICBGUERGQW5ub3RfR2V0VmVydGljZXMoYW5ub3QuZ2V0KCksIHZlcnRpY2VzX2J1ZmZlci5kYXRhKCksIHNpemUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMTU5LjBmLCB2ZXJ0aWNlc19idWZmZXJbMF0ueCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI5Ni4wZiwgdmVydGljZXNfYnVmZmVyWzBdLnkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzNTAuMGYsIHZlcnRpY2VzX2J1ZmZlclsxXS54KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDExLjBmLCB2ZXJ0aWNlc19idWZmZXJbMV0ueSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQ3Mi4wZiwgdmVydGljZXNfYnVmZmVyWzJdLngpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyNDMuNDJmLCB2ZXJ0aWNlc19idWZmZXJbMl0ueSk7CisKKyAgICAvLyBGUERGQW5ub3RfR2V0VmVydGljZXMoKSBuZWdhdGl2ZSB0ZXN0aW5nLgorICAgIEVYUEVDVF9FUSgwVSwgRlBERkFubm90X0dldFZlcnRpY2VzKG51bGxwdHIsIG51bGxwdHIsIDApKTsKKworICAgIC8vIHZlcnRpY2VzX2J1ZmZlciBpcyBub3Qgb3ZlcndyaXR0ZW4gaWYgaXQgaXMgdG9vIHNtYWxsLgorICAgIHZlcnRpY2VzX2J1ZmZlci5yZXNpemUoMSk7CisgICAgdmVydGljZXNfYnVmZmVyWzBdLnggPSA0MjsKKyAgICB2ZXJ0aWNlc19idWZmZXJbMF0ueSA9IDQzOworICAgIHNpemUgPSBGUERGQW5ub3RfR2V0VmVydGljZXMoYW5ub3QuZ2V0KCksIHZlcnRpY2VzX2J1ZmZlci5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc19idWZmZXIuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoa0V4cGVjdGVkU2l6ZSwgc2l6ZSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQyLCB2ZXJ0aWNlc19idWZmZXJbMF0ueCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQzLCB2ZXJ0aWNlc19idWZmZXJbMF0ueSk7CisgIH0KKworICB7CisgICAgU2NvcGVkRlBERkFubm90YXRpb24gYW5ub3QoRlBERlBhZ2VfR2V0QW5ub3QocGFnZSwgMSkpOworICAgIEFTU0VSVF9UUlVFKGFubm90KTsKKworICAgIC8vIFRoaXMgaGFzIGFuIG9kZCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHZlcnRpY2VzIGFycmF5LCBpZ25vcmUgdGhlIGxhc3QKKyAgICAvLyBlbGVtZW50LgorICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSA9IEZQREZBbm5vdF9HZXRWZXJ0aWNlcyhhbm5vdC5nZXQoKSwgbnVsbHB0ciwgMCk7CisgICAgY29uc3Qgc2l6ZV90IGtFeHBlY3RlZFNpemUgPSAzOworICAgIEFTU0VSVF9FUShrRXhwZWN0ZWRTaXplLCBzaXplKTsKKyAgICBzdGQ6OnZlY3RvcjxGU19QT0lOVEY+IHZlcnRpY2VzX2J1ZmZlcihzaXplKTsKKyAgICBFWFBFQ1RfRVEoc2l6ZSwKKyAgICAgICAgICAgICAgRlBERkFubm90X0dldFZlcnRpY2VzKGFubm90LmdldCgpLCB2ZXJ0aWNlc19idWZmZXIuZGF0YSgpLCBzaXplKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDI1OS4wZiwgdmVydGljZXNfYnVmZmVyWzBdLngpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzOTYuMGYsIHZlcnRpY2VzX2J1ZmZlclswXS55KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNDUwLjBmLCB2ZXJ0aWNlc19idWZmZXJbMV0ueCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDUxMS4wZiwgdmVydGljZXNfYnVmZmVyWzFdLnkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg1NzIuMGYsIHZlcnRpY2VzX2J1ZmZlclsyXS54KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMzQzLjBmLCB2ZXJ0aWNlc19idWZmZXJbMl0ueSk7CisgIH0KKworICB7CisgICAgLy8gV3JvbmcgYW5ub3RhdGlvbiB0eXBlLgorICAgIFNjb3BlZEZQREZBbm5vdGF0aW9uIGlua19hbm5vdChGUERGUGFnZV9DcmVhdGVBbm5vdChwYWdlLCBGUERGX0FOTk9UX0lOSykpOworICAgIEVYUEVDVF9FUSgwVSwgRlBERkFubm90X0dldFZlcnRpY2VzKGlua19hbm5vdC5nZXQoKSwgbnVsbHB0ciwgMCkpOworICB9CisKKyAgVW5sb2FkUGFnZShwYWdlKTsKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvZnBkZl92aWV3X2NfYXBpX3Rlc3QuYyBiL2ZwZGZzZGsvZnBkZl92aWV3X2NfYXBpX3Rlc3QuYwppbmRleCAxMTQyNzI1Li5mMzE1NWQ2IDEwMDY0NAotLS0gYS9mcGRmc2RrL2ZwZGZfdmlld19jX2FwaV90ZXN0LmMKKysrIGIvZnBkZnNkay9mcGRmX3ZpZXdfY19hcGlfdGVzdC5jCkBAIC03MCw2ICs3MCw3IEBACiAgICAgQ0hLKEZQREZBbm5vdF9HZXRTdHJpbmdWYWx1ZSk7CiAgICAgQ0hLKEZQREZBbm5vdF9HZXRTdWJ0eXBlKTsKICAgICBDSEsoRlBERkFubm90X0dldFZhbHVlVHlwZSk7CisgICAgQ0hLKEZQREZBbm5vdF9HZXRWZXJ0aWNlcyk7CiAgICAgQ0hLKEZQREZBbm5vdF9IYXNBdHRhY2htZW50UG9pbnRzKTsKICAgICBDSEsoRlBERkFubm90X0hhc0tleSk7CiAgICAgQ0hLKEZQREZBbm5vdF9Jc0NoZWNrZWQpOwpkaWZmIC0tZ2l0IGEvcHVibGljL2ZwZGZfYW5ub3QuaCBiL3B1YmxpYy9mcGRmX2Fubm90LmgKaW5kZXggOTMwNjQ1Ni4uNzE1OTYwMiAxMDA2NDQKLS0tIGEvcHVibGljL2ZwZGZfYW5ub3QuaAorKysgYi9wdWJsaWMvZnBkZl9hbm5vdC5oCkBAIC0zOTYsNiArMzk2LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU19SRUNURiogcmVjdCk7CiAKIC8vIEV4cGVyaW1lbnRhbCBBUEkuCisvLyBHZXQgdGhlIHZlcnRpY2VzIG9mIGEgcG9seWdvbiBvciBwb2x5bGluZSBhbm5vdGF0aW9uLiB8YnVmZmVyfCBpcyBhbiBhcnJheSBvZgorLy8gcG9pbnRzIG9mIHRoZSBhbm5vdGF0aW9uLiBJZiB8bGVuZ3RofCBpcyBsZXNzIHRoYW4gdGhlIHJldHVybmVkIGxlbmd0aCwgb3IKKy8vIHxhbm5vdHwgb3IgfGJ1ZmZlcnwgaXMgTlVMTCwgfGJ1ZmZlcnwgd2lsbCBub3QgYmUgbW9kaWZpZWQuCisvLworLy8gICBhbm5vdCAgLSBoYW5kbGUgdG8gYW4gYW5ub3RhdGlvbiwgYXMgcmV0dXJuZWQgYnkgZS5nLiBGUERGUGFnZV9HZXRBbm5vdCgpCisvLyAgIGJ1ZmZlciAtIGJ1ZmZlciBmb3IgaG9sZGluZyB0aGUgcG9pbnRzLgorLy8gICBsZW5ndGggLSBsZW5ndGggb2YgdGhlIGJ1ZmZlciBpbiBwb2ludHMuCisvLworLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBvaW50cyBpZiB0aGUgYW5ub3RhdGlvbiBpcyBvZiB0eXBlIHBvbHlnb24gb3IKKy8vIHBvbHlsaW5lLCAwIG90aGVyd2lzZS4KK0ZQREZfRVhQT1JUIHVuc2lnbmVkIGxvbmcgRlBERl9DQUxMQ09OVgorRlBERkFubm90X0dldFZlcnRpY2VzKEZQREZfQU5OT1RBVElPTiBhbm5vdCwKKyAgICAgICAgICAgICAgICAgICAgICBGU19QT0lOVEYqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCk7CisKKy8vIEV4cGVyaW1lbnRhbCBBUEkuCiAvLyBDaGVjayBpZiB8YW5ub3R8J3MgZGljdGlvbmFyeSBoYXMgfGtleXwgYXMgYSBrZXkuCiAvLwogLy8gICBhbm5vdCAgLSBoYW5kbGUgdG8gYW4gYW5ub3RhdGlvbi4KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvcmVzb3VyY2VzL3BvbHlnb25fYW5ub3QuaW4gYi90ZXN0aW5nL3Jlc291cmNlcy9wb2x5Z29uX2Fubm90LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OWRkYzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL3Jlc291cmNlcy9wb2x5Z29uX2Fubm90LmluCkBAIC0wLDAgKzEsNDggQEAKK3t7aGVhZGVyfX0KK3t7b2JqZWN0IDEgMH19IDw8CisgIC9UeXBlIC9DYXRhbG9nCisgIC9QYWdlcyAyIDAgUgorPj4KK2VuZG9iagore3tvYmplY3QgMiAwfX0gPDwKKyAgL1R5cGUgL1BhZ2VzCisgIC9Db3VudCAxCisgIC9LaWRzIFszIDAgUl0KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDMgMH19IDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL01lZGlhQm94IFswIDAgNjEyIDc5Ml0KKyAgL0Fubm90cyBbCisgICAgNCAwIFIgNSAwIFIKKyAgXQorICAvVGFicyAvUgorPj4KK2VuZG9iagore3tvYmplY3QgNCAwfX0gPDwKKyAgL1R5cGUgL0Fubm90CisgIC9TdWJ0eXBlIC9Qb2x5Z29uCisgIC9OTSAoUG9seWdvbi0xKQorICAvRiA0CisgIC9WZXJ0aWNlcyBbMTU5IDI5NiAzNTAgNDExIDQ3MiAyNDMuNDJdCisgIC9QIDMgMCBSCisgIC9DIFsxIDAuOTAxOTYgMF0KKyAgL1JlY3QgWzI5MyA1MzAgMzQ5IDU0Ml0KKz4+CitlbmRvYmoKK3t7b2JqZWN0IDUgMH19IDw8CisgIC9UeXBlIC9Bbm5vdAorICAvU3VidHlwZSAvUG9seWdvbgorICAvTk0gKFBvbHlnb24tMikKKyAgL0YgNAorICAvVmVydGljZXMgWzI1OSAzOTYgNDUwIDUxMSA1NzIgMzQzIDQyXQorICAvUCAzIDAgUgorICAvQyBbMSAwLjkwMTk2IDBdCisgIC9SZWN0IFsyOTMgNTMwIDM0OSA1NDJdCis+PgorZW5kb2JqCit7e3hyZWZ9fQore3t0cmFpbGVyfX0KK3t7c3RhcnR4cmVmfX0KKyUlRU9GCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Jlc291cmNlcy9wb2x5Z29uX2Fubm90LnBkZiBiL3Rlc3RpbmcvcmVzb3VyY2VzL3BvbHlnb25fYW5ub3QucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZmFhMjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL3Jlc291cmNlcy9wb2x5Z29uX2Fubm90LnBkZgpAQCAtMCwwICsxLDYwIEBACislUERGLTEuNworJaDypPQKKzEgMCBvYmogPDwKKyAgL1R5cGUgL0NhdGFsb2cKKyAgL1BhZ2VzIDIgMCBSCis+PgorZW5kb2JqCisyIDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlcworICAvQ291bnQgMQorICAvS2lkcyBbMyAwIFJdCis+PgorZW5kb2JqCiszIDAgb2JqIDw8CisgIC9UeXBlIC9QYWdlCisgIC9QYXJlbnQgMiAwIFIKKyAgL01lZGlhQm94IFswIDAgNjEyIDc5Ml0KKyAgL0Fubm90cyBbCisgICAgNCAwIFIgNSAwIFIKKyAgXQorICAvVGFicyAvUgorPj4KK2VuZG9iagorNCAwIG9iaiA8PAorICAvVHlwZSAvQW5ub3QKKyAgL1N1YnR5cGUgL1BvbHlnb24KKyAgL05NIChQb2x5Z29uLTEpCisgIC9GIDQKKyAgL1ZlcnRpY2VzIFsxNTkgMjk2IDM1MCA0MTEgNDcyIDI0My40Ml0KKyAgL1AgMyAwIFIKKyAgL0MgWzEgMC45MDE5NiAwXQorICAvUmVjdCBbMjkzIDUzMCAzNDkgNTQyXQorPj4KK2VuZG9iagorNSAwIG9iaiA8PAorICAvVHlwZSAvQW5ub3QKKyAgL1N1YnR5cGUgL1BvbHlnb24KKyAgL05NIChQb2x5Z29uLTIpCisgIC9GIDQKKyAgL1ZlcnRpY2VzIFsyNTkgMzk2IDQ1MCA1MTEgNTcyIDM0MyA0Ml0KKyAgL1AgMyAwIFIKKyAgL0MgWzEgMC45MDE5NiAwXQorICAvUmVjdCBbMjkzIDUzMCAzNDkgNTQyXQorPj4KK2VuZG9iagoreHJlZgorMCA2CiswMDAwMDAwMDAwIDY1NTM1IGYgCiswMDAwMDAwMDE1IDAwMDAwIG4gCiswMDAwMDAwMDY4IDAwMDAwIG4gCiswMDAwMDAwMTMxIDAwMDAwIG4gCiswMDAwMDAwMjUxIDAwMDAwIG4gCiswMDAwMDAwNDI5IDAwMDAwIG4gCit0cmFpbGVyIDw8CisgIC9Sb290IDEgMCBSCisgIC9TaXplIDYKKz4+CitzdGFydHhyZWYKKzYwNworJSVFT0YK