ZGlmZiAtLWdpdCBhL0FVVEhPUlMgYi9BVVRIT1JTCmluZGV4IDAyZmFiN2QuLmYzN2I5MWUgMTAwNjQ0Ci0tLSBhL0FVVEhPUlMKKysrIGIvQVVUSE9SUwpAQCAtMjQsNiArMjQsNyBAQAogTWlrbG9zIFZham5hIDx2bWlrbG9zQHZtaWtsb3MuaHU+CiBNaW5oIFRy4bqnbiA8bXlva2kuY3J5c3RhbEBnbWFpbC5jb20+CiBSYWxmIFNpcHBsIDxyYWxmLnNpcHBsQGdtYWlsLmNvbT4KK1JvYmVydCBDb2xseWVyIDxyY29sbHllcjk5QGdtYWlsLmNvbT4KIFJ5YW4gV2lsZXkgPHdpbGV5cnJAZ21haWwuY29tPgogVGlib3IgRHVzbm9raSA8dGR1c25va2lAaW5mLnUtc3plZ2VkLmh1PgogV2FuZyBRaW5nIDx3YW5ncWluZy1oZkBsb29uZ3Nvbi5jbj4KZGlmZiAtLWdpdCBhL2NvcmUvZnhnZS9jZnhfZ3JhcGhzdGF0ZS5jcHAgYi9jb3JlL2Z4Z2UvY2Z4X2dyYXBoc3RhdGUuY3BwCmluZGV4IDcyNmMwYzYuLjk2MzE3MTIgMTAwNjQ0Ci0tLSBhL2NvcmUvZnhnZS9jZnhfZ3JhcGhzdGF0ZS5jcHAKKysrIGIvY29yZS9meGdlL2NmeF9ncmFwaHN0YXRlLmNwcApAQCAtMjksOCArMjksMzAgQEAKICAgcERhdGEtPm1fRGFzaEFycmF5ID0gc3RkOjptb3ZlKGRhc2hlcyk7CiB9CiAKK3ZvaWQgQ0ZYX0dyYXBoU3RhdGU6OlNldExpbmVEYXNoUGhhc2UoZmxvYXQgcGhhc2UpIHsKKyAgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwRGF0YSA9IG1fUmVmLkdldFByaXZhdGVDb3B5KCk7CisgIHBEYXRhLT5tX0Rhc2hQaGFzZSA9IHBoYXNlOworfQorCitzdGQ6OnZlY3RvcjxmbG9hdD4gQ0ZYX0dyYXBoU3RhdGU6OkdldExpbmVEYXNoQXJyYXkoKSBjb25zdCB7CisgIHN0ZDo6dmVjdG9yPGZsb2F0PiByZXQ7CisKKyAgaWYgKG1fUmVmLkdldE9iamVjdCgpKQorICAgIHJldCA9IG1fUmVmLkdldE9iamVjdCgpLT5tX0Rhc2hBcnJheTsKKworICByZXR1cm4gcmV0OworfQorCitpbnQgQ0ZYX0dyYXBoU3RhdGU6OkdldExpbmVEYXNoU2l6ZSgpIGNvbnN0IHsKKyAgcmV0dXJuIG1fUmVmLkdldE9iamVjdCgpID8gbV9SZWYuR2V0T2JqZWN0KCktPm1fRGFzaEFycmF5LnNpemUoKSA6IDA7Cit9CisKK2Zsb2F0IENGWF9HcmFwaFN0YXRlOjpHZXRMaW5lRGFzaFBoYXNlKCkgY29uc3QgeworICByZXR1cm4gbV9SZWYuR2V0T2JqZWN0KCkgPyBtX1JlZi5HZXRPYmplY3QoKS0+bV9EYXNoUGhhc2UgOiAxLjBmOworfQorCiBmbG9hdCBDRlhfR3JhcGhTdGF0ZTo6R2V0TGluZVdpZHRoKCkgY29uc3QgewotICByZXR1cm4gbV9SZWYuR2V0T2JqZWN0KCkgPyBtX1JlZi5HZXRPYmplY3QoKS0+bV9MaW5lV2lkdGggOiAxLmY7CisgIHJldHVybiBtX1JlZi5HZXRPYmplY3QoKSA/IG1fUmVmLkdldE9iamVjdCgpLT5tX0xpbmVXaWR0aCA6IDEuMGY7CiB9CiAKIHZvaWQgQ0ZYX0dyYXBoU3RhdGU6OlNldExpbmVXaWR0aChmbG9hdCB3aWR0aCkgewpkaWZmIC0tZ2l0IGEvY29yZS9meGdlL2NmeF9ncmFwaHN0YXRlLmggYi9jb3JlL2Z4Z2UvY2Z4X2dyYXBoc3RhdGUuaAppbmRleCAyMDk1NWY4Li5kNmIzN2U2IDEwMDY0NAotLS0gYS9jb3JlL2Z4Z2UvY2Z4X2dyYXBoc3RhdGUuaAorKysgYi9jb3JlL2Z4Z2UvY2Z4X2dyYXBoc3RhdGUuaApAQCAtMjEsNiArMjEsMTAgQEAKICAgdm9pZCBFbXBsYWNlKCk7CiAKICAgdm9pZCBTZXRMaW5lRGFzaChzdGQ6OnZlY3RvcjxmbG9hdD4gZGFzaGVzLCBmbG9hdCBwaGFzZSwgZmxvYXQgc2NhbGUpOworICB2b2lkIFNldExpbmVEYXNoUGhhc2UoZmxvYXQgcGhhc2UpOworICBzdGQ6OnZlY3RvcjxmbG9hdD4gR2V0TGluZURhc2hBcnJheSgpIGNvbnN0OworICBpbnQgR2V0TGluZURhc2hTaXplKCkgY29uc3Q7CisgIGZsb2F0IEdldExpbmVEYXNoUGhhc2UoKSBjb25zdDsKIAogICBmbG9hdCBHZXRMaW5lV2lkdGgoKSBjb25zdDsKICAgdm9pZCBTZXRMaW5lV2lkdGgoZmxvYXQgd2lkdGgpOwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9mcGRmX2VkaXRwYWdlLmNwcCBiL2ZwZGZzZGsvZnBkZl9lZGl0cGFnZS5jcHAKaW5kZXggMjg2YmViOS4uMTAyNmM5OCAxMDA2NDQKLS0tIGEvZnBkZnNkay9mcGRmX2VkaXRwYWdlLmNwcAorKysgYi9mcGRmc2RrL2ZwZGZfZWRpdHBhZ2UuY3BwCkBAIC04MzgsNiArODM4LDczIEBACiAgIHJldHVybiB0cnVlOwogfQogCitGUERGX0VYUE9SVCBGUERGX0JPT0wgRlBERl9DQUxMQ09OVgorRlBERlBhZ2VPYmpfR2V0RGFzaFBoYXNlKEZQREZfUEFHRU9CSkVDVCBwYWdlX29iamVjdCwgZmxvYXQqIHBoYXNlKSB7CisgIGF1dG8qIHBQYWdlT2JqID0gQ1BERlBhZ2VPYmplY3RGcm9tRlBERlBhZ2VPYmplY3QocGFnZV9vYmplY3QpOworICBpZiAoIXBQYWdlT2JqIHx8ICFwaGFzZSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgKnBoYXNlID0gcFBhZ2VPYmotPm1fR3JhcGhTdGF0ZS5HZXRMaW5lRGFzaFBoYXNlKCk7CisgIHJldHVybiB0cnVlOworfQorCitGUERGX0VYUE9SVCBGUERGX0JPT0wgRlBERl9DQUxMQ09OVgorRlBERlBhZ2VPYmpfU2V0RGFzaFBoYXNlKEZQREZfUEFHRU9CSkVDVCBwYWdlX29iamVjdCwgZmxvYXQgcGhhc2UpIHsKKyAgYXV0byogcFBhZ2VPYmogPSBDUERGUGFnZU9iamVjdEZyb21GUERGUGFnZU9iamVjdChwYWdlX29iamVjdCk7CisgIGlmICghcFBhZ2VPYmopCisgICAgcmV0dXJuIGZhbHNlOworCisgIHBQYWdlT2JqLT5tX0dyYXBoU3RhdGUuU2V0TGluZURhc2hQaGFzZShwaGFzZSk7CisgIHBQYWdlT2JqLT5TZXREaXJ0eSh0cnVlKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKK0ZQREZfRVhQT1JUIGludCBGUERGX0NBTExDT05WCitGUERGUGFnZU9ial9HZXREYXNoQ291bnQoRlBERl9QQUdFT0JKRUNUIHBhZ2Vfb2JqZWN0KSB7CisgIGF1dG8qIHBQYWdlT2JqID0gQ1BERlBhZ2VPYmplY3RGcm9tRlBERlBhZ2VPYmplY3QocGFnZV9vYmplY3QpOworICByZXR1cm4gcFBhZ2VPYmogPyBwUGFnZU9iai0+bV9HcmFwaFN0YXRlLkdldExpbmVEYXNoU2l6ZSgpIDogLTE7Cit9CisKK0ZQREZfRVhQT1JUIEZQREZfQk9PTCBGUERGX0NBTExDT05WCitGUERGUGFnZU9ial9HZXREYXNoQXJyYXkoRlBERl9QQUdFT0JKRUNUIHBhZ2Vfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBkYXNoX2FycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXNoX2NvdW50KSB7CisgIGF1dG8qIHBQYWdlT2JqID0gQ1BERlBhZ2VPYmplY3RGcm9tRlBERlBhZ2VPYmplY3QocGFnZV9vYmplY3QpOworICBpZiAoIXBQYWdlT2JqIHx8ICFkYXNoX2FycmF5KQorICAgIHJldHVybiBmYWxzZTsKKworICBhdXRvIGRhc2hfdmVjdG9yID0gcFBhZ2VPYmotPm1fR3JhcGhTdGF0ZS5HZXRMaW5lRGFzaEFycmF5KCk7CisgIGlmIChkYXNoX3ZlY3Rvci5zaXplKCkgPiBkYXNoX2NvdW50KQorICAgIHJldHVybiBmYWxzZTsKKworICBtZW1jcHkoZGFzaF9hcnJheSwgZGFzaF92ZWN0b3IuZGF0YSgpLCBkYXNoX3ZlY3Rvci5zaXplKCkgKiBzaXplb2YoZmxvYXQpKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKK0ZQREZfRVhQT1JUIEZQREZfQk9PTCBGUERGX0NBTExDT05WCitGUERGUGFnZU9ial9TZXREYXNoQXJyYXkoRlBERl9QQUdFT0JKRUNUIHBhZ2Vfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBkYXNoX2FycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXNoX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHBoYXNlKSB7CisgIGlmIChkYXNoX2NvdW50ID4gMCAmJiAhZGFzaF9hcnJheSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgYXV0byogcFBhZ2VPYmogPSBDUERGUGFnZU9iamVjdEZyb21GUERGUGFnZU9iamVjdChwYWdlX29iamVjdCk7CisgIGlmICghcFBhZ2VPYmopCisgICAgcmV0dXJuIGZhbHNlOworCisgIHN0ZDo6dmVjdG9yPGZsb2F0PiBkYXNoZXM7CisgIGlmIChkYXNoX2NvdW50ID4gMCkgeworICAgIGRhc2hlcy5yZXNlcnZlKGRhc2hfY291bnQpOworICAgIGRhc2hlcy5hc3NpZ24oZGFzaF9hcnJheSwgZGFzaF9hcnJheSArIGRhc2hfY291bnQpOworICB9CisKKyAgcFBhZ2VPYmotPm1fR3JhcGhTdGF0ZS5TZXRMaW5lRGFzaChkYXNoZXMsIHBoYXNlLCAxLjBmKTsKKworICBwUGFnZU9iai0+U2V0RGlydHkodHJ1ZSk7CisgIHJldHVybiB0cnVlOworfQorCiBGUERGX0VYUE9SVCBpbnQgRlBERl9DQUxMQ09OVgogRlBERkZvcm1PYmpfQ291bnRPYmplY3RzKEZQREZfUEFHRU9CSkVDVCBmb3JtX29iamVjdCkgewogICBjb25zdCBhdXRvKiBwT2JqZWN0TGlzdCA9IENQREZQYWdlT2JqSG9sZGVyRnJvbUZQREZGb3JtT2JqZWN0KGZvcm1fb2JqZWN0KTsKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvZnBkZl9lZGl0cGFnZV9lbWJlZGRlcnRlc3QuY3BwIGIvZnBkZnNkay9mcGRmX2VkaXRwYWdlX2VtYmVkZGVydGVzdC5jcHAKaW5kZXggYTYzMDcyMS4uZTE4YzIzZSAxMDA2NDQKLS0tIGEvZnBkZnNkay9mcGRmX2VkaXRwYWdlX2VtYmVkZGVydGVzdC5jcHAKKysrIGIvZnBkZnNkay9mcGRmX2VkaXRwYWdlX2VtYmVkZGVydGVzdC5jcHAKQEAgLTE1NCwzICsxNTQsMTM2IEBACiAKICAgVW5sb2FkUGFnZShwYWdlKTsKIH0KKworVEVTVF9GKEZQREZFZGl0UGFnZUVtYmVkZGVyVGVzdCwgRGFzaGluZ0FycmF5QW5kUGhhc2UpIHsKKyAgeworICAgIEVYUEVDVF9GQUxTRShGUERGUGFnZU9ial9HZXREYXNoUGhhc2UobnVsbHB0ciwgbnVsbHB0cikpOworCisgICAgZmxvYXQgcGhhc2UgPSAtMTEyMy41ZjsKKyAgICBFWFBFQ1RfRkFMU0UoRlBERlBhZ2VPYmpfR2V0RGFzaFBoYXNlKG51bGxwdHIsICZwaGFzZSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgtMTEyMy41ZiwgcGhhc2UpOworCisgICAgRVhQRUNUX0VRKC0xLCBGUERGUGFnZU9ial9HZXREYXNoQ291bnQobnVsbHB0cikpOworCisgICAgRVhQRUNUX0ZBTFNFKEZQREZQYWdlT2JqX0dldERhc2hBcnJheShudWxscHRyLCBudWxscHRyLCAzKSk7CisKKyAgICBmbG9hdCBnZXRfYXJyYXlbXSA9IHstMS4wZiwgLTEuMGYsIC0xLjBmfTsKKyAgICBFWFBFQ1RfRkFMU0UoRlBERlBhZ2VPYmpfR2V0RGFzaEFycmF5KG51bGxwdHIsIGdldF9hcnJheSwgMykpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKQorICAgICAgRVhQRUNUX0ZMT0FUX0VRKC0xLjBmLCBnZXRfYXJyYXlbaV0pOworCisgICAgRVhQRUNUX0ZBTFNFKEZQREZQYWdlT2JqX1NldERhc2hQaGFzZShudWxscHRyLCA1LjBmKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZQREZQYWdlT2JqX1NldERhc2hBcnJheShudWxscHRyLCBudWxscHRyLCAzLCA1LjBmKSk7CisKKyAgICBmbG9hdCBzZXRfYXJyYXlbXSA9IHsxLjBmLCAyLjBmLCAzLjBmfTsKKyAgICBFWFBFQ1RfRkFMU0UoRlBERlBhZ2VPYmpfU2V0RGFzaEFycmF5KG51bGxwdHIsIHNldF9hcnJheSwgMywgNS4wZikpOworICB9CisKKyAgY29uc3RleHByIGludCBrRXhwZWN0ZWRPYmplY3RDb3VudCA9IDM7CisgIEFTU0VSVF9UUlVFKE9wZW5Eb2N1bWVudCgiZGFzaGVkX2xpbmVzLnBkZiIpKTsKKyAgRlBERl9QQUdFIHBhZ2UgPSBMb2FkUGFnZSgwKTsKKyAgQVNTRVJUX1RSVUUocGFnZSk7CisKKyAgQVNTRVJUX0VRKGtFeHBlY3RlZE9iamVjdENvdW50LCBGUERGUGFnZV9Db3VudE9iamVjdHMocGFnZSkpOworCisgIHsKKyAgICBGUERGX1BBR0VPQkpFQ1QgcGF0aCA9IEZQREZQYWdlX0dldE9iamVjdChwYWdlLCAwKTsKKyAgICBBU1NFUlRfVFJVRShwYXRoKTsKKyAgICBFWFBFQ1RfRVEoRlBERl9QQUdFT0JKX1BBVEgsIEZQREZQYWdlT2JqX0dldFR5cGUocGF0aCkpOworCisgICAgRVhQRUNUX0ZBTFNFKEZQREZQYWdlT2JqX0dldERhc2hQaGFzZShwYXRoLCBudWxscHRyKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZQREZQYWdlT2JqX0dldERhc2hBcnJheShwYXRoLCBudWxscHRyLCAzKSk7CisgICAgRVhQRUNUX0ZBTFNFKEZQREZQYWdlT2JqX1NldERhc2hBcnJheShwYXRoLCBudWxscHRyLCAzLCA1LjBmKSk7CisKKyAgICBmbG9hdCBwaGFzZSA9IC0xMTIzLjVmOworICAgIEVYUEVDVF9UUlVFKEZQREZQYWdlT2JqX0dldERhc2hQaGFzZShwYXRoLCAmcGhhc2UpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4wZiwgcGhhc2UpOworICAgIEVYUEVDVF9FUSgwLCBGUERGUGFnZU9ial9HZXREYXNoQ291bnQocGF0aCkpOworCisgICAgZmxvYXQgZ2V0X2FycmF5W10gPSB7LTEuMGYsIC0xLjBmLCAtMS4wZn07CisgICAgRVhQRUNUX1RSVUUoRlBERlBhZ2VPYmpfR2V0RGFzaEFycmF5KHBhdGgsIGdldF9hcnJheSwgMykpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKQorICAgICAgRVhQRUNUX0ZMT0FUX0VRKC0xLjBmLCBnZXRfYXJyYXlbaV0pOworICB9CisKKyAgeworICAgIEZQREZfUEFHRU9CSkVDVCBwYXRoID0gRlBERlBhZ2VfR2V0T2JqZWN0KHBhZ2UsIDEpOworICAgIEFTU0VSVF9UUlVFKHBhdGgpOworICAgIEVYUEVDVF9FUShGUERGX1BBR0VPQkpfUEFUSCwgRlBERlBhZ2VPYmpfR2V0VHlwZShwYXRoKSk7CisKKyAgICBmbG9hdCBwaGFzZSA9IC0xMTIzLjVmOworICAgIEVYUEVDVF9UUlVFKEZQREZQYWdlT2JqX0dldERhc2hQaGFzZShwYXRoLCAmcGhhc2UpKTsKKyAgICBFWFBFQ1RfTFQoMC4wZiwgcGhhc2UpOworICAgIEFTU0VSVF9FUSg2LCBGUERGUGFnZU9ial9HZXREYXNoQ291bnQocGF0aCkpOworCisgICAgZmxvYXQgZGFzaF9hcnJheVtdID0gey0xLjBmLCAtMS4wZiwgLTEuMGYsIC0xLjBmLCAtMS4wZiwgLTEuMGZ9OworICAgIEFTU0VSVF9UUlVFKEZQREZQYWdlT2JqX0dldERhc2hBcnJheShwYXRoLCBkYXNoX2FycmF5LCA2KSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICAgIEVYUEVDVF9MVCgwLjBmLCBkYXNoX2FycmF5W2ldKTsKKworICAgIC8vIHRoZSBhcnJheSBpcyBkZWNyZWFzaW5nIGluIHZhbHVlLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQorICAgICAgRVhQRUNUX0dUKGRhc2hfYXJyYXlbaV0sIGRhc2hfYXJyYXlbaSArIDFdKTsKKworICAgIC8vIG1vZGlmeSBwaGFzZQorICAgIEVYUEVDVF9UUlVFKEZQREZQYWdlT2JqX1NldERhc2hQaGFzZShwYXRoLCAxLjBmKSk7CisKKyAgICBwaGFzZSA9IC0xMTIzLjVmOworICAgIEVYUEVDVF9UUlVFKEZQREZQYWdlT2JqX0dldERhc2hQaGFzZShwYXRoLCAmcGhhc2UpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wZiwgcGhhc2UpOworCisgICAgLy8gY2xlYXIgYXJyYXkKKyAgICBFWFBFQ1RfVFJVRShGUERGUGFnZU9ial9TZXREYXNoQXJyYXkocGF0aCwgbnVsbHB0ciwgMCwgMC4wZikpOworICAgIEVYUEVDVF9FUSgwLCBGUERGUGFnZU9ial9HZXREYXNoQ291bnQocGF0aCkpOworCisgICAgcGhhc2UgPSAtMTEyMy41ZjsKKyAgICBFWFBFQ1RfVFJVRShGUERGUGFnZU9ial9HZXREYXNoUGhhc2UocGF0aCwgJnBoYXNlKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMGYsIHBoYXNlKTsKKyAgfQorCisgIHsKKyAgICBGUERGX1BBR0VPQkpFQ1QgcGF0aCA9IEZQREZQYWdlX0dldE9iamVjdChwYWdlLCAyKTsKKyAgICBBU1NFUlRfVFJVRShwYXRoKTsKKyAgICBFWFBFQ1RfRVEoRlBERl9QQUdFT0JKX1BBVEgsIEZQREZQYWdlT2JqX0dldFR5cGUocGF0aCkpOworCisgICAgZmxvYXQgcGhhc2UgPSAtMTEyMy41ZjsKKyAgICBFWFBFQ1RfVFJVRShGUERGUGFnZU9ial9HZXREYXNoUGhhc2UocGF0aCwgJnBoYXNlKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMGYsIHBoYXNlKTsKKworICAgIEVYUEVDVF9FUSgwLCBGUERGUGFnZU9ial9HZXREYXNoQ291bnQocGF0aCkpOworCisgICAgLy8gYGdldF9hcnJheWAgc2hvdWxkIGJlIHVubW9kaWZpZWQKKyAgICBmbG9hdCBnZXRfYXJyYXlbXSA9IHstMS4wZiwgLTEuMGYsIC0xLjBmLCAtMS4wZn07CisgICAgRVhQRUNUX1RSVUUoRlBERlBhZ2VPYmpfR2V0RGFzaEFycmF5KHBhdGgsIGdldF9hcnJheSwgNCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQorICAgICAgRVhQRUNUX0ZMT0FUX0VRKC0xLjBmLCBnZXRfYXJyYXlbaV0pOworCisgICAgLy8gbW9kaWZ5IGRhc2hfYXJyYXkgYW5kIHBoYXNlCisgICAgY29uc3QgZmxvYXQgc2V0X2FycmF5W10gPSB7MS4wZiwgMi4wZiwgMy4wZn07CisgICAgRVhQRUNUX1RSVUUoRlBERlBhZ2VPYmpfU2V0RGFzaEFycmF5KHBhdGgsIHNldF9hcnJheSwgMywgNS4wZikpOworCisgICAgcGhhc2UgPSAtMTEyMy41ZjsKKyAgICBFWFBFQ1RfVFJVRShGUERGUGFnZU9ial9HZXREYXNoUGhhc2UocGF0aCwgJnBoYXNlKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDUuMGYsIHBoYXNlKTsKKyAgICBBU1NFUlRfRVEoMywgRlBERlBhZ2VPYmpfR2V0RGFzaENvdW50KHBhdGgpKTsKKworICAgIEFTU0VSVF9UUlVFKEZQREZQYWdlT2JqX0dldERhc2hBcnJheShwYXRoLCBnZXRfYXJyYXksIDQpKTsKKworICAgIC8vIGBnZXRfYXJyYXlgIHNob3VsZCBiZSBtb2RpZmllZCBvbmx5IHVwIHRvIGRhc2hfY291bnQKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgIEVYUEVDVF9GTE9BVF9FUShzdGF0aWNfY2FzdDxmbG9hdD4oaSArIDEpLCBnZXRfYXJyYXlbaV0pOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKC0xLjBmLCBnZXRfYXJyYXlbM10pOworCisgICAgLy8gY2xlYXIgYXJyYXkKKyAgICBFWFBFQ1RfVFJVRShGUERGUGFnZU9ial9TZXREYXNoQXJyYXkocGF0aCwgc2V0X2FycmF5LCAwLCA0LjBmKSk7CisgICAgRVhQRUNUX0VRKDAsIEZQREZQYWdlT2JqX0dldERhc2hDb3VudChwYXRoKSk7CisKKyAgICBwaGFzZSA9IC0xMTIzLjVmOworICAgIEVYUEVDVF9UUlVFKEZQREZQYWdlT2JqX0dldERhc2hQaGFzZShwYXRoLCAmcGhhc2UpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNC4wZiwgcGhhc2UpOworICB9CisKKyAgVW5sb2FkUGFnZShwYWdlKTsKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvZnBkZl92aWV3X2NfYXBpX3Rlc3QuYyBiL2ZwZGZzZGsvZnBkZl92aWV3X2NfYXBpX3Rlc3QuYwppbmRleCAzOTI0MDg4Li4zNzQ4ZmI1IDEwMDY0NAotLS0gYS9mcGRmc2RrL2ZwZGZfdmlld19jX2FwaV90ZXN0LmMKKysrIGIvZnBkZnNkay9mcGRmX3ZpZXdfY19hcGlfdGVzdC5jCkBAIC0xODksNiArMTg5LDkgQEAKICAgICBDSEsoRlBERlBhZ2VPYmpfQ3JlYXRlVGV4dE9iaik7CiAgICAgQ0hLKEZQREZQYWdlT2JqX0Rlc3Ryb3kpOwogICAgIENISyhGUERGUGFnZU9ial9HZXRCb3VuZHMpOworICAgIENISyhGUERGUGFnZU9ial9HZXREYXNoQXJyYXkpOworICAgIENISyhGUERGUGFnZU9ial9HZXREYXNoQ291bnQpOworICAgIENISyhGUERGUGFnZU9ial9HZXREYXNoUGhhc2UpOwogICAgIENISyhGUERGUGFnZU9ial9HZXRGaWxsQ29sb3IpOwogICAgIENISyhGUERGUGFnZU9ial9HZXRMaW5lQ2FwKTsKICAgICBDSEsoRlBERlBhZ2VPYmpfR2V0TGluZUpvaW4pOwpAQCAtMjAxLDYgKzIwNCw4IEBACiAgICAgQ0hLKEZQREZQYWdlT2JqX05ld1RleHRPYmopOwogICAgIENISyhGUERGUGFnZU9ial9SZW1vdmVNYXJrKTsKICAgICBDSEsoRlBERlBhZ2VPYmpfU2V0QmxlbmRNb2RlKTsKKyAgICBDSEsoRlBERlBhZ2VPYmpfU2V0RGFzaEFycmF5KTsKKyAgICBDSEsoRlBERlBhZ2VPYmpfU2V0RGFzaFBoYXNlKTsKICAgICBDSEsoRlBERlBhZ2VPYmpfU2V0RmlsbENvbG9yKTsKICAgICBDSEsoRlBERlBhZ2VPYmpfU2V0TGluZUNhcCk7CiAgICAgQ0hLKEZQREZQYWdlT2JqX1NldExpbmVKb2luKTsKZGlmZiAtLWdpdCBhL3B1YmxpYy9mcGRmX2VkaXQuaCBiL3B1YmxpYy9mcGRmX2VkaXQuaAppbmRleCAzYzk2NDJiLi4yMjkwY2Q1IDEwMDY0NAotLS0gYS9wdWJsaWMvZnBkZl9lZGl0LmgKKysrIGIvcHVibGljL2ZwZGZfZWRpdC5oCkBAIC04OTYsNiArODk2LDYzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBCLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogQSk7CiAKKy8vIEV4cGVyaW1lbnRhbCBBUEkuCisvLyBHZXQgdGhlIGxpbmUgZGFzaCB8cGhhc2V8IG9mIHxwYWdlX29iamVjdHwuCisvLworLy8gcGFnZV9vYmplY3QgLSBoYW5kbGUgdG8gYSBwYWdlIG9iamVjdC4KKy8vIHBoYXNlIC0gcG9pbnRlciB3aGVyZSB0aGUgZGFzaGluZyBwaGFzZSB3aWxsIGJlIHN0b3JlZC4KKy8vCisvLyBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KK0ZQREZfRVhQT1JUIEZQREZfQk9PTCBGUERGX0NBTExDT05WCitGUERGUGFnZU9ial9HZXREYXNoUGhhc2UoRlBERl9QQUdFT0JKRUNUIHBhZ2Vfb2JqZWN0LCBmbG9hdCogcGhhc2UpOworCisvLyBFeHBlcmltZW50YWwgQVBJLgorLy8gU2V0IHRoZSBsaW5lIGRhc2ggcGhhc2Ugb2YgfHBhZ2Vfb2JqZWN0fC4KKy8vCisvLyBwYWdlX29iamVjdCAtIGhhbmRsZSB0byBhIHBhZ2Ugb2JqZWN0LgorLy8gcGhhc2UgLSBsaW5lIGRhc2ggcGhhc2UuCisvLworLy8gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCitGUERGX0VYUE9SVCBGUERGX0JPT0wgRlBERl9DQUxMQ09OVgorRlBERlBhZ2VPYmpfU2V0RGFzaFBoYXNlKEZQREZfUEFHRU9CSkVDVCBwYWdlX29iamVjdCwgZmxvYXQgcGhhc2UpOworCisvLyBFeHBlcmltZW50YWwgQVBJLgorLy8gR2V0IHRoZSBsaW5lIGRhc2ggYXJyYXkgb2YgfHBhZ2Vfb2JqZWN0fC4KKy8vCisvLyBwYWdlX29iamVjdCAtIGhhbmRsZSB0byBhIHBhZ2Ugb2JqZWN0LgorLy8KKy8vIFJldHVybnMgdGhlIGxpbmUgZGFzaCBhcnJheSBzaXplIG9yIC0xIG9uIGZhaWx1cmUuCitGUERGX0VYUE9SVCBpbnQgRlBERl9DQUxMQ09OVgorRlBERlBhZ2VPYmpfR2V0RGFzaENvdW50KEZQREZfUEFHRU9CSkVDVCBwYWdlX29iamVjdCk7CisKKy8vIEV4cGVyaW1lbnRhbCBBUEkuCisvLyBHZXQgdGhlIGxpbmUgZGFzaCBhcnJheSBvZiB8cGFnZV9vYmplY3R8LgorLy8KKy8vIHBhZ2Vfb2JqZWN0IC0gaGFuZGxlIHRvIGEgcGFnZSBvYmplY3QuCisvLyBkYXNoX2FycmF5IC0gcG9pbnRlciB3aGVyZSB0aGUgZGFzaGluZyBhcnJheSB3aWxsIGJlIHN0b3JlZC4KKy8vIGRhc2hfY291bnQgLSBudW1iZXIgb2YgZWxlbWVudHMgaW4gfGRhc2hfYXJyYXl8LgorLy8KKy8vIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgorRlBERl9FWFBPUlQgRlBERl9CT09MIEZQREZfQ0FMTENPTlYKK0ZQREZQYWdlT2JqX0dldERhc2hBcnJheShGUERGX1BBR0VPQkpFQ1QgcGFnZV9vYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGRhc2hfYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhc2hfY291bnQpOworCisvLyBFeHBlcmltZW50YWwgQVBJLgorLy8gU2V0IHRoZSBsaW5lIGRhc2ggYXJyYXkgb2YgfHBhZ2Vfb2JqZWN0fC4KKy8vCisvLyBwYWdlX29iamVjdCAtIGhhbmRsZSB0byBhIHBhZ2Ugb2JqZWN0LgorLy8gZGFzaF9hcnJheSAtIHRoZSBkYXNoIGFycmF5LgorLy8gZGFzaF9jb3VudCAtIG51bWJlciBvZiBlbGVtZW50cyBpbiB8ZGFzaF9hcnJheXwuCisvLyBwaGFzZSAtIHRoZSBsaW5lIGRhc2ggcGhhc2UuCisvLworLy8gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MuCitGUERGX0VYUE9SVCBGUERGX0JPT0wgRlBERl9DQUxMQ09OVgorRlBERlBhZ2VPYmpfU2V0RGFzaEFycmF5KEZQREZfUEFHRU9CSkVDVCBwYWdlX29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCogZGFzaF9hcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGFzaF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBwaGFzZSk7CisKIC8vIEdldCBudW1iZXIgb2Ygc2VnbWVudHMgaW5zaWRlIHxwYXRofC4KIC8vCiAvLyAgIHBhdGggLSBoYW5kbGUgdG8gYSBwYXRoLgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9yZXNvdXJjZXMvZGFzaGVkX2xpbmVzLmluIGIvdGVzdGluZy9yZXNvdXJjZXMvZGFzaGVkX2xpbmVzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Zjc0YmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL3Jlc291cmNlcy9kYXNoZWRfbGluZXMuaW4KQEAgLTAsMCArMSwzNyBAQAore3toZWFkZXJ9fQore3tvYmplY3QgMSAwfX0gPDwKKyAgL1R5cGUgL0NhdGFsb2cKKyAgL1BhZ2VzIDIgMCBSCis+PgorZW5kb2JqCit7e29iamVjdCAyIDB9fSA8PAorICAvVHlwZSAvUGFnZXMKKyAgL01lZGlhQm94IFswIDAgMjAwIDEwMF0KKyAgL0NvdW50IDEKKyAgL0tpZHMgWzMgMCBSXQorPj4KK2VuZG9iagore3tvYmplY3QgMyAwfX0gPDwKKyAgL1R5cGUgL1BhZ2UKKyAgL1BhcmVudCAyIDAgUgorICAvQ29udGVudHMgNCAwIFIKKz4+CitlbmRvYmoKK3t7b2JqZWN0IDQgMH19IDw8CisgIHt7c3RyZWFtbGVufX0KKz4+CitzdHJlYW0KK3EKKzAgMCAwIHJnCisxMCAyNSBtIDE5MCAyNSBsIFMKK1s2IDUgNCAzIDIgMV0gNSBkCisxMCA1MCBtIDE5MCA1MCBsIFMKK1tdIDAgZAorMTAgNzUgbSAxOTAgNzUgbCBTCitRCitlbmRzdHJlYW0KK2VuZG9iagore3t4cmVmfX0KK3t7dHJhaWxlcn19Cit7e3N0YXJ0eHJlZn19CislJUVPRgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9yZXNvdXJjZXMvZGFzaGVkX2xpbmVzLnBkZiBiL3Rlc3RpbmcvcmVzb3VyY2VzL2Rhc2hlZF9saW5lcy5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwYTU5MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvcmVzb3VyY2VzL2Rhc2hlZF9saW5lcy5wZGYKQEAgLTAsMCArMSw0OCBAQAorJVBERi0xLjcKKyWg8qT0CisxIDAgb2JqIDw8CisgIC9UeXBlIC9DYXRhbG9nCisgIC9QYWdlcyAyIDAgUgorPj4KK2VuZG9iagorMiAwIG9iaiA8PAorICAvVHlwZSAvUGFnZXMKKyAgL01lZGlhQm94IFswIDAgMjAwIDEwMF0KKyAgL0NvdW50IDEKKyAgL0tpZHMgWzMgMCBSXQorPj4KK2VuZG9iagorMyAwIG9iaiA8PAorICAvVHlwZSAvUGFnZQorICAvUGFyZW50IDIgMCBSCisgIC9Db250ZW50cyA0IDAgUgorPj4KK2VuZG9iagorNCAwIG9iaiA8PAorICAvTGVuZ3RoIDk1Cis+Pgorc3RyZWFtCitxCiswIDAgMCByZworMTAgMjUgbSAxOTAgMjUgbCBTCitbNiA1IDQgMyAyIDFdIDUgZAorMTAgNTAgbSAxOTAgNTAgbCBTCitbXSAwIGQKKzEwIDc1IG0gMTkwIDc1IGwgUworUQorZW5kc3RyZWFtCitlbmRvYmoKK3hyZWYKKzAgNQorMDAwMDAwMDAwMCA2NTUzNSBmIAorMDAwMDAwMDAxNSAwMDAwMCBuIAorMDAwMDAwMDA2OCAwMDAwMCBuIAorMDAwMDAwMDE1NyAwMDAwMCBuIAorMDAwMDAwMDIyNiAwMDAwMCBuIAordHJhaWxlciA8PAorICAvUm9vdCAxIDAgUgorICAvU2l6ZSA1Cis+Pgorc3RhcnR4cmVmCiszNzIKKyUlRU9GCg==