ZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My96eDI5NzUyMHYzLW1kbC1kZXZpY2VzLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9hcmNoL2FybS9tYWNoLXp4Mjk3NTIwdjMvengyOTc1MjB2My1tZGwtZGV2aWNlcy5jCmluZGV4IDcxMzRlMTguLmQzMTY1YTkgMTAwNjQ0Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My96eDI5NzUyMHYzLW1kbC1kZXZpY2VzLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvYXJjaC9hcm0vbWFjaC16eDI5NzUyMHYzL3p4Mjk3NTIwdjMtbWRsLWRldmljZXMuYwpAQCAtOTQ4LDcgKzk0OCw3IEBACiBzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gengyOV9rZXlwYWRfaW50W10gPSB7CiAJI2lmIDEKIAl7Ci0JCS5hY3RpdmVfbG93CT0gMSwJCQkJLyrKx7fxtc2158a909DQp6GjMTogsLTPws6qtc2158a9ICAwOiCwtM/Czqq437Xnxr0qLworCQkuYWN0aXZlX2xvdwk9IDEsCQkJCS8qXENBx7dcRjFcQjXNtVxFN8a9XEQzXEQw0KdcQTFcQTMxOiBcQjBcQjRcQ0ZcQzLOqlxCNc21XEU3xr0gIDA6IFxCMFxCNFxDRlxDMs6qXEI437VcRTfGvSovCiAJCS5kZXNjICAgICAgID0gImtwZF9wb3dlciIsCiAJCS5jb2RlICAgICAgID0gS0VZX1BPV0VSICAgICAgICAgLyogcG93ZXI6IDExNiAqLywKIAkJLnVzZV9wbXVfcHdyb24gPSAxLCAgICAgICAgICAgICAvKnRydWU6IHVzZSBwbXUgcHdyb24gaW50ZXJydXB0IGZhc2U6IHVzZSB6eDI5NzUyMHYyIGV4dCBpbnQqLwpAQCAtMTQ4NiwxMSArMTQ4NiwxNSBAQAogCS8qCiAJICAqaTJjIGRldmljZXMgb24gYnVzIDEKIAkgICovCisvL3hmLmxpQDIwMjMwNjI2IGFkZCBmb3IgVDEwNkJVRy0yNiBzdGFydAorI2lmIDAKIAlkZXZpY2VzX251bSA9IEFSUkFZX1NJWkUoengyOV9pMmMxX2RldmljZXMpOwogCWlmIChkZXZpY2VzX251bSl7CiAJCXJldCA9IGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsengyOV9pMmMxX2RldmljZXMsIGRldmljZXNfbnVtKTsKIAkJaWYocmV0KQogCQkJQlVHKCk7CiAJfQorI2VuZGlmCisvL3hmLmxpQDIwMjMwNjI2IGFkZCBmb3IgVDEwNkJVRy0yNiBlbmQKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXAvcHJvamVjdC96eDI5NzUyMHYzL3Byal92ZWhpY2xlX2RjL2NvbmZpZy9ub3JtYWwvY29uZmlnLmxpbnV4IGIvYXAvcHJvamVjdC96eDI5NzUyMHYzL3Byal92ZWhpY2xlX2RjL2NvbmZpZy9ub3JtYWwvY29uZmlnLmxpbnV4CmluZGV4IDM3YTUwYWMuLjFkOTVhYjggMTAwNzU1Ci0tLSBhL2FwL3Byb2plY3QvengyOTc1MjB2My9wcmpfdmVoaWNsZV9kYy9jb25maWcvbm9ybWFsL2NvbmZpZy5saW51eAorKysgYi9hcC9wcm9qZWN0L3p4Mjk3NTIwdjMvcHJqX3ZlaGljbGVfZGMvY29uZmlnL25vcm1hbC9jb25maWcubGludXgKQEAgLTEzOTcsOTMgKzEzOTcsOCBAQAogIyBDT05GSUdfRkIgaXMgbm90IHNldAogIyBDT05GSUdfRVhZTk9TX1ZJREVPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jeGYubGlAMjAyMzA0MjggYWRkIGZvciBjb2RlYyBzdGFydAotQ09ORklHX1NPVU5EPXkKKyNDT05GSUdfU09VTkQgaXMgbm90IHNldAogCi0jIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0Ci0KLUNPTkZJR19TTkQ9eQotCi1DT05GSUdfU05EX1RJTUVSPXkKLQotQ09ORklHX1NORF9QQ009eQotCi1DT05GSUdfU05EX0pBQ0s9eQotCi0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLQotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0KLSMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKLQotIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAotCi0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotCi1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci0KLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotCi0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotCi0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotCi0jIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAotCi0jIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKLQotIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0Ci0KLSMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAotCi0jIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAotCi1DT05GSUdfU05EX0RSSVZFUlM9eQotCi0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotCi0jIENPTkZJR19TTkRfQUxPT1AgaXMgbm90IHNldAotCi0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotCi0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0KLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotCi1DT05GSUdfU05EX0FSTT15Ci0KLUNPTkZJR19TTkRfU1BJPXkKLQotQ09ORklHX1NORF9TT0M9eQotCi1DT05GSUdfU05EX1NPQ19TQU5FQ0hJUFM9eQotCi0jIENPTkZJR19TTkRfU09DX1pYMjk3NTIwVjNfVEkzMTAwIGlzIG5vdCBzZXQKLQotQ09ORklHX1NORF9TT0NfWlgyOTc1MjBWM19OQVU4ODEwPXkKLQotIyBDT05GSUdfU05EX1NPQ19aWDI5NzUyMFYzX0VTODM3NCBpcyBub3Qgc2V0Ci0KLSMgQ09ORklHX1NORF9TT0NfWlgyOTc1MjBWM19FUzgzMTIgaXMgbm90IHNldAotCi1DT05GSUdfU05EX1NPQ19aWF9WT0lDRT15Ci0KLUNPTkZJR19TTkRfU09DX1pYMjk3NTIwVjM9eQotCi1DT05GSUdfU05EX1NPQ19aWF9JMlM9eQotCi1DT05GSUdfU05EX1NPQ19aWF9QQ009eQotCi1DT05GSUdfU05EX1NPQ19OQVU4ODEwPXkKLQotIyBDT05GSUdfU05EX0VYVFJBX0NUUkwgaXMgbm90IHNldAotCi1DT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST15Ci0KLSMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0Ci0KLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLSN4Zi5saUAyMDIzMDQyOCBhZGQgZm9yIGNvZGVjIGVuZAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9tb2JpbGV0ZWstdGVzdGVyLXJkaXQvbW9iaWxldGVrLXRlc3Rlci1yZGl0LmJiIGIvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9tb2JpbGV0ZWstdGVzdGVyLXJkaXQvbW9iaWxldGVrLXRlc3Rlci1yZGl0LmJiCmluZGV4IGRkOTk4ODUuLjFhZjIyYTYgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbW9iaWxldGVrLXRlc3Rlci1yZGl0L21vYmlsZXRlay10ZXN0ZXItcmRpdC5iYgorKysgYi9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL21vYmlsZXRlay10ZXN0ZXItcmRpdC9tb2JpbGV0ZWstdGVzdGVyLXJkaXQuYmIKQEAgLTQsNyArNCw3IEBACiBMSUNFTlNFID0gIkNMT1NFRCIKIExJQ0VOU0UgPSAiQ0xPU0VEIgogTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YjFlMDdlOGQ4OGUyNjI2M2U3MWQzYTllMmFhOWEyZmYiCi1ERVBFTkRTICs9ICJsaWJseW5xLWNhbGwgbGlibHlucS1zbXMgbGlibHlucS1uZXR3b3JrIGxpYmx5bnEtc2ltIGxpYmx5bnEtZGF0YSIKK0RFUEVORFMgKz0gImxpYmx5bnEtY2FsbCBsaWJseW5xLXNtcyBsaWJseW5xLW5ldHdvcmsgbGlibHlucS1zaW0gbGlibHlucS1kYXRhIGxpYmx5bnEtcXNlci1kYXRhIgogI2luaGVyaXQgd29ya29uc3JjCiBXT1JLT05TUkMgPSAiJHtUT1BESVJ9Ly4uL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvTW9iaWxldGVrX1Rlc3Rlcl9SRElUIgogRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0iJHtUT1BESVJ9Ly4uL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvOiIKZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXFzZXItZGF0YS9seW5xLXFzZXItZGF0YS5jcHAgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1xc2VyLWRhdGEvbHlucS1xc2VyLWRhdGEuY3BwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggY2ZmZmE3OS4uZTEyMzRlNQotLS0gYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1xc2VyLWRhdGEvbHlucS1xc2VyLWRhdGEuY3BwCisrKyBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXFzZXItZGF0YS9seW5xLXFzZXItZGF0YS5jcHAKQEAgLTIzLDcgKzIzLDcgQEAKIHN0YXRpYyBwdGhyZWFkX211dGV4X3Qgc19xc2VyX2RhdGFfY2JfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwogc3RhdGljIHB0aHJlYWRfY29uZF90IHNfcXNlcl9kYXRhX2NiX2NvbmQgPSBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVI7CiAKLSNkZWZpbmUgZGF0YV94bWxfcGF0aCAiL2RhdGEvbHlucV9xc2VyX2RhdGFfYXBuLnhtbCIKKyNkZWZpbmUgZGF0YV94bWxfcGF0aCAiL21udC91c2VyZGF0YS9seW5xX3FzZXJfZGF0YV9hcG4ueG1sIgogCiBzdGF0aWMgcXNlcl9kYXRhX2NhbGxfZXZ0X2NiX3Qgc19kYXRhX2NhbGxfY2IgPSBOVUxMOwogY29uc3QgaW50IGFwbmRiX29mZnNldCA9IDY4MzsKQEAgLTMxMSw5ICszMTEsMjMgQEAKICAgICAgICAgZ290byBGQUlMRUQ7CiAgICAgfQogICAgIG1vZGlmeV9ub2RlID0gbm9kZS0+eG1sQ2hpbGRyZW5Ob2RlOwotICAgIG1vZGlmeV9ub2RlID0gbW9kaWZ5X25vZGUtPm5leHQ7Ci0gICAgZm9yIChub2RlX251bSA9IDA7bm9kZV9udW08KGludClwcm9maWxlX2lkeDtub2RlX251bSsrKQorICAgIGlmKG1vZGlmeV9ub2RlICE9IE5VTEwpCiAgICAgeworICAgICAgICBtb2RpZnlfbm9kZSA9IG1vZGlmeV9ub2RlLT5uZXh0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBMWUVSUkxPRygibW9kaWZ5X25vZGUgaXMgbnVsbFxuIik7CisgICAgICAgIGdvdG8gRkFJTEVEOworICAgIH0KKyAgICBMWUlORkxPRygicHJvZmlsZV9pZHggaXMgJWRcbiIsIChpbnQpcHJvZmlsZV9pZHgpOworICAgIGZvciAobm9kZV9udW0gPSAwOyhub2RlX251bTwoaW50KXByb2ZpbGVfaWR4KTtub2RlX251bSsrKQorICAgIHsKKyAgICAgICAgaWYobW9kaWZ5X25vZGUgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgTFlFUlJMT0coIm1vZGlmeV9ub2RlIGlzIG51bGxcbiIpOworICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgIH0KICAgICAgICAgaWYgKHhtbEdldFByb3AobW9kaWZ5X25vZGUsICJwcm9maWxlX2lkeCIpID09IE5VTEwpICAvL051bGwgTm9kZQogICAgICAgICB7CiAgICAgICAgICAgICBtb2RpZnlfbm9kZSA9IG1vZGlmeV9ub2RlLT5uZXh0OwpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9Nb2JpbGV0ZWtfVGVzdGVyX1JESVQvZGF0YS5jcHAgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL01vYmlsZXRla19UZXN0ZXJfUkRJVC9kYXRhLmNwcAppbmRleCBjN2I0OWU1Li5hY2Y5YTMwIDEwMDc1NQotLS0gYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL01vYmlsZXRla19UZXN0ZXJfUkRJVC9kYXRhLmNwcAorKysgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL01vYmlsZXRla19UZXN0ZXJfUkRJVC9kYXRhLmNwcApAQCAtMSw3ICsxLDExIEBACiAjaW5jbHVkZSA8c3RkaW8uaD4NCiAjaW5jbHVkZSA8c3RkbGliLmg+DQogI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+DQorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+DQogI2luY2x1ZGUgPGxpYmRhdGEvbHlucV9kYXRhLmg+DQorI2luY2x1ZGUgPGluY2x1ZGUvbHlucS1xc2VyLWRhdGEuaD4NCiAjaW5jbHVkZSAiZGF0YS5oIg0KICNkZWZpbmUgVEVTVF9SRVNVTFQgImx5bnFfcmVzdWx0PSINCiANCkBAIC04NSwzICs4OSwzMTcgQEAKICAgICBwcmludGYoIiVzJWRcbiIsVEVTVF9SRVNVTFQscmV0KTsNCiAgICAgcmV0dXJuIHJldDsgIA0KIH0NCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1RU0VSLURBVEE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisNCitxc2VyX2RhdGFfY2FsbF9zdGF0ZV9zIHN0YXRlID0gezB9Ow0KK3ZvaWQgZXZ0X2NiKHFzZXJfZGF0YV9jYWxsX3N0YXRlX3MgKnN0YXRlKQ0KK3sNCisgICAgY2hhciBidWZfaXBbMjBdID0gezB9Ow0KKyAgICBjaGFyIGJ1Zl9nYXRld2F5WzIwXSA9IHswfTsNCisgICAgY2hhciBidWZfcHJpX2Ruc1syMF0gPSB7MH07DQorICAgIGNoYXIgYnVmX3NlY19kbnNbMjBdID0gezB9Ow0KKyAgICBwcmludGYoIkxZTlFfUVNFUl9EQVRBX0lOSVQ6IHByb2ZpbGVfaWR4PSVkLCBuYW1lPSVzLCBpcF9mYW1pbHk9JWQsIHN0YXRlPSVkLCBlcnJvcj0lZFxuIg0KKyAgICAgICAgLCBzdGF0ZS0+cHJvZmlsZV9pZHgsIHN0YXRlLT5uYW1lLCBzdGF0ZS0+aXBfZmFtaWx5LCBzdGF0ZS0+c3RhdGUsIHN0YXRlLT5lcnIpOw0KKyAgICBwcmludGYoIkxZTlFfUVNFUl9EQVRBX0lOSVQ6IHY0LmlwPSVzLCB2NC5nYXRld2F5PSVzLCB2NC5wcmlfZG5zPSVzLCB2NC5zZWNfZG5zPSVzXG4iDQorICAgICAgICAsIGluZXRfbnRvYShzdGF0ZS0+djQuaXApLCBpbmV0X250b2Eoc3RhdGUtPnY0LmdhdGV3YXkpLCBpbmV0X250b2Eoc3RhdGUtPnY0LnByaV9kbnMpLCBpbmV0X250b2Eoc3RhdGUtPnY0LnNlY19kbnMpKTsNCisgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmKHN0YXRlLT52Ni5pcCksIGJ1Zl9pcCwgc2l6ZW9mKGJ1Zl9pcCkpOw0KKyAgICBpbmV0X250b3AoQUZfSU5FVDYsICYoc3RhdGUtPnY2LmdhdGV3YXkpLCBidWZfZ2F0ZXdheSwgc2l6ZW9mKGJ1Zl9nYXRld2F5KSk7DQorICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJihzdGF0ZS0+djYucHJpX2RucyksIGJ1Zl9wcmlfZG5zLCBzaXplb2YoYnVmX3ByaV9kbnMpKTsNCisgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmKHN0YXRlLT52Ni5zZWNfZG5zKSwgYnVmX3NlY19kbnMsIHNpemVvZihidWZfc2VjX2RucykpOw0KKyAgICBwcmludGYoIkxZTlFfUVNFUl9EQVRBX0lOSVQ6IHY2LmlwPSVzLCB2Ni5nYXRld2F5PSVzLCB2Ni5wcmlfZG5zPSVzLCB2Ni5zZWNfZG5zPSVzXG4iDQorICAgICAgICAsIGJ1Zl9pcCwgYnVmX2dhdGV3YXksIGJ1Zl9wcmlfZG5zLCBidWZfc2VjX2Rucyk7DQorfQ0KKw0KK2ludCBxc2VyX2luaXRfZGF0YShpbnQgYXJnYywgY2hhciAqYXJndltdLCBpbnQgc3BfdGVzdCkNCit7ICAgDQorICAgIHByaW50ZigiWyVzXVslZF0gZW50ZXIhXG4iLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7DQorICAgIGludCByZXQgPSAtMTsNCisgICAgaW50IHVUb2tlbiA9IGF0b2koYXJndlsxXSk7DQorICAgIHJldCA9IHFzZXJfZGF0YV9jYWxsX2luaXQoZXZ0X2NiKTsNCisgICAgcHJpbnRmKCIlcyVkXG4iLFRFU1RfUkVTVUxULHJldCk7DQorICAgIHJldHVybiByZXQ7DQorfQ0KKw0KK2ludCBxc2VyX2RlaW5pdF9kYXRhKGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBzcF90ZXN0KQ0KK3sNCisgICAgcHJpbnRmKCJbJXNdWyVkXSBlbnRlciFcbiIsX19GVU5DVElPTl9fLF9fTElORV9fKTsNCisNCisgICAgcXNlcl9kYXRhX2NhbGxfZGVzdHJveSgpOw0KKyAgICBwcmludGYoIkxZTlFfUVNFUl9EQVRBX0RFSU5JVCBlbmRcbiIpOw0KKyAgICByZXR1cm4gMDsNCit9DQoraW50IHFzZXJfc2V0dXBfZGF0YV9jYWxsKGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBzcF90ZXN0KQ0KK3sNCisgICAgcHJpbnRmKCJbJXNdWyVkXSBlbnRlciFcbiIsX19GVU5DVElPTl9fLF9fTElORV9fKTsNCisgICAgaW50IHJldCA9IC0xOw0KKyAgICBxc2VyX2RhdGFfY2FsbF9zIGRhdGFjYWxsOw0KKyAgICBxc2VyX2RhdGFfY2FsbF9lcnJvcl9lIGVyciA9IFFTRVJfREFUQV9DQUxMX0VSUk9SX05PTkU7DQorICAgIGludCBpcF9mYW1pbHlfZmxhZyA9IGF0b2koYXJndlszXSk7DQorDQorICAgIGRhdGFjYWxsLnByb2ZpbGVfaWR4ID0gYXRvaShhcmd2WzFdKTsNCisgICAgZGF0YWNhbGwucmVjb25uZWN0ID0gKGJvb2wpYXRvaShhcmd2WzJdKTsNCisNCisgICAgaWYoc3RyY21wKGFyZ3ZbM10sICJRU0VSX0RBVEFfQ0FMTF9UWVBFX0lQVjQiKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBkYXRhY2FsbC5pcF9mYW1pbHkgPSBRU0VSX0RBVEFfQ0FMTF9UWVBFX0lQVjQ7DQorICAgIH0NCisgICAgZWxzZSBpZihzdHJjbXAoYXJndlszXSwgIlFTRVJfREFUQV9DQUxMX1RZUEVfSVBWNiIpID09IDApDQorICAgIHsNCisgICAgICAgIGRhdGFjYWxsLmlwX2ZhbWlseSA9IFFTRVJfREFUQV9DQUxMX1RZUEVfSVBWNjsNCisgICAgfQ0KKyAgICBlbHNlIGlmKHN0cmNtcChhcmd2WzNdLCAiUVNFUl9EQVRBX0NBTExfVFlQRV9JUFY0VjYiKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBkYXRhY2FsbC5pcF9mYW1pbHkgPSBRU0VSX0RBVEFfQ0FMTF9UWVBFX0lQVjRWNjsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHByaW50ZigiTFlOUV9RU0VSX1NFVFVQX0RBVEFfQ0FMTDogaXBfZmFtaWx5IGlucHV0IGVycm9yXG4iKTsNCisgICAgICAgIHJldHVybiByZXQ7DQorICAgIH0NCisNCisgICAgbWVtY3B5KGRhdGFjYWxsLmNkbWFfdXNlcm5hbWUsIGFyZ3ZbNF0sIFFTRVJfQVBOX1VTRVJOQU1FX1NJWkUrMSk7DQorICAgIG1lbWNweShkYXRhY2FsbC5jZG1hX3Bhc3N3b3JkLCBhcmd2WzVdLCBRU0VSX0FQTl9QQVNTV09SRF9TSVpFKzEpOyAgICANCisgICAgDQorICAgIHJldCA9IHFzZXJfZGF0YV9jYWxsX3N0YXJ0KCZkYXRhY2FsbCwgJmVycik7DQorICAgIHByaW50ZigiJXMlZFxuIixURVNUX1JFU1VMVCxyZXQpOw0KKyAgICByZXR1cm4gcmV0Ow0KK30NCitpbnQgcXNlcl9kZWFjdGl2dGVfZGF0YV9jYWxsKGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBzcF90ZXN0KQ0KK3sNCisgICAgcHJpbnRmKCJbJXNdWyVkXSBlbnRlciFcbiIsX19GVU5DVElPTl9fLF9fTElORV9fKTsNCisgICAgaW50IHJldCA9IC0xOw0KKyAgICBpbnQgcHJvZmlsZV9pZHhfaW50ID0gYXRvaShhcmd2WzFdKTsNCisgICAgcXNlcl9kYXRhX2NhbGxfaXBfZmFtaWx5X2UgaXBfZmFtaWx5ID0gUVNFUl9EQVRBX0NBTExfVFlQRV9JUFY0VjY7DQorICAgIHFzZXJfZGF0YV9jYWxsX2Vycm9yX2UgZXJyID0gUVNFUl9EQVRBX0NBTExfRVJST1JfTk9ORTsNCisNCisgICAgaWYoc3RyY21wKGFyZ3ZbMl0sICJRU0VSX0RBVEFfQ0FMTF9UWVBFX0lQVjQiKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBpcF9mYW1pbHkgPSBRU0VSX0RBVEFfQ0FMTF9UWVBFX0lQVjQ7DQorICAgIH0NCisgICAgZWxzZSBpZihzdHJjbXAoYXJndlsyXSwgIlFTRVJfREFUQV9DQUxMX1RZUEVfSVBWNiIpID09IDApDQorICAgIHsNCisgICAgICAgIGlwX2ZhbWlseSA9IFFTRVJfREFUQV9DQUxMX1RZUEVfSVBWNjsNCisgICAgfQ0KKyAgICBlbHNlIGlmKHN0cmNtcChhcmd2WzJdLCAiUVNFUl9EQVRBX0NBTExfVFlQRV9JUFY0VjYiKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBpcF9mYW1pbHkgPSBRU0VSX0RBVEFfQ0FMTF9UWVBFX0lQVjRWNjsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHByaW50ZigiTFlOUV9RU0VSX0RFQUNUSVZBVEVfREFUQV9DQUxMOiBpcF9mYW1pbHkgaW5wdXQgZXJyb3JcbiIpOw0KKyAgICAgICAgcmV0dXJuIHJldDsNCisgICAgfQ0KKw0KKyAgICByZXQgPSBxc2VyX2RhdGFfY2FsbF9zdG9wKHByb2ZpbGVfaWR4X2ludCwgaXBfZmFtaWx5LCAmZXJyKTsNCisgICAgcHJpbnRmKCIlcyVkXG4iLFRFU1RfUkVTVUxULHJldCk7DQorICAgIHJldHVybiByZXQ7DQorfQ0KK2ludCBxc2VyX2dldF9kYXRhX2NhbGxfbGlzdChpbnQgYXJnYywgY2hhciAqYXJndltdLCBpbnQgc3BfdGVzdCkNCit7DQorICAgIHByaW50ZigiWyVzXVslZF0gZW50ZXIhXG4iLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7DQorICAgIGludCByZXQgPSAtMTsNCisgICAgY2hhciBidWZfaXBbMjBdID0gezB9Ow0KKyAgICBjaGFyIGJ1Zl9nYXRld2F5WzIwXSA9IHswfTsNCisgICAgY2hhciBidWZfcHJpX2Ruc1syMF0gPSB7MH07DQorICAgIGNoYXIgYnVmX3NlY19kbnNbMjBdID0gezB9Ow0KKyAgICBxc2VyX2RhdGFfY2FsbF9pbmZvX3MgaW5mbyA9IHswfTsNCisgICAgaW50IHByb2ZpbGVfaWR4X2ludCA9IGF0b2koYXJndlsxXSk7DQorICAgIHFzZXJfZGF0YV9jYWxsX2Vycm9yX2UgZXJyID0gUVNFUl9EQVRBX0NBTExfRVJST1JfTk9ORTsNCisgICAgcXNlcl9kYXRhX2NhbGxfaXBfZmFtaWx5X2UgaXBfZmFtaWx5ID0gUVNFUl9EQVRBX0NBTExfVFlQRV9JUFY0VjY7DQorDQorICAgIGlmKHN0cmNtcChhcmd2WzJdLCAiUVNFUl9EQVRBX0NBTExfVFlQRV9JUFY0IikgPT0gMCkNCisgICAgew0KKyAgICAgICAgaXBfZmFtaWx5ID0gUVNFUl9EQVRBX0NBTExfVFlQRV9JUFY0Ow0KKyAgICB9DQorICAgIGVsc2UgaWYoc3RyY21wKGFyZ3ZbMl0sICJRU0VSX0RBVEFfQ0FMTF9UWVBFX0lQVjYiKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBpcF9mYW1pbHkgPSBRU0VSX0RBVEFfQ0FMTF9UWVBFX0lQVjY7DQorICAgIH0NCisgICAgZWxzZSBpZihzdHJjbXAoYXJndlsyXSwgIlFTRVJfREFUQV9DQUxMX1RZUEVfSVBWNFY2IikgPT0gMCkNCisgICAgew0KKyAgICAgICAgaXBfZmFtaWx5ID0gUVNFUl9EQVRBX0NBTExfVFlQRV9JUFY0VjY7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBwcmludGYoIkxZTlFfUVNFUl9HRVRfREFUQV9DQUxMX0xJU1Q6IGlwX2ZhbWlseSBpbnB1dCBlcnJvclxuIik7DQorICAgICAgICByZXR1cm4gcmV0Ow0KKyAgICB9DQorICAgIA0KKyAgICByZXQgPSBxc2VyX2RhdGFfY2FsbF9pbmZvX2dldChwcm9maWxlX2lkeF9pbnQsIGlwX2ZhbWlseSwgJmluZm8sICZlcnIpOw0KKyAgICBwcmludGYoIiVzJWRcbiIsVEVTVF9SRVNVTFQscmV0KTsNCisgICAgcHJpbnRmKCJMWU5RX1FTRVJfR0VUX0RBVEFfQ0FMTF9MSVNUOiBlcnJvcj0lZCwgcHJvZmlsZV9pZHg9JWQsIGlwX2ZhbWlseT0lZFxuIiwgZXJyLCBpbmZvLnByb2ZpbGVfaWR4LCBpbmZvLmlwX2ZhbWlseSk7DQorICAgIHByaW50ZigiTFlOUV9RU0VSX0dFVF9EQVRBX0NBTExfTElTVDogdjQubmFtZT0lcywgdjQuc3RhdGU9JWQsIHY0LnJlY29ubmVjdD0lZFxuIiwgaW5mby52NC5uYW1lLCBpbmZvLnY0LnN0YXRlLCBpbmZvLnY0LnJlY29ubmVjdCk7DQorICAgIHByaW50ZigiTFlOUV9RU0VSX0dFVF9EQVRBX0NBTExfTElTVDogdjQuaXA9JXMsIHY0LmdhdGV3YXk9JXMsIHY0LnByaV9kbnM9JXMsIHY0LnNlY19kbnM9JXNcbiINCisgICAgICAgICwgaW5ldF9udG9hKGluZm8udjQuYWRkci5pcCksIGluZXRfbnRvYShpbmZvLnY0LmFkZHIuZ2F0ZXdheSksIGluZXRfbnRvYShpbmZvLnY0LmFkZHIucHJpX2RucyksIGluZXRfbnRvYShpbmZvLnY0LmFkZHIuc2VjX2RucykpOw0KKw0KKyAgICBwcmludGYoIkxZTlFfUVNFUl9HRVRfREFUQV9DQUxMX0xJU1Q6IHY2Lm5hbWU9JXMsIHY2LnN0YXRlPSVkLCB2Ni5yZWNvbm5lY3Q9JWRcbiIsIGluZm8udjYubmFtZSwgaW5mby52Ni5zdGF0ZSwgaW5mby52Ni5yZWNvbm5lY3QpOw0KKyAgICBpbmV0X250b3AoQUZfSU5FVDYsICYoaW5mby52Ni5hZGRyLmlwKSwgYnVmX2lwLCBzaXplb2YoYnVmX2lwKSk7DQorICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJihpbmZvLnY2LmFkZHIuZ2F0ZXdheSksIGJ1Zl9nYXRld2F5LCBzaXplb2YoYnVmX2dhdGV3YXkpKTsNCisgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmKGluZm8udjYuYWRkci5wcmlfZG5zKSwgYnVmX3ByaV9kbnMsIHNpemVvZihidWZfcHJpX2RucykpOw0KKyAgICBpbmV0X250b3AoQUZfSU5FVDYsICYoaW5mby52Ni5hZGRyLnNlY19kbnMpLCBidWZfc2VjX2Rucywgc2l6ZW9mKGJ1Zl9zZWNfZG5zKSk7DQorICAgIHByaW50ZigiTFlOUV9RU0VSX0dFVF9EQVRBX0NBTExfTElTVDogdjYuaXA9JXMsIHY2LmdhdGV3YXk9JXMsIHY2LnByaV9kbnM9JXMsIHY2LnNlY19kbnM9JXNcbiINCisgICAgICAgICwgYnVmX2lwLCBidWZfZ2F0ZXdheSwgYnVmX3ByaV9kbnMsIGJ1Zl9zZWNfZG5zKTsNCisgICAgcmV0dXJuIHJldDsNCit9DQorDQoraW50IGx5bnFfcXNlcl9hcG5fc2V0KGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBzcF90ZXN0KQ0KK3sNCisgICAgcHJpbnRmKCJbJXNdWyVkXSBlbnRlciFcbiIsX19GVU5DVElPTl9fLF9fTElORV9fKTsNCisgICAgaW50IHJldCA9IC0xOw0KKyAgICBxc2VyX2Fwbl9pbmZvX3MgYXBuID0geycxJywgUVNFUl9BUE5fUERQX1RZUEVfSVBWNFY2LCBRU0VSX0FQTl9BVVRIX1BST1RPX0RFRkFVTFQsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9Ow0KKw0KKyAgICBhcG4ucHJvZmlsZV9pZHggPSBhdG9pKGFyZ3ZbMV0pOw0KKyAgICAvL3NldCBwZHB0eXBlDQorICAgIGlmKHN0cmNtcChhcmd2WzJdLCAiUVNFUl9BUE5fUERQX1RZUEVfSVBWNCIpID09IDApDQorICAgIHsNCisgICAgICAgIGFwbi5wZHBfdHlwZSA9IFFTRVJfQVBOX1BEUF9UWVBFX0lQVjQ7DQorICAgIH0NCisgICAgZWxzZSBpZihzdHJjbXAoYXJndlsyXSwgIlFTRVJfQVBOX1BEUF9UWVBFX1BQUCIpID09IDApDQorICAgIHsNCisgICAgICAgIGFwbi5wZHBfdHlwZSA9IFFTRVJfQVBOX1BEUF9UWVBFX1BQUDsNCisgICAgfQ0KKyAgICBlbHNlIGlmKHN0cmNtcChhcmd2WzJdLCAiUVNFUl9BUE5fUERQX1RZUEVfSVBWNiIpID09IDApDQorICAgIHsNCisgICAgICAgIGFwbi5wZHBfdHlwZSA9IFFTRVJfQVBOX1BEUF9UWVBFX0lQVjY7DQorICAgIH0NCisgICAgZWxzZSBpZihzdHJjbXAoYXJndlsyXSwgIlFTRVJfQVBOX1BEUF9UWVBFX0lQVjRWNiIpID09IDApDQorICAgIHsNCisgICAgICAgIGFwbi5wZHBfdHlwZSA9IFFTRVJfQVBOX1BEUF9UWVBFX0lQVjRWNjsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHByaW50ZigiTFlOUV9RU0VSX0FQTl9TRVQ6IHBkcF90eXBlIGlucHV0IGVycm9yXG4iKTsNCisgICAgICAgIHJldHVybiByZXQ7DQorICAgIH0NCisgICAgLy9zZXQgYXV0aF9wcm90bw0KKyAgICBpZihzdHJjbXAoYXJndlszXSwgIlFTRVJfQVBOX0FVVEhfUFJPVE9fREVGQVVMVCIpID09IDApDQorICAgIHsNCisgICAgICAgIGFwbi5hdXRoX3Byb3RvID0gUVNFUl9BUE5fQVVUSF9QUk9UT19ERUZBVUxUOw0KKyAgICB9DQorICAgIGVsc2UgaWYoc3RyY21wKGFyZ3ZbM10sICJRU0VSX0FQTl9BVVRIX1BST1RPX05PTkUiKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBhcG4uYXV0aF9wcm90byA9IFFTRVJfQVBOX0FVVEhfUFJPVE9fTk9ORTsNCisgICAgfQ0KKyAgICBlbHNlIGlmKHN0cmNtcChhcmd2WzNdLCAiUVNFUl9BUE5fQVVUSF9QUk9UT19QQVAiKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBhcG4uYXV0aF9wcm90byA9IFFTRVJfQVBOX0FVVEhfUFJPVE9fUEFQOw0KKyAgICB9DQorICAgIGVsc2UgaWYoc3RyY21wKGFyZ3ZbM10sICJRU0VSX0FQTl9BVVRIX1BST1RPX0NIQVAiKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICBhcG4uYXV0aF9wcm90byA9IFFTRVJfQVBOX0FVVEhfUFJPVE9fQ0hBUDsNCisgICAgfQ0KKyAgICBlbHNlIGlmKHN0cmNtcChhcmd2WzNdLCAiUVNFUl9BUE5fQVVUSF9QUk9UT19QQVBfQ0hBUCIpID09IDApDQorICAgIHsNCisgICAgICAgIGFwbi5hdXRoX3Byb3RvID0gUVNFUl9BUE5fQVVUSF9QUk9UT19QQVBfQ0hBUDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHByaW50ZigiTFlOUV9RU0VSX0FQTl9TRVQ6IGF1dGhfcHJvdG8gaW5wdXQgZXJyb3JcbiIpOw0KKyAgICAgICAgcmV0dXJuIHJldDsNCisgICAgfQ0KKyAgICBtZW1jcHkoYXBuLmFwbl9uYW1lLGFyZ3ZbNF0sc2l6ZW9mKGFyZ3ZbNF0pKTsNCisgICAgbWVtY3B5KGFwbi51c2VybmFtZSxhcmd2WzVdLHNpemVvZihhcmd2WzVdKSk7DQorICAgIG1lbWNweShhcG4ucGFzc3dvcmQsYXJndls2XSxzaXplb2YoYXJndls2XSkpOw0KKyAgICBtZW1jcHkoYXBuLmFwbl90eXBlLGFyZ3ZbN10sc2l6ZW9mKGFyZ3ZbN10pKTsNCisgICAgcmV0ID0gcXNlcl9hcG5fc2V0KCZhcG4pOw0KKyAgICBwcmludGYoIiVzJWRcbiIsVEVTVF9SRVNVTFQscmV0KTsNCisgICAgcmV0dXJuIHJldDsNCit9DQoraW50IGx5bnFfcXNlcl9hcG5fZ2V0KGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBzcF90ZXN0KQ0KK3sNCisgICAgcHJpbnRmKCJbJXNdWyVkXSBlbnRlciFcbiIsX19GVU5DVElPTl9fLF9fTElORV9fKTsNCisgICAgaW50IHJldCA9IC0xOw0KKyAgICBxc2VyX2Fwbl9pbmZvX3MgYXBuID0gezB9Ow0KKyAgICBpbnQgcHJvZmlsZV9pZHhfaW50ID0gYXRvaShhcmd2WzFdKTsNCisgICAgcmV0ID0gcXNlcl9hcG5fZ2V0KHByb2ZpbGVfaWR4X2ludCwgJmFwbik7DQorICAgIHByaW50ZigiJXMlZFxuIixURVNUX1JFU1VMVCxyZXQpOw0KKyAgICBwcmludGYoIkxZTlFfUVNFUl9BUE5fR0VUOiBwZHBfdHlwZT0lZCwgYXV0aF9wcm90bz0lZCwgYXBuX25hbWU9JXMsIHVzZXJuYW1lPSVzLCBwYXNzd29yZD0lcywgYXBuX3R5cGU9JXNcbiINCisgICAgICAgICxhcG4uYXBuX3R5cGUsIGFwbi5hdXRoX3Byb3RvLCBhcG4uYXBuX25hbWUsIGFwbi51c2VybmFtZSwgYXBuLnBhc3N3b3JkLCBhcG4uYXBuX3R5cGUpOw0KKyAgICByZXR1cm4gcmV0Ow0KK30NCitpbnQgbHlucV9xc2VyX2Fwbl9hZGQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50IHNwX3Rlc3QpDQorew0KKyAgICBwcmludGYoIlslc11bJWRdIGVudGVyIVxuIixfX0ZVTkNUSU9OX18sX19MSU5FX18pOw0KKyAgICBpbnQgcmV0ID0gLTE7DQorICAgIHVuc2lnbmVkIGNoYXIgcHJvZmlsZV9pZHhfY2hhcjsNCisgICAgcXNlcl9hcG5fYWRkX3MgYXBuID0ge1FTRVJfQVBOX1BEUF9UWVBFX0lQVjRWNiwgUVNFUl9BUE5fQVVUSF9QUk9UT19ERUZBVUxULCAiY21uZXQiLCBOVUxMLCBOVUxMLCBOVUxMfTsNCisNCisgICAgaWYoc3RyY21wKGFyZ3ZbMV0sICJRU0VSX0FQTl9QRFBfVFlQRV9JUFY0IikgPT0gMCkNCisgICAgew0KKyAgICAgICAgYXBuLnBkcF90eXBlID0gUVNFUl9BUE5fUERQX1RZUEVfSVBWNDsNCisgICAgfQ0KKyAgICBlbHNlIGlmKHN0cmNtcChhcmd2WzFdLCAiUVNFUl9BUE5fUERQX1RZUEVfUFBQIikgPT0gMCkNCisgICAgew0KKyAgICAgICAgYXBuLnBkcF90eXBlID0gUVNFUl9BUE5fUERQX1RZUEVfUFBQOw0KKyAgICB9DQorICAgIGVsc2UgaWYoc3RyY21wKGFyZ3ZbMV0sICJRU0VSX0FQTl9QRFBfVFlQRV9JUFY2IikgPT0gMCkNCisgICAgew0KKyAgICAgICAgYXBuLnBkcF90eXBlID0gUVNFUl9BUE5fUERQX1RZUEVfSVBWNjsNCisgICAgfQ0KKyAgICBlbHNlIGlmKHN0cmNtcChhcmd2WzFdLCAiUVNFUl9BUE5fUERQX1RZUEVfSVBWNFY2IikgPT0gMCkNCisgICAgew0KKyAgICAgICAgYXBuLnBkcF90eXBlID0gUVNFUl9BUE5fUERQX1RZUEVfSVBWNFY2Ow0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcHJpbnRmKCJMWU5RX1FTRVJfQVBOX0FERDogcGRwX3R5cGUgaW5wdXQgZXJyb3JcbiIpOw0KKyAgICAgICAgcmV0dXJuIHJldDsNCisgICAgfQ0KKyAgICAvL3NldCBhdXRoX3Byb3RvDQorICAgIGlmKHN0cmNtcChhcmd2WzJdLCAiUVNFUl9BUE5fQVVUSF9QUk9UT19ERUZBVUxUIikgPT0gMCkNCisgICAgew0KKyAgICAgICAgYXBuLmF1dGhfcHJvdG8gPSBRU0VSX0FQTl9BVVRIX1BST1RPX0RFRkFVTFQ7DQorICAgIH0NCisgICAgZWxzZSBpZihzdHJjbXAoYXJndlsyXSwgIlFTRVJfQVBOX0FVVEhfUFJPVE9fTk9ORSIpID09IDApDQorICAgIHsNCisgICAgICAgIGFwbi5hdXRoX3Byb3RvID0gUVNFUl9BUE5fQVVUSF9QUk9UT19OT05FOw0KKyAgICB9DQorICAgIGVsc2UgaWYoc3RyY21wKGFyZ3ZbMl0sICJRU0VSX0FQTl9BVVRIX1BST1RPX1BBUCIpID09IDApDQorICAgIHsNCisgICAgICAgIGFwbi5hdXRoX3Byb3RvID0gUVNFUl9BUE5fQVVUSF9QUk9UT19QQVA7DQorICAgIH0NCisgICAgZWxzZSBpZihzdHJjbXAoYXJndlsyXSwgIlFTRVJfQVBOX0FVVEhfUFJPVE9fQ0hBUCIpID09IDApDQorICAgIHsNCisgICAgICAgIGFwbi5hdXRoX3Byb3RvID0gUVNFUl9BUE5fQVVUSF9QUk9UT19DSEFQOw0KKyAgICB9DQorICAgIGVsc2UgaWYoc3RyY21wKGFyZ3ZbMl0sICJRU0VSX0FQTl9BVVRIX1BST1RPX1BBUF9DSEFQIikgPT0gMCkNCisgICAgew0KKyAgICAgICAgYXBuLmF1dGhfcHJvdG8gPSBRU0VSX0FQTl9BVVRIX1BST1RPX1BBUF9DSEFQOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgcHJpbnRmKCJMWU5RX1FTRVJfQVBOX0FERDogYXV0aF9wcm90byBpbnB1dCBlcnJvclxuIik7DQorICAgICAgICByZXR1cm4gcmV0Ow0KKyAgICB9DQorICAgIG1lbWNweShhcG4uYXBuX25hbWUsYXJndlszXSxzaXplb2YoYXJndlszXSkpOw0KKyAgICBtZW1jcHkoYXBuLnVzZXJuYW1lLGFyZ3ZbNF0sc2l6ZW9mKGFyZ3ZbNF0pKTsNCisgICAgbWVtY3B5KGFwbi5wYXNzd29yZCxhcmd2WzVdLHNpemVvZihhcmd2WzVdKSk7DQorICAgIG1lbWNweShhcG4uYXBuX3R5cGUsYXJndls2XSxzaXplb2YoYXJndls2XSkpOw0KKyAgICBwcmludGYoIkxZTlFfUVNFUl9BUE5fQUREOiByZWFkeSB0byBxc2VyX2Fwbl9hZGRcbiIpOw0KKyAgICByZXQgPSBxc2VyX2Fwbl9hZGQoJmFwbiwgJnByb2ZpbGVfaWR4X2NoYXIpOw0KKyAgICBwcmludGYoIiVzJWQscHJvZmlsZSA9ICVkXG4iLFRFU1RfUkVTVUxULHJldCxwcm9maWxlX2lkeF9jaGFyKTsNCisgICAgcmV0dXJuIHJldDsNCit9DQoraW50IGx5bnFfcXNlcl9hcG5fZGVsKGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBzcF90ZXN0KQ0KK3sNCisgICAgcHJpbnRmKCJbJXNdWyVkXSBlbnRlciFcbiIsX19GVU5DVElPTl9fLF9fTElORV9fKTsNCisgICAgaW50IHJldCA9IC0xOw0KKyAgICBpbnQgcHJvZmlsZV9pZHhfaW50ID0gYXRvaShhcmd2WzFdKTsNCisgICAgcmV0ID0gcXNlcl9hcG5fZGVsKHByb2ZpbGVfaWR4X2ludCk7DQorICAgIHByaW50ZigiJXMlZFxuIixURVNUX1JFU1VMVCxyZXQpOw0KKyAgICByZXR1cm4gcmV0Ow0KK30NCitpbnQgbHlucV9xc2VyX2Fwbl9nZXRfbGlzdChpbnQgYXJnYywgY2hhciAqYXJndltdLCBpbnQgc3BfdGVzdCkNCit7DQorICAgIHByaW50ZigiWyVzXVslZF0gZW50ZXIhXG4iLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7DQorICAgIGludCByZXQgPSAtMTsNCisgICAgcXNlcl9hcG5faW5mb19saXN0X3MgYXBuX2xpc3QgPSB7MH07DQorICAgIHJldCA9IHFzZXJfYXBuX2dldF9saXN0KCZhcG5fbGlzdCk7DQorICAgIHByaW50ZigiJXMlZFxuIixURVNUX1JFU1VMVCxyZXQpOw0KKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgYXBuX2xpc3QuY250OyBpKyspDQorICAgIHsNCisgICAgICAgIHByaW50ZigiTFlOUV9RU0VSX0FQTl9HRVRfTElTVDogcGRwX3R5cGU9JWQsIGF1dGhfcHJvdG89JWQsIGFwbl9uYW1lPSVzLCB1c2VybmFtZT0lcywgcGFzc3dvcmQ9JXMsIGFwbl90eXBlPSVzXG4iDQorICAgICAgICAgICAgLGFwbl9saXN0LmFwbltpXS5hcG5fdHlwZSwgYXBuX2xpc3QuYXBuW2ldLmF1dGhfcHJvdG8sIGFwbl9saXN0LmFwbltpXS5hcG5fbmFtZSwgYXBuX2xpc3QuYXBuW2ldLnVzZXJuYW1lLCBhcG5fbGlzdC5hcG5baV0ucGFzc3dvcmQsIGFwbl9saXN0LmFwbltpXS5hcG5fdHlwZSk7DQorICAgIH0NCisgICAgcmV0dXJuIHJldDsNCit9DQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9Nb2JpbGV0ZWtfVGVzdGVyX1JESVQvZGF0YS5oIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9Nb2JpbGV0ZWtfVGVzdGVyX1JESVQvZGF0YS5oCmluZGV4IDhjYTg0MWUuLmFmNzBmMmUgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvTW9iaWxldGVrX1Rlc3Rlcl9SRElUL2RhdGEuaAorKysgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL01vYmlsZXRla19UZXN0ZXJfUkRJVC9kYXRhLmgKQEAgLTYsMyArNiwxMyBAQAogaW50IHdhaXRfZGF0YV9jYWxsKGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBzcF90ZXN0KTsNCiBpbnQgc2V0dXBfZGF0YV9jYWxsX3NwKGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBzcF90ZXN0KTsNCiBpbnQgZ2V0X2RhdGFfY2FsbF9saXN0KGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBzcF90ZXN0KTsNCitpbnQgcXNlcl9pbml0X2RhdGEoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50IHNwX3Rlc3QpOw0KK2ludCBxc2VyX2RlaW5pdF9kYXRhKGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBzcF90ZXN0KTsNCitpbnQgcXNlcl9zZXR1cF9kYXRhX2NhbGwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50IHNwX3Rlc3QpOw0KK2ludCBxc2VyX2RlYWN0aXZ0ZV9kYXRhX2NhbGwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50IHNwX3Rlc3QpOw0KK2ludCBxc2VyX2dldF9kYXRhX2NhbGxfbGlzdChpbnQgYXJnYywgY2hhciAqYXJndltdLCBpbnQgc3BfdGVzdCk7DQoraW50IGx5bnFfcXNlcl9hcG5fc2V0KGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBzcF90ZXN0KTsNCitpbnQgbHlucV9xc2VyX2Fwbl9nZXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50IHNwX3Rlc3QpOw0KK2ludCBseW5xX3FzZXJfYXBuX2FkZChpbnQgYXJnYywgY2hhciAqYXJndltdLCBpbnQgc3BfdGVzdCk7DQoraW50IGx5bnFfcXNlcl9hcG5fZGVsKGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBzcF90ZXN0KTsNCitpbnQgbHlucV9xc2VyX2Fwbl9nZXRfbGlzdChpbnQgYXJnYywgY2hhciAqYXJndltdLCBpbnQgc3BfdGVzdCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9Nb2JpbGV0ZWtfVGVzdGVyX1JESVQvbHlucS5oIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9Nb2JpbGV0ZWtfVGVzdGVyX1JESVQvbHlucS5oCmluZGV4IDY0NzI5NDIuLmQzN2YxMGQgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvTW9iaWxldGVrX1Rlc3Rlcl9SRElUL2x5bnEuaAorKysgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL01vYmlsZXRla19UZXN0ZXJfUkRJVC9seW5xLmgKQEAgLTQ2LDQgKzQ2LDE2IEBACiAjZGVmaW5lIExZTlFfU0VUVVBfREFUQV9DQUxMX1NQIExZTlFfREFUQSArIDYKICNkZWZpbmUgTFlOUV9HRVRfREFUQV9DQUxMX0xJU1QgTFlOUV9EQVRBICsgNwogCisjZGVmaW5lIExZTlFfUVNFUl9EQVRBIExZTlFfQkFTRSArIDcwCisjZGVmaW5lIExZTlFfUVNFUl9EQVRBX0lOSVQgTFlOUV9RU0VSX0RBVEEgKyAxCisjZGVmaW5lIExZTlFfUVNFUl9EQVRBX0RFSU5JVCBMWU5RX1FTRVJfREFUQSArIDIKKyNkZWZpbmUgTFlOUV9RU0VSX1NFVFVQX0RBVEFfQ0FMTCBMWU5RX1FTRVJfREFUQSArIDMKKyNkZWZpbmUgTFlOUV9RU0VSX0RFQUNUSVZBVEVfREFUQV9DQUxMIExZTlFfUVNFUl9EQVRBICsgNAorI2RlZmluZSBMWU5RX1FTRVJfR0VUX0RBVEFfQ0FMTF9MSVNUIExZTlFfUVNFUl9EQVRBICsgNQorI2RlZmluZSBMWU5RX1FTRVJfQVBOX1NFVCBMWU5RX1FTRVJfREFUQSArIDYKKyNkZWZpbmUgTFlOUV9RU0VSX0FQTl9HRVQgTFlOUV9RU0VSX0RBVEEgKyA3CisjZGVmaW5lIExZTlFfUVNFUl9BUE5fQUREIExZTlFfUVNFUl9EQVRBICsgOAorI2RlZmluZSBMWU5RX1FTRVJfQVBOX0RFTCBMWU5RX1FTRVJfREFUQSArIDkKKyNkZWZpbmUgTFlOUV9RU0VSX0FQTl9HRVRfTElTVCBMWU5RX1FTRVJfREFUQSArIDEwCisKIGludCBjcmVhdGVfc29ja2V0KGNvbnN0IGludCBkb21haW4sIGNvbnN0IGludCB0eXBlLCBjb25zdCBpbnQgcHJvdG9jb2wsY29uc3QgaW50IHBvcnQsY29uc3QgY2hhciAqSVAsY29uc3QgY2hhciAqc29ja2V0X25hbWUsdm9pZCAqIGFkZHIsaW50IGJhY2tsb2csaW50IGNzKTsKZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvTW9iaWxldGVrX1Rlc3Rlcl9SRElUL21ha2VmaWxlIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9Nb2JpbGV0ZWtfVGVzdGVyX1JESVQvbWFrZWZpbGUKaW5kZXggMmVjMDQzYi4uNTkyMmU3NyAxMDA3NTUKLS0tIGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9Nb2JpbGV0ZWtfVGVzdGVyX1JESVQvbWFrZWZpbGUKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9Nb2JpbGV0ZWtfVGVzdGVyX1JESVQvbWFrZWZpbGUKQEAgLTI4LDYgKzI4LDcgQEAKICAgICAtbGx5bnEtbmV0d29yayBcCiAgICAgLWxseW5xLWRhdGEgXAogICAgIC1sbHlucS1zaW0gXAorICAgIC1sbHlucS1xc2VyLWRhdGEgXAogCiAKIFNPVVJDRVMgPSBtYWluLmNwcCBjYy5jcHAgZGlzcGF0Y2guY3BwIHNtcy5jcHAgbmV0d29yay5jcHAgZGF0YS5jcHAKZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvTW9iaWxldGVrX1Rlc3Rlcl9SRElUL3JlcV9jb21tYW5kcy5oIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9Nb2JpbGV0ZWtfVGVzdGVyX1JESVQvcmVxX2NvbW1hbmRzLmgKaW5kZXggZDhlMjc1Yy4uYTUwMTdiNSAxMDA3NTUKLS0tIGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9Nb2JpbGV0ZWtfVGVzdGVyX1JESVQvcmVxX2NvbW1hbmRzLmgKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9Nb2JpbGV0ZWtfVGVzdGVyX1JESVQvcmVxX2NvbW1hbmRzLmgKQEAgLTI4LDkgKzI4LDIwIEBACiAgICAgeyJMWU5RX0RBVEFfREVJTklUIixkZWluaXRfZGF0YSwgImRlaW5pdCB0aGUgZGF0YSBsaWIiLCBMWU5RX0RBVEFfREVJTklUfSwKICAgICB7IkxZTlFfU0VUVVBfREFUQV9DQUxMIixzZXR1cF9kYXRhX2NhbGwsICJzZXQgdXAgZGF0YSBjYWxsIiwgTFlOUV9TRVRVUF9EQVRBX0NBTEx9LAogICAgIHsiTFlOUV9TRVRVUF9EQVRBX0NBTExfU1AiLHNldHVwX2RhdGFfY2FsbF9zcCwgInNldCB1cCBkYXRhIGNhbGwgc3AiLCBMWU5RX1NFVFVQX0RBVEFfQ0FMTF9TUH0sCi0gICAgeyJMWU5RX0RFQUNUSVZBVEVfREFUQV9DQUxMIixkZWFjdGl2dGVfZGF0YV9jYWxsLCAid2FpdCBkYXRhIGNhbGwiLCBMWU5RX0RFQUNUSVZBVEVfREFUQV9DQUxMfSwKKyAgICB7IkxZTlFfREVBQ1RJVkFURV9EQVRBX0NBTEwiLGRlYWN0aXZ0ZV9kYXRhX2NhbGwsICJkZWFjdGl2ZSBkYXRhIGNhbGwiLCBMWU5RX0RFQUNUSVZBVEVfREFUQV9DQUxMfSwKICAgICB7IkxZTlFfV0FJVF9EQVRBX0NBTEwiLHdhaXRfZGF0YV9jYWxsLCAid2FpdCBkYXRhIGNhbGwiLCBMWU5RX1dBSVRfREFUQV9DQUxMfSwKLSAgICB7IkxZTlFfR0VUX0RBVEFfQ0FMTF9MSVNUIixnZXRfZGF0YV9jYWxsX2xpc3QsICJ3YWl0IGRhdGEgY2FsbCIsIExZTlFfR0VUX0RBVEFfQ0FMTF9MSVNUfSwKKyAgICB7IkxZTlFfR0VUX0RBVEFfQ0FMTF9MSVNUIixnZXRfZGF0YV9jYWxsX2xpc3QsICJnZXQgZGF0YSBjYWxsIGxpc3QiLCBMWU5RX0dFVF9EQVRBX0NBTExfTElTVH0sCisvL1FTRVJfREFUQQorICAgIHsiTFlOUV9RU0VSX0RBVEFfSU5JVCIscXNlcl9pbml0X2RhdGEsICJpbml0IHRoZSBkYXRhIGxpYiIsIExZTlFfUVNFUl9EQVRBX0lOSVR9LAorICAgIHsiTFlOUV9RU0VSX0RBVEFfREVJTklUIixxc2VyX2RlaW5pdF9kYXRhLCAiZGVpbml0IHRoZSBkYXRhIGxpYiIsIExZTlFfUVNFUl9EQVRBX0RFSU5JVH0sCisgICAgeyJMWU5RX1FTRVJfU0VUVVBfREFUQV9DQUxMIixxc2VyX3NldHVwX2RhdGFfY2FsbCwgInNldCB1cCBkYXRhIGNhbGwiLCBMWU5RX1FTRVJfU0VUVVBfREFUQV9DQUxMfSwKKyAgICB7IkxZTlFfUVNFUl9ERUFDVElWQVRFX0RBVEFfQ0FMTCIscXNlcl9kZWFjdGl2dGVfZGF0YV9jYWxsLCAiZGVhY3RpdmUgZGF0YSBjYWxsIiwgTFlOUV9RU0VSX0RFQUNUSVZBVEVfREFUQV9DQUxMfSwKKyAgICB7IkxZTlFfUVNFUl9HRVRfREFUQV9DQUxMX0xJU1QiLHFzZXJfZ2V0X2RhdGFfY2FsbF9saXN0LCAiZ2V0IGRhdGEgY2FsbCBsaXN0IiwgTFlOUV9RU0VSX0dFVF9EQVRBX0NBTExfTElTVH0sCisgICAgeyJMWU5RX1FTRVJfQVBOX1NFVCIsbHlucV9xc2VyX2Fwbl9zZXQsICJzZXQgYXBuIiwgTFlOUV9RU0VSX0FQTl9TRVR9LAorICAgIHsiTFlOUV9RU0VSX0FQTl9HRVQiLGx5bnFfcXNlcl9hcG5fZ2V0LCAiZ2V0IGFwbiIsIExZTlFfUVNFUl9BUE5fR0VUfSwKKyAgICB7IkxZTlFfUVNFUl9BUE5fQUREIixseW5xX3FzZXJfYXBuX2FkZCwgInNldCBhcG4iLCBMWU5RX1FTRVJfQVBOX0FERH0sCisgICAgeyJMWU5RX1FTRVJfQVBOX0RFTCIsbHlucV9xc2VyX2Fwbl9kZWwsICJkZWwgYXBuIiwgTFlOUV9RU0VSX0FQTl9ERUx9LAorICAgIHsiTFlOUV9RU0VSX0FQTl9HRVRfTElTVCIsbHlucV9xc2VyX2Fwbl9nZXRfbGlzdCwgImdldCBhcG4gbGlzdCIsIExZTlFfUVNFUl9BUE5fR0VUX0xJU1R9LAogICAgIHsoY2hhciAqKU5VTEwsIE5VTEwsIChjaGFyICopTlVMTCAsIC0xfSwKIAogCg==