ZGlmZiAtLWdpdCBhL0NPUkUvSEREL2luYy93bGFuX2hkZF9hc3NvYy5oIGIvQ09SRS9IREQvaW5jL3dsYW5faGRkX2Fzc29jLmgKaW5kZXggZjBiMWNhNS4uYmI4YmUzMiAxMDA2NDQKLS0tIGEvQ09SRS9IREQvaW5jL3dsYW5faGRkX2Fzc29jLmgKKysrIGIvQ09SRS9IREQvaW5jL3dsYW5faGRkX2Fzc29jLmgKQEAgLTIzLDYgKzIzLDkgQEAKICNkZWZpbmUgSEREX0NPTk5FQ1RJT05fSF9fIAogI2luY2x1ZGUgPHdsYW5faGRkX21pYi5oPgogI2RlZmluZSBIRERfTUFYX05VTV9JQlNTX1NUQSAoIDQgKQorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisjZGVmaW5lIEhERF9NQVhfTlVNX1RETFNfU1RBICggNCApCisjZW5kaWYKICNkZWZpbmUgVEtJUF9DT1VOVEVSX01FQVNVUkVfU1RBUlRFRCAxCiAjZGVmaW5lIFRLSVBfQ09VTlRFUl9NRUFTVVJFX1NUT1BFRCAgMCAKIC8qIFRpbWVvdXQgKGluIG1zKSBmb3IgTGluayB0byBVcCBiZWZvcmUgUmVnaXN0ZXJpbmcgU3RhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvQ09SRS9IREQvaW5jL3dsYW5faGRkX2NmZy5oIGIvQ09SRS9IREQvaW5jL3dsYW5faGRkX2NmZy5oCmluZGV4IDMyN2I3OGYuLmViZTliYTEgMTAwNjQ0Ci0tLSBhL0NPUkUvSEREL2luYy93bGFuX2hkZF9jZmcuaAorKysgYi9DT1JFL0hERC9pbmMvd2xhbl9oZGRfY2ZnLmgKQEAgLTE0MTAsNiArMTQxMCwxMiBAQAogI2RlZmluZSBDRkdfRU5BQkxFX1JYX1NUQkNfREVGQVVMVCAgICAgICAgICAgICAgICggMSApCiAKIAorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisjZGVmaW5lIENGR19URExTX1NVUFBPUlRfRU5BQkxFICAgICAgICAgICAgICAgImdFbmFibGVURExTU3VwcG9ydCIKKyNkZWZpbmUgQ0ZHX1RETFNfU1VQUE9SVF9FTkFCTEVfTUlOICAgICAgICAgICAoIDAgKQorI2RlZmluZSBDRkdfVERMU19TVVBQT1JUX0VOQUJMRV9NQVggICAgICAgICAgICggMSApCisjZGVmaW5lIENGR19URExTX1NVUFBPUlRfRU5BQkxFX0RFRkFVTFQgICAgICAgKCAwICkKKyNlbmRpZgogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiAgIFR5cGUgZGVjbGFyYXRpb25zCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyAKQEAgLTE3MjEsNiArMTcyNyw5IEBACiAgICB2X1UzMl90ICAgICAgICAgICAgICAgICAgICAgbnVtQnVmZkFkdmVydDsKICAgIHZfVThfdCAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVfY2hhbjE2NTsKICAgIHZfQk9PTF90ICAgICAgICAgICAgICAgICAgICBlbmFibGVSeFNUQkM7CisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMgICAgICAgCisgICB2X0JPT0xfdCAgICAgICAgICAgICAgICAgICAgZkVuYWJsZVRETFNTdXBwb3J0OworI2VuZGlmCiB9IGhkZF9jb25maWdfdDsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogICBGdW5jdGlvbiBkZWNsYXJhdGlvbnMgYW5kIGRvY3VtZW5hdGlvbgpkaWZmIC0tZ2l0IGEvQ09SRS9IREQvc3JjL3dsYW5faGRkX2Fzc29jLmMgYi9DT1JFL0hERC9zcmMvd2xhbl9oZGRfYXNzb2MuYwppbmRleCA1ZWY2NDY4Li5iZjBkYzhhIDEwMDY0NAotLS0gYS9DT1JFL0hERC9zcmMvd2xhbl9oZGRfYXNzb2MuYworKysgYi9DT1JFL0hERC9zcmMvd2xhbl9oZGRfYXNzb2MuYwpAQCAtNjEsNiArNjEsOSBAQAogI2lmIGRlZmluZWQgQ09ORklHX0NGRzgwMjExCiAjaW5jbHVkZSAid2xhbl9oZGRfcDJwLmgiCiAjZW5kaWYKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworI2luY2x1ZGUgIndsYW5faGRkX3RkbHMuaCIKKyNlbmRpZgogI2luY2x1ZGUgInNtZV9BcGkuaCIKIAogdl9CT09MX3QgbWliSXNEb3QxMURlc2lyZWRCc3NUeXBlSW5mcmFzdHJ1Y3R1cmUoIGhkZF9hZGFwdGVyX3QgKnBBZGFwdGVyICk7CkBAIC0xNzM3LDYgKzE3NDAsMTg2IEBACiAgICByZXR1cm4oIGVIQUxfU1RBVFVTX1NVQ0NFU1MgKTsKIH0KIAorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisvKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICBAYnJpZWYgaGRkX3JvYW1SZWdpc3RlclRETFNTVEEoKSAtIENvbnN0cnVjdCB0aGUgc3RhRGVzYyBhbmQgcmVnaXN0ZXIgd2l0aAorICBUTCB0aGUgbmV3IFNUQS4gVGhpcyBpcyBjYWxsZWQgYXMgcGFydCBvZiBBRERfU1RBIGluIHRoZSBURExTIHNldHVwCisgIFJldHVybjogVk9TX1NUQVRVUworICAKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK3N0YXRpYyBWT1NfU1RBVFVTIGhkZF9yb2FtUmVnaXN0ZXJURExTU1RBKCBoZGRfYWRhcHRlcl90ICpwQWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRDc3JSb2FtSW5mbyAqcFJvYW1JbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdl9VOF90IHRkbHNFbmNyeXB0aW9uRW5hYmxlZCApCit7CisgICAgaGRkX3N0YXRpb25fY3R4X3QgKnBIZGRTdGFDdHggPSBXTEFOX0hERF9HRVRfU1RBVElPTl9DVFhfUFRSKHBBZGFwdGVyKTsKKyAgICB2X0NPTlRFWFRfdCBwVm9zQ29udGV4dCA9IChXTEFOX0hERF9HRVRfQ1RYKHBBZGFwdGVyKSktPnB2b3NDb250ZXh0OyAgCisgICAgVk9TX1NUQVRVUyB2b3NTdGF0dXMgPSBWT1NfU1RBVFVTX0VfRkFJTFVSRTsKKyAgICBXTEFOX1NUQURlc2NUeXBlIHN0YURlc2MgPSB7MH07CisKKyAgICBpZiAoLTEgPT0gd2xhbl9oZGRfc2F2ZVRkbHNQZWVyKHBSb2FtSW5mbykpIHsKKyAgICAgICAgVk9TX1RSQUNFKCBWT1NfTU9EVUxFX0lEX0hERCwgVk9TX1RSQUNFX0xFVkVMX0VSUk9SLCAKKyAgICAgICAgICAgICAgICAgICAgICJ3bGFuX2hkZF9zYXZlVGRsc1BlZXIoKSBmYWlsZWQiKTsKKyAgICB9CisgICAgLyoKKyAgICAgKiBURExTIHN0YSBpbiBCU1Mgc2hvdWxkIGJlIHNldCBhcyBTVEEgdHlwZSBURExTIGFuZCBTVEEgTUFDIHNob3VsZAorICAgICAqIGJlIHBlZXIgTUFDLCBoZXJlIHdlIGFyZSB3b2tya2luZyBvbiBkaXJlY3QgTGluaworICAgICAqLworICAgIHN0YURlc2MudWNTVEFJZCA9IHBSb2FtSW5mby0+c3RhSWQgOworCisgICAgc3RhRGVzYy53U1RBVHlwZSA9IFdMQU5fU1RBX1RETFMgOworICAgICAgCisgICAgdm9zX21lbV9jb3B5KCBzdGFEZXNjLnZTVEFNQUNBZGRyZXNzLmJ5dGVzLCBwUm9hbUluZm8tPnBlZXJNYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0U2lyTWFjQWRkcikgKTsKKworICAgIHZvc19tZW1fY29weShzdGFEZXNjLnZCU1NJRGZvcklCU1MuYnl0ZXMsIHBIZGRTdGFDdHgtPmNvbm5faW5mby5ic3NJZCw2ICk7CisgICAgdm9zX2NvcHlfbWFjYWRkciggJnN0YURlc2MudlNlbGZNQUNBZGRyZXNzLCAmcEFkYXB0ZXItPm1hY0FkZHJlc3NDdXJyZW50ICk7CisKKyAgICAvKiBzZXQgdGhlIFFvUyBmaWVsZCBhcHByb3ByaWF0ZWx5IC4uKi8KKyAgICAoaGRkX3dtbV9pc19hY3RpdmUocEFkYXB0ZXIpKSA/IChzdGFEZXNjLnVjUW9zRW5hYmxlZCA9IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChzdGFEZXNjLnVjUW9zRW5hYmxlZCA9IDApIDsKKworICAgIFZPU19UUkFDRSggVk9TX01PRFVMRV9JRF9IREQsIFZPU19UUkFDRV9MRVZFTF9JTkZPX0hJR0gsICJIREQgcmVnaXN0ZXIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTCBRb1NfZW5hYmxlZD0lZFxuIiwgc3RhRGVzYy51Y1Fvc0VuYWJsZWQgKTsKKworICAgIHN0YURlc2MudWNQcm90ZWN0ZWRGcmFtZSA9IHRkbHNFbmNyeXB0aW9uRW5hYmxlZDsKKworICAgIFZPU19UUkFDRSggVk9TX01PRFVMRV9JRF9IREQsIFZPU19UUkFDRV9MRVZFTF9JTkZPX01FRCwKKyAgICAgICAgICAgICAgICJIREQgcmVnaXN0ZXIgVEwgU2VjX2VuYWJsZWQ9ICVkLlxuIiwgc3RhRGVzYy51Y1Byb3RlY3RlZEZyYW1lICk7CisKKyAgICAvKiAKKyAgICAgKiBVTUEgaXMgcmVhZHkgd2UgaW5mb3JtIFRMICB0byBkbyBmcmFtZSB0cmFuc2xhdGlvbi4KKyAgICAgKi8KKyAgICBzdGFEZXNjLnVjU3dGcmFtZVRYWGxhdGlvbiA9IDE7CisgICAgc3RhRGVzYy51Y1N3RnJhbWVSWFhsYXRpb24gPSAxOworICAgIHN0YURlc2MudWNBZGRSbXZMTEMgPSAxOworCisgICAgLyogSW5pdGlhbGl6ZSBzaWduYXR1cmVzIGFuZCBzdGF0ZSAqLworICAgIHN0YURlc2MudWNVY2FzdFNpZyAgPSBwUm9hbUluZm8tPnVjYXN0U2lnIDsKKworICAgIC8qIHRkbHMgRGlyZWN0IExpbmsgZG8gbm90IG5lZWQgYmNhc3RTaWcgKi8KKyAgICBzdGFEZXNjLnVjQmNhc3RTaWcgID0gMCA7CisgICAgCisjaWZkZWYgVk9MQU5TX0VOQUJMRV9TV19SRVBMQVlfQ0hFQ0sKKyAgICBpZihzdGFEZXNjLnVjUHJvdGVjdGVkRnJhbWUpCisgICAgICAgIHN0YURlc2MudWNJc1JlcGxheUNoZWNrVmFsaWQgPSBWT1NfVFJVRTsKKyAgICBlbHNlCisgICAgICAgIHN0YURlc2MudWNJc1JlcGxheUNoZWNrVmFsaWQgPSBWT1NfRkFMU0U7CisjZW5kaWYKKworICAgIHN0YURlc2MudWNJbml0U3RhdGUgPSBXTEFOVExfU1RBX0NPTk5FQ1RFRCA7CisKKyAgIChXTEFOX0hERF9HRVRfQ1RYKHBBZGFwdGVyKSktPnN0YV90b19hZGFwdGVyW3BSb2FtSW5mby0+c3RhSWRdID0gcEFkYXB0ZXI7CisgICAvKiBSZWdpc3RlciB0aGUgU3RhdGlvbiB3aXRoIFRMLi4uICAqLyAgICAKKyAgICB2b3NTdGF0dXMgPSBXTEFOVExfUmVnaXN0ZXJTVEFDbGllbnQoIHBWb3NDb250ZXh0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkZF9yeF9wYWNrZXRfY2JrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkZF90eF9jb21wbGV0ZV9jYmssIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRkX3R4X2ZldGNoX3BhY2tldF9jYmssICZzdGFEZXNjLCAwICk7CisgICAKKyAgICBpZiAoICFWT1NfSVNfU1RBVFVTX1NVQ0NFU1MoIHZvc1N0YXR1cyApICkKKyAgICB7CisgICAgICAgIFZPU19UUkFDRSggVk9TX01PRFVMRV9JRF9IREQsIFZPU19UUkFDRV9MRVZFTF9FUlJPUiwgCisgICAgICAgICAgICAgICAgICAgICAiV0xBTlRMX1JlZ2lzdGVyU1RBQ2xpZW50KCkgZmFpbGVkIHRvIHJlZ2lzdGVyLiAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cz0gJWQgWzB4JTA4bFhdIiwgdm9zU3RhdHVzLCB2b3NTdGF0dXMgKTsKKyAgICAgICAgIHJldHVybiB2b3NTdGF0dXM7ICAgICAgCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgCisgICAgcmV0dXJuKCB2b3NTdGF0dXMgKTsKK30KKworLyoKKyAqIEhERCBpbnRlcmZhY2UgYmV0d2VlbiBTTUUgYW5kIFRMIHRvIGVuc3VyZSBURExTIGNsaWVudCByZWdpc3RyYXRpb24gd2l0aAorICogVEwgaW4gY2FzZSBvZiBuZXcgVERMUyBjbGllbnQgaXMgYWRkZWQgYW5kIGRlcmVnaXN0cmF0aW9uIGF0IHRoZSB0aW1lCisgKiBURExTIGNsaWVudCBpcyBkZWxldGVkLgorICovCisKK2VIYWxTdGF0dXMgaGRkX1JvYW1UZGxzU3RhdHVzVXBkYXRlSGFuZGxlcihoZGRfYWRhcHRlcl90ICpwQWRhcHRlciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Q3NyUm9hbUluZm8gKnBSb2FtSW5mbywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdEFOSV9VMzIgcm9hbUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVJvYW1DbWRTdGF0dXMgcm9hbVN0YXR1cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVDc3JSb2FtUmVzdWx0IHJvYW1SZXN1bHQpCit7CisgICAgaGRkX3N0YXRpb25fY3R4X3QgKnBIZGRTdGFDdHggPSBXTEFOX0hERF9HRVRfU1RBVElPTl9DVFhfUFRSKHBBZGFwdGVyKTsKKyAgICBlSGFsU3RhdHVzIHN0YXR1cyA9IGVIQUxfU1RBVFVTX0ZBSUxVUkUgOworIAorICAgIHN3aXRjaCggcm9hbVJlc3VsdCApCisgICAgeworICAgICAgICBjYXNlIGVDU1JfUk9BTV9SRVNVTFRfQUREX1RETFNfUEVFUjoKKyAgICAgICAgeworICAgICAgICAgICAgdEFOSV9VOCBzdGFJZHggPSAwIDsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBjaGVjayBpZiB0aGVyZSBpcyBhdmFpbGFibGUgaW5kZXggZm9yIHRoaXMgbmV3IFRETFMgU1RBCisgICAgICAgICAgICAgKiBzaW5jZSBURExTIGlzIHNldHVwIGluIEJTUywgd2UgbmVlZCB0byBzdGFydCBmcm9tICsxCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGZvciAoIHN0YUlkeCA9IDAgOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhSWR4IDwgSEREX01BWF9OVU1fVERMU19TVEE7IHN0YUlkeCsrICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoMCA9PSBwSGRkU3RhQ3R4LT5jb25uX2luZm8uc3RhSWRbc3RhSWR4XSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwSGRkU3RhQ3R4LT5jb25uX2luZm8uc3RhSWRbc3RhSWR4XSA9IHBSb2FtSW5mby0+c3RhSWQ7CisKKyAgICAgICAgICAgICAgICAgICAgVk9TX1RSQUNFKFZPU19NT0RVTEVfSURfSERELCBWT1NfVFJBQ0VfTEVWRUxfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICgiVERMUzogU1RBIElEWCBhdCAlZCBcCisgICAgICAgICAgICAgICAgICAgICAgIGFuZCBtYWMgPSAlZDogJTAyeCwlMDJ4LCAlMDJ4LCAlMDJ4LCAlMDJ4LCAlMDJ4XG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YUlkeCwgcEhkZFN0YUN0eC0+Y29ubl9pbmZvLnN0YUlkW3N0YUlkeF0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJvYW1JbmZvLT5wZWVyTWFjWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJvYW1JbmZvLT5wZWVyTWFjWzFdLCAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJvYW1JbmZvLT5wZWVyTWFjWzJdLCAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJvYW1JbmZvLT5wZWVyTWFjWzNdLCAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJvYW1JbmZvLT5wZWVyTWFjWzRdLCAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJvYW1JbmZvLT5wZWVyTWFjWzVdKSA7CisgIAorICAgICAgICAgICAgICAgICAgICB2b3NfY29weV9tYWNhZGRyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBIZGRTdGFDdHgtPmNvbm5faW5mby5wZWVyTWFjQWRkcmVzc1tzdGFJZHhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2X01BQ0FERFJfdCAqKXBSb2FtSW5mby0+cGVlck1hYykgOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBlSEFMX1NUQVRVU19TVUNDRVNTIDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGVIQUxfU1RBVFVTX1NVQ0NFU1MgPT0gc3RhdHVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHN0YXJ0IFRETFMgY2xpZW50IHJlZ2lzdHJhdGlvbiB3aXRoIFRMICovCisgICAgICAgICAgICAgICAgc3RhdHVzID0gaGRkX3JvYW1SZWdpc3RlclRETFNTVEEoIHBBZGFwdGVyLCBwUm9hbUluZm8sIDEpIDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrIDsKKyAgICAgICAgfQorICAgICAgICBjYXNlIGVDU1JfUk9BTV9SRVNVTFRfREVMRVRFX1RETFNfUEVFUjoKKyAgICAgICAgeyAgICAgICAgIAorICAgICAgICAgICAgdEFOSV9VOCBzdGFJZHggPSAwIDsKKyAgICAgICAgICAgIHN0YXR1cyA9IGVIQUxfU1RBVFVTX0ZBSUxVUkUgOworCisgICAgICAgICAgICBmb3IgKCBzdGFJZHggPSAwIDsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YUlkeCA8IEhERF9NQVhfTlVNX1RETFNfU1RBOyBzdGFJZHgrKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHBSb2FtSW5mby0+c3RhSWQgPT0gcEhkZFN0YUN0eC0+Y29ubl9pbmZvLnN0YUlkW3N0YUlkeF0gKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEhkZFN0YUN0eC0+Y29ubl9pbmZvLnN0YUlkW3N0YUlkeF0gPSAwIDsKKyAgICAgICAgICAgICAgICAgICAgdm9zX21lbV96ZXJvKCZwSGRkU3RhQ3R4LT5jb25uX2luZm8ucGVlck1hY0FkZHJlc3Nbc3RhSWR4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHZfTUFDQUREUl90KSkgOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBlSEFMX1NUQVRVU19TVUNDRVNTIDsKKworICAgICAgICAgICAgICAgICAgICBicmVhayA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoZUhBTF9TVEFUVVNfU1VDQ0VTUyA9PSBzdGF0dXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVk9TX1RSQUNFKFZPU19NT0RVTEVfSURfSERELCBWT1NfVFJBQ0VfTEVWRUxfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkhERDogZGVsIFNUQSBJRFggPSAleFxuIiksIHBSb2FtSW5mby0+c3RhSWQpIDsKKyAgICAgICAgICAgICAgICBoZGRfcm9hbURlcmVnaXN0ZXJTVEEoIHBBZGFwdGVyLCBwUm9hbUluZm8tPnN0YUlkICk7CisgICAgICAgICAgICAgICAgKFdMQU5fSEREX0dFVF9DVFgocEFkYXB0ZXIpKS0+c3RhX3RvX2FkYXB0ZXJbcFJvYW1JbmZvLT5zdGFJZF0gPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWsgOyAKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICB7CisgICAgICAgICAgICBicmVhayA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzIDsKK30KKyNlbmRpZgorCiBlSGFsU3RhdHVzIGhkZF9zbWVSb2FtQ2FsbGJhY2soIHZvaWQgKnBDb250ZXh0LCB0Q3NyUm9hbUluZm8gKnBSb2FtSW5mbywgdEFOSV9VMzIgcm9hbUlkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVJvYW1DbWRTdGF0dXMgcm9hbVN0YXR1cywgZUNzclJvYW1SZXN1bHQgcm9hbVJlc3VsdCApCiB7CkBAIC0xOTc4LDYgKzIxNjEsMTIgQEAKICAgICAgICAgICAgICAgIChyb2FtUmVzdWx0ID09IGVDU1JfUk9BTV9SRVNVTFRfTk9ORSkgPyBUUlVFIDogRkFMU0UgKTsKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKKwljYXNlIGVDU1JfUk9BTV9URExTX1NUQVRVU19VUERBVEU6CisgICAgICAgICAgaGFsU3RhdHVzID0gaGRkX1JvYW1UZGxzU3RhdHVzVXBkYXRlSGFuZGxlciggcEFkYXB0ZXIsIHBSb2FtSW5mbywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvYW1JZCwgcm9hbVN0YXR1cywgcm9hbVJlc3VsdCApOworICAgICAgICAgIGJyZWFrIDsKKyNlbmRpZgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvQ09SRS9IREQvc3JjL3dsYW5faGRkX2NmZy5jIGIvQ09SRS9IREQvc3JjL3dsYW5faGRkX2NmZy5jCmluZGV4IDI2ZWQ0ZDguLjMwOTBjMmMgMTAwNjQ0Ci0tLSBhL0NPUkUvSEREL3NyYy93bGFuX2hkZF9jZmcuYworKysgYi9DT1JFL0hERC9zcmMvd2xhbl9oZGRfY2ZnLmMKQEAgLTE3MTEsNiArMTcxMSwxNCBAQAogICAgICAgICAgICAgICBDRkdfRU5BQkxFX1JYX1NUQkNfREVGQVVMVCwgCiAgICAgICAgICAgICAgIENGR19FTkFCTEVfUlhfU1RCQ19NSU4sIAogICAgICAgICAgICAgICBDRkdfRU5BQkxFX1JYX1NUQkNfTUFYICksCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKK1JFR19WQVJJQUJMRSggQ0ZHX1RETFNfU1VQUE9SVF9FTkFCTEUsIFdMQU5fUEFSQU1fSW50ZWdlciwKKyAgICAgICAgICAgICAgaGRkX2NvbmZpZ190LCBmRW5hYmxlVERMU1N1cHBvcnQsCisgICAgICAgICAgICAgIFZBUl9GTEFHU19PUFRJT05BTCB8IFZBUl9GTEFHU19SQU5HRV9DSEVDS19BU1NVTUVfREVGQVVMVCwKKyAgICAgICAgICAgICAgQ0ZHX1RETFNfU1VQUE9SVF9FTkFCTEVfREVGQVVMVCwKKyAgICAgICAgICAgICAgQ0ZHX1RETFNfU1VQUE9SVF9FTkFCTEVfTUlOLAorICAgICAgICAgICAgICBDRkdfVERMU19TVVBQT1JUX0VOQUJMRV9NQVggKSwKKyNlbmRpZgogfTsKIAogLyoKZGlmZiAtLWdpdCBhL0NPUkUvSEREL3NyYy93bGFuX2hkZF9jZmc4MDIxMS5jIGIvQ09SRS9IREQvc3JjL3dsYW5faGRkX2NmZzgwMjExLmMKaW5kZXggMGNjYThmNC4uNDRkNzJiYyAxMDA2NDQKLS0tIGEvQ09SRS9IREQvc3JjL3dsYW5faGRkX2NmZzgwMjExLmMKKysrIGIvQ09SRS9IREQvc3JjL3dsYW5faGRkX2NmZzgwMjExLmMKQEAgLTgxLDYgKzgxLDkgQEAKICNpbmNsdWRlICJiYXBfaGRkX21pc2MuaCIKICNlbmRpZgogI2luY2x1ZGUgPHFjX3NhcF9pb2N0bC5oPgorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisjaW5jbHVkZSAid2xhbl9oZGRfdGRscy5oIgorI2VuZGlmCiAKICNkZWZpbmUgZ19tb2RlX3JhdGVzX3NpemUgKDEyKQogI2RlZmluZSBhX21vZGVfcmF0ZXNfc2l6ZSAoOCkKQEAgLTQ2Niw2ICs0NjksMTEgQEAKICAgICAgICAgICAgICAgICAgfCAgV0lQSFlfRkxBR19IQVNfUkVNQUlOX09OX0NIQU5ORUwKICAgICAgICAgICAgICAgICAgICAgfCBXSVBIWV9GTEFHX09GRkNIQU5fVFg7CiAjZW5kaWYKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICAgIHdpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX1NVUFBPUlRTX1RETFMKKyAgICAgICAgICAgICAgICAgfCAgV0lQSFlfRkxBR19URExTX0VYVEVSTkFMX1NFVFVQOworI2VuZGlmCisKICAgICAvKiBldmVuIHdpdGggV0lQSFlfRkxBR19DVVNUT01fUkVHVUxBVE9SWSwKICAgICAgICBkcml2ZXIgY2FuIHN0aWxsIHJlZ2lzdGVyIHJlZ3VsYXRvcnkgY2FsbGJhY2sgYW5kCiAgICAgICAgaXQgd2lsbCBnZXQgQ1JEQSBzZXR0aW5nIGluIHdpcGh5LT5iYW5kW10sIGJ1dApAQCAtNjAwMCw4ICs2MDA4LDU0IEBACiBzdGF0aWMgaW50IHdsYW5faGRkX2NmZzgwMjExX2FkZF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm1hYywgc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyAqcGFyYW1zKQogewotICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzIGxhdGVyLgorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisgICAgaGRkX2FkYXB0ZXJfdCAqcEFkYXB0ZXIgPSBXTEFOX0hERF9HRVRfUFJJVl9QVFIoZGV2KTsKKyAgICBoZGRfY29udGV4dF90ICpwSGRkQ3R4ID0gd2lwaHlfcHJpdih3aXBoeSk7CisgICAgdTMyIG1hc2ssIHNldDsKKyAgICBWT1NfU1RBVFVTIHN0YXR1czsKICAgICBFTlRFUigpOworCisgICAgaWYoIE5VTEwgPT0gcEhkZEN0eCB8fCBOVUxMID09IHBIZGRDdHgtPmNmZ19pbmkgKQorICAgIHsKKyAgICAgICAgVk9TX1RSQUNFKCBWT1NfTU9EVUxFX0lEX0hERCwgVk9TX1RSQUNFX0xFVkVMX0VSUk9SLCAKKyAgICAgICAgICAgICAgICAiSW52YWxpZCBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgaWYoIEZBTFNFID09IHBIZGRDdHgtPmNmZ19pbmktPmZFbmFibGVURExTU3VwcG9ydCB8fAorICAgICAgICBGQUxTRSA9PSBzbWVfSXNGZWF0dXJlU3VwcG9ydGVkQnlGVyhURExTKSkgCisgICAgeworICAgICAgICBWT1NfVFJBQ0UoIFZPU19NT0RVTEVfSURfSERELCBWT1NfVFJBQ0VfTEVWRUxfRVJST1IsIAorICAgICAgICAgICAgICAgICJURExTIERpc2FibGVkIGluIElOSSBPUiBub3QgZW5hYmxlZCBpbiBGVy5cCisgICAgICAgICAgICAgICAgQ2Fubm90IHByb2Nlc3MgVERMUyBjb21tYW5kcyBcbiIpOworICAgICAgICByZXR1cm4gLUVOT1RTVVBQOworICAgIH0KKworICAgIG1hc2sgPSBwYXJhbXMtPnN0YV9mbGFnc19tYXNrOworCisgICAgc2V0ID0gcGFyYW1zLT5zdGFfZmxhZ3Nfc2V0OworCisKKyAgICBWT1NfVFJBQ0UoIFZPU19NT0RVTEVfSURfSERELCBWT1NfVFJBQ0VfTEVWRUxfSU5GTywgCisgICAgICAgICAgICAiQWRkIFN0YXRpb24gUmVxdWVzdCBNYXNrID0gMHgleCBzZXQgPSAweCV4XG4iLCBtYXNrLCBzZXQpOworCisgICAgaWYgKG1hc2sgJiBCSVQoTkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIpKSB7CisgICAgICAgIGlmIChzZXQgJiBCSVQoTkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIpKSB7CisgICAgICAgICAgICBWT1NfVFJBQ0UoIFZPU19NT0RVTEVfSURfSERELCBWT1NfVFJBQ0VfTEVWRUxfSU5GTywgCisgICAgICAgICAgICAgICAgICAgICJBZGQgVERMUyBwZWVyIik7CisKKworICAgICAgICAgICAgc3RhdHVzID0gc21lX0FkZFRkbHNQZWVyU3RhKFdMQU5fSEREX0dFVF9IQUxfQ1RYKHBBZGFwdGVyKSwgCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5zZXNzaW9uSWQsIG1hYyk7CisKKyAgICAgICAgICAgIGlmIChWT1NfU1RBVFVTX1NVQ0NFU1MgIT0gc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgVk9TX1RSQUNFKFZPU19NT0RVTEVfSURfSERELCBWT1NfVFJBQ0VfTEVWRUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IHNtZV9BZGRUZGxzUGVlclN0YSBmYWlsZWQhIiwgX19mdW5jX18pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjE1MCw2ICs2MjA0LDEzOSBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworc3RhdGljIGludCB3bGFuX2hkZF9jZmc4MDIxMV90ZGxzX21nbXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgIHU4ICpwZWVyLCB1OCBhY3Rpb25fY29kZSwgIHU4IGRpYWxvZ190b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgc3RhdHVzX2NvZGUsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCit7CisKKyAgICBoZGRfYWRhcHRlcl90ICpwQWRhcHRlciA9IFdMQU5fSEREX0dFVF9QUklWX1BUUihkZXYpOworICAgIGhkZF9jb250ZXh0X3QgKnBIZGRDdHggPSB3aXBoeV9wcml2KHdpcGh5KTsKKyAgICB1OCAqYnVmXzE7CisgICAgc2l6ZV90IGxlbl8xID0gbGVuOworICAgIHU4IHBlZXJNYWNbNl07CisgICAgVk9TX1NUQVRVUyBzdGF0dXM7CisKKyAgICBpZiggTlVMTCA9PSBwSGRkQ3R4IHx8IE5VTEwgPT0gcEhkZEN0eC0+Y2ZnX2luaSApCisgICAgeworICAgICAgICBWT1NfVFJBQ0UoIFZPU19NT0RVTEVfSURfSERELCBWT1NfVFJBQ0VfTEVWRUxfRVJST1IsIAorICAgICAgICAgICAgICAgICJJbnZhbGlkIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiggRkFMU0UgPT0gcEhkZEN0eC0+Y2ZnX2luaS0+ZkVuYWJsZVRETFNTdXBwb3J0IHx8CisgICAgICAgIEZBTFNFID09IHNtZV9Jc0ZlYXR1cmVTdXBwb3J0ZWRCeUZXKFRETFMpKSAKKyAgICB7CisgICAgICAgIFZPU19UUkFDRSggVk9TX01PRFVMRV9JRF9IREQsIFZPU19UUkFDRV9MRVZFTF9FUlJPUiwgCisgICAgICAgICAgICAgICAgIlRETFMgRGlzYWJsZWQgaW4gSU5JIE9SIG5vdCBlbmFibGVkIGluIEZXLlwKKyAgICAgICAgICAgICAgICBDYW5ub3QgcHJvY2VzcyBURExTIGNvbW1hbmRzIFxuIik7CisgICAgICAgIHJldHVybiAtRU5PVFNVUFA7CisgICAgfQorICAgIHZvc19tZW1fY29weSggcGVlck1hYywgcGVlciwgNik7CisKKyAgICBWT1NfVFJBQ0UoIFZPU19NT0RVTEVfSURfSERELCBWT1NfVFJBQ0VfTEVWRUxfSU5GTywgCisgICAgICAgICAgICAgICAgICAgICAiUmVxdWVzdCB0byBzZW5kIFRETFMgbWFuYWdlbWVudDogYWN0aW9uID0gJWQsIHN0YXR1cyA9ICVkLCBcCisJCSAgICAgIGxlbiA9ICVkIiwgYWN0aW9uX2NvZGUsIHN0YXR1c19jb2RlLCBsZW4pOworCisgICAgYnVmXzEgPSB2b3NfbWVtX21hbGxvYyhsZW4pOworICAgIGlmKGJ1Zl8xID09IE5VTEwpIHsKKyAgICAgICAgVk9TX1RSQUNFKFZPU19NT0RVTEVfSURfSERELCBWT1NfVFJBQ0VfTEVWRUxfRVJST1IsCisgICAgICAgICAgICAgICAgIiVzOiBtYWxsb2MgZmFpbGVkISIsIF9fZnVuY19fKTsKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgfQorICAgIHZvc19tZW1fY29weShidWZfMSwgYnVmLCBsZW4pOworCisgICAgc3RhdHVzID0gc21lX1NlbmRUZGxzTWdtdEZyYW1lKFdMQU5fSEREX0dFVF9IQUxfQ1RYKHBBZGFwdGVyKSwgcEFkYXB0ZXItPnNlc3Npb25JZCwKKyAgICAgICAgICAgIHBlZXJNYWMsIGFjdGlvbl9jb2RlLCBkaWFsb2dfdG9rZW4sIHN0YXR1c19jb2RlLCBidWZfMSwgbGVuXzEpOworCisgICAgaWYgKFZPU19TVEFUVVNfU1VDQ0VTUyAhPSBzdGF0dXMpIHsKKyAgICAgICAgVk9TX1RSQUNFKFZPU19NT0RVTEVfSURfSERELCBWT1NfVFJBQ0VfTEVWRUxfRVJST1IsCisgICAgICAgICAgICAgICAgIiVzOiBzbWVfU2VuZFRkbHNNZ210RnJhbWUgZmFpbGVkISIsIF9fZnVuY19fKTsKKyAgICB9CisKKyAgICB2b3NfbWVtX2ZyZWUoYnVmXzEpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2xhbl9oZGRfY2ZnODAyMTFfdGRsc19vcGVyKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgIHU4ICpwZWVyLCBlbnVtIG5sODAyMTFfdGRsc19vcGVyYXRpb24gb3BlcikKK3sKKyAgICBoZGRfYWRhcHRlcl90ICpwQWRhcHRlciA9IFdMQU5fSEREX0dFVF9QUklWX1BUUihkZXYpOworICAgIGhkZF9jb250ZXh0X3QgKnBIZGRDdHggPSB3aXBoeV9wcml2KHdpcGh5KTsKKworICAgIGlmKCBOVUxMID09IHBIZGRDdHggfHwgTlVMTCA9PSBwSGRkQ3R4LT5jZmdfaW5pICkKKyAgICB7CisgICAgICAgIFZPU19UUkFDRSggVk9TX01PRFVMRV9JRF9IREQsIFZPU19UUkFDRV9MRVZFTF9FUlJPUiwgCisgICAgICAgICAgICAgICAgIkludmFsaWQgYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKyAgICAgICAKKyAgICBWT1NfVFJBQ0UoIFZPU19NT0RVTEVfSURfSERELCBWT1NfVFJBQ0VfTEVWRUxfSU5GTywgCisgICAgICAgICAgICAiUmVxdWVzdCBmb3IgVERMUyBvcGVyOiAlZCIsIChpbnQpb3Blcik7CisKKyAgICBpZiggRkFMU0UgPT0gcEhkZEN0eC0+Y2ZnX2luaS0+ZkVuYWJsZVRETFNTdXBwb3J0IHx8CisgICAgICAgIEZBTFNFID09IHNtZV9Jc0ZlYXR1cmVTdXBwb3J0ZWRCeUZXKFRETFMpKSAKKyAgICB7CisgICAgICAgIFZPU19UUkFDRSggVk9TX01PRFVMRV9JRF9IREQsIFZPU19UUkFDRV9MRVZFTF9FUlJPUiwgCisgICAgICAgICAgICAgICAgIlRETFMgRGlzYWJsZWQgaW4gSU5JIE9SIG5vdCBlbmFibGVkIGluIEZXLlwKKyAgICAgICAgICAgICAgICBDYW5ub3QgcHJvY2VzcyBURExTIGNvbW1hbmRzIFxuIik7CisgICAgICAgIHJldHVybiAtRU5PVFNVUFA7CisgICAgfQorCisgICAgc3dpdGNoIChvcGVyKSB7CisgICAgICAgIGNhc2UgTkw4MDIxMV9URExTX0VOQUJMRV9MSU5LOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZfQ09OVEVYVF90IHBWb3NDb250ZXh0ID0gKFdMQU5fSEREX0dFVF9DVFgocEFkYXB0ZXIpKS0+cHZvc0NvbnRleHQ7ICAKKyAgICAgICAgICAgICAgICB2X1U4X3QgbXlfcGVlcls2XTsKKyAgICAgICAgICAgICAgICB2X1U4X3QgdWNTVEFJZDsKKyAgICAgICAgICAgICAgICBWT1NfU1RBVFVTIHN0YXR1czsKKworICAgICAgICAgICAgICAgIGlmIChwZWVyKSB7CisgICAgICAgICAgICAgICAgICAgIHZvc19tZW1fY29weShteV9wZWVyLCBwZWVyLCA2KTsKKyAgICAgICAgICAgICAgICAgICAgdWNTVEFJZCA9IHdsYW5faGRkX2ZpbmRUZGxzUGVlcihteV9wZWVyKTsKKworICAgICAgICAgICAgICAgICAgICBoZGRMb2coVk9TX1RSQUNFX0xFVkVMX0lORk9fSElHSCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBzZXQga2V5IGZvciBwZWVyICUyeDolMng6JTJ4OiUyeDolMng6JTJ4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcGVlclswXSwgcGVlclsxXSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlclsyXSwgcGVlclszXSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlcls0XSwgcGVlcls1XSApOworCisgICAgICAgICAgICAgICAgICAgIGlmICgtMSA9PSB1Y1NUQUlkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaGRkTG9nKFZPU19UUkFDRV9MRVZFTF9FUlJPUiwgIndsYW5faGRkX2ZpbmRUZGxzUGVlciBmYWlsZWQiICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFdMQU5UTF9DaGFuZ2VTVEFTdGF0ZSggcFZvc0NvbnRleHQsIHVjU1RBSWQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdMQU5UTF9TVEFfQVVUSEVOVElDQVRFRCApOworCisgICAgICAgICAgICAgICAgICAgIGlmICgwICE9IHN0YXR1cykgeworICAgICAgICAgICAgICAgICAgICAgICAgaGRkTG9nKFZPU19UUkFDRV9MRVZFTF9FUlJPUiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczogV0xBTlRMX0NoYW5nZVNUQVN0YXRlIGZhaWxlZCwgcmV0dXJuZWQgJWQiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaGRkTG9nKFZPU19UUkFDRV9MRVZFTF9XQVJOLCAid2xhbl9oZGRfY2ZnODAyMTFfYWRkX2tleTogcGVlciBOVUxMIiApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5MODAyMTFfVERMU19ESVNBQkxFX0xJTks6CisgICAgICAgICAgICBzbWVfRGVsZXRlVGRsc1BlZXJTdGEoIFdMQU5fSEREX0dFVF9IQUxfQ1RYKHBBZGFwdGVyKSwgCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5zZXNzaW9uSWQsIHBlZXIgKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIE5MODAyMTFfVERMU19URUFSRE9XTjoKKyAgICAgICAgY2FzZSBOTDgwMjExX1RETFNfU0VUVVA6CisgICAgICAgIGNhc2UgTkw4MDIxMV9URExTX0RJU0NPVkVSWV9SRVE6CisgICAgICAgICAgICAvKiBXZSBkb24ndCBzdXBwb3J0IGluLWRyaXZlciBzZXR1cC90ZWFyZG93bi9kaXNjb3ZlcnkgKi8KKyAgICAgICAgICAgIHJldHVybiAtRU5PVFNVUFA7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gLUVOT1RTVVBQOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiAvKiBjZmc4MDIxMV9vcHMgKi8KIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIHdsYW5faGRkX2NmZzgwMjExX29wcyA9IAogewpAQCAtNjIwMiw2ICs2Mzg5LDEwIEBACiAjaWYgZGVmaW5lZChXTEFOX0ZFQVRVUkVfVk9XSUZJXzExUikgJiYgZGVmaW5lZChLRVJORUxfU1VQUE9SVF8xMVJfQ0ZHODAyMTEpCiAgICAgIC51cGRhdGVfZnRfaWVzID0gd2xhbl9oZGRfY2ZnODAyMTFfdXBkYXRlX2Z0X2llcywKICNlbmRpZgorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisgICAgIC50ZGxzX21nbXQgPSB3bGFuX2hkZF9jZmc4MDIxMV90ZGxzX21nbXQsCisgICAgIC50ZGxzX29wZXIgPSB3bGFuX2hkZF9jZmc4MDIxMV90ZGxzX29wZXIsCisjZW5kaWYKIH07CiAKICNlbmRpZiAvLyBDT05GSUdfQ0ZHODAyMTEKZGlmZiAtLWdpdCBhL0NPUkUvTUFDL2luYy9hbmlHbG9iYWwuaCBiL0NPUkUvTUFDL2luYy9hbmlHbG9iYWwuaAppbmRleCBmNzcyNTY3Li4yZTQ0Nzk5IDEwMDY0NAotLS0gYS9DT1JFL01BQy9pbmMvYW5pR2xvYmFsLmgKKysrIGIvQ09SRS9NQUMvaW5jL2FuaUdsb2JhbC5oCkBAIC0yNDMsNiArMjQzLDEyIEBACiAjaWZkZWYgV0xBTl9GRUFUVVJFX1AyUAogICAgIFRYX1RJTUVSICAgICAgICAgICBnTGltUmVtYWluT25DaGFubmVsVGltZXI7CiAjZW5kaWYKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19JTlRFUk5BTAorICAgIFRYX1RJTUVSICAgICAgICAgICBnTGltVGRsc0Rpc1JzcFdhaXRUaW1lcjsKKyAgICBUWF9USU1FUiAgICAgICAgICAgZ0xpbVRkbHNMaW5rU2V0dXBSc3BUaW1lb3VUaW1lcjsKKyAgICBUWF9USU1FUiAgICAgICAgICAgZ0xpbVRkbHNMaW5rU2V0dXBDbmZUaW1lb3V0VGltZXI7CisjZW5kaWYKKwogICAgIFRYX1RJTUVSICAgICAgICAgICBnTGltUGVyaW9kaWNKb2luUHJvYmVSZXFUaW1lcjsKICAgICBUWF9USU1FUiAgICAgICAgICAgZ0xpbURpc2Fzc29jQWNrVGltZXI7CiAgICAgVFhfVElNRVIgICAgICAgICAgIGdMaW1EZWF1dGhBY2tUaW1lcjsKQEAgLTg5Myw2ICs4OTksMjcgQEAKIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICBIVCBSRUxBVEVEICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTX0lOVEVSTkFMCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gIFRETFMgUkVMQVRFRCAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIAorICAgIHRTaXJUZGxzRGlzUmVxIGdMaW1UZGxzRGlzUmVxIDsgCisgICAgLy90TGltRGlzUmVzdWx0TGlzdCAqZ1RkbHNEaXNSZXN1bHRMaXN0IDsKKyAgICB0TGltRGlzUmVzdWx0TGlzdCAqZ0xpbVRkbHNEaXNSZXN1bHRMaXN0IDsKKyAgICB0QU5JX1U4IGdMaW1UZGxzRGlzU3RhQ291bnQgOworICAgIHRBTklfVTggZ0FkZFN0YURpc1JzcFdhaXQgOworCisgICAgdExpbVRkbHNMaW5rU2V0dXBJbmZvICBnTGltVGRsc0xpbmtTZXR1cEluZm87CisgICAgCisgICAgLyogdG8gdHJhY2sgaWYgZGlyZWN0IGxpbmsgaXMgYi9nL24sIHRoaXMgY2FuIGJlIGluZGVwZW5kZW50IG9mIEFQIGxpbmsgKi8KKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19ORUdBVElWRQorICAgIHRBTklfVTMyIGdMaW1UZGxzTmVnYXRpdmVCZWhhdmlvcjsgIAorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICAgIHRBTklfVTggZ0xpbUFkZFN0YVRkbHMgOworICAgIHRBTklfVTggZ0xpbVRkbHNMaW5rTW9kZSA7CisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gIFRETFMgUkVMQVRFRCAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2VuZGlmCiAKICAgICAvLyB3c2MgaW5mbyByZXF1aXJlZCB0byBmb3JtIHRoZSB3c2MgSUUKICAgICB0TGltV3NjSWVJbmZvIHdzY0llSW5mbzsKQEAgLTEwNTUsNyArMTA4Miw5IEBACiAjaWZkZWYgRkVBVFVSRV9PRU1fREFUQV9TVVBQT1JUCiAgICAgdE9lbURhdGFTdHJ1Y3Qgb2VtRGF0YTsKICNlbmRpZgotCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKKyAgICB0Q3NyVGRsc0N0eFN0cnVjdCB0ZGxzQ3R4IDsKKyNlbmRpZgogI2lmZGVmIEFOSV9QUk9EVUNUX1RZUEVfQ0xJRU5UCiAgICAgdFBtY0luZm8gICAgIHBtYzsKICAgICB0U21lQnRjSW5mbyAgYnRjOwpAQCAtMTA4OCw3ICsxMTE3LDE2IEBACiAgICAgCiB9IHRBbmlTaXJHbG9iYWw7CiAKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUwogCisjZGVmaW5lIFJGQzEwNDJfSERSX0xFTkdUSCAgICAgICg2KQorI2RlZmluZSBHRVRfQkUxNih4KSAgICAgICAgICAgICAoKHRBTklfVTE2KSAoKCh4KVswXSA8PCA4KSB8ICh4KVsxXSkpCisjZGVmaW5lIEVUSF9UWVBFXzg5XzBkICAgICAgICAgICgweDg5MGQpCisjZGVmaW5lIEVUSF9UWVBFX0xFTiAgICAgICAgICAgICgyKQorI2RlZmluZSBQQVlMT0FEX1RZUEVfVERMU19TSVpFICAoMSkKKyNkZWZpbmUgUEFZTE9BRF9UWVBFX1RETFMgICAgICAgKDIpCisKKyNlbmRpZgogCiAjZW5kaWYgLyogX0FOSUdMT0JBTF9IICovCiAKZGlmZiAtLWdpdCBhL0NPUkUvTUFDL2luYy9zaXJBcGkuaCBiL0NPUkUvTUFDL2luYy9zaXJBcGkuaAppbmRleCA1NWM5YWU0Li42ZDRlZGQ3IDEwMDY0NAotLS0gYS9DT1JFL01BQy9pbmMvc2lyQXBpLmgKKysrIGIvQ09SRS9NQUMvaW5jL3NpckFwaS5oCkBAIC0zMTAwLDYgKzMxMDAsOSBAQAogICAgZVNNRV9GVUxMX1BXUl9ORUVERURfQllfQ1NSLCAgICAvKiBDU1IgcmVxdWVzdHMgZnVsbCBwb3dlciAqLwogICAgZVNNRV9GVUxMX1BXUl9ORUVERURfQllfUU9TLCAgICAvKiBRT1MgcmVxdWVzdHMgZnVsbCBwb3dlciAqLwogICAgZVNNRV9GVUxMX1BXUl9ORUVERURfQllfQ0hBTk5FTF9TV0lUQ0gsIC8qIGNoYW5uZWwgc3dpdGNoIHJlcXVlc3QgZnVsbCBwb3dlciovCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKKyAgIGVTTUVfRlVMTF9QV1JfTkVFREVEX0JZX1RETFNfUEVFUl9TRVRVUCwgLyogVERMUyBwZWVyIHNldHVwKi8KKyNlbmRpZgogICAgZVNNRV9SRUFTT05fT1RIRVIgICAgICAgICAgICAgICAvKiBObyBzcGVjaWZpYyByZWFzb24uIEdlbmVyYWwgcmVhc29uIGNvZGUgKi8gCiB9IHRSZXF1ZXN0RnVsbFBvd2VyUmVhc29uLCB0RXhpdEJtcHNSZWFzb247CiAKQEAgLTQyMjYsNCArNDIyOSwyMjUgQEAKICAgICB0QU5JX1UxNiAgICAgICAgICAgICAgICBuZXdUbUxldmVsOwogfSB0QW5pU2V0VG1MZXZlbFJlcSwgKnRwQW5pU2V0VG1MZXZlbFJlcTsKIAorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisvKiBURExTIFJlcXVlc3Qgc3RydWN0IFNNRS0tPlBFICovCit0eXBlZGVmIHN0cnVjdCBzU2lyVGRsc1NlbmRNZ210UmVxCit7CisgICAgdEFOSV9VMTYgICAgICAgICAgICBtZXNzYWdlVHlwZTsgICAvLyBlV05JX1NNRV9URExTX0RJU0NPVkVSWV9TVEFSVF9SRVEKKyAgICB0QU5JX1UxNiAgICAgICAgICAgIGxlbmd0aDsKKyAgICB0QU5JX1U4ICAgICAgICAgICAgIHNlc3Npb25JZDsgICAgIC8vIFNlc3Npb24gSUQKKyAgICB0QU5JX1UxNiAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQ7IC8vIFRyYW5zYWN0aW9uIElEIGZvciBjbWQKKyAgICB0QU5JX1U4ICAgICAgICAgICAgIHJlcVR5cGU7CisgICAgdEFOSV9VOCAgICAgICAgICAgICBkaWFsb2c7CisgICAgdEFOSV9VMTYgICAgICAgICAgICBzdGF0dXNDb2RlOworICAgIHRTaXJNYWNBZGRyICAgICAgICAgYnNzaWQ7ICAgICAgICAgLy8gRm9yIG11bHRpLXNlc3Npb24sIGZvciBQRSB0byBsb2NhdGUgcGVTZXNzaW9uIElECisgICAgdFNpck1hY0FkZHIgICAgICAgICBwZWVyTWFjOworICAgIHRBTklfVTggICAgICAgICAgICAgYWRkSWVbMV07ICAgICAgLy9WYXJpYWJsZSBsZW5naHQuIERvbnQgYWRkIGFueSBmaWVsZCBhZnRlciB0aGlzLgorfSB0U2lyVGRsc1NlbmRNZ210UmVxLCAqdHBTaXJTbWVUZGxzU2VuZE1nbXRSZXEgOworLyogVERMUyBSZXF1ZXN0IHN0cnVjdCBTTUUtLT5QRSAqLwordHlwZWRlZiBzdHJ1Y3Qgc1NpclRkbHNBZGRTdGFSZXEKK3sKKyAgICB0QU5JX1UxNiAgICAgICAgICAgIG1lc3NhZ2VUeXBlOyAgIC8vIGVXTklfU01FX1RETFNfRElTQ09WRVJZX1NUQVJUX1JFUQorICAgIHRBTklfVTE2ICAgICAgICAgICAgbGVuZ3RoOworICAgIHRBTklfVTggICAgICAgICAgICAgc2Vzc2lvbklkOyAgICAgLy8gU2Vzc2lvbiBJRAorICAgIHRBTklfVTE2ICAgICAgICAgICAgdHJhbnNhY3Rpb25JZDsgLy8gVHJhbnNhY3Rpb24gSUQgZm9yIGNtZAorICAgIHRTaXJNYWNBZGRyICAgICAgICAgYnNzaWQ7ICAgICAgICAgLy8gRm9yIG11bHRpLXNlc3Npb24sIGZvciBQRSB0byBsb2NhdGUgcGVTZXNzaW9uIElECisgICAgdFNpck1hY0FkZHIgICAgICAgICBwZWVyTWFjOworfSB0U2lyVGRsc0FkZFN0YVJlcSwgKnRwU2lyU21lVGRsc0FkZFN0YVJlcSA7CisvKiBURExTIFJlc3BvbnNlIHN0cnVjdCBQRS0tPlNNRSAqLwordHlwZWRlZiBzdHJ1Y3Qgc1NpclRkbHNBZGRTdGFSc3AKK3sKKyAgICB0QU5JX1UxNiAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlOworICAgIHRBTklfVTE2ICAgICAgICAgICAgICAgbGVuZ3RoOworICAgIHRTaXJSZXN1bHRDb2RlcyAgICAgICAgc3RhdHVzQ29kZTsKKyAgICB0U2lyTWFjQWRkciAgICAgICAgICAgIHBlZXJNYWM7CisgICAgdEFOSV9VOCAgICAgICAgICAgICAgICBzZXNzaW9uSWQ7ICAgICAvLyBTZXNzaW9uIElECisgICAgdEFOSV9VMTYgICAgICAgICAgICAgICBzdGFJZCA7CisgICAgdEFOSV9VMTYgICAgICAgICAgICAgICBzdGFUeXBlIDsKKyAgICB0QU5JX1U4ICAgICAgICAgICAgICAgIHVjYXN0U2lnOworICAgIHRBTklfVTggICAgICAgICAgICAgICAgYmNhc3RTaWc7Cit9IHRTaXJUZGxzQWRkU3RhUnNwIDsKKy8qIFRETFMgUmVxdWVzdCBzdHJ1Y3QgU01FLS0+UEUgKi8KK3R5cGVkZWYgc3RydWN0IHNTaXJUZGxzRGVsU3RhUmVxCit7CisgICAgdEFOSV9VMTYgICAgICAgICAgICBtZXNzYWdlVHlwZTsgICAvLyBlV05JX1NNRV9URExTX0RJU0NPVkVSWV9TVEFSVF9SRVEKKyAgICB0QU5JX1UxNiAgICAgICAgICAgIGxlbmd0aDsKKyAgICB0QU5JX1U4ICAgICAgICAgICAgIHNlc3Npb25JZDsgICAgIC8vIFNlc3Npb24gSUQKKyAgICB0QU5JX1UxNiAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQ7IC8vIFRyYW5zYWN0aW9uIElEIGZvciBjbWQKKyAgICB0U2lyTWFjQWRkciAgICAgICAgIGJzc2lkOyAgICAgICAgIC8vIEZvciBtdWx0aS1zZXNzaW9uLCBmb3IgUEUgdG8gbG9jYXRlIHBlU2Vzc2lvbiBJRAorICAgIHRTaXJNYWNBZGRyICAgICAgICAgcGVlck1hYzsKK30gdFNpclRkbHNEZWxTdGFSZXEsICp0cFNpclNtZVRkbHNEZWxTdGFSZXEgOworLyogVERMUyBSZXNwb25zZSBzdHJ1Y3QgUEUtLT5TTUUgKi8KK3R5cGVkZWYgc3RydWN0IHNTaXJUZGxzRGVsU3RhUnNwCit7CisgICB0QU5JX1UxNiAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlOworICAgdEFOSV9VMTYgICAgICAgICAgICAgICBsZW5ndGg7CisgICB0QU5JX1U4ICAgICAgICAgICAgICAgIHNlc3Npb25JZDsgICAgIC8vIFNlc3Npb24gSUQKKyAgIHRTaXJSZXN1bHRDb2RlcyAgICAgICAgc3RhdHVzQ29kZTsKKyAgIHRTaXJNYWNBZGRyICAgICAgICAgICAgcGVlck1hYzsKKyAgIHRBTklfVTE2ICAgICAgICAgICAgICAgc3RhSWQ7Cit9IHRTaXJUZGxzRGVsU3RhUnNwLCAqdHBTaXJUZGxzRGVsU3RhUnNwOworI2VuZGlmIC8qIEZFQVRVUkVfV0xBTl9URExTICovCisKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19JTlRFUk5BTAordHlwZWRlZiBlbnVtIHRkbHNMaXN0VHlwZQoreworICAgIFRETFNfRElTX0xJU1QsCisgICAgVERMU19TRVRVUF9MSVNUCit9ZVRkbHNMaXN0VHlwZSA7CisKK3R5cGVkZWYgZW51bSB0ZGxzU3RhdGVzCit7CisgICAgVERMU19MSU5LX0lETEVfU1RBVEUsCisgICAgVERMU19MSU5LX0RJU19JTklUX1NUQVRFLAorICAgIFRETFNfTElOS19ESVNfUlNQX1dBSVRfU1RBVEUsCisgICAgVERMU19ESVNfUkVRX1BST0NFU1NfU1RBVEUsCisgICAgVERMU19ESVNfUlNQX1NFTlRfV0FJVF9TVEFURSwKKyAgICBURExTX0RJU19SU1BfU0VOVF9ET05FX1NUQVRFLAorICAgIFRETFNfTElOS19ESVNfRE9ORV9TVEFURSwKKyAgICBURExTX0xJTktfU0VUVVBfU1RBUlRfU1RBVEUsCisgICAgVERMU19MSU5LX1NFVFVQX1dBSVRfU1RBVEUsCisgICAgVERMU19MSU5LX1NFVFVQX1JTUF9XQUlUX1NUQVRFLAorICAgIFRETFNfTElOS19TRVRVUF9ET05FX1NUQVRFLAorICAgIFRETFNfTElOS19URUFSRE9XTl9TVEFSVF9TVEFURSwKKyAgICBURExTX0xJTktfVEVBUkRPV05fRE9ORV9TVEFURSwKKyAgICBURExTX0xJTktfU0VUVVBfU1RBVEUKK31lU2lyVGRsc1N0YXRlcyA7CisKK3R5cGVkZWYgc3RydWN0IHNTaXJUZGxzUGVlckluZm8KK3sKKyAgICB0U2lyTWFjQWRkciBwZWVyTWFjOworICAgIHRBTklfVTggICAgIHNlc3Npb25JZDsKKyAgICB0QU5JX1U4ICAgICBkaWFsb2cgOworICAgIHRTaXJNYWNDYXBhYmlsaXR5SW5mbyBjYXBhYmlsaXR5SW5mbyA7CisgICAgdFNpck1hY1JhdGVTZXQgIHRkbHNQZWVyU3VwcFJhdGVzIDsKKyAgICB0U2lyTWFjUmF0ZVNldCAgdGRsc1BlZXJFeHRSYXRlcyA7CisgICAgLy90RG90MTFmSUVIVENhcHMgdGRsc1BlZXJIdENhcHMgOworICAgIHRTaXJNYWNIVENhcGFiaWxpdHlJbmZvIHRkbHNQZWVySHRDYXBzIDsKKyAgICB0U2lyTWFjSFRQYXJhbWV0ZXJzSW5mbyB0ZGxzUGVlckh0UGFyYW1zIDsKKyAgICB0U2lyTWFjRXh0ZW5kZWRIVENhcGFiaWxpdHlJbmZvIHRkbHNQZWVySHRFeHRDYXBzIDsKKyAgICB0QU5JX1U4ICBzdXBwb3J0ZWRNQ1NTZXRbU0laRV9PRl9TVVBQT1JURURfTUNTX1NFVF07CisKKyAgICAvL3REb3QxMWZJRUV4dENhcGFiaWxpdHkgdGRsc1BlZXJFeHRlbkNhcHMgOworICAgIHRTaXJNYWNSc25JbmZvIHRkbHNQZWVyUnNuIDsKKyAgICB0QU5JX1UxNiB0ZGxzUGVlckZ0SWUgOworICAgIHRBTklfVTE2IHRkbHNQZWVyVGltZW91dEludHZsIDsKKyAgICB0QU5JX1UxNiB0ZGxzUGVlclN1cHBDaGFuIDsKKyAgICB0QU5JX1UxNiB0ZGxzUGVlclN1cHBSZWd1Q2xhc3MgOworICAgIHRBTklfUzggIHRkbHNQZWVyUnNzaSA7CisgICAgdEFOSV9VMTYgdGRsc1BlZXJTdGF0ZSA7CisgICAgLyogZmxhZ3MgdG8gaW5kaWNhdGUgb3B0aW9uYWwgSUUncyBhcmUgaW4gKi8KKyAgICB0QU5JX1U4ICBFeHRSYXRlc1ByZXNlbnQgOworICAgIHRBTklfVTggIHJzbkllUHJlc2VudCA7CisgICAgdEFOSV9VOCAgaHRDYXBQcmVzZW50IDsKKyAgICB0QU5JX1U4ICBkZWxTdGFOZWVkZWQgOworCit9IHRTaXJUZGxzUGVlckluZm8sICp0cFNpclNtZVRkbHNQZWVySW5mbyA7CisKKy8qIFRETFMgUmVxdWVzdCBzdHJ1Y3QgU01FLS0+UEUgKi8KK3R5cGVkZWYgc3RydWN0IHNTaXJUZGxzRGlzY292ZXJ5UmVxCit7CisgICAgdEFOSV9VMTYgICAgICAgICAgICBtZXNzYWdlVHlwZTsgICAvLyBlV05JX1NNRV9URExTX0RJU0NPVkVSWV9TVEFSVF9SRVEKKyAgICB0QU5JX1UxNiAgICAgICAgICAgIGxlbmd0aDsKKyAgICB0QU5JX1U4ICAgICAgICAgICAgIHNlc3Npb25JZDsgICAgIC8vIFNlc3Npb24gSUQKKyAgICB0QU5JX1UxNiAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQ7IC8vIFRyYW5zYWN0aW9uIElEIGZvciBjbWQKKyAgICB0QU5JX1U4ICAgICAgICAgICAgIHJlcVR5cGU7CisgICAgdEFOSV9VOCAgICAgICAgICAgICBkaWFsb2c7CisgICAgdFNpck1hY0FkZHIgICAgICAgICBic3NpZDsgICAgICAgICAvLyBGb3IgbXVsdGktc2Vzc2lvbiwgZm9yIFBFIHRvIGxvY2F0ZSBwZVNlc3Npb24gSUQKKyAgICB0U2lyTWFjQWRkciAgICAgICAgIHBlZXJNYWM7Cit9IHRTaXJUZGxzRGlzUmVxLCAqdHBTaXJTbWVUZGxzRGlzUmVxIDsKKwordHlwZWRlZiBzdHJ1Y3Qgc1NpclRkbHNMaW5rU2V0dXBSZXEKK3sKKyAgICB0QU5JX1UxNiAgICAgICAgICAgIG1lc3NhZ2VUeXBlOyAgIC8vIGVXTklfU01FX1RETFNfTElOS19TVEFSVF9SRVEKKyAgICB0QU5JX1UxNiAgICAgICAgICAgIGxlbmd0aDsKKyAgICB0QU5JX1U4ICAgICAgICAgICAgIHNlc3Npb25JZDsgICAgIC8vIFNlc3Npb24gSUQKKyAgICB0QU5JX1UxNiAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQ7IC8vIFRyYW5zYWN0aW9uIElEIGZvciBjbWQKKyAgICB0QU5JX1U4ICAgICAgICAgICAgIGRpYWxvZzsKKyAgICB0U2lyTWFjQWRkciAgICAgICAgIGJzc2lkOyAgICAgICAgIC8vIEZvciBtdWx0aS1zZXNzaW9uLCBmb3IgUEUgdG8gbG9jYXRlIHBlU2Vzc2lvbiBJRAorICAgIHRTaXJNYWNBZGRyICAgICAgICAgcGVlck1hYzsKK30gdFNpclRkbHNTZXR1cFJlcSwgKnRwU2lyU21lVGRsc1NldHVwUmVxIDsKKwordHlwZWRlZiBzdHJ1Y3Qgc1NpclRkbHNUZWFyZG93blJlcQoreworICAgIHRBTklfVTE2ICAgICAgICAgICAgbWVzc2FnZVR5cGU7ICAgLy8gZVdOSV9TTUVfVERMU19URUFSRE9XTl9SRVEKKyAgICB0QU5JX1UxNiAgICAgICAgICAgIGxlbmd0aDsKKyAgICB0QU5JX1U4ICAgICAgICAgICAgIHNlc3Npb25JZDsgICAgIC8vIFNlc3Npb24gSUQKKyAgICB0QU5JX1UxNiAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQ7IC8vIFRyYW5zYWN0aW9uIElEIGZvciBjbWQKKyAgICB0U2lyTWFjQWRkciAgICAgICAgIGJzc2lkOyAgICAgICAgIC8vIEZvciBtdWx0aS1zZXNzaW9uLCBmb3IgUEUgdG8gbG9jYXRlIHBlU2Vzc2lvbiBJRAorICAgIHRTaXJNYWNBZGRyICAgICAgICAgcGVlck1hYzsKK30gdFNpclRkbHNUZWFyZG93blJlcSwgKnRwU2lyU21lVGRsc1RlYXJkb3duUmVxIDsKKworCisvKiBURExTIHJlc3BvbnNlIHN0cnVjdCAgUEUtLT5TTUUgKi8KK3R5cGVkZWYgc3RydWN0IHNTaXJUZGxzRGlzY292ZXJ5UnNwCit7CisgICAgdEFOSV9VMTYgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTsKKyAgICB0QU5JX1UxNiAgICAgICAgICAgICAgIGxlbmd0aDsKKyAgICB0U2lyUmVzdWx0Q29kZXMgICAgICAgIHN0YXR1c0NvZGU7CisgICAgdEFOSV9VMTYgICAgICAgICAgICAgICBudW1EaXNTdGEgOworICAgIHRTaXJUZGxzUGVlckluZm8gICAgICAgdGRsc0Rpc1BlZXJJbmZvWzBdOworfSB0U2lyVGRsc0Rpc1JzcCwgKnRwU2lyU21lVGRsc0Rpc2NvdmVyeVJzcDsKKwordHlwZWRlZiBzdHJ1Y3Qgc1NpclRkbHNMaW5rU2V0dXBSc3AKK3sKKyAgICB0QU5JX1UxNiAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlOworICAgIHRBTklfVTE2ICAgICAgICAgICAgICAgbGVuZ3RoOworICAgIHRTaXJSZXN1bHRDb2RlcyAgICAgICAgc3RhdHVzQ29kZTsKKyAgICB0U2lyTWFjQWRkciAgICAgICAgICAgIHBlZXJNYWM7Cit9IHRTaXJUZGxzTGlua3NldHVwUnNwIDsKKwordHlwZWRlZiBzdHJ1Y3Qgc1NpclRkbHNMaW5rU2V0dXBJbmQKK3sKKyAgICB0QU5JX1UxNiAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlOworICAgIHRBTklfVTE2ICAgICAgICAgICAgICAgbGVuZ3RoOworICAgIHRTaXJSZXN1bHRDb2RlcyAgICAgICAgc3RhdHVzQ29kZTsKKyAgICB0U2lyTWFjQWRkciAgICAgICAgICAgIHBlZXJNYWM7Cit9IHRTaXJUZGxzTGlua1NldHVwSW5kIDsKKworCit0eXBlZGVmIHN0cnVjdCBzU2lyVGRsc1RlYXJkb3duUnNwCit7CisgICAgdEFOSV9VMTYgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTsKKyAgICB0QU5JX1UxNiAgICAgICAgICAgICAgIGxlbmd0aDsKKyAgICB0U2lyUmVzdWx0Q29kZXMgICAgICAgIHN0YXR1c0NvZGU7CisgICAgdFNpck1hY0FkZHIgICAgICAgICAgICBwZWVyTWFjOworfSB0U2lyVGRsc1RlYXJkb3duUnNwIDsKKwordHlwZWRlZiBzdHJ1Y3Qgc1NpclRkbHNQZWVySW5kCit7CisgICAgdEFOSV9VMTYgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTsKKyAgICB0QU5JX1UxNiAgICAgICAgICAgICAgIGxlbmd0aDsKKyAgICB0U2lyTWFjQWRkciAgICAgICAgICAgIHBlZXJNYWM7CisgICAgdEFOSV9VOCAgICAgICAgICAgICAgICBzZXNzaW9uSWQ7ICAgICAvLyBTZXNzaW9uIElECisgICAgdEFOSV9VMTYgICAgICAgICAgICAgICBzdGFJZCA7CisgICAgdEFOSV9VMTYgICAgICAgICAgICAgICBzdGFUeXBlIDsKKyAgICB0QU5JX1U4ICAgICAgICAgICAgICAgIHVjYXN0U2lnOworICAgIHRBTklfVTggICAgICAgICAgICAgICAgYmNhc3RTaWc7Cit9IHRTaXJUZGxzUGVlckluZCA7CisKK3R5cGVkZWYgc3RydWN0IHNTaXJUZGxzTGlua0VzdGFibGlzaEluZAoreworICAgIHRBTklfVTE2ICAgICAgICAgICAgICAgbWVzc2FnZVR5cGU7CisgICAgdEFOSV9VMTYgICAgICAgICAgICAgICBsZW5ndGg7CisgICAgdEFOSV9VOCAgICAgICAgICAgICAgICBiSXNSZXNwb25kZXI7ICAvKiBpZiB0aGlzIGlzIDEsIHNlbGYgaXMgaW5pdGlhdG9yIGFuZCBwZWVyIGlzIHJlcG9uZGVyICovCisgICAgdEFOSV9VOCAgICAgICAgICAgICAgICBsaW5rSWRlbk9mZnNldDsgIC8qIG9mZnNldCBvZiBMaW5rSWRlbnRpZmllcklFLmJzc2lkWzBdIGZyb20gcHRpVGVtcGxhdGVCdWYgKi8KKyAgICB0QU5JX1U4ICAgICAgICAgICAgICAgIHB0aUJ1ZlN0YXR1c09mZnNldDsgLyogb2Zmc2V0IG9mIEJ1ZmZlclN0YXR1cyBmcm9tIHB0aVRlbXBsYXRlQnVmICovCisgICAgdEFOSV9VOCAgICAgICAgICAgICAgICBwdGlUZW1wbGF0ZUxlbjsKKyAgICB0QU5JX1U4ICAgICAgICAgICAgICAgIHB0aVRlbXBsYXRlQnVmWzY0XTsKKyAgICB0QU5JX1U4ICAgICAgICAgICAgICAgIGV4dENhcGFiaWxpdHlbOF07CisvKiAgVGhpcyB3aWxsIGJlIHBhcnQgb2YgUFRJIHRlbXBsYXRlIHdoZW4gc2VudCBieSBQRSAgCisgICAgdEFOSV9VOCAgICAgICAgICAgICAgICBsaW5rSWRlbnRpZmllclsyMF07CisqLyAgICAKK30gdFNpclRkbHNMaW5rRXN0YWJsaXNoSW5kLCAqdHBTaXJUZGxzTGlua0VzdGFibGlzaEluZDsKKwordHlwZWRlZiBzdHJ1Y3Qgc1NpclRkbHNMaW5rVGVhcmRvd25JbmQKK3sKKyAgIHRBTklfVTE2ICAgICAgICAgICAgICAgbWVzc2FnZVR5cGU7CisgICB0QU5JX1UxNiAgICAgICAgICAgICAgIGxlbmd0aDsKKyAgIHRBTklfVTE2ICAgICAgICAgICAgICAgc3RhSWQ7Cit9IHRTaXJUZGxzTGlua1RlYXJkb3duSW5kLCAqdHBTaXJUZGxzTGlua1RlYXJkb3duSW5kOworCisjZW5kaWYgIC8qIEZFQVRVUkVfV0xBTl9URExTX0lOVEVSTkFMICovCisKICNlbmRpZiAvKiBfX1NJUl9BUElfSCAqLwpkaWZmIC0tZ2l0IGEvQ09SRS9NQUMvaW5jL3Npck1hY1Byb3REZWYuaCBiL0NPUkUvTUFDL2luYy9zaXJNYWNQcm90RGVmLmgKaW5kZXggNjM0NDhmMi4uYzBkZWVmMCAxMDA2NDQKLS0tIGEvQ09SRS9NQUMvaW5jL3Npck1hY1Byb3REZWYuaAorKysgYi9DT1JFL01BQy9pbmMvc2lyTWFjUHJvdERlZi5oCkBAIC0xNTUsMTQgKzE1NSwxNSBAQAogI2RlZmluZSBTSVJfTUFDX0FDVElPTl9RT1NfTUdNVCAgICAgICAgMQogI2RlZmluZSBTSVJfTUFDX0FDVElPTl9ETFAgICAgICAgICAgICAgMgogI2RlZmluZSBTSVJfTUFDX0FDVElPTl9CTEtBQ0sgICAgICAgICAgMworI2RlZmluZSBTSVJfTUFDX0FDVElPTl9QVUJMSUNfVVNBR0UgICAgNAogI2lmIGRlZmluZWQgV0xBTl9GRUFUVVJFX1ZPV0lGSQogI2RlZmluZSBTSVJfTUFDX0FDVElPTl9SUk0gICAgICAgICAgICAgNQogI2VuZGlmCiAjZGVmaW5lIFNJUl9NQUNfQUNUSU9OX0hUICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFNJUl9NQUNfQUNUSU9OX1dNRSAgICAgICAgICAgIDE3Ci0jaWYgZGVmaW5lZCBXTEFOX0ZFQVRVUkVfUDJQCi0jZGVmaW5lIFNJUl9NQUNfQUNUSU9OX1BVQkxJQ19VU0FHRSA0CisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKKyNkZWZpbmUgU0lSX01BQ19BQ1RJT05fVERMUyAgICAgICAgICAgMTIKICNlbmRpZgorI2RlZmluZSBTSVJfTUFDX0FDVElPTl9XTUUgICAgICAgICAgICAxNwogI2lmZGVmIFdMQU5fRkVBVFVSRV8xMUFDCiAjZGVmaW5lIFNJUl9NQUNfQUNUSU9OX1ZIVCAgICAgICAgICAgIDIxCiAjZW5kaWYKQEAgLTI0Niw2ICsyNDcsMTkgQEAKICNkZWZpbmUgU0lSX01BQ19BQ1RJT05fU0FfUVVFUlkgICAgICAgICAgICAgICA4IAogI2VuZGlmCiAKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworI2RlZmluZSBTSVJfTUFDX1RETFNfU0VUVVBfUkVRICAgICAgICAgICAwCisjZGVmaW5lIFNJUl9NQUNfVERMU19TRVRVUF9SU1AgICAgICAgICAgIDEKKyNkZWZpbmUgU0lSX01BQ19URExTX1NFVFVQX0NORiAgICAgICAgICAgMgorI2RlZmluZSBTSVJfTUFDX1RETFNfVEVBUkRPV04gICAgICAgICAgICAzCisjZGVmaW5lIFNJUl9NQUNfVERMU19QRUVSX1RSQUZGSUNfSU5EICAgIDQKKyNkZWZpbmUgU0lSX01BQ19URExTX0NIX1NXSVRDSF9SRVEgICAgICAgNQorI2RlZmluZSBTSVJfTUFDX1RETFNfQ0hfU1dJVENIX1JTUCAgICAgICA2CisjZGVmaW5lIFNJUl9NQUNfVERMU19QRUVSX1RSQUZGSUNfUlNQICAgIDkKKyNkZWZpbmUgU0lSX01BQ19URExTX0RJU19SRVEgICAgICAgICAgICAgMTAKKyNkZWZpbmUgU0lSX01BQ19URExTX0RJU19SU1AgICAgICAgICAgICAgMTQKKyNlbmRpZgorCiAjZGVmaW5lIFNJUl9NQUNfTUFYX1JBTkRPTV9MRU5HVEggICAyMzA2CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcxNiw3ICs3MzAsMTEgQEAKICAgICBlU0lSX01BQ19JTlZBTElEX1JTTl9DQVBBQklMSVRJRVNfUkVBU09OICAgICAgICAgPSAyMiwgLy9JbnZhbGlkIFJTTiBpbmZvcm1hdGlvbiBlbGVtZW50IGNhcGFiaWxpdGllcwogICAgIGVTSVJfTUFDXzFYX0FVVEhfRkFJTFVSRV9SRUFTT04gICAgICAgICAgICAgICAgICA9IDIzLCAvL0lFRUUgODAyLjFYIGF1dGhlbnRpY2F0aW9uIGZhaWxlZAogICAgIGVTSVJfTUFDX0NJUEhFUl9TVUlURV9SRUpFQ1RFRF9SRUFTT04gICAgICAgICAgICA9IDI0LCAvL0NpcGhlciBzdWl0ZSByZWplY3RlZCBiZWNhdXNlIG9mIHRoZSBzZWN1cml0eSBwb2xpY3kKLSAgICAvLyByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNSAtIDMxCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKKyAgICBlU0lSX01BQ19URExTX1RFQVJET1dOX1BFRVJfVU5SRUFDSEFCTEUgICAgICAgICAgPSAyNSwgLy9URExTIGRpcmVjdCBsaW5rIHRlYXJkb3duIGR1ZSB0byBURExTIHBlZXIgU1RBIHVucmVhY2hhYmxlIHZpYSB0aGUgVERMUyBkaXJlY3QgbGluaworICAgIGVTSVJfTUFDX1RETFNfVEVBUkRPV05fVU5TUEVDX1JFQVNPTiAgICAgICAgICAgICA9IDI2LCAvL1RETFMgZGlyZWN0IGxpbmsgdGVhcmRvd24gZm9yIHVuc3BlY2lmaWVkIHJlYXNvbgorI2VuZGlmCisgICAgLy8gcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcgLSAzMQogICAgIGVTSVJfTUFDX1FPU19VTlNQRUNJRklFRF9SRUFTT04gICAgICAgICAgICAgICAgICA9IDMyLCAvL0Rpc2Fzc29jaWF0ZWQgZm9yIHVuc3BlY2lmaWVkLCBRb1MtcmVsYXRlZCByZWFzb24KICAgICBlU0lSX01BQ19RQVBfTk9fQkFORFdJRFRIX1JFQVNPTiAgICAgICAgICAgICAgICAgPSAzMywgLy9EaXNhc3NvY2lhdGVkIGJlY2F1c2UgUW9TIEFQIGxhY2tzIHN1ZmZpY2llbnQgYmFuZHdpZHRoIGZvciB0aGlzIFFvUyBTVEEKICAgICBlU0lSX01BQ19YU19VTkFDS0VEX0ZSQU1FU19SRUFTT04gICAgICAgICAgICAgICAgPSAzNCwgLy9EaXNhc3NvY2lhdGVkIGJlY2F1c2UgZXhjZXNzaXZlIG51bWJlciBvZiBmcmFtZXMgbmVlZCB0byBiZSBhY2tub3dsZWRnZWQsIGJ1dCBhcmUgbm90CmRpZmYgLS1naXQgYS9DT1JFL01BQy9pbmMvd25pQXBpLmggYi9DT1JFL01BQy9pbmMvd25pQXBpLmgKaW5kZXggOGViZTVkMC4uMjE0YWU5MCAxMDA2NDQKLS0tIGEvQ09SRS9NQUMvaW5jL3duaUFwaS5oCisrKyBiL0NPUkUvTUFDL2luYy93bmlBcGkuaApAQCAtMzMwLDYgKzMzMCwzMyBAQAogI2VuZGlmIC8vIFdMQU5fV0FLRVVQX0VWRU5UUwogICAgIGVXTklfU01FX0VYQ0xVREVfVU5FTkNSWVBURUQsCiAgICAgZVdOSV9TTUVfUlNTSV9JTkQsIC8vUlNTSSBpbmRpY2F0aW9uIGZyb20gVEwgdG8gYmUgc2VyaWFsaXplZCBvbiBNQyB0aHJlYWQKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICAgIGVXTklfU01FX1RETFNfU0VORF9NR01UX1JFUSwgICAgCisgICAgZVdOSV9TTUVfVERMU19TRU5EX01HTVRfUlNQLCAgICAKKyAgICBlV05JX1NNRV9URExTX0FERF9TVEFfUkVRLCAgICAKKyAgICBlV05JX1NNRV9URExTX0FERF9TVEFfUlNQLCAgICAKKyAgICBlV05JX1NNRV9URExTX0RFTF9TVEFfUkVRLCAgICAKKyAgICBlV05JX1NNRV9URExTX0RFTF9TVEFfUlNQLCAgICAKKyNlbmRpZgorICAgIC8vTk9URTogSWYgeW91IGFyZSBwbGFubmluZyB0byBhZGQgbW9yZSBtZXNhZ2VzLCBwbGVhc2UgbWFrZSBzdXJlIHRoYXQgCisgICAgLy9TSVJfTElNX0lUQ19NU0dfVFlQRVNfQkVHSU4gaXMgbW92ZWQgYXBwcm9wcmlhdGVseS4gSXQgaXMgc2V0IGFzCisgICAgLy9TSVJfTElNX01TR19UWVBFU19CRUdJTisweEIwID0gMTJCMCAod2hpY2ggbWVhbnMgbWF4IG9mIDE3NiBtZXNzYWdlcyBhbmQKKyAgICAvL2VXTklfU01FX1RETFNfREVMX1NUQV9SU1AgPSAxNzUuCisgICAgLy9TaG91bGQgZml4IGFib3ZlIGlzc3VlIHRvIGVuYWJsZSBURExTX0lOVEVSTkFMCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKKyNlcnJvciBFUlJPUl9URExTX0lOVEVSTkFMCisgICAgZVdOSV9TTUVfVERMU19ESVNDT1ZFUllfU1RBUlRfUkVRLCAgICAKKyAgICBlV05JX1NNRV9URExTX0RJU0NPVkVSWV9TVEFSVF9SU1AsICAgIAorICAgIGVXTklfU01FX1RETFNfRElTQ09WRVJZX1NUQVJUX0lORCwgICAgCisgICAgZVdOSV9TTUVfVERMU19MSU5LX1NUQVJUX1JFUSwgICAgCisgICAgZVdOSV9TTUVfVERMU19MSU5LX1NUQVJUX1JTUCwgICAgCisgICAgZVdOSV9TTUVfVERMU19MSU5LX1NUQVJUX0lORCwgICAgCisgICAgZVdOSV9TTUVfVERMU19URUFSRE9XTl9SRVEsICAgIAorICAgIGVXTklfU01FX1RETFNfVEVBUkRPV05fUlNQLCAgICAKKyAgICBlV05JX1NNRV9URExTX1RFQVJET1dOX0lORCwgICAgCisgICAgZVdOSV9TTUVfQUREX1RETFNfUEVFUl9JTkQsICAgIAorICAgIGVXTklfU01FX0RFTEVURV9URExTX1BFRVJfSU5ELCAgICAKKyNlbmRpZgogICAgIGVXTklfU01FX01TR19UWVBFU19FTkQKIH07CiAKZGlmZiAtLWdpdCBhL0NPUkUvTUFDL3NyYy9pbmNsdWRlL2RvdDExZi5oIGIvQ09SRS9NQUMvc3JjL2luY2x1ZGUvZG90MTFmLmgKaW5kZXggNjA5YmQ4NS4uYTEwZmQ4YiAxMDA2NDQKLS0tIGEvQ09SRS9NQUMvc3JjL2luY2x1ZGUvZG90MTFmLmgKKysrIGIvQ09SRS9NQUMvc3JjL2luY2x1ZGUvZG90MTFmLmgKQEAgLTM1LDcgKzM1LDcgQEAKICAgKgogICAqCiAgICogVGhpcyBmaWxlIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSAnZnJhbWVzYycKLSAgKiBUdWUgT2N0IDMwIDEyOjA2OjEzIDIwMTIgZnJvbSB0aGUgZm9sbG93aW5nIGZpbGUocyk6CisgICogVHVlIE5vdiAxMyAxOToyMDowMyAyMDEyIGZyb20gdGhlIGZvbGxvd2luZyBmaWxlKHMpOgogICAqCiAgICogZG90MTFmLmZybXMKICAgKiAKQEAgLTM0NjEsOSArMzQ2MSwxMCBAQAogICAgIHRBTklfVTMyICAgICAgICAgICAgICBETVM6IDE7CiAgICAgdEFOSV9VMzIgICAgIFVUQ1RTRk9mZnNldDogMTsKICAgICB0QU5JX1UzMiBURExTUGVlclVBUFNEQnVmZmVyU1RBOiAxOworICAgIHRBTklfVTMyICBURExTUGVlclBTTVN1cHA6IDE7CiAgICAgdEFOSV9VMzIgVERMU0NoYW5uZWxTd2l0Y2hpbmc6IDE7CiAgICAgdEFOSV9VMzIgaW50ZXJ3b3JraW5nU2VydmljZTogMTsKLSAgICB0QU5JX1UzMiAgICAgICAgICAgcW9zTWFwOiAxOworICAgIHRBTklfVTE2ICAgICAgICAgICBxb3NNYXA6IDE7CiAgICAgdEFOSV9VMTYgICAgICAgICAgICAgIEVCUjogMTsKICAgICB0QU5JX1UxNiAgICBzc3BuSW50ZXJmYWNlOiAxOwogICAgIHRBTklfVTE2ICAgICAgICByZXNlcnZlZDQ6IDE7CkBAIC0zNDc4LDcgKzM0NzksNyBAQAogICAgIHRBTklfVTE2ICB3bm1Ob3RpZmljYXRpb246IDE7CiAgICAgdEFOSV9VMTYgICAgICAgIHJlc2VydmVkNTogMTsKICAgICB0QU5JX1UxNiAgICAgICAgIFVURjhTU0lEOiAxOwotICAgIHRBTklfVTE2ICAgICAgICByZXNlcnZlZDY6IDEzOworICAgIHRBTklfVTE2ICAgICAgICByZXNlcnZlZDY6IDEyOwogICAgIHRBTklfVTE2ICAgICAgVERMU1dpZGVyQlc6IDE7CiAgICAgdEFOSV9VMTYgb3Blck1vZGVOb3RpZmljYXRpb246IDE7CiAgICAgdEFOSV9VMTYgICAgICAgIHJlc2VydmVkNzogMTsKQEAgLTM4MzksNiArMzg0MCwzMyBAQAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9OyAvKiBFbmQgZXh0ZXJuICJDIi4gKi8KICNlbmRpZiAvKiBDKysgKi8KKy8vIEVJRCAxMDEgKDB4NjUpCit0eXBlZGVmIHN0cnVjdCBzRG90MTFmSUVMaW5rSWRlbnRpZmllciB7CisgICAgdEFOSV9VOCAgICAgIHByZXNlbnQ7CisgICAgdEFOSV9VOCAgICAgIGJzc2lkWzZdOworICAgIHRBTklfVTggICAgICBJbml0U3RhQWRkcls2XTsKKyAgICB0QU5JX1U4ICAgICAgUmVzcFN0YUFkZHJbNl07Cit9IHREb3QxMWZJRUxpbmtJZGVudGlmaWVyOworCisjZGVmaW5lIERPVDExRl9FSURfTElOS0lERU5USUZJRVIgKCAxMDEgKQorCisvLyBOLkIuIFRoZXNlICNkZWZpbmVzIGRvICpub3QqIGluY2x1ZGUgdGhlIEVJRCAmIGxlbmd0aAorI2RlZmluZSBET1QxMUZfSUVfTElOS0lERU5USUZJRVJfTUlOX0xFTiAoIDE4ICkKKworI2RlZmluZSBET1QxMUZfSUVfTElOS0lERU5USUZJRVJfTUFYX0xFTiAoIDE4ICkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBDKysgKi8KK3RBTklfVTMyIGRvdDExZlVucGFja0llTGlua0lkZW50aWZpZXIodHBBbmlTaXJHbG9iYWwsIHRBTklfVTgqLHRBTklfVTgsIHREb3QxMWZJRUxpbmtJZGVudGlmaWVyKik7CisKK3RBTklfVTMyIGRvdDExZlBhY2tJZUxpbmtJZGVudGlmaWVyKHRwQW5pU2lyR2xvYmFsLCB0RG90MTFmSUVMaW5rSWRlbnRpZmllciosIHRBTklfVTgqLCB0QU5JX1UzMiwgdEFOSV9VMzIqKTsKKwordEFOSV9VMzIgZG90MTFmR2V0UGFja2VkSUVMaW5rSWRlbnRpZmllcih0cEFuaVNpckdsb2JhbCwgdERvdDExZklFTGlua0lkZW50aWZpZXIqLCB0QU5JX1UzMiopOworCisjaWZkZWYgX19jcGx1c3BsdXMKK307IC8qIEVuZCBleHRlcm4gIkMiLiAqLworI2VuZGlmIC8qIEMrKyAqLwogLy8gRUlEIDM5ICgweDI3KQogdHlwZWRlZiBzdHJ1Y3Qgc0RvdDExZklFTWVhc3VyZW1lbnRSZXBvcnQgewogICAgIHRBTklfVTggICAgICBwcmVzZW50OwpAQCAtNDY2OCw2ICs0Njk2LDYxIEBACiAjaWZkZWYgX19jcGx1c3BsdXMKIH07IC8qIEVuZCBleHRlcm4gIkMiLiAqLwogI2VuZGlmIC8qIEMrKyAqLworLy8gRUlEIDEwNSAoMHg2OSkKK3R5cGVkZWYgc3RydWN0IHNEb3QxMWZJRVBUSUNvbnRyb2wgeworICAgIHRBTklfVTggICAgICBwcmVzZW50OworICAgIHRBTklfVTggICAgICB0aWQ7CisgICAgdEFOSV9VMTYgICAgIHNlcXVlbmNlX2NvbnRyb2w7Cit9IHREb3QxMWZJRVBUSUNvbnRyb2w7CisKKyNkZWZpbmUgRE9UMTFGX0VJRF9QVElDT05UUk9MICggMTA1ICkKKworLy8gTi5CLiBUaGVzZSAjZGVmaW5lcyBkbyAqbm90KiBpbmNsdWRlIHRoZSBFSUQgJiBsZW5ndGgKKyNkZWZpbmUgRE9UMTFGX0lFX1BUSUNPTlRST0xfTUlOX0xFTiAoIDMgKQorCisjZGVmaW5lIERPVDExRl9JRV9QVElDT05UUk9MX01BWF9MRU4gKCAzICkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBDKysgKi8KK3RBTklfVTMyIGRvdDExZlVucGFja0llUFRJQ29udHJvbCh0cEFuaVNpckdsb2JhbCwgdEFOSV9VOCosdEFOSV9VOCwgdERvdDExZklFUFRJQ29udHJvbCopOworCit0QU5JX1UzMiBkb3QxMWZQYWNrSWVQVElDb250cm9sKHRwQW5pU2lyR2xvYmFsLCB0RG90MTFmSUVQVElDb250cm9sKiwgdEFOSV9VOCosIHRBTklfVTMyLCB0QU5JX1UzMiopOworCit0QU5JX1UzMiBkb3QxMWZHZXRQYWNrZWRJRVBUSUNvbnRyb2wodHBBbmlTaXJHbG9iYWwsIHREb3QxMWZJRVBUSUNvbnRyb2wqLCB0QU5JX1UzMiopOworCisjaWZkZWYgX19jcGx1c3BsdXMKK307IC8qIEVuZCBleHRlcm4gIkMiLiAqLworI2VuZGlmIC8qIEMrKyAqLworLy8gRUlEIDEwNiAoMHg2YSkKK3R5cGVkZWYgc3RydWN0IHNEb3QxMWZJRVBVQnVmZmVyU3RhdHVzIHsKKyAgICB0QU5JX1U4ICAgICAgcHJlc2VudDsKKyAgICB0QU5JX1U4IGFjX2JrX3RyYWZmaWNfYXZhbDogMTsKKyAgICB0QU5JX1U4IGFjX2JlX3RyYWZmaWNfYXZhbDogMTsKKyAgICB0QU5JX1U4IGFjX3ZpX3RyYWZmaWNfYXZhbDogMTsKKyAgICB0QU5JX1U4IGFjX3ZvX3RyYWZmaWNfYXZhbDogMTsKKyAgICB0QU5JX1U4ICAgICAgICAgcmVzZXJ2ZWQ6IDQ7Cit9IHREb3QxMWZJRVBVQnVmZmVyU3RhdHVzOworCisjZGVmaW5lIERPVDExRl9FSURfUFVCVUZGRVJTVEFUVVMgKCAxMDYgKQorCisvLyBOLkIuIFRoZXNlICNkZWZpbmVzIGRvICpub3QqIGluY2x1ZGUgdGhlIEVJRCAmIGxlbmd0aAorI2RlZmluZSBET1QxMUZfSUVfUFVCVUZGRVJTVEFUVVNfTUlOX0xFTiAoIDEgKQorCisjZGVmaW5lIERPVDExRl9JRV9QVUJVRkZFUlNUQVRVU19NQVhfTEVOICggMSApCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogQysrICovCit0QU5JX1UzMiBkb3QxMWZVbnBhY2tJZVBVQnVmZmVyU3RhdHVzKHRwQW5pU2lyR2xvYmFsLCB0QU5JX1U4Kix0QU5JX1U4LCB0RG90MTFmSUVQVUJ1ZmZlclN0YXR1cyopOworCit0QU5JX1UzMiBkb3QxMWZQYWNrSWVQVUJ1ZmZlclN0YXR1cyh0cEFuaVNpckdsb2JhbCwgdERvdDExZklFUFVCdWZmZXJTdGF0dXMqLCB0QU5JX1U4KiwgdEFOSV9VMzIsIHRBTklfVTMyKik7CisKK3RBTklfVTMyIGRvdDExZkdldFBhY2tlZElFUFVCdWZmZXJTdGF0dXModHBBbmlTaXJHbG9iYWwsIHREb3QxMWZJRVBVQnVmZmVyU3RhdHVzKiwgdEFOSV9VMzIqKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9OyAvKiBFbmQgZXh0ZXJuICJDIi4gKi8KKyNlbmRpZiAvKiBDKysgKi8KIC8vIEVJRCAzMyAoMHgyMSkKIHR5cGVkZWYgc3RydWN0IHNEb3QxMWZJRVBvd2VyQ2FwcyB7CiAgICAgdEFOSV9VOCAgICAgIHByZXNlbnQ7CkBAIC03MTEyLDYgKzcxOTUsMjIxIEBACiB9IC8qIEVuZCBleHRlcm4gIkMiLiAqLwogI2VuZGlmIC8qIEMrKyAqLwogCit0eXBlZGVmIHN0cnVjdCBzRG90MTFmVERMU0Rpc1JlcXsKKyAgICB0RG90MTFmRmZDYXRlZ29yeSAgICAgICBDYXRlZ29yeTsKKyAgICB0RG90MTFmRmZBY3Rpb24gICAgICAgICBBY3Rpb247CisgICAgdERvdDExZkZmRGlhbG9nVG9rZW4gICAgRGlhbG9nVG9rZW47CisgICAgdERvdDExZklFTGlua0lkZW50aWZpZXIgTGlua0lkZW50aWZpZXI7Cit9IHREb3QxMWZURExTRGlzUmVxOworCisjZGVmaW5lIERPVDExRl9URExTRElTUkVRICggNDQgKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIEMrKyAqLworCit0QU5JX1UzMiBkb3QxMWZVbnBhY2tURExTRGlzUmVxKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHRBTklfVTggKnBCdWYsIHRBTklfVTMyIG5CdWYsIHREb3QxMWZURExTRGlzUmVxICpwRnJtKTsKK3RBTklfVTMyIGRvdDExZlBhY2tURExTRGlzUmVxKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHREb3QxMWZURExTRGlzUmVxICpwRnJtLCB0QU5JX1U4ICpwQnVmLCB0QU5JX1UzMiBuQnVmLCB0QU5JX1UzMiAqcG5Db25zdW1lZCk7Cit0QU5JX1UzMiBkb3QxMWZHZXRQYWNrZWRURExTRGlzUmVxU2l6ZSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVERMU0Rpc1JlcSAqcEZybSwgdEFOSV9VMzIgKnBuTmVlZGVkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIEVuZCBleHRlcm4gIkMiLiAqLworI2VuZGlmIC8qIEMrKyAqLworCit0eXBlZGVmIHN0cnVjdCBzRG90MTFmVERMU0Rpc1JzcHsKKyAgICB0RG90MTFmRmZDYXRlZ29yeSAgICAgICAgICBDYXRlZ29yeTsKKyAgICB0RG90MTFmRmZBY3Rpb24gICAgICAgICAgICBBY3Rpb247CisgICAgdERvdDExZkZmRGlhbG9nVG9rZW4gICAgICAgRGlhbG9nVG9rZW47CisgICAgdERvdDExZkZmQ2FwYWJpbGl0aWVzICAgICAgQ2FwYWJpbGl0aWVzOworICAgIHREb3QxMWZJRVN1cHBSYXRlcyAgICAgICAgIFN1cHBSYXRlczsKKyAgICB0RG90MTFmSUVFeHRTdXBwUmF0ZXMgICAgICBFeHRTdXBwUmF0ZXM7CisgICAgdERvdDExZklFU3VwcENoYW5uZWxzICAgICAgU3VwcENoYW5uZWxzOworICAgIHREb3QxMWZJRVJTTiAgICAgICAgICAgICAgIFJTTjsKKyAgICB0RG90MTFmSUVFeHRDYXAgICAgICAgICAgICBFeHRDYXA7CisgICAgdERvdDExZklFRlRJbmZvICAgICAgICAgICAgRlRJbmZvOworICAgIHREb3QxMWZJRUZUVGltZW91dEludGVydmFsIEZUVGltZW91dEludGVydmFsOworICAgIHREb3QxMWZJRVJJQ0RhdGEgICAgICAgICAgIFJJQ0RhdGE7CisgICAgdERvdDExZklFSFRDYXBzICAgICAgICAgICAgSFRDYXBzOworICAgIHREb3QxMWZJRUxpbmtJZGVudGlmaWVyICAgIExpbmtJZGVudGlmaWVyOworfSB0RG90MTFmVERMU0Rpc1JzcDsKKworI2RlZmluZSBET1QxMUZfVERMU0RJU1JTUCAoIDQ1ICkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBDKysgKi8KKwordEFOSV9VMzIgZG90MTFmVW5wYWNrVERMU0Rpc1JzcCh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1UzMiBuQnVmLCB0RG90MTFmVERMU0Rpc1JzcCAqcEZybSk7Cit0QU5JX1UzMiBkb3QxMWZQYWNrVERMU0Rpc1JzcCh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVERMU0Rpc1JzcCAqcEZybSwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdEFOSV9VMzIgKnBuQ29uc3VtZWQpOwordEFOSV9VMzIgZG90MTFmR2V0UGFja2VkVERMU0Rpc1JzcFNpemUodHBBbmlTaXJHbG9iYWwgcEN0eCwgdERvdDExZlRETFNEaXNSc3AgKnBGcm0sIHRBTklfVTMyICpwbk5lZWRlZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAvKiBFbmQgZXh0ZXJuICJDIi4gKi8KKyNlbmRpZiAvKiBDKysgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgc0RvdDExZlRETFNQZWVyVHJhZmZpY0luZHsKKyAgICB0RG90MTFmRmZDYXRlZ29yeSAgICAgICBDYXRlZ29yeTsKKyAgICB0RG90MTFmRmZBY3Rpb24gICAgICAgICBBY3Rpb247CisgICAgdERvdDExZkZmRGlhbG9nVG9rZW4gICAgRGlhbG9nVG9rZW47CisgICAgdERvdDExZklFTGlua0lkZW50aWZpZXIgTGlua0lkZW50aWZpZXI7CisgICAgdERvdDExZklFUFRJQ29udHJvbCAgICAgUFRJQ29udHJvbDsKKyAgICB0RG90MTFmSUVQVUJ1ZmZlclN0YXR1cyBQVUJ1ZmZlclN0YXR1czsKK30gdERvdDExZlRETFNQZWVyVHJhZmZpY0luZDsKKworI2RlZmluZSBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EICggNDYgKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIEMrKyAqLworCit0QU5JX1UzMiBkb3QxMWZVbnBhY2tURExTUGVlclRyYWZmaWNJbmQodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdERvdDExZlRETFNQZWVyVHJhZmZpY0luZCAqcEZybSk7Cit0QU5JX1UzMiBkb3QxMWZQYWNrVERMU1BlZXJUcmFmZmljSW5kKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHREb3QxMWZURExTUGVlclRyYWZmaWNJbmQgKnBGcm0sIHRBTklfVTggKnBCdWYsIHRBTklfVTMyIG5CdWYsIHRBTklfVTMyICpwbkNvbnN1bWVkKTsKK3RBTklfVTMyIGRvdDExZkdldFBhY2tlZFRETFNQZWVyVHJhZmZpY0luZFNpemUodHBBbmlTaXJHbG9iYWwgcEN0eCwgdERvdDExZlRETFNQZWVyVHJhZmZpY0luZCAqcEZybSwgdEFOSV9VMzIgKnBuTmVlZGVkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIEVuZCBleHRlcm4gIkMiLiAqLworI2VuZGlmIC8qIEMrKyAqLworCit0eXBlZGVmIHN0cnVjdCBzRG90MTFmVERMU1BlZXJUcmFmZmljUnNweworICAgIHREb3QxMWZGZkNhdGVnb3J5ICAgICAgIENhdGVnb3J5OworICAgIHREb3QxMWZGZkFjdGlvbiAgICAgICAgIEFjdGlvbjsKKyAgICB0RG90MTFmRmZEaWFsb2dUb2tlbiAgICBEaWFsb2dUb2tlbjsKKyAgICB0RG90MTFmSUVMaW5rSWRlbnRpZmllciBMaW5rSWRlbnRpZmllcjsKK30gdERvdDExZlRETFNQZWVyVHJhZmZpY1JzcDsKKworI2RlZmluZSBET1QxMUZfVERMU1BFRVJUUkFGRklDUlNQICggNDcgKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIEMrKyAqLworCit0QU5JX1UzMiBkb3QxMWZVbnBhY2tURExTUGVlclRyYWZmaWNSc3AodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdERvdDExZlRETFNQZWVyVHJhZmZpY1JzcCAqcEZybSk7Cit0QU5JX1UzMiBkb3QxMWZQYWNrVERMU1BlZXJUcmFmZmljUnNwKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHREb3QxMWZURExTUGVlclRyYWZmaWNSc3AgKnBGcm0sIHRBTklfVTggKnBCdWYsIHRBTklfVTMyIG5CdWYsIHRBTklfVTMyICpwbkNvbnN1bWVkKTsKK3RBTklfVTMyIGRvdDExZkdldFBhY2tlZFRETFNQZWVyVHJhZmZpY1JzcFNpemUodHBBbmlTaXJHbG9iYWwgcEN0eCwgdERvdDExZlRETFNQZWVyVHJhZmZpY1JzcCAqcEZybSwgdEFOSV9VMzIgKnBuTmVlZGVkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIEVuZCBleHRlcm4gIkMiLiAqLworI2VuZGlmIC8qIEMrKyAqLworCit0eXBlZGVmIHN0cnVjdCBzRG90MTFmVERMU1NldHVwQ25meworICAgIHREb3QxMWZGZkNhdGVnb3J5ICAgICAgICAgIENhdGVnb3J5OworICAgIHREb3QxMWZGZkFjdGlvbiAgICAgICAgICAgIEFjdGlvbjsKKyAgICB0RG90MTFmRmZTdGF0dXMgICAgICAgICAgICBTdGF0dXM7CisgICAgdERvdDExZkZmRGlhbG9nVG9rZW4gICAgICAgRGlhbG9nVG9rZW47CisgICAgdERvdDExZklFUlNOICAgICAgICAgICAgICAgUlNOOworICAgIHREb3QxMWZJRUVEQ0FQYXJhbVNldCAgICAgIEVEQ0FQYXJhbVNldDsKKyAgICB0RG90MTFmSUVGVEluZm8gICAgICAgICAgICBGVEluZm87CisgICAgdERvdDExZklFRlRUaW1lb3V0SW50ZXJ2YWwgRlRUaW1lb3V0SW50ZXJ2YWw7CisgICAgdERvdDExZklFSFRJbmZvICAgICAgICAgICAgSFRJbmZvOworICAgIHREb3QxMWZJRUxpbmtJZGVudGlmaWVyICAgIExpbmtJZGVudGlmaWVyOworICAgIHREb3QxMWZJRVdNTUluZm9TdGF0aW9uICAgIFdNTUluZm9TdGF0aW9uOworfSB0RG90MTFmVERMU1NldHVwQ25mOworCisjZGVmaW5lIERPVDExRl9URExTU0VUVVBDTkYgKCA0OCApCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogQysrICovCisKK3RBTklfVTMyIGRvdDExZlVucGFja1RETFNTZXR1cENuZih0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1UzMiBuQnVmLCB0RG90MTFmVERMU1NldHVwQ25mICpwRnJtKTsKK3RBTklfVTMyIGRvdDExZlBhY2tURExTU2V0dXBDbmYodHBBbmlTaXJHbG9iYWwgcEN0eCwgdERvdDExZlRETFNTZXR1cENuZiAqcEZybSwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdEFOSV9VMzIgKnBuQ29uc3VtZWQpOwordEFOSV9VMzIgZG90MTFmR2V0UGFja2VkVERMU1NldHVwQ25mU2l6ZSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVERMU1NldHVwQ25mICpwRnJtLCB0QU5JX1UzMiAqcG5OZWVkZWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLyogRW5kIGV4dGVybiAiQyIuICovCisjZW5kaWYgLyogQysrICovCisKK3R5cGVkZWYgc3RydWN0IHNEb3QxMWZURExTU2V0dXBSZXF7CisgICAgdERvdDExZkZmQ2F0ZWdvcnkgICAgICAgICAgQ2F0ZWdvcnk7CisgICAgdERvdDExZkZmQWN0aW9uICAgICAgICAgICAgQWN0aW9uOworICAgIHREb3QxMWZGZkRpYWxvZ1Rva2VuICAgICAgIERpYWxvZ1Rva2VuOworICAgIHREb3QxMWZGZkNhcGFiaWxpdGllcyAgICAgIENhcGFiaWxpdGllczsKKyAgICB0RG90MTFmSUVTdXBwUmF0ZXMgICAgICAgICBTdXBwUmF0ZXM7CisgICAgdERvdDExZklFQ291bnRyeSAgICAgICAgICAgQ291bnRyeTsKKyAgICB0RG90MTFmSUVFeHRTdXBwUmF0ZXMgICAgICBFeHRTdXBwUmF0ZXM7CisgICAgdERvdDExZklFU3VwcENoYW5uZWxzICAgICAgU3VwcENoYW5uZWxzOworICAgIHREb3QxMWZJRVJTTiAgICAgICAgICAgICAgIFJTTjsKKyAgICB0RG90MTFmSUVFeHRDYXAgICAgICAgICAgICBFeHRDYXA7CisgICAgdERvdDExZklFUU9TQ2Fwc1N0YXRpb24gICAgUU9TQ2Fwc1N0YXRpb247CisgICAgdERvdDExZklFRlRJbmZvICAgICAgICAgICAgRlRJbmZvOworICAgIHREb3QxMWZJRUZUVGltZW91dEludGVydmFsIEZUVGltZW91dEludGVydmFsOworICAgIHREb3QxMWZJRVJJQ0RhdGEgICAgICAgICAgIFJJQ0RhdGE7CisgICAgdERvdDExZklFSFRDYXBzICAgICAgICAgICAgSFRDYXBzOworICAgIHREb3QxMWZJRUxpbmtJZGVudGlmaWVyICAgIExpbmtJZGVudGlmaWVyOworICAgIHREb3QxMWZJRVdNTUluZm9TdGF0aW9uICAgIFdNTUluZm9TdGF0aW9uOworfSB0RG90MTFmVERMU1NldHVwUmVxOworCisjZGVmaW5lIERPVDExRl9URExTU0VUVVBSRVEgKCA0OSApCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogQysrICovCisKK3RBTklfVTMyIGRvdDExZlVucGFja1RETFNTZXR1cFJlcSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1UzMiBuQnVmLCB0RG90MTFmVERMU1NldHVwUmVxICpwRnJtKTsKK3RBTklfVTMyIGRvdDExZlBhY2tURExTU2V0dXBSZXEodHBBbmlTaXJHbG9iYWwgcEN0eCwgdERvdDExZlRETFNTZXR1cFJlcSAqcEZybSwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdEFOSV9VMzIgKnBuQ29uc3VtZWQpOwordEFOSV9VMzIgZG90MTFmR2V0UGFja2VkVERMU1NldHVwUmVxU2l6ZSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVERMU1NldHVwUmVxICpwRnJtLCB0QU5JX1UzMiAqcG5OZWVkZWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLyogRW5kIGV4dGVybiAiQyIuICovCisjZW5kaWYgLyogQysrICovCisKK3R5cGVkZWYgc3RydWN0IHNEb3QxMWZURExTU2V0dXBSc3B7CisgICAgdERvdDExZkZmQ2F0ZWdvcnkgICAgICAgICAgQ2F0ZWdvcnk7CisgICAgdERvdDExZkZmQWN0aW9uICAgICAgICAgICAgQWN0aW9uOworICAgIHREb3QxMWZGZlN0YXR1cyAgICAgICAgICAgIFN0YXR1czsKKyAgICB0RG90MTFmRmZEaWFsb2dUb2tlbiAgICAgICBEaWFsb2dUb2tlbjsKKyAgICB0RG90MTFmRmZDYXBhYmlsaXRpZXMgICAgICBDYXBhYmlsaXRpZXM7CisgICAgdERvdDExZklFU3VwcFJhdGVzICAgICAgICAgU3VwcFJhdGVzOworICAgIHREb3QxMWZJRUNvdW50cnkgICAgICAgICAgIENvdW50cnk7CisgICAgdERvdDExZklFRXh0U3VwcFJhdGVzICAgICAgRXh0U3VwcFJhdGVzOworICAgIHREb3QxMWZJRVN1cHBDaGFubmVscyAgICAgIFN1cHBDaGFubmVsczsKKyAgICB0RG90MTFmSUVSU04gICAgICAgICAgICAgICBSU047CisgICAgdERvdDExZklFRXh0Q2FwICAgICAgICAgICAgRXh0Q2FwOworICAgIHREb3QxMWZJRVFPU0NhcHNTdGF0aW9uICAgIFFPU0NhcHNTdGF0aW9uOworICAgIHREb3QxMWZJRUZUSW5mbyAgICAgICAgICAgIEZUSW5mbzsKKyAgICB0RG90MTFmSUVGVFRpbWVvdXRJbnRlcnZhbCBGVFRpbWVvdXRJbnRlcnZhbDsKKyAgICB0RG90MTFmSUVSSUNEYXRhICAgICAgICAgICBSSUNEYXRhOworICAgIHREb3QxMWZJRUhUQ2FwcyAgICAgICAgICAgIEhUQ2FwczsKKyAgICB0RG90MTFmSUVMaW5rSWRlbnRpZmllciAgICBMaW5rSWRlbnRpZmllcjsKKyAgICB0RG90MTFmSUVXTU1JbmZvU3RhdGlvbiAgICBXTU1JbmZvU3RhdGlvbjsKK30gdERvdDExZlRETFNTZXR1cFJzcDsKKworI2RlZmluZSBET1QxMUZfVERMU1NFVFVQUlNQICggNTAgKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIEMrKyAqLworCit0QU5JX1UzMiBkb3QxMWZVbnBhY2tURExTU2V0dXBSc3AodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdERvdDExZlRETFNTZXR1cFJzcCAqcEZybSk7Cit0QU5JX1UzMiBkb3QxMWZQYWNrVERMU1NldHVwUnNwKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHREb3QxMWZURExTU2V0dXBSc3AgKnBGcm0sIHRBTklfVTggKnBCdWYsIHRBTklfVTMyIG5CdWYsIHRBTklfVTMyICpwbkNvbnN1bWVkKTsKK3RBTklfVTMyIGRvdDExZkdldFBhY2tlZFRETFNTZXR1cFJzcFNpemUodHBBbmlTaXJHbG9iYWwgcEN0eCwgdERvdDExZlRETFNTZXR1cFJzcCAqcEZybSwgdEFOSV9VMzIgKnBuTmVlZGVkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIEVuZCBleHRlcm4gIkMiLiAqLworI2VuZGlmIC8qIEMrKyAqLworCit0eXBlZGVmIHN0cnVjdCBzRG90MTFmVERMU1RlYXJkb3dueworICAgIHREb3QxMWZGZkNhdGVnb3J5ICAgICAgIENhdGVnb3J5OworICAgIHREb3QxMWZGZkFjdGlvbiAgICAgICAgIEFjdGlvbjsKKyAgICB0RG90MTFmRmZSZWFzb24gICAgICAgICBSZWFzb247CisgICAgdERvdDExZklFRlRJbmZvICAgICAgICAgRlRJbmZvOworICAgIHREb3QxMWZJRUxpbmtJZGVudGlmaWVyIExpbmtJZGVudGlmaWVyOworfSB0RG90MTFmVERMU1RlYXJkb3duOworCisjZGVmaW5lIERPVDExRl9URExTVEVBUkRPV04gKCA1MSApCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogQysrICovCisKK3RBTklfVTMyIGRvdDExZlVucGFja1RETFNUZWFyZG93bih0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1UzMiBuQnVmLCB0RG90MTFmVERMU1RlYXJkb3duICpwRnJtKTsKK3RBTklfVTMyIGRvdDExZlBhY2tURExTVGVhcmRvd24odHBBbmlTaXJHbG9iYWwgcEN0eCwgdERvdDExZlRETFNUZWFyZG93biAqcEZybSwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdEFOSV9VMzIgKnBuQ29uc3VtZWQpOwordEFOSV9VMzIgZG90MTFmR2V0UGFja2VkVERMU1RlYXJkb3duU2l6ZSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVERMU1RlYXJkb3duICpwRnJtLCB0QU5JX1UzMiAqcG5OZWVkZWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLyogRW5kIGV4dGVybiAiQyIuICovCisjZW5kaWYgLyogQysrICovCisKIHR5cGVkZWYgc3RydWN0IHNEb3QxMWZUUENSZXBvcnR7CiAgICAgdERvdDExZkZmQ2F0ZWdvcnkgICAgQ2F0ZWdvcnk7CiAgICAgdERvdDExZkZmQWN0aW9uICAgICAgQWN0aW9uOwpAQCAtNzExOSw3ICs3NDE3LDcgQEAKICAgICB0RG90MTFmSUVUUENSZXBvcnQgICBUUENSZXBvcnQ7CiB9IHREb3QxMWZUUENSZXBvcnQ7CiAKLSNkZWZpbmUgRE9UMTFGX1RQQ1JFUE9SVCAoIDQ0ICkKKyNkZWZpbmUgRE9UMTFGX1RQQ1JFUE9SVCAoIDUyICkKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTcxNDAsNyArNzQzOCw3IEBACiAgICAgdERvdDExZklFVFBDUmVxdWVzdCAgVFBDUmVxdWVzdDsKIH0gdERvdDExZlRQQ1JlcXVlc3Q7CiAKLSNkZWZpbmUgRE9UMTFGX1RQQ1JFUVVFU1QgKCA0NSApCisjZGVmaW5lIERPVDExRl9UUENSRVFVRVNUICggNTMgKQogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtNzE2Myw3ICs3NDYxLDcgQEAKICAgICB0RG90MTFmSUVDQ1hUcmFmU3RybVJhdGVTZXQgQ0NYVHJhZlN0cm1SYXRlU2V0OwogfSB0RG90MTFmV01NQWRkVFNSZXF1ZXN0OwogCi0jZGVmaW5lIERPVDExRl9XTU1BRERUU1JFUVVFU1QgKCA0NiApCisjZGVmaW5lIERPVDExRl9XTU1BRERUU1JFUVVFU1QgKCA1NCApCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC03MTg2LDcgKzc0ODQsNyBAQAogICAgIHREb3QxMWZJRUNDWFRyYWZTdHJtTWV0IENDWFRyYWZTdHJtTWV0OwogfSB0RG90MTFmV01NQWRkVFNSZXNwb25zZTsKIAotI2RlZmluZSBET1QxMUZfV01NQUREVFNSRVNQT05TRSAoIDQ3ICkKKyNkZWZpbmUgRE9UMTFGX1dNTUFERFRTUkVTUE9OU0UgKCA1NSApCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC03MjA4LDcgKzc1MDYsNyBAQAogICAgIHREb3QxMWZJRVdNTVRTUEVDICAgIFdNTVRTUEVDOwogfSB0RG90MTFmV01NRGVsVFM7CiAKLSNkZWZpbmUgRE9UMTFGX1dNTURFTFRTICggNDggKQorI2RlZmluZSBET1QxMUZfV01NREVMVFMgKCA1NiApCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CmRpZmYgLS1naXQgYS9DT1JFL01BQy9zcmMvaW5jbHVkZS9zaXJQYXJhbXMuaCBiL0NPUkUvTUFDL3NyYy9pbmNsdWRlL3NpclBhcmFtcy5oCmluZGV4IDgyZGQ5YzguLmNiZGQ2NjYgMTAwNjQ0Ci0tLSBhL0NPUkUvTUFDL3NyYy9pbmNsdWRlL3NpclBhcmFtcy5oCisrKyBiL0NPUkUvTUFDL3NyYy9pbmNsdWRlL3NpclBhcmFtcy5oCkBAIC03NCw2ICs3NCw3IEBACiAgICBET1QxMUFDID0gMiwKICAgIFNMTV9TRVNTSU9OSVpBVElPTiA9IDMsCiAgICBET1QxMUFDX09QTU9ERSA9IDQsCisgICBURExTID0gNiwKICAgIE1BWF9GRUFUVVJFX1NVUFBPUlRFRCA9IDEyOCwKIH0gcGxhY2VIb2xkZXJJbkNhcEJpdG1hcDsKIApAQCAtNTQyLDYgKzU0MywxMiBAQAogI2RlZmluZSBTSVJfSEFMX1VQREFURV9PUF9NT0RFICAgICAgICAgICAgIChTSVJfSEFMX0lUQ19NU0dfVFlQRVNfQkVHSU4gKyAxODgpCiAjZW5kaWYKIAorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisvLy8gUEUgPC0+IEhBTCBURExTIG1lc3NhZ2VzCisjZGVmaW5lIFNJUl9IQUxfVERMU19MSU5LX0VTVEFCTElTSCAgICAgICAgKFNJUl9IQUxfSVRDX01TR19UWVBFU19CRUdJTiArIDE4OSkKKyNkZWZpbmUgU0lSX0hBTF9URExTX0xJTktfVEVBUkRPV04gICAgICAgICAoU0lSX0hBTF9JVENfTVNHX1RZUEVTX0JFR0lOICsgMTkwKQorI2VuZGlmCisKICNkZWZpbmUgU0lSX0hBTF9NU0dfVFlQRVNfRU5EICAgICAgICAgICAgICAoU0lSX0hBTF9JVENfTVNHX1RZUEVTX0JFR0lOICsgMHhGRikKIC8vIENGRyBtZXNzYWdlIHR5cGVzCiAjZGVmaW5lIFNJUl9DRkdfTVNHX1RZUEVTX0JFR0lOICAgICAgICAoU0lSX0NGR19NT0RVTEVfSUQgPDwgOCkKQEAgLTY0OCw2ICs2NTUsMTIgQEAKICNkZWZpbmUgU0lSX0xJTV9ESVNBU1NPQ19BQ0tfVElNRU9VVCAgICAgICAoU0lSX0xJTV9USU1FT1VUX01TR19TVEFSVCArIDB4MjYpCiAjZGVmaW5lIFNJUl9MSU1fREVBVVRIX0FDS19USU1FT1VUICAgICAgIChTSVJfTElNX1RJTUVPVVRfTVNHX1NUQVJUICsgMHgyNykKICNkZWZpbmUgU0lSX0xJTV9QRVJJT0RJQ19KT0lOX1BST0JFX1JFUV9USU1FT1VUIChTSVJfTElNX1RJTUVPVVRfTVNHX1NUQVJUICsgMHgyOCkKKworI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTX0lOVEVSTkFMCisjZGVmaW5lIFNJUl9MSU1fVERMU19ESVNDT1ZFUllfUlNQX1dBSVQgICAgIChTSVJfTElNX1RJTUVPVVRfTVNHX1NUQVJUICsgMHgyOSkKKyNkZWZpbmUgU0lSX0xJTV9URExTX0xJTktfU0VUVVBfUlNQX1RJTUVPVVQgKFNJUl9MSU1fVElNRU9VVF9NU0dfU1RBUlQgKyAweDJBKQorI2RlZmluZSBTSVJfTElNX1RETFNfTElOS19TRVRVUF9DTkZfVElNRU9VVCAoU0lSX0xJTV9USU1FT1VUX01TR19TVEFSVCArIDB4MkIpCisjZW5kaWYKICNkZWZpbmUgU0lSX0xJTV9NU0dfVFlQRVNfRU5EICAgICAgICAgICAgKFNJUl9MSU1fTVNHX1RZUEVTX0JFR0lOKzB4RkYpCiAKIC8vIFNDSCBtZXNzYWdlIHR5cGVzCmRpZmYgLS1naXQgYS9DT1JFL01BQy9zcmMvcGUvaW5jbHVkZS9saW1HbG9iYWwuaCBiL0NPUkUvTUFDL3NyYy9wZS9pbmNsdWRlL2xpbUdsb2JhbC5oCmluZGV4IGRlMDBmN2YuLjFjZWU2MDEgMTAwNjQ0Ci0tLSBhL0NPUkUvTUFDL3NyYy9wZS9pbmNsdWRlL2xpbUdsb2JhbC5oCisrKyBiL0NPUkUvTUFDL3NyYy9wZS9pbmNsdWRlL2xpbUdsb2JhbC5oCkBAIC00NSw2ICs0NSw5IEBACiAjaW5jbHVkZSAiY3NyQXBpLmgiCiAjaW5jbHVkZSAic2FwQXBpLmgiCiAjZW5kaWYKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworI2luY2x1ZGUgImRvdDExZi5oIgorI2VuZGlmCiAKIC8vLyBNYXhpbXVtIG51bWJlciBvZiBzY2FuIGhhc2ggdGFibGUgZW50cmllcwogI2RlZmluZSBMSU1fTUFYX05VTV9PRl9TQ0FOX1JFU1VMVFMgMjU2CkBAIC03NTQsNCArNzU3LDU4IEBACiAgICAgdEFOSV9CT09MRUFOICAgICAgIGZSYWRhckRldEN1ck9wZXJDaGFuOyAvKiBSYWRhciBkZXRlY3RlZCBpbiBjdXIgb3BlciBjaGFuIG9uIEFQICovCiAgICAgdEFOSV9CT09MRUFOICAgICAgIGZSYWRhckludHJDb25maWd1cmVkOyAvKiBXaGV0aGVyIHJhZGFyIGludGVycnVwdCBoYXMgYmVlbiBjb25maWd1cmVkICovCiB9dExpbVNwZWNNZ210SW5mbywgKnRwTGltU3BlY01nbXRJbmZvOworCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKK3R5cGVkZWYgc3RydWN0IHNMaW1EaXNSZXN1bHRMaXN0Cit7CisgICAgc3RydWN0IHNMaW1EaXNSZXN1bHRMaXN0ICpuZXh0IDsKKyAgICB0U2lyVGRsc1BlZXJJbmZvIHRkbHNEaXNQZWVySW5mbyA7Cit9dExpbURpc1Jlc3VsdExpc3QgOworI2VuZGlmCisKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworLyoKKyAqIFBlZXIgaW5mbyBuZWVkZWQgZm9yIFRETFMgc2V0dXAuLgorICovCit0eXBlZGVmIHN0cnVjdCB0TGltVERMU1BlZXJTdGEKK3sKKyAgICBzdHJ1Y3QgdExpbVRETFNQZWVyU3RhICAgKm5leHQ7CisgICAgdEFOSV9VOCAgICAgICAgICAgICAgICAgIGRpYWxvZyA7CisgICAgdFNpck1hY0FkZHIgICAgICAgICAgICAgIHBlZXJNYWM7CisgICAgdFNpck1hY0NhcGFiaWxpdHlJbmZvICAgIGNhcGFiaWxpdHlJbmZvOworICAgIHRTaXJNYWNSYXRlU2V0ICAgICAgICAgICBzdXBwb3J0ZWRSYXRlczsKKyAgICB0U2lyTWFjUmF0ZVNldCAgICAgICAgICAgZXh0ZW5kZWRSYXRlczsKKyAgICB0U2lyTWFjUW9zQ2FwYWJpbGl0eVN0YUlFIHFvc0NhcHM7CisgICAgdFNpck1hY0VkY2FQYXJhbVNldElFICAgIGVkY2FQYXJhbXM7CisgICAgdEFOSV9VOCAgICAgICAgICAgICAgICAgIG1jc1NldFtTSVpFX09GX1NVUFBPUlRFRF9NQ1NfU0VUXTsgICAgCisgICAgdEFOSV9VOCAgICAgICAgICAgICAgICAgIHRkbHNfYklzUmVzcG9uZGVyIDsKKyAgICAvKiBIVCBDYXBhYmlsdGllcyAqLworICAgIHREb3QxMWZJRUhUQ2FwcyB0ZGxzUGVlckhUQ2FwcyA7CisgICAgdERvdDExZklFRXh0Q2FwIHRkbHNQZWVyRXh0Q2FwczsKKyAgICB0QU5JX1U4IHRkbHNfZmxhZ3MgOworICAgIHRBTklfVTggdGRsc19saW5rX3N0YXRlIDsKKyAgICB0QU5JX1U4IHRkbHNfcHJldl9saW5rX3N0YXRlIDsKKyAgICB0QU5JX1U4IHRkbHNfc2Vzc2lvbklkOworICAgIHRBTklfVTggRXh0UmF0ZXNQcmVzZW50IDsKKyAgICBUWF9USU1FUiBnTGltVGRsc0xpbmtTZXR1cFJzcFRpbWVvdXRUaW1lciA7CisgICAgVFhfVElNRVIgZ0xpbVRkbHNMaW5rU2V0dXBDbmZUaW1lb3V0VGltZXIgOworfXRMaW1UZGxzTGlua1NldHVwUGVlciwgKnRwTGltVGRsc0xpbmtTZXR1cFBlZXIgOworCit0eXBlZGVmIHN0cnVjdCB0TGltVGRsc0xpbmtTZXR1cEluZm8KK3sKKyAgICB0TGltVGRsc0xpbmtTZXR1cFBlZXIgKnRkbHNMaW5rU2V0dXBMaXN0IDsKKyAgICB0QU5JX1U4IG51bV90ZGxzX3BlZXJzIDsKKyAgICB0QU5JX1U4IHRkbHNfZmxhZ3MgOworICAgIHRBTklfVTggdGRsc19zdGF0ZSA7CisgICAgdEFOSV9VOCB0ZGxzX3ByZXZfc3RhdGUgOyAKK310TGltVGRsc0xpbmtTZXR1cEluZm8sICp0cExpbVRkbHNMaW5rU2V0dXBJbmZvIDsKKwordHlwZWRlZiBlbnVtIHRkbHNMaW5rTW9kZQoreworICAgIFRETFNfTElOS19NT0RFX0JHLAorICAgIFRETFNfTElOS19NT0RFX04sCisgICAgVERMU19MSU5LX01PREVfTk9ORQorfSBlTGltVGRsc0xpbmtNb2RlIDsKKyNlbmRpZiAgLyogRkVBVFVSRV9XTEFOX1RETFMgKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9DT1JFL01BQy9zcmMvcGUvbGltL2xpbUFJRG1nbXQuYyBiL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltQUlEbWdtdC5jCmluZGV4IGMxZTFhNGUuLjBmOGFmYjIgMTAwNjQ0Ci0tLSBhL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltQUlEbWdtdC5jCisrKyBiL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltQUlEbWdtdC5jCkBAIC00MSw2ICs0MSwxMSBAQAogI2luY2x1ZGUgImxpbVNlc3Npb24uaCIKIAogI2RlZmluZSBMSU1fU1RBUlRfQUlEICAgMQorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTX0lOVEVSTkFMIAorI2RlZmluZSBMSU1fU1RBUlRfQUlEX1NUQSAgIDIKKyNlbHNlCisjZGVmaW5lIExJTV9TVEFSVF9BSURfU1RBICAgMQorI2VuZGlmCiAKIAogLyoqCmRpZmYgLS1naXQgYS9DT1JFL01BQy9zcmMvcGUvbGltL2xpbUFzc29jVXRpbHMuYyBiL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltQXNzb2NVdGlscy5jCmluZGV4IDIxNGFkOGQuLmMxZjFiNzEgMTAwNjQ0Ci0tLSBhL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltQXNzb2NVdGlscy5jCisrKyBiL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltQXNzb2NVdGlscy5jCkBAIC0yMDI2LDggKzIwMjYsMTIgQEAKIAogCiAgICAgLy9jb21wdXRlIHRoZSBtYXRjaGluZyBNQ1MgcmF0ZSBzZXQsIGlmIHBlZXIgaXMgMTFuIGNhcGFibGUgYW5kIHNlbGYgbW9kZSBpcyAxMW4KKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICAgIGlmKHBTdGFEcy0+bWxtU3RhQ29udGV4dC5odENhcGFiaWxpdHkpCisjZWxzZQogICAgIGlmKElTX0RPVDExX01PREVfSFQocHNlc3Npb25FbnRyeS0+ZG90MTFtb2RlKSAmJgogICAgICAgKHBTdGFEcy0+bWxtU3RhQ29udGV4dC5odENhcGFiaWxpdHkpKQorI2VuZGlmCiAgICAgewogICAgICAgICB2YWwgPSBTSVpFX09GX1NVUFBPUlRFRF9NQ1NfU0VUOwogICAgICAgICBpZiAod2xhbl9jZmdHZXRTdHIocE1hYywgV05JX0NGR19TVVBQT1JURURfTUNTX1NFVCwKQEAgLTIxMjYsNiArMjEzMCwxMyBAQAogICAgICAgICAobGltR2V0U3lzdGVtUm9sZShwc2Vzc2lvbkVudHJ5KSA9PSBlTElNX1NUQV9JTl9JQlNTX1JPTEUpIHx8CiAgICAgICAgIChsaW1HZXRTeXN0ZW1Sb2xlKHBzZXNzaW9uRW50cnkpID09IGVMSU1fQlRfQU1QX0FQX1JPTEUpICkKICAgICAgICAgcFN0YUFkZHIgPSAmcFN0YURzLT5zdGFBZGRyOworI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisgICAgLyogU3lzdGVtUm9sZSBzaG91bGRuJ3QgYmUgbWF0dGVyIGlmIHN0YVR5cGUgaXMgVERMUyBwZWVyICovCisgICAgZWxzZSBpZihTVEFfRU5UUllfVERMU19QRUVSID09IHBTdGFEcy0+c3RhVHlwZSkKKyAgICB7CisgICAgICAgIHBTdGFBZGRyID0gJnBTdGFEcy0+c3RhQWRkciA7CisgICAgfQorI2VuZGlmCiAgICAgZWxzZQogICAgICAgICBwU3RhQWRkciA9ICZzdGFNYWM7CiAKQEAgLTIxNzAsNiArMjE4MSwxMSBAQAogICAgICAgICBwQWRkU3RhUGFyYW1zLT52aHRDYXBhYmxlID0gcFN0YURzLT5tbG1TdGFDb250ZXh0LnZodENhcGFiaWxpdHk7CiAjZW5kaWYKICAgICB9CisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKKyAgICAvKiBTeXN0ZW1Sb2xlIHNob3VsZG4ndCBiZSBtYXR0ZXIgaWYgc3RhVHlwZSBpcyBURExTIHBlZXIgKi8KKyAgICBlbHNlIGlmKFNUQV9FTlRSWV9URExTX1BFRVIgPT0gcFN0YURzLT5zdGFUeXBlKQorICAgICAgICBwQWRkU3RhUGFyYW1zLT5odENhcGFibGUgPSBwU3RhRHMtPm1sbVN0YUNvbnRleHQuaHRDYXBhYmlsaXR5OworI2VuZGlmCiAgICAgZWxzZQogICAgIHsKICAgICAgICAgcEFkZFN0YVBhcmFtcy0+aHRDYXBhYmxlID0gcHNlc3Npb25FbnRyeS0+aHRDYXBhYmlsaXR5OwpAQCAtMjIyMCw3ICsyMjM2LDEyIEBACiAgICAgfQogCiAjaWZkZWYgV0xBTl9TT0ZUQVBfRkVBVFVSRQorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisgICAgaWYocFN0YURzLT53bWVFbmFibGVkICYmIFwKKyAgICAgICAoKGVMSU1fQVBfUk9MRSA9PSBwc2Vzc2lvbkVudHJ5LT5saW1TeXN0ZW1Sb2xlKSB8fCAoU1RBX0VOVFJZX1RETFNfUEVFUiA9PSBwU3RhRHMtPnN0YVR5cGUpKSApCisjZWxzZQogICAgIGlmKHBTdGFEcy0+d21lRW5hYmxlZCAmJiAoZUxJTV9BUF9ST0xFID09IHBzZXNzaW9uRW50cnktPmxpbVN5c3RlbVJvbGUpKQorI2VuZGlmICAgICAgCiAgICAgewogICAgICAgICBwQWRkU3RhUGFyYW1zLT51QVBTRCA9IDA7CiAgICAgICAgIC8qIHVwZGF0ZSBVQVBTRCBhbmQgc2VuZCBpdCB0byBMSU0gdG8gYWRkIFNUQSAqLwpAQCAtMjMzMCw3ICsyMzUxLDExIEBACiAgICAgfQogI2VuZGlmCiAKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICAgIGlmKCAoKGVMSU1fU1RBX1JPTEUgPT0gR0VUX0xJTV9TWVNURU1fUk9MRShwc2Vzc2lvbkVudHJ5KSkgJiYgKHBTdGFEcy0+c3RhVHlwZSAhPSAgU1RBX0VOVFJZX1RETFNfUEVFUikpIHx8KGVMSU1fQlRfQU1QX1NUQV9ST0xFID09IEdFVF9MSU1fU1lTVEVNX1JPTEUocHNlc3Npb25FbnRyeSkpICkKKyNlbHNlCiAgICAgaWYoIChlTElNX1NUQV9ST0xFID09IEdFVF9MSU1fU1lTVEVNX1JPTEUocHNlc3Npb25FbnRyeSkpIHx8KGVMSU1fQlRfQU1QX1NUQV9ST0xFID09IEdFVF9MSU1fU1lTVEVNX1JPTEUocHNlc3Npb25FbnRyeSkpICkKKyNlbmRpZgogICAgICAgcERlbFN0YVBhcmFtcy0+c3RhSWR4PSBwc2Vzc2lvbkVudHJ5LT5zdGFJZDsKICAgICAKICAgICBlbHNlCmRpZmYgLS1naXQgYS9DT1JFL01BQy9zcmMvcGUvbGltL2xpbURlYnVnLmggYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbURlYnVnLmgKaW5kZXggZDZiNDlmOC4uOWI4ZmExNyAxMDA2NDQKLS0tIGEvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1EZWJ1Zy5oCisrKyBiL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltRGVidWcuaApAQCAtMzksNCArMzksMTMgQEAKIAogdm9pZCBsaW1Mb2codHBBbmlTaXJHbG9iYWwgcE1hYywgdEFOSV9VMzIgbG9nbGV2ZWwsIGNvbnN0IGNoYXIgKnBTdHJpbmcsLi4uKSA7CiAKKy8qIGRlZmluZSB0aGlzIHRvIHNob3cgbW9yZSBtZXNzYWdlIGluIHRoZSBMSU0gZHVyaW5nIFRETFMgZGV2ZWxvcG1lbnQgKi8KKyNkZWZpbmUgTElNX0RFQlVHX1RETFMKKworI2lmZGVmIExJTV9ERUJVR19URExTCisjZGVmaW5lIExJTV9MT0dfVERMUyh4MCkgeDAKKyNlbHNlCisjZGVmaW5lIExJTV9MT0dfVERMUyh4MCkgCisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVByb2Nlc3NBY3Rpb25GcmFtZS5jIGIvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1Qcm9jZXNzQWN0aW9uRnJhbWUuYwppbmRleCBhMTI1NDUwLi4wYmM0ZDgwIDEwMDY0NAotLS0gYS9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVByb2Nlc3NBY3Rpb25GcmFtZS5jCisrKyBiL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltUHJvY2Vzc0FjdGlvbkZyYW1lLmMKQEAgLTIxNTQsNiArMjE1NCwyNyBAQAogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisgICAgICAgICAgIGNhc2UgU0lSX01BQ19URExTX0RJU19SU1A6CisgICAgICAgICAgIHsKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19JTlRFUk5BTAorICAgICAgICAgICAgICAgLy9MSU1fTE9HX1RETFMocHJpbnRrKCJQdWJsaWMgQWN0aW9uIFRETFMgRGlzY292ZXJ5IFJTUCAuLlxuIikpIDsKKyAgICAgICAgICAgICAgIGxpbVByb2Nlc3NUZGxzUHVibGljQWN0aW9uRnJhbWUocE1hYywgKHRBTklfVTMyKilwUnhQYWNrZXRJbmZvLCBwc2Vzc2lvbkVudHJ5KSA7CisjZWxzZQorICAgICAgICAgICAgICAgdHBTaXJNYWNNZ210SGRyICAgICBwSGRyOworICAgICAgICAgICAgICAgdEFOSV9VMzIgICAgICAgICAgICBmcmFtZUxlbjsKKworICAgICAgICAgICAgICAgcEhkciA9IFdEQV9HRVRfUlhfTUFDX0hFQURFUihwUnhQYWNrZXRJbmZvKTsKKyAgICAgICAgICAgICAgIGZyYW1lTGVuID0gV0RBX0dFVF9SWF9QQVlMT0FEX0xFTihwUnhQYWNrZXRJbmZvKTsKKyAgICAgICAgICAgICAgIFZPU19UUkFDRShWT1NfTU9EVUxFX0lEX1BFLCBWT1NfVFJBQ0VfTEVWRUxfSU5GTywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIlB1YmxpYyBBY3Rpb24gVERMUyBEaXNjb3ZlcnkgUlNQIC4uXG4iKSkgOworICAgICAgICAgICAgICAgbGltU2VuZFNtZU1nbXRGcmFtZUluZChwTWFjLCBwSGRyLT5mYy5zdWJUeXBlLCAKKyAgICAgICAgICAgICAgICAgICh0QU5JX1U4KilwSGRyLCBmcmFtZUxlbiArIHNpemVvZih0U2lyTWFjTWdtdEhkciksIDAsIAorICAgICAgICAgICAgICAgICAgV0RBX0dFVF9SWF9DSCggcFJ4UGFja2V0SW5mbyApLCBwc2Vzc2lvbkVudHJ5KTsKKyNlbmRpZgorICAgICAgICAgICB9CisgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBQRUxPR0UobGltTG9nKHBNYWMsIExPR0UsIEZMKCJVbmhhbmRsZWQgcHVibGljIGFjdGlvbiBmcmFtZSAtLSAleCBcbiIpLCBwQWN0aW9uSGRyLT5hY3Rpb25JRCk7KQpkaWZmIC0tZ2l0IGEvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1Qcm9jZXNzTWVzc2FnZVF1ZXVlLmMgYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVByb2Nlc3NNZXNzYWdlUXVldWUuYwppbmRleCAyODBiZTk2Li42MTRlNGU3IDEwMDY0NAotLS0gYS9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVByb2Nlc3NNZXNzYWdlUXVldWUuYworKysgYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVByb2Nlc3NNZXNzYWdlUXVldWUuYwpAQCAtNTU0LDExICs1NTQsNTggQEAKICAgICAgICAvKlNlbmQgZGlzYXNzb2NpYXRpb24gbWVzc2FnZSBhZ2FpbiovCiAgICAgICAgLy9EaW5lc2ggbmVlZCBvbmUgbW9yZSBhcmd1ZW1lbnQuIAogICAgICAgIC8vbGltU2VuZERpc2Fzc29jTWdtdEZyYW1lKHBNYWMsIGVTSVJfTUFDX0NMQVNTM19GUkFNRV9GUk9NX05PTl9BU1NPQ19TVEFfUkVBU09OLCh0QU5JX1U4ICopIHBSeFBhY2tldEluZm8pOworICAgIC8vVE9ETzogdmVyaWZ5IHRoaXMgICAKICNpZiBkZWZpbmVkIFdMQU5fRkVBVFVSRV9QMlAKICAgICAvL1RoaXMgY291bGQgYmUgYSBwdWJsaWMgYWN0aW9uIGZyYW1lLgogICAgIGlmKCBwc2Vzc2lvbkVudHJ5LT5saW1TeXN0ZW1Sb2xlID09IGVMSU1fUDJQX0RFVklDRV9ST0xFICkKICAgICAgICAgbGltUHJvY2Vzc0FjdGlvbkZyYW1lTm9TZXNzaW9uKHBNYWMsICh0QU5JX1U4ICopIHBSeFBhY2tldEluZm8pOwogI2VuZGlmCisKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICAgIHsKKyAgICAgICAgdHBTaXJNYWNEYXRhSGRyM2EgcE1hY0hkcjsKKyAgICAgICAgcE1hY0hkciA9IFdEQV9HRVRfUlhfTVBEVUhFQURFUjNBKHBSeFBhY2tldEluZm8pOworCisgICAgICAgIGlmIChsaW1Jc0dyb3VwQWRkcihwTWFjSGRyLT5hZGRyMikpCisgICAgICAgIHsKKyAgICAgICAgICAgIFBFTE9HMihsaW1Mb2cocE1hYywgTE9HMiwgRkwoIklnbm9yaW5nIEEyIEludmFsaWQgUGFja2V0IHJlY2VpdmVkIGZvciBNQy9CQzpcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgbGltUHJpbnRNYWNBZGRyKHBNYWMsIHBNYWNIZHItPmFkZHIyLCBMT0cyKTspCisKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLyogVERMU19oa2xlZTogbW92ZSBkb3duIGhlcmUgdG8gcmVqZWN0IEFkZHIyID09IEdyb3VwIChmaXJzdCBjaGVja2luZyBhYm92ZSkKKyAgICAgICAgICAgYW5kIGFsc28gY2hlY2tpbmcgaWYgU3lzdGVtUm9sZSA9PSBTVEEgKi8KKyAgICAgICAgaWYgKHBzZXNzaW9uRW50cnktPmxpbVN5c3RlbVJvbGUgPT0gZUxJTV9TVEFfUk9MRSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQUREIGhhbmRsaW5nIG9mIFB1YmxpYyBBY3Rpb24gRnJhbWUgKi8KKyAgICAgICAgICAgIExJTV9MT0dfVERMUyhWT1NfVFJBQ0UoVk9TX01PRFVMRV9JRF9QRSwgVk9TX1RSQUNFX0xFVkVMX0VSUk9SLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoImxpbUhhbmRsZVVua25vd25BMkluZGV4RnJhbWVzOiB0eXBlPTB4JXgsIHN1YnR5cGU9MHgleFxuIikscE1hY0hkci0+ZmMudHlwZSwgcE1hY0hkci0+ZmMuc3ViVHlwZSkpOyAKKyAgICAgICAgICAgIHN3aXRjaCAocE1hY0hkci0+ZmMudHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNJUl9NQUNfTUdNVF9GUkFNRToKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwTWFjSGRyLT5mYy5zdWJUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU0lSX01BQ19NR01UX0FDVElPTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltUHJvY2Vzc0FjdGlvbkZyYW1lKHBNYWMsIHBSeFBhY2tldEluZm8sIHBzZXNzaW9uRW50cnkpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogI2VuZGlmCiAKICAgICByZXR1cm47CkBAIC05NTEsOSArOTk4LDMwIEBACiAKICAgICAgICAgfQogICAgICAgICBicmVhazsKLSNpZmRlZiBGRUFUVVJFX1dMQU5fQ0NYCiAgICAgICAgIGNhc2UgU0lSX01BQ19EQVRBX0ZSQU1FOgogICAgICAgICB7CisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBpZiB3ZSByZWFjaCBoZXJlLCBmb2xsb3dpbmcgY2FzZXMgYXJlIHBvc3NpYmxlLiAKKyAgICAgICAgICAgICAqIFBvc3NpYmxlIGNhc2VzOiBhKSBpZiBmcmFtZSB0cmFuc2xhdGlvbiBpcyBkaXNhYmxlZC4KKyAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICBiKSBTb21lIGZyYW1lIHdpdGggQURSUjIgZmlsdGVyIGVuYWJsZWQgbWF5IGNvbWUKKyAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBoZXJlLgorICAgICAgICAgICAgICovIAorICAgICAgICAgICAgdEFOSV9VOCAqZGF0YU9mZnNldCA9IFdEQV9HRVRfUlhfTVBEVV9EQVRBKHBSeFBhY2tldEluZm8pOworICAgICAgICAgICAgdEFOSV9VOCAqcmZjMTA0MkhkciA9ICh0QU5JX1U4ICopKGRhdGFPZmZzZXQgKyBSRkMxMDQyX0hEUl9MRU5HVEgpIDsKKyAgICAgICAgICAgIHRBTklfVTE2IGV0aFR5cGUgPSBHRVRfQkUxNihyZmMxMDQySGRyKSA7CisgICAgICAgICAgICBWT1NfVFJBQ0UoVk9TX01PRFVMRV9JRF9QRSwgVk9TX1RSQUNFX0xFVkVMX0VSUk9SLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJURExTIGZyYW1lIHdpdGggODAyMTEgSGVhZGVyXG4iKSkgOworICAgICAgICAgICAgaWYoRVRIX1RZUEVfODlfMGQgPT0gZXRoVHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0QU5JX1U4IHBheWxvYWRUeXBlID0gKHJmYzEwNDJIZHIgKyBFVEhfVFlQRV9MRU4pWzBdIDsKKyAgICAgICAgICAgICAgICBpZihQQVlMT0FEX1RZUEVfVERMUyA9PSBwYXlsb2FkVHlwZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGxpbVByb2Nlc3NUZGxzRnJhbWUocE1hYywgKHRBTklfVTMyKilwUnhQYWNrZXRJbmZvKSA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAgICAgCisjZW5kaWYKKyNpZmRlZiBGRUFUVVJFX1dMQU5fQ0NYCiAgICAgICAgICAgICAgLyogV2UgYWNjZXB0IGRhdGEgZnJhbWUgKElBUFAgZnJhbWUpIG9ubHkgaWYgU2Vzc2lvbiBpcwogICAgICAgICAgICAgICAqIHByZXNlbnQgYW5kIGNjeCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIG9uIHRoYXQKICAgICAgICAgICAgICAgKiBzZXNzaW9uCkBAIC05NjEsOSArMTAyOSw5IEBACiAgICAgICAgICAgICAgaWYgKHBzZXNzaW9uRW50cnkgJiYgcHNlc3Npb25FbnRyeS0+aXNDQ1hjb25uZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgIGxpbVByb2Nlc3NJYXBwRnJhbWUocE1hYywgcFJ4UGFja2V0SW5mbywgcHNlc3Npb25FbnRyeSk7CiAgICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIFJlY2VpdmVkIGZyYW1lIG9mIHR5cGUgJ3Jlc2VydmVkJwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjYyLDYgKzEzMzAsOSBAQAogICAgICAgICAgICAgICAgIHZvc19wa3RfdCAgKnBWb3NQa3Q7CiAgICAgICAgICAgICAgICAgVk9TX1NUQVRVUyAgdm9zU3RhdHVzOwogICAgICAgICAgICAgICAgIHRTaXJNc2dRICAgIGxpbU1zZ05ldzsKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19JTlRFUk5BTAorICAgICAgICAgICAgICAgIHRBTklfVTMyICAgICpwQkQgPSBOVUxMIDsKKyNlbmRpZiAKIAogICAgICAgICAgICAgICAgIC8qIFRoZSBvcmlnaW5hbCBsaW1Nc2cgd2hpY2ggd2Ugd2VyZSBkZWZlcnJpbmcgaGF2ZSB0aGUgCiAgICAgICAgICAgICAgICAgICogYm9keVBvaW50ZXIgcG9pbnQgdG8gJ0JEJyBpbnN0ZWFkIG9mICdWb3MgcGt0Jy4gSWYgd2UgZG9uJ3QgbWFrZSBhIGNvcHkKQEAgLTEyODEsNiArMTM1MiwyNCBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19JTlRFUk5BTAorICAgICAgICAgICAgICAgIC8qIAorICAgICAgICAgICAgICAgICAqIFRETFMgZnJhbWVzIGNvbWVzIGFzIHRyYW5zbGF0ZWQgZnJhbWVzIGFzIHdlbGwgYXMKKyAgICAgICAgICAgICAgICAgKiBNQUMgODAyLjExIGRhdGEgZnJhbWVzLi4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBsaW1HZXRCRGZyb21SeFBhY2tldChwTWFjLCBsaW1Nc2dOZXcuYm9keXB0ciwgJnBCRCk7CisgICAgICAgICAgICAgICAgaWYoMCAhPSBXREFfR0VUX1JYX0ZUX0RPTkUocEJEKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIFRPRE86IGNoZWNrIGZvciBzY2FubmluZyBzdGF0ZSBhbmQgc2V0IGRlZmVyTWVzZyBmbGFnCisgICAgICAgICAgICAgICAgICAgICAqIGFjY29yZGluZ2x5Li4KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGRlZmVyTXNnID0gZmFsc2UgOworCisgICAgICAgICAgICAgICAgICAgIGxpbVByb2Nlc3NUZGxzRnJhbWUocE1hYywgcEJEKSA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyNlbmRpZgogICAgICAgICAgICAgICAgIGxpbUhhbmRsZTgwMjExRnJhbWVzKHBNYWMsICZsaW1Nc2dOZXcsICZkZWZlck1zZyk7CiAKICAgICAgICAgICAgICAgICBpZiAoIGRlZmVyTXNnID09IHRydWUgKQpAQCAtMTMyNSw2ICsxNDE0LDE2IEBACiAjaWZkZWYgRkVBVFVSRV9PRU1fREFUQV9TVVBQT1JUCiAgICAgICAgIGNhc2UgZVdOSV9TTUVfT0VNX0RBVEFfUkVROgogI2VuZGlmCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKKyAgICAgICAgY2FzZSBlV05JX1NNRV9URExTX1NFTkRfTUdNVF9SRVE6CisgICAgICAgIGNhc2UgZVdOSV9TTUVfVERMU19BRERfU1RBX1JFUToKKyAgICAgICAgY2FzZSBlV05JX1NNRV9URExTX0RFTF9TVEFfUkVROgorI2VuZGlmCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKKyAgICAgICAgY2FzZSBlV05JX1NNRV9URExTX0RJU0NPVkVSWV9TVEFSVF9SRVE6CisgICAgICAgIGNhc2UgZVdOSV9TTUVfVERMU19MSU5LX1NUQVJUX1JFUToKKyAgICAgICAgY2FzZSBlV05JX1NNRV9URExTX1RFQVJET1dOX1JFUToKKyNlbmRpZgogICAgICAgICAgICAgLy8gVGhlc2UgbWVzc2FnZXMgYXJlIGZyb20gSERECiAgICAgICAgICAgICBsaW1Qcm9jZXNzTm9ybWFsSGRkTXNnKHBNYWMsIGxpbU1zZywgdHJ1ZSk7ICAvL25lZWQgdG8gcmVzcG9uc2UgdG8gaGRkCiAgICAgICAgICAgICBicmVhazsKQEAgLTE4MDIsNiArMTkwMSw5MiBAQAogCiAjZW5kaWYKIAorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTX0lOVEVSTkFMCisgICAgICAgIC8qCisgICAgICAgICAqIEhlcmUgZGlzY292ZXJ5IHRpbWVyIGV4cGlyZXMsIG5vdyB3ZSBjYW4gZ28gYWhlYWQgYW5kIGNvbGxlY3QgYWxsCisgICAgICAgICAqIHRoZSBkaWNvdmVyeSByZXNwb25zZXMgUEUgaGFzIHByb2Nlc3MgdGlsbCBub3cgYW5kIHNlbmQgdGhpcworICAgICAgICAgKiByZXNwb25zZXMgdG8gU01FLi4KKyAgICAgICAgICovCisgICAgICAgIGNhc2UgU0lSX0xJTV9URExTX0RJU0NPVkVSWV9SU1BfV0FJVDoKKyAgICAgICAgeworICAgICAgICAgICAgLy9mZXRjaCB0aGUgc2Vzc2lvbkVudHJ5IGJhc2VkIG9uIHRoZSBzZXNzaW9uSWQKKyAgICAgICAgICAgIHRwUEVTZXNzaW9uIHBzZXNzaW9uRW50cnkgPSBwZUZpbmRTZXNzaW9uQnlTZXNzaW9uSWQocE1hYywgCisgICAgICAgICAgICAgICAgICAgICAgICAgcE1hYy0+bGltLmxpbVRpbWVycy5nTGltVGRsc0Rpc1JzcFdhaXRUaW1lci5zZXNzaW9uSWQpIDsKKyAgICAgICAgICAgIGlmKE5VTEwgPT0gcHNlc3Npb25FbnRyeSkgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGxpbUxvZyhwTWFjLCBMT0dQLEZMKCJTZXNzaW9uIERvZXMgbm90IGV4aXN0IGZvciBnaXZlbiBzZXNzaW9uSUQgJWRcbiIpLCBwTWFjLT5saW0ubGltVGltZXJzLmdMaW1UZGxzRGlzUnNwV2FpdFRpbWVyLnNlc3Npb25JZCk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgVk9TX1RSQUNFKFZPU19NT0RVTEVfSURfSERELCBWT1NfVFJBQ0VfTEVWRUxfRVJST1IsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkRpc2NvdmVyeSBSc3AgdGltZXIgZXhwaXJlcyBcbiIpKSA7CisjaWYgMCAvLyBURExTX2hrbGVlOiBEMTMgbm8gbmVlZCB0byBvcGVuIEFkZHIyIHVua25vd24gZGF0YSBwYWNrZXQgCisgICAgICAgICAgICAvKiByZXN0b3JlIFJYUCBmaWx0ZXJzICovCisgICAgICAgICAgICBsaW1TZXRMaW5rU3RhdGUocE1hYywgZVNJUl9MSU5LX0ZJTklTSF9URExTX0RJU0NPVkVSWV9TVEFURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNlc3Npb25FbnRyeS0+YnNzSWQpIDsKKyNlbmRpZgorICAgICAgICAgICAgbGltU2VuZFNtZVRkbHNEaXNSc3AocE1hYywgZVNJUl9TVUNDRVNTLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVdOSV9TTUVfVERMU19ESVNDT1ZFUllfU1RBUlRfUlNQKSA7CisgICAgICAgICAgICBicmVhayA7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiB3ZSBpbml0aWF0ZWQgbGluayBzZXR1cCBhbmQgZGlkIG5vdCByZWNlaXZlIFRETFMgc2V0dXAgcnNwCisgICAgICAgICAqIGZyb20gVERMUyBwZWVyIFNUQSwgc2VuZCBmYWlsdXJlIFJTUCB0byBTTUUuCisgICAgICAgICAqLworICAgICAgICBjYXNlIFNJUl9MSU1fVERMU19MSU5LX1NFVFVQX1JTUF9USU1FT1VUOgorICAgICAgICB7CisgICAgICAgICAgICB0QU5JX1U4ICpwZWVyTWFjID0gKHRBTklfVTggKilsaW1Nc2ctPmJvZHl2YWwgOworICAgICAgICAgICAgdExpbVRkbHNMaW5rU2V0dXBQZWVyICpzZXR1cFBlZXIgPSBOVUxMIDsKKyAKKyAgICAgICAgICAgIFZPU19UUkFDRShWT1NfTU9EVUxFX0lEX1BFLCBWT1NfVFJBQ0VfTEVWRUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiVERMUyBzZXR1cCByc3AgdGltZXIgZXhwaXJlcyBcbiIpKSA7CisgICAgICAgICAgICBWT1NfVFJBQ0UoVk9TX01PRFVMRV9JRF9QRSwgVk9TX1RSQUNFX0xFVkVMX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAgICgiVERMUyBzZXR1cCByc3AgdGltZXIgZXhwaXJlcyBmb3IgcGVlcjpcbiIpKSA7CisgICAgICAgICAgICBWT1NfVFJBQ0UoVk9TX01PRFVMRV9JRF9QRSwgVk9TX1RSQUNFX0xFVkVMX0lORk8sCisgICAgICAgICAgICAgICAgICAgICgiJTAyWCwgJTAyWCwgJTAyWCwlMDJYLCAlMDJYLCAlMDJYXG4iKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyTWFjWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlck1hY1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJNYWNbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyTWFjWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlck1hY1s0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJNYWNbNV0pOworCisgICAgICAgICAgICBsaW1UZGxzRmluZExpbmtQZWVyKHBNYWMsIHBlZXJNYWMsICZzZXR1cFBlZXIpIDsKKyAgICAgICAgICAgIGlmKE5VTEwgIT0gc2V0dXBQZWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxpbVRkbHNEZWxMaW5rUGVlciggcE1hYywgcGVlck1hYykgOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsaW1TZW5kU21lVGRsc0xpbmtTdGFydFJzcChwTWFjLCBlU0lSX0ZBSUxVUkUsIHBlZXJNYWMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlV05JX1NNRV9URExTX0xJTktfU1RBUlRfUlNQKSA7CisgICAgICAgICAgICBicmVhayA7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBTSVJfTElNX1RETFNfTElOS19TRVRVUF9DTkZfVElNRU9VVDoKKyAgICAgICAgeworICAgICAgICAgICAgdEFOSV9VOCAqcGVlck1hYyA9ICh0QU5JX1U4ICopbGltTXNnLT5ib2R5dmFsIDsKKyAgICAgICAgICAgIHRMaW1UZGxzTGlua1NldHVwUGVlciAqc2V0dXBQZWVyID0gTlVMTCA7CisKKyAgICAgICAgICAgIFZPU19UUkFDRShWT1NfTU9EVUxFX0lEX1BFLCBWT1NfVFJBQ0VfTEVWRUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiVERMUyBzZXR1cCBDTkYgdGltZXIgZXhwaXJlcyBcbiIpKSA7CisgICAgICAgICAgICBWT1NfVFJBQ0UoVk9TX01PRFVMRV9JRF9QRSwgVk9TX1RSQUNFX0xFVkVMX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAgKCJURExTIHNldHVwIENORiB0aW1lciBleHBpcmVzIGZvciBwZWVyOlxuIikpIDsKKyAgICAgICAgICAgIFZPU19UUkFDRShWT1NfTU9EVUxFX0lEX1BFLCBWT1NfVFJBQ0VfTEVWRUxfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAoIiUwMlgsICUwMlgsICUwMlgsJTAyWCwgJTAyWCwgJTAyWFxuIiksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlck1hY1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJNYWNbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyTWFjWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlck1hY1szXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJNYWNbNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyTWFjWzVdKTsKKyAgICAgICAgICAgIGxpbVRkbHNGaW5kTGlua1BlZXIocE1hYywgcGVlck1hYywgJnNldHVwUGVlcikgOworICAgICAgICAgICAgaWYoTlVMTCAhPSBzZXR1cFBlZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGltVGRsc0RlbExpbmtQZWVyKCBwTWFjLCBwZWVyTWFjKSA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhayA7CisgICAgICAgIH0KKyNlbmRpZiAgIC8qIEZFQVRVUkVfV0xBTl9URExTIFRJTUVSICovCiAgICAgICAgIGNhc2UgV0RBX0FERF9CU1NfUlNQOgogICAgICAgICAgICAgbGltUHJvY2Vzc01sbUFkZEJzc1JzcCggcE1hYywgbGltTXNnICk7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltUHJvY2Vzc01sbVJlcU1lc3NhZ2VzLmMgYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVByb2Nlc3NNbG1SZXFNZXNzYWdlcy5jCmluZGV4IDE2ZWFkZmIuLjg1NzcxMGQgMTAwNjQ0Ci0tLSBhL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltUHJvY2Vzc01sbVJlcU1lc3NhZ2VzLmMKKysrIGIvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1Qcm9jZXNzTWxtUmVxTWVzc2FnZXMuYwpAQCAtMzI2NCw2ICszMjY0LDkgQEAKICAgICBzd2l0Y2goIHBzZXNzaW9uRW50cnktPmxpbVN5c3RlbVJvbGUgKSB7CiAgICAgY2FzZSBlTElNX1NUQV9ST0xFOgogICAgIGNhc2UgZUxJTV9CVF9BTVBfU1RBX1JPTEU6CisgICAgICAvL0luIGNhc2Ugb2YgVERMUywgcGVlck1hYyBhZGRyZXNzIG5lZWQgbm90IGJlIEJzc0lkLiBTa2lwIHRoaXMgY2hlY2sKKyAgICAgIC8vaWYgVERMUyBpcyBlbmFibGVkLgorI2lmbmRlZiBGRUFUVVJFX1dMQU5fVERMUwogICAgICAgICBpZigoIWxpbUlzQWRkckJDKCBwTWxtU2V0S2V5c1JlcS0+cGVlck1hY0FkZHIgKSApICYmCiAgICAgICAgICAgKCFwYWxFcXVhbE1lbW9yeSggcE1hYy0+aEhkZCxwTWxtU2V0S2V5c1JlcS0+cGVlck1hY0FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEJzc0lkLCBzaXplb2YodFNpck1hY0FkZHIpKSkgKXsKQEAgLTMyNzQsNiArMzI3Nyw3IEBACiAgICAgICAgIG1sbVNldEtleXNDbmYucmVzdWx0Q29kZSA9IGVTSVJfU01FX0lOVkFMSURfUEFSQU1FVEVSUzsKICAgICAgICAgZ290byBlbmQ7CiAgICAgICB9CisjZW5kaWYKICAgICAgIC8vIEZhbGwgdGhydScgJiAnUGx1bWInIGtleXMgYmVsb3cKICAgICAgIGJyZWFrOwogICAgIGNhc2UgZUxJTV9TVEFfSU5fSUJTU19ST0xFOgpkaWZmIC0tZ2l0IGEvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1Qcm9jZXNzTWxtUnNwTWVzc2FnZXMuYyBiL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltUHJvY2Vzc01sbVJzcE1lc3NhZ2VzLmMKaW5kZXggODQxNzhjZC4uMzAyM2E1ZiAxMDA2NDQKLS0tIGEvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1Qcm9jZXNzTWxtUnNwTWVzc2FnZXMuYworKysgYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVByb2Nlc3NNbG1Sc3BNZXNzYWdlcy5jCkBAIC0zMDk2LDYgKzMwOTYsMTIgQEAKICAgICAgICAgICAgICAgICBQRUxPR0UobGltTG9nKHBNYWMsIExPR0UsIEZMKCJjb3VsZCBub3QgQWRkIFNlbGYgRW50cnkgZm9yIHRoZSBzdGF0aW9uXG4iKSk7KQogICAgICAgICAgICAgICAgIG1sbUFzc29jQ25mLnJlc3VsdENvZGUgPSAodFNpclJlc3VsdENvZGVzKSBlU0lSX1NNRV9SRUZVU0VEOwogICAgICAgICAgICAgfQorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTX0lOVEVSTkFMCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgIC8qIGluaXRpYWxpemUgVERMUyBwZWVyIHJlbGF0ZWQgZGF0YSAqLworICAgICAgICAgICAgICAgbGltSW5pdFRkbHNEYXRhKHBNYWMscHNlc3Npb25FbnRyeSk7CisgICAgICAgICAgICB9CisjZW5kaWYgICAgICAgICAgICAKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCmRpZmYgLS1naXQgYS9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVByb2Nlc3NTbWVSZXFNZXNzYWdlcy5jIGIvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1Qcm9jZXNzU21lUmVxTWVzc2FnZXMuYwppbmRleCA4MTNiNmE2Li4zYzM2YzM3IDEwMDY0NAotLS0gYS9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVByb2Nlc3NTbWVSZXFNZXNzYWdlcy5jCisrKyBiL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltUHJvY2Vzc1NtZVJlcU1lc3NhZ2VzLmMKQEAgLTQ4NTMsNiArNDg1MywzMTAgQEAKIH0gLyoqKiBlbmQgX19saW1Qcm9jZXNzU21lUmVnaXN0ZXJNZ210RnJhbWVSZXEoKSAqKiovCiAjZW5kaWYKIAorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTX0lOVEVSTkFMCisvKgorICogUHJvY2VzcyBEaXNjb3ZlcnkgcmVxdWVzdCByZWNpZXZlZCBmcm9tIFNNRSBhbmQgdHJhbnNtaXQgdG8gQVAuCisgKi8KK3N0YXRpYyB0U2lyUmV0U3RhdHVzIGxpbVByb2Nlc3NTbWVEaXNTdGFydFJlcSh0cEFuaVNpckdsb2JhbCBwTWFjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdEFOSV9VMzIgKnBNc2dCdWYpCit7CisgICAgLyogZ2V0IGFsbCBkaXNjb3ZlcnkgcmVxdWVzdCBwYXJhbWV0ZXJzICovCisgICAgdFNpclRkbHNEaXNSZXEgKmRpc1JlcSA9ICh0U2lyVGRsc0Rpc1JlcSAqKSBwTXNnQnVmIDsKKyAgICB0cFBFU2Vzc2lvbiBwc2Vzc2lvbkVudHJ5OworICAgIHRBTklfVTggICAgICBzZXNzaW9uSWQ7CisKKyAgICBWT1NfVFJBQ0UoVk9TX01PRFVMRV9JRF9QRSwgVk9TX1RSQUNFX0xFVkVMX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJEaXNjb3ZlcnkgUmVxIFJlY2lldmVkXG4iKSkgOworCisgICAgaWYoKHBzZXNzaW9uRW50cnkgPSBwZUZpbmRTZXNzaW9uQnlCc3NpZChwTWFjLCBkaXNSZXEtPmJzc2lkLCAmc2Vzc2lvbklkKSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgIFZPU19UUkFDRShWT1NfTU9EVUxFX0lEX1BFLCBWT1NfVFJBQ0VfTEVWRUxfRVJST1IsIAorICAgICAgICAgICAgICAgICAgICAiUEUgU2Vzc2lvbiBkb2VzIG5vdCBleGlzdCBmb3IgZ2l2ZW4gc21lIHNlc3Npb25JZCAlZFxuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNSZXEtPnNlc3Npb25JZCk7CisgICAgICAgICBnb3RvIGxpbV90ZGxzX2Rpc19zdGFydF9lcnJvcjsKKyAgICB9CisgICAgCisgICAgLyogY2hlY2sgaWYgd2UgYXJlIGluIHByb3BlciBzdGF0ZSB0byB3b3JrIGFzIFRETFMgY2xpZW50ICovIAorICAgIGlmIChwc2Vzc2lvbkVudHJ5LT5saW1TeXN0ZW1Sb2xlICE9IGVMSU1fU1RBX1JPTEUpCisgICAgeworICAgICAgICBWT1NfVFJBQ0UoVk9TX01PRFVMRV9JRF9QRSwgVk9TX1RSQUNFX0xFVkVMX0VSUk9SLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzIHJlcSByZWNlaXZlZCBpbiB3cm9uZyBzeXN0ZW0gUm9sZSAlZFxuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Vzc2lvbkVudHJ5LT5saW1TeXN0ZW1Sb2xlKTsKKyAgICAgICAgZ290byBsaW1fdGRsc19kaXNfc3RhcnRfZXJyb3I7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpZiB3ZSBhcmUgc3RpbGwgZ29vZCwgZ28gYWhlYWQgYW5kIGNoZWNrIGlmIHdlIGFyZSBpbiBwcm9wZXIgc3RhdGUgdG8KKyAgICAgKiBkbyBURExTIGRpc2NvdmVyeSBwcm9jZWR1cmUuCisgICAgICovCisgICAgIGlmICgocHNlc3Npb25FbnRyeS0+bGltU21lU3RhdGUgIT0gZUxJTV9TTUVfQVNTT0NJQVRFRF9TVEFURSkgJiYKKyAgICAgICAgICAgICAgICAocHNlc3Npb25FbnRyeS0+bGltU21lU3RhdGUgIT0gZUxJTV9TTUVfTElOS19FU1RfU1RBVEUpKQorICAgICB7CisgICAgIAorICAgICAgICAgbGltTG9nKHBNYWMsIExPR0UsICJkaXMgcmVxIHJlY2VpdmVkIGluIGludmFsaWQgTElNc21lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSAoJWQpXG4iLCBwc2Vzc2lvbkVudHJ5LT5saW1TbWVTdGF0ZSk7CisgICAgICAgICBnb3RvIGxpbV90ZGxzX2Rpc19zdGFydF9lcnJvcjsKKyAgICAgfQorICAgIAorICAgIC8qCisgICAgICogaWYgd2UgYXJlIHN0aWxsIGdvb2QsIGdvIGFoZWFkIGFuZCB0cmFuc21pdCBURExTIGRpc2NvdmVyeSByZXF1ZXN0LAorICAgICAqIGFuZCBzYXZlIERpcyBSZXEgaW5mbyBmb3IgZnV0dXJlIHJlZmVyZW5jZS4KKyAgICAgKi8KKworI2lmIDAgLy8gVERMU19oa2xlZTogRDEzIG5vIG5lZWQgdG8gb3BlbiBBZGRyMiB1bmtub3duIGRhdGEgcGFja2V0IAorICAgIC8qIAorICAgICAqIHNlbmQgbWVzc2FnZSB0byBIQUwgdG8gc2V0IFJYUCBmaWx0ZXJzIHRvIHJlY2VpZXZlIGZyYW1lIG9uIAorICAgICAqIGRpcmVjdCBsaW5rLi4KKyAgICAgKi8KKyAgICAgLy9saW1TZXRMaW5rU3RhdGUocE1hYywgZVNJUl9MSU5LX1RETFNfRElTQ09WRVJZX1NUQVRFLCAKKyAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Vzc2lvbkVudHJ5LT5ic3NJZCkgOworI2VuZGlmCisKKyAgICAgLyogc2F2ZSBkaXMgcmVxdWVzdCBtZXNzYWdlIGZvciBtYXRjaGluZyBkaWFsb2cgdG9rZW4gKi8KKyAgICAgcGFsQ29weU1lbW9yeSggcE1hYy0+aEhkZCwgKHRBTklfVTggKikgJnBNYWMtPmxpbS5nTGltVGRsc0Rpc1JlcSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodEFOSV9VOCAqKSBkaXNSZXEsIHNpemVvZih0U2lyVGRsc0Rpc1JlcSkpOworCisgICAgIFZPU19UUkFDRShWT1NfTU9EVUxFX0lEX1BFLCBWT1NfVFJBQ0VfTEVWRUxfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYW5zbWl0IERpc2NvdmVyeSBSZXF1ZXN0IEZyYW1lXG4iKSA7CisgICAgIC8qIGZvcm1hdCBURExTIGRpc2NvdmVyeSByZXF1ZXN0IGZyYW1lIGFuZCB0cmFuc21pdCBpdCAqLworICAgICBsaW1TZW5kVGRsc0Rpc1JlcUZyYW1lKHBNYWMsIGRpc1JlcS0+cGVlck1hYywgZGlzUmVxLT5kaWFsb2csIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzZXNzaW9uRW50cnkpIDsKKworICAgICAvKiBwcmVwYXJlIGZvciByZXNwb25zZSAqLworICAgICBwTWFjLT5saW0uZ0xpbVRkbHNEaXNTdGFDb3VudCA9IDAgOworICAgICBwTWFjLT5saW0uZ0xpbVRkbHNEaXNSZXN1bHRMaXN0ID0gTlVMTCA7CisKKyAgICAvKgorICAgICAqIHN0YXJ0IFRETFMgZGlzY292ZXJ5IHJlcXVlc3QgdGltZXIgdG8gd2FpdCBmb3IgZGlzY292ZXJ5IHJlc3BvbnNlcworICAgICAqIGZyb20gYWxsIFRETFMgZW5hYmxlZCBjbGllbnRzIGluIEJTUy4KKyAgICAgKi8KKworICAgIFZPU19UUkFDRShWT1NfTU9EVUxFX0lEX1BFLCBWT1NfVFJBQ0VfTEVWRUxfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJTdGFydCBEaXNjb3ZlcnkgcmVxdWVzdCBUaW1lb3V0IFRpbWVyXG4iKSkgOworICAgIE1UUkFDRShtYWNUcmFjZShwTWFjLCBUUkFDRV9DT0RFX1RJTUVSX0FDVElWQVRFLCAwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVMSU1fVERMU19ESVNDT1ZFUllfUlNQX1dBSVQpKTsKKworICAgIC8qIGFzc2lnbiBhcHByb3ByaWF0ZSBzZXNzaW9uSWQgdG8gdGhlIHRpbWVyIG9iamVjdCAqLworICAgIHBNYWMtPmxpbS5saW1UaW1lcnMuZ0xpbVRkbHNEaXNSc3BXYWl0VGltZXIuc2Vzc2lvbklkID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzZXNzaW9uRW50cnktPnBlU2Vzc2lvbklkOworCisgICAgaWYgKHR4X3RpbWVyX2FjdGl2YXRlKCZwTWFjLT5saW0ubGltVGltZXJzLmdMaW1UZGxzRGlzUnNwV2FpdFRpbWVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gVFhfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGxpbUxvZyhwTWFjLCBMT0dQLCBGTCgiVERMUyBkaXNjb3ZlcnkgcmVzcG9uc2UgdGltZXIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0aW9uIGZhaWxlZCFcbiIpKTsKKyAgICAgICAgZ290byBsaW1fdGRsc19kaXNfc3RhcnRfZXJyb3I7CisgICAgfQorICAgIC8qIAorICAgICAqIHdoZW4gdGltZXIgZXhwaXJlZCwgZVdOSV9TTUVfVERMU19ESVNDT1ZFUllfU1RBUlRfUlNQIGlzIHNlbnQgCisgICAgICogIGJhY2sgdG8gU01FIAorICAgICAqLworICAgIHJldHVybiAoZVNJUl9TVUNDRVNTKSA7IAorbGltX3RkbHNfZGlzX3N0YXJ0X2Vycm9yOgorICAgLyogaW4gZXJyb3IgY2FzZSwgUEUgaGFzIHRvIHNlbnQgdGhlIHJlc3BvbnNlIFNNRSBpbW1lZGlhdGVseSB3aXRoIGVycm9yIGNvZGUgKi8KKyAgIGxpbVNlbmRTbWVUZGxzRGlzUnNwKHBNYWMsIGVTSVJfRkFJTFVSRSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZVdOSV9TTUVfVERMU19ESVNDT1ZFUllfU1RBUlRfUlNQKTsKKyAgIHJldHVybiBlU0lSX0ZBSUxVUkU7Cit9CisvKgorICogUHJvY2VzcyBsaW5rIHN0YXJ0IHJlcXVlc3QgcmVjaWV2ZWQgZnJvbSBTTUUgYW5kIHRyYW5zbWl0IHRvIEFQLgorICovCitlSGFsU3RhdHVzIGxpbVByb2Nlc3NTbWVMaW5rU3RhcnRSZXEodHBBbmlTaXJHbG9iYWwgcE1hYywgdEFOSV9VMzIgKnBNc2dCdWYpCit7CisgICAgLyogZ2V0IGFsbCBkaXNjb3ZlcnkgcmVxdWVzdCBwYXJhbWV0ZXJzICovCisgICAgdFNpclRkbHNTZXR1cFJlcSAqc2V0dXBSZXEgPSAodFNpclRkbHNTZXR1cFJlcSAqKSBwTXNnQnVmIDsKKyAgICB0TGltVGRsc0xpbmtTZXR1cEluZm8gKmxpbmtTZXR1cEluZm87IAorICAgIC8vdExpbVRkbHNMaW5rU2V0dXBQZWVyICpzZXR1cFBlZXI7CisgICAgdHBQRVNlc3Npb24gcHNlc3Npb25FbnRyeTsKKyAgICB0QU5JX1U4ICAgICAgc2Vzc2lvbklkOworICAgIGVIYWxTdGF0dXMgICBzdGF0dXM7CisgICAgCisgICAgaWYoKHBzZXNzaW9uRW50cnkgPSBwZUZpbmRTZXNzaW9uQnlCc3NpZChwTWFjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwUmVxLT5ic3NpZCwgJnNlc3Npb25JZCkpID09IE5VTEwpCisgICAgeworICAgICAgICAgVk9TX1RSQUNFKFZPU19NT0RVTEVfSURfUEUsIFZPU19UUkFDRV9MRVZFTF9FUlJPUiwgCisgICAgICAgICAgICAgICAgICAgICAiUEUgU2Vzc2lvbiBkb2VzIG5vdCBleGlzdCBmb3IgZ2l2ZW4gc21lIHNlc3Npb25JZCAlZFxuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXBSZXEtPnNlc3Npb25JZCk7CisgICAgICAgICBnb3RvIGxpbV90ZGxzX2xpbmtfc3RhcnRfZXJyb3I7CisgICAgfQorICAgIAorICAgIC8qIGNoZWNrIGlmIHdlIGFyZSBpbiBwcm9wZXIgc3RhdGUgdG8gd29yayBhcyBURExTIGNsaWVudCAqLyAKKyAgICBpZiAocHNlc3Npb25FbnRyeS0+bGltU3lzdGVtUm9sZSAhPSBlTElNX1NUQV9ST0xFKQorICAgIHsKKyAgICAgICAgVk9TX1RSQUNFKFZPU19NT0RVTEVfSURfUEUsIFZPU19UUkFDRV9MRVZFTF9FUlJPUiwgCisgICAgICAgICAgICAgICAgICAgICAgIlRETFMgbGluayBzZXR1cCByZXEgcmVjZWl2ZWQgaW4gd3Jvbmcgc3lzdGVtIFJvbGUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Vzc2lvbkVudHJ5LT5saW1TeXN0ZW1Sb2xlKTsKKyAgICAgICAgZ290byBsaW1fdGRsc19saW5rX3N0YXJ0X2Vycm9yOworICAgIH0KKworICAgIC8qCisgICAgICogaWYgd2UgYXJlIHN0aWxsIGdvb2QsIGdvIGFoZWFkIGFuZCBjaGVjayBpZiB3ZSBhcmUgaW4gcHJvcGVyIHN0YXRlIHRvCisgICAgICogZG8gVERMUyBzZXR1cCBwcm9jZWR1cmUuCisgICAgICovCisgICAgaWYgKChwc2Vzc2lvbkVudHJ5LT5saW1TbWVTdGF0ZSAhPSBlTElNX1NNRV9BU1NPQ0lBVEVEX1NUQVRFKSAmJgorICAgICAgICAgICAgKHBzZXNzaW9uRW50cnktPmxpbVNtZVN0YXRlICE9IGVMSU1fU01FX0xJTktfRVNUX1NUQVRFKSkKKyAgICB7CisgICAgICAgIGxpbUxvZyhwTWFjLCBMT0dFLCAiU2V0dXAgcmVxdWVzdCBpbiBpbnZhbGlkIExJTXNtZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSAoJWQpXG4iLCBwTWFjLT5saW0uZ0xpbVNtZVN0YXRlKTsKKyAgICAgICAgZ290byBsaW1fdGRsc19saW5rX3N0YXJ0X2Vycm9yOworICAgIH0KKyAgICAKKyAgICAvKgorICAgICAqIE5vdywgZ28gYWhlYWQgYW5kIHRyYW5zbWl0IFRETFMgZGlzY292ZXJ5IHJlcXVlc3QsIGFuZCBzYXZlIHNldHVwIFJlcSAKKyAgICAgKiBpbmZvIGZvciBmdXR1cmUgcmVmZXJlbmNlLgorICAgICAqLworICAgICAvKiBjcmVhdGUgbm9kZSBmb3IgTGluayBzZXR1cCAqLworICAgIGxpbmtTZXR1cEluZm8gPSAmcE1hYy0+bGltLmdMaW1UZGxzTGlua1NldHVwSW5mbyA7CisgICAgLy9zZXR1cFBlZXIgPSBOVUxMIDsKKyAgIAorICAgIHN0YXR1cyA9IGxpbVRkbHNQcmVwYXJlU2V0dXBSZXFGcmFtZShwTWFjLCBsaW5rU2V0dXBJbmZvLCBzZXR1cFJlcS0+ZGlhbG9nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwUmVxLT5wZWVyTWFjLCBwc2Vzc2lvbkVudHJ5KSA7IAorICAgIGlmKGVIQUxfU1RBVFVTX1NVQ0NFU1MgPT0gc3RhdHVzKQorICAgIC8qIGluIGNhc2Ugb2Ygc3VjY2VzcywgZVdOSV9TTUVfVERMU19MSU5LX1NUQVJUX1JTUCBpcyBzZW50IGJhY2sgdG8gU01FIGxhdGVyIHdoZW4gCisgICAgVERMUyBzZXR1cCBjbmYgVFggY29tcGxldGUgaXMgc3VjY2Vzc2Z1bC4gKi8KKyAgICAgICAgcmV0dXJuIGVTSVJfU1VDQ0VTUzsKKyNpZiAwCisKKyAgICAvKgorICAgICogd2UgYWxsb2NhdGUgdGhlIFRETFMgc2V0dXAgUGVlciBNZW1vcnkgaGVyZSwgd2Ugd2lsbCBmcmVlJ2QgdGhpcworICAgICogbWVtb3J5IGFmdGVyIHRlYXJkb3duLCBpZiB0aGUgbGluayBpcyBzdWNlc3NmdWxseSBzZXR1cCBvcgorICAgICogZnJlZSB0aGlzIG1lbW9yeSBpZiBhbnkgdGltZW91dCBpcyBoYXBwZW4gaW4gbGluayBzZXR1cCBwcm9jZWR1cmUKKyAgICAqLworICAgIGlmKCBlSEFMX1NUQVRVU19TVUNDRVNTICE9IHBhbEFsbG9jYXRlTWVtb3J5KCBwTWFjLT5oSGRkLAorICAgICAgICAgICAgICAgICAgKHZvaWQgKiopICZzZXR1cFBlZXIsIHNpemVvZiggdExpbVRkbHNMaW5rU2V0dXBQZWVyICkpKQorICAgIHsKKyAgICAgbGltTG9nKCBwTWFjLCBMT0dQLCAKKyAgICAgICAgICAgICAgICAgIEZMKCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBkdXJpbmcgQUREX1NUQVxuIiApKTsKKyAgICAgVk9TX0FTU0VSVCgwKSA7CisgICAgIHJldHVybiBlU0lSX01FTV9BTExPQ19GQUlMRUQ7CisgICAgfQorICAgIHNldHVwUGVlci0+ZGlhbG9nID0gc2V0dXBSZXEtPmRpYWxvZyA7CisgICAgc2V0dXBQZWVyLT50ZGxzX3ByZXZfbGlua19zdGF0ZSA9ICBzZXR1cFBlZXItPnRkbHNfbGlua19zdGF0ZSA7CisgICAgc2V0dXBQZWVyLT50ZGxzX2xpbmtfc3RhdGUgPSBURExTX0xJTktfU0VUVVBfU1RBUlRfU1RBVEUgOworICAgIC8qIFRETFNfc2Vzc2lvbml6ZTogcmVtZW1iZXIgc2Vzc2lvbklkIGZvciBmdXR1cmUgKi8KKyAgICBzZXR1cFBlZXItPnRkbHNfc2Vzc2lvbklkID0gcHNlc3Npb25FbnRyeS0+cGVTZXNzaW9uSWQ7CisgICAgc2V0dXBQZWVyLT50ZGxzX2JJc1Jlc3BvbmRlciA9IDE7CisKKyAgICAvKiAKKyAgICAqIHdlIG9ubHkgcG9wdWxhdGUgcGVlciBNQUMsIHNvIGl0IGNhbiBhc3NpdCB1cyB0byBmaW5kIHRoZQorICAgICogVERMUyBwZWVyIGFmdGVyIHJlc3BvbnNlL29yIGFmdGVyIHJlc3BvbnNlIHRpbWVvdXQKKyAgICAqLworICAgIHBhbENvcHlNZW1vcnkocE1hYy0+aEhkZCwgc2V0dXBQZWVyLT5wZWVyTWFjLCBzZXR1cFJlcS0+cGVlck1hYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodFNpck1hY0FkZHIpKSA7CisgICAgLyogZm9ybWF0IFRETFMgZGlzY292ZXJ5IHJlcXVlc3QgZnJhbWUgYW5kIHRyYW5zbWl0IGl0ICovCisgICAgbGltU2VuZFRkbHNMaW5rU2V0dXBSZXFGcmFtZShwTWFjLCBzZXR1cFJlcS0+cGVlck1hYywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cFJlcS0+ZGlhbG9nLCBwc2Vzc2lvbkVudHJ5LCBOVUxMLCAwKSA7CisKKyAgICBsaW1TdGFydFRkbHNUaW1lcihwTWFjLCBwc2Vzc2lvbkVudHJ5LT5wZVNlc3Npb25JZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAmc2V0dXBQZWVyLT5nTGltVGRsc0xpbmtTZXR1cFJzcFRpbWVvdXRUaW1lciwKKyAgICAgKHRBTklfVTMyKXNldHVwUGVlci0+cGVlck1hYywgV05JX0NGR19URExTX0xJTktfU0VUVVBfUlNQX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lSX0xJTV9URExTX0xJTktfU0VUVVBfUlNQX1RJTUVPVVQpIDsKKyAgICAvKiB1cGRhdGUgc2V0dXAgcGVlciBsaXN0ICovCisgICAgc2V0dXBQZWVyLT5uZXh0ID0gbGlua1NldHVwSW5mby0+dGRsc0xpbmtTZXR1cExpc3QgOworICAgIGxpbmtTZXR1cEluZm8tPnRkbHNMaW5rU2V0dXBMaXN0ID0gc2V0dXBQZWVyIDsKKyAgICAvKiBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGVXTklfU01FX1RETFNfTElOS19TVEFSVF9SU1AgaXMgc2VudCBiYWNrIHRvIFNNRSBsYXRlciB3aGVuIAorICAgIFRETFMgc2V0dXAgY25mIFRYIGNvbXBsZXRlIGlzIHN1Y2Nlc3NmdWwuIC0tPiBzZWUgbGltVGRsc1NldHVwQ25mVHhDb21wbGV0ZSgpICovCisgICAgcmV0dXJuIGVTSVJfU1VDQ0VTUyA7IAorI2VuZGlmCitsaW1fdGRsc19saW5rX3N0YXJ0X2Vycm9yOiAgICAKKyAgICAvKiBpbiBjYXNlIG9mIGVycm9yLCByZXR1cm4gaW1tZWRpYXRlbHkgdG8gU01FICovCisgICAgbGltU2VuZFNtZVRkbHNMaW5rU3RhcnRSc3AocE1hYywgZVNJUl9GQUlMVVJFLCBzZXR1cFJlcS0+cGVlck1hYywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVXTklfU01FX1RETFNfTElOS19TVEFSVF9SU1ApOworICAgIHJldHVybiBlU0lSX0ZBSUxVUkUgOworfQorCisvKgorICogUHJvY2VzcyBsaW5rIHRlYXJkb3duIHJlcXVlc3QgcmVjaWV2ZWQgZnJvbSBTTUUgYW5kIHRyYW5zbWl0IHRvIEFQLgorICovCitlSGFsU3RhdHVzIGxpbVByb2Nlc3NTbWVUZWFyZG93blJlcSh0cEFuaVNpckdsb2JhbCBwTWFjLCB0QU5JX1UzMiAqcE1zZ0J1ZikKK3sKKyAgICAvKiBnZXQgYWxsIGRpc2NvdmVyeSByZXF1ZXN0IHBhcmFtZXRlcnMgKi8KKyAgICB0U2lyVGRsc1RlYXJkb3duUmVxICp0ZWFyZG93blJlcSA9ICh0U2lyVGRsc1RlYXJkb3duUmVxICopIHBNc2dCdWYgOworICAgIHRMaW1UZGxzTGlua1NldHVwUGVlciAqc2V0dXBQZWVyOworICAgIHRwUEVTZXNzaW9uIHBzZXNzaW9uRW50cnk7CisgICAgdEFOSV9VOCAgICAgIHNlc3Npb25JZDsKKyAgICAKKyAgICBpZigocHNlc3Npb25FbnRyeSA9IHBlRmluZFNlc3Npb25CeUJzc2lkKHBNYWMsIHRlYXJkb3duUmVxLT5ic3NpZCwgJnNlc3Npb25JZCkpID09IE5VTEwpCisgICAgeworICAgICAgICAgVk9TX1RSQUNFKFZPU19NT0RVTEVfSURfUEUsIFZPU19UUkFDRV9MRVZFTF9FUlJPUiwgCisgICAgICAgICAgICAgICAgICAgICAgICAiUEUgU2Vzc2lvbiBkb2VzIG5vdCBleGlzdCBmb3IgZ2l2ZW4gc21lIHNlc3Npb25JZCAlZFxuIiwgdGVhcmRvd25SZXEtPnNlc3Npb25JZCk7CisgICAgICAgICBnb3RvIGxpbV90ZGxzX3RlYXJkb3duX3JlcV9lcnJvcjsKKyAgICB9CisgICAgCisgICAgLyogY2hlY2sgaWYgd2UgYXJlIGluIHByb3BlciBzdGF0ZSB0byB3b3JrIGFzIFRETFMgY2xpZW50ICovIAorICAgIGlmIChwc2Vzc2lvbkVudHJ5LT5saW1TeXN0ZW1Sb2xlICE9IGVMSU1fU1RBX1JPTEUpCisgICAgeworICAgICAgICBWT1NfVFJBQ0UoVk9TX01PRFVMRV9JRF9QRSwgVk9TX1RSQUNFX0xFVkVMX0VSUk9SLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlRETFMgdGVhcmRvd24gcmVxIHJlY2VpdmVkIGluIHdyb25nIHN5c3RlbSBSb2xlICVkXG4iLCBwc2Vzc2lvbkVudHJ5LT5saW1TeXN0ZW1Sb2xlKTsKKyAgICAgICAgZ290byBsaW1fdGRsc190ZWFyZG93bl9yZXFfZXJyb3I7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpZiB3ZSBhcmUgc3RpbGwgZ29vZCwgZ28gYWhlYWQgYW5kIGNoZWNrIGlmIHdlIGFyZSBpbiBwcm9wZXIgc3RhdGUgdG8KKyAgICAgKiBkbyBURExTIHNldHVwIHByb2NlZHVyZS4KKyAgICAgKi8KKyAgICBpZiAoKHBzZXNzaW9uRW50cnktPmxpbVNtZVN0YXRlICE9IGVMSU1fU01FX0FTU09DSUFURURfU1RBVEUpICYmCisgICAgICAgICAgICAocHNlc3Npb25FbnRyeS0+bGltU21lU3RhdGUgIT0gZUxJTV9TTUVfTElOS19FU1RfU1RBVEUpKQorICAgIHsKKyAgICAgICAgbGltTG9nKHBNYWMsIExPR0UsICJURExTIHRlYXJkd29uIHJlcSByZWNlaXZlZCBpbiBpbnZhbGlkIExJTXNtZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgKCVkKVxuIiwgcHNlc3Npb25FbnRyeS0+bGltU21lU3RhdGUpOworICAgICAgICBnb3RvIGxpbV90ZGxzX3RlYXJkb3duX3JlcV9lcnJvcjsKKyAgICB9CisgICAgCisgICAgVk9TX1RSQUNFKFZPU19NT0RVTEVfSURfUEUsIFZPU19UUkFDRV9MRVZFTF9JTkZPLAorICAgICAgICAgICAgIlRlYXJkb3duIGZvciBwZWVyID0gJTAyeCwlMDJ4LCUwMngsJTAyeCwlMDJ4LCUwMnhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWFyZG93blJlcS0+cGVlck1hY1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlYXJkb3duUmVxLT5wZWVyTWFjWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVhcmRvd25SZXEtPnBlZXJNYWNbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWFyZG93blJlcS0+cGVlck1hY1szXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlYXJkb3duUmVxLT5wZWVyTWFjWzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVhcmRvd25SZXEtPnBlZXJNYWNbNV0pIDsKKyAgICAvKgorICAgICAqIE5vdywgZ28gYWhlYWQgYW5kIHRyYW5zbWl0IFRETFMgdGVhcmRvd24gcmVxdWVzdCwgYW5kIHNhdmUgdGVhcmRvd24gaW5mbworICAgICAqIGluZm8gZm9yIGZ1dHVyZSByZWZlcmVuY2UuCisgICAgICovCisgICAgIC8qIFZlcmlmeSBpZiB0aGlzIGxpbmsgaXMgc2V0dXAgKi8KKyAgICBzZXR1cFBlZXIgPSBOVUxMIDsKKyAgICBsaW1UZGxzRmluZExpbmtQZWVyKHBNYWMsIHRlYXJkb3duUmVxLT5wZWVyTWFjLCAmc2V0dXBQZWVyKTsKKyAgICBpZihOVUxMID09IHNldHVwUGVlcikKKyAgICB7CisgICAgICAgIFZPU19UUkFDRShWT1NfTU9EVUxFX0lEX1BFLCBWT1NfVFJBQ0VfTEVWRUxfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJpbnZhbGlkIFBlZXIgb24gdGVhcmRvd24gXG4iKSkgOworICAgICAgICBnb3RvIGxpbV90ZGxzX3RlYXJkb3duX3JlcV9lcnJvcjsKKyAgICB9CisKKworICAgIChzZXR1cFBlZXIpLT50ZGxzX3ByZXZfbGlua19zdGF0ZSA9IChzZXR1cFBlZXIpLT50ZGxzX2xpbmtfc3RhdGUgOworICAgIChzZXR1cFBlZXIpLT50ZGxzX2xpbmtfc3RhdGUgPSBURExTX0xJTktfVEVBUkRPV05fU1RBUlRfU1RBVEUgOworICAgIC8qIFRETFNfc2Vzc2lvbml6ZTogY2hlY2sgc2Vzc2lvbklkIGluIGNhc2UgKi8KKyAgICBpZigoc2V0dXBQZWVyKS0+dGRsc19zZXNzaW9uSWQgIT0gcHNlc3Npb25FbnRyeS0+cGVTZXNzaW9uSWQpIAorICAgIHsKKyAgICAgICAgbGltTG9nKHBNYWMsIExPR0UsICJURExTIHRlYXJkb3duIHJlcTsgc3RvcmVkIHNlc3Npb25JZCAoJWQpIG5vdCBtYXRjaGVkIGZyb20gcGVTZXNzaW9uSWQgKCVkKVxuIiwgXAorICAgICAgICAgICAgKHNldHVwUGVlciktPnRkbHNfc2Vzc2lvbklkLCBwc2Vzc2lvbkVudHJ5LT5saW1TbWVTdGF0ZSk7CisgICAgICAgIChzZXR1cFBlZXIpLT50ZGxzX3Nlc3Npb25JZCA9IHBzZXNzaW9uRW50cnktPnBlU2Vzc2lvbklkOworICAgIH0KKyAgICAKKyAgICAvKiBmb3JtYXQgVERMUyB0ZWFyZG93biByZXF1ZXN0IGZyYW1lIGFuZCB0cmFuc21pdCBpdCAqLworICAgIGlmKGVTSVJfU1VDQ0VTUyAhPSBsaW1TZW5kVGRsc1RlYXJkb3duRnJhbWUocE1hYywgdGVhcmRvd25SZXEtPnBlZXJNYWMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlU0lSX01BQ19URExTX1RFQVJET1dOX1VOU1BFQ19SRUFTT04sIHBzZXNzaW9uRW50cnksIE5VTEwsIDAgKSkKKyAgICB7CisgICAgICAgIFZPU19UUkFDRShWT1NfTU9EVUxFX0lEX1BFLCBWT1NfVFJBQ0VfTEVWRUxfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjb3VsZG4ndCBzZW5kIHRlYXJkb3duIGZyYW1lIFxuIikpIDsKKyAgICAgICAgZ290byBsaW1fdGRsc190ZWFyZG93bl9yZXFfZXJyb3I7CisgICAgfQorICAgIC8qIGluIGNhc2Ugb2Ygc3VjY2VzcywgZVdOSV9TTUVfVERMU19URUFSRE9XTl9SU1AgaXMgc2VudCBiYWNrIHRvIFNNRSBsYXRlciB3aGVuIAorICAgIFRETFMgdGVhcmRvd24gVFggY29tcGxldGUgaXMgc3VjY2Vzc2Z1bC4gLS0+IHNlZSBsaW1UZGxzVGVhcmRvd25UeENvbXBsZXRlKCkgKi8KKyAgICByZXR1cm4gZVNJUl9TVUNDRVNTOworbGltX3RkbHNfdGVhcmRvd25fcmVxX2Vycm9yOiAgICAKKyAgICAvKiBpbiBjYXNlIG9mIGVycm9yLCByZXR1cm4gaW1tZWRpYXRlbHkgdG8gU01FICovCisgICAgbGltU2VuZFNtZVRkbHNUZWFyZG93blJzcChwTWFjLCBlU0lSX0ZBSUxVUkUsIHRlYXJkb3duUmVxLT5wZWVyTWFjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlV05JX1NNRV9URExTX1RFQVJET1dOX1JTUCk7CisgICAgcmV0dXJuIGVTSVJfRkFJTFVSRTsKK30KKworCisjZW5kaWYKIAogLyoqCiAgKiBsaW1Qcm9jZXNzU21lUmVxTWVzc2FnZXMoKQpAQCAtNTA5MSw3ICs1Mzk1LDI4IEBACiAgICAgICAgICAgICBfX2xpbVByb2Nlc3NTbWVSZWdpc3Rlck1nbXRGcmFtZVJlcSggcE1hYywgcE1zZ0J1ZiApOwogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYgICAgICAgIAotICAgICAgICAgICAgCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKKyAgICAgICAgY2FzZSBlV05JX1NNRV9URExTX1NFTkRfTUdNVF9SRVE6CisgICAgICAgICAgICBsaW1Qcm9jZXNzU21lVGRsc01nbXRTZW5kUmVxKHBNYWMsIHBNc2dCdWYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZVdOSV9TTUVfVERMU19BRERfU1RBX1JFUToKKyAgICAgICAgICAgIGxpbVByb2Nlc3NTbWVUZGxzQWRkU3RhUmVxKHBNYWMsIHBNc2dCdWYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZVdOSV9TTUVfVERMU19ERUxfU1RBX1JFUToKKyAgICAgICAgICAgIGxpbVByb2Nlc3NTbWVUZGxzRGVsU3RhUmVxKHBNYWMsIHBNc2dCdWYpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19JTlRFUk5BTAorICAgICAgICBjYXNlIGVXTklfU01FX1RETFNfRElTQ09WRVJZX1NUQVJUX1JFUToKKyAgICAgICAgICAgIGxpbVByb2Nlc3NTbWVEaXNTdGFydFJlcShwTWFjLCAgcE1zZ0J1Zik7CisgICAgICAgICAgICBicmVhayA7CisgICAgICAgIGNhc2UgZVdOSV9TTUVfVERMU19MSU5LX1NUQVJUX1JFUToKKyAgICAgICAgICAgIGxpbVByb2Nlc3NTbWVMaW5rU3RhcnRSZXEocE1hYywgIHBNc2dCdWYpOworICAgICAgICAgICAgYnJlYWsgOworICAgICAgICBjYXNlIGVXTklfU01FX1RETFNfVEVBUkRPV05fUkVROgorICAgICAgICAgICAgbGltUHJvY2Vzc1NtZVRlYXJkb3duUmVxKHBNYWMsICBwTXNnQnVmKTsKKyAgICAgICAgICAgIGJyZWFrIDsKKyNlbmRpZgogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICB2b3NfbWVtX2ZyZWUoKHZfVk9JRF90KilwTXNnLT5ib2R5cHRyKTsKZGlmZiAtLWdpdCBhL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltU2VuZE1lc3NhZ2VzLmMgYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVNlbmRNZXNzYWdlcy5jCmluZGV4IGE2YzczODIuLjFmMTY3ODQgMTAwNjQ0Ci0tLSBhL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltU2VuZE1lc3NhZ2VzLmMKKysrIGIvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1TZW5kTWVzc2FnZXMuYwpAQCAtNzA1LDMgKzcwNSwxMDcgQEAKICAgICByZXR1cm4gcmV0Q29kZTsKIH0KICNlbmRpZiAKKworI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTX0lOVEVSTkFMCisvKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitcZm4gICAgICBsaW1TZW5kVGRsc0xpbmtFc3RhYmxpc2gKK1xicmllZiAgIExJTSBzZW5kcyBhIG1lc3NhZ2UgdG8gSEFMIHRvIHNldCB0ZGxzIGRpcmVjdCBsaW5rCitccGFyYW0gICB0cEFuaVNpckdsb2JhbCAgcE1hYworXHBhcmFtICAgCitccmV0dXJuICBOb25lCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3RTaXJSZXRTdGF0dXMgbGltU2VuZFRkbHNMaW5rRXN0YWJsaXNoKHRwQW5pU2lyR2xvYmFsIHBNYWMsIHRBTklfVTggYklzUGVlclJlc3BvbmRlciwgdEFOSV9VOCBsaW5rSWRlbk9mZnNldCwgCisgICAgICAgICAgICAgICAgdEFOSV9VOCBwdGlCdWZTdGF0dXNPZmZzZXQsIHRBTklfVTggcHRpRnJhbWVMZW4sIHRBTklfVTggKnB0aUZyYW1lLCB0QU5JX1U4ICpleHRDYXBhYmlsaXR5KQoreworICAgIHRTaXJNc2dRIG1zZ1E7CisgICAgdFNpclJldFN0YXR1cyByZXRDb2RlOworICAgIHRwU2lyVGRsc0xpbmtFc3RhYmxpc2hJbmQgcFRkbHNMaW5rRXN0YWJsaXNoID0gTlVMTDsKKworICAgIC8vIEFsbG9jYXRlIG1lbW9yeS4KKyAgICBpZiggZUhBTF9TVEFUVVNfU1VDQ0VTUyAhPSBwYWxBbGxvY2F0ZU1lbW9yeSggcE1hYy0+aEhkZCwKKyAgICAgICAgICAodm9pZCAqKikgJnBUZGxzTGlua0VzdGFibGlzaCwKKyAgICAgICAgICBzaXplb2YodFNpclRkbHNMaW5rRXN0YWJsaXNoSW5kKSkpCisgICAgeworICAgICAgICBsaW1Mb2coIHBNYWMsIExPR1AsCisgICAgICAgIEZMKCAiVW5hYmxlIHRvIFBBTCBhbGxvY2F0ZSBtZW1vcnkgd2hpbGUgc2VuZGluZyBUZGxzIExpbmsgRXN0YWJsaXNoIFxuIiApKTsKKworICAgICAgICByZXRDb2RlID0gZVNJUl9TTUVfUkVTT1VSQ0VTX1VOQVZBSUxBQkxFOworICAgICAgICByZXR1cm4gcmV0Q29kZTsKKyAgICB9CisKKyAgICBwYWxaZXJvTWVtb3J5KCBwTWFjLT5oSGRkLCAodEFOSV9VOCAqKSBwVGRsc0xpbmtFc3RhYmxpc2gsIHNpemVvZih0U2lyVGRsc0xpbmtFc3RhYmxpc2hJbmQpKTsKKworICAgIHBUZGxzTGlua0VzdGFibGlzaC0+YklzUmVzcG9uZGVyID0gISFiSXNQZWVyUmVzcG9uZGVyOyAKKyAgICBwVGRsc0xpbmtFc3RhYmxpc2gtPmxpbmtJZGVuT2Zmc2V0ID0gbGlua0lkZW5PZmZzZXQ7CisgICAgcFRkbHNMaW5rRXN0YWJsaXNoLT5wdGlCdWZTdGF0dXNPZmZzZXQgPSBwdGlCdWZTdGF0dXNPZmZzZXQ7CisgICAgcFRkbHNMaW5rRXN0YWJsaXNoLT5wdGlUZW1wbGF0ZUxlbiA9IHB0aUZyYW1lTGVuOworICAgIC8qIENvcHkgcHRpRnJhbWUgdGVtcGxhdGUgKi8KKyAgICBwYWxDb3B5TWVtb3J5KCBwTWFjLT5oSGRkLCBwVGRsc0xpbmtFc3RhYmxpc2gtPnB0aVRlbXBsYXRlQnVmLCBwdGlGcmFtZSwgcHRpRnJhbWVMZW4pOworICAgIC8qIENvcHkgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovCisgICAgcGFsQ29weU1lbW9yeSggcE1hYy0+aEhkZCwgKHRBTklfVTggKikgcFRkbHNMaW5rRXN0YWJsaXNoLT5leHRDYXBhYmlsaXR5LCAgZXh0Q2FwYWJpbGl0eSwgc2l6ZW9mKHBUZGxzTGlua0VzdGFibGlzaC0+ZXh0Q2FwYWJpbGl0eSkpOworCisgICAgbXNnUS50eXBlID0gU0lSX0hBTF9URExTX0xJTktfRVNUQUJMSVNIOworICAgIG1zZ1EucmVzZXJ2ZWQgPSAwOworICAgIG1zZ1EuYm9keXB0ciA9IHBUZGxzTGlua0VzdGFibGlzaDsKKyAgICBtc2dRLmJvZHl2YWwgPSAwOworICAgIAorICAgIE1UUkFDRShtYWNUcmFjZU1zZ1R4KHBNYWMsIDAsIG1zZ1EudHlwZSkpOworCisgICAgcmV0Q29kZSA9ICh0QU5JX1UzMil3ZGFQb3N0Q3RybE1zZyhwTWFjLCAmbXNnUSk7CisgICAgaWYgKHJldENvZGUgIT0gZVNJUl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgcGFsRnJlZU1lbW9yeShwTWFjLCAodm9pZCopcFRkbHNMaW5rRXN0YWJsaXNoKTsKKyAgICAgICAgbGltTG9nKHBNYWMsIExPR1AsIEZMKCJQb3N0aW5nIHRkbHMgbGluayBlc3RhYmxpc2ggJWQgZmFpbGVkLCByZWFzb24gPSAleCBcbiIpLCByZXRDb2RlKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0Q29kZTsKK30KKworLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorXGZuICAgICAgbGltU2VuZFRkbHNMaW5rVGVhcmRvd24KK1xicmllZiAgIExJTSBzZW5kcyBhIG1lc3NhZ2UgdG8gSEFMIHRvIGluZGljYXRlIHRkbHMgZGlyZWN0IGxpbmsgaXMgdGVhcmRvd25lZAorXHBhcmFtICAgdHBBbmlTaXJHbG9iYWwgIHBNYWMKK1xwYXJhbSAgIAorXHJldHVybiAgTm9uZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0U2lyUmV0U3RhdHVzIGxpbVNlbmRUZGxzTGlua1RlYXJkb3duKHRwQW5pU2lyR2xvYmFsIHBNYWMsIHRBTklfVTE2IHN0YUlkKQoreworICAgIHRTaXJNc2dRIG1zZ1E7CisgICAgdFNpclJldFN0YXR1cyByZXRDb2RlOworICAgIHRwU2lyVGRsc0xpbmtUZWFyZG93bkluZCBwVGRsc0xpbmtUZWFyZG93biA9IE5VTEw7CisKKyAgICAvLyBBbGxvY2F0ZSBtZW1vcnkuCisgICAgaWYoIGVIQUxfU1RBVFVTX1NVQ0NFU1MgIT0gcGFsQWxsb2NhdGVNZW1vcnkoIHBNYWMtPmhIZGQsCisgICAgICAgICAgKHZvaWQgKiopICZwVGRsc0xpbmtUZWFyZG93biwKKyAgICAgICAgICBzaXplb2YodFNpclRkbHNMaW5rVGVhcmRvd25JbmQpKSkKKyAgICB7CisgICAgICAgIGxpbUxvZyggcE1hYywgTE9HUCwKKyAgICAgICAgRkwoICJVbmFibGUgdG8gUEFMIGFsbG9jYXRlIG1lbW9yeSB3aGlsZSBzZW5kaW5nIFRkbHMgTGluayBUZWFyZG93biBcbiIgKSk7CisKKyAgICAgICAgcmV0Q29kZSA9IGVTSVJfU01FX1JFU09VUkNFU19VTkFWQUlMQUJMRTsKKyAgICAgICAgcmV0dXJuIHJldENvZGU7CisgICAgfQorCisgICAgcGFsWmVyb01lbW9yeSggcE1hYy0+aEhkZCwgKHRBTklfVTggKikgcFRkbHNMaW5rVGVhcmRvd24sIHNpemVvZih0U2lyVGRsc0xpbmtUZWFyZG93bkluZCkpOworCisgICAgcFRkbHNMaW5rVGVhcmRvd24tPnN0YUlkID0gc3RhSWQ7CisKKyAgICBtc2dRLnR5cGUgPSBTSVJfSEFMX1RETFNfTElOS19URUFSRE9XTjsKKyAgICBtc2dRLnJlc2VydmVkID0gMDsKKyAgICBtc2dRLmJvZHlwdHIgPSBwVGRsc0xpbmtUZWFyZG93bjsKKyAgICBtc2dRLmJvZHl2YWwgPSAwOworICAgIAorICAgIE1UUkFDRShtYWNUcmFjZU1zZ1R4KHBNYWMsIDAsIG1zZ1EudHlwZSkpOworCisgICAgcmV0Q29kZSA9ICh0QU5JX1UzMil3ZGFQb3N0Q3RybE1zZyhwTWFjLCAmbXNnUSk7CisgICAgaWYgKHJldENvZGUgIT0gZVNJUl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgcGFsRnJlZU1lbW9yeShwTWFjLCAodm9pZCopcFRkbHNMaW5rVGVhcmRvd24pOworICAgICAgICBsaW1Mb2cocE1hYywgTE9HUCwgRkwoIlBvc3RpbmcgdGRscyBsaW5rIHRlYXJkb3duICVkIGZhaWxlZCwgcmVhc29uID0gJXggXG4iKSwgcmV0Q29kZSk7CisgICAgfQorCisgICAgcmV0dXJuIHJldENvZGU7Cit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVNlbmRNZXNzYWdlcy5oIGIvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1TZW5kTWVzc2FnZXMuaAppbmRleCBmM2FjMDYxLi5lYmJiMzVmIDEwMDY0NAotLS0gYS9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVNlbmRNZXNzYWdlcy5oCisrKyBiL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltU2VuZE1lc3NhZ2VzLmgKQEAgLTg0LDQgKzg0LDEwIEBACiAKIHRTaXJSZXRTdGF0dXMgbGltU2VuZEJlYWNvbkZpbHRlckluZm8odHBBbmlTaXJHbG9iYWwgcE1hYywgdHBQRVNlc3Npb24gcHNlc3Npb25FbnRyeSk7CiAKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19JTlRFUk5BTAordFNpclJldFN0YXR1cyBsaW1TZW5kVGRsc0xpbmtFc3RhYmxpc2godHBBbmlTaXJHbG9iYWwgcE1hYywgdEFOSV9VOCBiSXNQZWVyUmVzcG9uZGVyLCB0QU5JX1U4IGxpbmtJZGVuT2Zmc2V0LCBcCisgICAgICAgICAgICAgICAgdEFOSV9VOCBwdGlCdWZTdGF0dXNPZmZzZXQsIHRBTklfVTggcHRpRnJhbWVMZW4sIHRBTklfVTggKnB0aUZyYW1lLCB0QU5JX1U4ICpleHRDYXBhYmlsaXR5KTsKK3RTaXJSZXRTdGF0dXMgbGltU2VuZFRkbHNMaW5rVGVhcmRvd24odHBBbmlTaXJHbG9iYWwgcE1hYywgdEFOSV9VMTYgc3RhSWQpOworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1TZW5kU21lUnNwTWVzc2FnZXMuaCBiL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltU2VuZFNtZVJzcE1lc3NhZ2VzLmgKaW5kZXggYjc3N2UzOC4uNzYxZjYzYyAxMDA2NDQKLS0tIGEvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1TZW5kU21lUnNwTWVzc2FnZXMuaAorKysgYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVNlbmRTbWVSc3BNZXNzYWdlcy5oCkBAIC05Niw2ICs5NiwxMSBAQAogdm9pZCBsaW1TZW5kU21lUHJlQ2hhbm5lbFN3aXRjaEluZCh0cEFuaVNpckdsb2JhbCBwTWFjKTsKIHZvaWQgbGltU2VuZFNtZVBvc3RDaGFubmVsU3dpdGNoSW5kKHRwQW5pU2lyR2xvYmFsIHBNYWMpOwogdm9pZCBsaW1TZW5kU21lTWF4QXNzb2NFeGNlZWRlZE50Zih0cEFuaVNpckdsb2JhbCBwTWFjLCB0U2lyTWFjQWRkciBwZWVyTWFjQWRkciwgdEFOSV9VOCBzbWVzZXNzaW9uSWQpOworI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCit2b2lkIGxpbVNlbmRTbWVUZGxzRGlzUnNwKHRwQW5pU2lyR2xvYmFsIHBNYWMsIHRTaXJSZXN1bHRDb2RlcyBzdGF0dXNDb2RlLCB0QU5JX1UxNiBtc2dUeXBlKTsKK3ZvaWQgbGltU2VuZFNtZVRkbHNMaW5rU3RhcnRSc3AodHBBbmlTaXJHbG9iYWwgcE1hYywgdFNpclJlc3VsdENvZGVzIHN0YXR1c0NvZGUsIHRTaXJNYWNBZGRyIHBlZXJNYWMsIHRBTklfVTE2IG1zZ1R5cGUpOwordm9pZCBsaW1TZW5kU21lVGRsc1RlYXJkb3duUnNwKHRwQW5pU2lyR2xvYmFsIHBNYWMsIHRTaXJSZXN1bHRDb2RlcyBzdGF0dXNDb2RlLCB0U2lyTWFjQWRkciBwZWVyTWFjLCB0QU5JX1UxNiBtc2dUeXBlKTsKKyNlbmRpZgogCiAjZW5kaWYgLyogX19MSU1fU0VORF9TTUVfUlNQX0ggKi8KIApkaWZmIC0tZ2l0IGEvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1UaW1lclV0aWxzLmMgYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVRpbWVyVXRpbHMuYwppbmRleCAwZGJmMGZkLi5mOTA3N2ZjIDEwMDY0NAotLS0gYS9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVRpbWVyVXRpbHMuYworKysgYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVRpbWVyVXRpbHMuYwpAQCAtNDY2LDYgKzQ2NiwzOSBAQAogICAgICAgICAgICAgZ290byBlcnJfdGltZXI7CiAgICAgICAgIH0KICNlbmRpZgorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTX0lOVEVSTkFMCisgICAgICAgIC8qIAorICAgICAgICAgKiBjcmVhdGUgVERMUyB0aW1lcnMuLgorICAgICAgICAgKiBhKSBURExTIGRpc2NvdmVyeSByZXNwb25zZSB0aW1lci4KKyAgICAgICAgICovICAgICAgICAKKworICAgICAgICBpZiAod2xhbl9jZmdHZXRJbnQocE1hYywgV05JX0NGR19BU1NPQ0lBVElPTl9GQUlMVVJFX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjZmdWYWx1ZSkgIT0gZVNJUl9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQ291bGQgbm90IGdldCBkaXNjb3ZlcnkgcmVzcG9uc2UgVGltZW91dCB2YWx1ZQorICAgICAgICAgICAgICogZnJvbSBDRkcuIExvZyBlcnJvci4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbGltTG9nKHBNYWMsIExPR1AsCisgICAgICAgICAgICAgICBGTCgiY291bGQgbm90IHJldHJpZXZlIFJlYXNzb2NGYWlsdXJlVGltZW91dCB2YWx1ZVxuIikpOworICAgICAgICB9CisgICAgICAgIGNmZ1ZhbHVlID0gU1lTX01TX1RPX1RJQ0tTKGNmZ1ZhbHVlKTsKKworICAgICAgICAvKiAKKyAgICAgICAgICogY3JlYXRlIFRETFMgZGlzY292ZXJ5IHJlc3BvbnNlIHdhaXQgdGltZXIgYW5kIGFjdGl2YXRlIGl0IGxhdGVyCisgICAgICAgICAqLworICAgICAgICBpZiAodHhfdGltZXJfY3JlYXRlKCZwTWFjLT5saW0ubGltVGltZXJzLmdMaW1UZGxzRGlzUnNwV2FpdFRpbWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJURExTIGRpc2NvdmVyeSByZXNwb25zZSBXQUlUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1UaW1lckhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lSX0xJTV9URExTX0RJU0NPVkVSWV9SU1BfV0FJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmdWYWx1ZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWF9OT19BQ1RJVkFURSkgIT0gVFhfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgbGltTG9nKHBNYWMsIExPR1AsCisgICAgICAgICAgICAgICBGTCgiY291bGQgbm90IGNyZWF0ZSBURExTIGRpc2NvdmVyeSByZXNwb25zZSB3YWl0IHRpbWVyXG4iKSk7CisgICAgICAgIGdvdG8gZXJyX3RpbWVyOworICAgICAgICB9CisjZW5kaWYKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1UaW1lclV0aWxzLmggYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVRpbWVyVXRpbHMuaAppbmRleCBiMGI5OTBkLi41YTk4ZDcyIDEwMDY0NAotLS0gYS9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVRpbWVyVXRpbHMuaAorKysgYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVRpbWVyVXRpbHMuaApAQCAtNzUsNiArNzUsMTEgQEAKICNpZmRlZiBGRUFUVVJFX1dMQU5fQ0NYCiAgICAgZUxJTV9UU01fVElNRVIsCiAjZW5kaWYKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19JTlRFUk5BTAorICAgIGVMSU1fVERMU19ESVNDT1ZFUllfUlNQX1dBSVQsCisgICAgZUxJTV9URExTX0xJTktfU0VUVVBfUlNQX1RJTUVPVVQsCisgICAgZUxJTV9URExTX0xJTktfU0VUVVBfQ05GX1RJTUVPVVQsICAgICAgICAKKyNlbmRpZgogICAgIGVMSU1fRElTQVNTT0NfQUNLX1RJTUVSLAogICAgIGVMSU1fREVBVVRIX0FDS19USU1FUiwKICAgICBlTElNX1BFUklPRElDX0pPSU5fUFJPQkVfUkVRX1RJTUVSLApkaWZmIC0tZ2l0IGEvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1UeXBlcy5oIGIvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1UeXBlcy5oCmluZGV4IGNhZDFmODAuLjRjNDM4OTkgMTAwNjQ0Ci0tLSBhL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltVHlwZXMuaAorKysgYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVR5cGVzLmgKQEAgLTc0OSw2ICs3NDksMzEgQEAKIHZvaWQgbGltUHJvY2Vzc0lhcHBGcmFtZSh0cEFuaVNpckdsb2JhbCwgdEFOSV9VOCAqLHRwUEVTZXNzaW9uKTsKICNlbmRpZgogCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKK3RTaXJSZXRTdGF0dXMgbGltU2VuZFRkbHNEaXNSZXFGcmFtZSh0cEFuaVNpckdsb2JhbCBwTWFjLCAKKyAgICAgICAgICAgdFNpck1hY0FkZHIgcGVlcl9tYWMsIHRBTklfVTggZGlhbG9nLCB0cFBFU2Vzc2lvbiBwc2Vzc2lvbkVudHJ5KTsKK3RTaXJSZXRTdGF0dXMgbGltU2VuZFRkbHNMaW5rU2V0dXBSZXFGcmFtZSh0cEFuaVNpckdsb2JhbCBwTWFjLAorICAgICAgICAgICB0U2lyTWFjQWRkciBwZWVyTWFjLCB0QU5JX1U4IGRpYWxvZywgdHBQRVNlc3Npb24gcHNlc3Npb25FbnRyeSwKKyAgICAgICAgICAgdEFOSV9VOCogYWRkSWUsIHRBTklfVTE2IGxlbik7IAorCitlSGFsU3RhdHVzIGxpbVRkbHNQcmVwYXJlU2V0dXBSZXFGcmFtZSh0cEFuaVNpckdsb2JhbCBwTWFjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdExpbVRkbHNMaW5rU2V0dXBJbmZvICpsaW5rU2V0dXBJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdEFOSV9VOCBkaWFsb2csIHRTaXJNYWNBZGRyIHBlZXJNYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBQRVNlc3Npb24gcHNlc3Npb25FbnRyeSk7CisjZW5kaWYKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUwordFNpclJldFN0YXR1cyBsaW1Qcm9jZXNzU21lVGRsc01nbXRTZW5kUmVxKHRwQW5pU2lyR2xvYmFsIHBNYWMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0QU5JX1UzMiAqcE1zZ0J1Zik7Cit0U2lyUmV0U3RhdHVzIGxpbVByb2Nlc3NTbWVUZGxzQWRkU3RhUmVxKHRwQW5pU2lyR2xvYmFsIHBNYWMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0QU5JX1UzMiAqcE1zZ0J1Zik7Cit0U2lyUmV0U3RhdHVzIGxpbVByb2Nlc3NTbWVUZGxzRGVsU3RhUmVxKHRwQW5pU2lyR2xvYmFsIHBNYWMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0QU5JX1UzMiAqcE1zZ0J1Zik7CitlSGFsU3RhdHVzIGxpbVByb2Nlc3NUZGxzQWRkU3RhUnNwKHRwQW5pU2lyR2xvYmFsIHBNYWMsIHZvaWQgKm1zZywgdHBQRVNlc3Npb24pOwordFNpclJldFN0YXR1cyBsaW1TZW5kVGRsc1RlYXJkb3duRnJhbWUodHBBbmlTaXJHbG9iYWwgcE1hYywKKyAgICAgICAgICAgdFNpck1hY0FkZHIgcGVlck1hYywgdEFOSV9VMTYgcmVhc29uLCB0cFBFU2Vzc2lvbiBwc2Vzc2lvbkVudHJ5LAorICAgICAgICAgICB0QU5JX1U4ICphZGRJZSwgdEFOSV9VMTYgYWRkSWVMZW4pOyAKKyNlbmRpZgorCiAvLyBBbGdvcml0aG1zICYgTGluayBNb25pdG9yaW5nIHJlbGF0ZWQgZnVuY3Rpb25zCiB0U2lyQmFja2dyb3VuZFNjYW5Nb2RlIGxpbVNlbGVjdHNCYWNrZ3JvdW5kU2Nhbk1vZGUodHBBbmlTaXJHbG9iYWwpOwogdm9pZCBsaW1UcmlnZ2VyQmFja2dyb3VuZFNjYW4odHBBbmlTaXJHbG9iYWwpOwpAQCAtMTA4Myw2ICsxMTA4LDI2IEBACiB2b2lkIGxpbUFib3J0UmVtYWluT25DaGFuKHRwQW5pU2lyR2xvYmFsIHBNYWMpOwogdFNpclJldFN0YXR1cyBfX2xpbVByb2Nlc3NTbWVOb0FVcGRhdGUodHBBbmlTaXJHbG9iYWwgcE1hYywgdEFOSV9VMzIgKnBNc2dCdWYpOwogI2VuZGlmCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKK3ZvaWQgbGltUHJvY2Vzc1RkbHNGcmFtZSh0cEFuaVNpckdsb2JhbCwgdEFOSV9VMzIgKik7Cit2b2lkIGxpbUluaXRUZGxzRGF0YSh0cEFuaVNpckdsb2JhbCwgdHBQRVNlc3Npb24pOwordm9pZCBsaW1Qcm9jZXNzVGRsc1B1YmxpY0FjdGlvbkZyYW1lKHRwQW5pU2lyR2xvYmFsIHBNYWMsIHRBTklfVTMyICpwQmQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBQRVNlc3Npb24pIDsKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19ORUdBVElWRQorI2RlZmluZSBMSU1fVERMU19ORUdBVElWRV9XUk9OR19CU1NJRF9JTl9EU0NWX1JFUSAgIDB4MSAvKiA1LjEuNC01ICovCisjZGVmaW5lIExJTV9URExTX05FR0FUSVZFX1dST05HX0JTU0lEX0lOX1NFVFVQX1JFUSAgMHgyIC8qIDUuMi40LTE2ICovCisjZGVmaW5lIExJTV9URExTX05FR0FUSVZFX1NUQVRVU18zN19JTl9TRVRVUF9DTkYgICAgMHg0IC8qIDUuMi40LTEwICovCisjZGVmaW5lIExJTV9URExTX05FR0FUSVZFX1NFTkRfUkVRX1RPX1NFVFVQX1JFUSAgICAgMHg4IC8qIDUuMi40LTIwLzMyICovCisjZGVmaW5lIExJTV9URExTX05FR0FUSVZFX1JTUF9USU1FT1VUX1RPX1NFVFVQX1JFUSAgMHgxMCAvKiA1LjIuMy40ICovCisjZGVmaW5lIExJTV9URExTX05FR0FUSVZFX1RSRUFUX1RETFNfUFJPSElCSVRfQVAgICAgMHgyMCAvKiA1LjIuNC00OSAqLworICAgLyogZm9sbG93aW5nIGlzIG5vdCBwYXRpY3VsYXJpbHkgdGVzdGVkIGluIFdGQSB0ZXN0IHBsYW4sIGJ1dCB3aWxsIGhlbHAgdG8gdmFsaWRhdGUgb3VyIFRETFMgYmVoYXZpb3IgaW4taG91c2UgKi8KKyNkZWZpbmUgTElNX1RETFNfTkVHQVRJVkVfV1JPTkdfQlNTSURfSU5fRFNDVl9SU1AgICAweDQwCisjZGVmaW5lIExJTV9URExTX05FR0FUSVZFX1dST05HX0JTU0lEX0lOX1NFVFVQX1JTUCAgMHg4MAorCit2b2lkIGxpbVRkbHNTZXROZWdhdGl2ZUJlaGF2aW9yKHRwQW5pU2lyR2xvYmFsIHBNYWMsIHRBTklfVTggdmFsdWUsIHRBTklfQk9PTEVBTiBvbik7CisjZW5kaWYKKyNlbmRpZgorCiB2b2lkIGxpbVByb2Nlc3NEaXNhc3NvY0Fja1RpbWVvdXQodHBBbmlTaXJHbG9iYWwgcE1hYyk7CiB2b2lkIGxpbVByb2Nlc3NEZWF1dGhBY2tUaW1lb3V0KHRwQW5pU2lyR2xvYmFsIHBNYWMpOwogZUhhbFN0YXR1cyBsaW1TZW5kRGlzYXNzb2NDbmYodHBBbmlTaXJHbG9iYWwgcE1hYyk7CmRpZmYgLS1naXQgYS9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVV0aWxzLmMgYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVV0aWxzLmMKaW5kZXggOTVmMDFhYi4uYjQ4ZDU1ZiAxMDA2NDQKLS0tIGEvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1VdGlscy5jCisrKyBiL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltVXRpbHMuYwpAQCAtNzQ3Miw3ICs3NDcyLDEzIEBACiAgICAgfQogICAgIGlmIChwc2Vzc2lvbkVudHJ5LT5saW1TeXN0ZW1Sb2xlID09IGVMSU1fU1RBX0lOX0lCU1NfUk9MRSkKICAgICAgICAgKHZvaWQpIGxpbUlic3NBZGRTdGFSc3AocE1hYywgbGltTXNnUS0+Ym9keXB0cixwc2Vzc2lvbkVudHJ5KTsKLSAgICAKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICAgIGVsc2UgaWYocE1hYy0+bGltLmdMaW1BZGRTdGFUZGxzKQorICAgIHsKKyAgICAgICAgbGltUHJvY2Vzc1RkbHNBZGRTdGFSc3AocE1hYywgbGltTXNnUS0+Ym9keXB0ciwgcHNlc3Npb25FbnRyeSkgOworICAgICAgICBwTWFjLT5saW0uZ0xpbUFkZFN0YVRkbHMgPSBGQUxTRSA7CisgICAgfSAgICAKKyNlbmRpZgogICAgIGVsc2UKICAgICAgICAgbGltUHJvY2Vzc01sbUFkZFN0YVJzcChwTWFjLCBsaW1Nc2dRLHBzZXNzaW9uRW50cnkpOwogICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1VdGlscy5oIGIvQ09SRS9NQUMvc3JjL3BlL2xpbS9saW1VdGlscy5oCmluZGV4IDVkNTBhNGUuLmM1NzA2OTMgMTAwNjQ0Ci0tLSBhL0NPUkUvTUFDL3NyYy9wZS9saW0vbGltVXRpbHMuaAorKysgYi9DT1JFL01BQy9zcmMvcGUvbGltL2xpbVV0aWxzLmgKQEAgLTQ4Niw2ICs0ODYsMTIgQEAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdm9pZCBwZUdldFJlc3VtZUNoYW5uZWwodHBBbmlTaXJHbG9iYWwgcE1hYywgdEFOSV9VOCogcmVzdW1lQ2hhbm5lbCwgZVBoeUNoYW5Cb25kU3RhdGUqIHJlc3VtZVBoeUNiU3RhdGUpOwogCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKK3RBTklfVTggbGltVGRsc0ZpbmRMaW5rUGVlcih0cEFuaVNpckdsb2JhbCBwTWFjLCB0U2lyTWFjQWRkciBwZWVyTWFjLCB0TGltVGRsc0xpbmtTZXR1cFBlZXIgICoqc2V0dXBQZWVyKTsKK3ZvaWQgbGltVGRsc0RlbExpbmtQZWVyKHRwQW5pU2lyR2xvYmFsIHBNYWMsIHRTaXJNYWNBZGRyIHBlZXJNYWMpOwordm9pZCBsaW1TdGFydFRkbHNUaW1lcih0cEFuaVNpckdsb2JhbCBwTWFjLCB0QU5JX1U4IHNlc3Npb25JZCwgVFhfVElNRVIgKnRpbWVyLCB0QU5JX1UzMiB0aW1lcklkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdEFOSV9VMTYgdGltZXJUeXBlLCB0QU5JX1UzMiB0aW1lck1zZyk7CisjZW5kaWYKIHRBTklfVTggbGltR2V0U2hvcnRTbG90RnJvbVBoeU1vZGUodHBBbmlTaXJHbG9iYWwgcE1hYywgdHBQRVNlc3Npb24gcHNlc3Npb25FbnRyeSwgdEFOSV9VMzIgcGh5TW9kZSk7CiAKIHZvaWQgbGltQ2xlYW5VcERpc2Fzc29jRGVhdXRoUmVxKHRwQW5pU2lyR2xvYmFsIHBNYWMsIHRBTklfVTggKnN0YU1hYywgdEFOSV9CT09MRUFOIGNsZWFuUnhQYXRoKTsKZGlmZiAtLWdpdCBhL0NPUkUvU01FL2luYy9jc3JBcGkuaCBiL0NPUkUvU01FL2luYy9jc3JBcGkuaAppbmRleCA2NjA1Mzg2Li4wNjU2YTI5IDEwMDY0NAotLS0gYS9DT1JFL1NNRS9pbmMvY3NyQXBpLmgKKysrIGIvQ09SRS9TTUUvaW5jL2NzckFwaS5oCkBAIC00MTgsNiArNDE4LDkgQEAKICNpZmRlZiBGRUFUVVJFX1dMQU5fTEZSCiAgICAgZUNTUl9ST0FNX1BNS19OT1RJRlksCiAjZW5kaWYKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICAgIGVDU1JfUk9BTV9URExTX1NUQVRVU19VUERBVEUsCisjZW5kaWYKICAgICBlQ1NSX1JPQU1fRElTQ09OTkVDVF9BTExfUDJQX0NMSUVOVFMsIC8vRGlzYWNvbm5lY3QgYWxsIHRoZSBjbGllbnRzCiAgICAgZUNTUl9ST0FNX1NFTkRfUDJQX1NUT1BfQlNTLCAvL1N0b3Bic3MgdHJpZ2dlcmVkIGZyb20gU01FIGR1ZSB0byBkaWZmZXJlbnQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWFjb24gaW50ZXJ2YWwKQEAgLTUwNiw2ICs1MDksMTEgQEAKICAgICBlQ1NSX1JPQU1fUkVTVUxUX01BWF9BU1NPQ19FWENFRURFRCwKICAgICAvL0Fzc29jIHJlamVjdGVkIGR1ZSB0byBjb25jdXJyZW50IHNlc3Npb24gcnVubmluZyBvbiBhIGRpZmZlcmVudCBjaGFubmVsCiAgICAgZUNTUl9ST0FNX1JFU1VMVF9BU1NPQ19GQUlMX0NPTl9DSEFOTkVMLAorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisgICAgZUNTUl9ST0FNX1JFU1VMVF9BRERfVERMU19QRUVSLAorICAgIGVDU1JfUk9BTV9SRVNVTFRfREVMRVRFX1RETFNfUEVFUiwKKyNlbmRpZgorCiB9ZUNzclJvYW1SZXN1bHQ7CiAKIApAQCAtMTA5NCw2ICsxMTAyLDEwIEBACiAgICAgdEFOSV9VMzIgcnhDaGFuOwogI2VuZGlmCiAKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICAgIHRBTklfVTggc3RhVHlwZTsKKyNlbmRpZgorCiAgICAgLy8gUmVxdWlyZWQgZm9yIGluZGljYXRpbmcgdGhlIGZyYW1lcyB0byB1cHBlciBsYXllcgogICAgIHRBTklfVTMyIGJlYWNvbkxlbmd0aDsKICAgICB0QU5JX1U4KiBiZWFjb25QdHI7CkBAIC0xMjUwLDYgKzEyNjIsMzggQEAKICAgICB0QU5JX1U4IGtleUlkOyAgLy9rZXkgaW5kZXgKIH0gdENzclJvYW1SZW1vdmVLZXk7CiAKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUwordHlwZWRlZiBzdHJ1Y3QgdGFnQ3NyVGRsc1NlbmRNZ210Cit7CisgICAgICAgIHRTaXJNYWNBZGRyIHBlZXJNYWM7CisgICAgICAgIHRBTklfVTggZnJhbWVUeXBlOworICAgICAgICB0QU5JX1U4IGRpYWxvZzsKKyAgICAgICAgdEFOSV9VMTYgc3RhdHVzQ29kZTsKKyAgICAgICAgdEFOSV9VOCAqYnVmOworICAgICAgICB0QU5JX1U4IGxlbjsKKworfXRDc3JUZGxzU2VuZE1nbXQ7CisKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19JTlRFUk5BTAordHlwZWRlZiBzdHJ1Y3QgdGFnQ3NyVGRsc0Rpc1JlcXVlc3QKK3sKKyAgICAgICAgdFNpck1hY0FkZHIgcGVlck1hYzsKKyAgICAgICAgICAgIHRBTklfVTggZGlzVHlwZTsKK310Q3NyVGRsc0Rpc1JlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0IHRhZ0NzclRkbHNTZXR1cFJlcXVlc3QKK3sKKyAgICAgICAgdFNpck1hY0FkZHIgcGVlck1hYzsKKyAgICAgICAgICAgIHRBTklfVTggbGlua0luZGV4OworfXRDc3JUZGxzU2V0dXBSZXF1ZXN0OworCit0eXBlZGVmIHN0cnVjdCB0YWdDc3JUZGxzVGVhcmRvd25SZXF1ZXN0Cit7CisgICAgICAgIHRTaXJNYWNBZGRyIHBlZXJNYWM7CisgICAgICAgICAgICB0QU5JX1U4IGxpbmtJbmRleDsKK310Q3NyVGRsc1RlYXJkb3duUmVxdWVzdCA7CisjZW5kaWYKKyNlbmRpZgogCiB0eXBlZGVmIHZvaWQgKiB0U2NhblJlc3VsdEhhbmRsZTsKIApkaWZmIC0tZ2l0IGEvQ09SRS9TTUUvaW5jL2NzckludGVybmFsLmggYi9DT1JFL1NNRS9pbmMvY3NySW50ZXJuYWwuaAppbmRleCBmYTc0M2I3Li5mMTdjN2RlIDEwMDY0NAotLS0gYS9DT1JFL1NNRS9pbmMvY3NySW50ZXJuYWwuaAorKysgYi9DT1JFL1NNRS9pbmMvY3NySW50ZXJuYWwuaApAQCAtNzA4LDYgKzcwOCwzMCBAQAogICAgIHRBTklfQk9PTEVBTiBmSWdub3JlX2NoYW4xNjU7CiB9dENzclNjYW5TdHJ1Y3Q7CiAKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworLyoKKyAqIHN0cnVjdCB0byBjYXJyeSBURExTIGRpc2NvdmVyeSBpbmZvLi4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc0NzclRkbHNDb250ZXh0Cit7CisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKKyAgICB0RGJsTGlua0xpc3QgdGRsc1BvdGVudGlhbFBlZXJMaXN0IDsKKyAgICB0QU5JX1UxNiB0ZGxzQ29tbW9uRmxhZyA7CisgICAgdEFOSV9VMTYgdGRsc0NvbW1vblN0YXRlIDsKKyNlbmRpZgorICAgIHRBTklfVTE2IHRkbHNQZWVyQ291bnQgOworfXRDc3JUZGxzQ3R4U3RydWN0OworCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKK3R5cGVkZWYgc3RydWN0IHNDc3JUZGxzUGVlckxpbmtJbmZvCit7CisgICAgdExpc3RFbGVtIHRkbHNQZWVyU3RhTGluayA7CisgICAgdFNpclRkbHNQZWVySW5mbyB0ZGxzRGlzUGVlckluZm8gOworfXRDc3JUZGxzUGVlckxpbmtpbmZvIDsKKyNlbmRpZgorI2VuZGlmCisKKwogCiAvL1NhdmUgdGhlIGNvbm5lY3RlZCBpbmZvcm1hdGlvbi4gVGhpcyBzdHJ1Y3R1cmUgKyBjb25uZWN0ZWRQcm9maWxlCiAvL3Nob3VsZCBjb250YWluIGFsbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29ubmVjdGlvbgpkaWZmIC0tZ2l0IGEvQ09SRS9TTUUvaW5jL3NtZUluc2lkZS5oIGIvQ09SRS9TTUUvaW5jL3NtZUluc2lkZS5oCmluZGV4IGRiZjU1Y2IuLmVlOTVjMDAgMTAwNjQ0Ci0tLSBhL0NPUkUvU01FL2luYy9zbWVJbnNpZGUuaAorKysgYi9DT1JFL1NNRS9pbmMvc21lSW5zaWRlLmgKQEAgLTEwMiw2ICsxMDIsNjQgQEAKICAgICB0UDJwUHNDb25maWcgTm9BOwogfSB0Tm9BQ21kOwogI2VuZGlmCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKK3R5cGVkZWYgc3RydWN0IFRkbHNTZW5kTWdtdEluZm8KK3sKKyAgdFNpck1hY0FkZHIgcGVlck1hYzsKKyAgdEFOSV9VOCBmcmFtZVR5cGU7CisgIHRBTklfVTggZGlhbG9nOworICB0QU5JX1UxNiBzdGF0dXNDb2RlOworICB0QU5JX1U4ICpidWY7CisgIHRBTklfVTggbGVuOworfSB0VGRsc1NlbmRNZ210Q21kSW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgVGRsc0FkZFN0YUluZm8KK3sKKyAgdFNpck1hY0FkZHIgcGVlck1hYzsKK30gdFRkbHNBZGRTdGFDbWRJbmZvOworCit0eXBlZGVmIHN0cnVjdCBUZGxzRGVsU3RhSW5mbworeworICB0U2lyTWFjQWRkciBwZWVyTWFjOworfSB0VGRsc0RlbFN0YUNtZEluZm87CisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKK3R5cGVkZWYgc3RydWN0IFRkbHNEaXNSZXFDbWRpbmZvCit7CisgICAgICB0U2lyTWFjQWRkciBwZWVyTWFjOworICAgICAgICAgIHRBTklfVTggdGRsc0Rpc1R5cGU7Cit9IHRUZGxzRGlzUmVxQ21kaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgdGRsc0xpbmtTZXR1cFJlcUNtZGluZm8KK3sKKyAgICAgIHRTaXJNYWNBZGRyIHBlZXJNYWM7Cit9IHRUZGxzTGlua1NldHVwUmVxQ21kaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgdGRsc0xpbmtUZWFyZG93bkNtZGluZm8KK3sKKyAgICAgIHRTaXJNYWNBZGRyIHBlZXJNYWM7Cit9IHRUZGxzTGlua1RlYXJkb3duQ21kaW5mbzsKKyNlbmRpZgorLyoKKyAqIFRETFMgY21kIGluZm8sIENNRCBmcm9tIFNNRSB0byBQRS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qgc190ZGxzX2NtZAoreworICB0QU5JX1UzMiBzaXplOworICB1bmlvbgorICB7CisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKKyAgICB0VGRsc0Rpc1JlcUNtZGluZm8gdGRsc0Rpc1JlcUNtZEluZm8gOworICAgIHRUZGxzTGlua1NldHVwUmVxQ21kaW5mbyB0ZGxzTGlua1NldHVwUmVxQ21kSW5mbyA7CisgICAgdFRkbHNMaW5rVGVhcmRvd25DbWRpbmZvIHRkbHNMaW5rVGVhcmRvd25DbWRJbmZvIDsKKyAgICAvL3RFbnRlclBlZXJVQVBTREluZm8gZW50ZXJVYXBzZEluZm8gOworICAgIC8vdEV4aXRQZWVyVUFQU0RpbmZvICBleGl0VWFwc2RJbmZvIDsKKyNlbmRpZgorICAgIHRUZGxzU2VuZE1nbXRDbWRJbmZvIHRkbHNTZW5kTWdtdENtZEluZm87CisgICAgdFRkbHNBZGRTdGFDbWRJbmZvICAgdGRsc0FkZFN0YUNtZEluZm87CisgICAgdFRkbHNEZWxTdGFDbWRJbmZvICAgdGRsc0RlbFN0YUNtZEluZm87CisgIH11OworfSB0VGRsc0NtZDsKKyNlbmRpZiAgLyogRkVBVFVSRV9XTEFOX1RETFMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU21lQ21kCiB7CkBAIC0xMjYsNiArMTg0LDkgQEAKICNlbmRpZgogICAgICAgICB0QWRkU3RhRm9yU2Vzc2lvbkNtZCBhZGRTdGFTZXNzaW9uQ21kOwogICAgICAgICB0RGVsU3RhRm9yU2Vzc2lvbkNtZCBkZWxTdGFTZXNzaW9uQ21kOworI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisgICAgICAgIHRUZGxzQ21kICB0ZGxzQ21kOworI2VuZGlmCiAgICAgfXU7CiB9dFNtZUNtZDsKIApAQCAtMjAyLDQgKzI2MywyNCBAQAogZUhhbFN0YXR1cyBwbWNTZXRQb3dlclBhcmFtcyh0SGFsSGFuZGxlIGhIYWwsICAgdFNpclNldFBvd2VyUGFyYW1zUmVxKiAgcHdQYXJhbXMpOwogCiB0QU5JX0JPT0xFQU4gY3NyUm9hbUdldENvbmN1cnJlbmN5Q29ubmVjdFN0YXR1c0ZvckJtcHModHBBbmlTaXJHbG9iYWwgcE1hYyk7CisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKK2VIYWxTdGF0dXMgY3NyVGRsc1NlbmRNZ210UmVxKHRIYWxIYW5kbGUgaEhhbCwgdEFOSV9VOCBzZXNzaW9uSWQsIHRDc3JUZGxzU2VuZE1nbXQgKnRkbHNTZW5kTWdtdCk7CitlSGFsU3RhdHVzIGNzclRkbHNBZGRQZWVyU3RhKHRIYWxIYW5kbGUgaEhhbCwgdEFOSV9VOCBzZXNzaW9uSWQsIHRTaXJNYWNBZGRyIHBlZXJNYWMpOworZUhhbFN0YXR1cyBjc3JUZGxzRGVsUGVlclN0YSh0SGFsSGFuZGxlIGhIYWwsIHRBTklfVTggc2Vzc2lvbklkLCB0U2lyTWFjQWRkciBwZWVyTWFjKTsKK2VIYWxTdGF0dXMgY3NyVGRsc1Byb2Nlc3NDbWQodHBBbmlTaXJHbG9iYWwgcE1hYyx0U21lQ21kICpwQ29tbWFuZCApOworZUhhbFN0YXR1cyB0ZGxzTXNnUHJvY2Vzc29yKHRwQW5pU2lyR2xvYmFsIHBNYWMsdl9VMTZfdCBtc2dfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcE1zZ0J1Zik7CitlSGFsU3RhdHVzIGNzclRkbHNPcGVuKHRIYWxIYW5kbGUgaEhhbCk7Cit0QU5JX0JPT0xFQU4gY3NyVGRsc1Bvd2VyU2F2ZUNoZWNrKCB2b2lkKiBoSGFsICk7CisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKK2VIYWxTdGF0dXMgY3NyVGRsc0Rpc2NvdmVyeVJlcSh0SGFsSGFuZGxlIGhIYWwsIHRBTklfVTggc2Vzc2lvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdENzclRkbHNEaXNSZXF1ZXN0ICp0ZGxzRGlzUmVxKTsKK2VIYWxTdGF0dXMgY3NyVGRsc1NldHVwUmVxKHRIYWxIYW5kbGUgaEhhbCwgdEFOSV9VOCBzZXNzaW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRDc3JUZGxzU2V0dXBSZXF1ZXN0ICp0ZGxzU2V0dXBSZXEpOworZUhhbFN0YXR1cyBjc3JUZGxzVGVhcmRvd25SZXEodEhhbEhhbmRsZSBoSGFsLCB0QU5JX1U4IHNlc3Npb25JZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdENzclRkbHNUZWFyZG93blJlcXVlc3QgKnRlYXJkb3duKTsKKyNlbmRpZgorCisjZW5kaWYgLyogRkVBVFVSRV9XTEFOX1RETFMgKi8KKwogI2VuZGlmIC8vI2lmICFkZWZpbmVkKCBfX1NNRUlOU0lERV9IICkKZGlmZiAtLWdpdCBhL0NPUkUvU01FL2luYy9zbWVJbnRlcm5hbC5oIGIvQ09SRS9TTUUvaW5jL3NtZUludGVybmFsLmgKaW5kZXggZmU1NDQ0NC4uMjIyMGMwYSAxMDA2NDQKLS0tIGEvQ09SRS9TTUUvaW5jL3NtZUludGVybmFsLmgKKysrIGIvQ09SRS9TTUUvaW5jL3NtZUludGVybmFsLmgKQEAgLTY1LDYgKzY1LDIwIEBACiAgICAgZVNtZUNvbW1hbmRSZW1vdmVLZXksCiAgICAgZVNtZUNvbW1hbmRBZGRTdGFTZXNzaW9uLAogICAgIGVTbWVDb21tYW5kRGVsU3RhU2Vzc2lvbiwKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICAgIC8vZVNtZVRkbHNDb21tYW5kTWFzayA9IDB4ODAwMDAsICAvL1RvIGlkZW50aWZ5IFRETFMgY29tbWFuZHMgPFRPRE8+CisgICAgLy9UaGVzZSBjYW4gYmUgY29uc2lkZXJlZCBhcyBjc3IgY29tbWFuZHMuIAorICAgIGVTbWVDb21tYW5kVGRsc1NlbmRNZ210LCAKKyAgICBlU21lQ29tbWFuZFRkbHNBZGRQZWVyLCAKKyAgICBlU21lQ29tbWFuZFRkbHNEZWxQZWVyLCAKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19JTlRFUk5BTAorICAgIGVTbWVDb21tYW5kVGRsc0Rpc2NvdmVyeSwKKyAgICBlU21lQ29tbWFuZFRkbHNMaW5rU2V0dXAsCisgICAgZVNtZUNvbW1hbmRUZGxzTGlua1RlYXIsCisgICAgZVNtZUNvbW1hbmRUZGxzRW50ZXJVYXBzZCwKKyAgICBlU21lQ29tbWFuZFRkbHNFeGl0VWFwc2QsCisjZW5kaWYKKyNlbmRpZgogICAgIC8vUE1DCiAgICAgZVNtZVBtY0NvbW1hbmRNYXNrID0gMHgyMDAwMCwgLy9UbyBpZGVudGlmeSBQTUMgY29tbWFuZHMKICAgICBlU21lQ29tbWFuZEVudGVySW1wcywKZGlmZiAtLWdpdCBhL0NPUkUvU01FL2luYy9zbWVfQXBpLmggYi9DT1JFL1NNRS9pbmMvc21lX0FwaS5oCmluZGV4IDk2OGRmMTMuLmFhMzdjMTQgMTAwNjQ0Ci0tLSBhL0NPUkUvU01FL2luYy9zbWVfQXBpLmgKKysrIGIvQ09SRS9TTUUvaW5jL3NtZV9BcGkuaApAQCAtMTU5NSw5ICsxNTk1LDkgQEAKIAogICAgIFxwYXJhbSBwQVBXUFNJRVMgLSBwb2ludGVyIHRvIGEgY2FsbGVyIGFsbG9jYXRlZCBvYmplY3Qgb2YgdENzclJvYW1BUFdQU0lFUwogCi0gICAgXHJldHVybiBlSGFsU3RhdHVzIJYgU1VDQ0VTUyCWIFJvYW0gY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgaW5kaWNhdGUgYWN0dWFsbHkgcmVzdWx0cworICAgIFxyZXR1cm4gZUhhbFN0YXR1cyAgU1VDQ0VTUyAgUm9hbSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbmRpY2F0ZSBhY3R1YWxseSByZXN1bHRzCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICBGQUlMVVJFIG9yIFJFU09VUkNFUyCWIFRoZSBBUEkgZmluaXNoZWQgYW5kIGZhaWxlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICBGQUlMVVJFIG9yIFJFU09VUkNFUyAgVGhlIEFQSSBmaW5pc2hlZCBhbmQgZmFpbGVkLgogCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xNjExLDkgKzE2MTEsOSBAQAogCiAgICAgXHBhcmFtIHBBUFNpclJTTmllIC0gcG9pbnRlciB0byBhIGNhbGxlciBhbGxvY2F0ZWQgb2JqZWN0IG9mIHRTaXJSU05pZSB3aXRoIFdQUy9SU04gSUVzCiAKLSAgICBccmV0dXJuIGVIYWxTdGF0dXMgliBTVUNDRVNTIJYgCisgICAgXHJldHVybiBlSGFsU3RhdHVzICBTVUNDRVNTICAKIAotICAgICAgICAgICAgICAgICAgICAgICAgIEZBSUxVUkUgb3IgUkVTT1VSQ0VTIJYgVGhlIEFQSSBmaW5pc2hlZCBhbmQgZmFpbGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgIEZBSUxVUkUgb3IgUkVTT1VSQ0VTICBUaGUgQVBJIGZpbmlzaGVkIGFuZCBmYWlsZWQuCiAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBlSGFsU3RhdHVzIHNtZV9Sb2FtVXBkYXRlQVBXUEFSU05JRXModEhhbEhhbmRsZSBoSGFsLCB0QU5JX1U4IHNlc3Npb25JZCwgdFNpclJTTmllICogcEFQU2lyUlNOaWUpOwpAQCAtMTYyNCw5ICsxNjI0LDkgQEAKIAogICAgIFxicmllZiBUbyB1cGRhdGUgUDJQLUdPJ3MgYmVhY29uIEludGVydmFsLiAKIAotICAgIFxyZXR1cm4gZUhhbFN0YXR1cyCWIFNVQ0NFU1MgCi0gICAgICAgICAgICAgICAgICAgICAgIJYgRkFJTFVSRSBvciBSRVNPVVJDRVMgCi0gICAgICAgICAgICAgICAgICAgICAgIJYgVGhlIEFQSSBmaW5pc2hlZCBhbmQgZmFpbGVkLgorICAgIFxyZXR1cm4gZUhhbFN0YXR1cyAgU1VDQ0VTUyAKKyAgICAgICAgICAgICAgICAgICAgICAgIEZBSUxVUkUgb3IgUkVTT1VSQ0VTIAorICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEFQSSBmaW5pc2hlZCBhbmQgZmFpbGVkLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGVIYWxTdGF0dXMgc21lX0NoYW5nZU1DQ0JlYWNvbkludGVydmFsKHRIYWxIYW5kbGUgaEhhbCwgdEFOSV9VOCBzZXNzaW9uSWQpOwogCkBAIC0xNjM4LDggKzE2MzgsOCBAQAogICBcYnJpZWYgQVBJIHRvIHNlbmQgdGhlIGJ0QU1Qc3RhdGUgdG8gRlcKICAgXHBhcmFtICBoSGFsIC0gVGhlIGhhbmRsZSByZXR1cm5lZCBieSBtYWNPcGVuLgogICBccGFyYW0gIGJ0QW1wRXZlbnQgLS0gYnRBTVAgZXZlbnQKLSAgXHJldHVybiBlSGFsU3RhdHVzIJYgU1VDQ0VTUyCWCi0gICAgICAgICAgICAgICAgICAgICAgICAgRkFJTFVSRSBvciBSRVNPVVJDRVMgliBUaGUgQVBJIGZpbmlzaGVkIGFuZCBmYWlsZWQuCisgIFxyZXR1cm4gZUhhbFN0YXR1cyAgU1VDQ0VTUyAKKyAgICAgICAgICAgICAgICAgICAgICAgICBGQUlMVVJFIG9yIFJFU09VUkNFUyAgVGhlIEFQSSBmaW5pc2hlZCBhbmQgZmFpbGVkLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMjE5OSw0ICsyMTk5LDYxIEBACiBlSGFsU3RhdHVzIHNtZV9VcGRhdGVSb2FtUHJlZmVyNUdIeih0SGFsSGFuZGxlIGhIYWwsIHZfQk9PTF90IG5Sb2FtUHJlZmVyNUdIeik7CiAjZW5kaWYKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgXGZuIHNtZV9Jc0ZlYXR1cmVTdXBwb3J0ZWRCeUZXCisgICAgXGJyaWVmICBDaGVjayBpZiBhbiBmZWF0dXJlIGlzIGVuYWJsZWQgYnkgRlcKKyAgICAgICAgICAgIAorICAgIFxwYXJhbSAgZmVhdHRFbnVtVmFsdWUgLSBFbnVtZXJhdGlvbiB2YWx1ZSBvZiB0aGUgZmVhdHVyZSB0byBiZSBjaGVja2VkLgorICAgICAgICAgICAgICAgIEEgdmFsdWUgZnJvbSBlbnVtIHBsYWNlSG9sZGVySW5DYXBCaXRtYXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIFwtIHJldHVybiAxLzAgKFRSVUUvRkFMU0UpIAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordEFOSV9VOCBzbWVfSXNGZWF0dXJlU3VwcG9ydGVkQnlGVyh0QU5JX1U4IGZlYXRFbnVtVmFsdWUpOworI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBcZm4gc21lX1NlbmRUZGxzTWdtdEZyYW1lCisgICAgXGJyaWVmICBBUEkgdG8gc2VuZCBURExTIG1hbmFnZW1lbnQgZnJhbWVzLgorICAgICAgICAgICAgCisgICAgXHBhcmFtICBwZWVyTWFjIC0gcGVlcidzIE1hYyBBZHJlc3MuCisgICAgXHBhcmFtIGZyYW1lX3R5cGUgLSBUeXBlIG9mIFRETFMgbWdtdCBmcmFtZSB0byBiZSBzZW50LgorICAgIFxwYXJhbSBkaWFsb2cgLSBkaWFsb2cgdG9rZW4gdXNlZCBpbiB0aGUgZnJhbWUuCisgICAgXHBhcmFtIHN0YXR1cyAtIHN0YXR1cyB0byBiZSBpbmN1ZGVkIGluIHRoZSBmcmFtZS4KKyAgICBccGFyYW0gYnVmIC0gYWRkaXRpb25hbCBJRXMgdG8gYmUgaW5jbHVkZWQKKyAgICBccGFyYW0gbGVuIC0gbGVuZ2h0IG9mIGFkZGl0aW9uYWwgSWVzCisgICAgXC0gcmV0dXJuIFZPU19TVEFUVVNfU1VDQ0VTCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitWT1NfU1RBVFVTIHNtZV9TZW5kVGRsc01nbXRGcmFtZSh0SGFsSGFuZGxlIGhIYWwsIHRBTklfVTggc2Vzc2lvbklkLCB0U2lyTWFjQWRkciBwZWVyTWFjLAorICAgICAgdEFOSV9VOCBmcmFtZV90eXBlLCB0QU5JX1U4IGRpYWxvZywgdEFOSV9VMTYgc3RhdHVzLCB0QU5JX1U4ICpidWYsIHRBTklfVTggbGVuKTsKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFxmbiBzbWVfQWRkVGRsc1BlZXJTdGEKKyAgICBcYnJpZWYgIEFQSSB0byBBZGQgVERMUyBwZWVyIHN0YSBlbnRyeS4KKyAgICAgICAgICAgIAorICAgIFxwYXJhbSAgcGVlck1hYyAtIHBlZXIncyBNYWMgQWRyZXNzLgorICAgIFwtIHJldHVybiBWT1NfU1RBVFVTX1NVQ0NFUworICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworVk9TX1NUQVRVUyBzbWVfQWRkVGRsc1BlZXJTdGEodEhhbEhhbmRsZSBoSGFsLCB0QU5JX1U4IHNlc3Npb25JZCwgdFNpck1hY0FkZHIgcGVlck1hYyk7CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBcZm4gc21lX0RlbGV0ZVRkbHNQZWVyU3RhCisgICAgXGJyaWVmICBBUEkgdG8gRGVsZXRlIFRETFMgcGVlciBzdGEgZW50cnkuCisgICAgICAgICAgICAKKyAgICBccGFyYW0gIHBlZXJNYWMgLSBwZWVyJ3MgTWFjIEFkcmVzcy4KKyAgICBcLSByZXR1cm4gVk9TX1NUQVRVU19TVUNDRVMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK1ZPU19TVEFUVVMgc21lX0RlbGV0ZVRkbHNQZWVyU3RhKHRIYWxIYW5kbGUgaEhhbCwgdEFOSV9VOCBzZXNzaW9uSWQsIHRTaXJNYWNBZGRyIHBlZXJNYWMpOworI2VuZGlmCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKK3R5cGVkZWYgc3RydWN0IHNtZVRkbHNEaXNSZXN1bHQKK3sKKyAgICAgIHRTaXJNYWNBZGRyIHRkbHNQZWVyTWFjOworICAgICAgICAgIHZfUzdfdCB0ZGxzUGVlclJzc2k7Cit9IHRTbWVUZGxzRGlzUmVzdWx0OworCitWT1NfU1RBVFVTIHNtZV9TdGFydFRkbHNEaXNjb3ZlcnlSZXEodEhhbEhhbmRsZSBoSGFsLCB0QU5JX1U4IHNlc3Npb25JZCwgdFNpck1hY0FkZHIgcGVlck1hYyk7Cit2X1U4X3Qgc21lX0dldFRkbHNEaXNjb3ZlcnlSZXN1bHQodEhhbEhhbmRsZSBoSGFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdFNtZVRkbHNEaXNSZXN1bHQgKmRpc1Jlc3VsdCwgdl9VOF90IGxpc3RUeXBlKTsKK1ZPU19TVEFUVVMgc21lX1N0YXJ0VGRsc0xpbmtTZXR1cFJlcSh0SGFsSGFuZGxlIGhIYWwsIHRBTklfVTggc2Vzc2lvbklkLCB0U2lyTWFjQWRkciBwZWVyTWFjKTsKK1ZPU19TVEFUVVMgc21lX1N0YXJ0VGRsc0xpbmtUZWFyZG93blJlcSh0SGFsSGFuZGxlIGhIYWwsIHRBTklfVTggc2Vzc2lvbklkLCB0U2lyTWFjQWRkciBwZWVyTWFjKTsKKworI2VuZGlmIC8qIEZFQVRVUkVfV0xBTl9URExTICovCisKICNlbmRpZiAvLyNpZiAhZGVmaW5lZCggX19TTUVfQVBJX0ggKQpkaWZmIC0tZ2l0IGEvQ09SRS9TTUUvc3JjL2Nzci9jc3JBcGlSb2FtLmMgYi9DT1JFL1NNRS9zcmMvY3NyL2NzckFwaVJvYW0uYwppbmRleCBkMTc1NTAyLi5lMmUxN2Q1IDEwMDY0NAotLS0gYS9DT1JFL1NNRS9zcmMvY3NyL2NzckFwaVJvYW0uYworKysgYi9DT1JFL1NNRS9zcmMvY3NyL2NzckFwaVJvYW0uYwpAQCAtMTQ2ODIsNiArMTQ2ODIsMTQgQEAKICAgICAgICAgICAgIGZOZWVkRnVsbFBvd2VyID0gZUFOSV9CT09MRUFOX1RSVUU7CiAgICAgICAgICAgICByZWFzb24gPSBlU01FX0xJTktfRElTQ09OTkVDVEVEX0JZX09USEVSOwogICAgICAgICB9CisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKKyAgICAgICAgZWxzZSBpZiggZVNtZUNvbW1hbmRUZGxzQWRkUGVlciA9PSBwQ29tbWFuZC0+Y29tbWFuZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vVERMUyBsaW5rIGlzIGdldHRpbmcgZXN0YWJsaXNoZWQuIG5lZWQgZnVsbCBwb3dlciAKKyAgICAgICAgICAgIGZOZWVkRnVsbFBvd2VyID0gZUFOSV9CT09MRUFOX1RSVUU7CisgICAgICAgICAgICByZWFzb24gPSBlU01FX0ZVTExfUFdSX05FRURFRF9CWV9URExTX1BFRVJfU0VUVVA7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIFJFUVVFU1RfU1RPUF9VQVBTRDoKICAgICBjYXNlIFJFUVVFU1RfRVhJVF9XT1dMOgpkaWZmIC0tZ2l0IGEvQ09SRS9TTUUvc3JjL3BtYy9wbWMuYyBiL0NPUkUvU01FL3NyYy9wbWMvcG1jLmMKaW5kZXggYzZlMTBiNy4uYTdmNDUzZiAxMDA2NDQKLS0tIGEvQ09SRS9TTUUvc3JjL3BtYy9wbWMuYworKysgYi9DT1JFL1NNRS9zcmMvcG1jL3BtYy5jCkBAIC0yNTQ2LDcgKzI1NDYsMTMgQEAKICAgICAgICAgc21zTG9nKHBNYWMsIExPRzEsIEZMKCJNdWx0aXBsZSBTZXNzaW9ucy9HTy9TQVAgc2Vzc2lvbnMgLiBCTVBTIHNob3VsZCBub3QgYmUgc3RhcnRlZCIpKTsKICAgICAgICAgcmV0dXJuIGVBTklfQk9PTEVBTl9GQUxTRTsKICAgICB9Ci0KKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICAgIGlmKCAhY3NyVGRsc1Bvd2VyU2F2ZUNoZWNrKCBwTWFjICkgKQorICAgIHsKKyAgICAgICAgc21zTG9nKHBNYWMsIExPR0UsIEZMKCJURExTIHBlZXIocykgY29ubmVjdGVkLiBEb250IHN0YXJ0IEJNUFMgdGltZXJcbiIpKTsKKyAgICAgICAgcmV0dXJuIGVBTklfQk9PTEVBTl9GQUxTRTsKKyAgICB9CisjZW5kaWYKICAgICAvKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBJbmZyYSBzZXNzaW9uLiBCTVBTIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgaXMKICAgICAgKiBhbiBJbmZyYSBzZXNzaW9uICovCiAgICAgaWYgKCFjc3JJc0luZnJhQ29ubmVjdGVkKHBNYWMpKQpkaWZmIC0tZ2l0IGEvQ09SRS9TTUUvc3JjL3NtZV9jb21tb24vc21lX0FwaS5jIGIvQ09SRS9TTUUvc3JjL3NtZV9jb21tb24vc21lX0FwaS5jCmluZGV4IGY0OTVlMmMuLjU0YzM3ZTQgMTAwNjQ0Ci0tLSBhL0NPUkUvU01FL3NyYy9zbWVfY29tbW9uL3NtZV9BcGkuYworKysgYi9DT1JFL1NNRS9zcmMvc21lX2NvbW1vbi9zbWVfQXBpLmMKQEAgLTc1MCw2ICs3NTAsMjYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBlU21lQ29tbWFuZFRkbHNTZW5kTWdtdDogICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBlU21lQ29tbWFuZFRkbHNBZGRQZWVyOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBlU21lQ29tbWFuZFRkbHNEZWxQZWVyOgorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTX0lOVEVSTkFMCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGVTbWVDb21tYW5kVGRsc0Rpc2NvdmVyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgZVNtZUNvbW1hbmRUZGxzTGlua1NldHVwOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBlU21lQ29tbWFuZFRkbHNMaW5rVGVhcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgZVNtZUNvbW1hbmRUZGxzRW50ZXJVYXBzZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgZVNtZUNvbW1hbmRUZGxzRXhpdFVhcHNkOgorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWT1NfVFJBQ0UoVk9TX01PRFVMRV9JRF9TTUUsIFZPU19UUkFDRV9MRVZFTF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuZGluZyBURExTIENvbW1hbmQgMHgleCB0byBQRVxuIiwgcENvbW1hbmQtPmNvbW1hbmQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzckxMVW5sb2NrKCAmcE1hYy0+c21lLnNtZUNtZEFjdGl2ZUxpc3QgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gY3NyVGRsc1Byb2Nlc3NDbWQoIHBNYWMsIHBDb21tYW5kICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIDsKKyNlbmRpZgogCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc29tZXRoaW5nIGlzIHdyb25nCkBAIC05MzAsNiArOTUwLDE2IEBACiAjaWYgZGVmaW5lZCBXTEFOX0ZFQVRVUkVfUDJQCiAgICAgICBzbWVfcDJwT3BlbihwTWFjKTsKICNlbmRpZgorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisgICAgICBzdGF0dXMgPSBjc3JUZGxzT3BlbihwTWFjKSA7CisgICAgICBpZiAoICEgSEFMX1NUQVRVU19TVUNDRVNTKCBzdGF0dXMgKSApCisgICAgICB7CisgICAgICAgICAgc21zTG9nKCBwTWFjLCBMT0dFLCAiVGRsc3BlbiBvcGVuIGZhaWxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gd2l0aCBcCisgICAgICAgICAgICAgICAgICBzdGF0dXM9JWRcbiIsIHN0YXR1cyApOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorI2VuZGlmCisKIAogICAgfXdoaWxlICgwKTsKIApAQCAtMTYzOSw2ICsxNjY5LDM5IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYgLy8gV0xBTl9XQUtFVVBfRVZFTlRTCiAKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICAgICAgICAgIC8qCisgICAgICAgICAgICogY29tbWFuZCByZXNjaXZlZCBmcm9tIFBFLCBTTUUgdGRscyBtc2cgcHJvY2Vzc29yIHNoYWxsIGJlIGNhbGxlZAorICAgICAgICAgICAqIHRvIHByb2Nlc3MgY29tbWFuZHMgcmVjaWV2ZWQgZnJvbSBQRQorICAgICAgICAgICAqLworICAgICAgICAgIGNhc2UgZVdOSV9TTUVfVERMU19TRU5EX01HTVRfUlNQOiAgICAKKyAgICAgICAgICBjYXNlIGVXTklfU01FX1RETFNfQUREX1NUQV9SU1A6ICAgIAorICAgICAgICAgIGNhc2UgZVdOSV9TTUVfVERMU19ERUxfU1RBX1JTUDogICAgCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKKyAgICAgICAgICBjYXNlIGVXTklfU01FX1RETFNfRElTQ09WRVJZX1NUQVJUX1JTUDoKKyAgICAgICAgICBjYXNlIGVXTklfU01FX1RETFNfRElTQ09WRVJZX1NUQVJUX0lORDoKKyAgICAgICAgICBjYXNlIGVXTklfU01FX1RETFNfTElOS19TVEFSVF9SU1A6CisgICAgICAgICAgY2FzZSBlV05JX1NNRV9URExTX0xJTktfU1RBUlRfSU5EOgorICAgICAgICAgIGNhc2UgZVdOSV9TTUVfVERMU19URUFSRE9XTl9SU1A6CisgICAgICAgICAgY2FzZSBlV05JX1NNRV9URExTX1RFQVJET1dOX0lORDoKKyAgICAgICAgICBjYXNlIGVXTklfU01FX0FERF9URExTX1BFRVJfSU5EOgorICAgICAgICAgIGNhc2UgZVdOSV9TTUVfREVMRVRFX1RETFNfUEVFUl9JTkQ6CisjZW5kaWYKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwTXNnLT5ib2R5cHRyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSB0ZGxzTXNnUHJvY2Vzc29yKHBNYWMsIHBNc2ctPnR5cGUsIHBNc2ctPmJvZHlwdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgdm9zX21lbV9mcmVlKCBwTXNnLT5ib2R5cHRyICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzbXNMb2coIHBNYWMsIExPR0UsICJFbXB0eSByc3AgbWVzc2FnZSBmb3IgVERMUywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RoaW5nIHRvIHByb2Nlc3NcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgICAgZGVmYXVsdDoKIAogICAgICAgICAgICAgIGlmICggKCBwTXNnLT50eXBlID49IGVXTklfU01FX01TR19UWVBFU19CRUdJTiApCkBAIC01MDU5LDkgKzUxMjIsOSBAQAogCiAgICAgXHBhcmFtIAogCi0gICAgXHJldHVybiBlSGFsU3RhdHVzIJYgU1VDQ0VTUyAKLSAgICAgICAgICAgICAgICAgICAgICAgliBGQUlMVVJFIG9yIFJFU09VUkNFUyAKLSAgICAgICAgICAgICAgICAgICAgICAgliBUaGUgQVBJIGZpbmlzaGVkIGFuZCBmYWlsZWQuCisgICAgXHJldHVybiBlSGFsU3RhdHVzICBTVUNDRVNTIAorICAgICAgICAgICAgICAgICAgICAgICAgRkFJTFVSRSBvciBSRVNPVVJDRVMgCisgICAgICAgICAgICAgICAgICAgICAgICBUaGUgQVBJIGZpbmlzaGVkIGFuZCBmYWlsZWQuCiAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBlSGFsU3RhdHVzIHNtZV9DaGFuZ2VNQ0NCZWFjb25JbnRlcnZhbCh0SGFsSGFuZGxlIGhIYWwsIHRBTklfVTggc2Vzc2lvbklkKQpAQCAtNjc1NiwzICs2ODE5LDIwMSBAQAogI2VuZGlmCiAKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgXGZuIHNtZV9Jc0ZlYXR1cmVTdXBwb3J0ZWRCeUZXCisgICAgXGJyaWVmICBDaGVjayBpZiBhbiBmZWF0dXJlIGlzIGVuYWJsZWQgYnkgRlcKKyAgICAgICAgICAgIAorICAgIFxwYXJhbSAgZmVhdHRFbnVtVmFsdWUgLSBFbnVtZXJhdGlvbiB2YWx1ZSBmcm9tIHBsYWNlSG9sZGVySW5DYXBCaXRtYXAKKyAgICBcLSByZXR1cm4gMS8wIChUUlVFL0ZBTFNFKSAKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3RBTklfVTggc21lX0lzRmVhdHVyZVN1cHBvcnRlZEJ5RlcodEFOSV9VOCBmZWF0RW51bVZhbHVlKQoreworICAgcmV0dXJuIElTX0ZFQVRVUkVfU1VQUE9SVEVEX0JZX0ZXKGZlYXRFbnVtVmFsdWUpOworfQorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBcZm4gc21lX1NlbmRUZGxzTWdtdEZyYW1lCisgICAgXGJyaWVmICBBUEkgdG8gc2VuZCBURExTIG1hbmFnZW1lbnQgZnJhbWVzLgorICAgICAgICAgICAgCisgICAgXHBhcmFtICBwZWVyTWFjIC0gcGVlcidzIE1hYyBBZHJlc3MuCisgICAgXHBhcmFtIGZyYW1lX3R5cGUgLSBUeXBlIG9mIFRETFMgbWdtdCBmcmFtZSB0byBiZSBzZW50LgorICAgIFxwYXJhbSBkaWFsb2cgLSBkaWFsb2cgdG9rZW4gdXNlZCBpbiB0aGUgZnJhbWUuCisgICAgXHBhcmFtIHN0YXR1cyAtIHN0YXR1cyB0byBiZSBpbmN1ZGVkIGluIHRoZSBmcmFtZS4KKyAgICBccGFyYW0gYnVmIC0gYWRkaXRpb25hbCBJRXMgdG8gYmUgaW5jbHVkZWQKKyAgICBccGFyYW0gbGVuIC0gbGVuZ2h0IG9mIGFkZGl0aW9uYWwgSWVzCisgICAgXC0gcmV0dXJuIFZPU19TVEFUVVNfU1VDQ0VTCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitWT1NfU1RBVFVTIHNtZV9TZW5kVGRsc01nbXRGcmFtZSh0SGFsSGFuZGxlIGhIYWwsIHRBTklfVTggc2Vzc2lvbklkLCB0U2lyTWFjQWRkciBwZWVyTWFjLAorICAgICAgdEFOSV9VOCBmcmFtZV90eXBlLCB0QU5JX1U4IGRpYWxvZywgdEFOSV9VMTYgc3RhdHVzQ29kZSwgdEFOSV9VOCAqYnVmLCB0QU5JX1U4IGxlbikKK3sKKyAgICBlSGFsU3RhdHVzICAgICAgICAgIHN0YXR1cyAgICA9IGVIQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgdENzclRkbHNTZW5kTWdtdCBzZW5kVGRsc1JlcSA9IHt7MH19IDsKKyAgICB0cEFuaVNpckdsb2JhbCAgICAgIHBNYWMgICAgICA9IFBNQUNfU1RSVUNUKGhIYWwpOworCisgICAgc3RhdHVzID0gc21lX0FjcXVpcmVHbG9iYWxMb2NrKCAmcE1hYy0+c21lICk7CisgICAgaWYgKCBIQUxfU1RBVFVTX1NVQ0NFU1MoIHN0YXR1cyApICkKKyAgICB7CisgICAgICAgIHZvc19tZW1fY29weShzZW5kVGRsc1JlcS5wZWVyTWFjLCBwZWVyTWFjLCBzaXplb2YodFNpck1hY0FkZHIpKSA7CisgICAgICAgIHNlbmRUZGxzUmVxLmZyYW1lVHlwZSA9IGZyYW1lX3R5cGU7CisgICAgICAgIHNlbmRUZGxzUmVxLmJ1ZiA9IGJ1ZjsKKyAgICAgICAgc2VuZFRkbHNSZXEubGVuID0gbGVuOworICAgICAgICBzZW5kVGRsc1JlcS5kaWFsb2cgPSBkaWFsb2c7CisgICAgICAgIHNlbmRUZGxzUmVxLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlOworCisgICAgICAgIHN0YXR1cyA9IGNzclRkbHNTZW5kTWdtdFJlcShoSGFsLCBzZXNzaW9uSWQsICZzZW5kVGRsc1JlcSkgOworCisgICAgICAgIHNtZV9SZWxlYXNlR2xvYmFsTG9jayggJnBNYWMtPnNtZSApOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXMgOworCit9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBcZm4gc21lX0FkZFRkbHNQZWVyU3RhCisgICAgXGJyaWVmICBBUEkgdG8gQWRkIFRETFMgcGVlciBzdGEgZW50cnkuCisgICAgICAgICAgICAKKyAgICBccGFyYW0gIHBlZXJNYWMgLSBwZWVyJ3MgTWFjIEFkcmVzcy4KKyAgICBcLSByZXR1cm4gVk9TX1NUQVRVU19TVUNDRVMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK1ZPU19TVEFUVVMgc21lX0FkZFRkbHNQZWVyU3RhKHRIYWxIYW5kbGUgaEhhbCwgdEFOSV9VOCBzZXNzaW9uSWQsIHRTaXJNYWNBZGRyIHBlZXJNYWMpCit7CisgICAgZUhhbFN0YXR1cyAgICAgICAgICBzdGF0dXMgICAgPSBlSEFMX1NUQVRVU19TVUNDRVNTOworICAgIHRwQW5pU2lyR2xvYmFsICAgICAgcE1hYyAgICAgID0gUE1BQ19TVFJVQ1QoaEhhbCk7CisKKyAgICBzdGF0dXMgPSBzbWVfQWNxdWlyZUdsb2JhbExvY2soICZwTWFjLT5zbWUgKTsKKyAgICBpZiAoIEhBTF9TVEFUVVNfU1VDQ0VTUyggc3RhdHVzICkgKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gY3NyVGRsc0FkZFBlZXJTdGEoaEhhbCwgc2Vzc2lvbklkLCBwZWVyTWFjKTsKKworICAgICAgICBzbWVfUmVsZWFzZUdsb2JhbExvY2soICZwTWFjLT5zbWUgKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzIDsKKworfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgXGZuIHNtZV9EZWxldGVUZGxzUGVlclN0YQorICAgIFxicmllZiAgQVBJIHRvIERlbGV0ZSBURExTIHBlZXIgc3RhIGVudHJ5LgorICAgICAgICAgICAgCisgICAgXHBhcmFtICBwZWVyTWFjIC0gcGVlcidzIE1hYyBBZHJlc3MuCisgICAgXC0gcmV0dXJuIFZPU19TVEFUVVNfU1VDQ0VTCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitWT1NfU1RBVFVTIHNtZV9EZWxldGVUZGxzUGVlclN0YSh0SGFsSGFuZGxlIGhIYWwsIHRBTklfVTggc2Vzc2lvbklkLCB0U2lyTWFjQWRkciBwZWVyTWFjKQoreworICAgIGVIYWxTdGF0dXMgICAgICAgICAgc3RhdHVzICAgID0gZUhBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICB0cEFuaVNpckdsb2JhbCAgICAgIHBNYWMgICAgICA9IFBNQUNfU1RSVUNUKGhIYWwpOworCisgICAgc3RhdHVzID0gc21lX0FjcXVpcmVHbG9iYWxMb2NrKCAmcE1hYy0+c21lICk7CisgICAgaWYgKCBIQUxfU1RBVFVTX1NVQ0NFU1MoIHN0YXR1cyApICkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IGNzclRkbHNEZWxQZWVyU3RhKGhIYWwsIHNlc3Npb25JZCwgcGVlck1hYykgOworCisgICAgICAgIHNtZV9SZWxlYXNlR2xvYmFsTG9jayggJnBNYWMtPnNtZSApOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXMgOworCit9CisjZW5kaWYKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19JTlRFUk5BTAorLyoKKyAqIFNNRSBBUEkgdG8gc3RhcnQgVERMUyBkaXNjb3ZlcnkgUHJvY2VkdXJlCisgKi8KK1ZPU19TVEFUVVMgc21lX1N0YXJ0VGRsc0Rpc2NvdmVyeVJlcSh0SGFsSGFuZGxlIGhIYWwsIHRBTklfVTggc2Vzc2lvbklkLCB0U2lyTWFjQWRkciBwZWVyTWFjKQoreworICAgIFZPU19TVEFUVVMgc3RhdHVzID0gVk9TX1NUQVRVU19TVUNDRVNTOworICAgIHRDc3JUZGxzRGlzUmVxdWVzdCBkaXNSZXEgPSB7ezB9fSA7CisgICAgdm9zX21lbV9jb3B5KGRpc1JlcS5wZWVyTWFjLCBwZWVyTWFjLCBzaXplb2YodFNpck1hY0FkZHIpKSA7CisgICAgc3RhdHVzID0gY3NyVGRsc0Rpc2NvdmVyeVJlcShoSGFsLCBzZXNzaW9uSWQsICZkaXNSZXEpIDsKKworICAgIHJldHVybiBzdGF0dXMgOworCit9CisKKy8qCisgKiBQcm9jZXNzIFRETFMgZGlzY292ZXJ5IHJlc3VsdHMKKyAqLwordl9VOF90IHNtZV9HZXRUZGxzRGlzY292ZXJ5UmVzdWx0KHRIYWxIYW5kbGUgaEhhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRTbWVUZGxzRGlzUmVzdWx0ICpkaXNSZXN1bHQsIHZfVThfdCBsaXN0VHlwZSkKK3sKKyAgICB0Q3NyVGRsc1BlZXJMaW5raW5mbyAqcGVlckxpbmtJbmZvID0gTlVMTCA7CisgICAgdFNpclRkbHNQZWVySW5mbyAqcGVlckluZm8gPSBOVUxMIDsKKyAgICB0cEFuaVNpckdsb2JhbCBwTWFjID0gUE1BQ19TVFJVQ1QoIGhIYWwgKTsKKyAgICB0Q3NyVGRsc0N0eFN0cnVjdCAqZGlzSW5mbyA9ICZwTWFjLT50ZGxzQ3R4IDsKKyAgICB0RGJsTGlua0xpc3QgKnBlZXJMaXN0ID0gICZkaXNJbmZvLT50ZGxzUG90ZW50aWFsUGVlckxpc3QgOworICAgIHRMaXN0RWxlbSAqcEVudHJ5ID0gTlVMTCA7CisgICAgdl9VOF90IHBlZXJDbnQgPSAwIDsKKworICAgIFZPU19UUkFDRShWT1NfTU9EVUxFX0lEX1NNRSwgVk9TX1RSQUNFX0xFVkVMX0lORk8sCisgICAgICAgICAgICAoIlRETFMgcGVlciBjb3VudCA9ICVkXG4iKSxkaXNJbmZvLT50ZGxzUGVlckNvdW50ICkgOworICAgIHBFbnRyeSA9IGNzckxMUGVla0hlYWQoIHBlZXJMaXN0LCBMTF9BQ0NFU1NfTE9DSyApOworICAgIHdoaWxlKHBFbnRyeSkKKyAgICB7CisgICAgICAgIHBlZXJMaW5rSW5mbyA9IEdFVF9CQVNFX0FERFIoIHBFbnRyeSwgdENzclRkbHNQZWVyTGlua2luZm8sCisgICAgICAgICAgICAgICAgdGRsc1BlZXJTdGFMaW5rKSA7CisgICAgICAgIHBlZXJJbmZvID0gJnBlZXJMaW5rSW5mby0+dGRsc0Rpc1BlZXJJbmZvIDsKKworICAgICAgICBzd2l0Y2gobGlzdFR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVERMU19TRVRVUF9MSVNUOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoVERMU19MSU5LX1NFVFVQX1NUQVRFID09IHBlZXJJbmZvLT50ZGxzUGVlclN0YXRlKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWxDb3B5TWVtb3J5KHBNYWMtPmhIZGQsIGRpc1Jlc3VsdFtwZWVyQ250XS50ZGxzUGVlck1hYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckluZm8tPnBlZXJNYWMsIHNpemVvZih0U2lyTWFjQWRkcikpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc1Jlc3VsdFtwZWVyQ250XS50ZGxzUGVlclJzc2kgPSBwZWVySW5mby0+dGRsc1BlZXJSc3NpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJDbnQrKyA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVERMU19ESVNfTElTVDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhbENvcHlNZW1vcnkocE1hYy0+aEhkZCwgZGlzUmVzdWx0W3BlZXJDbnRdLnRkbHNQZWVyTWFjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJJbmZvLT5wZWVyTWFjLCBzaXplb2YodFNpck1hY0FkZHIpKSA7CisgICAgICAgICAgICAgICAgICAgIGRpc1Jlc3VsdFtwZWVyQ250XS50ZGxzUGVlclJzc2kgPSBwZWVySW5mby0+dGRsc1BlZXJSc3NpIDsKKyAgICAgICAgICAgICAgICAgICAgcGVlckNudCsrIDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBWT1NfVFJBQ0UoVk9TX01PRFVMRV9JRF9TTUUsIFZPU19UUkFDRV9MRVZFTF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInVua25vd24gbGlzdCB0eXBlIFxuIikpIDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHBFbnRyeSA9IGNzckxMTmV4dCggcGVlckxpc3QsIHBFbnRyeSwgTExfQUNDRVNTX0xPQ0spIDsKKyAgICB9CisKKyAgICByZXR1cm4gcGVlckNudCA7CisKK30KKworLyoKKyAqIFNNRSBBUEkgdG8gc3RhcnQgVERMUyBsaW5rIHNldHVwIFByb2NlZHVyZS4KKyAqLworVk9TX1NUQVRVUyBzbWVfU3RhcnRUZGxzTGlua1NldHVwUmVxKHRIYWxIYW5kbGUgaEhhbCwgdEFOSV9VOCBzZXNzaW9uSWQsIHRTaXJNYWNBZGRyIHBlZXJNYWMpCit7CisgICAgVk9TX1NUQVRVUyBzdGF0dXMgPSBWT1NfU1RBVFVTX1NVQ0NFU1M7CisgICAgdENzclRkbHNTZXR1cFJlcXVlc3Qgc2V0dXBSZXEgPSB7ezB9fSA7CisgICAgdm9zX21lbV9jb3B5KHNldHVwUmVxLnBlZXJNYWMsIHBlZXJNYWMsIHNpemVvZih0U2lyTWFjQWRkcikpIDsKKyAgICBzdGF0dXMgPSBjc3JUZGxzU2V0dXBSZXEoaEhhbCwgc2Vzc2lvbklkLCAmc2V0dXBSZXEpIDsKKyAgICByZXR1cm4gc3RhdHVzIDsKKworfQorCisvKgorICogU01FIEFQSSB0byBzdGFydCBURExTIGxpbmsgVGVhcmRvd24gUHJvY2VkdXJlLgorICovCitWT1NfU1RBVFVTIHNtZV9TdGFydFRkbHNMaW5rVGVhcmRvd25SZXEodEhhbEhhbmRsZSBoSGFsLCB0QU5JX1U4IHNlc3Npb25JZCwgdFNpck1hY0FkZHIgcGVlck1hYykKK3sKKyAgICBWT1NfU1RBVFVTIHN0YXR1cyA9IFZPU19TVEFUVVNfU1VDQ0VTUzsKKyAgICB0Q3NyVGRsc1RlYXJkb3duUmVxdWVzdCB0ZWFyZG93blJlcSA9IHt7MH19IDsKKyAgICB2b3NfbWVtX2NvcHkodGVhcmRvd25SZXEucGVlck1hYywgcGVlck1hYywgc2l6ZW9mKHRTaXJNYWNBZGRyKSkgOworICAgIHN0YXR1cyA9IGNzclRkbHNUZWFyZG93blJlcShoSGFsLCBzZXNzaW9uSWQsICZ0ZWFyZG93blJlcSkgOworICAgIHJldHVybiBzdGF0dXMgOworCit9CisKKyNlbmRpZiAvKiBGRUFUVVJFX1dMQU5fVERMUyAqLworCmRpZmYgLS1naXQgYS9DT1JFL1NZUy9sZWdhY3kvc3JjL3N5c3RlbS9zcmMvc3lzRW50cnlGdW5jLmMgYi9DT1JFL1NZUy9sZWdhY3kvc3JjL3N5c3RlbS9zcmMvc3lzRW50cnlGdW5jLmMKaW5kZXggNjIyN2NhOS4uZjkwZDBiZCAxMDA2NDQKLS0tIGEvQ09SRS9TWVMvbGVnYWN5L3NyYy9zeXN0ZW0vc3JjL3N5c0VudHJ5RnVuYy5jCisrKyBiL0NPUkUvU1lTL2xlZ2FjeS9zcmMvc3lzdGVtL3NyYy9zeXNFbnRyeUZ1bmMuYwpAQCAtMTk4LDkgKzE5OCw1NiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcE1hYy0+c3lzLmdTeXNCYnRQb3N0ZWRUb0xpbSsrOwogICAgIH0KLSNpZmRlZiBGRUFUVVJFX1dMQU5fQ0NYCiAgICAgZWxzZSBpZiAodHlwZSA9PSBTSVJfTUFDX0RBVEFfRlJBTUUpCiAgICAgeworI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTX0lOVEVSTkFMCisgICAgICAgLyoKKyAgICAgICAgKiBpZiB3ZSByZWFjaGVkIGhlcmUsIHByb2JhYmx5IHRoaXMgZnJhbWUgY2FuIGJlIFRETFMgZnJhbWUuCisgICAgICAgICovCisgICAgICAgdl9VMTZfdCBldGhUeXBlID0gMCA7CisgICAgICAgdl9VOF90ICptcGR1SGRyID0gIE5VTEwgOworICAgICAgIHZfVThfdCAqZXRoVHlwZU9mZnNldCA9IE5VTEwgOyAKKyAgICAgICAKKyAgICAgICAvKgorICAgICAgICAqIFBlZWsgaW50byBwYXlsb2FkIGFuZCBleHRyYWN0IGV0aHR5cGUuCisgICAgICAgICogSW4gVERMUyB3ZSBjYW4gcmVjaWV2ZSBURExTIGZyYW1lcyB3aXRoIE1BQyBIRUFERVIgKDgwMi4xMSkgYW5kIGFsc28KKyAgICAgICAgKiB3aXRob3V0IE1BQyBIZWFkZXIgKFBhcnRpY3VsYXJseSBURExTIGFjdGlvbiBmcmFtZXMgb24gZGlyZWN0IGxpbmsuCisgICAgICAgICovCisgICAgICAgbXBkdUhkciA9ICh2X1U4X3QgKilXREFfR0VUX1JYX01BQ19IRUFERVIocEJkKSA7CisgICAgICAgCisjZGVmaW5lIFNJUl9NQUNfRVRIX0hEUl9MRU4gICAgICAgICAgICAgICAgICAgICAgICgxNCkKKyAgICAgICBpZigwICE9IFdEQV9HRVRfUlhfRlRfRE9ORShwQmQpKQorICAgICAgIHsKKyAgICAgICAgICAgZXRoVHlwZU9mZnNldCA9IG1wZHVIZHIgKyBTSVJfTUFDX0VUSF9IRFJfTEVOIC0gc2l6ZW9mKGV0aFR5cGUpIDsKKyAgICAgICB9CisgICAgICAgZWxzZQorICAgICAgIHsKKyAgICAgICAgICAgZXRoVHlwZU9mZnNldCA9IG1wZHVIZHIgKyBXREFfR0VUX1JYX01QRFVfSEVBREVSX0xFTihwQmQpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFJGQzEwNDJfSERSX0xFTkdUSCA7IAorICAgICAgIH0KKyAgICAgICAKKyAgICAgICBldGhUeXBlID0gR0VUX0JFMTYoZXRoVHlwZU9mZnNldCkgOworICAgICAgIGlmKEVUSF9UWVBFXzg5XzBkID09IGV0aFR5cGUpCisgICAgICAgeworICAgICAgIAorICAgICAgICAgICBWT1NfVFJBQ0UoVk9TX01PRFVMRV9JRF9UTCwgVk9TX1RSQUNFX0xFVkVMX0VSUk9SLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiVERMUyBEYXRhIEZyYW1lIFxuIikpIDsKKyAgICAgICAgICAgLyogUG9zdCB0aGUgbWVzc2FnZSB0byBQRSBRdWV1ZSAqLworICAgICAgICAgICBQRUxPR0Uoc3lzTG9nKHBNYWMsIExPR0UsIEZMKCJwb3N0aW5nIHRvIFRETFMgZnJhbWUgdG8gbGltXG4iKSk7KQorCisgICAgICAgICAgIHJldCA9ICh0U2lyUmV0U3RhdHVzKSBsaW1Qb3N0TXNnQXBpKHBNYWMsIHBNc2cpOworICAgICAgICAgICBpZiAocmV0ICE9IGVTSVJfU1VDQ0VTUykKKyAgICAgICAgICAgeworICAgICAgICAgICAgICAgUEVMT0dFKHN5c0xvZyhwTWFjLCBMT0dFLCBGTCgicG9zdGluZyB0byBMSU0yIGZhaWxlZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgJWRcbiIpLCByZXQpOykKKyAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgfQorICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgcmV0dXJuIGVTSVJfU1VDQ0VTUzsKKyAgICAgICB9CisgICAgICAgLyogZmFsbCB0aHJvdWdoIGlmIGV0aFR5cGUgIT0gVERMUywgd2hpY2ggaXMgZXJyb3IgY2FzZSAqLworI2VuZGlmICAgICAgICAgICAgCisjaWZkZWYgRkVBVFVSRV9XTEFOX0NDWAogICAgICAgICBQRUxPR1coc3lzTG9nKHBNYWMsIExPR1csIEZMKCJJQVBQIEZyYW1lLi4uXG4iKSk7KTsKICAgICAgICAgLy9Qb3N0IHRoZSBtZXNzYWdlIHRvIFBFIFF1ZXVlCiAgICAgICAgIHJldCA9ICh0U2lyUmV0U3RhdHVzKSBsaW1Qb3N0TXNnQXBpKHBNYWMsIHBNc2cpOwpAQCAtMjEwLDggKzI1Nyw4IEBACiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KICAgICAgICAgcE1hYy0+c3lzLmdTeXNCYnRQb3N0ZWRUb0xpbSsrOwotICAgIH0KICNlbmRpZgorICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICBQRUxPRzMoc3lzTG9nKHBNYWMsIExPRzMsICJCQlQgcmVjZWl2ZWQgSW52YWxpZCB0eXBlICVkIHN1YlR5cGUgJWQgIgpkaWZmIC0tZ2l0IGEvQ09SRS9TWVMvbGVnYWN5L3NyYy91dGlscy9zcmMvZG90MTFmLmMgYi9DT1JFL1NZUy9sZWdhY3kvc3JjL3V0aWxzL3NyYy9kb3QxMWYuYwppbmRleCAyNjFkMTAyLi5kYzdiODA2IDEwMDY0NAotLS0gYS9DT1JFL1NZUy9sZWdhY3kvc3JjL3V0aWxzL3NyYy9kb3QxMWYuYworKysgYi9DT1JFL1NZUy9sZWdhY3kvc3JjL3V0aWxzL3NyYy9kb3QxMWYuYwpAQCAtMzMsNyArMzMsNyBAQAogICAqCiAgICoKICAgKiBUaGlzIGZpbGUgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5ICdmcmFtZXNjJwotICAqIFR1ZSBPY3QgMzAgMTI6MDY6MTMgMjAxMiBmcm9tIHRoZSBmb2xsb3dpbmcgZmlsZShzKToKKyAgKiBUdWUgTm92IDEzIDE5OjIwOjAzIDIwMTIgZnJvbSB0aGUgZm9sbG93aW5nIGZpbGUocyk6CiAgICoKICAgKiBkb3QxMWYuZnJtcwogICAqIApAQCAtMzA5NCwyOCArMzA5NCwyOSBAQAogICAgIHBEc3QtPkRNUyA9IHRtcDQyX18gPj4gMjYgJiAweDE7CiAgICAgcERzdC0+VVRDVFNGT2Zmc2V0ID0gdG1wNDJfXyA+PiAyNyAmIDB4MTsKICAgICBwRHN0LT5URExTUGVlclVBUFNEQnVmZmVyU1RBID0gdG1wNDJfXyA+PiAyOCAmIDB4MTsKLSAgICBwRHN0LT5URExTQ2hhbm5lbFN3aXRjaGluZyA9IHRtcDQyX18gPj4gMjkgJiAweDE7Ci0gICAgcERzdC0+aW50ZXJ3b3JraW5nU2VydmljZSA9IHRtcDQyX18gPj4gMzAgJiAweDE7Ci0gICAgcERzdC0+cW9zTWFwID0gdG1wNDJfXyA+PiAzMSAmIDB4MTsKKyAgICBwRHN0LT5URExTUGVlclBTTVN1cHAgPSB0bXA0Ml9fID4+IDI5ICYgMHgxOworICAgIHBEc3QtPlRETFNDaGFubmVsU3dpdGNoaW5nID0gdG1wNDJfXyA+PiAzMCAmIDB4MTsKKyAgICBwRHN0LT5pbnRlcndvcmtpbmdTZXJ2aWNlID0gdG1wNDJfXyA+PiAzMSAmIDB4MTsKICAgICBmcmFtZXNudG9ocyhwQ3R4LCAmdG1wNDNfXywgcEJ1ZiwgMCk7CiAgICAgcEJ1ZiArPSAyOwogICAgIGllbGVuIC09IDI7Ci0gICAgcERzdC0+RUJSID0gdG1wNDNfXyA+PiAwICYgMHgxOwotICAgIHBEc3QtPnNzcG5JbnRlcmZhY2UgPSB0bXA0M19fID4+IDEgJiAweDE7Ci0gICAgcERzdC0+cmVzZXJ2ZWQ0ID0gdG1wNDNfXyA+PiAyICYgMHgxOwotICAgIHBEc3QtPm1zZ0NGQ2FwID0gdG1wNDNfXyA+PiAzICYgMHgxOwotICAgIHBEc3QtPlRETFNTdXBwb3J0ID0gdG1wNDNfXyA+PiA0ICYgMHgxOwotICAgIHBEc3QtPlRETFNQcm9oaWJpdGVkID0gdG1wNDNfXyA+PiA1ICYgMHgxOwotICAgIHBEc3QtPlRETFNDaGFuU3dpdFByb2hpYml0ZWQgPSB0bXA0M19fID4+IDYgJiAweDE7Ci0gICAgcERzdC0+cmVqZWN0VW5hZG1pdHRlZFRyYWZmaWMgPSB0bXA0M19fID4+IDcgJiAweDE7Ci0gICAgcERzdC0+c2VydmljZUludGVydmFsR3JhbnVsYXJpdHkgPSB0bXA0M19fID4+IDggJiAweDc7Ci0gICAgcERzdC0+aWRlbnRpZmllckxvYyA9IHRtcDQzX18gPj4gMTEgJiAweDE7Ci0gICAgcERzdC0+dWFwc2RDb2V4aXN0ZW5jZSA9IHRtcDQzX18gPj4gMTIgJiAweDE7Ci0gICAgcERzdC0+d25tTm90aWZpY2F0aW9uID0gdG1wNDNfXyA+PiAxMyAmIDB4MTsKLSAgICBwRHN0LT5yZXNlcnZlZDUgPSB0bXA0M19fID4+IDE0ICYgMHgxOwotICAgIHBEc3QtPlVURjhTU0lEID0gdG1wNDNfXyA+PiAxNSAmIDB4MTsKKyAgICBwRHN0LT5xb3NNYXAgPSB0bXA0M19fID4+IDAgJiAweDE7CisgICAgcERzdC0+RUJSID0gdG1wNDNfXyA+PiAxICYgMHgxOworICAgIHBEc3QtPnNzcG5JbnRlcmZhY2UgPSB0bXA0M19fID4+IDIgJiAweDE7CisgICAgcERzdC0+cmVzZXJ2ZWQ0ID0gdG1wNDNfXyA+PiAzICYgMHgxOworICAgIHBEc3QtPm1zZ0NGQ2FwID0gdG1wNDNfXyA+PiA0ICYgMHgxOworICAgIHBEc3QtPlRETFNTdXBwb3J0ID0gdG1wNDNfXyA+PiA1ICYgMHgxOworICAgIHBEc3QtPlRETFNQcm9oaWJpdGVkID0gdG1wNDNfXyA+PiA2ICYgMHgxOworICAgIHBEc3QtPlRETFNDaGFuU3dpdFByb2hpYml0ZWQgPSB0bXA0M19fID4+IDcgJiAweDE7CisgICAgcERzdC0+cmVqZWN0VW5hZG1pdHRlZFRyYWZmaWMgPSB0bXA0M19fID4+IDggJiAweDE7CisgICAgcERzdC0+c2VydmljZUludGVydmFsR3JhbnVsYXJpdHkgPSB0bXA0M19fID4+IDkgJiAweDc7CisgICAgcERzdC0+aWRlbnRpZmllckxvYyA9IHRtcDQzX18gPj4gMTIgJiAweDE7CisgICAgcERzdC0+dWFwc2RDb2V4aXN0ZW5jZSA9IHRtcDQzX18gPj4gMTMgJiAweDE7CisgICAgcERzdC0+d25tTm90aWZpY2F0aW9uID0gdG1wNDNfXyA+PiAxNCAmIDB4MTsKKyAgICBwRHN0LT5yZXNlcnZlZDUgPSB0bXA0M19fID4+IDE1ICYgMHgxOwogICAgIGZyYW1lc250b2hzKHBDdHgsICZ0bXA0NF9fLCBwQnVmLCAwKTsKLSAgICBwRHN0LT5yZXNlcnZlZDYgPSB0bXA0NF9fID4+IDAgJiAweDFmZmY7CisgICAgcERzdC0+VVRGOFNTSUQgPSB0bXA0NF9fID4+IDAgJiAweDE7CisgICAgcERzdC0+cmVzZXJ2ZWQ2ID0gdG1wNDRfXyA+PiAxICYgMHhmZmY7CiAgICAgcERzdC0+VERMU1dpZGVyQlcgPSB0bXA0NF9fID4+IDEzICYgMHgxOwogICAgIHBEc3QtPm9wZXJNb2RlTm90aWZpY2F0aW9uID0gdG1wNDRfXyA+PiAxNCAmIDB4MTsKICAgICBwRHN0LT5yZXNlcnZlZDcgPSB0bXA0NF9fID4+IDE1ICYgMHgxOwpAQCAtMzQ1MCw2ICszNDUxLDI2IEBACiAjZGVmaW5lIFNpZ0llSUJTU1BhcmFtcyAoIDB4MDA0NCApCiAKIAordEFOSV9VMzIgZG90MTFmVW5wYWNrSWVMaW5rSWRlbnRpZmllcih0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVMaW5rSWRlbnRpZmllciAqcERzdCkKK3sKKyAgICB0QU5JX1UzMiBzdGF0dXMgPSBET1QxMUZfUEFSU0VfU1VDQ0VTUzsKKyAgICAodm9pZCkgcEJ1ZjsgKHZvaWQpaWVsZW47IC8qIFNodXR1cCB0aGUgY29tcGlsZXIgKi8KKyAgICBpZiAocERzdC0+cHJlc2VudCkgc3RhdHVzID0gRE9UMTFGX0RVUExJQ0FURV9JRTsKKyAgICBwRHN0LT5wcmVzZW50ID0gMTsKKyAgICBET1QxMUZfTUVNQ1BZKHBDdHgsIHBEc3QtPmJzc2lkLCBwQnVmLCA2KTsKKyAgICBwQnVmICs9IDY7CisgICAgaWVsZW4gLT0gKHRBTklfVTgpNjsKKyAgICBET1QxMUZfTUVNQ1BZKHBDdHgsIHBEc3QtPkluaXRTdGFBZGRyLCBwQnVmLCA2KTsKKyAgICBwQnVmICs9IDY7CisgICAgaWVsZW4gLT0gKHRBTklfVTgpNjsKKyAgICBET1QxMUZfTUVNQ1BZKHBDdHgsIHBEc3QtPlJlc3BTdGFBZGRyLCBwQnVmLCA2KTsKKyAgICAodm9pZClwQ3R4OworICAgIHJldHVybiBzdGF0dXM7Cit9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZUxpbmtJZGVudGlmaWVyLiAqLworCisjZGVmaW5lIFNpZ0llTGlua0lkZW50aWZpZXIgKCAweDAwNDUgKQorCisKIHN0YXRpYyBjb25zdCB0RkZEZWZuIEZGU19yZXBvcnRCZWFjb25bIF0gPSB7CiB7IE5VTEwsIDAsIDAsIDAsfSwKIH07CkBAIC0zNjA1LDcgKzM2MjYsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZU1lYXN1cmVtZW50UmVwb3J0LiAqLwogCi0jZGVmaW5lIFNpZ0llTWVhc3VyZW1lbnRSZXBvcnQgKCAweDAwNDUgKQorI2RlZmluZSBTaWdJZU1lYXN1cmVtZW50UmVwb3J0ICggMHgwMDQ2ICkKIAogCiBzdGF0aWMgY29uc3QgdEZGRGVmbiBGRlNfbWVhc3VyZW1lbnRfcmVxdWVzdEJlYWNvblsgXSA9IHsKQEAgLTM3MTAsNyArMzczMSw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llTWVhc3VyZW1lbnRSZXF1ZXN0LiAqLwogCi0jZGVmaW5lIFNpZ0llTWVhc3VyZW1lbnRSZXF1ZXN0ICggMHgwMDQ2ICkKKyNkZWZpbmUgU2lnSWVNZWFzdXJlbWVudFJlcXVlc3QgKCAweDAwNDcgKQogCiAKIHRBTklfVTMyIGRvdDExZlVucGFja0llTW9iaWxpdHlEb21haW4odHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFTW9iaWxpdHlEb21haW4gKnBEc3QpCkBAIC0zNzMxLDcgKzM3NTIsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZU1vYmlsaXR5RG9tYWluLiAqLwogCi0jZGVmaW5lIFNpZ0llTW9iaWxpdHlEb21haW4gKCAweDAwNDcgKQorI2RlZmluZSBTaWdJZU1vYmlsaXR5RG9tYWluICggMHgwMDQ4ICkKIAogCiAgICAgc3RhdGljIGNvbnN0IHRGRkRlZm4gRkZTX05laWdoYm9yUmVwb3J0WyBdID0gewpAQCAtMzc5OCw3ICszODE5LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVOZWlnaGJvclJlcG9ydC4gKi8KIAotI2RlZmluZSBTaWdJZU5laWdoYm9yUmVwb3J0ICggMHgwMDQ4ICkKKyNkZWZpbmUgU2lnSWVOZWlnaGJvclJlcG9ydCAoIDB4MDA0OSApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVPcGVyYXRpbmdNb2RlKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHRBTklfVTggKnBCdWYsIHRBTklfVTggaWVsZW4sIHREb3QxMWZJRU9wZXJhdGluZ01vZGUgKnBEc3QpCkBAIC0zODE3LDcgKzM4MzgsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZU9wZXJhdGluZ01vZGUuICovCiAKLSNkZWZpbmUgU2lnSWVPcGVyYXRpbmdNb2RlICggMHgwMDQ5ICkKKyNkZWZpbmUgU2lnSWVPcGVyYXRpbmdNb2RlICggMHgwMDRhICkKIAogCiAgICAgc3RhdGljIGNvbnN0IHRUTFZEZWZuIFRMVlNfUDJQQXNzb2NSZXFbIF0gPSB7CkBAIC0zODM2LDcgKzM4NTcsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVAyUEFzc29jUmVxLiAqLwogCi0jZGVmaW5lIFNpZ0llUDJQQXNzb2NSZXEgKCAweDAwNGEgKQorI2RlZmluZSBTaWdJZVAyUEFzc29jUmVxICggMHgwMDRiICkKIAogCiAgICAgc3RhdGljIGNvbnN0IHRUTFZEZWZuIFRMVlNfUDJQQXNzb2NSZXNbIF0gPSB7CkBAIC0zODU0LDcgKzM4NzUsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVAyUEFzc29jUmVzLiAqLwogCi0jZGVmaW5lIFNpZ0llUDJQQXNzb2NSZXMgKCAweDAwNGIgKQorI2RlZmluZSBTaWdJZVAyUEFzc29jUmVzICggMHgwMDRjICkKIAogCiAgICAgc3RhdGljIGNvbnN0IHRUTFZEZWZuIFRMVlNfUDJQQmVhY29uWyBdID0gewpAQCAtMzg3Myw3ICszODk0LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVQMlBCZWFjb24uICovCiAKLSNkZWZpbmUgU2lnSWVQMlBCZWFjb24gKCAweDAwNGMgKQorI2RlZmluZSBTaWdJZVAyUEJlYWNvbiAoIDB4MDA0ZCApCiAKIAogICAgIHN0YXRpYyBjb25zdCB0VExWRGVmbiBUTFZTX1AyUEJlYWNvblByb2JlUmVzWyBdID0gewpAQCAtMzg5NSw3ICszOTE2LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVQMlBCZWFjb25Qcm9iZVJlcy4gKi8KIAotI2RlZmluZSBTaWdJZVAyUEJlYWNvblByb2JlUmVzICggMHgwMDRkICkKKyNkZWZpbmUgU2lnSWVQMlBCZWFjb25Qcm9iZVJlcyAoIDB4MDA0ZSApCiAKIAogICAgIHN0YXRpYyBjb25zdCB0VExWRGVmbiBUTFZTX1AyUERlQXV0aFsgXSA9IHsKQEAgLTM5MTIsNyArMzkzMyw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llUDJQRGVBdXRoLiAqLwogCi0jZGVmaW5lIFNpZ0llUDJQRGVBdXRoICggMHgwMDRlICkKKyNkZWZpbmUgU2lnSWVQMlBEZUF1dGggKCAweDAwNGYgKQogCiAKICAgICBzdGF0aWMgY29uc3QgdFRMVkRlZm4gVExWU19QMlBEZXZpY2VEaXNjb3ZlcmFiaWxpdHlSZXFbIF0gPSB7CkBAIC0zOTMwLDcgKzM5NTEsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVAyUERldmljZURpc2NvdmVyYWJpbGl0eVJlcS4gKi8KIAotI2RlZmluZSBTaWdJZVAyUERldmljZURpc2NvdmVyYWJpbGl0eVJlcSAoIDB4MDA0ZiApCisjZGVmaW5lIFNpZ0llUDJQRGV2aWNlRGlzY292ZXJhYmlsaXR5UmVxICggMHgwMDUwICkKIAogCiAgICAgc3RhdGljIGNvbnN0IHRUTFZEZWZuIFRMVlNfUDJQRGV2aWNlRGlzY292ZXJhYmlsaXR5UmVzWyBdID0gewpAQCAtMzk0Nyw3ICszOTY4LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVQMlBEZXZpY2VEaXNjb3ZlcmFiaWxpdHlSZXMuICovCiAKLSNkZWZpbmUgU2lnSWVQMlBEZXZpY2VEaXNjb3ZlcmFiaWxpdHlSZXMgKCAweDAwNTAgKQorI2RlZmluZSBTaWdJZVAyUERldmljZURpc2NvdmVyYWJpbGl0eVJlcyAoIDB4MDA1MSApCiAKIAogICAgIHN0YXRpYyBjb25zdCB0VExWRGVmbiBUTFZTX1AyUERpc0Fzc29jWyBdID0gewpAQCAtMzk2NCw3ICszOTg1LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVQMlBEaXNBc3NvYy4gKi8KIAotI2RlZmluZSBTaWdJZVAyUERpc0Fzc29jICggMHgwMDUxICkKKyNkZWZpbmUgU2lnSWVQMlBEaXNBc3NvYyAoIDB4MDA1MiApCiAKIAogICAgIHN0YXRpYyBjb25zdCB0VExWRGVmbiBUTFZTX1AyUEdPTmVnQ25mWyBdID0gewpAQCAtMzk4NSw3ICs0MDA2LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVQMlBHT05lZ0NuZi4gKi8KIAotI2RlZmluZSBTaWdJZVAyUEdPTmVnQ25mICggMHgwMDUyICkKKyNkZWZpbmUgU2lnSWVQMlBHT05lZ0NuZiAoIDB4MDA1MyApCiAKIAogICAgIHN0YXRpYyBjb25zdCB0VExWRGVmbiBUTFZTX1AyUEdPTmVnUmVxWyBdID0gewpAQCAtNDAxMCw3ICs0MDMxLDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVQMlBHT05lZ1JlcS4gKi8KIAotI2RlZmluZSBTaWdJZVAyUEdPTmVnUmVxICggMHgwMDUzICkKKyNkZWZpbmUgU2lnSWVQMlBHT05lZ1JlcSAoIDB4MDA1NCApCiAKIAogICAgIHN0YXRpYyBjb25zdCB0VExWRGVmbiBUTFZTX1AyUEdPTmVnUmVzWyBdID0gewpAQCAtNDAzNSw3ICs0MDU2LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVQMlBHT05lZ1Jlcy4gKi8KIAotI2RlZmluZSBTaWdJZVAyUEdPTmVnUmVzICggMHgwMDU0ICkKKyNkZWZpbmUgU2lnSWVQMlBHT05lZ1JlcyAoIDB4MDA1NSApCiAKIAogICAgIHN0YXRpYyBjb25zdCB0VExWRGVmbiBUTFZTX1AyUEdPTmVnV1BTWyBdID0gewpAQCAtNDA1Myw3ICs0MDc0LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVQMlBHT05lZ1dQUy4gKi8KIAotI2RlZmluZSBTaWdJZVAyUEdPTmVnV1BTICggMHgwMDU1ICkKKyNkZWZpbmUgU2lnSWVQMlBHT05lZ1dQUyAoIDB4MDA1NiApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVQMlBJRU9wYXF1ZSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVQMlBJRU9wYXF1ZSAqcERzdCkKQEAgLTQwNzMsNyArNDA5NCw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llUDJQSUVPcGFxdWUuICovCiAKLSNkZWZpbmUgU2lnSWVQMlBJRU9wYXF1ZSAoIDB4MDA1NiApCisjZGVmaW5lIFNpZ0llUDJQSUVPcGFxdWUgKCAweDAwNTcgKQogCiAKICAgICBzdGF0aWMgY29uc3QgdFRMVkRlZm4gVExWU19QMlBJbnZpdGF0aW9uUmVxWyBdID0gewpAQCAtNDA5Niw3ICs0MTE3LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVQMlBJbnZpdGF0aW9uUmVxLiAqLwogCi0jZGVmaW5lIFNpZ0llUDJQSW52aXRhdGlvblJlcSAoIDB4MDA1NyApCisjZGVmaW5lIFNpZ0llUDJQSW52aXRhdGlvblJlcSAoIDB4MDA1OCApCiAKIAogICAgIHN0YXRpYyBjb25zdCB0VExWRGVmbiBUTFZTX1AyUEludml0YXRpb25SZXNbIF0gPSB7CkBAIC00MTE3LDcgKzQxMzgsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVAyUEludml0YXRpb25SZXMuICovCiAKLSNkZWZpbmUgU2lnSWVQMlBJbnZpdGF0aW9uUmVzICggMHgwMDU4ICkKKyNkZWZpbmUgU2lnSWVQMlBJbnZpdGF0aW9uUmVzICggMHgwMDU5ICkKIAogCiAgICAgc3RhdGljIGNvbnN0IHRUTFZEZWZuIFRMVlNfUDJQTm90aWNlT2ZBYnNlbmNlWyBdID0gewpAQCAtNDEzNCw3ICs0MTU1LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVQMlBOb3RpY2VPZkFic2VuY2UuICovCiAKLSNkZWZpbmUgU2lnSWVQMlBOb3RpY2VPZkFic2VuY2UgKCAweDAwNTkgKQorI2RlZmluZSBTaWdJZVAyUE5vdGljZU9mQWJzZW5jZSAoIDB4MDA1YSApCiAKIAogICAgIHN0YXRpYyBjb25zdCB0VExWRGVmbiBUTFZTX1AyUFByZXNlbmNlUmVzcG9uc2VbIF0gPSB7CkBAIC00MTUyLDcgKzQxNzMsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVAyUFByZXNlbmNlUmVzcG9uc2UuICovCiAKLSNkZWZpbmUgU2lnSWVQMlBQcmVzZW5jZVJlc3BvbnNlICggMHgwMDVhICkKKyNkZWZpbmUgU2lnSWVQMlBQcmVzZW5jZVJlc3BvbnNlICggMHgwMDViICkKIAogCiAgICAgc3RhdGljIGNvbnN0IHRUTFZEZWZuIFRMVlNfUDJQUHJvYmVSZXFbIF0gPSB7CkBAIC00MTczLDcgKzQxOTQsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVAyUFByb2JlUmVxLiAqLwogCi0jZGVmaW5lIFNpZ0llUDJQUHJvYmVSZXEgKCAweDAwNWIgKQorI2RlZmluZSBTaWdJZVAyUFByb2JlUmVxICggMHgwMDVjICkKIAogCiAgICAgc3RhdGljIGNvbnN0IHRUTFZEZWZuIFRMVlNfUDJQUHJvYmVSZXNbIF0gPSB7CkBAIC00MTk0LDcgKzQyMTUsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVAyUFByb2JlUmVzLiAqLwogCi0jZGVmaW5lIFNpZ0llUDJQUHJvYmVSZXMgKCAweDAwNWMgKQorI2RlZmluZSBTaWdJZVAyUFByb2JlUmVzICggMHgwMDVkICkKIAogCiAgICAgc3RhdGljIGNvbnN0IHRUTFZEZWZuIFRMVlNfUDJQUHJvdmlzaW9uRGlzY292ZXJ5UmVxWyBdID0gewpAQCAtNDIxMyw3ICs0MjM0LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVQMlBQcm92aXNpb25EaXNjb3ZlcnlSZXEuICovCiAKLSNkZWZpbmUgU2lnSWVQMlBQcm92aXNpb25EaXNjb3ZlcnlSZXEgKCAweDAwNWQgKQorI2RlZmluZSBTaWdJZVAyUFByb3Zpc2lvbkRpc2NvdmVyeVJlcSAoIDB4MDA1ZSApCiAKIAogICAgIHN0YXRpYyBjb25zdCB0VExWRGVmbiBUTFZTX1AyUFdTQ1Byb3Zpc2lvbkRpc2NvdmVyeVJlc1sgXSA9IHsKQEAgLTQyMzAsNyArNDI1MSw0NCBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVAyUFdTQ1Byb3Zpc2lvbkRpc2NvdmVyeVJlcy4gKi8KIAotI2RlZmluZSBTaWdJZVAyUFdTQ1Byb3Zpc2lvbkRpc2NvdmVyeVJlcyAoIDB4MDA1ZSApCisjZGVmaW5lIFNpZ0llUDJQV1NDUHJvdmlzaW9uRGlzY292ZXJ5UmVzICggMHgwMDVmICkKKworCit0QU5JX1UzMiBkb3QxMWZVbnBhY2tJZVBUSUNvbnRyb2wodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFUFRJQ29udHJvbCAqcERzdCkKK3sKKyAgICB0QU5JX1UzMiBzdGF0dXMgPSBET1QxMUZfUEFSU0VfU1VDQ0VTUzsKKyAgICAodm9pZCkgcEJ1ZjsgKHZvaWQpaWVsZW47IC8qIFNodXR1cCB0aGUgY29tcGlsZXIgKi8KKyAgICBpZiAocERzdC0+cHJlc2VudCkgc3RhdHVzID0gRE9UMTFGX0RVUExJQ0FURV9JRTsKKyAgICBwRHN0LT5wcmVzZW50ID0gMTsKKyAgICBwRHN0LT50aWQgPSAqcEJ1ZjsKKyAgICBwQnVmICs9IDE7CisgICAgaWVsZW4gLT0gKHRBTklfVTgpMTsKKyAgICBmcmFtZXNudG9ocyhwQ3R4LCAmcERzdC0+c2VxdWVuY2VfY29udHJvbCwgcEJ1ZiwgMCk7CisgICAgKHZvaWQpcEN0eDsKKyAgICByZXR1cm4gc3RhdHVzOworfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVQVElDb250cm9sLiAqLworCisjZGVmaW5lIFNpZ0llUFRJQ29udHJvbCAoIDB4MDA2MCApCisKKwordEFOSV9VMzIgZG90MTFmVW5wYWNrSWVQVUJ1ZmZlclN0YXR1cyh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVQVUJ1ZmZlclN0YXR1cyAqcERzdCkKK3sKKyAgICB0QU5JX1UzMiBzdGF0dXMgPSBET1QxMUZfUEFSU0VfU1VDQ0VTUzsKKyAgICB0QU5JX1U4IHRtcDYyX187CisgICAgKHZvaWQpIHBCdWY7ICh2b2lkKWllbGVuOyAvKiBTaHV0dXAgdGhlIGNvbXBpbGVyICovCisgICAgaWYgKHBEc3QtPnByZXNlbnQpIHN0YXR1cyA9IERPVDExRl9EVVBMSUNBVEVfSUU7CisgICAgcERzdC0+cHJlc2VudCA9IDE7CisgICAgdG1wNjJfXyA9ICpwQnVmOworICAgIHBEc3QtPmFjX2JrX3RyYWZmaWNfYXZhbCA9IHRtcDYyX18gPj4gMCAmIDB4MTsKKyAgICBwRHN0LT5hY19iZV90cmFmZmljX2F2YWwgPSB0bXA2Ml9fID4+IDEgJiAweDE7CisgICAgcERzdC0+YWNfdmlfdHJhZmZpY19hdmFsID0gdG1wNjJfXyA+PiAyICYgMHgxOworICAgIHBEc3QtPmFjX3ZvX3RyYWZmaWNfYXZhbCA9IHRtcDYyX18gPj4gMyAmIDB4MTsKKyAgICBwRHN0LT5yZXNlcnZlZCA9IHRtcDYyX18gPj4gNCAmIDB4ZjsKKyAgICAodm9pZClwQ3R4OworICAgIHJldHVybiBzdGF0dXM7Cit9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVBVQnVmZmVyU3RhdHVzLiAqLworCisjZGVmaW5lIFNpZ0llUFVCdWZmZXJTdGF0dXMgKCAweDAwNjEgKQogCiAKIHRBTklfVTMyIGRvdDExZlVucGFja0llUG93ZXJDYXBzKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHRBTklfVTggKnBCdWYsIHRBTklfVTggaWVsZW4sIHREb3QxMWZJRVBvd2VyQ2FwcyAqcERzdCkKQEAgLTQyNDcsNyArNDMwNSw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llUG93ZXJDYXBzLiAqLwogCi0jZGVmaW5lIFNpZ0llUG93ZXJDYXBzICggMHgwMDVmICkKKyNkZWZpbmUgU2lnSWVQb3dlckNhcHMgKCAweDAwNjIgKQogCiAKIHRBTklfVTMyIGRvdDExZlVucGFja0llUG93ZXJDb25zdHJhaW50cyh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVQb3dlckNvbnN0cmFpbnRzICpwRHN0KQpAQCAtNDI2MSw3ICs0MzE5LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVQb3dlckNvbnN0cmFpbnRzLiAqLwogCi0jZGVmaW5lIFNpZ0llUG93ZXJDb25zdHJhaW50cyAoIDB4MDA2MCApCisjZGVmaW5lIFNpZ0llUG93ZXJDb25zdHJhaW50cyAoIDB4MDA2MyApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVRQlNTTG9hZCh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVRQlNTTG9hZCAqcERzdCkKQEAgLTQyODEsNDkgKzQzMzksNDkgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVRQlNTTG9hZC4gKi8KIAotI2RlZmluZSBTaWdJZVFCU1NMb2FkICggMHgwMDYxICkKKyNkZWZpbmUgU2lnSWVRQlNTTG9hZCAoIDB4MDA2NCApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVRT1NDYXBzQXAodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFUU9TQ2Fwc0FwICpwRHN0KQogewogICAgIHRBTklfVTMyIHN0YXR1cyA9IERPVDExRl9QQVJTRV9TVUNDRVNTOwotICAgIHRBTklfVTggdG1wNjJfXzsKLSAgICAodm9pZCkgcEJ1ZjsgKHZvaWQpaWVsZW47IC8qIFNodXR1cCB0aGUgY29tcGlsZXIgKi8KLSAgICBpZiAocERzdC0+cHJlc2VudCkgc3RhdHVzID0gRE9UMTFGX0RVUExJQ0FURV9JRTsKLSAgICBwRHN0LT5wcmVzZW50ID0gMTsKLSAgICB0bXA2Ml9fID0gKnBCdWY7Ci0gICAgcERzdC0+cmVzZXJ2ZWQgPSB0bXA2Ml9fID4+IDAgJiAweDE7Ci0gICAgcERzdC0+dHhvcHJlcSA9IHRtcDYyX18gPj4gMSAmIDB4MTsKLSAgICBwRHN0LT5xcmVxID0gdG1wNjJfXyA+PiAyICYgMHgxOwotICAgIHBEc3QtPnFhY2sgPSB0bXA2Ml9fID4+IDMgJiAweDE7Ci0gICAgcERzdC0+Y291bnQgPSB0bXA2Ml9fID4+IDQgJiAweGY7Ci0gICAgKHZvaWQpcEN0eDsKLSAgICByZXR1cm4gc3RhdHVzOwotfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVRT1NDYXBzQXAuICovCi0KLSNkZWZpbmUgU2lnSWVRT1NDYXBzQXAgKCAweDAwNjIgKQotCi0KLXRBTklfVTMyIGRvdDExZlVucGFja0llUU9TQ2Fwc1N0YXRpb24odHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFUU9TQ2Fwc1N0YXRpb24gKnBEc3QpCi17Ci0gICAgdEFOSV9VMzIgc3RhdHVzID0gRE9UMTFGX1BBUlNFX1NVQ0NFU1M7CiAgICAgdEFOSV9VOCB0bXA2M19fOwogICAgICh2b2lkKSBwQnVmOyAodm9pZClpZWxlbjsgLyogU2h1dHVwIHRoZSBjb21waWxlciAqLwogICAgIGlmIChwRHN0LT5wcmVzZW50KSBzdGF0dXMgPSBET1QxMUZfRFVQTElDQVRFX0lFOwogICAgIHBEc3QtPnByZXNlbnQgPSAxOwogICAgIHRtcDYzX18gPSAqcEJ1ZjsKLSAgICBwRHN0LT5tb3JlX2RhdGFfYWNrID0gdG1wNjNfXyA+PiAwICYgMHgxOwotICAgIHBEc3QtPm1heF9zcF9sZW5ndGggPSB0bXA2M19fID4+IDEgJiAweDM7CisgICAgcERzdC0+cmVzZXJ2ZWQgPSB0bXA2M19fID4+IDAgJiAweDE7CisgICAgcERzdC0+dHhvcHJlcSA9IHRtcDYzX18gPj4gMSAmIDB4MTsKKyAgICBwRHN0LT5xcmVxID0gdG1wNjNfXyA+PiAyICYgMHgxOwogICAgIHBEc3QtPnFhY2sgPSB0bXA2M19fID4+IDMgJiAweDE7Ci0gICAgcERzdC0+YWNiZV91YXBzZCA9IHRtcDYzX18gPj4gNCAmIDB4MTsKLSAgICBwRHN0LT5hY2JrX3VhcHNkID0gdG1wNjNfXyA+PiA1ICYgMHgxOwotICAgIHBEc3QtPmFjdmlfdWFwc2QgPSB0bXA2M19fID4+IDYgJiAweDE7Ci0gICAgcERzdC0+YWN2b191YXBzZCA9IHRtcDYzX18gPj4gNyAmIDB4MTsKKyAgICBwRHN0LT5jb3VudCA9IHRtcDYzX18gPj4gNCAmIDB4ZjsKKyAgICAodm9pZClwQ3R4OworICAgIHJldHVybiBzdGF0dXM7Cit9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVFPU0NhcHNBcC4gKi8KKworI2RlZmluZSBTaWdJZVFPU0NhcHNBcCAoIDB4MDA2NSApCisKKwordEFOSV9VMzIgZG90MTFmVW5wYWNrSWVRT1NDYXBzU3RhdGlvbih0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVRT1NDYXBzU3RhdGlvbiAqcERzdCkKK3sKKyAgICB0QU5JX1UzMiBzdGF0dXMgPSBET1QxMUZfUEFSU0VfU1VDQ0VTUzsKKyAgICB0QU5JX1U4IHRtcDY0X187CisgICAgKHZvaWQpIHBCdWY7ICh2b2lkKWllbGVuOyAvKiBTaHV0dXAgdGhlIGNvbXBpbGVyICovCisgICAgaWYgKHBEc3QtPnByZXNlbnQpIHN0YXR1cyA9IERPVDExRl9EVVBMSUNBVEVfSUU7CisgICAgcERzdC0+cHJlc2VudCA9IDE7CisgICAgdG1wNjRfXyA9ICpwQnVmOworICAgIHBEc3QtPm1vcmVfZGF0YV9hY2sgPSB0bXA2NF9fID4+IDAgJiAweDE7CisgICAgcERzdC0+bWF4X3NwX2xlbmd0aCA9IHRtcDY0X18gPj4gMSAmIDB4MzsKKyAgICBwRHN0LT5xYWNrID0gdG1wNjRfXyA+PiAzICYgMHgxOworICAgIHBEc3QtPmFjYmVfdWFwc2QgPSB0bXA2NF9fID4+IDQgJiAweDE7CisgICAgcERzdC0+YWNia191YXBzZCA9IHRtcDY0X18gPj4gNSAmIDB4MTsKKyAgICBwRHN0LT5hY3ZpX3VhcHNkID0gdG1wNjRfXyA+PiA2ICYgMHgxOworICAgIHBEc3QtPmFjdm9fdWFwc2QgPSB0bXA2NF9fID4+IDcgJiAweDE7CiAgICAgKHZvaWQpcEN0eDsKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVRT1NDYXBzU3RhdGlvbi4gKi8KIAotI2RlZmluZSBTaWdJZVFPU0NhcHNTdGF0aW9uICggMHgwMDYzICkKKyNkZWZpbmUgU2lnSWVRT1NDYXBzU3RhdGlvbiAoIDB4MDA2NiApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVRdWlldCh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVRdWlldCAqcERzdCkKQEAgLTQzNDYsNyArNDQwNCw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llUXVpZXQuICovCiAKLSNkZWZpbmUgU2lnSWVRdWlldCAoIDB4MDA2NCApCisjZGVmaW5lIFNpZ0llUXVpZXQgKCAweDAwNjcgKQogCiAKIHRBTklfVTMyIGRvdDExZlVucGFja0llUkNQSUlFKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHRBTklfVTggKnBCdWYsIHRBTklfVTggaWVsZW4sIHREb3QxMWZJRVJDUElJRSAqcERzdCkKQEAgLTQzNjAsNyArNDQxOCw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llUkNQSUlFLiAqLwogCi0jZGVmaW5lIFNpZ0llUkNQSUlFICggMHgwMDY1ICkKKyNkZWZpbmUgU2lnSWVSQ1BJSUUgKCAweDAwNjggKQogCiAKICAgICBzdGF0aWMgY29uc3QgdEZGRGVmbiBGRlNfUklDRGF0YURlc2NbIF0gPSB7CkBAIC00NDAwLDEzICs0NDU4LDEzIEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llUklDRGF0YURlc2MuICovCiAKLSNkZWZpbmUgU2lnSWVSSUNEYXRhRGVzYyAoIDB4MDA2NiApCisjZGVmaW5lIFNpZ0llUklDRGF0YURlc2MgKCAweDAwNjkgKQogCiAKIHRBTklfVTMyIGRvdDExZlVucGFja0llUlNOKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHRBTklfVTggKnBCdWYsIHRBTklfVTggaWVsZW4sIHREb3QxMWZJRVJTTiAqcERzdCkKIHsKICAgICB0QU5JX1UzMiBzdGF0dXMgPSBET1QxMUZfUEFSU0VfU1VDQ0VTUzsKLSAgICB0QU5JX1UxNiB0bXA2NF9fOworICAgIHRBTklfVTE2IHRtcDY1X187CiAgICAgKHZvaWQpIHBCdWY7ICh2b2lkKWllbGVuOyAvKiBTaHV0dXAgdGhlIGNvbXBpbGVyICovCiAgICAgaWYgKHBEc3QtPnByZXNlbnQpIHN0YXR1cyA9IERPVDExRl9EVVBMSUNBVEVfSUU7CiAgICAgcERzdC0+cHJlc2VudCA9IDE7CkBAIC00NDYyLDE0ICs0NTIwLDE0IEBACiAgICAgRE9UMTFGX01FTUNQWShwQ3R4LCBwRHN0LT5ha21fc3VpdGVzLCBwQnVmLCAoIHBEc3QtPmFrbV9zdWl0ZV9jb3VudCAqIDQgKSApOwogICAgIHBCdWYgKz0gKCBwRHN0LT5ha21fc3VpdGVfY291bnQgKiA0ICk7CiAgICAgaWVsZW4gLT0gKCBwRHN0LT5ha21fc3VpdGVfY291bnQgKiA0ICk7Ci0gICAgZnJhbWVzbnRvaHMocEN0eCwgJnRtcDY0X18sIHBCdWYsIDApOworICAgIGZyYW1lc250b2hzKHBDdHgsICZ0bXA2NV9fLCBwQnVmLCAwKTsKICAgICBwQnVmICs9IDI7CiAgICAgaWVsZW4gLT0gMjsKLSAgICBwRHN0LT5wcmVhdXRoID0gdG1wNjRfXyA+PiAwICYgMHgxOwotICAgIHBEc3QtPm5vX3B3aXNlID0gdG1wNjRfXyA+PiAxICYgMHgxOwotICAgIHBEc3QtPlBUS1NBX3JlcGxheV9jb3VudGVyID0gdG1wNjRfXyA+PiAyICYgMHgzOwotICAgIHBEc3QtPkdUS1NBX3JlcGxheV9jb3VudGVyID0gdG1wNjRfXyA+PiA0ICYgMHgzOwotICAgIHBEc3QtPnJlc2VydmVkID0gdG1wNjRfXyA+PiA2ICYgMHgzZmY7CisgICAgcERzdC0+cHJlYXV0aCA9IHRtcDY1X18gPj4gMCAmIDB4MTsKKyAgICBwRHN0LT5ub19wd2lzZSA9IHRtcDY1X18gPj4gMSAmIDB4MTsKKyAgICBwRHN0LT5QVEtTQV9yZXBsYXlfY291bnRlciA9IHRtcDY1X18gPj4gMiAmIDB4MzsKKyAgICBwRHN0LT5HVEtTQV9yZXBsYXlfY291bnRlciA9IHRtcDY1X18gPj4gNCAmIDB4MzsKKyAgICBwRHN0LT5yZXNlcnZlZCA9IHRtcDY1X18gPj4gNiAmIDB4M2ZmOwogICAgIGlmICggISBpZWxlbiApCiAgICAgewogICAgICAgICBwRHN0LT5wbWtpZF9jb3VudCA9IDBVOwpAQCAtNDQ5MSw3ICs0NTQ5LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVSU04uICovCiAKLSNkZWZpbmUgU2lnSWVSU04gKCAweDAwNjcgKQorI2RlZmluZSBTaWdJZVJTTiAoIDB4MDA2YSApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVSU05JSUUodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFUlNOSUlFICpwRHN0KQpAQCAtNDUwNSw3ICs0NTYzLDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVSU05JSUUuICovCiAKLSNkZWZpbmUgU2lnSWVSU05JSUUgKCAweDAwNjggKQorI2RlZmluZSBTaWdJZVJTTklJRSAoIDB4MDA2YiApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVSU05PcGFxdWUodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFUlNOT3BhcXVlICpwRHN0KQpAQCAtNDUyNSw3ICs0NTgzLDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVSU05PcGFxdWUuICovCiAKLSNkZWZpbmUgU2lnSWVSU05PcGFxdWUgKCAweDAwNjkgKQorI2RlZmluZSBTaWdJZVJTTk9wYXF1ZSAoIDB4MDA2YyApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVTdXBwQ2hhbm5lbHModHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFU3VwcENoYW5uZWxzICpwRHN0KQpAQCAtNDU0NSw3ICs0NjAzLDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVTdXBwQ2hhbm5lbHMuICovCiAKLSNkZWZpbmUgU2lnSWVTdXBwQ2hhbm5lbHMgKCAweDAwNmEgKQorI2RlZmluZSBTaWdJZVN1cHBDaGFubmVscyAoIDB4MDA2ZCApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVTdXBwUmF0ZXModHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFU3VwcFJhdGVzICpwRHN0KQpAQCAtNDU3Myw3ICs0NjMxLDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVTdXBwUmF0ZXMuICovCiAKLSNkZWZpbmUgU2lnSWVTdXBwUmF0ZXMgKCAweDAwNmIgKQorI2RlZmluZSBTaWdJZVN1cHBSYXRlcyAoIDB4MDA2ZSApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVUSU0odHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFVElNICpwRHN0KQpAQCAtNDYwMiw3ICs0NjYwLDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVUSU0uICovCiAKLSNkZWZpbmUgU2lnSWVUSU0gKCAweDAwNmMgKQorI2RlZmluZSBTaWdJZVRJTSAoIDB4MDA2ZiApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVUUENSZXBvcnQodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFVFBDUmVwb3J0ICpwRHN0KQpAQCAtNDYxOSw3ICs0Njc3LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVUUENSZXBvcnQuICovCiAKLSNkZWZpbmUgU2lnSWVUUENSZXBvcnQgKCAweDAwNmQgKQorI2RlZmluZSBTaWdJZVRQQ1JlcG9ydCAoIDB4MDA3MCApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVUUENSZXF1ZXN0KHRwQW5pU2lyR2xvYmFsIHBDdHgsIHRBTklfVTggKnBCdWYsIHRBTklfVTggaWVsZW4sIHREb3QxMWZJRVRQQ1JlcXVlc3QgKnBEc3QpCkBAIC00NjMyLDYwICs0NjkwLDYwIEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llVFBDUmVxdWVzdC4gKi8KIAotI2RlZmluZSBTaWdJZVRQQ1JlcXVlc3QgKCAweDAwNmUgKQorI2RlZmluZSBTaWdJZVRQQ1JlcXVlc3QgKCAweDAwNzEgKQogCiAKIHRBTklfVTMyIGRvdDExZlVucGFja0llVkhUQ2Fwcyh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVWSFRDYXBzICpwRHN0KQogewogICAgIHRBTklfVTMyIHN0YXR1cyA9IERPVDExRl9QQVJTRV9TVUNDRVNTOwotICAgIHRBTklfVTMyIHRtcDY1X187Ci0gICAgdEFOSV9VMTYgdG1wNjZfXzsKKyAgICB0QU5JX1UzMiB0bXA2Nl9fOwogICAgIHRBTklfVTE2IHRtcDY3X187CisgICAgdEFOSV9VMTYgdG1wNjhfXzsKICAgICAodm9pZCkgcEJ1ZjsgKHZvaWQpaWVsZW47IC8qIFNodXR1cCB0aGUgY29tcGlsZXIgKi8KICAgICBpZiAocERzdC0+cHJlc2VudCkgc3RhdHVzID0gRE9UMTFGX0RVUExJQ0FURV9JRTsKICAgICBwRHN0LT5wcmVzZW50ID0gMTsKLSAgICBmcmFtZXNudG9obChwQ3R4LCAmdG1wNjVfXywgcEJ1ZiwgMCk7CisgICAgZnJhbWVzbnRvaGwocEN0eCwgJnRtcDY2X18sIHBCdWYsIDApOwogICAgIHBCdWYgKz0gNDsKICAgICBpZWxlbiAtPSA0OwotICAgIHBEc3QtPm1heE1QRFVMZW4gPSB0bXA2NV9fID4+IDAgJiAweDM7Ci0gICAgcERzdC0+c3VwcG9ydGVkQ2hhbm5lbFdpZHRoU2V0ID0gdG1wNjVfXyA+PiAyICYgMHgzOwotICAgIHBEc3QtPmxkcGNDb2RpbmdDYXAgPSB0bXA2NV9fID4+IDQgJiAweDE7Ci0gICAgcERzdC0+c2hvcnRHSTgwTUh6ID0gdG1wNjVfXyA+PiA1ICYgMHgxOwotICAgIHBEc3QtPnNob3J0R0kxNjBhbmQ4MHBsdXM4ME1IeiA9IHRtcDY1X18gPj4gNiAmIDB4MTsKLSAgICBwRHN0LT50eFNUQkMgPSB0bXA2NV9fID4+IDcgJiAweDE7Ci0gICAgcERzdC0+cnhTVEJDID0gdG1wNjVfXyA+PiA4ICYgMHg3OwotICAgIHBEc3QtPnN1QmVhbUZvcm1lckNhcCA9IHRtcDY1X18gPj4gMTEgJiAweDE7Ci0gICAgcERzdC0+c3VCZWFtZm9ybWVlQ2FwID0gdG1wNjVfXyA+PiAxMiAmIDB4MTsKLSAgICBwRHN0LT5jc25vZkJlYW1mb3JtZXJBbnRTdXAgPSB0bXA2NV9fID4+IDEzICYgMHg3OwotICAgIHBEc3QtPm51bVNvdW5kaW5nRGltID0gdG1wNjVfXyA+PiAxNiAmIDB4NzsKLSAgICBwRHN0LT5tdUJlYW1mb3JtZXJDYXAgPSB0bXA2NV9fID4+IDE5ICYgMHgxOwotICAgIHBEc3QtPm11QmVhbWZvcm1lZUNhcCA9IHRtcDY1X18gPj4gMjAgJiAweDE7Ci0gICAgcERzdC0+dmh0VFhPUFBTID0gdG1wNjVfXyA+PiAyMSAmIDB4MTsKLSAgICBwRHN0LT5odGNWSFRDYXAgPSB0bXA2NV9fID4+IDIyICYgMHgxOwotICAgIHBEc3QtPm1heEFNUERVTGVuRXhwID0gdG1wNjVfXyA+PiAyMyAmIDB4NzsKLSAgICBwRHN0LT52aHRMaW5rQWRhcHRDYXAgPSB0bXA2NV9fID4+IDI2ICYgMHgzOwotICAgIHBEc3QtPnJ4QW50UGF0dGVybiA9IHRtcDY1X18gPj4gMjggJiAweDE7Ci0gICAgcERzdC0+dHhBbnRQYXR0ZXJuID0gdG1wNjVfXyA+PiAyOSAmIDB4MTsKLSAgICBwRHN0LT5yZXNlcnZlZDEgPSB0bXA2NV9fID4+IDMwICYgMHgzOworICAgIHBEc3QtPm1heE1QRFVMZW4gPSB0bXA2Nl9fID4+IDAgJiAweDM7CisgICAgcERzdC0+c3VwcG9ydGVkQ2hhbm5lbFdpZHRoU2V0ID0gdG1wNjZfXyA+PiAyICYgMHgzOworICAgIHBEc3QtPmxkcGNDb2RpbmdDYXAgPSB0bXA2Nl9fID4+IDQgJiAweDE7CisgICAgcERzdC0+c2hvcnRHSTgwTUh6ID0gdG1wNjZfXyA+PiA1ICYgMHgxOworICAgIHBEc3QtPnNob3J0R0kxNjBhbmQ4MHBsdXM4ME1IeiA9IHRtcDY2X18gPj4gNiAmIDB4MTsKKyAgICBwRHN0LT50eFNUQkMgPSB0bXA2Nl9fID4+IDcgJiAweDE7CisgICAgcERzdC0+cnhTVEJDID0gdG1wNjZfXyA+PiA4ICYgMHg3OworICAgIHBEc3QtPnN1QmVhbUZvcm1lckNhcCA9IHRtcDY2X18gPj4gMTEgJiAweDE7CisgICAgcERzdC0+c3VCZWFtZm9ybWVlQ2FwID0gdG1wNjZfXyA+PiAxMiAmIDB4MTsKKyAgICBwRHN0LT5jc25vZkJlYW1mb3JtZXJBbnRTdXAgPSB0bXA2Nl9fID4+IDEzICYgMHg3OworICAgIHBEc3QtPm51bVNvdW5kaW5nRGltID0gdG1wNjZfXyA+PiAxNiAmIDB4NzsKKyAgICBwRHN0LT5tdUJlYW1mb3JtZXJDYXAgPSB0bXA2Nl9fID4+IDE5ICYgMHgxOworICAgIHBEc3QtPm11QmVhbWZvcm1lZUNhcCA9IHRtcDY2X18gPj4gMjAgJiAweDE7CisgICAgcERzdC0+dmh0VFhPUFBTID0gdG1wNjZfXyA+PiAyMSAmIDB4MTsKKyAgICBwRHN0LT5odGNWSFRDYXAgPSB0bXA2Nl9fID4+IDIyICYgMHgxOworICAgIHBEc3QtPm1heEFNUERVTGVuRXhwID0gdG1wNjZfXyA+PiAyMyAmIDB4NzsKKyAgICBwRHN0LT52aHRMaW5rQWRhcHRDYXAgPSB0bXA2Nl9fID4+IDI2ICYgMHgzOworICAgIHBEc3QtPnJ4QW50UGF0dGVybiA9IHRtcDY2X18gPj4gMjggJiAweDE7CisgICAgcERzdC0+dHhBbnRQYXR0ZXJuID0gdG1wNjZfXyA+PiAyOSAmIDB4MTsKKyAgICBwRHN0LT5yZXNlcnZlZDEgPSB0bXA2Nl9fID4+IDMwICYgMHgzOwogICAgIGZyYW1lc250b2hzKHBDdHgsICZwRHN0LT5yeE1DU01hcCwgcEJ1ZiwgMCk7CiAgICAgcEJ1ZiArPSAyOwogICAgIGllbGVuIC09ICh0QU5JX1U4KTI7Ci0gICAgZnJhbWVzbnRvaHMocEN0eCwgJnRtcDY2X18sIHBCdWYsIDApOworICAgIGZyYW1lc250b2hzKHBDdHgsICZ0bXA2N19fLCBwQnVmLCAwKTsKICAgICBwQnVmICs9IDI7CiAgICAgaWVsZW4gLT0gMjsKLSAgICBwRHN0LT5yeEhpZ2hTdXBEYXRhUmF0ZSA9IHRtcDY2X18gPj4gMCAmIDB4MWZmZjsKLSAgICBwRHN0LT5yZXNlcnZlZDIgPSB0bXA2Nl9fID4+IDEzICYgMHg3OworICAgIHBEc3QtPnJ4SGlnaFN1cERhdGFSYXRlID0gdG1wNjdfXyA+PiAwICYgMHgxZmZmOworICAgIHBEc3QtPnJlc2VydmVkMiA9IHRtcDY3X18gPj4gMTMgJiAweDc7CiAgICAgZnJhbWVzbnRvaHMocEN0eCwgJnBEc3QtPnR4TUNTTWFwLCBwQnVmLCAwKTsKICAgICBwQnVmICs9IDI7CiAgICAgaWVsZW4gLT0gKHRBTklfVTgpMjsKLSAgICBmcmFtZXNudG9ocyhwQ3R4LCAmdG1wNjdfXywgcEJ1ZiwgMCk7Ci0gICAgcERzdC0+dHhTdXBEYXRhUmF0ZSA9IHRtcDY3X18gPj4gMCAmIDB4MWZmZjsKLSAgICBwRHN0LT5yZXNlcnZlZDMgPSB0bXA2N19fID4+IDEzICYgMHg3OworICAgIGZyYW1lc250b2hzKHBDdHgsICZ0bXA2OF9fLCBwQnVmLCAwKTsKKyAgICBwRHN0LT50eFN1cERhdGFSYXRlID0gdG1wNjhfXyA+PiAwICYgMHgxZmZmOworICAgIHBEc3QtPnJlc2VydmVkMyA9IHRtcDY4X18gPj4gMTMgJiAweDc7CiAgICAgKHZvaWQpcEN0eDsKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVWSFRDYXBzLiAqLwogCi0jZGVmaW5lIFNpZ0llVkhUQ2FwcyAoIDB4MDA2ZiApCisjZGVmaW5lIFNpZ0llVkhUQ2FwcyAoIDB4MDA3MiApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVWSFRFeHRCc3NMb2FkKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHRBTklfVTggKnBCdWYsIHRBTklfVTggaWVsZW4sIHREb3QxMWZJRVZIVEV4dEJzc0xvYWQgKnBEc3QpCkBAIC00NzExLDcgKzQ3NjksNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVZIVEV4dEJzc0xvYWQuICovCiAKLSNkZWZpbmUgU2lnSWVWSFRFeHRCc3NMb2FkICggMHgwMDcwICkKKyNkZWZpbmUgU2lnSWVWSFRFeHRCc3NMb2FkICggMHgwMDczICkKIAogCiB0QU5JX1UzMiBkb3QxMWZVbnBhY2tJZVZIVE9wZXJhdGlvbih0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVWSFRPcGVyYXRpb24gKnBEc3QpCkBAIC00NzM0LDEzICs0NzkyLDEzIEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llVkhUT3BlcmF0aW9uLiAqLwogCi0jZGVmaW5lIFNpZ0llVkhUT3BlcmF0aW9uICggMHgwMDcxICkKKyNkZWZpbmUgU2lnSWVWSFRPcGVyYXRpb24gKCAweDAwNzQgKQogCiAKIHRBTklfVTMyIGRvdDExZlVucGFja0llV0FQSSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVXQVBJICpwRHN0KQogewogICAgIHRBTklfVTMyIHN0YXR1cyA9IERPVDExRl9QQVJTRV9TVUNDRVNTOwotICAgIHRBTklfVTE2IHRtcDY4X187CisgICAgdEFOSV9VMTYgdG1wNjlfXzsKICAgICAodm9pZCkgcEJ1ZjsgKHZvaWQpaWVsZW47IC8qIFNodXR1cCB0aGUgY29tcGlsZXIgKi8KICAgICBpZiAocERzdC0+cHJlc2VudCkgc3RhdHVzID0gRE9UMTFGX0RVUExJQ0FURV9JRTsKICAgICBwRHN0LT5wcmVzZW50ID0gMTsKQEAgLTQ3NzcsMTEgKzQ4MzUsMTEgQEAKICAgICBET1QxMUZfTUVNQ1BZKHBDdHgsIHBEc3QtPm11bHRpY2FzdF9jaXBoZXJfc3VpdGUsIHBCdWYsIDQpOwogICAgIHBCdWYgKz0gNDsKICAgICBpZWxlbiAtPSAodEFOSV9VOCk0OwotICAgIGZyYW1lc250b2hzKHBDdHgsICZ0bXA2OF9fLCBwQnVmLCAwKTsKKyAgICBmcmFtZXNudG9ocyhwQ3R4LCAmdG1wNjlfXywgcEJ1ZiwgMCk7CiAgICAgcEJ1ZiArPSAyOwogICAgIGllbGVuIC09IDI7Ci0gICAgcERzdC0+cHJlYXV0aCA9IHRtcDY4X18gPj4gMCAmIDB4MTsKLSAgICBwRHN0LT5yZXNlcnZlZCA9IHRtcDY4X18gPj4gMSAmIDB4N2ZmZjsKKyAgICBwRHN0LT5wcmVhdXRoID0gdG1wNjlfXyA+PiAwICYgMHgxOworICAgIHBEc3QtPnJlc2VydmVkID0gdG1wNjlfXyA+PiAxICYgMHg3ZmZmOwogICAgIGlmICggISBpZWxlbiApCiAgICAgewogICAgICAgICBwRHN0LT5ia2lkX2NvdW50ID0gMFU7CkBAIC00ODAzLDcgKzQ4NjEsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVdBUEkuICovCiAKLSNkZWZpbmUgU2lnSWVXQVBJICggMHgwMDcyICkKKyNkZWZpbmUgU2lnSWVXQVBJICggMHgwMDc1ICkKIAogCiB0QU5JX1UzMiBkb3QxMWZVbnBhY2tJZVdBUElPcGFxdWUodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFV0FQSU9wYXF1ZSAqcERzdCkKQEAgLTQ4MjMsNyArNDg4MSw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llV0FQSU9wYXF1ZS4gKi8KIAotI2RlZmluZSBTaWdJZVdBUElPcGFxdWUgKCAweDAwNzMgKQorI2RlZmluZSBTaWdJZVdBUElPcGFxdWUgKCAweDAwNzYgKQogCiAKIHRBTklfVTMyIGRvdDExZlVucGFja0llV0ZBVFBDKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHRBTklfVTggKnBCdWYsIHRBTklfVTggaWVsZW4sIHREb3QxMWZJRVdGQVRQQyAqcERzdCkKQEAgLTQ4NDAsNyArNDg5OCw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llV0ZBVFBDLiAqLwogCi0jZGVmaW5lIFNpZ0llV0ZBVFBDICggMHgwMDc0ICkKKyNkZWZpbmUgU2lnSWVXRkFUUEMgKCAweDAwNzcgKQogCiAKIHRBTklfVTMyIGRvdDExZlVucGFja0llV0ZESUVPcGFxdWUodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFV0ZESUVPcGFxdWUgKnBEc3QpCkBAIC00ODYwLDEzICs0OTE4LDEzIEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llV0ZESUVPcGFxdWUuICovCiAKLSNkZWZpbmUgU2lnSWVXRkRJRU9wYXF1ZSAoIDB4MDA3NSApCisjZGVmaW5lIFNpZ0llV0ZESUVPcGFxdWUgKCAweDAwNzggKQogCiAKIHRBTklfVTMyIGRvdDExZlVucGFja0llV01NQ2Fwcyh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVXTU1DYXBzICpwRHN0KQogewogICAgIHRBTklfVTMyIHN0YXR1cyA9IERPVDExRl9QQVJTRV9TVUNDRVNTOwotICAgIHRBTklfVTggdG1wNjlfXzsKKyAgICB0QU5JX1U4IHRtcDcwX187CiAgICAgKHZvaWQpIHBCdWY7ICh2b2lkKWllbGVuOyAvKiBTaHV0dXAgdGhlIGNvbXBpbGVyICovCiAgICAgaWYgKHBEc3QtPnByZXNlbnQpIHN0YXR1cyA9IERPVDExRl9EVVBMSUNBVEVfSUU7CiAgICAgcERzdC0+cHJlc2VudCA9IDE7CkBAIC00ODc4LDQzICs0OTM2LDIyIEBACiAgICAgICAgICAgICBwRHN0LT5wcmVzZW50ID0gMDsKICAgICAgICAgICAgIHJldHVybiAoIHN0YXR1cyB8IERPVDExRl9CQURfRklYRURfVkFMVUUgKTsKICAgICB9Ci0gICAgdG1wNjlfXyA9ICpwQnVmOwotICAgIHBEc3QtPnJlc2VydmVkID0gdG1wNjlfXyA+PiAwICYgMHhmOwotICAgIHBEc3QtPnFhY2sgPSB0bXA2OV9fID4+IDQgJiAweDE7Ci0gICAgcERzdC0+cXVldWVfcmVxdWVzdCA9IHRtcDY5X18gPj4gNSAmIDB4MTsKLSAgICBwRHN0LT50eG9wX3JlcXVlc3QgPSB0bXA2OV9fID4+IDYgJiAweDE7Ci0gICAgcERzdC0+bW9yZV9hY2sgPSB0bXA2OV9fID4+IDcgJiAweDE7CisgICAgdG1wNzBfXyA9ICpwQnVmOworICAgIHBEc3QtPnJlc2VydmVkID0gdG1wNzBfXyA+PiAwICYgMHhmOworICAgIHBEc3QtPnFhY2sgPSB0bXA3MF9fID4+IDQgJiAweDE7CisgICAgcERzdC0+cXVldWVfcmVxdWVzdCA9IHRtcDcwX18gPj4gNSAmIDB4MTsKKyAgICBwRHN0LT50eG9wX3JlcXVlc3QgPSB0bXA3MF9fID4+IDYgJiAweDE7CisgICAgcERzdC0+bW9yZV9hY2sgPSB0bXA3MF9fID4+IDcgJiAweDE7CiAgICAgKHZvaWQpcEN0eDsKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVXTU1DYXBzLiAqLwogCi0jZGVmaW5lIFNpZ0llV01NQ2FwcyAoIDB4MDA3NiApCisjZGVmaW5lIFNpZ0llV01NQ2FwcyAoIDB4MDA3OSApCiAKIAogdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVXTU1JbmZvQXAodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFV01NSW5mb0FwICpwRHN0KQogewogICAgIHRBTklfVTMyIHN0YXR1cyA9IERPVDExRl9QQVJTRV9TVUNDRVNTOwotICAgIHRBTklfVTggdG1wNzBfXzsKLSAgICAodm9pZCkgcEJ1ZjsgKHZvaWQpaWVsZW47IC8qIFNodXR1cCB0aGUgY29tcGlsZXIgKi8KLSAgICBpZiAocERzdC0+cHJlc2VudCkgc3RhdHVzID0gRE9UMTFGX0RVUExJQ0FURV9JRTsKLSAgICBwRHN0LT5wcmVzZW50ID0gMTsKLSAgICBwRHN0LT52ZXJzaW9uID0gKnBCdWY7Ci0gICAgcEJ1ZiArPSAxOwotICAgIGllbGVuIC09ICh0QU5JX1U4KTE7Ci0gICAgdG1wNzBfXyA9ICpwQnVmOwotICAgIHBEc3QtPnBhcmFtX3NldF9jb3VudCA9IHRtcDcwX18gPj4gMCAmIDB4ZjsKLSAgICBwRHN0LT5yZXNlcnZlZCA9IHRtcDcwX18gPj4gNCAmIDB4NzsKLSAgICBwRHN0LT51YXBzZCA9IHRtcDcwX18gPj4gNyAmIDB4MTsKLSAgICAodm9pZClwQ3R4OwotICAgIHJldHVybiBzdGF0dXM7Ci19IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVdNTUluZm9BcC4gKi8KLQotI2RlZmluZSBTaWdJZVdNTUluZm9BcCAoIDB4MDA3NyApCi0KLQotdEFOSV9VMzIgZG90MTFmVW5wYWNrSWVXTU1JbmZvU3RhdGlvbih0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVXTU1JbmZvU3RhdGlvbiAqcERzdCkKLXsKLSAgICB0QU5JX1UzMiBzdGF0dXMgPSBET1QxMUZfUEFSU0VfU1VDQ0VTUzsKICAgICB0QU5JX1U4IHRtcDcxX187CiAgICAgKHZvaWQpIHBCdWY7ICh2b2lkKWllbGVuOyAvKiBTaHV0dXAgdGhlIGNvbXBpbGVyICovCiAgICAgaWYgKHBEc3QtPnByZXNlbnQpIHN0YXR1cyA9IERPVDExRl9EVVBMSUNBVEVfSUU7CkBAIC00OTIzLDI0ICs0OTYwLDQ0IEBACiAgICAgcEJ1ZiArPSAxOwogICAgIGllbGVuIC09ICh0QU5JX1U4KTE7CiAgICAgdG1wNzFfXyA9ICpwQnVmOwotICAgIHBEc3QtPmFjdm9fdWFwc2QgPSB0bXA3MV9fID4+IDAgJiAweDE7Ci0gICAgcERzdC0+YWN2aV91YXBzZCA9IHRtcDcxX18gPj4gMSAmIDB4MTsKLSAgICBwRHN0LT5hY2JrX3VhcHNkID0gdG1wNzFfXyA+PiAyICYgMHgxOwotICAgIHBEc3QtPmFjYmVfdWFwc2QgPSB0bXA3MV9fID4+IDMgJiAweDE7Ci0gICAgcERzdC0+cmVzZXJ2ZWQxID0gdG1wNzFfXyA+PiA0ICYgMHgxOwotICAgIHBEc3QtPm1heF9zcF9sZW5ndGggPSB0bXA3MV9fID4+IDUgJiAweDM7Ci0gICAgcERzdC0+cmVzZXJ2ZWQyID0gdG1wNzFfXyA+PiA3ICYgMHgxOworICAgIHBEc3QtPnBhcmFtX3NldF9jb3VudCA9IHRtcDcxX18gPj4gMCAmIDB4ZjsKKyAgICBwRHN0LT5yZXNlcnZlZCA9IHRtcDcxX18gPj4gNCAmIDB4NzsKKyAgICBwRHN0LT51YXBzZCA9IHRtcDcxX18gPj4gNyAmIDB4MTsKKyAgICAodm9pZClwQ3R4OworICAgIHJldHVybiBzdGF0dXM7Cit9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVdNTUluZm9BcC4gKi8KKworI2RlZmluZSBTaWdJZVdNTUluZm9BcCAoIDB4MDA3YSApCisKKwordEFOSV9VMzIgZG90MTFmVW5wYWNrSWVXTU1JbmZvU3RhdGlvbih0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVXTU1JbmZvU3RhdGlvbiAqcERzdCkKK3sKKyAgICB0QU5JX1UzMiBzdGF0dXMgPSBET1QxMUZfUEFSU0VfU1VDQ0VTUzsKKyAgICB0QU5JX1U4IHRtcDcyX187CisgICAgKHZvaWQpIHBCdWY7ICh2b2lkKWllbGVuOyAvKiBTaHV0dXAgdGhlIGNvbXBpbGVyICovCisgICAgaWYgKHBEc3QtPnByZXNlbnQpIHN0YXR1cyA9IERPVDExRl9EVVBMSUNBVEVfSUU7CisgICAgcERzdC0+cHJlc2VudCA9IDE7CisgICAgcERzdC0+dmVyc2lvbiA9ICpwQnVmOworICAgIHBCdWYgKz0gMTsKKyAgICBpZWxlbiAtPSAodEFOSV9VOCkxOworICAgIHRtcDcyX18gPSAqcEJ1ZjsKKyAgICBwRHN0LT5hY3ZvX3VhcHNkID0gdG1wNzJfXyA+PiAwICYgMHgxOworICAgIHBEc3QtPmFjdmlfdWFwc2QgPSB0bXA3Ml9fID4+IDEgJiAweDE7CisgICAgcERzdC0+YWNia191YXBzZCA9IHRtcDcyX18gPj4gMiAmIDB4MTsKKyAgICBwRHN0LT5hY2JlX3VhcHNkID0gdG1wNzJfXyA+PiAzICYgMHgxOworICAgIHBEc3QtPnJlc2VydmVkMSA9IHRtcDcyX18gPj4gNCAmIDB4MTsKKyAgICBwRHN0LT5tYXhfc3BfbGVuZ3RoID0gdG1wNzJfXyA+PiA1ICYgMHgzOworICAgIHBEc3QtPnJlc2VydmVkMiA9IHRtcDcyX18gPj4gNyAmIDB4MTsKICAgICAodm9pZClwQ3R4OwogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVdNTUluZm9TdGF0aW9uLiAqLwogCi0jZGVmaW5lIFNpZ0llV01NSW5mb1N0YXRpb24gKCAweDAwNzggKQorI2RlZmluZSBTaWdJZVdNTUluZm9TdGF0aW9uICggMHgwMDdiICkKIAogCiB0QU5JX1UzMiBkb3QxMWZVbnBhY2tJZVdNTVBhcmFtcyh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1U4IGllbGVuLCB0RG90MTFmSUVXTU1QYXJhbXMgKnBEc3QpCiB7CiAgICAgdEFOSV9VMzIgc3RhdHVzID0gRE9UMTFGX1BBUlNFX1NVQ0NFU1M7Ci0gICAgdEFOSV9VOCB0bXA3Ml9fOwogICAgIHRBTklfVTggdG1wNzNfXzsKICAgICB0QU5JX1U4IHRtcDc0X187CiAgICAgdEFOSV9VOCB0bXA3NV9fOwpAQCAtNDk0OCw2ICs1MDA1LDcgQEAKICAgICB0QU5JX1U4IHRtcDc3X187CiAgICAgdEFOSV9VOCB0bXA3OF9fOwogICAgIHRBTklfVTggdG1wNzlfXzsKKyAgICB0QU5JX1U4IHRtcDgwX187CiAgICAgKHZvaWQpIHBCdWY7ICh2b2lkKWllbGVuOyAvKiBTaHV0dXAgdGhlIGNvbXBpbGVyICovCiAgICAgaWYgKHBEc3QtPnByZXNlbnQpIHN0YXR1cyA9IERPVDExRl9EVVBMSUNBVEVfSUU7CiAgICAgcERzdC0+cHJlc2VudCA9IDE7CkBAIC00OTY1LDY5ICs1MDIzLDY5IEBACiAgICAgcERzdC0+cmVzZXJ2ZWQyID0gKnBCdWY7CiAgICAgcEJ1ZiArPSAxOwogICAgIGllbGVuIC09ICh0QU5JX1U4KTE7Ci0gICAgdG1wNzJfXyA9ICpwQnVmOwotICAgIHBCdWYgKz0gMTsKLSAgICBpZWxlbiAtPSAxOwotICAgIHBEc3QtPmFjYmVfYWlmc24gPSB0bXA3Ml9fID4+IDAgJiAweGY7Ci0gICAgcERzdC0+YWNiZV9hY20gPSB0bXA3Ml9fID4+IDQgJiAweDE7Ci0gICAgcERzdC0+YWNiZV9hY2kgPSB0bXA3Ml9fID4+IDUgJiAweDM7Ci0gICAgcERzdC0+dW51c2VkMSA9IHRtcDcyX18gPj4gNyAmIDB4MTsKICAgICB0bXA3M19fID0gKnBCdWY7CiAgICAgcEJ1ZiArPSAxOwogICAgIGllbGVuIC09IDE7Ci0gICAgcERzdC0+YWNiZV9hY3dtaW4gPSB0bXA3M19fID4+IDAgJiAweGY7Ci0gICAgcERzdC0+YWNiZV9hY3dtYXggPSB0bXA3M19fID4+IDQgJiAweGY7Ci0gICAgZnJhbWVzbnRvaHMocEN0eCwgJnBEc3QtPmFjYmVfdHhvcGxpbWl0LCBwQnVmLCAwKTsKLSAgICBwQnVmICs9IDI7Ci0gICAgaWVsZW4gLT0gKHRBTklfVTgpMjsKKyAgICBwRHN0LT5hY2JlX2FpZnNuID0gdG1wNzNfXyA+PiAwICYgMHhmOworICAgIHBEc3QtPmFjYmVfYWNtID0gdG1wNzNfXyA+PiA0ICYgMHgxOworICAgIHBEc3QtPmFjYmVfYWNpID0gdG1wNzNfXyA+PiA1ICYgMHgzOworICAgIHBEc3QtPnVudXNlZDEgPSB0bXA3M19fID4+IDcgJiAweDE7CiAgICAgdG1wNzRfXyA9ICpwQnVmOwogICAgIHBCdWYgKz0gMTsKICAgICBpZWxlbiAtPSAxOwotICAgIHBEc3QtPmFjYmtfYWlmc24gPSB0bXA3NF9fID4+IDAgJiAweGY7Ci0gICAgcERzdC0+YWNia19hY20gPSB0bXA3NF9fID4+IDQgJiAweDE7Ci0gICAgcERzdC0+YWNia19hY2kgPSB0bXA3NF9fID4+IDUgJiAweDM7Ci0gICAgcERzdC0+dW51c2VkMiA9IHRtcDc0X18gPj4gNyAmIDB4MTsKKyAgICBwRHN0LT5hY2JlX2Fjd21pbiA9IHRtcDc0X18gPj4gMCAmIDB4ZjsKKyAgICBwRHN0LT5hY2JlX2Fjd21heCA9IHRtcDc0X18gPj4gNCAmIDB4ZjsKKyAgICBmcmFtZXNudG9ocyhwQ3R4LCAmcERzdC0+YWNiZV90eG9wbGltaXQsIHBCdWYsIDApOworICAgIHBCdWYgKz0gMjsKKyAgICBpZWxlbiAtPSAodEFOSV9VOCkyOwogICAgIHRtcDc1X18gPSAqcEJ1ZjsKICAgICBwQnVmICs9IDE7CiAgICAgaWVsZW4gLT0gMTsKLSAgICBwRHN0LT5hY2JrX2Fjd21pbiA9IHRtcDc1X18gPj4gMCAmIDB4ZjsKLSAgICBwRHN0LT5hY2JrX2Fjd21heCA9IHRtcDc1X18gPj4gNCAmIDB4ZjsKLSAgICBmcmFtZXNudG9ocyhwQ3R4LCAmcERzdC0+YWNia190eG9wbGltaXQsIHBCdWYsIDApOwotICAgIHBCdWYgKz0gMjsKLSAgICBpZWxlbiAtPSAodEFOSV9VOCkyOworICAgIHBEc3QtPmFjYmtfYWlmc24gPSB0bXA3NV9fID4+IDAgJiAweGY7CisgICAgcERzdC0+YWNia19hY20gPSB0bXA3NV9fID4+IDQgJiAweDE7CisgICAgcERzdC0+YWNia19hY2kgPSB0bXA3NV9fID4+IDUgJiAweDM7CisgICAgcERzdC0+dW51c2VkMiA9IHRtcDc1X18gPj4gNyAmIDB4MTsKICAgICB0bXA3Nl9fID0gKnBCdWY7CiAgICAgcEJ1ZiArPSAxOwogICAgIGllbGVuIC09IDE7Ci0gICAgcERzdC0+YWN2aV9haWZzbiA9IHRtcDc2X18gPj4gMCAmIDB4ZjsKLSAgICBwRHN0LT5hY3ZpX2FjbSA9IHRtcDc2X18gPj4gNCAmIDB4MTsKLSAgICBwRHN0LT5hY3ZpX2FjaSA9IHRtcDc2X18gPj4gNSAmIDB4MzsKLSAgICBwRHN0LT51bnVzZWQzID0gdG1wNzZfXyA+PiA3ICYgMHgxOworICAgIHBEc3QtPmFjYmtfYWN3bWluID0gdG1wNzZfXyA+PiAwICYgMHhmOworICAgIHBEc3QtPmFjYmtfYWN3bWF4ID0gdG1wNzZfXyA+PiA0ICYgMHhmOworICAgIGZyYW1lc250b2hzKHBDdHgsICZwRHN0LT5hY2JrX3R4b3BsaW1pdCwgcEJ1ZiwgMCk7CisgICAgcEJ1ZiArPSAyOworICAgIGllbGVuIC09ICh0QU5JX1U4KTI7CiAgICAgdG1wNzdfXyA9ICpwQnVmOwogICAgIHBCdWYgKz0gMTsKICAgICBpZWxlbiAtPSAxOwotICAgIHBEc3QtPmFjdmlfYWN3bWluID0gdG1wNzdfXyA+PiAwICYgMHhmOwotICAgIHBEc3QtPmFjdmlfYWN3bWF4ID0gdG1wNzdfXyA+PiA0ICYgMHhmOwotICAgIGZyYW1lc250b2hzKHBDdHgsICZwRHN0LT5hY3ZpX3R4b3BsaW1pdCwgcEJ1ZiwgMCk7Ci0gICAgcEJ1ZiArPSAyOwotICAgIGllbGVuIC09ICh0QU5JX1U4KTI7CisgICAgcERzdC0+YWN2aV9haWZzbiA9IHRtcDc3X18gPj4gMCAmIDB4ZjsKKyAgICBwRHN0LT5hY3ZpX2FjbSA9IHRtcDc3X18gPj4gNCAmIDB4MTsKKyAgICBwRHN0LT5hY3ZpX2FjaSA9IHRtcDc3X18gPj4gNSAmIDB4MzsKKyAgICBwRHN0LT51bnVzZWQzID0gdG1wNzdfXyA+PiA3ICYgMHgxOwogICAgIHRtcDc4X18gPSAqcEJ1ZjsKICAgICBwQnVmICs9IDE7CiAgICAgaWVsZW4gLT0gMTsKLSAgICBwRHN0LT5hY3ZvX2FpZnNuID0gdG1wNzhfXyA+PiAwICYgMHhmOwotICAgIHBEc3QtPmFjdm9fYWNtID0gdG1wNzhfXyA+PiA0ICYgMHgxOwotICAgIHBEc3QtPmFjdm9fYWNpID0gdG1wNzhfXyA+PiA1ICYgMHgzOwotICAgIHBEc3QtPnVudXNlZDQgPSB0bXA3OF9fID4+IDcgJiAweDE7CisgICAgcERzdC0+YWN2aV9hY3dtaW4gPSB0bXA3OF9fID4+IDAgJiAweGY7CisgICAgcERzdC0+YWN2aV9hY3dtYXggPSB0bXA3OF9fID4+IDQgJiAweGY7CisgICAgZnJhbWVzbnRvaHMocEN0eCwgJnBEc3QtPmFjdmlfdHhvcGxpbWl0LCBwQnVmLCAwKTsKKyAgICBwQnVmICs9IDI7CisgICAgaWVsZW4gLT0gKHRBTklfVTgpMjsKICAgICB0bXA3OV9fID0gKnBCdWY7CiAgICAgcEJ1ZiArPSAxOwogICAgIGllbGVuIC09IDE7Ci0gICAgcERzdC0+YWN2b19hY3dtaW4gPSB0bXA3OV9fID4+IDAgJiAweGY7Ci0gICAgcERzdC0+YWN2b19hY3dtYXggPSB0bXA3OV9fID4+IDQgJiAweGY7CisgICAgcERzdC0+YWN2b19haWZzbiA9IHRtcDc5X18gPj4gMCAmIDB4ZjsKKyAgICBwRHN0LT5hY3ZvX2FjbSA9IHRtcDc5X18gPj4gNCAmIDB4MTsKKyAgICBwRHN0LT5hY3ZvX2FjaSA9IHRtcDc5X18gPj4gNSAmIDB4MzsKKyAgICBwRHN0LT51bnVzZWQ0ID0gdG1wNzlfXyA+PiA3ICYgMHgxOworICAgIHRtcDgwX18gPSAqcEJ1ZjsKKyAgICBwQnVmICs9IDE7CisgICAgaWVsZW4gLT0gMTsKKyAgICBwRHN0LT5hY3ZvX2Fjd21pbiA9IHRtcDgwX18gPj4gMCAmIDB4ZjsKKyAgICBwRHN0LT5hY3ZvX2Fjd21heCA9IHRtcDgwX18gPj4gNCAmIDB4ZjsKICAgICBmcmFtZXNudG9ocyhwQ3R4LCAmcERzdC0+YWN2b190eG9wbGltaXQsIHBCdWYsIDApOwogICAgICh2b2lkKXBDdHg7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llV01NUGFyYW1zLiAqLwogCi0jZGVmaW5lIFNpZ0llV01NUGFyYW1zICggMHgwMDc5ICkKKyNkZWZpbmUgU2lnSWVXTU1QYXJhbXMgKCAweDAwN2MgKQogCiAKIHRBTklfVTMyIGRvdDExZlVucGFja0llV1BBKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHRBTklfVTggKnBCdWYsIHRBTklfVTggaWVsZW4sIHREb3QxMWZJRVdQQSAqcERzdCkKQEAgLTUxMDksNyArNTE2Nyw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llV1BBLiAqLwogCi0jZGVmaW5lIFNpZ0llV1BBICggMHgwMDdhICkKKyNkZWZpbmUgU2lnSWVXUEEgKCAweDAwN2QgKQogCiAKIHRBTklfVTMyIGRvdDExZlVucGFja0llV1BBT3BhcXVlKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHRBTklfVTggKnBCdWYsIHRBTklfVTggaWVsZW4sIHREb3QxMWZJRVdQQU9wYXF1ZSAqcERzdCkKQEAgLTUxMjksNyArNTE4Nyw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llV1BBT3BhcXVlLiAqLwogCi0jZGVmaW5lIFNpZ0llV1BBT3BhcXVlICggMHgwMDdiICkKKyNkZWZpbmUgU2lnSWVXUEFPcGFxdWUgKCAweDAwN2UgKQogCiAKICAgICBzdGF0aWMgY29uc3QgdFRMVkRlZm4gVExWU19XU0NbIF0gPSB7CkBAIC01MTY3LDcgKzUyMjUsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVdTQy4gKi8KIAotI2RlZmluZSBTaWdJZVdTQyAoIDB4MDA3YyApCisjZGVmaW5lIFNpZ0llV1NDICggMHgwMDdmICkKIAogCiB0QU5JX1UzMiBkb3QxMWZVbnBhY2tJZVdpZGVyQldDaGFuU3dpdGNoQW5uKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHRBTklfVTggKnBCdWYsIHRBTklfVTggaWVsZW4sIHREb3QxMWZJRVdpZGVyQldDaGFuU3dpdGNoQW5uICpwRHN0KQpAQCAtNTE4Nyw3ICs1MjQ1LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVXaWRlckJXQ2hhblN3aXRjaEFubi4gKi8KIAotI2RlZmluZSBTaWdJZVdpZGVyQldDaGFuU3dpdGNoQW5uICggMHgwMDdkICkKKyNkZWZpbmUgU2lnSWVXaWRlckJXQ2hhblN3aXRjaEFubiAoIDB4MDA4MCApCiAKIAogICAgIHN0YXRpYyBjb25zdCB0VExWRGVmbiBUTFZTX1dzY0Fzc29jUmVxWyBdID0gewpAQCAtNTIwNiw3ICs1MjY0LDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVXc2NBc3NvY1JlcS4gKi8KIAotI2RlZmluZSBTaWdJZVdzY0Fzc29jUmVxICggMHgwMDdlICkKKyNkZWZpbmUgU2lnSWVXc2NBc3NvY1JlcSAoIDB4MDA4MSApCiAKIAogICAgIHN0YXRpYyBjb25zdCB0VExWRGVmbiBUTFZTX1dzY0Fzc29jUmVzWyBdID0gewpAQCAtNTIyNSw3ICs1MjgzLDcgQEAKICAgICByZXR1cm4gc3RhdHVzOwogfSAvKiBFbmQgZG90MTFmVW5wYWNrSWVXc2NBc3NvY1Jlcy4gKi8KIAotI2RlZmluZSBTaWdJZVdzY0Fzc29jUmVzICggMHgwMDdmICkKKyNkZWZpbmUgU2lnSWVXc2NBc3NvY1JlcyAoIDB4MDA4MiApCiAKIAogICAgIHN0YXRpYyBjb25zdCB0VExWRGVmbiBUTFZTX1dzY0JlYWNvblsgXSA9IHsKQEAgLTUyNTAsNyArNTMwOCw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llV3NjQmVhY29uLiAqLwogCi0jZGVmaW5lIFNpZ0llV3NjQmVhY29uICggMHgwMDgwICkKKyNkZWZpbmUgU2lnSWVXc2NCZWFjb24gKCAweDAwODMgKQogCiAKICAgICBzdGF0aWMgY29uc3QgdFRMVkRlZm4gVExWU19Xc2NCZWFjb25Qcm9iZVJlc1sgXSA9IHsKQEAgLTUyODMsNyArNTM0MSw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llV3NjQmVhY29uUHJvYmVSZXMuICovCiAKLSNkZWZpbmUgU2lnSWVXc2NCZWFjb25Qcm9iZVJlcyAoIDB4MDA4MSApCisjZGVmaW5lIFNpZ0llV3NjQmVhY29uUHJvYmVSZXMgKCAweDAwODQgKQogCiAKIHRBTklfVTMyIGRvdDExZlVucGFja0llV3NjSUVPcGFxdWUodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VOCBpZWxlbiwgdERvdDExZklFV3NjSUVPcGFxdWUgKnBEc3QpCkBAIC01MzAzLDcgKzUzNjEsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVdzY0lFT3BhcXVlLiAqLwogCi0jZGVmaW5lIFNpZ0llV3NjSUVPcGFxdWUgKCAweDAwODIgKQorI2RlZmluZSBTaWdJZVdzY0lFT3BhcXVlICggMHgwMDg1ICkKIAogCiAgICAgc3RhdGljIGNvbnN0IHRUTFZEZWZuIFRMVlNfV3NjUHJvYmVSZXFbIF0gPSB7CkBAIC01MzM0LDcgKzUzOTIsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVdzY1Byb2JlUmVxLiAqLwogCi0jZGVmaW5lIFNpZ0llV3NjUHJvYmVSZXEgKCAweDAwODMgKQorI2RlZmluZSBTaWdJZVdzY1Byb2JlUmVxICggMHgwMDg2ICkKIAogCiAgICAgc3RhdGljIGNvbnN0IHRUTFZEZWZuIFRMVlNfV3NjUHJvYmVSZXNbIF0gPSB7CkBAIC01MzY3LDcgKzU0MjUsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tJZVdzY1Byb2JlUmVzLiAqLwogCi0jZGVmaW5lIFNpZ0llV3NjUHJvYmVSZXMgKCAweDAwODQgKQorI2RlZmluZSBTaWdJZVdzY1Byb2JlUmVzICggMHgwMDg3ICkKIAogCiAgICAgc3RhdGljIGNvbnN0IHRUTFZEZWZuIFRMVlNfV3NjUmVhc3NvY1Jlc1sgXSA9IHsKQEAgLTUzODYsNyArNTQ0NCw3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlVucGFja0llV3NjUmVhc3NvY1Jlcy4gKi8KIAotI2RlZmluZSBTaWdJZVdzY1JlYXNzb2NSZXMgKCAweDAwODUgKQorI2RlZmluZSBTaWdJZVdzY1JlYXNzb2NSZXMgKCAweDAwODggKQogCiAKICAgICBzdGF0aWMgY29uc3QgdEZGRGVmbiBGRlNfQWRkQkFSZXFbXSA9IHsKQEAgLTY2NDEsNiArNjY5OSw3IEBACiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVFVRVNUKSwgRlJGTCgiRE1TICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRE1TKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFUVVFU1QpLCBGUkZMKCJVVENUU0ZPZmZzZXQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVENUU0ZPZmZzZXQpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVRVUVTVCksIEZSRkwoIlRETFNQZWVyVUFQU0RCdWZmZXJTVEEgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclVBUFNEQnVmZmVyU1RBKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFUVVFU1QpLCBGUkZMKCJURExTUGVlclBTTVN1cHAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclBTTVN1cHApOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVRVUVTVCksIEZSRkwoIlRETFNDaGFubmVsU3dpdGNoaW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU0NoYW5uZWxTd2l0Y2hpbmcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVRVUVTVCksIEZSRkwoImludGVyd29ya2luZ1NlcnZpY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5pbnRlcndvcmtpbmdTZXJ2aWNlKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFUVVFU1QpLCBGUkZMKCJxb3NNYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5xb3NNYXApOwpAQCAtNjY1OCw3ICs2NzE3LDcgQEAKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFUVVFU1QpLCBGUkZMKCJ3bm1Ob3RpZmljYXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC53bm1Ob3RpZmljYXRpb24pOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVRVUVTVCksIEZSRkwoInJlc2VydmVkNSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNSk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVFVRVNUKSwgRlJGTCgiVVRGOFNTSUQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVEY4U1NJRCk7Ci0gICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVFVRVNUKSwgRlJGTCgicmVzZXJ2ZWQ2ICgxMyk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVFVRVNUKSwgRlJGTCgicmVzZXJ2ZWQ2ICgxMik6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVFVRVNUKSwgRlJGTCgiVERMU1dpZGVyQlcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTV2lkZXJCVyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVFVRVNUKSwgRlJGTCgib3Blck1vZGVOb3RpZmljYXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5vcGVyTW9kZU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVFVRVNUKSwgRlJGTCgicmVzZXJ2ZWQ3ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ3KTsKQEAgLTc3OTYsNiArNzg1NSw3IEBACiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoIkRNUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLkRNUyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoIlVUQ1RTRk9mZnNldCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVUQ1RTRk9mZnNldCk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoIlRETFNQZWVyVUFQU0RCdWZmZXJTVEEgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclVBUFNEQnVmZmVyU1RBKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFU1BPTlNFKSwgRlJGTCgiVERMU1BlZXJQU01TdXBwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJQU01TdXBwKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFU1BPTlNFKSwgRlJGTCgiVERMU0NoYW5uZWxTd2l0Y2hpbmcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTQ2hhbm5lbFN3aXRjaGluZyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoImludGVyd29ya2luZ1NlcnZpY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5pbnRlcndvcmtpbmdTZXJ2aWNlKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFU1BPTlNFKSwgRlJGTCgicW9zTWFwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucW9zTWFwKTsKQEAgLTc4MTMsNyArNzg3Myw3IEBACiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoIndubU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoInJlc2VydmVkNSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNSk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoIlVURjhTU0lEICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVVRGOFNTSUQpOwotICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVTUE9OU0UpLCBGUkZMKCJyZXNlcnZlZDYgKDEzKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFU1BPTlNFKSwgRlJGTCgicmVzZXJ2ZWQ2ICgxMik6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoIlRETFNXaWRlckJXICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1dpZGVyQlcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVTUE9OU0UpLCBGUkZMKCJvcGVyTW9kZU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm9wZXJNb2RlTm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFU1BPTlNFKSwgRlJGTCgicmVzZXJ2ZWQ3ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ3KTsKQEAgLTkzMTMsNiArOTM3Myw3IEBACiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgiRE1TICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRE1TKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04pLCBGUkZMKCJVVENUU0ZPZmZzZXQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVENUU0ZPZmZzZXQpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTiksIEZSRkwoIlRETFNQZWVyVUFQU0RCdWZmZXJTVEEgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclVBUFNEQnVmZmVyU1RBKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04pLCBGUkZMKCJURExTUGVlclBTTVN1cHAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclBTTVN1cHApOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTiksIEZSRkwoIlRETFNDaGFubmVsU3dpdGNoaW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU0NoYW5uZWxTd2l0Y2hpbmcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTiksIEZSRkwoImludGVyd29ya2luZ1NlcnZpY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5pbnRlcndvcmtpbmdTZXJ2aWNlKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04pLCBGUkZMKCJxb3NNYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5xb3NNYXApOwpAQCAtOTMzMCw3ICs5MzkxLDcgQEAKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04pLCBGUkZMKCJ3bm1Ob3RpZmljYXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC53bm1Ob3RpZmljYXRpb24pOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTiksIEZSRkwoInJlc2VydmVkNSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNSk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgiVVRGOFNTSUQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVEY4U1NJRCk7Ci0gICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgicmVzZXJ2ZWQ2ICgxMyk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgicmVzZXJ2ZWQ2ICgxMik6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgiVERMU1dpZGVyQlcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTV2lkZXJCVyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgib3Blck1vZGVOb3RpZmljYXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5vcGVyTW9kZU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgicmVzZXJ2ZWQ3ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ3KTsKQEAgLTEwMzkwLDYgKzEwNDUxLDcgQEAKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04yKSwgRlJGTCgiRE1TICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRE1TKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04yKSwgRlJGTCgiVVRDVFNGT2Zmc2V0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVVRDVFNGT2Zmc2V0KTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04yKSwgRlJGTCgiVERMU1BlZXJVQVBTREJ1ZmZlclNUQSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNQZWVyVUFQU0RCdWZmZXJTVEEpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJURExTUGVlclBTTVN1cHAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclBTTVN1cHApOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJURExTQ2hhbm5lbFN3aXRjaGluZyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNDaGFubmVsU3dpdGNoaW5nKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04yKSwgRlJGTCgiaW50ZXJ3b3JraW5nU2VydmljZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmludGVyd29ya2luZ1NlcnZpY2UpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJxb3NNYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5xb3NNYXApOwpAQCAtMTA0MDcsNyArMTA0NjksNyBAQAogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJ3bm1Ob3RpZmljYXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC53bm1Ob3RpZmljYXRpb24pOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJyZXNlcnZlZDUgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDUpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJVVEY4U1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVURjhTU0lEKTsKLSAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04yKSwgRlJGTCgicmVzZXJ2ZWQ2ICgxMyk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OMiksIEZSRkwoInJlc2VydmVkNiAoMTIpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDYpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJURExTV2lkZXJCVyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNXaWRlckJXKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04yKSwgRlJGTCgib3Blck1vZGVOb3RpZmljYXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5vcGVyTW9kZU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OMiksIEZSRkwoInJlc2VydmVkNyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNyk7CkBAIC0xMTYzOSw2ICsxMTcwMSw3IEBACiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OSUVTKSwgRlJGTCgiRE1TICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRE1TKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJVVENUU0ZPZmZzZXQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVENUU0ZPZmZzZXQpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTklFUyksIEZSRkwoIlRETFNQZWVyVUFQU0RCdWZmZXJTVEEgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclVBUFNEQnVmZmVyU1RBKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJURExTUGVlclBTTVN1cHAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclBTTVN1cHApOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTklFUyksIEZSRkwoIlRETFNDaGFubmVsU3dpdGNoaW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU0NoYW5uZWxTd2l0Y2hpbmcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTklFUyksIEZSRkwoImludGVyd29ya2luZ1NlcnZpY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5pbnRlcndvcmtpbmdTZXJ2aWNlKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJxb3NNYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5xb3NNYXApOwpAQCAtMTE2NTYsNyArMTE3MTksNyBAQAogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTklFUyksIEZSRkwoIndubU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OSUVTKSwgRlJGTCgicmVzZXJ2ZWQ1ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ1KTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJVVEY4U1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVURjhTU0lEKTsKLSAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJyZXNlcnZlZDYgKDEzKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJyZXNlcnZlZDYgKDEyKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJURExTV2lkZXJCVyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNXaWRlckJXKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJvcGVyTW9kZU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm9wZXJNb2RlTm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJyZXNlcnZlZDcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDcpOwpAQCAtMTUwODMsNiArMTUxNDYsNyBAQAogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1BST0JFUkVTUE9OU0UpLCBGUkZMKCJETVMgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5ETVMpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1BST0JFUkVTUE9OU0UpLCBGUkZMKCJVVENUU0ZPZmZzZXQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVENUU0ZPZmZzZXQpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1BST0JFUkVTUE9OU0UpLCBGUkZMKCJURExTUGVlclVBUFNEQnVmZmVyU1RBICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJVQVBTREJ1ZmZlclNUQSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoIlRETFNQZWVyUFNNU3VwcCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNQZWVyUFNNU3VwcCk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoIlRETFNDaGFubmVsU3dpdGNoaW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU0NoYW5uZWxTd2l0Y2hpbmcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1BST0JFUkVTUE9OU0UpLCBGUkZMKCJpbnRlcndvcmtpbmdTZXJ2aWNlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuaW50ZXJ3b3JraW5nU2VydmljZSk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoInFvc01hcCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnFvc01hcCk7CkBAIC0xNTEwMCw3ICsxNTE2NCw3IEBACiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoIndubU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoInJlc2VydmVkNSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNSk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoIlVURjhTU0lEICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVVRGOFNTSUQpOwotICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1BST0JFUkVTUE9OU0UpLCBGUkZMKCJyZXNlcnZlZDYgKDEzKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9QUk9CRVJFU1BPTlNFKSwgRlJGTCgicmVzZXJ2ZWQ2ICgxMik6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoIlRETFNXaWRlckJXICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1dpZGVyQlcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1BST0JFUkVTUE9OU0UpLCBGUkZMKCJvcGVyTW9kZU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm9wZXJNb2RlTm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9QUk9CRVJFU1BPTlNFKSwgRlJGTCgicmVzZXJ2ZWQ3ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ3KTsKQEAgLTE2NDUyLDYgKzE2NTE2LDcgQEAKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVRVUVTVCksIEZSRkwoIkRNUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLkRNUyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUkVBU1NPQ1JFUVVFU1QpLCBGUkZMKCJVVENUU0ZPZmZzZXQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVENUU0ZPZmZzZXQpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVFVRVNUKSwgRlJGTCgiVERMU1BlZXJVQVBTREJ1ZmZlclNUQSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNQZWVyVUFQU0RCdWZmZXJTVEEpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVFVRVNUKSwgRlJGTCgiVERMU1BlZXJQU01TdXBwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJQU01TdXBwKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVRVUVTVCksIEZSRkwoIlRETFNDaGFubmVsU3dpdGNoaW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU0NoYW5uZWxTd2l0Y2hpbmcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVFVRVNUKSwgRlJGTCgiaW50ZXJ3b3JraW5nU2VydmljZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmludGVyd29ya2luZ1NlcnZpY2UpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVFVRVNUKSwgRlJGTCgicW9zTWFwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucW9zTWFwKTsKQEAgLTE2NDY5LDcgKzE2NTM0LDcgQEAKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVRVUVTVCksIEZSRkwoIndubU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUkVBU1NPQ1JFUVVFU1QpLCBGUkZMKCJyZXNlcnZlZDUgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDUpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVFVRVNUKSwgRlJGTCgiVVRGOFNTSUQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVEY4U1NJRCk7Ci0gICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUkVBU1NPQ1JFUVVFU1QpLCBGUkZMKCJyZXNlcnZlZDYgKDEzKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVRVUVTVCksIEZSRkwoInJlc2VydmVkNiAoMTIpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDYpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVFVRVNUKSwgRlJGTCgiVERMU1dpZGVyQlcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTV2lkZXJCVyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUkVBU1NPQ1JFUVVFU1QpLCBGUkZMKCJvcGVyTW9kZU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm9wZXJNb2RlTm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVRVUVTVCksIEZSRkwoInJlc2VydmVkNyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNyk7CkBAIC0xNzYxNSw2ICsxNzY4MCw3IEBACiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUkVBU1NPQ1JFU1BPTlNFKSwgRlJGTCgiRE1TICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRE1TKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJVVENUU0ZPZmZzZXQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVENUU0ZPZmZzZXQpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVNQT05TRSksIEZSRkwoIlRETFNQZWVyVUFQU0RCdWZmZXJTVEEgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclVBUFNEQnVmZmVyU1RBKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJURExTUGVlclBTTVN1cHAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclBTTVN1cHApOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVNQT05TRSksIEZSRkwoIlRETFNDaGFubmVsU3dpdGNoaW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU0NoYW5uZWxTd2l0Y2hpbmcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVNQT05TRSksIEZSRkwoImludGVyd29ya2luZ1NlcnZpY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5pbnRlcndvcmtpbmdTZXJ2aWNlKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJxb3NNYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5xb3NNYXApOwpAQCAtMTc2MzIsNyArMTc2OTgsNyBAQAogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVNQT05TRSksIEZSRkwoIndubU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUkVBU1NPQ1JFU1BPTlNFKSwgRlJGTCgicmVzZXJ2ZWQ1ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ1KTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJVVEY4U1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVURjhTU0lEKTsKLSAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJyZXNlcnZlZDYgKDEzKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJyZXNlcnZlZDYgKDEyKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJURExTV2lkZXJCVyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNXaWRlckJXKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJvcGVyTW9kZU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm9wZXJNb2RlTm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJyZXNlcnZlZDcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDcpOwpAQCAtMTc2ODAsNiArMTc3NDYsMTQ5OSBAQAogCiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tTTVBvd2VyU2F2ZS4gKi8KIAorICAgIHN0YXRpYyBjb25zdCB0RkZEZWZuIEZGU19URExTRGlzUmVxW10gPSB7CisgICAgICAgIHsgIkNhdGVnb3J5Iiwgb2Zmc2V0b2YodERvdDExZlRETFNEaXNSZXEsIENhdGVnb3J5KSwgU2lnRmZDYXRlZ29yeSAsIERPVDExRl9GRl9DQVRFR09SWV9MRU4sIH0sCisgICAgICAgIHsgIkFjdGlvbiIsIG9mZnNldG9mKHREb3QxMWZURExTRGlzUmVxLCBBY3Rpb24pLCBTaWdGZkFjdGlvbiAsIERPVDExRl9GRl9BQ1RJT05fTEVOLCB9LAorICAgICAgICB7ICJEaWFsb2dUb2tlbiIsIG9mZnNldG9mKHREb3QxMWZURExTRGlzUmVxLCBEaWFsb2dUb2tlbiksIFNpZ0ZmRGlhbG9nVG9rZW4gLCBET1QxMUZfRkZfRElBTE9HVE9LRU5fTEVOLCB9LAorICAgIHsgTlVMTCwgMCwgMCwgMCx9LAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgdElFRGVmbiBJRVNfVERMU0Rpc1JlcVtdID0geworICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNEaXNSZXEsIExpbmtJZGVudGlmaWVyKSwgb2Zmc2V0b2YodERvdDExZklFTGlua0lkZW50aWZpZXIsIHByZXNlbnQpLCAwLCAiTGlua0lkZW50aWZpZXIiICwgMCwgMjAsIDIwLCBTaWdJZUxpbmtJZGVudGlmaWVyLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfTElOS0lERU5USUZJRVIsIDEsIH0sCisgICAgezAsIDAsIDAsIE5VTEwsIDAsIDAsIDAsIDAsIHswLCAwLCAwLCAwLCAwfSwgMCwgMHhmZiwgMCwgfSwgICAgfTsKKwordEFOSV9VMzIgZG90MTFmVW5wYWNrVERMU0Rpc1JlcSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1UzMiBuQnVmLCB0RG90MTFmVERMU0Rpc1JlcSAqcEZybSkKK3sKKyAgICB0QU5JX1UzMiBpID0gMDsKKyAgICB0QU5JX1UzMiBzdGF0dXMgPSAwOworICAgIHN0YXR1cyA9IFVucGFja0NvcmUocEN0eCwgcEJ1ZiwgbkJ1ZiwgRkZTX1RETFNEaXNSZXEsIElFU19URExTRGlzUmVxLCAoIHRBTklfVTgqIClwRnJtLCBzaXplb2YoKnBGcm0pKTsKKworICAgICh2b2lkKWk7CisjICAgaWZkZWYgRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgaWYgKCFET1QxMUZfRkFJTEVEKHN0YXR1cykpCisgICAgeworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JFUSksIEZSRkwoIlVucGFja2VkIHRoZSBURExTRGlzUmVxOlxuIikpOworICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JFUSksIHBCdWYsIG5CdWYpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JFUSksIEZSRkwoInRvOlxuIikpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JFUSksIEZSRkwoIkNhdGVnb3J5OlxuIikpOworICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JFUSksICggdEFOSV9VOCogKSZwRnJtLT5DYXRlZ29yeS5jYXRlZ29yeSwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUkVRKSwgRlJGTCgiQWN0aW9uOlxuIikpOworICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JFUSksICggdEFOSV9VOCogKSZwRnJtLT5BY3Rpb24uYWN0aW9uLCAxKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSRVEpLCBGUkZMKCJEaWFsb2dUb2tlbjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+RGlhbG9nVG9rZW4udG9rZW4sIDEpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JFUSksIEZSRkwoIkxpbmtJZGVudGlmaWVyOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkxpbmtJZGVudGlmaWVyLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUkVRKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JFUSksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5ic3NpZCwgNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JFUSksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5Jbml0U3RhQWRkciwgNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JFUSksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5SZXNwU3RhQWRkciwgNik7CisgICAgICAgIH0KKyAgICB9CisjICAgZW5kaWYgLy8gRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgcmV0dXJuIHN0YXR1czsKKworfSAvKiBFbmQgZG90MTFmVW5wYWNrVERMU0Rpc1JlcS4gKi8KKworICAgIHN0YXRpYyBjb25zdCB0RkZEZWZuIEZGU19URExTRGlzUnNwW10gPSB7CisgICAgICAgIHsgIkNhdGVnb3J5Iiwgb2Zmc2V0b2YodERvdDExZlRETFNEaXNSc3AsIENhdGVnb3J5KSwgU2lnRmZDYXRlZ29yeSAsIERPVDExRl9GRl9DQVRFR09SWV9MRU4sIH0sCisgICAgICAgIHsgIkFjdGlvbiIsIG9mZnNldG9mKHREb3QxMWZURExTRGlzUnNwLCBBY3Rpb24pLCBTaWdGZkFjdGlvbiAsIERPVDExRl9GRl9BQ1RJT05fTEVOLCB9LAorICAgICAgICB7ICJEaWFsb2dUb2tlbiIsIG9mZnNldG9mKHREb3QxMWZURExTRGlzUnNwLCBEaWFsb2dUb2tlbiksIFNpZ0ZmRGlhbG9nVG9rZW4gLCBET1QxMUZfRkZfRElBTE9HVE9LRU5fTEVOLCB9LAorICAgICAgICB7ICJDYXBhYmlsaXRpZXMiLCBvZmZzZXRvZih0RG90MTFmVERMU0Rpc1JzcCwgQ2FwYWJpbGl0aWVzKSwgU2lnRmZDYXBhYmlsaXRpZXMgLCBET1QxMUZfRkZfQ0FQQUJJTElUSUVTX0xFTiwgfSwKKyAgICB7IE5VTEwsIDAsIDAsIDAsfSwKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHRJRURlZm4gSUVTX1RETFNEaXNSc3BbXSA9IHsKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTRGlzUnNwLCBTdXBwUmF0ZXMpLCBvZmZzZXRvZih0RG90MTFmSUVTdXBwUmF0ZXMsIHByZXNlbnQpLCAwLCAiU3VwcFJhdGVzIiAsIDAsIDIsIDE0LCBTaWdJZVN1cHBSYXRlcywgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX1NVUFBSQVRFUywgMSwgfSwKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTRGlzUnNwLCBFeHRTdXBwUmF0ZXMpLCBvZmZzZXRvZih0RG90MTFmSUVFeHRTdXBwUmF0ZXMsIHByZXNlbnQpLCAwLCAiRXh0U3VwcFJhdGVzIiAsIDAsIDMsIDE0LCBTaWdJZUV4dFN1cHBSYXRlcywgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX0VYVFNVUFBSQVRFUywgMCwgfSwKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTRGlzUnNwLCBTdXBwQ2hhbm5lbHMpLCBvZmZzZXRvZih0RG90MTFmSUVTdXBwQ2hhbm5lbHMsIHByZXNlbnQpLCAwLCAiU3VwcENoYW5uZWxzIiAsIDAsIDQsIDk4LCBTaWdJZVN1cHBDaGFubmVscywgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX1NVUFBDSEFOTkVMUywgMCwgfSwKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTRGlzUnNwLCBSU04pLCBvZmZzZXRvZih0RG90MTFmSUVSU04sIHByZXNlbnQpLCAwLCAiUlNOIiAsIDAsIDgsIDExMiwgU2lnSWVSU04sIHswLCAwLCAwLCAwLCAwfSwgMCwgRE9UMTFGX0VJRF9SU04sIDAsIH0sCisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU0Rpc1JzcCwgRXh0Q2FwKSwgb2Zmc2V0b2YodERvdDExZklFRXh0Q2FwLCBwcmVzZW50KSwgMCwgIkV4dENhcCIgLCAwLCAxMCwgMTAsIFNpZ0llRXh0Q2FwLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfRVhUQ0FQLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNEaXNSc3AsIEZUSW5mbyksIG9mZnNldG9mKHREb3QxMWZJRUZUSW5mbywgcHJlc2VudCksIDAsICJGVEluZm8iICwgMCwgODQsIDE4NywgU2lnSWVGVEluZm8sIHswLCAwLCAwLCAwLCAwfSwgMCwgRE9UMTFGX0VJRF9GVElORk8sIDAsIH0sCisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU0Rpc1JzcCwgRlRUaW1lb3V0SW50ZXJ2YWwpLCBvZmZzZXRvZih0RG90MTFmSUVGVFRpbWVvdXRJbnRlcnZhbCwgcHJlc2VudCksIDAsICJGVFRpbWVvdXRJbnRlcnZhbCIgLCAwLCA3LCA3LCBTaWdJZUZUVGltZW91dEludGVydmFsLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfRlRUSU1FT1VUSU5URVJWQUwsIDAsIH0sCisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU0Rpc1JzcCwgUklDRGF0YSksIG9mZnNldG9mKHREb3QxMWZJRVJJQ0RhdGEsIHByZXNlbnQpLCAwLCAiUklDRGF0YSIgLCAwLCA2LCA2LCBTaWdJZVJJQ0RhdGEsIHswLCAwLCAwLCAwLCAwfSwgMCwgRE9UMTFGX0VJRF9SSUNEQVRBLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNEaXNSc3AsIEhUQ2FwcyksIG9mZnNldG9mKHREb3QxMWZJRUhUQ2FwcywgcHJlc2VudCksIDAsICJIVENhcHMiICwgMCwgMjgsIDYwLCBTaWdJZUhUQ2FwcywgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX0hUQ0FQUywgMCwgfSwKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTRGlzUnNwLCBMaW5rSWRlbnRpZmllciksIG9mZnNldG9mKHREb3QxMWZJRUxpbmtJZGVudGlmaWVyLCBwcmVzZW50KSwgMCwgIkxpbmtJZGVudGlmaWVyIiAsIDAsIDIwLCAyMCwgU2lnSWVMaW5rSWRlbnRpZmllciwgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX0xJTktJREVOVElGSUVSLCAxLCB9LAorICAgIHswLCAwLCAwLCBOVUxMLCAwLCAwLCAwLCAwLCB7MCwgMCwgMCwgMCwgMH0sIDAsIDB4ZmYsIDAsIH0sICAgIH07CisKK3RBTklfVTMyIGRvdDExZlVucGFja1RETFNEaXNSc3AodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdERvdDExZlRETFNEaXNSc3AgKnBGcm0pCit7CisgICAgdEFOSV9VMzIgaSA9IDA7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICBzdGF0dXMgPSBVbnBhY2tDb3JlKHBDdHgsIHBCdWYsIG5CdWYsIEZGU19URExTRGlzUnNwLCBJRVNfVERMU0Rpc1JzcCwgKCB0QU5JX1U4KiApcEZybSwgc2l6ZW9mKCpwRnJtKSk7CisKKyAgICAodm9pZClpOworIyAgIGlmZGVmIERPVDExRl9EVU1QX0ZSQU1FUworICAgIGlmICghRE9UMTFGX0ZBSUxFRChzdGF0dXMpKQorICAgIHsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJVbnBhY2tlZCB0aGUgVERMU0Rpc1JzcDpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBwQnVmLCBuQnVmKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJ0bzpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJDYXRlZ29yeTpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+Q2F0ZWdvcnkuY2F0ZWdvcnksIDEpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIkFjdGlvbjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+QWN0aW9uLmFjdGlvbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiRGlhbG9nVG9rZW46XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkRpYWxvZ1Rva2VuLnRva2VuLCAxKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJDYXBhYmlsaXRpZXM6XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiZXNzICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuZXNzKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJpYnNzICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuaWJzcyk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiY2ZQb2xsYWJsZSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmNmUG9sbGFibGUpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImNmUG9sbFJlcSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmNmUG9sbFJlcSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicHJpdmFjeSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLnByaXZhY3kpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInNob3J0UHJlYW1ibGUgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5zaG9ydFByZWFtYmxlKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJwYmNjICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMucGJjYyk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiY2hhbm5lbEFnaWxpdHkgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5jaGFubmVsQWdpbGl0eSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgic3BlY3RydW1NZ3QgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5zcGVjdHJ1bU1ndCk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicW9zICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMucW9zKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJzaG9ydFNsb3RUaW1lICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuc2hvcnRTbG90VGltZSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiYXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmFwc2QpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJybSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLnJybSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiZHNzc09mZG0gKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5kc3NzT2ZkbSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiZGVsYXllZEJBICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuZGVsYXllZEJBKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJpbW1lZGlhdGVCQSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmltbWVkaWF0ZUJBKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJTdXBwUmF0ZXM6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+U3VwcFJhdGVzLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIm51bV9yYXRlczogJWQuXG4iKSwgcEZybS0+U3VwcFJhdGVzLm51bV9yYXRlcyk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSBwRnJtLT5TdXBwUmF0ZXMucmF0ZXMsIHBGcm0tPlN1cHBSYXRlcy5udW1fcmF0ZXMpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiRXh0U3VwcFJhdGVzOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkV4dFN1cHBSYXRlcy5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJudW1fcmF0ZXM6ICVkLlxuIiksIHBGcm0tPkV4dFN1cHBSYXRlcy5udW1fcmF0ZXMpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkgcEZybS0+RXh0U3VwcFJhdGVzLnJhdGVzLCBwRnJtLT5FeHRTdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlN1cHBDaGFubmVsczpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5TdXBwQ2hhbm5lbHMucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgibnVtX2JhbmRzOiAlZC5cbiIpLCBwRnJtLT5TdXBwQ2hhbm5lbHMubnVtX2JhbmRzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApIHBGcm0tPlN1cHBDaGFubmVscy5iYW5kcywgMiAqIHBGcm0tPlN1cHBDaGFubmVscy5udW1fYmFuZHMpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiUlNOOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlJTTi5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLnZlcnNpb24sIDIpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLmdwX2NpcGhlcl9zdWl0ZSwgNCk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5SU04ucHdpc2VfY2lwaGVyX3N1aXRlX2NvdW50LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApIHBGcm0tPlJTTi5wd2lzZV9jaXBoZXJfc3VpdGVzLCA0ICogcEZybS0+UlNOLnB3aXNlX2NpcGhlcl9zdWl0ZV9jb3VudCk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5SU04uYWttX3N1aXRlX2NvdW50LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApIHBGcm0tPlJTTi5ha21fc3VpdGVzLCA0ICogcEZybS0+UlNOLmFrbV9zdWl0ZV9jb3VudCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInByZWF1dGggKDEpOiAlZFxuIiksIHBGcm0tPlJTTi5wcmVhdXRoKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgibm9fcHdpc2UgKDEpOiAlZFxuIiksIHBGcm0tPlJTTi5ub19wd2lzZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlBUS1NBX3JlcGxheV9jb3VudGVyICgyKTogJWRcbiIpLCBwRnJtLT5SU04uUFRLU0FfcmVwbGF5X2NvdW50ZXIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJHVEtTQV9yZXBsYXlfY291bnRlciAoMik6ICVkXG4iKSwgcEZybS0+UlNOLkdUS1NBX3JlcGxheV9jb3VudGVyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicmVzZXJ2ZWQgKDEwKTogJWRcbiIpLCBwRnJtLT5SU04ucmVzZXJ2ZWQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLnBta2lkX2NvdW50LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApIHBGcm0tPlJTTi5wbWtpZCwgMTYgKiBwRnJtLT5SU04ucG1raWRfY291bnQpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiRXh0Q2FwOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkV4dENhcC5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJic3NDb2V4aXN0TWdtdFN1cHBvcnQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5ic3NDb2V4aXN0TWdtdFN1cHBvcnQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyZXNlcnZlZDEgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDEpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJleHRDaGFuU3dpdGNoICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuZXh0Q2hhblN3aXRjaCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJlc2VydmVkMiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkMik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInBzbXBDYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5wc21wQ2FwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicmVzZXJ2ZWQzICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgic3BzbXBDYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5zcHNtcENhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImV2ZW50ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuZXZlbnQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJkaWFnbm9zdGljcyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmRpYWdub3N0aWNzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgibXVsdGlEaWFnbm9zdGljcyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm11bHRpRGlhZ25vc3RpY3MpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJsb2NUcmFja2luZyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmxvY1RyYWNraW5nKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiRk1TICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRk1TKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicHJveHlBUlBTZXJ2aWNlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucHJveHlBUlBTZXJ2aWNlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiY29Mb2NJbnRmUmVwb3J0aW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuY29Mb2NJbnRmUmVwb3J0aW5nKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiY2l2aWNMb2MgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5jaXZpY0xvYyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImdlb3NwYXRpYWxMb2MgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5nZW9zcGF0aWFsTG9jKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiVEZTICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVEZTKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgid25tU2xlZXBNb2RlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAud25tU2xlZXBNb2RlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgidGltQnJvYWRjYXN0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAudGltQnJvYWRjYXN0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiYnNzVHJhbnNpdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmJzc1RyYW5zaXRpb24pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJxb3NUcmFmZmljQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucW9zVHJhZmZpY0NhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImFjU3RhQ250ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuYWNTdGFDbnQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJtdWx0aUJTU0lEICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAubXVsdGlCU1NJRCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInRpbWluZ01lYXMgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC50aW1pbmdNZWFzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiY2hhblVzYWdlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuY2hhblVzYWdlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgic3NpZExpc3QgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5zc2lkTGlzdCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIkRNUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLkRNUyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlVUQ1RTRk9mZnNldCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVUQ1RTRk9mZnNldCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlRETFNQZWVyVUFQU0RCdWZmZXJTVEEgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclVBUFNEQnVmZmVyU1RBKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiVERMU1BlZXJQU01TdXBwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJQU01TdXBwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiVERMU0NoYW5uZWxTd2l0Y2hpbmcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTQ2hhbm5lbFN3aXRjaGluZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImludGVyd29ya2luZ1NlcnZpY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5pbnRlcndvcmtpbmdTZXJ2aWNlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicW9zTWFwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucW9zTWFwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiRUJSICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRUJSKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgic3NwbkludGVyZmFjZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnNzcG5JbnRlcmZhY2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyZXNlcnZlZDQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJtc2dDRkNhcCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm1zZ0NGQ2FwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiVERMU1N1cHBvcnQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTU3VwcG9ydCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlRETFNQcm9oaWJpdGVkICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1Byb2hpYml0ZWQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJURExTQ2hhblN3aXRQcm9oaWJpdGVkICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU0NoYW5Td2l0UHJvaGliaXRlZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJlamVjdFVuYWRtaXR0ZWRUcmFmZmljICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVqZWN0VW5hZG1pdHRlZFRyYWZmaWMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJzZXJ2aWNlSW50ZXJ2YWxHcmFudWxhcml0eSAoMyk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnNlcnZpY2VJbnRlcnZhbEdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiaWRlbnRpZmllckxvYyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmlkZW50aWZpZXJMb2MpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJ1YXBzZENvZXhpc3RlbmNlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAudWFwc2RDb2V4aXN0ZW5jZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIndubU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubU5vdGlmaWNhdGlvbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJlc2VydmVkNSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlVURjhTU0lEICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVVRGOFNTSUQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyZXNlcnZlZDYgKDEyKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiVERMU1dpZGVyQlcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTV2lkZXJCVyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIm9wZXJNb2RlTm90aWZpY2F0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAub3Blck1vZGVOb3RpZmljYXRpb24pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyZXNlcnZlZDcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDcpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiRlRJbmZvOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyZXNlcnZlZCAoOCk6ICVkXG4iKSwgcEZybS0+RlRJbmZvLnJlc2VydmVkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiSUVDb3VudCAoOCk6ICVkXG4iKSwgcEZybS0+RlRJbmZvLklFQ291bnQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLk1JQywgMTYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLkFub25jZSwgMzIpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLlNub25jZSwgMzIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJSMUtIX0lEOlxuIikpOworICAgICAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8uUjFLSF9JRC5wcmVzZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLlIxS0hfSUQuUE1LX1IxX0lELCA2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiR1RLOlxuIikpOworICAgICAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8uR1RLLnByZXNlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImtleUlkICgyKTogJWRcbiIpLCBwRnJtLT5GVEluZm8uR1RLLmtleUlkKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJlc2VydmVkICgxNCk6ICVkXG4iKSwgcEZybS0+RlRJbmZvLkdUSy5yZXNlcnZlZCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLkdUSy5rZXlMZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5HVEsuUlNDLCA4KTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIm51bV9rZXk6ICVkLlxuIiksIHBGcm0tPkZUSW5mby5HVEsubnVtX2tleSk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkgcEZybS0+RlRJbmZvLkdUSy5rZXksIHBGcm0tPkZUSW5mby5HVEsubnVtX2tleSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlIwS0hfSUQ6XG4iKSk7CisgICAgICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5SMEtIX0lELnByZXNlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIm51bV9QTUtfUjBfSUQ6ICVkLlxuIiksIHBGcm0tPkZUSW5mby5SMEtIX0lELm51bV9QTUtfUjBfSUQpOworICAgICAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApIHBGcm0tPkZUSW5mby5SMEtIX0lELlBNS19SMF9JRCwgcEZybS0+RlRJbmZvLlIwS0hfSUQubnVtX1BNS19SMF9JRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJGVFRpbWVvdXRJbnRlcnZhbDpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5GVFRpbWVvdXRJbnRlcnZhbC5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+RlRUaW1lb3V0SW50ZXJ2YWwudGltZW91dFR5cGUsIDEpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+RlRUaW1lb3V0SW50ZXJ2YWwudGltZW91dFZhbHVlLCA0KTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlJJQ0RhdGE6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+UklDRGF0YS5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+UklDRGF0YS5JZGVudGlmaWVyLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJJQ0RhdGEucmVzb3VyY2VEZXNjQ291bnQsIDEpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+UklDRGF0YS5zdGF0dXNDb2RlLCAyKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIkhUQ2FwczpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5IVENhcHMucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiYWR2Q29kaW5nQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuYWR2Q29kaW5nQ2FwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgic3VwcG9ydGVkQ2hhbm5lbFdpZHRoU2V0ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuc3VwcG9ydGVkQ2hhbm5lbFdpZHRoU2V0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgibWltb1Bvd2VyU2F2ZSAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLm1pbW9Qb3dlclNhdmUpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJncmVlbkZpZWxkICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZ3JlZW5GaWVsZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInNob3J0R0kyME1IeiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnNob3J0R0kyME1Ieik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInNob3J0R0k0ME1IeiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnNob3J0R0k0ME1Ieik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInR4U1RCQyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnR4U1RCQyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJ4U1RCQyAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnJ4U1RCQyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImRlbGF5ZWRCQSAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmRlbGF5ZWRCQSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIm1heGltYWxBTVNEVXNpemUgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5tYXhpbWFsQU1TRFVzaXplKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiZHNzc0Nja01vZGU0ME1IeiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmRzc3NDY2tNb2RlNDBNSHopOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJwc21wICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucHNtcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInN0YmNDb250cm9sRnJhbWUgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5zdGJjQ29udHJvbEZyYW1lKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgibHNpZ1RYT1BQcm90ZWN0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubHNpZ1RYT1BQcm90ZWN0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgibWF4UnhBTVBEVUZhY3RvciAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLm1heFJ4QU1QRFVGYWN0b3IpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJtcGR1RGVuc2l0eSAoMyk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLm1wZHVEZW5zaXR5KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicmVzZXJ2ZWQxICgzKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkhUQ2Fwcy5zdXBwb3J0ZWRNQ1NTZXQsIDE2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicGNvICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucGNvKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgidHJhbnNpdGlvblRpbWUgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50cmFuc2l0aW9uVGltZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJlc2VydmVkMiAoNSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnJlc2VydmVkMik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIm1jc0ZlZWRiYWNrICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubWNzRmVlZGJhY2spOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyZXNlcnZlZDMgKDYpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yZXNlcnZlZDMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJ0eEJGICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMudHhCRik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJ4U3RhZ2dlcmVkU291bmRpbmcgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yeFN0YWdnZXJlZFNvdW5kaW5nKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgidHhTdGFnZ2VyZWRTb3VuZGluZyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnR4U3RhZ2dlcmVkU291bmRpbmcpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyeFpMRiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnJ4WkxGKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgidHhaTEYgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50eFpMRik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImltcGxpY2l0VHhCRiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmltcGxpY2l0VHhCRik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImNhbGlicmF0aW9uICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuY2FsaWJyYXRpb24pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJleHBsaWNpdENTSVR4QkYgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdENTSVR4QkYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJleHBsaWNpdFVuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRVbmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImV4cGxpY2l0QkZDU0lGZWVkYmFjayAoMyk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmV4cGxpY2l0QkZDU0lGZWVkYmFjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImV4cGxpY2l0VW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhGZWVkYmFjayAoMyk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmV4cGxpY2l0VW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhGZWVkYmFjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImV4cGxpY2l0Q29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4RmVlZGJhY2sgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdENvbXByZXNzZWRTdGVlcmluZ01hdHJpeEZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiY3NpTnVtQkZBbnRlbm5hZSAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmNzaU51bUJGQW50ZW5uYWUpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJ1bmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeEJGQW50ZW5uYWUgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy51bmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeEJGQW50ZW5uYWUpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJjb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4QkZBbnRlbm5hZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJlc2VydmVkNCAoNyk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnJlc2VydmVkNCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImFudGVubmFTZWxlY3Rpb24gKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5hbnRlbm5hU2VsZWN0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiZXhwbGljaXRDU0lGZWVkYmFja1R4ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRDU0lGZWVkYmFja1R4KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiYW50ZW5uYUluZGljZXNGZWVkYmFja1R4ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuYW50ZW5uYUluZGljZXNGZWVkYmFja1R4KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiZXhwbGljaXRDU0lGZWVkYmFjayAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmV4cGxpY2l0Q1NJRmVlZGJhY2spOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJhbnRlbm5hSW5kaWNlc0ZlZWRiYWNrICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuYW50ZW5uYUluZGljZXNGZWVkYmFjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJ4QVMgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yeEFTKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgidHhTb3VuZGluZ1BQRFVzICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMudHhTb3VuZGluZ1BQRFVzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicmVzZXJ2ZWQ1ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQ1KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgibnVtX3JzdmQ6ICVkLlxuIiksIHBGcm0tPkhUQ2Fwcy5udW1fcnN2ZCk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSBwRnJtLT5IVENhcHMucnN2ZCwgcEZybS0+SFRDYXBzLm51bV9yc3ZkKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIkxpbmtJZGVudGlmaWVyOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkxpbmtJZGVudGlmaWVyLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5ic3NpZCwgNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5Jbml0U3RhQWRkciwgNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5SZXNwU3RhQWRkciwgNik7CisgICAgICAgIH0KKyAgICB9CisjICAgZW5kaWYgLy8gRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgcmV0dXJuIHN0YXR1czsKKworfSAvKiBFbmQgZG90MTFmVW5wYWNrVERMU0Rpc1JzcC4gKi8KKworICAgIHN0YXRpYyBjb25zdCB0RkZEZWZuIEZGU19URExTUGVlclRyYWZmaWNJbmRbXSA9IHsKKyAgICAgICAgeyAiQ2F0ZWdvcnkiLCBvZmZzZXRvZih0RG90MTFmVERMU1BlZXJUcmFmZmljSW5kLCBDYXRlZ29yeSksIFNpZ0ZmQ2F0ZWdvcnkgLCBET1QxMUZfRkZfQ0FURUdPUllfTEVOLCB9LAorICAgICAgICB7ICJBY3Rpb24iLCBvZmZzZXRvZih0RG90MTFmVERMU1BlZXJUcmFmZmljSW5kLCBBY3Rpb24pLCBTaWdGZkFjdGlvbiAsIERPVDExRl9GRl9BQ1RJT05fTEVOLCB9LAorICAgICAgICB7ICJEaWFsb2dUb2tlbiIsIG9mZnNldG9mKHREb3QxMWZURExTUGVlclRyYWZmaWNJbmQsIERpYWxvZ1Rva2VuKSwgU2lnRmZEaWFsb2dUb2tlbiAsIERPVDExRl9GRl9ESUFMT0dUT0tFTl9MRU4sIH0sCisgICAgeyBOVUxMLCAwLCAwLCAwLH0sCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB0SUVEZWZuIElFU19URExTUGVlclRyYWZmaWNJbmRbXSA9IHsKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTUGVlclRyYWZmaWNJbmQsIExpbmtJZGVudGlmaWVyKSwgb2Zmc2V0b2YodERvdDExZklFTGlua0lkZW50aWZpZXIsIHByZXNlbnQpLCAwLCAiTGlua0lkZW50aWZpZXIiICwgMCwgMjAsIDIwLCBTaWdJZUxpbmtJZGVudGlmaWVyLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfTElOS0lERU5USUZJRVIsIDEsIH0sCisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU1BlZXJUcmFmZmljSW5kLCBQVElDb250cm9sKSwgb2Zmc2V0b2YodERvdDExZklFUFRJQ29udHJvbCwgcHJlc2VudCksIDAsICJQVElDb250cm9sIiAsIDAsIDUsIDUsIFNpZ0llUFRJQ29udHJvbCwgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX1BUSUNPTlRST0wsIDAsIH0sCisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU1BlZXJUcmFmZmljSW5kLCBQVUJ1ZmZlclN0YXR1cyksIG9mZnNldG9mKHREb3QxMWZJRVBVQnVmZmVyU3RhdHVzLCBwcmVzZW50KSwgMCwgIlBVQnVmZmVyU3RhdHVzIiAsIDAsIDMsIDMsIFNpZ0llUFVCdWZmZXJTdGF0dXMsIHswLCAwLCAwLCAwLCAwfSwgMCwgRE9UMTFGX0VJRF9QVUJVRkZFUlNUQVRVUywgMSwgfSwKKyAgICB7MCwgMCwgMCwgTlVMTCwgMCwgMCwgMCwgMCwgezAsIDAsIDAsIDAsIDB9LCAwLCAweGZmLCAwLCB9LCAgICB9OworCit0QU5JX1UzMiBkb3QxMWZVbnBhY2tURExTUGVlclRyYWZmaWNJbmQodHBBbmlTaXJHbG9iYWwgcEN0eCwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdERvdDExZlRETFNQZWVyVHJhZmZpY0luZCAqcEZybSkKK3sKKyAgICB0QU5JX1UzMiBpID0gMDsKKyAgICB0QU5JX1UzMiBzdGF0dXMgPSAwOworICAgIHN0YXR1cyA9IFVucGFja0NvcmUocEN0eCwgcEJ1ZiwgbkJ1ZiwgRkZTX1RETFNQZWVyVHJhZmZpY0luZCwgSUVTX1RETFNQZWVyVHJhZmZpY0luZCwgKCB0QU5JX1U4KiApcEZybSwgc2l6ZW9mKCpwRnJtKSk7CisKKyAgICAodm9pZClpOworIyAgIGlmZGVmIERPVDExRl9EVU1QX0ZSQU1FUworICAgIGlmICghRE9UMTFGX0ZBSUxFRChzdGF0dXMpKQorICAgIHsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksIEZSRkwoIlVucGFja2VkIHRoZSBURExTUGVlclRyYWZmaWNJbmQ6XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCBwQnVmLCBuQnVmKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksIEZSRkwoInRvOlxuIikpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgRlJGTCgiQ2F0ZWdvcnk6XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCAoIHRBTklfVTgqICkmcEZybS0+Q2F0ZWdvcnkuY2F0ZWdvcnksIDEpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgRlJGTCgiQWN0aW9uOlxuIikpOworICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgKCB0QU5JX1U4KiApJnBGcm0tPkFjdGlvbi5hY3Rpb24sIDEpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgRlJGTCgiRGlhbG9nVG9rZW46XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCAoIHRBTklfVTgqICkmcEZybS0+RGlhbG9nVG9rZW4udG9rZW4sIDEpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgRlJGTCgiTGlua0lkZW50aWZpZXI6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+TGlua0lkZW50aWZpZXIucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5ic3NpZCwgNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgKCB0QU5JX1U4KiApJnBGcm0tPkxpbmtJZGVudGlmaWVyLkluaXRTdGFBZGRyLCA2KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuUmVzcFN0YUFkZHIsIDYpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCBGUkZMKCJQVElDb250cm9sOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlBUSUNvbnRyb2wucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksICggdEFOSV9VOCogKSZwRnJtLT5QVElDb250cm9sLnRpZCwgMSk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgKCB0QU5JX1U4KiApJnBGcm0tPlBUSUNvbnRyb2wuc2VxdWVuY2VfY29udHJvbCwgMik7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksIEZSRkwoIlBVQnVmZmVyU3RhdHVzOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlBVQnVmZmVyU3RhdHVzLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCBGUkZMKCJhY19ia190cmFmZmljX2F2YWwgKDEpOiAlZFxuIiksIHBGcm0tPlBVQnVmZmVyU3RhdHVzLmFjX2JrX3RyYWZmaWNfYXZhbCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgRlJGTCgiYWNfYmVfdHJhZmZpY19hdmFsICgxKTogJWRcbiIpLCBwRnJtLT5QVUJ1ZmZlclN0YXR1cy5hY19iZV90cmFmZmljX2F2YWwpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksIEZSRkwoImFjX3ZpX3RyYWZmaWNfYXZhbCAoMSk6ICVkXG4iKSwgcEZybS0+UFVCdWZmZXJTdGF0dXMuYWNfdmlfdHJhZmZpY19hdmFsKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCBGUkZMKCJhY192b190cmFmZmljX2F2YWwgKDEpOiAlZFxuIiksIHBGcm0tPlBVQnVmZmVyU3RhdHVzLmFjX3ZvX3RyYWZmaWNfYXZhbCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgRlJGTCgicmVzZXJ2ZWQgKDQpOiAlZFxuIiksIHBGcm0tPlBVQnVmZmVyU3RhdHVzLnJlc2VydmVkKTsKKyAgICAgICAgfQorICAgIH0KKyMgICBlbmRpZiAvLyBET1QxMUZfRFVNUF9GUkFNRVMKKyAgICByZXR1cm4gc3RhdHVzOworCit9IC8qIEVuZCBkb3QxMWZVbnBhY2tURExTUGVlclRyYWZmaWNJbmQuICovCisKKyAgICBzdGF0aWMgY29uc3QgdEZGRGVmbiBGRlNfVERMU1BlZXJUcmFmZmljUnNwW10gPSB7CisgICAgICAgIHsgIkNhdGVnb3J5Iiwgb2Zmc2V0b2YodERvdDExZlRETFNQZWVyVHJhZmZpY1JzcCwgQ2F0ZWdvcnkpLCBTaWdGZkNhdGVnb3J5ICwgRE9UMTFGX0ZGX0NBVEVHT1JZX0xFTiwgfSwKKyAgICAgICAgeyAiQWN0aW9uIiwgb2Zmc2V0b2YodERvdDExZlRETFNQZWVyVHJhZmZpY1JzcCwgQWN0aW9uKSwgU2lnRmZBY3Rpb24gLCBET1QxMUZfRkZfQUNUSU9OX0xFTiwgfSwKKyAgICAgICAgeyAiRGlhbG9nVG9rZW4iLCBvZmZzZXRvZih0RG90MTFmVERMU1BlZXJUcmFmZmljUnNwLCBEaWFsb2dUb2tlbiksIFNpZ0ZmRGlhbG9nVG9rZW4gLCBET1QxMUZfRkZfRElBTE9HVE9LRU5fTEVOLCB9LAorICAgIHsgTlVMTCwgMCwgMCwgMCx9LAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgdElFRGVmbiBJRVNfVERMU1BlZXJUcmFmZmljUnNwW10gPSB7CisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU1BlZXJUcmFmZmljUnNwLCBMaW5rSWRlbnRpZmllciksIG9mZnNldG9mKHREb3QxMWZJRUxpbmtJZGVudGlmaWVyLCBwcmVzZW50KSwgMCwgIkxpbmtJZGVudGlmaWVyIiAsIDAsIDIwLCAyMCwgU2lnSWVMaW5rSWRlbnRpZmllciwgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX0xJTktJREVOVElGSUVSLCAxLCB9LAorICAgIHswLCAwLCAwLCBOVUxMLCAwLCAwLCAwLCAwLCB7MCwgMCwgMCwgMCwgMH0sIDAsIDB4ZmYsIDAsIH0sICAgIH07CisKK3RBTklfVTMyIGRvdDExZlVucGFja1RETFNQZWVyVHJhZmZpY1JzcCh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1UzMiBuQnVmLCB0RG90MTFmVERMU1BlZXJUcmFmZmljUnNwICpwRnJtKQoreworICAgIHRBTklfVTMyIGkgPSAwOworICAgIHRBTklfVTMyIHN0YXR1cyA9IDA7CisgICAgc3RhdHVzID0gVW5wYWNrQ29yZShwQ3R4LCBwQnVmLCBuQnVmLCBGRlNfVERMU1BlZXJUcmFmZmljUnNwLCBJRVNfVERMU1BlZXJUcmFmZmljUnNwLCAoIHRBTklfVTgqIClwRnJtLCBzaXplb2YoKnBGcm0pKTsKKworICAgICh2b2lkKWk7CisjICAgaWZkZWYgRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgaWYgKCFET1QxMUZfRkFJTEVEKHN0YXR1cykpCisgICAgeworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDUlNQKSwgRlJGTCgiVW5wYWNrZWQgdGhlIFRETFNQZWVyVHJhZmZpY1JzcDpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ1JTUCksIHBCdWYsIG5CdWYpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDUlNQKSwgRlJGTCgidG86XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNSU1ApLCBGUkZMKCJDYXRlZ29yeTpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5DYXRlZ29yeS5jYXRlZ29yeSwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNSU1ApLCBGUkZMKCJBY3Rpb246XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+QWN0aW9uLmFjdGlvbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNSU1ApLCBGUkZMKCJEaWFsb2dUb2tlbjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5EaWFsb2dUb2tlbi50b2tlbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNSU1ApLCBGUkZMKCJMaW5rSWRlbnRpZmllcjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5MaW5rSWRlbnRpZmllci5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkxpbmtJZGVudGlmaWVyLmJzc2lkLCA2KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuSW5pdFN0YUFkZHIsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5SZXNwU3RhQWRkciwgNik7CisgICAgICAgIH0KKyAgICB9CisjICAgZW5kaWYgLy8gRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgcmV0dXJuIHN0YXR1czsKKworfSAvKiBFbmQgZG90MTFmVW5wYWNrVERMU1BlZXJUcmFmZmljUnNwLiAqLworCisgICAgc3RhdGljIGNvbnN0IHRGRkRlZm4gRkZTX1RETFNTZXR1cENuZltdID0geworICAgICAgICB7ICJDYXRlZ29yeSIsIG9mZnNldG9mKHREb3QxMWZURExTU2V0dXBDbmYsIENhdGVnb3J5KSwgU2lnRmZDYXRlZ29yeSAsIERPVDExRl9GRl9DQVRFR09SWV9MRU4sIH0sCisgICAgICAgIHsgIkFjdGlvbiIsIG9mZnNldG9mKHREb3QxMWZURExTU2V0dXBDbmYsIEFjdGlvbiksIFNpZ0ZmQWN0aW9uICwgRE9UMTFGX0ZGX0FDVElPTl9MRU4sIH0sCisgICAgICAgIHsgIlN0YXR1cyIsIG9mZnNldG9mKHREb3QxMWZURExTU2V0dXBDbmYsIFN0YXR1cyksIFNpZ0ZmU3RhdHVzICwgRE9UMTFGX0ZGX1NUQVRVU19MRU4sIH0sCisgICAgICAgIHsgIkRpYWxvZ1Rva2VuIiwgb2Zmc2V0b2YodERvdDExZlRETFNTZXR1cENuZiwgRGlhbG9nVG9rZW4pLCBTaWdGZkRpYWxvZ1Rva2VuICwgRE9UMTFGX0ZGX0RJQUxPR1RPS0VOX0xFTiwgfSwKKyAgICB7IE5VTEwsIDAsIDAsIDAsfSwKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHRJRURlZm4gSUVTX1RETFNTZXR1cENuZltdID0geworICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cENuZiwgUlNOKSwgb2Zmc2V0b2YodERvdDExZklFUlNOLCBwcmVzZW50KSwgMCwgIlJTTiIgLCAwLCA4LCAxMTIsIFNpZ0llUlNOLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfUlNOLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cENuZiwgRURDQVBhcmFtU2V0KSwgb2Zmc2V0b2YodERvdDExZklFRURDQVBhcmFtU2V0LCBwcmVzZW50KSwgMCwgIkVEQ0FQYXJhbVNldCIgLCAwLCAyMCwgMjAsIFNpZ0llRURDQVBhcmFtU2V0LCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfRURDQVBBUkFNU0VULCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cENuZiwgRlRJbmZvKSwgb2Zmc2V0b2YodERvdDExZklFRlRJbmZvLCBwcmVzZW50KSwgMCwgIkZUSW5mbyIgLCAwLCA4NCwgMTg3LCBTaWdJZUZUSW5mbywgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX0ZUSU5GTywgMCwgfSwKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTU2V0dXBDbmYsIEZUVGltZW91dEludGVydmFsKSwgb2Zmc2V0b2YodERvdDExZklFRlRUaW1lb3V0SW50ZXJ2YWwsIHByZXNlbnQpLCAwLCAiRlRUaW1lb3V0SW50ZXJ2YWwiICwgMCwgNywgNywgU2lnSWVGVFRpbWVvdXRJbnRlcnZhbCwgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX0ZUVElNRU9VVElOVEVSVkFMLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cENuZiwgSFRJbmZvKSwgb2Zmc2V0b2YodERvdDExZklFSFRJbmZvLCBwcmVzZW50KSwgMCwgIkhUSW5mbyIgLCAwLCAyNCwgNTYsIFNpZ0llSFRJbmZvLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfSFRJTkZPLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cENuZiwgTGlua0lkZW50aWZpZXIpLCBvZmZzZXRvZih0RG90MTFmSUVMaW5rSWRlbnRpZmllciwgcHJlc2VudCksIDAsICJMaW5rSWRlbnRpZmllciIgLCAwLCAyMCwgMjAsIFNpZ0llTGlua0lkZW50aWZpZXIsIHswLCAwLCAwLCAwLCAwfSwgMCwgRE9UMTFGX0VJRF9MSU5LSURFTlRJRklFUiwgMCwgfSwKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTU2V0dXBDbmYsIFdNTUluZm9TdGF0aW9uKSwgb2Zmc2V0b2YodERvdDExZklFV01NSW5mb1N0YXRpb24sIHByZXNlbnQpLCAwLCAiV01NSW5mb1N0YXRpb24iICwgMCwgOSwgOSwgU2lnSWVXTU1JbmZvU3RhdGlvbiwgezAsIDgwLCAyNDIsIDIsIDB9LCA1LCBET1QxMUZfRUlEX1dNTUlORk9TVEFUSU9OLCAwLCB9LAorICAgIHswLCAwLCAwLCBOVUxMLCAwLCAwLCAwLCAwLCB7MCwgMCwgMCwgMCwgMH0sIDAsIDB4ZmYsIDAsIH0sICAgIH07CisKK3RBTklfVTMyIGRvdDExZlVucGFja1RETFNTZXR1cENuZih0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1UzMiBuQnVmLCB0RG90MTFmVERMU1NldHVwQ25mICpwRnJtKQoreworICAgIHRBTklfVTMyIGkgPSAwOworICAgIHRBTklfVTMyIHN0YXR1cyA9IDA7CisgICAgc3RhdHVzID0gVW5wYWNrQ29yZShwQ3R4LCBwQnVmLCBuQnVmLCBGRlNfVERMU1NldHVwQ25mLCBJRVNfVERMU1NldHVwQ25mLCAoIHRBTklfVTgqIClwRnJtLCBzaXplb2YoKnBGcm0pKTsKKworICAgICh2b2lkKWk7CisjICAgaWZkZWYgRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgaWYgKCFET1QxMUZfRkFJTEVEKHN0YXR1cykpCisgICAgeworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiVW5wYWNrZWQgdGhlIFRETFNTZXR1cENuZjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIHBCdWYsIG5CdWYpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgidG86XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJDYXRlZ29yeTpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5DYXRlZ29yeS5jYXRlZ29yeSwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJBY3Rpb246XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+QWN0aW9uLmFjdGlvbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJTdGF0dXM6XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+U3RhdHVzLnN0YXR1cywgMik7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJEaWFsb2dUb2tlbjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5EaWFsb2dUb2tlbi50b2tlbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJSU046XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+UlNOLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLnZlcnNpb24sIDIpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5SU04uZ3BfY2lwaGVyX3N1aXRlLCA0KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLnB3aXNlX2NpcGhlcl9zdWl0ZV9jb3VudCwgMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApIHBGcm0tPlJTTi5wd2lzZV9jaXBoZXJfc3VpdGVzLCA0ICogcEZybS0+UlNOLnB3aXNlX2NpcGhlcl9zdWl0ZV9jb3VudCk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJTTi5ha21fc3VpdGVfY291bnQsIDIpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSBwRnJtLT5SU04uYWttX3N1aXRlcywgNCAqIHBGcm0tPlJTTi5ha21fc3VpdGVfY291bnQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoInByZWF1dGggKDEpOiAlZFxuIiksIHBGcm0tPlJTTi5wcmVhdXRoKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJub19wd2lzZSAoMSk6ICVkXG4iKSwgcEZybS0+UlNOLm5vX3B3aXNlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJQVEtTQV9yZXBsYXlfY291bnRlciAoMik6ICVkXG4iKSwgcEZybS0+UlNOLlBUS1NBX3JlcGxheV9jb3VudGVyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJHVEtTQV9yZXBsYXlfY291bnRlciAoMik6ICVkXG4iKSwgcEZybS0+UlNOLkdUS1NBX3JlcGxheV9jb3VudGVyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJyZXNlcnZlZCAoMTApOiAlZFxuIiksIHBGcm0tPlJTTi5yZXNlcnZlZCk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJTTi5wbWtpZF9jb3VudCwgMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApIHBGcm0tPlJTTi5wbWtpZCwgMTYgKiBwRnJtLT5SU04ucG1raWRfY291bnQpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJFRENBUGFyYW1TZXQ6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+RURDQVBhcmFtU2V0LnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+RURDQVBhcmFtU2V0LnFvcywgMSk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPkVEQ0FQYXJhbVNldC5yZXNlcnZlZCwgMSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWNiZV9haWZzbiAoNCk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LmFjYmVfYWlmc24pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjYmVfYWNtICgxKTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWNiZV9hY20pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjYmVfYWNpICgyKTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWNiZV9hY2kpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoInVudXNlZDEgKDEpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC51bnVzZWQxKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY2JlX2Fjd21pbiAoNCk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LmFjYmVfYWN3bWluKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY2JlX2Fjd21heCAoNCk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LmFjYmVfYWN3bWF4KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+RURDQVBhcmFtU2V0LmFjYmVfdHhvcGxpbWl0LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY2JrX2FpZnNuICg0KTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWNia19haWZzbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWNia19hY20gKDEpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC5hY2JrX2FjbSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWNia19hY2kgKDIpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC5hY2JrX2FjaSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgidW51c2VkMiAoMSk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LnVudXNlZDIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjYmtfYWN3bWluICg0KTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWNia19hY3dtaW4pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjYmtfYWN3bWF4ICg0KTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWNia19hY3dtYXgpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5FRENBUGFyYW1TZXQuYWNia190eG9wbGltaXQsIDIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjdmlfYWlmc24gKDQpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC5hY3ZpX2FpZnNuKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY3ZpX2FjbSAoMSk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LmFjdmlfYWNtKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY3ZpX2FjaSAoMik6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LmFjdmlfYWNpKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJ1bnVzZWQzICgxKTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQudW51c2VkMyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWN2aV9hY3dtaW4gKDQpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC5hY3ZpX2Fjd21pbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWN2aV9hY3dtYXggKDQpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC5hY3ZpX2Fjd21heCk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPkVEQ0FQYXJhbVNldC5hY3ZpX3R4b3BsaW1pdCwgMik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWN2b19haWZzbiAoNCk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LmFjdm9fYWlmc24pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjdm9fYWNtICgxKTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWN2b19hY20pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjdm9fYWNpICgyKTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWN2b19hY2kpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoInVudXNlZDQgKDEpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC51bnVzZWQ0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY3ZvX2Fjd21pbiAoNCk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LmFjdm9fYWN3bWluKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY3ZvX2Fjd21heCAoNCk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LmFjdm9fYWN3bWF4KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+RURDQVBhcmFtU2V0LmFjdm9fdHhvcGxpbWl0LCAyKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiRlRJbmZvOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgicmVzZXJ2ZWQgKDgpOiAlZFxuIiksIHBGcm0tPkZUSW5mby5yZXNlcnZlZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiSUVDb3VudCAoOCk6ICVkXG4iKSwgcEZybS0+RlRJbmZvLklFQ291bnQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uTUlDLCAxNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5Bbm9uY2UsIDMyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLlNub25jZSwgMzIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIlIxS0hfSUQ6XG4iKSk7CisgICAgICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5SMUtIX0lELnByZXNlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLlIxS0hfSUQuUE1LX1IxX0lELCA2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJHVEs6XG4iKSk7CisgICAgICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5HVEsucHJlc2VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImtleUlkICgyKTogJWRcbiIpLCBwRnJtLT5GVEluZm8uR1RLLmtleUlkKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgicmVzZXJ2ZWQgKDE0KTogJWRcbiIpLCBwRnJtLT5GVEluZm8uR1RLLnJlc2VydmVkKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5HVEsua2V5TGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5HVEsuUlNDLCA4KTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgibnVtX2tleTogJWQuXG4iKSwgcEZybS0+RlRJbmZvLkdUSy5udW1fa2V5KTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApIHBGcm0tPkZUSW5mby5HVEsua2V5LCBwRnJtLT5GVEluZm8uR1RLLm51bV9rZXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIlIwS0hfSUQ6XG4iKSk7CisgICAgICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5SMEtIX0lELnByZXNlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJudW1fUE1LX1IwX0lEOiAlZC5cbiIpLCBwRnJtLT5GVEluZm8uUjBLSF9JRC5udW1fUE1LX1IwX0lEKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApIHBGcm0tPkZUSW5mby5SMEtIX0lELlBNS19SMF9JRCwgcEZybS0+RlRJbmZvLlIwS0hfSUQubnVtX1BNS19SMF9JRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIkZUVGltZW91dEludGVydmFsOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkZUVGltZW91dEludGVydmFsLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+RlRUaW1lb3V0SW50ZXJ2YWwudGltZW91dFR5cGUsIDEpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5GVFRpbWVvdXRJbnRlcnZhbC50aW1lb3V0VmFsdWUsIDQpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJIVEluZm86XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+SFRJbmZvLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+SFRJbmZvLnByaW1hcnlDaGFubmVsLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJzZWNvbmRhcnlDaGFubmVsT2Zmc2V0ICgyKTogJWRcbiIpLCBwRnJtLT5IVEluZm8uc2Vjb25kYXJ5Q2hhbm5lbE9mZnNldCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgicmVjb21tZW5kZWRUeFdpZHRoU2V0ICgxKTogJWRcbiIpLCBwRnJtLT5IVEluZm8ucmVjb21tZW5kZWRUeFdpZHRoU2V0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJyaWZzTW9kZSAoMSk6ICVkXG4iKSwgcEZybS0+SFRJbmZvLnJpZnNNb2RlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJjb250cm9sbGVkQWNjZXNzT25seSAoMSk6ICVkXG4iKSwgcEZybS0+SFRJbmZvLmNvbnRyb2xsZWRBY2Nlc3NPbmx5KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJzZXJ2aWNlSW50ZXJ2YWxHcmFudWxhcml0eSAoMyk6ICVkXG4iKSwgcEZybS0+SFRJbmZvLnNlcnZpY2VJbnRlcnZhbEdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJvcE1vZGUgKDIpOiAlZFxuIiksIHBGcm0tPkhUSW5mby5vcE1vZGUpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIm5vbkdGRGV2aWNlc1ByZXNlbnQgKDEpOiAlZFxuIiksIHBGcm0tPkhUSW5mby5ub25HRkRldmljZXNQcmVzZW50KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJ0cmFuc21pdEJ1cnN0TGltaXQgKDEpOiAlZFxuIiksIHBGcm0tPkhUSW5mby50cmFuc21pdEJ1cnN0TGltaXQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIm9ic3NOb25IVFN0YVByZXNlbnQgKDEpOiAlZFxuIiksIHBGcm0tPkhUSW5mby5vYnNzTm9uSFRTdGFQcmVzZW50KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJyZXNlcnZlZCAoMTEpOiAlZFxuIiksIHBGcm0tPkhUSW5mby5yZXNlcnZlZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYmFzaWNTVEJDTUNTICg3KTogJWRcbiIpLCBwRnJtLT5IVEluZm8uYmFzaWNTVEJDTUNTKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJkdWFsQ1RTUHJvdGVjdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+SFRJbmZvLmR1YWxDVFNQcm90ZWN0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJzZWNvbmRhcnlCZWFjb24gKDEpOiAlZFxuIiksIHBGcm0tPkhUSW5mby5zZWNvbmRhcnlCZWFjb24pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImxzaWdUWE9QUHJvdGVjdGlvbkZ1bGxTdXBwb3J0ICgxKTogJWRcbiIpLCBwRnJtLT5IVEluZm8ubHNpZ1RYT1BQcm90ZWN0aW9uRnVsbFN1cHBvcnQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoInBjb0FjdGl2ZSAoMSk6ICVkXG4iKSwgcEZybS0+SFRJbmZvLnBjb0FjdGl2ZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgicGNvUGhhc2UgKDEpOiAlZFxuIiksIHBGcm0tPkhUSW5mby5wY29QaGFzZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgicmVzZXJ2ZWQyICg0KTogJWRcbiIpLCBwRnJtLT5IVEluZm8ucmVzZXJ2ZWQyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+SFRJbmZvLmJhc2ljTUNTU2V0LCAxNik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgibnVtX3JzdmQ6ICVkLlxuIiksIHBGcm0tPkhUSW5mby5udW1fcnN2ZCk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApIHBGcm0tPkhUSW5mby5yc3ZkLCBwRnJtLT5IVEluZm8ubnVtX3JzdmQpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJMaW5rSWRlbnRpZmllcjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5MaW5rSWRlbnRpZmllci5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPkxpbmtJZGVudGlmaWVyLmJzc2lkLCA2KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuSW5pdFN0YUFkZHIsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5SZXNwU3RhQWRkciwgNik7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIldNTUluZm9TdGF0aW9uOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPldNTUluZm9TdGF0aW9uLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+V01NSW5mb1N0YXRpb24udmVyc2lvbiwgMSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWN2b191YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+V01NSW5mb1N0YXRpb24uYWN2b191YXBzZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWN2aV91YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+V01NSW5mb1N0YXRpb24uYWN2aV91YXBzZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWNia191YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+V01NSW5mb1N0YXRpb24uYWNia191YXBzZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWNiZV91YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+V01NSW5mb1N0YXRpb24uYWNiZV91YXBzZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgicmVzZXJ2ZWQxICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5yZXNlcnZlZDEpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIm1heF9zcF9sZW5ndGggKDIpOiAlZFxuIiksIHBGcm0tPldNTUluZm9TdGF0aW9uLm1heF9zcF9sZW5ndGgpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoInJlc2VydmVkMiAoMSk6ICVkXG4iKSwgcEZybS0+V01NSW5mb1N0YXRpb24ucmVzZXJ2ZWQyKTsKKyAgICAgICAgfQorICAgIH0KKyMgICBlbmRpZiAvLyBET1QxMUZfRFVNUF9GUkFNRVMKKyAgICByZXR1cm4gc3RhdHVzOworCit9IC8qIEVuZCBkb3QxMWZVbnBhY2tURExTU2V0dXBDbmYuICovCisKKyAgICBzdGF0aWMgY29uc3QgdEZGRGVmbiBGRlNfVERMU1NldHVwUmVxW10gPSB7CisgICAgICAgIHsgIkNhdGVnb3J5Iiwgb2Zmc2V0b2YodERvdDExZlRETFNTZXR1cFJlcSwgQ2F0ZWdvcnkpLCBTaWdGZkNhdGVnb3J5ICwgRE9UMTFGX0ZGX0NBVEVHT1JZX0xFTiwgfSwKKyAgICAgICAgeyAiQWN0aW9uIiwgb2Zmc2V0b2YodERvdDExZlRETFNTZXR1cFJlcSwgQWN0aW9uKSwgU2lnRmZBY3Rpb24gLCBET1QxMUZfRkZfQUNUSU9OX0xFTiwgfSwKKyAgICAgICAgeyAiRGlhbG9nVG9rZW4iLCBvZmZzZXRvZih0RG90MTFmVERMU1NldHVwUmVxLCBEaWFsb2dUb2tlbiksIFNpZ0ZmRGlhbG9nVG9rZW4gLCBET1QxMUZfRkZfRElBTE9HVE9LRU5fTEVOLCB9LAorICAgICAgICB7ICJDYXBhYmlsaXRpZXMiLCBvZmZzZXRvZih0RG90MTFmVERMU1NldHVwUmVxLCBDYXBhYmlsaXRpZXMpLCBTaWdGZkNhcGFiaWxpdGllcyAsIERPVDExRl9GRl9DQVBBQklMSVRJRVNfTEVOLCB9LAorICAgIHsgTlVMTCwgMCwgMCwgMCx9LAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgdElFRGVmbiBJRVNfVERMU1NldHVwUmVxW10gPSB7CisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU1NldHVwUmVxLCBTdXBwUmF0ZXMpLCBvZmZzZXRvZih0RG90MTFmSUVTdXBwUmF0ZXMsIHByZXNlbnQpLCAwLCAiU3VwcFJhdGVzIiAsIDAsIDIsIDE0LCBTaWdJZVN1cHBSYXRlcywgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX1NVUFBSQVRFUywgMSwgfSwKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTU2V0dXBSZXEsIENvdW50cnkpLCBvZmZzZXRvZih0RG90MTFmSUVDb3VudHJ5LCBwcmVzZW50KSwgMCwgIkNvdW50cnkiICwgMCwgNSwgMjU3LCBTaWdJZUNvdW50cnksIHswLCAwLCAwLCAwLCAwfSwgMCwgRE9UMTFGX0VJRF9DT1VOVFJZLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cFJlcSwgRXh0U3VwcFJhdGVzKSwgb2Zmc2V0b2YodERvdDExZklFRXh0U3VwcFJhdGVzLCBwcmVzZW50KSwgMCwgIkV4dFN1cHBSYXRlcyIgLCAwLCAzLCAxNCwgU2lnSWVFeHRTdXBwUmF0ZXMsIHswLCAwLCAwLCAwLCAwfSwgMCwgRE9UMTFGX0VJRF9FWFRTVVBQUkFURVMsIDAsIH0sCisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU1NldHVwUmVxLCBTdXBwQ2hhbm5lbHMpLCBvZmZzZXRvZih0RG90MTFmSUVTdXBwQ2hhbm5lbHMsIHByZXNlbnQpLCAwLCAiU3VwcENoYW5uZWxzIiAsIDAsIDQsIDk4LCBTaWdJZVN1cHBDaGFubmVscywgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX1NVUFBDSEFOTkVMUywgMCwgfSwKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTU2V0dXBSZXEsIFJTTiksIG9mZnNldG9mKHREb3QxMWZJRVJTTiwgcHJlc2VudCksIDAsICJSU04iICwgMCwgOCwgMTEyLCBTaWdJZVJTTiwgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX1JTTiwgMCwgfSwKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTU2V0dXBSZXEsIEV4dENhcCksIG9mZnNldG9mKHREb3QxMWZJRUV4dENhcCwgcHJlc2VudCksIDAsICJFeHRDYXAiICwgMCwgMTAsIDEwLCBTaWdJZUV4dENhcCwgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX0VYVENBUCwgMCwgfSwKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTU2V0dXBSZXEsIFFPU0NhcHNTdGF0aW9uKSwgb2Zmc2V0b2YodERvdDExZklFUU9TQ2Fwc1N0YXRpb24sIHByZXNlbnQpLCAwLCAiUU9TQ2Fwc1N0YXRpb24iICwgMCwgMywgMywgU2lnSWVRT1NDYXBzU3RhdGlvbiwgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX1FPU0NBUFNTVEFUSU9OLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cFJlcSwgRlRJbmZvKSwgb2Zmc2V0b2YodERvdDExZklFRlRJbmZvLCBwcmVzZW50KSwgMCwgIkZUSW5mbyIgLCAwLCA4NCwgMTg3LCBTaWdJZUZUSW5mbywgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX0ZUSU5GTywgMCwgfSwKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTU2V0dXBSZXEsIEZUVGltZW91dEludGVydmFsKSwgb2Zmc2V0b2YodERvdDExZklFRlRUaW1lb3V0SW50ZXJ2YWwsIHByZXNlbnQpLCAwLCAiRlRUaW1lb3V0SW50ZXJ2YWwiICwgMCwgNywgNywgU2lnSWVGVFRpbWVvdXRJbnRlcnZhbCwgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX0ZUVElNRU9VVElOVEVSVkFMLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cFJlcSwgUklDRGF0YSksIG9mZnNldG9mKHREb3QxMWZJRVJJQ0RhdGEsIHByZXNlbnQpLCAwLCAiUklDRGF0YSIgLCAwLCA2LCA2LCBTaWdJZVJJQ0RhdGEsIHswLCAwLCAwLCAwLCAwfSwgMCwgRE9UMTFGX0VJRF9SSUNEQVRBLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cFJlcSwgSFRDYXBzKSwgb2Zmc2V0b2YodERvdDExZklFSFRDYXBzLCBwcmVzZW50KSwgMCwgIkhUQ2FwcyIgLCAwLCAyOCwgNjAsIFNpZ0llSFRDYXBzLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfSFRDQVBTLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cFJlcSwgTGlua0lkZW50aWZpZXIpLCBvZmZzZXRvZih0RG90MTFmSUVMaW5rSWRlbnRpZmllciwgcHJlc2VudCksIDAsICJMaW5rSWRlbnRpZmllciIgLCAwLCAyMCwgMjAsIFNpZ0llTGlua0lkZW50aWZpZXIsIHswLCAwLCAwLCAwLCAwfSwgMCwgRE9UMTFGX0VJRF9MSU5LSURFTlRJRklFUiwgMSwgfSwKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTU2V0dXBSZXEsIFdNTUluZm9TdGF0aW9uKSwgb2Zmc2V0b2YodERvdDExZklFV01NSW5mb1N0YXRpb24sIHByZXNlbnQpLCAwLCAiV01NSW5mb1N0YXRpb24iICwgMCwgOSwgOSwgU2lnSWVXTU1JbmZvU3RhdGlvbiwgezAsIDgwLCAyNDIsIDIsIDB9LCA1LCBET1QxMUZfRUlEX1dNTUlORk9TVEFUSU9OLCAwLCB9LAorICAgIHswLCAwLCAwLCBOVUxMLCAwLCAwLCAwLCAwLCB7MCwgMCwgMCwgMCwgMH0sIDAsIDB4ZmYsIDAsIH0sICAgIH07CisKK3RBTklfVTMyIGRvdDExZlVucGFja1RETFNTZXR1cFJlcSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1UzMiBuQnVmLCB0RG90MTFmVERMU1NldHVwUmVxICpwRnJtKQoreworICAgIHRBTklfVTMyIGkgPSAwOworICAgIHRBTklfVTMyIHN0YXR1cyA9IDA7CisgICAgc3RhdHVzID0gVW5wYWNrQ29yZShwQ3R4LCBwQnVmLCBuQnVmLCBGRlNfVERMU1NldHVwUmVxLCBJRVNfVERMU1NldHVwUmVxLCAoIHRBTklfVTgqIClwRnJtLCBzaXplb2YoKnBGcm0pKTsKKworICAgICh2b2lkKWk7CisjICAgaWZkZWYgRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgaWYgKCFET1QxMUZfRkFJTEVEKHN0YXR1cykpCisgICAgeworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiVW5wYWNrZWQgdGhlIFRETFNTZXR1cFJlcTpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIHBCdWYsIG5CdWYpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgidG86XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJDYXRlZ29yeTpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5DYXRlZ29yeS5jYXRlZ29yeSwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJBY3Rpb246XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+QWN0aW9uLmFjdGlvbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJEaWFsb2dUb2tlbjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5EaWFsb2dUb2tlbi50b2tlbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJDYXBhYmlsaXRpZXM6XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJlc3MgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5lc3MpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiaWJzcyAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmlic3MpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiY2ZQb2xsYWJsZSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmNmUG9sbGFibGUpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiY2ZQb2xsUmVxICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuY2ZQb2xsUmVxKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInByaXZhY3kgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5wcml2YWN5KTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInNob3J0UHJlYW1ibGUgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5zaG9ydFByZWFtYmxlKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInBiY2MgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5wYmNjKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImNoYW5uZWxBZ2lsaXR5ICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuY2hhbm5lbEFnaWxpdHkpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgic3BlY3RydW1NZ3QgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5zcGVjdHJ1bU1ndCk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJxb3MgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5xb3MpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgic2hvcnRTbG90VGltZSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLnNob3J0U2xvdFRpbWUpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiYXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmFwc2QpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicnJtICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMucnJtKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImRzc3NPZmRtICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuZHNzc09mZG0pOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZGVsYXllZEJBICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuZGVsYXllZEJBKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImltbWVkaWF0ZUJBICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuaW1tZWRpYXRlQkEpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiU3VwcFJhdGVzOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlN1cHBSYXRlcy5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibnVtX3JhdGVzOiAlZC5cbiIpLCBwRnJtLT5TdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+U3VwcFJhdGVzLnJhdGVzLCBwRnJtLT5TdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiQ291bnRyeTpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5Db3VudHJ5LnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+Q291bnRyeS5jb3VudHJ5LCAzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJudW1fdHJpcGxldHM6ICVkLlxuIiksIHBGcm0tPkNvdW50cnkubnVtX3RyaXBsZXRzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+Q291bnRyeS50cmlwbGV0cywgMyAqIHBGcm0tPkNvdW50cnkubnVtX3RyaXBsZXRzKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiRXh0U3VwcFJhdGVzOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkV4dFN1cHBSYXRlcy5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibnVtX3JhdGVzOiAlZC5cbiIpLCBwRnJtLT5FeHRTdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+RXh0U3VwcFJhdGVzLnJhdGVzLCBwRnJtLT5FeHRTdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiU3VwcENoYW5uZWxzOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlN1cHBDaGFubmVscy5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibnVtX2JhbmRzOiAlZC5cbiIpLCBwRnJtLT5TdXBwQ2hhbm5lbHMubnVtX2JhbmRzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+U3VwcENoYW5uZWxzLmJhbmRzLCAyICogcEZybS0+U3VwcENoYW5uZWxzLm51bV9iYW5kcyk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIlJTTjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5SU04ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5SU04udmVyc2lvbiwgMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJTTi5ncF9jaXBoZXJfc3VpdGUsIDQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5SU04ucHdpc2VfY2lwaGVyX3N1aXRlX2NvdW50LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+UlNOLnB3aXNlX2NpcGhlcl9zdWl0ZXMsIDQgKiBwRnJtLT5SU04ucHdpc2VfY2lwaGVyX3N1aXRlX2NvdW50KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLmFrbV9zdWl0ZV9jb3VudCwgMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApIHBGcm0tPlJTTi5ha21fc3VpdGVzLCA0ICogcEZybS0+UlNOLmFrbV9zdWl0ZV9jb3VudCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicHJlYXV0aCAoMSk6ICVkXG4iKSwgcEZybS0+UlNOLnByZWF1dGgpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIm5vX3B3aXNlICgxKTogJWRcbiIpLCBwRnJtLT5SU04ubm9fcHdpc2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIlBUS1NBX3JlcGxheV9jb3VudGVyICgyKTogJWRcbiIpLCBwRnJtLT5SU04uUFRLU0FfcmVwbGF5X2NvdW50ZXIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIkdUS1NBX3JlcGxheV9jb3VudGVyICgyKTogJWRcbiIpLCBwRnJtLT5SU04uR1RLU0FfcmVwbGF5X2NvdW50ZXIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInJlc2VydmVkICgxMCk6ICVkXG4iKSwgcEZybS0+UlNOLnJlc2VydmVkKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLnBta2lkX2NvdW50LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+UlNOLnBta2lkLCAxNiAqIHBGcm0tPlJTTi5wbWtpZF9jb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIkV4dENhcDpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5FeHRDYXAucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImJzc0NvZXhpc3RNZ210U3VwcG9ydCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmJzc0NvZXhpc3RNZ210U3VwcG9ydCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQxICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQxKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJleHRDaGFuU3dpdGNoICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuZXh0Q2hhblN3aXRjaCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQyICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJwc21wQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucHNtcENhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQzICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJzcHNtcENhcCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnNwc21wQ2FwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJldmVudCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmV2ZW50KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJkaWFnbm9zdGljcyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmRpYWdub3N0aWNzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJtdWx0aURpYWdub3N0aWNzICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAubXVsdGlEaWFnbm9zdGljcyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibG9jVHJhY2tpbmcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5sb2NUcmFja2luZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiRk1TICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRk1TKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJwcm94eUFSUFNlcnZpY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5wcm94eUFSUFNlcnZpY2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImNvTG9jSW50ZlJlcG9ydGluZyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmNvTG9jSW50ZlJlcG9ydGluZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiY2l2aWNMb2MgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5jaXZpY0xvYyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZ2Vvc3BhdGlhbExvYyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmdlb3NwYXRpYWxMb2MpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIlRGUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRGUyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgid25tU2xlZXBNb2RlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAud25tU2xlZXBNb2RlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJ0aW1Ccm9hZGNhc3QgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC50aW1Ccm9hZGNhc3QpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImJzc1RyYW5zaXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5ic3NUcmFuc2l0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJxb3NUcmFmZmljQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucW9zVHJhZmZpY0NhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiYWNTdGFDbnQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5hY1N0YUNudCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibXVsdGlCU1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm11bHRpQlNTSUQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInRpbWluZ01lYXMgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC50aW1pbmdNZWFzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJjaGFuVXNhZ2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5jaGFuVXNhZ2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInNzaWRMaXN0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuc3NpZExpc3QpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIkRNUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLkRNUyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiVVRDVFNGT2Zmc2V0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVVRDVFNGT2Zmc2V0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJURExTUGVlclVBUFNEQnVmZmVyU1RBICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJVQVBTREJ1ZmZlclNUQSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiVERMU1BlZXJQU01TdXBwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJQU01TdXBwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJURExTQ2hhbm5lbFN3aXRjaGluZyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNDaGFubmVsU3dpdGNoaW5nKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJpbnRlcndvcmtpbmdTZXJ2aWNlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuaW50ZXJ3b3JraW5nU2VydmljZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicW9zTWFwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucW9zTWFwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJFQlIgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5FQlIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInNzcG5JbnRlcmZhY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5zc3BuSW50ZXJmYWNlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyZXNlcnZlZDQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIm1zZ0NGQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAubXNnQ0ZDYXApOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIlRETFNTdXBwb3J0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1N1cHBvcnQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIlRETFNQcm9oaWJpdGVkICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1Byb2hpYml0ZWQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIlRETFNDaGFuU3dpdFByb2hpYml0ZWQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTQ2hhblN3aXRQcm9oaWJpdGVkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyZWplY3RVbmFkbWl0dGVkVHJhZmZpYyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlamVjdFVuYWRtaXR0ZWRUcmFmZmljKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJzZXJ2aWNlSW50ZXJ2YWxHcmFudWxhcml0eSAoMyk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnNlcnZpY2VJbnRlcnZhbEdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJpZGVudGlmaWVyTG9jICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuaWRlbnRpZmllckxvYyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgidWFwc2RDb2V4aXN0ZW5jZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnVhcHNkQ29leGlzdGVuY2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIndubU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubU5vdGlmaWNhdGlvbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQ1ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ1KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJVVEY4U1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVURjhTU0lEKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyZXNlcnZlZDYgKDEyKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJURExTV2lkZXJCVyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNXaWRlckJXKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJvcGVyTW9kZU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm9wZXJNb2RlTm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyZXNlcnZlZDcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDcpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJRT1NDYXBzU3RhdGlvbjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5RT1NDYXBzU3RhdGlvbi5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibW9yZV9kYXRhX2FjayAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24ubW9yZV9kYXRhX2Fjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibWF4X3NwX2xlbmd0aCAoMik6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24ubWF4X3NwX2xlbmd0aCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicWFjayAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24ucWFjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiYWNiZV91YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24uYWNiZV91YXBzZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiYWNia191YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24uYWNia191YXBzZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiYWN2aV91YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24uYWN2aV91YXBzZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiYWN2b191YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24uYWN2b191YXBzZCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIkZUSW5mbzpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInJlc2VydmVkICg4KTogJWRcbiIpLCBwRnJtLT5GVEluZm8ucmVzZXJ2ZWQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIklFQ291bnQgKDgpOiAlZFxuIiksIHBGcm0tPkZUSW5mby5JRUNvdW50KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLk1JQywgMTYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uQW5vbmNlLCAzMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5Tbm9uY2UsIDMyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJSMUtIX0lEOlxuIikpOworICAgICAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8uUjFLSF9JRC5wcmVzZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5SMUtIX0lELlBNS19SMV9JRCwgNik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiR1RLOlxuIikpOworICAgICAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8uR1RLLnByZXNlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJrZXlJZCAoMik6ICVkXG4iKSwgcEZybS0+RlRJbmZvLkdUSy5rZXlJZCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInJlc2VydmVkICgxNCk6ICVkXG4iKSwgcEZybS0+RlRJbmZvLkdUSy5yZXNlcnZlZCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uR1RLLmtleUxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uR1RLLlJTQywgOCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIm51bV9rZXk6ICVkLlxuIiksIHBGcm0tPkZUSW5mby5HVEsubnVtX2tleSk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSBwRnJtLT5GVEluZm8uR1RLLmtleSwgcEZybS0+RlRJbmZvLkdUSy5udW1fa2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJSMEtIX0lEOlxuIikpOworICAgICAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8uUjBLSF9JRC5wcmVzZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibnVtX1BNS19SMF9JRDogJWQuXG4iKSwgcEZybS0+RlRJbmZvLlIwS0hfSUQubnVtX1BNS19SMF9JRCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSBwRnJtLT5GVEluZm8uUjBLSF9JRC5QTUtfUjBfSUQsIHBGcm0tPkZUSW5mby5SMEtIX0lELm51bV9QTUtfUjBfSUQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJGVFRpbWVvdXRJbnRlcnZhbDpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5GVFRpbWVvdXRJbnRlcnZhbC5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUVGltZW91dEludGVydmFsLnRpbWVvdXRUeXBlLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+RlRUaW1lb3V0SW50ZXJ2YWwudGltZW91dFZhbHVlLCA0KTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiUklDRGF0YTpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5SSUNEYXRhLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+UklDRGF0YS5JZGVudGlmaWVyLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+UklDRGF0YS5yZXNvdXJjZURlc2NDb3VudCwgMSk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJJQ0RhdGEuc3RhdHVzQ29kZSwgMik7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIkhUQ2FwczpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5IVENhcHMucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImFkdkNvZGluZ0NhcCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmFkdkNvZGluZ0NhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgic3VwcG9ydGVkQ2hhbm5lbFdpZHRoU2V0ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuc3VwcG9ydGVkQ2hhbm5lbFdpZHRoU2V0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJtaW1vUG93ZXJTYXZlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubWltb1Bvd2VyU2F2ZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZ3JlZW5GaWVsZCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmdyZWVuRmllbGQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInNob3J0R0kyME1IeiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnNob3J0R0kyME1Ieik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgic2hvcnRHSTQwTUh6ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuc2hvcnRHSTQwTUh6KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJ0eFNUQkMgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50eFNUQkMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInJ4U1RCQyAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnJ4U1RCQyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZGVsYXllZEJBICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZGVsYXllZEJBKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJtYXhpbWFsQU1TRFVzaXplICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubWF4aW1hbEFNU0RVc2l6ZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZHNzc0Nja01vZGU0ME1IeiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmRzc3NDY2tNb2RlNDBNSHopOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInBzbXAgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5wc21wKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJzdGJjQ29udHJvbEZyYW1lICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuc3RiY0NvbnRyb2xGcmFtZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibHNpZ1RYT1BQcm90ZWN0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubHNpZ1RYT1BQcm90ZWN0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJtYXhSeEFNUERVRmFjdG9yICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubWF4UnhBTVBEVUZhY3Rvcik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibXBkdURlbnNpdHkgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5tcGR1RGVuc2l0eSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQxICgzKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+SFRDYXBzLnN1cHBvcnRlZE1DU1NldCwgMTYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInBjbyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnBjbyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgidHJhbnNpdGlvblRpbWUgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50cmFuc2l0aW9uVGltZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQyICg1KTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJtY3NGZWVkYmFjayAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLm1jc0ZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyZXNlcnZlZDMgKDYpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yZXNlcnZlZDMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInR4QkYgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50eEJGKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyeFN0YWdnZXJlZFNvdW5kaW5nICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucnhTdGFnZ2VyZWRTb3VuZGluZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgidHhTdGFnZ2VyZWRTb3VuZGluZyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnR4U3RhZ2dlcmVkU291bmRpbmcpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInJ4WkxGICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucnhaTEYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInR4WkxGICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMudHhaTEYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImltcGxpY2l0VHhCRiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmltcGxpY2l0VHhCRik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiY2FsaWJyYXRpb24gKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5jYWxpYnJhdGlvbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZXhwbGljaXRDU0lUeEJGICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRDU0lUeEJGKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJleHBsaWNpdFVuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRVbmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZXhwbGljaXRCRkNTSUZlZWRiYWNrICgzKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRCRkNTSUZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJleHBsaWNpdFVuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4RmVlZGJhY2sgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdFVuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4RmVlZGJhY2spOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImV4cGxpY2l0Q29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4RmVlZGJhY2sgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdENvbXByZXNzZWRTdGVlcmluZ01hdHJpeEZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJjc2lOdW1CRkFudGVubmFlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuY3NpTnVtQkZBbnRlbm5hZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgidW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMudW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJjb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4QkZBbnRlbm5hZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQ0ICg3KTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQ0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhbnRlbm5hU2VsZWN0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuYW50ZW5uYVNlbGVjdGlvbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZXhwbGljaXRDU0lGZWVkYmFja1R4ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRDU0lGZWVkYmFja1R4KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhbnRlbm5hSW5kaWNlc0ZlZWRiYWNrVHggKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5hbnRlbm5hSW5kaWNlc0ZlZWRiYWNrVHgpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImV4cGxpY2l0Q1NJRmVlZGJhY2sgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdENTSUZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhbnRlbm5hSW5kaWNlc0ZlZWRiYWNrICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuYW50ZW5uYUluZGljZXNGZWVkYmFjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicnhBUyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnJ4QVMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInR4U291bmRpbmdQUERVcyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnR4U291bmRpbmdQUERVcyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQ1ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQ1KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJudW1fcnN2ZDogJWQuXG4iKSwgcEZybS0+SFRDYXBzLm51bV9yc3ZkKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+SFRDYXBzLnJzdmQsIHBGcm0tPkhUQ2Fwcy5udW1fcnN2ZCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIkxpbmtJZGVudGlmaWVyOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkxpbmtJZGVudGlmaWVyLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuYnNzaWQsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5Jbml0U3RhQWRkciwgNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApJnBGcm0tPkxpbmtJZGVudGlmaWVyLlJlc3BTdGFBZGRyLCA2KTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiV01NSW5mb1N0YXRpb246XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+V01NSW5mb1N0YXRpb24ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5XTU1JbmZvU3RhdGlvbi52ZXJzaW9uLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhY3ZvX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY3ZvX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhY3ZpX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY3ZpX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhY2JrX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY2JrX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhY2JlX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY2JlX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyZXNlcnZlZDEgKDEpOiAlZFxuIiksIHBGcm0tPldNTUluZm9TdGF0aW9uLnJlc2VydmVkMSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibWF4X3NwX2xlbmd0aCAoMik6ICVkXG4iKSwgcEZybS0+V01NSW5mb1N0YXRpb24ubWF4X3NwX2xlbmd0aCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQyICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5yZXNlcnZlZDIpOworICAgICAgICB9CisgICAgfQorIyAgIGVuZGlmIC8vIERPVDExRl9EVU1QX0ZSQU1FUworICAgIHJldHVybiBzdGF0dXM7CisKK30gLyogRW5kIGRvdDExZlVucGFja1RETFNTZXR1cFJlcS4gKi8KKworICAgIHN0YXRpYyBjb25zdCB0RkZEZWZuIEZGU19URExTU2V0dXBSc3BbXSA9IHsKKyAgICAgICAgeyAiQ2F0ZWdvcnkiLCBvZmZzZXRvZih0RG90MTFmVERMU1NldHVwUnNwLCBDYXRlZ29yeSksIFNpZ0ZmQ2F0ZWdvcnkgLCBET1QxMUZfRkZfQ0FURUdPUllfTEVOLCB9LAorICAgICAgICB7ICJBY3Rpb24iLCBvZmZzZXRvZih0RG90MTFmVERMU1NldHVwUnNwLCBBY3Rpb24pLCBTaWdGZkFjdGlvbiAsIERPVDExRl9GRl9BQ1RJT05fTEVOLCB9LAorICAgICAgICB7ICJTdGF0dXMiLCBvZmZzZXRvZih0RG90MTFmVERMU1NldHVwUnNwLCBTdGF0dXMpLCBTaWdGZlN0YXR1cyAsIERPVDExRl9GRl9TVEFUVVNfTEVOLCB9LAorICAgICAgICB7ICJEaWFsb2dUb2tlbiIsIG9mZnNldG9mKHREb3QxMWZURExTU2V0dXBSc3AsIERpYWxvZ1Rva2VuKSwgU2lnRmZEaWFsb2dUb2tlbiAsIERPVDExRl9GRl9ESUFMT0dUT0tFTl9MRU4sIH0sCisgICAgICAgIHsgIkNhcGFiaWxpdGllcyIsIG9mZnNldG9mKHREb3QxMWZURExTU2V0dXBSc3AsIENhcGFiaWxpdGllcyksIFNpZ0ZmQ2FwYWJpbGl0aWVzICwgRE9UMTFGX0ZGX0NBUEFCSUxJVElFU19MRU4sIH0sCisgICAgeyBOVUxMLCAwLCAwLCAwLH0sCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB0SUVEZWZuIElFU19URExTU2V0dXBSc3BbXSA9IHsKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTU2V0dXBSc3AsIFN1cHBSYXRlcyksIG9mZnNldG9mKHREb3QxMWZJRVN1cHBSYXRlcywgcHJlc2VudCksIDAsICJTdXBwUmF0ZXMiICwgMCwgMiwgMTQsIFNpZ0llU3VwcFJhdGVzLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfU1VQUFJBVEVTLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cFJzcCwgQ291bnRyeSksIG9mZnNldG9mKHREb3QxMWZJRUNvdW50cnksIHByZXNlbnQpLCAwLCAiQ291bnRyeSIgLCAwLCA1LCAyNTcsIFNpZ0llQ291bnRyeSwgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX0NPVU5UUlksIDAsIH0sCisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU1NldHVwUnNwLCBFeHRTdXBwUmF0ZXMpLCBvZmZzZXRvZih0RG90MTFmSUVFeHRTdXBwUmF0ZXMsIHByZXNlbnQpLCAwLCAiRXh0U3VwcFJhdGVzIiAsIDAsIDMsIDE0LCBTaWdJZUV4dFN1cHBSYXRlcywgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX0VYVFNVUFBSQVRFUywgMCwgfSwKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTU2V0dXBSc3AsIFN1cHBDaGFubmVscyksIG9mZnNldG9mKHREb3QxMWZJRVN1cHBDaGFubmVscywgcHJlc2VudCksIDAsICJTdXBwQ2hhbm5lbHMiICwgMCwgNCwgOTgsIFNpZ0llU3VwcENoYW5uZWxzLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfU1VQUENIQU5ORUxTLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cFJzcCwgUlNOKSwgb2Zmc2V0b2YodERvdDExZklFUlNOLCBwcmVzZW50KSwgMCwgIlJTTiIgLCAwLCA4LCAxMTIsIFNpZ0llUlNOLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfUlNOLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cFJzcCwgRXh0Q2FwKSwgb2Zmc2V0b2YodERvdDExZklFRXh0Q2FwLCBwcmVzZW50KSwgMCwgIkV4dENhcCIgLCAwLCAxMCwgMTAsIFNpZ0llRXh0Q2FwLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfRVhUQ0FQLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cFJzcCwgUU9TQ2Fwc1N0YXRpb24pLCBvZmZzZXRvZih0RG90MTFmSUVRT1NDYXBzU3RhdGlvbiwgcHJlc2VudCksIDAsICJRT1NDYXBzU3RhdGlvbiIgLCAwLCAzLCAzLCBTaWdJZVFPU0NhcHNTdGF0aW9uLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfUU9TQ0FQU1NUQVRJT04sIDAsIH0sCisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU1NldHVwUnNwLCBGVEluZm8pLCBvZmZzZXRvZih0RG90MTFmSUVGVEluZm8sIHByZXNlbnQpLCAwLCAiRlRJbmZvIiAsIDAsIDg0LCAxODcsIFNpZ0llRlRJbmZvLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfRlRJTkZPLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cFJzcCwgRlRUaW1lb3V0SW50ZXJ2YWwpLCBvZmZzZXRvZih0RG90MTFmSUVGVFRpbWVvdXRJbnRlcnZhbCwgcHJlc2VudCksIDAsICJGVFRpbWVvdXRJbnRlcnZhbCIgLCAwLCA3LCA3LCBTaWdJZUZUVGltZW91dEludGVydmFsLCB7MCwgMCwgMCwgMCwgMH0sIDAsIERPVDExRl9FSURfRlRUSU1FT1VUSU5URVJWQUwsIDAsIH0sCisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU1NldHVwUnNwLCBSSUNEYXRhKSwgb2Zmc2V0b2YodERvdDExZklFUklDRGF0YSwgcHJlc2VudCksIDAsICJSSUNEYXRhIiAsIDAsIDYsIDYsIFNpZ0llUklDRGF0YSwgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX1JJQ0RBVEEsIDAsIH0sCisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU1NldHVwUnNwLCBIVENhcHMpLCBvZmZzZXRvZih0RG90MTFmSUVIVENhcHMsIHByZXNlbnQpLCAwLCAiSFRDYXBzIiAsIDAsIDI4LCA2MCwgU2lnSWVIVENhcHMsIHswLCAwLCAwLCAwLCAwfSwgMCwgRE9UMTFGX0VJRF9IVENBUFMsIDAsIH0sCisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU1NldHVwUnNwLCBMaW5rSWRlbnRpZmllciksIG9mZnNldG9mKHREb3QxMWZJRUxpbmtJZGVudGlmaWVyLCBwcmVzZW50KSwgMCwgIkxpbmtJZGVudGlmaWVyIiAsIDAsIDIwLCAyMCwgU2lnSWVMaW5rSWRlbnRpZmllciwgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX0xJTktJREVOVElGSUVSLCAwLCB9LAorICAgICAgICB7b2Zmc2V0b2YodERvdDExZlRETFNTZXR1cFJzcCwgV01NSW5mb1N0YXRpb24pLCBvZmZzZXRvZih0RG90MTFmSUVXTU1JbmZvU3RhdGlvbiwgcHJlc2VudCksIDAsICJXTU1JbmZvU3RhdGlvbiIgLCAwLCA5LCA5LCBTaWdJZVdNTUluZm9TdGF0aW9uLCB7MCwgODAsIDI0MiwgMiwgMH0sIDUsIERPVDExRl9FSURfV01NSU5GT1NUQVRJT04sIDAsIH0sCisgICAgezAsIDAsIDAsIE5VTEwsIDAsIDAsIDAsIDAsIHswLCAwLCAwLCAwLCAwfSwgMCwgMHhmZiwgMCwgfSwgICAgfTsKKwordEFOSV9VMzIgZG90MTFmVW5wYWNrVERMU1NldHVwUnNwKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHRBTklfVTggKnBCdWYsIHRBTklfVTMyIG5CdWYsIHREb3QxMWZURExTU2V0dXBSc3AgKnBGcm0pCit7CisgICAgdEFOSV9VMzIgaSA9IDA7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICBzdGF0dXMgPSBVbnBhY2tDb3JlKHBDdHgsIHBCdWYsIG5CdWYsIEZGU19URExTU2V0dXBSc3AsIElFU19URExTU2V0dXBSc3AsICggdEFOSV9VOCogKXBGcm0sIHNpemVvZigqcEZybSkpOworCisgICAgKHZvaWQpaTsKKyMgICBpZmRlZiBET1QxMUZfRFVNUF9GUkFNRVMKKyAgICBpZiAoIURPVDExRl9GQUlMRUQoc3RhdHVzKSkKKyAgICB7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJVbnBhY2tlZCB0aGUgVERMU1NldHVwUnNwOlxuIikpOworICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgcEJ1ZiwgbkJ1Zik7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJ0bzpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIkNhdGVnb3J5OlxuIikpOworICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkNhdGVnb3J5LmNhdGVnb3J5LCAxKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIkFjdGlvbjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5BY3Rpb24uYWN0aW9uLCAxKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlN0YXR1czpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5TdGF0dXMuc3RhdHVzLCAyKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIkRpYWxvZ1Rva2VuOlxuIikpOworICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkRpYWxvZ1Rva2VuLnRva2VuLCAxKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIkNhcGFiaWxpdGllczpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImVzcyAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmVzcyk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJpYnNzICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuaWJzcyk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJjZlBvbGxhYmxlICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuY2ZQb2xsYWJsZSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJjZlBvbGxSZXEgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5jZlBvbGxSZXEpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicHJpdmFjeSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLnByaXZhY3kpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgic2hvcnRQcmVhbWJsZSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLnNob3J0UHJlYW1ibGUpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicGJjYyAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLnBiY2MpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiY2hhbm5lbEFnaWxpdHkgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5jaGFubmVsQWdpbGl0eSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJzcGVjdHJ1bU1ndCAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLnNwZWN0cnVtTWd0KTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInFvcyAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLnFvcyk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJzaG9ydFNsb3RUaW1lICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuc2hvcnRTbG90VGltZSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuYXBzZCk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJycm0gKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5ycm0pOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiZHNzc09mZG0gKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5kc3NzT2ZkbSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJkZWxheWVkQkEgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5kZWxheWVkQkEpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiaW1tZWRpYXRlQkEgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5pbW1lZGlhdGVCQSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJTdXBwUmF0ZXM6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+U3VwcFJhdGVzLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJudW1fcmF0ZXM6ICVkLlxuIiksIHBGcm0tPlN1cHBSYXRlcy5udW1fcmF0ZXMpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSBwRnJtLT5TdXBwUmF0ZXMucmF0ZXMsIHBGcm0tPlN1cHBSYXRlcy5udW1fcmF0ZXMpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJDb3VudHJ5OlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkNvdW50cnkucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5Db3VudHJ5LmNvdW50cnksIDMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIm51bV90cmlwbGV0czogJWQuXG4iKSwgcEZybS0+Q291bnRyeS5udW1fdHJpcGxldHMpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSBwRnJtLT5Db3VudHJ5LnRyaXBsZXRzLCAzICogcEZybS0+Q291bnRyeS5udW1fdHJpcGxldHMpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJFeHRTdXBwUmF0ZXM6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+RXh0U3VwcFJhdGVzLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJudW1fcmF0ZXM6ICVkLlxuIiksIHBGcm0tPkV4dFN1cHBSYXRlcy5udW1fcmF0ZXMpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSBwRnJtLT5FeHRTdXBwUmF0ZXMucmF0ZXMsIHBGcm0tPkV4dFN1cHBSYXRlcy5udW1fcmF0ZXMpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJTdXBwQ2hhbm5lbHM6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+U3VwcENoYW5uZWxzLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJudW1fYmFuZHM6ICVkLlxuIiksIHBGcm0tPlN1cHBDaGFubmVscy5udW1fYmFuZHMpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSBwRnJtLT5TdXBwQ2hhbm5lbHMuYmFuZHMsIDIgKiBwRnJtLT5TdXBwQ2hhbm5lbHMubnVtX2JhbmRzKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiUlNOOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlJTTi5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJTTi52ZXJzaW9uLCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLmdwX2NpcGhlcl9zdWl0ZSwgNCk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJTTi5wd2lzZV9jaXBoZXJfc3VpdGVfY291bnQsIDIpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSBwRnJtLT5SU04ucHdpc2VfY2lwaGVyX3N1aXRlcywgNCAqIHBGcm0tPlJTTi5wd2lzZV9jaXBoZXJfc3VpdGVfY291bnQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5SU04uYWttX3N1aXRlX2NvdW50LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkgcEZybS0+UlNOLmFrbV9zdWl0ZXMsIDQgKiBwRnJtLT5SU04uYWttX3N1aXRlX2NvdW50KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJwcmVhdXRoICgxKTogJWRcbiIpLCBwRnJtLT5SU04ucHJlYXV0aCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibm9fcHdpc2UgKDEpOiAlZFxuIiksIHBGcm0tPlJTTi5ub19wd2lzZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiUFRLU0FfcmVwbGF5X2NvdW50ZXIgKDIpOiAlZFxuIiksIHBGcm0tPlJTTi5QVEtTQV9yZXBsYXlfY291bnRlcik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiR1RLU0FfcmVwbGF5X2NvdW50ZXIgKDIpOiAlZFxuIiksIHBGcm0tPlJTTi5HVEtTQV9yZXBsYXlfY291bnRlcik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicmVzZXJ2ZWQgKDEwKTogJWRcbiIpLCBwRnJtLT5SU04ucmVzZXJ2ZWQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5SU04ucG1raWRfY291bnQsIDIpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSBwRnJtLT5SU04ucG1raWQsIDE2ICogcEZybS0+UlNOLnBta2lkX2NvdW50KTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiRXh0Q2FwOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkV4dENhcC5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiYnNzQ29leGlzdE1nbXRTdXBwb3J0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuYnNzQ29leGlzdE1nbXRTdXBwb3J0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDEgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDEpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImV4dENoYW5Td2l0Y2ggKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5leHRDaGFuU3dpdGNoKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDIgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInBzbXBDYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5wc21wQ2FwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDMgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInNwc21wQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuc3BzbXBDYXApOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImV2ZW50ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuZXZlbnQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImRpYWdub3N0aWNzICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuZGlhZ25vc3RpY3MpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIm11bHRpRGlhZ25vc3RpY3MgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5tdWx0aURpYWdub3N0aWNzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJsb2NUcmFja2luZyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmxvY1RyYWNraW5nKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJGTVMgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5GTVMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInByb3h5QVJQU2VydmljZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnByb3h5QVJQU2VydmljZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiY29Mb2NJbnRmUmVwb3J0aW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuY29Mb2NJbnRmUmVwb3J0aW5nKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJjaXZpY0xvYyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmNpdmljTG9jKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJnZW9zcGF0aWFsTG9jICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuZ2Vvc3BhdGlhbExvYyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiVEZTICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVEZTKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJ3bm1TbGVlcE1vZGUgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC53bm1TbGVlcE1vZGUpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInRpbUJyb2FkY2FzdCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnRpbUJyb2FkY2FzdCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiYnNzVHJhbnNpdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmJzc1RyYW5zaXRpb24pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInFvc1RyYWZmaWNDYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5xb3NUcmFmZmljQ2FwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJhY1N0YUNudCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmFjU3RhQ250KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJtdWx0aUJTU0lEICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAubXVsdGlCU1NJRCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgidGltaW5nTWVhcyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnRpbWluZ01lYXMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImNoYW5Vc2FnZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmNoYW5Vc2FnZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgic3NpZExpc3QgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5zc2lkTGlzdCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiRE1TICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRE1TKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJVVENUU0ZPZmZzZXQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVENUU0ZPZmZzZXQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlRETFNQZWVyVUFQU0RCdWZmZXJTVEEgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclVBUFNEQnVmZmVyU1RBKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJURExTUGVlclBTTVN1cHAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclBTTVN1cHApOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlRETFNDaGFubmVsU3dpdGNoaW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU0NoYW5uZWxTd2l0Y2hpbmcpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImludGVyd29ya2luZ1NlcnZpY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5pbnRlcndvcmtpbmdTZXJ2aWNlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJxb3NNYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5xb3NNYXApOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIkVCUiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLkVCUik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgic3NwbkludGVyZmFjZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnNzcG5JbnRlcmZhY2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInJlc2VydmVkNCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibXNnQ0ZDYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5tc2dDRkNhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiVERMU1N1cHBvcnQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTU3VwcG9ydCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiVERMU1Byb2hpYml0ZWQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUHJvaGliaXRlZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiVERMU0NoYW5Td2l0UHJvaGliaXRlZCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNDaGFuU3dpdFByb2hpYml0ZWQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInJlamVjdFVuYWRtaXR0ZWRUcmFmZmljICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVqZWN0VW5hZG1pdHRlZFRyYWZmaWMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInNlcnZpY2VJbnRlcnZhbEdyYW51bGFyaXR5ICgzKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuc2VydmljZUludGVydmFsR3JhbnVsYXJpdHkpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImlkZW50aWZpZXJMb2MgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5pZGVudGlmaWVyTG9jKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJ1YXBzZENvZXhpc3RlbmNlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAudWFwc2RDb2V4aXN0ZW5jZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgid25tTm90aWZpY2F0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAud25tTm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDUgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDUpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlVURjhTU0lEICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVVRGOFNTSUQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInJlc2VydmVkNiAoMTIpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlRETFNXaWRlckJXICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1dpZGVyQlcpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIm9wZXJNb2RlTm90aWZpY2F0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAub3Blck1vZGVOb3RpZmljYXRpb24pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInJlc2VydmVkNyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNyk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlFPU0NhcHNTdGF0aW9uOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlFPU0NhcHNTdGF0aW9uLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJtb3JlX2RhdGFfYWNrICgxKTogJWRcbiIpLCBwRnJtLT5RT1NDYXBzU3RhdGlvbi5tb3JlX2RhdGFfYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJtYXhfc3BfbGVuZ3RoICgyKTogJWRcbiIpLCBwRnJtLT5RT1NDYXBzU3RhdGlvbi5tYXhfc3BfbGVuZ3RoKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJxYWNrICgxKTogJWRcbiIpLCBwRnJtLT5RT1NDYXBzU3RhdGlvbi5xYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJhY2JlX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5RT1NDYXBzU3RhdGlvbi5hY2JlX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJhY2JrX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5RT1NDYXBzU3RhdGlvbi5hY2JrX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJhY3ZpX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5RT1NDYXBzU3RhdGlvbi5hY3ZpX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJhY3ZvX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5RT1NDYXBzU3RhdGlvbi5hY3ZvX3VhcHNkKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiRlRJbmZvOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicmVzZXJ2ZWQgKDgpOiAlZFxuIiksIHBGcm0tPkZUSW5mby5yZXNlcnZlZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiSUVDb3VudCAoOCk6ICVkXG4iKSwgcEZybS0+RlRJbmZvLklFQ291bnQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uTUlDLCAxNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5Bbm9uY2UsIDMyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLlNub25jZSwgMzIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlIxS0hfSUQ6XG4iKSk7CisgICAgICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5SMUtIX0lELnByZXNlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLlIxS0hfSUQuUE1LX1IxX0lELCA2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJHVEs6XG4iKSk7CisgICAgICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5HVEsucHJlc2VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImtleUlkICgyKTogJWRcbiIpLCBwRnJtLT5GVEluZm8uR1RLLmtleUlkKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicmVzZXJ2ZWQgKDE0KTogJWRcbiIpLCBwRnJtLT5GVEluZm8uR1RLLnJlc2VydmVkKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5HVEsua2V5TGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5HVEsuUlNDLCA4KTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibnVtX2tleTogJWQuXG4iKSwgcEZybS0+RlRJbmZvLkdUSy5udW1fa2V5KTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApIHBGcm0tPkZUSW5mby5HVEsua2V5LCBwRnJtLT5GVEluZm8uR1RLLm51bV9rZXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlIwS0hfSUQ6XG4iKSk7CisgICAgICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5SMEtIX0lELnByZXNlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJudW1fUE1LX1IwX0lEOiAlZC5cbiIpLCBwRnJtLT5GVEluZm8uUjBLSF9JRC5udW1fUE1LX1IwX0lEKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApIHBGcm0tPkZUSW5mby5SMEtIX0lELlBNS19SMF9JRCwgcEZybS0+RlRJbmZvLlIwS0hfSUQubnVtX1BNS19SMF9JRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIkZUVGltZW91dEludGVydmFsOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkZUVGltZW91dEludGVydmFsLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+RlRUaW1lb3V0SW50ZXJ2YWwudGltZW91dFR5cGUsIDEpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5GVFRpbWVvdXRJbnRlcnZhbC50aW1lb3V0VmFsdWUsIDQpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJSSUNEYXRhOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlJJQ0RhdGEucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5SSUNEYXRhLklkZW50aWZpZXIsIDEpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5SSUNEYXRhLnJlc291cmNlRGVzY0NvdW50LCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+UklDRGF0YS5zdGF0dXNDb2RlLCAyKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiSFRDYXBzOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkhUQ2Fwcy5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiYWR2Q29kaW5nQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuYWR2Q29kaW5nQ2FwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJzdXBwb3J0ZWRDaGFubmVsV2lkdGhTZXQgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5zdXBwb3J0ZWRDaGFubmVsV2lkdGhTZXQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIm1pbW9Qb3dlclNhdmUgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5taW1vUG93ZXJTYXZlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJncmVlbkZpZWxkICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZ3JlZW5GaWVsZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgic2hvcnRHSTIwTUh6ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuc2hvcnRHSTIwTUh6KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJzaG9ydEdJNDBNSHogKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5zaG9ydEdJNDBNSHopOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInR4U1RCQyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnR4U1RCQyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicnhTVEJDICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucnhTVEJDKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJkZWxheWVkQkEgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5kZWxheWVkQkEpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIm1heGltYWxBTVNEVXNpemUgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5tYXhpbWFsQU1TRFVzaXplKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJkc3NzQ2NrTW9kZTQwTUh6ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZHNzc0Nja01vZGU0ME1Ieik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicHNtcCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnBzbXApOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInN0YmNDb250cm9sRnJhbWUgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5zdGJjQ29udHJvbEZyYW1lKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJsc2lnVFhPUFByb3RlY3Rpb24gKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5sc2lnVFhPUFByb3RlY3Rpb24pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIm1heFJ4QU1QRFVGYWN0b3IgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5tYXhSeEFNUERVRmFjdG9yKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJtcGR1RGVuc2l0eSAoMyk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLm1wZHVEZW5zaXR5KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDEgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yZXNlcnZlZDEpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5IVENhcHMuc3VwcG9ydGVkTUNTU2V0LCAxNik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicGNvICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucGNvKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJ0cmFuc2l0aW9uVGltZSAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnRyYW5zaXRpb25UaW1lKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDIgKDUpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yZXNlcnZlZDIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIm1jc0ZlZWRiYWNrICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubWNzRmVlZGJhY2spOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInJlc2VydmVkMyAoNik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnJlc2VydmVkMyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgidHhCRiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnR4QkYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInJ4U3RhZ2dlcmVkU291bmRpbmcgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yeFN0YWdnZXJlZFNvdW5kaW5nKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJ0eFN0YWdnZXJlZFNvdW5kaW5nICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMudHhTdGFnZ2VyZWRTb3VuZGluZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicnhaTEYgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yeFpMRik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgidHhaTEYgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50eFpMRik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiaW1wbGljaXRUeEJGICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuaW1wbGljaXRUeEJGKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJjYWxpYnJhdGlvbiAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmNhbGlicmF0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJleHBsaWNpdENTSVR4QkYgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdENTSVR4QkYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImV4cGxpY2l0VW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXggKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdFVuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJleHBsaWNpdEJGQ1NJRmVlZGJhY2sgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdEJGQ1NJRmVlZGJhY2spOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImV4cGxpY2l0VW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhGZWVkYmFjayAoMyk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmV4cGxpY2l0VW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhGZWVkYmFjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiZXhwbGljaXRDb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhGZWVkYmFjayAoMyk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmV4cGxpY2l0Q29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4RmVlZGJhY2spOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImNzaU51bUJGQW50ZW5uYWUgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5jc2lOdW1CRkFudGVubmFlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJ1bmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeEJGQW50ZW5uYWUgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy51bmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeEJGQW50ZW5uYWUpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImNvbXByZXNzZWRTdGVlcmluZ01hdHJpeEJGQW50ZW5uYWUgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDQgKDcpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yZXNlcnZlZDQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImFudGVubmFTZWxlY3Rpb24gKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5hbnRlbm5hU2VsZWN0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJleHBsaWNpdENTSUZlZWRiYWNrVHggKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdENTSUZlZWRiYWNrVHgpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImFudGVubmFJbmRpY2VzRmVlZGJhY2tUeCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmFudGVubmFJbmRpY2VzRmVlZGJhY2tUeCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiZXhwbGljaXRDU0lGZWVkYmFjayAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmV4cGxpY2l0Q1NJRmVlZGJhY2spOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImFudGVubmFJbmRpY2VzRmVlZGJhY2sgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5hbnRlbm5hSW5kaWNlc0ZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyeEFTICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucnhBUyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgidHhTb3VuZGluZ1BQRFVzICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMudHhTb3VuZGluZ1BQRFVzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDUgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yZXNlcnZlZDUpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIm51bV9yc3ZkOiAlZC5cbiIpLCBwRnJtLT5IVENhcHMubnVtX3JzdmQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSBwRnJtLT5IVENhcHMucnN2ZCwgcEZybS0+SFRDYXBzLm51bV9yc3ZkKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiTGlua0lkZW50aWZpZXI6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+TGlua0lkZW50aWZpZXIucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5ic3NpZCwgNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkxpbmtJZGVudGlmaWVyLkluaXRTdGFBZGRyLCA2KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuUmVzcFN0YUFkZHIsIDYpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJXTU1JbmZvU3RhdGlvbjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5XTU1JbmZvU3RhdGlvbi5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPldNTUluZm9TdGF0aW9uLnZlcnNpb24sIDEpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImFjdm9fdWFwc2QgKDEpOiAlZFxuIiksIHBGcm0tPldNTUluZm9TdGF0aW9uLmFjdm9fdWFwc2QpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImFjdmlfdWFwc2QgKDEpOiAlZFxuIiksIHBGcm0tPldNTUluZm9TdGF0aW9uLmFjdmlfdWFwc2QpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImFjYmtfdWFwc2QgKDEpOiAlZFxuIiksIHBGcm0tPldNTUluZm9TdGF0aW9uLmFjYmtfdWFwc2QpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImFjYmVfdWFwc2QgKDEpOiAlZFxuIiksIHBGcm0tPldNTUluZm9TdGF0aW9uLmFjYmVfdWFwc2QpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInJlc2VydmVkMSAoMSk6ICVkXG4iKSwgcEZybS0+V01NSW5mb1N0YXRpb24ucmVzZXJ2ZWQxKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJtYXhfc3BfbGVuZ3RoICgyKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5tYXhfc3BfbGVuZ3RoKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDIgKDEpOiAlZFxuIiksIHBGcm0tPldNTUluZm9TdGF0aW9uLnJlc2VydmVkMik7CisgICAgICAgIH0KKyAgICB9CisjICAgZW5kaWYgLy8gRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgcmV0dXJuIHN0YXR1czsKKworfSAvKiBFbmQgZG90MTFmVW5wYWNrVERMU1NldHVwUnNwLiAqLworCisgICAgc3RhdGljIGNvbnN0IHRGRkRlZm4gRkZTX1RETFNUZWFyZG93bltdID0geworICAgICAgICB7ICJDYXRlZ29yeSIsIG9mZnNldG9mKHREb3QxMWZURExTVGVhcmRvd24sIENhdGVnb3J5KSwgU2lnRmZDYXRlZ29yeSAsIERPVDExRl9GRl9DQVRFR09SWV9MRU4sIH0sCisgICAgICAgIHsgIkFjdGlvbiIsIG9mZnNldG9mKHREb3QxMWZURExTVGVhcmRvd24sIEFjdGlvbiksIFNpZ0ZmQWN0aW9uICwgRE9UMTFGX0ZGX0FDVElPTl9MRU4sIH0sCisgICAgICAgIHsgIlJlYXNvbiIsIG9mZnNldG9mKHREb3QxMWZURExTVGVhcmRvd24sIFJlYXNvbiksIFNpZ0ZmUmVhc29uICwgRE9UMTFGX0ZGX1JFQVNPTl9MRU4sIH0sCisgICAgeyBOVUxMLCAwLCAwLCAwLH0sCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB0SUVEZWZuIElFU19URExTVGVhcmRvd25bXSA9IHsKKyAgICAgICAge29mZnNldG9mKHREb3QxMWZURExTVGVhcmRvd24sIEZUSW5mbyksIG9mZnNldG9mKHREb3QxMWZJRUZUSW5mbywgcHJlc2VudCksIDAsICJGVEluZm8iICwgMCwgODQsIDE4NywgU2lnSWVGVEluZm8sIHswLCAwLCAwLCAwLCAwfSwgMCwgRE9UMTFGX0VJRF9GVElORk8sIDAsIH0sCisgICAgICAgIHtvZmZzZXRvZih0RG90MTFmVERMU1RlYXJkb3duLCBMaW5rSWRlbnRpZmllciksIG9mZnNldG9mKHREb3QxMWZJRUxpbmtJZGVudGlmaWVyLCBwcmVzZW50KSwgMCwgIkxpbmtJZGVudGlmaWVyIiAsIDAsIDIwLCAyMCwgU2lnSWVMaW5rSWRlbnRpZmllciwgezAsIDAsIDAsIDAsIDB9LCAwLCBET1QxMUZfRUlEX0xJTktJREVOVElGSUVSLCAxLCB9LAorICAgIHswLCAwLCAwLCBOVUxMLCAwLCAwLCAwLCAwLCB7MCwgMCwgMCwgMCwgMH0sIDAsIDB4ZmYsIDAsIH0sICAgIH07CisKK3RBTklfVTMyIGRvdDExZlVucGFja1RETFNUZWFyZG93bih0cEFuaVNpckdsb2JhbCBwQ3R4LCB0QU5JX1U4ICpwQnVmLCB0QU5JX1UzMiBuQnVmLCB0RG90MTFmVERMU1RlYXJkb3duICpwRnJtKQoreworICAgIHRBTklfVTMyIGkgPSAwOworICAgIHRBTklfVTMyIHN0YXR1cyA9IDA7CisgICAgc3RhdHVzID0gVW5wYWNrQ29yZShwQ3R4LCBwQnVmLCBuQnVmLCBGRlNfVERMU1RlYXJkb3duLCBJRVNfVERMU1RlYXJkb3duLCAoIHRBTklfVTgqIClwRnJtLCBzaXplb2YoKnBGcm0pKTsKKworICAgICh2b2lkKWk7CisjICAgaWZkZWYgRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgaWYgKCFET1QxMUZfRkFJTEVEKHN0YXR1cykpCisgICAgeworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgiVW5wYWNrZWQgdGhlIFRETFNUZWFyZG93bjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksIHBCdWYsIG5CdWYpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgidG86XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCBGUkZMKCJDYXRlZ29yeTpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksICggdEFOSV9VOCogKSZwRnJtLT5DYXRlZ29yeS5jYXRlZ29yeSwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCBGUkZMKCJBY3Rpb246XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCAoIHRBTklfVTgqICkmcEZybS0+QWN0aW9uLmFjdGlvbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCBGUkZMKCJSZWFzb246XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCAoIHRBTklfVTgqICkmcEZybS0+UmVhc29uLmNvZGUsIDIpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgiRlRJbmZvOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgicmVzZXJ2ZWQgKDgpOiAlZFxuIiksIHBGcm0tPkZUSW5mby5yZXNlcnZlZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgiSUVDb3VudCAoOCk6ICVkXG4iKSwgcEZybS0+RlRJbmZvLklFQ291bnQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uTUlDLCAxNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5Bbm9uY2UsIDMyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLlNub25jZSwgMzIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksIEZSRkwoIlIxS0hfSUQ6XG4iKSk7CisgICAgICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5SMUtIX0lELnByZXNlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLlIxS0hfSUQuUE1LX1IxX0lELCA2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCBGUkZMKCJHVEs6XG4iKSk7CisgICAgICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5HVEsucHJlc2VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksIEZSRkwoImtleUlkICgyKTogJWRcbiIpLCBwRnJtLT5GVEluZm8uR1RLLmtleUlkKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgicmVzZXJ2ZWQgKDE0KTogJWRcbiIpLCBwRnJtLT5GVEluZm8uR1RLLnJlc2VydmVkKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5HVEsua2V5TGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5HVEsuUlNDLCA4KTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgibnVtX2tleTogJWQuXG4iKSwgcEZybS0+RlRJbmZvLkdUSy5udW1fa2V5KTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgKCB0QU5JX1U4KiApIHBGcm0tPkZUSW5mby5HVEsua2V5LCBwRnJtLT5GVEluZm8uR1RLLm51bV9rZXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksIEZSRkwoIlIwS0hfSUQ6XG4iKSk7CisgICAgICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5SMEtIX0lELnByZXNlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCBGUkZMKCJudW1fUE1LX1IwX0lEOiAlZC5cbiIpLCBwRnJtLT5GVEluZm8uUjBLSF9JRC5udW1fUE1LX1IwX0lEKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgKCB0QU5JX1U4KiApIHBGcm0tPkZUSW5mby5SMEtIX0lELlBNS19SMF9JRCwgcEZybS0+RlRJbmZvLlIwS0hfSUQubnVtX1BNS19SMF9JRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksIEZSRkwoIkxpbmtJZGVudGlmaWVyOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkxpbmtJZGVudGlmaWVyLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuYnNzaWQsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5Jbml0U3RhQWRkciwgNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgKCB0QU5JX1U4KiApJnBGcm0tPkxpbmtJZGVudGlmaWVyLlJlc3BTdGFBZGRyLCA2KTsKKyAgICAgICAgfQorICAgIH0KKyMgICBlbmRpZiAvLyBET1QxMUZfRFVNUF9GUkFNRVMKKyAgICByZXR1cm4gc3RhdHVzOworCit9IC8qIEVuZCBkb3QxMWZVbnBhY2tURExTVGVhcmRvd24uICovCisKICAgICBzdGF0aWMgY29uc3QgdEZGRGVmbiBGRlNfVFBDUmVwb3J0W10gPSB7CiAgICAgICAgIHsgIkNhdGVnb3J5Iiwgb2Zmc2V0b2YodERvdDExZlRQQ1JlcG9ydCwgQ2F0ZWdvcnkpLCBTaWdGZkNhdGVnb3J5ICwgRE9UMTFGX0ZGX0NBVEVHT1JZX0xFTiwgfSwKICAgICAgICAgeyAiQWN0aW9uIiwgb2Zmc2V0b2YodERvdDExZlRQQ1JlcG9ydCwgQWN0aW9uKSwgU2lnRmZBY3Rpb24gLCBET1QxMUZfRkZfQUNUSU9OX0xFTiwgfSwKQEAgLTE4NDcxLDYgKzIwMDMwLDkgQEAKICAgICAgICAgICAgICAgICBjYXNlIFNpZ0llSUJTU1BhcmFtczoKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyB8PSBkb3QxMWZVbnBhY2tJZUlCU1NQYXJhbXMocEN0eCwgcEJ1ZlJlbWFpbmluZywgbGVuLCAoIHREb3QxMWZJRUlCU1NQYXJhbXMqICkocEZybSArIHBJZS0+b2Zmc2V0ICsgc2l6ZW9mKHREb3QxMWZJRUlCU1NQYXJhbXMpKmNvdW50T2Zmc2V0KSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU2lnSWVMaW5rSWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyB8PSBkb3QxMWZVbnBhY2tJZUxpbmtJZGVudGlmaWVyKHBDdHgsIHBCdWZSZW1haW5pbmcsIGxlbiwgKCB0RG90MTFmSUVMaW5rSWRlbnRpZmllciogKShwRnJtICsgcEllLT5vZmZzZXQgKyBzaXplb2YodERvdDExZklFTGlua0lkZW50aWZpZXIpKmNvdW50T2Zmc2V0KSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2lnSWVNZWFzdXJlbWVudFJlcG9ydDoKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyB8PSBkb3QxMWZVbnBhY2tJZU1lYXN1cmVtZW50UmVwb3J0KHBDdHgsIHBCdWZSZW1haW5pbmcsIGxlbiwgKCB0RG90MTFmSUVNZWFzdXJlbWVudFJlcG9ydCogKShwRnJtICsgcEllLT5vZmZzZXQgKyBzaXplb2YodERvdDExZklFTWVhc3VyZW1lbnRSZXBvcnQpKmNvdW50T2Zmc2V0KSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTg1NDksNiArMjAxMTEsMTIgQEAKICAgICAgICAgICAgICAgICBjYXNlIFNpZ0llUDJQV1NDUHJvdmlzaW9uRGlzY292ZXJ5UmVzOgogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIHw9IGRvdDExZlVucGFja0llUDJQV1NDUHJvdmlzaW9uRGlzY292ZXJ5UmVzKHBDdHgsIHBCdWZSZW1haW5pbmcsIGxlbiwgKCB0RG90MTFmSUVQMlBXU0NQcm92aXNpb25EaXNjb3ZlcnlSZXMqICkocEZybSArIHBJZS0+b2Zmc2V0ICsgc2l6ZW9mKHREb3QxMWZJRVAyUFdTQ1Byb3Zpc2lvbkRpc2NvdmVyeVJlcykqY291bnRPZmZzZXQpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTaWdJZVBUSUNvbnRyb2w6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgfD0gZG90MTFmVW5wYWNrSWVQVElDb250cm9sKHBDdHgsIHBCdWZSZW1haW5pbmcsIGxlbiwgKCB0RG90MTFmSUVQVElDb250cm9sKiApKHBGcm0gKyBwSWUtPm9mZnNldCArIHNpemVvZih0RG90MTFmSUVQVElDb250cm9sKSpjb3VudE9mZnNldCkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNpZ0llUFVCdWZmZXJTdGF0dXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgfD0gZG90MTFmVW5wYWNrSWVQVUJ1ZmZlclN0YXR1cyhwQ3R4LCBwQnVmUmVtYWluaW5nLCBsZW4sICggdERvdDExZklFUFVCdWZmZXJTdGF0dXMqICkocEZybSArIHBJZS0+b2Zmc2V0ICsgc2l6ZW9mKHREb3QxMWZJRVBVQnVmZmVyU3RhdHVzKSpjb3VudE9mZnNldCkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNpZ0llUG93ZXJDYXBzOgogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIHw9IGRvdDExZlVucGFja0llUG93ZXJDYXBzKHBDdHgsIHBCdWZSZW1haW5pbmcsIGxlbiwgKCB0RG90MTFmSUVQb3dlckNhcHMqICkocEZybSArIHBJZS0+b2Zmc2V0ICsgc2l6ZW9mKHREb3QxMWZJRVBvd2VyQ2FwcykqY291bnRPZmZzZXQpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDExNyw2ICsyMTY4NSw3MCBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9IC8qIEVuZCBkb3QxMWZHZXRQYWNrZWRTTVBvd2VyU2F2ZVNpemUuICovCiAKK3RBTklfVTMyIGRvdDExZkdldFBhY2tlZFRETFNEaXNSZXFTaXplKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHREb3QxMWZURExTRGlzUmVxICpwRnJtLCB0QU5JX1UzMiAqcG5OZWVkZWQpCit7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICAqcG5OZWVkZWQgPSAzOworICAgIHN0YXR1cyA9IEdldFBhY2tlZFNpemVDb3JlKHBDdHgsICggdEFOSV9VOCogKXBGcm0sIHBuTmVlZGVkLCBJRVNfVERMU0Rpc1JlcSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30gLyogRW5kIGRvdDExZkdldFBhY2tlZFRETFNEaXNSZXFTaXplLiAqLworCit0QU5JX1UzMiBkb3QxMWZHZXRQYWNrZWRURExTRGlzUnNwU2l6ZSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVERMU0Rpc1JzcCAqcEZybSwgdEFOSV9VMzIgKnBuTmVlZGVkKQoreworICAgIHRBTklfVTMyIHN0YXR1cyA9IDA7CisgICAgKnBuTmVlZGVkID0gNTsKKyAgICBzdGF0dXMgPSBHZXRQYWNrZWRTaXplQ29yZShwQ3R4LCAoIHRBTklfVTgqIClwRnJtLCBwbk5lZWRlZCwgSUVTX1RETFNEaXNSc3ApOworICAgIHJldHVybiBzdGF0dXM7Cit9IC8qIEVuZCBkb3QxMWZHZXRQYWNrZWRURExTRGlzUnNwU2l6ZS4gKi8KKwordEFOSV9VMzIgZG90MTFmR2V0UGFja2VkVERMU1BlZXJUcmFmZmljSW5kU2l6ZSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVERMU1BlZXJUcmFmZmljSW5kICpwRnJtLCB0QU5JX1UzMiAqcG5OZWVkZWQpCit7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICAqcG5OZWVkZWQgPSAzOworICAgIHN0YXR1cyA9IEdldFBhY2tlZFNpemVDb3JlKHBDdHgsICggdEFOSV9VOCogKXBGcm0sIHBuTmVlZGVkLCBJRVNfVERMU1BlZXJUcmFmZmljSW5kKTsKKyAgICByZXR1cm4gc3RhdHVzOworfSAvKiBFbmQgZG90MTFmR2V0UGFja2VkVERMU1BlZXJUcmFmZmljSW5kU2l6ZS4gKi8KKwordEFOSV9VMzIgZG90MTFmR2V0UGFja2VkVERMU1BlZXJUcmFmZmljUnNwU2l6ZSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVERMU1BlZXJUcmFmZmljUnNwICpwRnJtLCB0QU5JX1UzMiAqcG5OZWVkZWQpCit7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICAqcG5OZWVkZWQgPSAzOworICAgIHN0YXR1cyA9IEdldFBhY2tlZFNpemVDb3JlKHBDdHgsICggdEFOSV9VOCogKXBGcm0sIHBuTmVlZGVkLCBJRVNfVERMU1BlZXJUcmFmZmljUnNwKTsKKyAgICByZXR1cm4gc3RhdHVzOworfSAvKiBFbmQgZG90MTFmR2V0UGFja2VkVERMU1BlZXJUcmFmZmljUnNwU2l6ZS4gKi8KKwordEFOSV9VMzIgZG90MTFmR2V0UGFja2VkVERMU1NldHVwQ25mU2l6ZSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVERMU1NldHVwQ25mICpwRnJtLCB0QU5JX1UzMiAqcG5OZWVkZWQpCit7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICAqcG5OZWVkZWQgPSA1OworICAgIHN0YXR1cyA9IEdldFBhY2tlZFNpemVDb3JlKHBDdHgsICggdEFOSV9VOCogKXBGcm0sIHBuTmVlZGVkLCBJRVNfVERMU1NldHVwQ25mKTsKKyAgICByZXR1cm4gc3RhdHVzOworfSAvKiBFbmQgZG90MTFmR2V0UGFja2VkVERMU1NldHVwQ25mU2l6ZS4gKi8KKwordEFOSV9VMzIgZG90MTFmR2V0UGFja2VkVERMU1NldHVwUmVxU2l6ZSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVERMU1NldHVwUmVxICpwRnJtLCB0QU5JX1UzMiAqcG5OZWVkZWQpCit7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICAqcG5OZWVkZWQgPSA1OworICAgIHN0YXR1cyA9IEdldFBhY2tlZFNpemVDb3JlKHBDdHgsICggdEFOSV9VOCogKXBGcm0sIHBuTmVlZGVkLCBJRVNfVERMU1NldHVwUmVxKTsKKyAgICByZXR1cm4gc3RhdHVzOworfSAvKiBFbmQgZG90MTFmR2V0UGFja2VkVERMU1NldHVwUmVxU2l6ZS4gKi8KKwordEFOSV9VMzIgZG90MTFmR2V0UGFja2VkVERMU1NldHVwUnNwU2l6ZSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVERMU1NldHVwUnNwICpwRnJtLCB0QU5JX1UzMiAqcG5OZWVkZWQpCit7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICAqcG5OZWVkZWQgPSA3OworICAgIHN0YXR1cyA9IEdldFBhY2tlZFNpemVDb3JlKHBDdHgsICggdEFOSV9VOCogKXBGcm0sIHBuTmVlZGVkLCBJRVNfVERMU1NldHVwUnNwKTsKKyAgICByZXR1cm4gc3RhdHVzOworfSAvKiBFbmQgZG90MTFmR2V0UGFja2VkVERMU1NldHVwUnNwU2l6ZS4gKi8KKwordEFOSV9VMzIgZG90MTFmR2V0UGFja2VkVERMU1RlYXJkb3duU2l6ZSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVERMU1RlYXJkb3duICpwRnJtLCB0QU5JX1UzMiAqcG5OZWVkZWQpCit7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICAqcG5OZWVkZWQgPSA0OworICAgIHN0YXR1cyA9IEdldFBhY2tlZFNpemVDb3JlKHBDdHgsICggdEFOSV9VOCogKXBGcm0sIHBuTmVlZGVkLCBJRVNfVERMU1RlYXJkb3duKTsKKyAgICByZXR1cm4gc3RhdHVzOworfSAvKiBFbmQgZG90MTFmR2V0UGFja2VkVERMU1RlYXJkb3duU2l6ZS4gKi8KKwogdEFOSV9VMzIgZG90MTFmR2V0UGFja2VkVFBDUmVwb3J0U2l6ZSh0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVFBDUmVwb3J0ICpwRnJtLCB0QU5JX1UzMiAqcG5OZWVkZWQpCiB7CiAgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKQEAgLTIwNTI0LDYgKzIyMTU2LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZUNvdW50ID0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSWVQcmVzZW50ID0gKCAodERvdDExZklFSUJTU1BhcmFtcyogKShwRnJtICsgcEllLT5vZmZzZXQgKyBvZmZzZXQgKiBpICApKS0+cHJlc2VudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNpZ0llTGlua0lkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2l6ZW9mKHREb3QxMWZJRUxpbmtJZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlQ291bnQgPSAxODsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSWVQcmVzZW50ID0gKCAodERvdDExZklFTGlua0lkZW50aWZpZXIqICkocEZybSArIHBJZS0+b2Zmc2V0ICsgb2Zmc2V0ICogaSAgKSktPnByZXNlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTaWdJZU1lYXN1cmVtZW50UmVwb3J0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHNpemVvZih0RG90MTFmSUVNZWFzdXJlbWVudFJlcG9ydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIHw9IGRvdDExZkdldFBhY2tlZElFTWVhc3VyZW1lbnRSZXBvcnQocEN0eCwgKCB0RG90MTFmSUVNZWFzdXJlbWVudFJlcG9ydCogKShwRnJtICsgcEllLT5vZmZzZXQgKyBvZmZzZXQgKiBpICksIHBuTmVlZGVkKTsKQEAgLTIwNjMxLDYgKzIyMjY4LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2l6ZW9mKHREb3QxMWZJRVAyUFdTQ1Byb3Zpc2lvbkRpc2NvdmVyeVJlcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIHw9IGRvdDExZkdldFBhY2tlZElFUDJQV1NDUHJvdmlzaW9uRGlzY292ZXJ5UmVzKHBDdHgsICggdERvdDExZklFUDJQV1NDUHJvdmlzaW9uRGlzY292ZXJ5UmVzKiApKHBGcm0gKyBwSWUtPm9mZnNldCArIG9mZnNldCAqIGkgKSwgcG5OZWVkZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU2lnSWVQVElDb250cm9sOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHNpemVvZih0RG90MTFmSUVQVElDb250cm9sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlQ291bnQgPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJZVByZXNlbnQgPSAoICh0RG90MTFmSUVQVElDb250cm9sKiApKHBGcm0gKyBwSWUtPm9mZnNldCArIG9mZnNldCAqIGkgICkpLT5wcmVzZW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU2lnSWVQVUJ1ZmZlclN0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzaXplb2YodERvdDExZklFUFVCdWZmZXJTdGF0dXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVDb3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEllUHJlc2VudCA9ICggKHREb3QxMWZJRVBVQnVmZmVyU3RhdHVzKiApKHBGcm0gKyBwSWUtPm9mZnNldCArIG9mZnNldCAqIGkgICkpLT5wcmVzZW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2lnSWVQb3dlckNhcHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2l6ZW9mKHREb3QxMWZJRVBvd2VyQ2Fwcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZUNvdW50ID0gMjsKQEAgLTIxMDY3LDEzICsyMjcxNCwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0RG90MTFmRmZBZGRCQVBhcmFtZXRlclNldCAqcFNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdEFOSV9VOCAqcEJ1ZikKIHsKLSAgICB0QU5JX1UxNiB0bXA4MF9fOwotICAgIHRtcDgwX18gPSAwVTsKLSAgICB0bXA4MF9fIHw9ICggcFNyYy0+YW1zZHVTdXBwb3J0ZWQgPDwgMCApOwotICAgIHRtcDgwX18gfD0gKCBwU3JjLT5wb2xpY3kgPDwgMSApOwotICAgIHRtcDgwX18gfD0gKCBwU3JjLT50aWQgPDwgMiApOwotICAgIHRtcDgwX18gfD0gKCBwU3JjLT5idWZmZXJTaXplIDw8IDYgKTsKLSAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXA4MF9fLCAwKTsKKyAgICB0QU5JX1UxNiB0bXA4MV9fOworICAgIHRtcDgxX18gPSAwVTsKKyAgICB0bXA4MV9fIHw9ICggcFNyYy0+YW1zZHVTdXBwb3J0ZWQgPDwgMCApOworICAgIHRtcDgxX18gfD0gKCBwU3JjLT5wb2xpY3kgPDwgMSApOworICAgIHRtcDgxX18gfD0gKCBwU3JjLT50aWQgPDwgMiApOworICAgIHRtcDgxX18gfD0gKCBwU3JjLT5idWZmZXJTaXplIDw8IDYgKTsKKyAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXA4MV9fLCAwKTsKICAgICAodm9pZClwQ3R4OwogfSAvKiBFbmQgZG90MTFmUGFja0ZmQWRkQkFQYXJhbWV0ZXJTZXQuICovCiAKQEAgLTIxMDk3LDExICsyMjc0NCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHREb3QxMWZGZkJBU3RhcnRpbmdTZXF1ZW5jZUNvbnRyb2wgKnBTcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdEFOSV9VOCAqcEJ1ZikKIHsKLSAgICB0QU5JX1UxNiB0bXA4MV9fOwotICAgIHRtcDgxX18gPSAwVTsKLSAgICB0bXA4MV9fIHw9ICggcFNyYy0+ZnJhZ051bWJlciA8PCAwICk7Ci0gICAgdG1wODFfXyB8PSAoIHBTcmMtPnNzbiA8PCA0ICk7Ci0gICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wODFfXywgMCk7CisgICAgdEFOSV9VMTYgdG1wODJfXzsKKyAgICB0bXA4Ml9fID0gMFU7CisgICAgdG1wODJfXyB8PSAoIHBTcmMtPmZyYWdOdW1iZXIgPDwgMCApOworICAgIHRtcDgyX18gfD0gKCBwU3JjLT5zc24gPDwgNCApOworICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHRtcDgyX18sIDApOwogICAgICh2b2lkKXBDdHg7CiB9IC8qIEVuZCBkb3QxMWZQYWNrRmZCQVN0YXJ0aW5nU2VxdWVuY2VDb250cm9sLiAqLwogCkBAIC0yMTEyNSwyNSArMjI3NzIsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHREb3QxMWZGZkNhcGFiaWxpdGllcyAqcFNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRBTklfVTggKnBCdWYpCiB7Ci0gICAgdEFOSV9VMTYgdG1wODJfXzsKLSAgICB0bXA4Ml9fID0gMFU7Ci0gICAgdG1wODJfXyB8PSAoIHBTcmMtPmVzcyA8PCAwICk7Ci0gICAgdG1wODJfXyB8PSAoIHBTcmMtPmlic3MgPDwgMSApOwotICAgIHRtcDgyX18gfD0gKCBwU3JjLT5jZlBvbGxhYmxlIDw8IDIgKTsKLSAgICB0bXA4Ml9fIHw9ICggcFNyYy0+Y2ZQb2xsUmVxIDw8IDMgKTsKLSAgICB0bXA4Ml9fIHw9ICggcFNyYy0+cHJpdmFjeSA8PCA0ICk7Ci0gICAgdG1wODJfXyB8PSAoIHBTcmMtPnNob3J0UHJlYW1ibGUgPDwgNSApOwotICAgIHRtcDgyX18gfD0gKCBwU3JjLT5wYmNjIDw8IDYgKTsKLSAgICB0bXA4Ml9fIHw9ICggcFNyYy0+Y2hhbm5lbEFnaWxpdHkgPDwgNyApOwotICAgIHRtcDgyX18gfD0gKCBwU3JjLT5zcGVjdHJ1bU1ndCA8PCA4ICk7Ci0gICAgdG1wODJfXyB8PSAoIHBTcmMtPnFvcyA8PCA5ICk7Ci0gICAgdG1wODJfXyB8PSAoIHBTcmMtPnNob3J0U2xvdFRpbWUgPDwgMTAgKTsKLSAgICB0bXA4Ml9fIHw9ICggcFNyYy0+YXBzZCA8PCAxMSApOwotICAgIHRtcDgyX18gfD0gKCBwU3JjLT5ycm0gPDwgMTIgKTsKLSAgICB0bXA4Ml9fIHw9ICggcFNyYy0+ZHNzc09mZG0gPDwgMTMgKTsKLSAgICB0bXA4Ml9fIHw9ICggcFNyYy0+ZGVsYXllZEJBIDw8IDE0ICk7Ci0gICAgdG1wODJfXyB8PSAoIHBTcmMtPmltbWVkaWF0ZUJBIDw8IDE1ICk7Ci0gICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wODJfXywgMCk7CisgICAgdEFOSV9VMTYgdG1wODNfXzsKKyAgICB0bXA4M19fID0gMFU7CisgICAgdG1wODNfXyB8PSAoIHBTcmMtPmVzcyA8PCAwICk7CisgICAgdG1wODNfXyB8PSAoIHBTcmMtPmlic3MgPDwgMSApOworICAgIHRtcDgzX18gfD0gKCBwU3JjLT5jZlBvbGxhYmxlIDw8IDIgKTsKKyAgICB0bXA4M19fIHw9ICggcFNyYy0+Y2ZQb2xsUmVxIDw8IDMgKTsKKyAgICB0bXA4M19fIHw9ICggcFNyYy0+cHJpdmFjeSA8PCA0ICk7CisgICAgdG1wODNfXyB8PSAoIHBTcmMtPnNob3J0UHJlYW1ibGUgPDwgNSApOworICAgIHRtcDgzX18gfD0gKCBwU3JjLT5wYmNjIDw8IDYgKTsKKyAgICB0bXA4M19fIHw9ICggcFNyYy0+Y2hhbm5lbEFnaWxpdHkgPDwgNyApOworICAgIHRtcDgzX18gfD0gKCBwU3JjLT5zcGVjdHJ1bU1ndCA8PCA4ICk7CisgICAgdG1wODNfXyB8PSAoIHBTcmMtPnFvcyA8PCA5ICk7CisgICAgdG1wODNfXyB8PSAoIHBTcmMtPnNob3J0U2xvdFRpbWUgPDwgMTAgKTsKKyAgICB0bXA4M19fIHw9ICggcFNyYy0+YXBzZCA8PCAxMSApOworICAgIHRtcDgzX18gfD0gKCBwU3JjLT5ycm0gPDwgMTIgKTsKKyAgICB0bXA4M19fIHw9ICggcFNyYy0+ZHNzc09mZG0gPDwgMTMgKTsKKyAgICB0bXA4M19fIHw9ICggcFNyYy0+ZGVsYXllZEJBIDw8IDE0ICk7CisgICAgdG1wODNfXyB8PSAoIHBTcmMtPmltbWVkaWF0ZUJBIDw8IDE1ICk7CisgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wODNfXywgMCk7CiAgICAgKHZvaWQpcEN0eDsKIH0gLyogRW5kIGRvdDExZlBhY2tGZkNhcGFiaWxpdGllcy4gKi8KIApAQCAtMjExNjcsMTIgKzIyODE0LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHREb3QxMWZGZkRlbEJBUGFyYW1ldGVyU2V0ICpwU3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0QU5JX1U4ICpwQnVmKQogewotICAgIHRBTklfVTE2IHRtcDgzX187Ci0gICAgdG1wODNfXyA9IDBVOwotICAgIHRtcDgzX18gfD0gKCBwU3JjLT5yZXNlcnZlZCA8PCAwICk7Ci0gICAgdG1wODNfXyB8PSAoIHBTcmMtPmluaXRpYXRvciA8PCAxMSApOwotICAgIHRtcDgzX18gfD0gKCBwU3JjLT50aWQgPDwgMTIgKTsKLSAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXA4M19fLCAwKTsKKyAgICB0QU5JX1UxNiB0bXA4NF9fOworICAgIHRtcDg0X18gPSAwVTsKKyAgICB0bXA4NF9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQgPDwgMCApOworICAgIHRtcDg0X18gfD0gKCBwU3JjLT5pbml0aWF0b3IgPDwgMTEgKTsKKyAgICB0bXA4NF9fIHw9ICggcFNyYy0+dGlkIDw8IDEyICk7CisgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wODRfXywgMCk7CiAgICAgKHZvaWQpcEN0eDsKIH0gLyogRW5kIGRvdDExZlBhY2tGZkRlbEJBUGFyYW1ldGVyU2V0LiAqLwogCkBAIC0yMTIyMCwxMyArMjI4NjcsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0RG90MTFmRmZPcGVyYXRpbmdNb2RlICpwU3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRBTklfVTggKnBCdWYpCiB7Ci0gICAgdEFOSV9VOCB0bXA4NF9fOwotICAgIHRtcDg0X18gPSAwVTsKLSAgICB0bXA4NF9fIHw9ICggcFNyYy0+Y2hhbldpZHRoIDw8IDAgKTsKLSAgICB0bXA4NF9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQgPDwgMiApOwotICAgIHRtcDg0X18gfD0gKCBwU3JjLT5yeE5TUyA8PCA0ICk7Ci0gICAgdG1wODRfXyB8PSAoIHBTcmMtPnJ4TlNTVHlwZSA8PCA3ICk7Ci0gICAgKnBCdWYgPSB0bXA4NF9fOworICAgIHRBTklfVTggdG1wODVfXzsKKyAgICB0bXA4NV9fID0gMFU7CisgICAgdG1wODVfXyB8PSAoIHBTcmMtPmNoYW5XaWR0aCA8PCAwICk7CisgICAgdG1wODVfXyB8PSAoIHBTcmMtPnJlc2VydmVkIDw8IDIgKTsKKyAgICB0bXA4NV9fIHw9ICggcFNyYy0+cnhOU1MgPDwgNCApOworICAgIHRtcDg1X18gfD0gKCBwU3JjLT5yeE5TU1R5cGUgPDwgNyApOworICAgICpwQnVmID0gdG1wODVfXzsKICAgICAodm9pZClwQ3R4OwogfSAvKiBFbmQgZG90MTFmUGFja0ZmT3BlcmF0aW5nTW9kZS4gKi8KIApAQCAtMjEyODIsMTIgKzIyOTI5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHREb3QxMWZGZlNNUG93ZXJNb2RlU2V0ICpwU3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0QU5JX1U4ICpwQnVmKQogewotICAgIHRBTklfVTggdG1wODVfXzsKLSAgICB0bXA4NV9fID0gMFU7Ci0gICAgdG1wODVfXyB8PSAoIHBTcmMtPlBvd2VyU2F2ZV9FbiA8PCAwICk7Ci0gICAgdG1wODVfXyB8PSAoIHBTcmMtPk1vZGUgPDwgMSApOwotICAgIHRtcDg1X18gfD0gKCBwU3JjLT5yZXNlcnZlZCA8PCAyICk7Ci0gICAgKnBCdWYgPSB0bXA4NV9fOworICAgIHRBTklfVTggdG1wODZfXzsKKyAgICB0bXA4Nl9fID0gMFU7CisgICAgdG1wODZfXyB8PSAoIHBTcmMtPlBvd2VyU2F2ZV9FbiA8PCAwICk7CisgICAgdG1wODZfXyB8PSAoIHBTcmMtPk1vZGUgPDwgMSApOworICAgIHRtcDg2X18gfD0gKCBwU3JjLT5yZXNlcnZlZCA8PCAyICk7CisgICAgKnBCdWYgPSB0bXA4Nl9fOwogICAgICh2b2lkKXBDdHg7CiB9IC8qIEVuZCBkb3QxMWZQYWNrRmZTTVBvd2VyTW9kZVNldC4gKi8KIApAQCAtMjEzMjcsMTkgKzIyOTc0LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB0RG90MTFmRmZUU0luZm8gKnBTcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICB0QU5JX1U4ICpwQnVmKQogewotICAgIHRBTklfVTMyIHRtcDg2X187Ci0gICAgdG1wODZfXyA9IDBVOwotICAgIHRtcDg2X18gfD0gKCBwU3JjLT50cmFmZmljX3R5cGUgPDwgMCApOwotICAgIHRtcDg2X18gfD0gKCBwU3JjLT50c2lkIDw8IDEgKTsKLSAgICB0bXA4Nl9fIHw9ICggcFNyYy0+ZGlyZWN0aW9uIDw8IDUgKTsKLSAgICB0bXA4Nl9fIHw9ICggcFNyYy0+YWNjZXNzX3BvbGljeSA8PCA3ICk7Ci0gICAgdG1wODZfXyB8PSAoIHBTcmMtPmFnZ3JlZ2F0aW9uIDw8IDkgKTsKLSAgICB0bXA4Nl9fIHw9ICggcFNyYy0+cHNiIDw8IDEwICk7Ci0gICAgdG1wODZfXyB8PSAoIHBTcmMtPnVzZXJfcHJpb3JpdHkgPDwgMTEgKTsKLSAgICB0bXA4Nl9fIHw9ICggcFNyYy0+dHNpbmZvX2Fja19wb2wgPDwgMTQgKTsKLSAgICB0bXA4Nl9fIHw9ICggcFNyYy0+c2NoZWR1bGUgPDwgMTYgKTsKLSAgICB0bXA4Nl9fIHw9ICggcFNyYy0+dW51c2VkIDw8IDE3ICk7Ci0gICAgZnJhbWVzaHRvbmwocEN0eCwgcEJ1ZiwgdG1wODZfXywgMCk7CisgICAgdEFOSV9VMzIgdG1wODdfXzsKKyAgICB0bXA4N19fID0gMFU7CisgICAgdG1wODdfXyB8PSAoIHBTcmMtPnRyYWZmaWNfdHlwZSA8PCAwICk7CisgICAgdG1wODdfXyB8PSAoIHBTcmMtPnRzaWQgPDwgMSApOworICAgIHRtcDg3X18gfD0gKCBwU3JjLT5kaXJlY3Rpb24gPDwgNSApOworICAgIHRtcDg3X18gfD0gKCBwU3JjLT5hY2Nlc3NfcG9saWN5IDw8IDcgKTsKKyAgICB0bXA4N19fIHw9ICggcFNyYy0+YWdncmVnYXRpb24gPDwgOSApOworICAgIHRtcDg3X18gfD0gKCBwU3JjLT5wc2IgPDwgMTAgKTsKKyAgICB0bXA4N19fIHw9ICggcFNyYy0+dXNlcl9wcmlvcml0eSA8PCAxMSApOworICAgIHRtcDg3X18gfD0gKCBwU3JjLT50c2luZm9fYWNrX3BvbCA8PCAxNCApOworICAgIHRtcDg3X18gfD0gKCBwU3JjLT5zY2hlZHVsZSA8PCAxNiApOworICAgIHRtcDg3X18gfD0gKCBwU3JjLT51bnVzZWQgPDwgMTcgKTsKKyAgICBmcmFtZXNodG9ubChwQ3R4LCBwQnVmLCB0bXA4N19fLCAwKTsKICAgICAodm9pZClwQ3R4OwogfSAvKiBFbmQgZG90MTFmUGFja0ZmVFNJbmZvLiAqLwogCkBAIC0yMTQzNiw3ICsyMzA4Myw3IEBACiAgICAgdEFOSV9VOCogcFRsdkxlbiA9IDA7CiAgICAgdEFOSV9VMzIgbkNvbnN1bWVkT25FbnRyeSA9ICpwbkNvbnN1bWVkOwogICAgIHRBTklfVTMyIG5OZWVkZWQgPSAwVTsKLSAgICB0QU5JX1U4IHRtcDg3X187CisgICAgdEFOSV9VOCB0bXA4OF9fOwogICAgIG5OZWVkZWQgKz0gMzsKICAgICBpZiAoIG5OZWVkZWQgPiBuQnVmICkgcmV0dXJuIERPVDExRl9CVUZGRVJfT1ZFUkZMT1c7CiAgICAgd2hpbGUgKCBwU3JjLT5wcmVzZW50ICkKQEAgLTIxNDQ1LDEwICsyMzA5MiwxMCBAQAogICAgICAgICBwQnVmICs9IDE7ICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBUbHZMZW4gPSBwQnVmOwogICAgICAgICBwQnVmICs9IDE7ICpwbkNvbnN1bWVkICs9IDE7Ci0gICAgICAgIHRtcDg3X18gPSAwVTsKLSAgICAgICAgdG1wODdfXyB8PSAoIHBTcmMtPm1pbm9yIDw8IDAgKTsKLSAgICAgICAgdG1wODdfXyB8PSAoIHBTcmMtPm1ham9yIDw8IDQgKTsKLSAgICAgICAgKnBCdWYgPSB0bXA4N19fOworICAgICAgICB0bXA4OF9fID0gMFU7CisgICAgICAgIHRtcDg4X18gfD0gKCBwU3JjLT5taW5vciA8PCAwICk7CisgICAgICAgIHRtcDg4X18gfD0gKCBwU3JjLT5tYWpvciA8PCA0ICk7CisgICAgICAgICpwQnVmID0gdG1wODhfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKQEAgLTIyNjU3LDcgKzI0MzA0LDcgQEAKICAgICB0QU5JX1U4KiBwVGx2TGVuID0gMDsKICAgICB0QU5JX1UzMiBuQ29uc3VtZWRPbkVudHJ5ID0gKnBuQ29uc3VtZWQ7CiAgICAgdEFOSV9VMzIgbk5lZWRlZCA9IDBVOwotICAgIHRBTklfVTggdG1wODhfXzsKKyAgICB0QU5JX1U4IHRtcDg5X187CiAgICAgbk5lZWRlZCArPSA1OwogICAgIGlmICggbk5lZWRlZCA+IG5CdWYgKSByZXR1cm4gRE9UMTFGX0JVRkZFUl9PVkVSRkxPVzsKICAgICB3aGlsZSAoIHBTcmMtPnByZXNlbnQgKQpAQCAtMjI2NjYsMTAgKzI0MzEzLDEwIEBACiAgICAgICAgIHBCdWYgKz0gMjsgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcFRsdkxlbiA9IHBCdWY7CiAgICAgICAgIHBCdWYgKz0gMjsgKnBuQ29uc3VtZWQgKz0gMjsKLSAgICAgICAgdG1wODhfXyA9IDBVOwotICAgICAgICB0bXA4OF9fIHw9ICggcFNyYy0+bWlub3IgPDwgMCApOwotICAgICAgICB0bXA4OF9fIHw9ICggcFNyYy0+bWFqb3IgPDwgNCApOwotICAgICAgICAqcEJ1ZiA9IHRtcDg4X187CisgICAgICAgIHRtcDg5X18gPSAwVTsKKyAgICAgICAgdG1wODlfXyB8PSAoIHBTcmMtPm1pbm9yIDw8IDAgKTsKKyAgICAgICAgdG1wODlfXyB8PSAoIHBTcmMtPm1ham9yIDw8IDQgKTsKKyAgICAgICAgKnBCdWYgPSB0bXA4OV9fOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7CiAgICAgICAgIG5CdWYgLT0gIDEgOwpAQCAtMjI4NzUsNyArMjQ1MjIsNyBAQAogICAgIHRBTklfVTgqIHBJZUxlbiA9IDA7CiAgICAgdEFOSV9VMzIgbkNvbnN1bWVkT25FbnRyeSA9ICpwbkNvbnN1bWVkOwogICAgIHRBTklfVTMyIG5OZWVkZWQgPSAwVTsKLSAgICB0QU5JX1UxNiB0bXA4OV9fOworICAgIHRBTklfVTE2IHRtcDkwX187CiAgICAgbk5lZWRlZCAgKz0gIChwU3JjLT5udW1fa2V5ICsgMTEpOwogICAgIHdoaWxlICggcFNyYy0+cHJlc2VudCApCiAgICAgewpAQCAtMjI4ODQsMTAgKzI0NTMxLDEwIEBACiAgICAgICAgICsrcEJ1ZjsgKysoKnBuQ29uc3VtZWQpOwogICAgICAgICBwSWVMZW4gPSBwQnVmOwogICAgICAgICArK3BCdWY7ICsrKCpwbkNvbnN1bWVkKTsKLSAgICAgICAgdG1wODlfXyA9IDBVOwotICAgICAgICB0bXA4OV9fIHw9ICggcFNyYy0+a2V5SWQgPDwgMCApOwotICAgICAgICB0bXA4OV9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQgPDwgMiApOwotICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXA4OV9fLCAwKTsKKyAgICAgICAgdG1wOTBfXyA9IDBVOworICAgICAgICB0bXA5MF9fIHw9ICggcFNyYy0+a2V5SWQgPDwgMCApOworICAgICAgICB0bXA5MF9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQgPDwgMiApOworICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXA5MF9fLCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwogICAgICAgICBuQnVmIC09ICAyIDsKQEAgLTIzMTQ0LDcgKzI0NzkxLDYgQEAKICAgICB0QU5JX1U4KiBwSWVMZW4gPSAwOwogICAgIHRBTklfVTMyIG5Db25zdW1lZE9uRW50cnkgPSAqcG5Db25zdW1lZDsKICAgICB0QU5JX1UzMiBuTmVlZGVkID0gMFU7Ci0gICAgdEFOSV9VOCB0bXA5MF9fOwogICAgIHRBTklfVTggdG1wOTFfXzsKICAgICB0QU5JX1U4IHRtcDkyX187CiAgICAgdEFOSV9VOCB0bXA5M19fOwpAQCAtMjMxNTIsNiArMjQ3OTgsNyBAQAogICAgIHRBTklfVTggdG1wOTVfXzsKICAgICB0QU5JX1U4IHRtcDk2X187CiAgICAgdEFOSV9VOCB0bXA5N19fOworICAgIHRBTklfVTggdG1wOThfXzsKICAgICBuTmVlZGVkICArPSAxODsKICAgICB3aGlsZSAoIHBTcmMtPnByZXNlbnQgKQogICAgIHsKQEAgLTIzMTY2LDc2ICsyNDgxMyw3NiBAQAogICAgICAgICAqcEJ1ZiA9IHBTcmMtPnJlc2VydmVkOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7Ci0gICAgICAgIHRtcDkwX18gPSAwVTsKLSAgICAgICAgdG1wOTBfXyB8PSAoIHBTcmMtPmFjYmVfYWlmc24gPDwgMCApOwotICAgICAgICB0bXA5MF9fIHw9ICggcFNyYy0+YWNiZV9hY20gPDwgNCApOwotICAgICAgICB0bXA5MF9fIHw9ICggcFNyYy0+YWNiZV9hY2kgPDwgNSApOwotICAgICAgICB0bXA5MF9fIHw9ICggcFNyYy0+dW51c2VkMSA8PCA3ICk7Ci0gICAgICAgICpwQnVmID0gdG1wOTBfXzsKKyAgICAgICAgdG1wOTFfXyA9IDBVOworICAgICAgICB0bXA5MV9fIHw9ICggcFNyYy0+YWNiZV9haWZzbiA8PCAwICk7CisgICAgICAgIHRtcDkxX18gfD0gKCBwU3JjLT5hY2JlX2FjbSA8PCA0ICk7CisgICAgICAgIHRtcDkxX18gfD0gKCBwU3JjLT5hY2JlX2FjaSA8PCA1ICk7CisgICAgICAgIHRtcDkxX18gfD0gKCBwU3JjLT51bnVzZWQxIDw8IDcgKTsKKyAgICAgICAgKnBCdWYgPSB0bXA5MV9fOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7CiAgICAgICAgIG5CdWYgLT0gIDEgOwotICAgICAgICB0bXA5MV9fID0gMFU7Ci0gICAgICAgIHRtcDkxX18gfD0gKCBwU3JjLT5hY2JlX21pbiA8PCAwICk7Ci0gICAgICAgIHRtcDkxX18gfD0gKCBwU3JjLT5hY2JlX21heCA8PCA0ICk7Ci0gICAgICAgICpwQnVmID0gdG1wOTFfXzsKKyAgICAgICAgdG1wOTJfXyA9IDBVOworICAgICAgICB0bXA5Ml9fIHw9ICggcFNyYy0+YWNiZV9taW4gPDwgMCApOworICAgICAgICB0bXA5Ml9fIHw9ICggcFNyYy0+YWNiZV9tYXggPDwgNCApOworICAgICAgICAqcEJ1ZiA9IHRtcDkyX187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7CiAgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHBTcmMtPmFjYmVfdHhvcGxpbWl0LCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwotICAgICAgICB0bXA5Ml9fID0gMFU7Ci0gICAgICAgIHRtcDkyX18gfD0gKCBwU3JjLT5hY2JrX2FpZnNuIDw8IDAgKTsKLSAgICAgICAgdG1wOTJfXyB8PSAoIHBTcmMtPmFjYmtfYWNtIDw8IDQgKTsKLSAgICAgICAgdG1wOTJfXyB8PSAoIHBTcmMtPmFjYmtfYWNpIDw8IDUgKTsKLSAgICAgICAgdG1wOTJfXyB8PSAoIHBTcmMtPnVudXNlZDIgPDwgNyApOwotICAgICAgICAqcEJ1ZiA9IHRtcDkyX187CisgICAgICAgIHRtcDkzX18gPSAwVTsKKyAgICAgICAgdG1wOTNfXyB8PSAoIHBTcmMtPmFjYmtfYWlmc24gPDwgMCApOworICAgICAgICB0bXA5M19fIHw9ICggcFNyYy0+YWNia19hY20gPDwgNCApOworICAgICAgICB0bXA5M19fIHw9ICggcFNyYy0+YWNia19hY2kgPDwgNSApOworICAgICAgICB0bXA5M19fIHw9ICggcFNyYy0+dW51c2VkMiA8PCA3ICk7CisgICAgICAgICpwQnVmID0gdG1wOTNfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKLSAgICAgICAgdG1wOTNfXyA9IDBVOwotICAgICAgICB0bXA5M19fIHw9ICggcFNyYy0+YWNia19taW4gPDwgMCApOwotICAgICAgICB0bXA5M19fIHw9ICggcFNyYy0+YWNia19tYXggPDwgNCApOwotICAgICAgICAqcEJ1ZiA9IHRtcDkzX187CisgICAgICAgIHRtcDk0X18gPSAwVTsKKyAgICAgICAgdG1wOTRfXyB8PSAoIHBTcmMtPmFjYmtfbWluIDw8IDAgKTsKKyAgICAgICAgdG1wOTRfXyB8PSAoIHBTcmMtPmFjYmtfbWF4IDw8IDQgKTsKKyAgICAgICAgKnBCdWYgPSB0bXA5NF9fOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7CiAgICAgICAgIG5CdWYgLT0gIDEgOwogICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCBwU3JjLT5hY2JrX3R4b3BsaW1pdCwgMCk7CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDI7CiAgICAgICAgIHBCdWYgKz0gMjsKLSAgICAgICAgdG1wOTRfXyA9IDBVOwotICAgICAgICB0bXA5NF9fIHw9ICggcFNyYy0+YWN2aV9haWZzbiA8PCAwICk7Ci0gICAgICAgIHRtcDk0X18gfD0gKCBwU3JjLT5hY3ZpX2FjbSA8PCA0ICk7Ci0gICAgICAgIHRtcDk0X18gfD0gKCBwU3JjLT5hY3ZpX2FjaSA8PCA1ICk7Ci0gICAgICAgIHRtcDk0X18gfD0gKCBwU3JjLT51bnVzZWQzIDw8IDcgKTsKLSAgICAgICAgKnBCdWYgPSB0bXA5NF9fOworICAgICAgICB0bXA5NV9fID0gMFU7CisgICAgICAgIHRtcDk1X18gfD0gKCBwU3JjLT5hY3ZpX2FpZnNuIDw8IDAgKTsKKyAgICAgICAgdG1wOTVfXyB8PSAoIHBTcmMtPmFjdmlfYWNtIDw8IDQgKTsKKyAgICAgICAgdG1wOTVfXyB8PSAoIHBTcmMtPmFjdmlfYWNpIDw8IDUgKTsKKyAgICAgICAgdG1wOTVfXyB8PSAoIHBTcmMtPnVudXNlZDMgPDwgNyApOworICAgICAgICAqcEJ1ZiA9IHRtcDk1X187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7Ci0gICAgICAgIHRtcDk1X18gPSAwVTsKLSAgICAgICAgdG1wOTVfXyB8PSAoIHBTcmMtPmFjdmlfbWluIDw8IDAgKTsKLSAgICAgICAgdG1wOTVfXyB8PSAoIHBTcmMtPmFjdmlfbWF4IDw8IDQgKTsKLSAgICAgICAgKnBCdWYgPSB0bXA5NV9fOworICAgICAgICB0bXA5Nl9fID0gMFU7CisgICAgICAgIHRtcDk2X18gfD0gKCBwU3JjLT5hY3ZpX21pbiA8PCAwICk7CisgICAgICAgIHRtcDk2X18gfD0gKCBwU3JjLT5hY3ZpX21heCA8PCA0ICk7CisgICAgICAgICpwQnVmID0gdG1wOTZfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKICAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgcFNyYy0+YWN2aV90eG9wbGltaXQsIDApOwogICAgICAgICAqcG5Db25zdW1lZCArPSAyOwogICAgICAgICBwQnVmICs9IDI7Ci0gICAgICAgIHRtcDk2X18gPSAwVTsKLSAgICAgICAgdG1wOTZfXyB8PSAoIHBTcmMtPmFjdm9fYWlmc24gPDwgMCApOwotICAgICAgICB0bXA5Nl9fIHw9ICggcFNyYy0+YWN2b19hY20gPDwgNCApOwotICAgICAgICB0bXA5Nl9fIHw9ICggcFNyYy0+YWN2b19hY2kgPDwgNSApOwotICAgICAgICB0bXA5Nl9fIHw9ICggcFNyYy0+dW51c2VkNCA8PCA3ICk7Ci0gICAgICAgICpwQnVmID0gdG1wOTZfXzsKKyAgICAgICAgdG1wOTdfXyA9IDBVOworICAgICAgICB0bXA5N19fIHw9ICggcFNyYy0+YWN2b19haWZzbiA8PCAwICk7CisgICAgICAgIHRtcDk3X18gfD0gKCBwU3JjLT5hY3ZvX2FjbSA8PCA0ICk7CisgICAgICAgIHRtcDk3X18gfD0gKCBwU3JjLT5hY3ZvX2FjaSA8PCA1ICk7CisgICAgICAgIHRtcDk3X18gfD0gKCBwU3JjLT51bnVzZWQ0IDw8IDcgKTsKKyAgICAgICAgKnBCdWYgPSB0bXA5N19fOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7CiAgICAgICAgIG5CdWYgLT0gIDEgOwotICAgICAgICB0bXA5N19fID0gMFU7Ci0gICAgICAgIHRtcDk3X18gfD0gKCBwU3JjLT5hY3ZvX21pbiA8PCAwICk7Ci0gICAgICAgIHRtcDk3X18gfD0gKCBwU3JjLT5hY3ZvX21heCA8PCA0ICk7Ci0gICAgICAgICpwQnVmID0gdG1wOTdfXzsKKyAgICAgICAgdG1wOThfXyA9IDBVOworICAgICAgICB0bXA5OF9fIHw9ICggcFNyYy0+YWN2b19taW4gPDwgMCApOworICAgICAgICB0bXA5OF9fIHw9ICggcFNyYy0+YWN2b19tYXggPDwgNCApOworICAgICAgICAqcEJ1ZiA9IHRtcDk4X187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7CkBAIC0yMzQyMyw3ICsyNTA3MCw3IEBACiAgICAgdEFOSV9VOCogcEllTGVuID0gMDsKICAgICB0QU5JX1UzMiBuQ29uc3VtZWRPbkVudHJ5ID0gKnBuQ29uc3VtZWQ7CiAgICAgdEFOSV9VMzIgbk5lZWRlZCA9IDBVOwotICAgIHRBTklfVTE2IHRtcDk4X187CisgICAgdEFOSV9VMTYgdG1wOTlfXzsKICAgICBuTmVlZGVkICArPSA2OwogICAgIHdoaWxlICggcFNyYy0+cHJlc2VudCApCiAgICAgewpAQCAtMjM0MzgsMTAgKzI1MDg1LDEwIEBACiAgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHBTcmMtPmJhUG9saWN5LCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwotICAgICAgICB0bXA5OF9fID0gMFU7Ci0gICAgICAgIHRtcDk4X18gfD0gKCBwU3JjLT5iYUJ1ZmZlclNpemUgPDwgMCApOwotICAgICAgICB0bXA5OF9fIHw9ICggcFNyYy0+cnN2ZCA8PCAxMiApOwotICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXA5OF9fLCAwKTsKKyAgICAgICAgdG1wOTlfXyA9IDBVOworICAgICAgICB0bXA5OV9fIHw9ICggcFNyYy0+YmFCdWZmZXJTaXplIDw8IDAgKTsKKyAgICAgICAgdG1wOTlfXyB8PSAoIHBTcmMtPnJzdmQgPDwgMTIgKTsKKyAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wOTlfXywgMCk7CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDI7CiAgICAgICAgIC8vIGZpZWxkc0VuZEZsYWcgID0gMSAKICAgICAgICAgbkJ1ZiAtPSAgMiA7CkBAIC0yMzg2MCwxMSArMjU1MDcsMTEgQEAKICAgICB0QU5JX1U4KiBwSWVMZW4gPSAwOwogICAgIHRBTklfVTMyIG5Db25zdW1lZE9uRW50cnkgPSAqcG5Db25zdW1lZDsKICAgICB0QU5JX1UzMiBuTmVlZGVkID0gMFU7Ci0gICAgdEFOSV9VOCB0bXA5OV9fOwogICAgIHRBTklfVTggdG1wMTAwX187CiAgICAgdEFOSV9VOCB0bXAxMDFfXzsKICAgICB0QU5JX1U4IHRtcDEwMl9fOwogICAgIHRBTklfVTggdG1wMTAzX187CisgICAgdEFOSV9VOCB0bXAxMDRfXzsKICAgICBuTmVlZGVkICArPSA1OwogICAgIHdoaWxlICggcFNyYy0+cHJlc2VudCApCiAgICAgewpAQCAtMjM4NzMsNTggKzI1NTIwLDU4IEBACiAgICAgICAgICsrcEJ1ZjsgKysoKnBuQ29uc3VtZWQpOwogICAgICAgICBwSWVMZW4gPSBwQnVmOwogICAgICAgICArK3BCdWY7ICsrKCpwbkNvbnN1bWVkKTsKLSAgICAgICAgdG1wOTlfXyA9IDBVOwotICAgICAgICB0bXA5OV9fIHw9ICggcFNyYy0+TGlua01lYXN1cmVtZW50IDw8IDAgKTsKLSAgICAgICAgdG1wOTlfXyB8PSAoIHBTcmMtPk5laWdoYm9yUnB0IDw8IDEgKTsKLSAgICAgICAgdG1wOTlfXyB8PSAoIHBTcmMtPnBhcmFsbGVsIDw8IDIgKTsKLSAgICAgICAgdG1wOTlfXyB8PSAoIHBTcmMtPnJlcGVhdGVkIDw8IDMgKTsKLSAgICAgICAgdG1wOTlfXyB8PSAoIHBTcmMtPkJlYWNvblBhc3NpdmUgPDwgNCApOwotICAgICAgICB0bXA5OV9fIHw9ICggcFNyYy0+QmVhY29uQWN0aXZlIDw8IDUgKTsKLSAgICAgICAgdG1wOTlfXyB8PSAoIHBTcmMtPkJlYWNvblRhYmxlIDw8IDYgKTsKLSAgICAgICAgdG1wOTlfXyB8PSAoIHBTcmMtPkJlYWNvblJlcENvbmQgPDwgNyApOwotICAgICAgICAqcEJ1ZiA9IHRtcDk5X187Ci0gICAgICAgICpwbkNvbnN1bWVkICs9IDE7Ci0gICAgICAgIHBCdWYgKz0gMTsKLSAgICAgICAgbkJ1ZiAtPSAgMSA7CiAgICAgICAgIHRtcDEwMF9fID0gMFU7Ci0gICAgICAgIHRtcDEwMF9fIHw9ICggcFNyYy0+RnJhbWVNZWFzdXJlbWVudCA8PCAwICk7Ci0gICAgICAgIHRtcDEwMF9fIHw9ICggcFNyYy0+Q2hhbm5lbExvYWQgPDwgMSApOwotICAgICAgICB0bXAxMDBfXyB8PSAoIHBTcmMtPk5vaXNlSGlzdG9ncmFtIDw8IDIgKTsKLSAgICAgICAgdG1wMTAwX18gfD0gKCBwU3JjLT5zdGF0aXN0aWNzIDw8IDMgKTsKLSAgICAgICAgdG1wMTAwX18gfD0gKCBwU3JjLT5MQ0lNZWFzdXJlbWVudCA8PCA0ICk7Ci0gICAgICAgIHRtcDEwMF9fIHw9ICggcFNyYy0+TENJQXppbXV0aCA8PCA1ICk7Ci0gICAgICAgIHRtcDEwMF9fIHw9ICggcFNyYy0+VENNQ2FwYWJpbGl0eSA8PCA2ICk7Ci0gICAgICAgIHRtcDEwMF9fIHw9ICggcFNyYy0+dHJpZ2dlcmVkVENNIDw8IDcgKTsKKyAgICAgICAgdG1wMTAwX18gfD0gKCBwU3JjLT5MaW5rTWVhc3VyZW1lbnQgPDwgMCApOworICAgICAgICB0bXAxMDBfXyB8PSAoIHBTcmMtPk5laWdoYm9yUnB0IDw8IDEgKTsKKyAgICAgICAgdG1wMTAwX18gfD0gKCBwU3JjLT5wYXJhbGxlbCA8PCAyICk7CisgICAgICAgIHRtcDEwMF9fIHw9ICggcFNyYy0+cmVwZWF0ZWQgPDwgMyApOworICAgICAgICB0bXAxMDBfXyB8PSAoIHBTcmMtPkJlYWNvblBhc3NpdmUgPDwgNCApOworICAgICAgICB0bXAxMDBfXyB8PSAoIHBTcmMtPkJlYWNvbkFjdGl2ZSA8PCA1ICk7CisgICAgICAgIHRtcDEwMF9fIHw9ICggcFNyYy0+QmVhY29uVGFibGUgPDwgNiApOworICAgICAgICB0bXAxMDBfXyB8PSAoIHBTcmMtPkJlYWNvblJlcENvbmQgPDwgNyApOwogICAgICAgICAqcEJ1ZiA9IHRtcDEwMF9fOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7CiAgICAgICAgIG5CdWYgLT0gIDEgOwogICAgICAgICB0bXAxMDFfXyA9IDBVOwotICAgICAgICB0bXAxMDFfXyB8PSAoIHBTcmMtPkFQQ2hhblJlcG9ydCA8PCAwICk7Ci0gICAgICAgIHRtcDEwMV9fIHw9ICggcFNyYy0+UlJNTUlCRW5hYmxlZCA8PCAxICk7Ci0gICAgICAgIHRtcDEwMV9fIHw9ICggcFNyYy0+b3BlcmF0aW5nQ2hhbk1heCA8PCAyICk7Ci0gICAgICAgIHRtcDEwMV9fIHw9ICggcFNyYy0+bm9uT3BlcmF0aW5DaGFuTWF4IDw8IDUgKTsKKyAgICAgICAgdG1wMTAxX18gfD0gKCBwU3JjLT5GcmFtZU1lYXN1cmVtZW50IDw8IDAgKTsKKyAgICAgICAgdG1wMTAxX18gfD0gKCBwU3JjLT5DaGFubmVsTG9hZCA8PCAxICk7CisgICAgICAgIHRtcDEwMV9fIHw9ICggcFNyYy0+Tm9pc2VIaXN0b2dyYW0gPDwgMiApOworICAgICAgICB0bXAxMDFfXyB8PSAoIHBTcmMtPnN0YXRpc3RpY3MgPDwgMyApOworICAgICAgICB0bXAxMDFfXyB8PSAoIHBTcmMtPkxDSU1lYXN1cmVtZW50IDw8IDQgKTsKKyAgICAgICAgdG1wMTAxX18gfD0gKCBwU3JjLT5MQ0lBemltdXRoIDw8IDUgKTsKKyAgICAgICAgdG1wMTAxX18gfD0gKCBwU3JjLT5UQ01DYXBhYmlsaXR5IDw8IDYgKTsKKyAgICAgICAgdG1wMTAxX18gfD0gKCBwU3JjLT50cmlnZ2VyZWRUQ00gPDwgNyApOwogICAgICAgICAqcEJ1ZiA9IHRtcDEwMV9fOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7CiAgICAgICAgIG5CdWYgLT0gIDEgOwogICAgICAgICB0bXAxMDJfXyA9IDBVOwotICAgICAgICB0bXAxMDJfXyB8PSAoIHBTcmMtPk1lYXN1cmVtZW50UGlsb3QgPDwgMCApOwotICAgICAgICB0bXAxMDJfXyB8PSAoIHBTcmMtPk1lYXN1cmVtZW50UGlsb3RFbmFibGVkIDw8IDMgKTsKLSAgICAgICAgdG1wMTAyX18gfD0gKCBwU3JjLT5OZWlnaGJvclRTRk9mZnNldCA8PCA0ICk7Ci0gICAgICAgIHRtcDEwMl9fIHw9ICggcFNyYy0+UkNQSU1lYXN1cmVtZW50IDw8IDUgKTsKLSAgICAgICAgdG1wMTAyX18gfD0gKCBwU3JjLT5SU05JTWVhc3VyZW1lbnQgPDwgNiApOwotICAgICAgICB0bXAxMDJfXyB8PSAoIHBTcmMtPkJzc0F2Z0FjY2Vzc0RlbGF5IDw8IDcgKTsKKyAgICAgICAgdG1wMTAyX18gfD0gKCBwU3JjLT5BUENoYW5SZXBvcnQgPDwgMCApOworICAgICAgICB0bXAxMDJfXyB8PSAoIHBTcmMtPlJSTU1JQkVuYWJsZWQgPDwgMSApOworICAgICAgICB0bXAxMDJfXyB8PSAoIHBTcmMtPm9wZXJhdGluZ0NoYW5NYXggPDwgMiApOworICAgICAgICB0bXAxMDJfXyB8PSAoIHBTcmMtPm5vbk9wZXJhdGluQ2hhbk1heCA8PCA1ICk7CiAgICAgICAgICpwQnVmID0gdG1wMTAyX187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7CiAgICAgICAgIHRtcDEwM19fID0gMFU7Ci0gICAgICAgIHRtcDEwM19fIHw9ICggcFNyYy0+QlNTQXZhaWxBZG1pc3Npb24gPDwgMCApOwotICAgICAgICB0bXAxMDNfXyB8PSAoIHBTcmMtPkFudGVubmFJbmZvcm1hdGlvbiA8PCAxICk7Ci0gICAgICAgIHRtcDEwM19fIHw9ICggcFNyYy0+cmVzZXJ2ZWQgPDwgMiApOworICAgICAgICB0bXAxMDNfXyB8PSAoIHBTcmMtPk1lYXN1cmVtZW50UGlsb3QgPDwgMCApOworICAgICAgICB0bXAxMDNfXyB8PSAoIHBTcmMtPk1lYXN1cmVtZW50UGlsb3RFbmFibGVkIDw8IDMgKTsKKyAgICAgICAgdG1wMTAzX18gfD0gKCBwU3JjLT5OZWlnaGJvclRTRk9mZnNldCA8PCA0ICk7CisgICAgICAgIHRtcDEwM19fIHw9ICggcFNyYy0+UkNQSU1lYXN1cmVtZW50IDw8IDUgKTsKKyAgICAgICAgdG1wMTAzX18gfD0gKCBwU3JjLT5SU05JTWVhc3VyZW1lbnQgPDwgNiApOworICAgICAgICB0bXAxMDNfXyB8PSAoIHBTcmMtPkJzc0F2Z0FjY2Vzc0RlbGF5IDw8IDcgKTsKICAgICAgICAgKnBCdWYgPSB0bXAxMDNfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKKyAgICAgICAgcEJ1ZiArPSAxOworICAgICAgICBuQnVmIC09ICAxIDsKKyAgICAgICAgdG1wMTA0X18gPSAwVTsKKyAgICAgICAgdG1wMTA0X18gfD0gKCBwU3JjLT5CU1NBdmFpbEFkbWlzc2lvbiA8PCAwICk7CisgICAgICAgIHRtcDEwNF9fIHw9ICggcFNyYy0+QW50ZW5uYUluZm9ybWF0aW9uIDw8IDEgKTsKKyAgICAgICAgdG1wMTA0X18gfD0gKCBwU3JjLT5yZXNlcnZlZCA8PCAyICk7CisgICAgICAgICpwQnVmID0gdG1wMTA0X187CisgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIC8vIGZpZWxkc0VuZEZsYWcgID0gMSAKICAgICAgICAgbkJ1ZiAtPSAgMSA7CiAgICAgICAgIGJyZWFrOwpAQCAtMjQwMDYsNyArMjU2NTMsNyBAQAogICAgIHRBTklfVTgqIHBJZUxlbiA9IDA7CiAgICAgdEFOSV9VMzIgbkNvbnN1bWVkT25FbnRyeSA9ICpwbkNvbnN1bWVkOwogICAgIHRBTklfVTMyIG5OZWVkZWQgPSAwVTsKLSAgICB0QU5JX1UxNiB0bXAxMDRfXzsKKyAgICB0QU5JX1UxNiB0bXAxMDVfXzsKICAgICBuTmVlZGVkICArPSAxNDsKICAgICB3aGlsZSAoIHBTcmMtPnByZXNlbnQgKQogICAgIHsKQEAgLTI0MDE1LDEyICsyNTY2MiwxMiBAQAogICAgICAgICArK3BCdWY7ICsrKCpwbkNvbnN1bWVkKTsKICAgICAgICAgcEllTGVuID0gcEJ1ZjsKICAgICAgICAgKytwQnVmOyArKygqcG5Db25zdW1lZCk7Ci0gICAgICAgIHRtcDEwNF9fID0gMFU7Ci0gICAgICAgIHRtcDEwNF9fIHw9ICggcFNyYy0+YWdncmVnYXRpb24gPDwgMCApOwotICAgICAgICB0bXAxMDRfXyB8PSAoIHBTcmMtPnRzaWQgPDwgMSApOwotICAgICAgICB0bXAxMDRfXyB8PSAoIHBTcmMtPmRpcmVjdGlvbiA8PCA1ICk7Ci0gICAgICAgIHRtcDEwNF9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQgPDwgNyApOwotICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXAxMDRfXywgMCk7CisgICAgICAgIHRtcDEwNV9fID0gMFU7CisgICAgICAgIHRtcDEwNV9fIHw9ICggcFNyYy0+YWdncmVnYXRpb24gPDwgMCApOworICAgICAgICB0bXAxMDVfXyB8PSAoIHBTcmMtPnRzaWQgPDwgMSApOworICAgICAgICB0bXAxMDVfXyB8PSAoIHBTcmMtPmRpcmVjdGlvbiA8PCA1ICk7CisgICAgICAgIHRtcDEwNV9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQgPDwgNyApOworICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXAxMDVfXywgMCk7CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDI7CiAgICAgICAgIHBCdWYgKz0gMjsKICAgICAgICAgbkJ1ZiAtPSAgMiA7CkBAIC0yNDIyMCw5ICsyNTg2Nyw5IEBACiAgICAgdEFOSV9VOCogcEllTGVuID0gMDsKICAgICB0QU5JX1UzMiBuQ29uc3VtZWRPbkVudHJ5ID0gKnBuQ29uc3VtZWQ7CiAgICAgdEFOSV9VMzIgbk5lZWRlZCA9IDBVOwotICAgIHRBTklfVTE2IHRtcDEwNV9fOwotICAgIHRBTklfVTggdG1wMTA2X187Ci0gICAgdEFOSV9VMTYgdG1wMTA3X187CisgICAgdEFOSV9VMTYgdG1wMTA2X187CisgICAgdEFOSV9VOCB0bXAxMDdfXzsKKyAgICB0QU5JX1UxNiB0bXAxMDhfXzsKICAgICBuTmVlZGVkICArPSA1NTsKICAgICB3aGlsZSAoIHBTcmMtPnByZXNlbnQgKQogICAgIHsKQEAgLTI0MjMxLDMwICsyNTg3OCwzMCBAQAogICAgICAgICArK3BCdWY7ICsrKCpwbkNvbnN1bWVkKTsKICAgICAgICAgcEllTGVuID0gcEJ1ZjsKICAgICAgICAgKytwQnVmOyArKygqcG5Db25zdW1lZCk7Ci0gICAgICAgIHRtcDEwNV9fID0gMFU7Ci0gICAgICAgIHRtcDEwNV9fIHw9ICggcFNyYy0+dHJhZmZpY190eXBlIDw8IDAgKTsKLSAgICAgICAgdG1wMTA1X18gfD0gKCBwU3JjLT50c2lkIDw8IDEgKTsKLSAgICAgICAgdG1wMTA1X18gfD0gKCBwU3JjLT5kaXJlY3Rpb24gPDwgNSApOwotICAgICAgICB0bXAxMDVfXyB8PSAoIHBTcmMtPmFjY2Vzc19wb2xpY3kgPDwgNyApOwotICAgICAgICB0bXAxMDVfXyB8PSAoIHBTcmMtPmFnZ3JlZ2F0aW9uIDw8IDkgKTsKLSAgICAgICAgdG1wMTA1X18gfD0gKCBwU3JjLT5wc2IgPDwgMTAgKTsKLSAgICAgICAgdG1wMTA1X18gfD0gKCBwU3JjLT51c2VyX3ByaW9yaXR5IDw8IDExICk7Ci0gICAgICAgIHRtcDEwNV9fIHw9ICggcFNyYy0+dHNpbmZvX2Fja19wb2wgPDwgMTQgKTsKLSAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wMTA1X18sIDApOworICAgICAgICB0bXAxMDZfXyA9IDBVOworICAgICAgICB0bXAxMDZfXyB8PSAoIHBTcmMtPnRyYWZmaWNfdHlwZSA8PCAwICk7CisgICAgICAgIHRtcDEwNl9fIHw9ICggcFNyYy0+dHNpZCA8PCAxICk7CisgICAgICAgIHRtcDEwNl9fIHw9ICggcFNyYy0+ZGlyZWN0aW9uIDw8IDUgKTsKKyAgICAgICAgdG1wMTA2X18gfD0gKCBwU3JjLT5hY2Nlc3NfcG9saWN5IDw8IDcgKTsKKyAgICAgICAgdG1wMTA2X18gfD0gKCBwU3JjLT5hZ2dyZWdhdGlvbiA8PCA5ICk7CisgICAgICAgIHRtcDEwNl9fIHw9ICggcFNyYy0+cHNiIDw8IDEwICk7CisgICAgICAgIHRtcDEwNl9fIHw9ICggcFNyYy0+dXNlcl9wcmlvcml0eSA8PCAxMSApOworICAgICAgICB0bXAxMDZfXyB8PSAoIHBTcmMtPnRzaW5mb19hY2tfcG9sIDw8IDE0ICk7CisgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHRtcDEwNl9fLCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwogICAgICAgICBuQnVmIC09ICAyIDsKLSAgICAgICAgdG1wMTA2X18gPSAwVTsKLSAgICAgICAgdG1wMTA2X18gfD0gKCBwU3JjLT5zY2hlZHVsZSA8PCAwICk7Ci0gICAgICAgIHRtcDEwNl9fIHw9ICggcFNyYy0+dW51c2VkIDw8IDEgKTsKLSAgICAgICAgKnBCdWYgPSB0bXAxMDZfXzsKKyAgICAgICAgdG1wMTA3X18gPSAwVTsKKyAgICAgICAgdG1wMTA3X18gfD0gKCBwU3JjLT5zY2hlZHVsZSA8PCAwICk7CisgICAgICAgIHRtcDEwN19fIHw9ICggcFNyYy0+dW51c2VkIDw8IDEgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxMDdfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKLSAgICAgICAgdG1wMTA3X18gPSAwVTsKLSAgICAgICAgdG1wMTA3X18gfD0gKCBwU3JjLT5zaXplIDw8IDAgKTsKLSAgICAgICAgdG1wMTA3X18gfD0gKCBwU3JjLT5maXhlZCA8PCAxNSApOwotICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXAxMDdfXywgMCk7CisgICAgICAgIHRtcDEwOF9fID0gMFU7CisgICAgICAgIHRtcDEwOF9fIHw9ICggcFNyYy0+c2l6ZSA8PCAwICk7CisgICAgICAgIHRtcDEwOF9fIHw9ICggcFNyYy0+Zml4ZWQgPDwgMTUgKTsKKyAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wMTA4X18sIDApOwogICAgICAgICAqcG5Db25zdW1lZCArPSAyOwogICAgICAgICBwQnVmICs9IDI7CiAgICAgICAgIG5CdWYgLT0gIDIgOwpAQCAtMjQzMTksNyArMjU5NjYsNyBAQAogICAgIHRBTklfVTgqIHBJZUxlbiA9IDA7CiAgICAgdEFOSV9VMzIgbkNvbnN1bWVkT25FbnRyeSA9ICpwbkNvbnN1bWVkOwogICAgIHRBTklfVTMyIG5OZWVkZWQgPSAwVTsKLSAgICB0QU5JX1UxNiB0bXAxMDhfXzsKKyAgICB0QU5JX1UxNiB0bXAxMDlfXzsKICAgICBuTmVlZGVkICArPSAxNTsKICAgICB3aGlsZSAoIHBTcmMtPnByZXNlbnQgKQogICAgIHsKQEAgLTI0MzQxLDEyICsyNTk4OCwxMiBAQAogICAgICAgICAqcEJ1ZiA9IHBTcmMtPnZlcnNpb247CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKLSAgICAgICAgdG1wMTA4X18gPSAwVTsKLSAgICAgICAgdG1wMTA4X18gfD0gKCBwU3JjLT5hZ2dyZWdhdGlvbiA8PCAwICk7Ci0gICAgICAgIHRtcDEwOF9fIHw9ICggcFNyYy0+dHNpZCA8PCAxICk7Ci0gICAgICAgIHRtcDEwOF9fIHw9ICggcFNyYy0+ZGlyZWN0aW9uIDw8IDUgKTsKLSAgICAgICAgdG1wMTA4X18gfD0gKCBwU3JjLT5yZXNlcnZlZCA8PCA3ICk7Ci0gICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHRtcDEwOF9fLCAwKTsKKyAgICAgICAgdG1wMTA5X18gPSAwVTsKKyAgICAgICAgdG1wMTA5X18gfD0gKCBwU3JjLT5hZ2dyZWdhdGlvbiA8PCAwICk7CisgICAgICAgIHRtcDEwOV9fIHw9ICggcFNyYy0+dHNpZCA8PCAxICk7CisgICAgICAgIHRtcDEwOV9fIHw9ICggcFNyYy0+ZGlyZWN0aW9uIDw8IDUgKTsKKyAgICAgICAgdG1wMTA5X18gfD0gKCBwU3JjLT5yZXNlcnZlZCA8PCA3ICk7CisgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHRtcDEwOV9fLCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwogICAgICAgICBuQnVmIC09ICAyIDsKQEAgLTI0NTg1LDkgKzI2MjMyLDkgQEAKICAgICB0QU5JX1U4KiBwSWVMZW4gPSAwOwogICAgIHRBTklfVTMyIG5Db25zdW1lZE9uRW50cnkgPSAqcG5Db25zdW1lZDsKICAgICB0QU5JX1UzMiBuTmVlZGVkID0gMFU7Ci0gICAgdEFOSV9VMTYgdG1wMTA5X187Ci0gICAgdEFOSV9VOCB0bXAxMTBfXzsKLSAgICB0QU5JX1UxNiB0bXAxMTFfXzsKKyAgICB0QU5JX1UxNiB0bXAxMTBfXzsKKyAgICB0QU5JX1U4IHRtcDExMV9fOworICAgIHRBTklfVTE2IHRtcDExMl9fOwogICAgIG5OZWVkZWQgICs9IDM4OwogICAgIHdoaWxlICggcFNyYy0+cHJlc2VudCApCiAgICAgewpAQCAtMjQ2MDksMzAgKzI2MjU2LDMwIEBACiAgICAgICAgICpwQnVmID0gcFNyYy0+dmVyc2lvbjsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwotICAgICAgICB0bXAxMDlfXyA9IDBVOwotICAgICAgICB0bXAxMDlfXyB8PSAoIHBTcmMtPnRyYWZmaWNfdHlwZSA8PCAwICk7Ci0gICAgICAgIHRtcDEwOV9fIHw9ICggcFNyYy0+dHNpZCA8PCAxICk7Ci0gICAgICAgIHRtcDEwOV9fIHw9ICggcFNyYy0+ZGlyZWN0aW9uIDw8IDUgKTsKLSAgICAgICAgdG1wMTA5X18gfD0gKCBwU3JjLT5hY2Nlc3NfcG9saWN5IDw8IDcgKTsKLSAgICAgICAgdG1wMTA5X18gfD0gKCBwU3JjLT5hZ2dyZWdhdGlvbiA8PCA5ICk7Ci0gICAgICAgIHRtcDEwOV9fIHw9ICggcFNyYy0+cHNiIDw8IDEwICk7Ci0gICAgICAgIHRtcDEwOV9fIHw9ICggcFNyYy0+dXNlcl9wcmlvcml0eSA8PCAxMSApOwotICAgICAgICB0bXAxMDlfXyB8PSAoIHBTcmMtPnRzaW5mb19hY2tfcG9sIDw8IDE0ICk7Ci0gICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHRtcDEwOV9fLCAwKTsKKyAgICAgICAgdG1wMTEwX18gPSAwVTsKKyAgICAgICAgdG1wMTEwX18gfD0gKCBwU3JjLT50cmFmZmljX3R5cGUgPDwgMCApOworICAgICAgICB0bXAxMTBfXyB8PSAoIHBTcmMtPnRzaWQgPDwgMSApOworICAgICAgICB0bXAxMTBfXyB8PSAoIHBTcmMtPmRpcmVjdGlvbiA8PCA1ICk7CisgICAgICAgIHRtcDExMF9fIHw9ICggcFNyYy0+YWNjZXNzX3BvbGljeSA8PCA3ICk7CisgICAgICAgIHRtcDExMF9fIHw9ICggcFNyYy0+YWdncmVnYXRpb24gPDwgOSApOworICAgICAgICB0bXAxMTBfXyB8PSAoIHBTcmMtPnBzYiA8PCAxMCApOworICAgICAgICB0bXAxMTBfXyB8PSAoIHBTcmMtPnVzZXJfcHJpb3JpdHkgPDwgMTEgKTsKKyAgICAgICAgdG1wMTEwX18gfD0gKCBwU3JjLT50c2luZm9fYWNrX3BvbCA8PCAxNCApOworICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXAxMTBfXywgMCk7CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDI7CiAgICAgICAgIHBCdWYgKz0gMjsKICAgICAgICAgbkJ1ZiAtPSAgMiA7Ci0gICAgICAgIHRtcDExMF9fID0gMFU7Ci0gICAgICAgIHRtcDExMF9fIHw9ICggcFNyYy0+dHNpbmZvX3JzdmQgPDwgMCApOwotICAgICAgICB0bXAxMTBfXyB8PSAoIHBTcmMtPmJ1cnN0X3NpemVfZGVmbiA8PCA3ICk7Ci0gICAgICAgICpwQnVmID0gdG1wMTEwX187CisgICAgICAgIHRtcDExMV9fID0gMFU7CisgICAgICAgIHRtcDExMV9fIHw9ICggcFNyYy0+dHNpbmZvX3JzdmQgPDwgMCApOworICAgICAgICB0bXAxMTFfXyB8PSAoIHBTcmMtPmJ1cnN0X3NpemVfZGVmbiA8PCA3ICk7CisgICAgICAgICpwQnVmID0gdG1wMTExX187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7Ci0gICAgICAgIHRtcDExMV9fID0gMFU7Ci0gICAgICAgIHRtcDExMV9fIHw9ICggcFNyYy0+c2l6ZSA8PCAwICk7Ci0gICAgICAgIHRtcDExMV9fIHw9ICggcFNyYy0+Zml4ZWQgPDwgMTUgKTsKLSAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wMTExX18sIDApOworICAgICAgICB0bXAxMTJfXyA9IDBVOworICAgICAgICB0bXAxMTJfXyB8PSAoIHBTcmMtPnNpemUgPDwgMCApOworICAgICAgICB0bXAxMTJfXyB8PSAoIHBTcmMtPmZpeGVkIDw8IDE1ICk7CisgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHRtcDExMl9fLCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwogICAgICAgICBuQnVmIC09ICAyIDsKQEAgLTI0Nzc3LDcgKzI2NDI0LDcgQEAKICAgICB0QU5JX1U4KiBwSWVMZW4gPSAwOwogICAgIHRBTklfVTMyIG5Db25zdW1lZE9uRW50cnkgPSAqcG5Db25zdW1lZDsKICAgICB0QU5JX1UzMiBuTmVlZGVkID0gMFU7Ci0gICAgdEFOSV9VOCB0bXAxMTJfXzsKKyAgICB0QU5JX1U4IHRtcDExM19fOwogICAgIG5OZWVkZWQgICs9IDI7CiAgICAgd2hpbGUgKCBwU3JjLT5wcmVzZW50ICkKICAgICB7CkBAIC0yNDc5NywxMCArMjY0NDQsMTAgQEAKICAgICAgICAgKnBCdWYgPSBwU3JjLT5tZ210X3N0YXRlOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7Ci0gICAgICAgIHRtcDExMl9fID0gMFU7Ci0gICAgICAgIHRtcDExMl9fIHw9ICggcFNyYy0+bWJzc2lkX21hc2sgPDwgMCApOwotICAgICAgICB0bXAxMTJfXyB8PSAoIHBTcmMtPnJlc2VydmVkIDw8IDMgKTsKLSAgICAgICAgKnBCdWYgPSB0bXAxMTJfXzsKKyAgICAgICAgdG1wMTEzX18gPSAwVTsKKyAgICAgICAgdG1wMTEzX18gfD0gKCBwU3JjLT5tYnNzaWRfbWFzayA8PCAwICk7CisgICAgICAgIHRtcDExM19fIHw9ICggcFNyYy0+cmVzZXJ2ZWQgPDwgMyApOworICAgICAgICAqcEJ1ZiA9IHRtcDExM19fOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICAvLyBmaWVsZHNFbmRGbGFnICA9IDEgCiAgICAgICAgIG5CdWYgLT0gIDEgOwpAQCAtMjUxNjAsNyArMjY4MDcsNiBAQAogICAgIHRBTklfVTgqIHBJZUxlbiA9IDA7CiAgICAgdEFOSV9VMzIgbkNvbnN1bWVkT25FbnRyeSA9ICpwbkNvbnN1bWVkOwogICAgIHRBTklfVTMyIG5OZWVkZWQgPSAwVTsKLSAgICB0QU5JX1U4IHRtcDExM19fOwogICAgIHRBTklfVTggdG1wMTE0X187CiAgICAgdEFOSV9VOCB0bXAxMTVfXzsKICAgICB0QU5JX1U4IHRtcDExNl9fOwpAQCAtMjUxNjgsNiArMjY4MTQsNyBAQAogICAgIHRBTklfVTggdG1wMTE4X187CiAgICAgdEFOSV9VOCB0bXAxMTlfXzsKICAgICB0QU5JX1U4IHRtcDEyMF9fOworICAgIHRBTklfVTggdG1wMTIxX187CiAgICAgbk5lZWRlZCAgKz0gMTg7CiAgICAgd2hpbGUgKCBwU3JjLT5wcmVzZW50ICkKICAgICB7CkBAIC0yNTE4Miw3NiArMjY4MjksNzYgQEAKICAgICAgICAgKnBCdWYgPSBwU3JjLT5yZXNlcnZlZDsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwotICAgICAgICB0bXAxMTNfXyA9IDBVOwotICAgICAgICB0bXAxMTNfXyB8PSAoIHBTcmMtPmFjYmVfYWlmc24gPDwgMCApOwotICAgICAgICB0bXAxMTNfXyB8PSAoIHBTcmMtPmFjYmVfYWNtIDw8IDQgKTsKLSAgICAgICAgdG1wMTEzX18gfD0gKCBwU3JjLT5hY2JlX2FjaSA8PCA1ICk7Ci0gICAgICAgIHRtcDExM19fIHw9ICggcFNyYy0+dW51c2VkMSA8PCA3ICk7Ci0gICAgICAgICpwQnVmID0gdG1wMTEzX187CisgICAgICAgIHRtcDExNF9fID0gMFU7CisgICAgICAgIHRtcDExNF9fIHw9ICggcFNyYy0+YWNiZV9haWZzbiA8PCAwICk7CisgICAgICAgIHRtcDExNF9fIHw9ICggcFNyYy0+YWNiZV9hY20gPDwgNCApOworICAgICAgICB0bXAxMTRfXyB8PSAoIHBTcmMtPmFjYmVfYWNpIDw8IDUgKTsKKyAgICAgICAgdG1wMTE0X18gfD0gKCBwU3JjLT51bnVzZWQxIDw8IDcgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxMTRfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKLSAgICAgICAgdG1wMTE0X18gPSAwVTsKLSAgICAgICAgdG1wMTE0X18gfD0gKCBwU3JjLT5hY2JlX2Fjd21pbiA8PCAwICk7Ci0gICAgICAgIHRtcDExNF9fIHw9ICggcFNyYy0+YWNiZV9hY3dtYXggPDwgNCApOwotICAgICAgICAqcEJ1ZiA9IHRtcDExNF9fOworICAgICAgICB0bXAxMTVfXyA9IDBVOworICAgICAgICB0bXAxMTVfXyB8PSAoIHBTcmMtPmFjYmVfYWN3bWluIDw8IDAgKTsKKyAgICAgICAgdG1wMTE1X18gfD0gKCBwU3JjLT5hY2JlX2Fjd21heCA8PCA0ICk7CisgICAgICAgICpwQnVmID0gdG1wMTE1X187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7CiAgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHBTcmMtPmFjYmVfdHhvcGxpbWl0LCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwotICAgICAgICB0bXAxMTVfXyA9IDBVOwotICAgICAgICB0bXAxMTVfXyB8PSAoIHBTcmMtPmFjYmtfYWlmc24gPDwgMCApOwotICAgICAgICB0bXAxMTVfXyB8PSAoIHBTcmMtPmFjYmtfYWNtIDw8IDQgKTsKLSAgICAgICAgdG1wMTE1X18gfD0gKCBwU3JjLT5hY2JrX2FjaSA8PCA1ICk7Ci0gICAgICAgIHRtcDExNV9fIHw9ICggcFNyYy0+dW51c2VkMiA8PCA3ICk7Ci0gICAgICAgICpwQnVmID0gdG1wMTE1X187CisgICAgICAgIHRtcDExNl9fID0gMFU7CisgICAgICAgIHRtcDExNl9fIHw9ICggcFNyYy0+YWNia19haWZzbiA8PCAwICk7CisgICAgICAgIHRtcDExNl9fIHw9ICggcFNyYy0+YWNia19hY20gPDwgNCApOworICAgICAgICB0bXAxMTZfXyB8PSAoIHBTcmMtPmFjYmtfYWNpIDw8IDUgKTsKKyAgICAgICAgdG1wMTE2X18gfD0gKCBwU3JjLT51bnVzZWQyIDw8IDcgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxMTZfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKLSAgICAgICAgdG1wMTE2X18gPSAwVTsKLSAgICAgICAgdG1wMTE2X18gfD0gKCBwU3JjLT5hY2JrX2Fjd21pbiA8PCAwICk7Ci0gICAgICAgIHRtcDExNl9fIHw9ICggcFNyYy0+YWNia19hY3dtYXggPDwgNCApOwotICAgICAgICAqcEJ1ZiA9IHRtcDExNl9fOworICAgICAgICB0bXAxMTdfXyA9IDBVOworICAgICAgICB0bXAxMTdfXyB8PSAoIHBTcmMtPmFjYmtfYWN3bWluIDw8IDAgKTsKKyAgICAgICAgdG1wMTE3X18gfD0gKCBwU3JjLT5hY2JrX2Fjd21heCA8PCA0ICk7CisgICAgICAgICpwQnVmID0gdG1wMTE3X187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7CiAgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHBTcmMtPmFjYmtfdHhvcGxpbWl0LCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwotICAgICAgICB0bXAxMTdfXyA9IDBVOwotICAgICAgICB0bXAxMTdfXyB8PSAoIHBTcmMtPmFjdmlfYWlmc24gPDwgMCApOwotICAgICAgICB0bXAxMTdfXyB8PSAoIHBTcmMtPmFjdmlfYWNtIDw8IDQgKTsKLSAgICAgICAgdG1wMTE3X18gfD0gKCBwU3JjLT5hY3ZpX2FjaSA8PCA1ICk7Ci0gICAgICAgIHRtcDExN19fIHw9ICggcFNyYy0+dW51c2VkMyA8PCA3ICk7Ci0gICAgICAgICpwQnVmID0gdG1wMTE3X187CisgICAgICAgIHRtcDExOF9fID0gMFU7CisgICAgICAgIHRtcDExOF9fIHw9ICggcFNyYy0+YWN2aV9haWZzbiA8PCAwICk7CisgICAgICAgIHRtcDExOF9fIHw9ICggcFNyYy0+YWN2aV9hY20gPDwgNCApOworICAgICAgICB0bXAxMThfXyB8PSAoIHBTcmMtPmFjdmlfYWNpIDw8IDUgKTsKKyAgICAgICAgdG1wMTE4X18gfD0gKCBwU3JjLT51bnVzZWQzIDw8IDcgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxMThfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKLSAgICAgICAgdG1wMTE4X18gPSAwVTsKLSAgICAgICAgdG1wMTE4X18gfD0gKCBwU3JjLT5hY3ZpX2Fjd21pbiA8PCAwICk7Ci0gICAgICAgIHRtcDExOF9fIHw9ICggcFNyYy0+YWN2aV9hY3dtYXggPDwgNCApOwotICAgICAgICAqcEJ1ZiA9IHRtcDExOF9fOworICAgICAgICB0bXAxMTlfXyA9IDBVOworICAgICAgICB0bXAxMTlfXyB8PSAoIHBTcmMtPmFjdmlfYWN3bWluIDw8IDAgKTsKKyAgICAgICAgdG1wMTE5X18gfD0gKCBwU3JjLT5hY3ZpX2Fjd21heCA8PCA0ICk7CisgICAgICAgICpwQnVmID0gdG1wMTE5X187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7CiAgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHBTcmMtPmFjdmlfdHhvcGxpbWl0LCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwotICAgICAgICB0bXAxMTlfXyA9IDBVOwotICAgICAgICB0bXAxMTlfXyB8PSAoIHBTcmMtPmFjdm9fYWlmc24gPDwgMCApOwotICAgICAgICB0bXAxMTlfXyB8PSAoIHBTcmMtPmFjdm9fYWNtIDw8IDQgKTsKLSAgICAgICAgdG1wMTE5X18gfD0gKCBwU3JjLT5hY3ZvX2FjaSA8PCA1ICk7Ci0gICAgICAgIHRtcDExOV9fIHw9ICggcFNyYy0+dW51c2VkNCA8PCA3ICk7Ci0gICAgICAgICpwQnVmID0gdG1wMTE5X187CisgICAgICAgIHRtcDEyMF9fID0gMFU7CisgICAgICAgIHRtcDEyMF9fIHw9ICggcFNyYy0+YWN2b19haWZzbiA8PCAwICk7CisgICAgICAgIHRtcDEyMF9fIHw9ICggcFNyYy0+YWN2b19hY20gPDwgNCApOworICAgICAgICB0bXAxMjBfXyB8PSAoIHBTcmMtPmFjdm9fYWNpIDw8IDUgKTsKKyAgICAgICAgdG1wMTIwX18gfD0gKCBwU3JjLT51bnVzZWQ0IDw8IDcgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxMjBfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKLSAgICAgICAgdG1wMTIwX18gPSAwVTsKLSAgICAgICAgdG1wMTIwX18gfD0gKCBwU3JjLT5hY3ZvX2Fjd21pbiA8PCAwICk7Ci0gICAgICAgIHRtcDEyMF9fIHw9ICggcFNyYy0+YWN2b19hY3dtYXggPDwgNCApOwotICAgICAgICAqcEJ1ZiA9IHRtcDEyMF9fOworICAgICAgICB0bXAxMjFfXyA9IDBVOworICAgICAgICB0bXAxMjFfXyB8PSAoIHBTcmMtPmFjdm9fYWN3bWluIDw8IDAgKTsKKyAgICAgICAgdG1wMTIxX18gfD0gKCBwU3JjLT5hY3ZvX2Fjd21heCA8PCA0ICk7CisgICAgICAgICpwQnVmID0gdG1wMTIxX187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7CkBAIC0yNTI3Nyw3ICsyNjkyNCw3IEBACiAgICAgdEFOSV9VOCogcEllTGVuID0gMDsKICAgICB0QU5JX1UzMiBuQ29uc3VtZWRPbkVudHJ5ID0gKnBuQ29uc3VtZWQ7CiAgICAgdEFOSV9VMzIgbk5lZWRlZCA9IDBVOwotICAgIHRBTklfVTggdG1wMTIxX187CisgICAgdEFOSV9VOCB0bXAxMjJfXzsKICAgICBuTmVlZGVkICArPSAxOwogICAgIHdoaWxlICggcFNyYy0+cHJlc2VudCApCiAgICAgewpAQCAtMjUyODYsMTIgKzI2OTMzLDEyIEBACiAgICAgICAgICsrcEJ1ZjsgKysoKnBuQ29uc3VtZWQpOwogICAgICAgICBwSWVMZW4gPSBwQnVmOwogICAgICAgICArK3BCdWY7ICsrKCpwbkNvbnN1bWVkKTsKLSAgICAgICAgdG1wMTIxX18gPSAwVTsKLSAgICAgICAgdG1wMTIxX18gfD0gKCBwU3JjLT5ub25fZXJwX3ByZXNlbnQgPDwgMCApOwotICAgICAgICB0bXAxMjFfXyB8PSAoIHBTcmMtPnVzZV9wcm90IDw8IDEgKTsKLSAgICAgICAgdG1wMTIxX18gfD0gKCBwU3JjLT5iYXJrZXJfcHJlYW1ibGUgPDwgMiApOwotICAgICAgICB0bXAxMjFfXyB8PSAoIHBTcmMtPnVudXNlZCA8PCAzICk7Ci0gICAgICAgICpwQnVmID0gdG1wMTIxX187CisgICAgICAgIHRtcDEyMl9fID0gMFU7CisgICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+bm9uX2VycF9wcmVzZW50IDw8IDAgKTsKKyAgICAgICAgdG1wMTIyX18gfD0gKCBwU3JjLT51c2VfcHJvdCA8PCAxICk7CisgICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+YmFya2VyX3ByZWFtYmxlIDw8IDIgKTsKKyAgICAgICAgdG1wMTIyX18gfD0gKCBwU3JjLT51bnVzZWQgPDwgMyApOworICAgICAgICAqcEJ1ZiA9IHRtcDEyMl9fOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICAvLyBmaWVsZHNFbmRGbGFnICA9IDEgCiAgICAgICAgIG5CdWYgLT0gIDEgOwpAQCAtMjUzMTQsOSArMjY5NjEsOSBAQAogICAgIHRBTklfVTgqIHBJZUxlbiA9IDA7CiAgICAgdEFOSV9VMzIgbkNvbnN1bWVkT25FbnRyeSA9ICpwbkNvbnN1bWVkOwogICAgIHRBTklfVTMyIG5OZWVkZWQgPSAwVTsKLSAgICB0QU5JX1UzMiB0bXAxMjJfXzsKLSAgICB0QU5JX1UxNiB0bXAxMjNfXzsKKyAgICB0QU5JX1UzMiB0bXAxMjNfXzsKICAgICB0QU5JX1UxNiB0bXAxMjRfXzsKKyAgICB0QU5JX1UxNiB0bXAxMjVfXzsKICAgICBuTmVlZGVkICArPSA4OwogICAgIHdoaWxlICggcFNyYy0+cHJlc2VudCApCiAgICAgewpAQCAtMjUzMjUsNjggKzI2OTcyLDY5IEBACiAgICAgICAgICsrcEJ1ZjsgKysoKnBuQ29uc3VtZWQpOwogICAgICAgICBwSWVMZW4gPSBwQnVmOwogICAgICAgICArK3BCdWY7ICsrKCpwbkNvbnN1bWVkKTsKLSAgICAgICAgdG1wMTIyX18gPSAwVTsKLSAgICAgICAgdG1wMTIyX18gfD0gKCBwU3JjLT5ic3NDb2V4aXN0TWdtdFN1cHBvcnQgPDwgMCApOwotICAgICAgICB0bXAxMjJfXyB8PSAoIHBTcmMtPnJlc2VydmVkMSA8PCAxICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+ZXh0Q2hhblN3aXRjaCA8PCAyICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQyIDw8IDMgKTsKLSAgICAgICAgdG1wMTIyX18gfD0gKCBwU3JjLT5wc21wQ2FwIDw8IDQgKTsKLSAgICAgICAgdG1wMTIyX18gfD0gKCBwU3JjLT5yZXNlcnZlZDMgPDwgNSApOwotICAgICAgICB0bXAxMjJfXyB8PSAoIHBTcmMtPnNwc21wQ2FwIDw8IDYgKTsKLSAgICAgICAgdG1wMTIyX18gfD0gKCBwU3JjLT5ldmVudCA8PCA3ICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+ZGlhZ25vc3RpY3MgPDwgOCApOwotICAgICAgICB0bXAxMjJfXyB8PSAoIHBTcmMtPm11bHRpRGlhZ25vc3RpY3MgPDwgOSApOwotICAgICAgICB0bXAxMjJfXyB8PSAoIHBTcmMtPmxvY1RyYWNraW5nIDw8IDEwICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+Rk1TIDw8IDExICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+cHJveHlBUlBTZXJ2aWNlIDw8IDEyICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+Y29Mb2NJbnRmUmVwb3J0aW5nIDw8IDEzICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+Y2l2aWNMb2MgPDwgMTQgKTsKLSAgICAgICAgdG1wMTIyX18gfD0gKCBwU3JjLT5nZW9zcGF0aWFsTG9jIDw8IDE1ICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+VEZTIDw8IDE2ICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+d25tU2xlZXBNb2RlIDw8IDE3ICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+dGltQnJvYWRjYXN0IDw8IDE4ICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+YnNzVHJhbnNpdGlvbiA8PCAxOSApOwotICAgICAgICB0bXAxMjJfXyB8PSAoIHBTcmMtPnFvc1RyYWZmaWNDYXAgPDwgMjAgKTsKLSAgICAgICAgdG1wMTIyX18gfD0gKCBwU3JjLT5hY1N0YUNudCA8PCAyMSApOwotICAgICAgICB0bXAxMjJfXyB8PSAoIHBTcmMtPm11bHRpQlNTSUQgPDwgMjIgKTsKLSAgICAgICAgdG1wMTIyX18gfD0gKCBwU3JjLT50aW1pbmdNZWFzIDw8IDIzICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+Y2hhblVzYWdlIDw8IDI0ICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+c3NpZExpc3QgPDwgMjUgKTsKLSAgICAgICAgdG1wMTIyX18gfD0gKCBwU3JjLT5ETVMgPDwgMjYgKTsKLSAgICAgICAgdG1wMTIyX18gfD0gKCBwU3JjLT5VVENUU0ZPZmZzZXQgPDwgMjcgKTsKLSAgICAgICAgdG1wMTIyX18gfD0gKCBwU3JjLT5URExTUGVlclVBUFNEQnVmZmVyU1RBIDw8IDI4ICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+VERMU0NoYW5uZWxTd2l0Y2hpbmcgPDwgMjkgKTsKLSAgICAgICAgdG1wMTIyX18gfD0gKCBwU3JjLT5pbnRlcndvcmtpbmdTZXJ2aWNlIDw8IDMwICk7Ci0gICAgICAgIHRtcDEyMl9fIHw9ICggcFNyYy0+cW9zTWFwIDw8IDMxICk7Ci0gICAgICAgIGZyYW1lc2h0b25sKHBDdHgsIHBCdWYsIHRtcDEyMl9fLCAwKTsKKyAgICAgICAgdG1wMTIzX18gPSAwVTsKKyAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT5ic3NDb2V4aXN0TWdtdFN1cHBvcnQgPDwgMCApOworICAgICAgICB0bXAxMjNfXyB8PSAoIHBTcmMtPnJlc2VydmVkMSA8PCAxICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+ZXh0Q2hhblN3aXRjaCA8PCAyICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+cmVzZXJ2ZWQyIDw8IDMgKTsKKyAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT5wc21wQ2FwIDw8IDQgKTsKKyAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT5yZXNlcnZlZDMgPDwgNSApOworICAgICAgICB0bXAxMjNfXyB8PSAoIHBTcmMtPnNwc21wQ2FwIDw8IDYgKTsKKyAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT5ldmVudCA8PCA3ICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+ZGlhZ25vc3RpY3MgPDwgOCApOworICAgICAgICB0bXAxMjNfXyB8PSAoIHBTcmMtPm11bHRpRGlhZ25vc3RpY3MgPDwgOSApOworICAgICAgICB0bXAxMjNfXyB8PSAoIHBTcmMtPmxvY1RyYWNraW5nIDw8IDEwICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+Rk1TIDw8IDExICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+cHJveHlBUlBTZXJ2aWNlIDw8IDEyICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+Y29Mb2NJbnRmUmVwb3J0aW5nIDw8IDEzICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+Y2l2aWNMb2MgPDwgMTQgKTsKKyAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT5nZW9zcGF0aWFsTG9jIDw8IDE1ICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+VEZTIDw8IDE2ICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+d25tU2xlZXBNb2RlIDw8IDE3ICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+dGltQnJvYWRjYXN0IDw8IDE4ICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+YnNzVHJhbnNpdGlvbiA8PCAxOSApOworICAgICAgICB0bXAxMjNfXyB8PSAoIHBTcmMtPnFvc1RyYWZmaWNDYXAgPDwgMjAgKTsKKyAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT5hY1N0YUNudCA8PCAyMSApOworICAgICAgICB0bXAxMjNfXyB8PSAoIHBTcmMtPm11bHRpQlNTSUQgPDwgMjIgKTsKKyAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT50aW1pbmdNZWFzIDw8IDIzICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+Y2hhblVzYWdlIDw8IDI0ICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+c3NpZExpc3QgPDwgMjUgKTsKKyAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT5ETVMgPDwgMjYgKTsKKyAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT5VVENUU0ZPZmZzZXQgPDwgMjcgKTsKKyAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT5URExTUGVlclVBUFNEQnVmZmVyU1RBIDw8IDI4ICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+VERMU1BlZXJQU01TdXBwIDw8IDI5ICk7CisgICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+VERMU0NoYW5uZWxTd2l0Y2hpbmcgPDwgMzAgKTsKKyAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT5pbnRlcndvcmtpbmdTZXJ2aWNlIDw8IDMxICk7CisgICAgICAgIGZyYW1lc2h0b25sKHBDdHgsIHBCdWYsIHRtcDEyM19fLCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gNDsKICAgICAgICAgcEJ1ZiArPSA0OwogICAgICAgICBuQnVmIC09ICA0IDsKLSAgICAgICAgdG1wMTIzX18gPSAwVTsKLSAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT5FQlIgPDwgMCApOwotICAgICAgICB0bXAxMjNfXyB8PSAoIHBTcmMtPnNzcG5JbnRlcmZhY2UgPDwgMSApOwotICAgICAgICB0bXAxMjNfXyB8PSAoIHBTcmMtPnJlc2VydmVkNCA8PCAyICk7Ci0gICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+bXNnQ0ZDYXAgPDwgMyApOwotICAgICAgICB0bXAxMjNfXyB8PSAoIHBTcmMtPlRETFNTdXBwb3J0IDw8IDQgKTsKLSAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT5URExTUHJvaGliaXRlZCA8PCA1ICk7Ci0gICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+VERMU0NoYW5Td2l0UHJvaGliaXRlZCA8PCA2ICk7Ci0gICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+cmVqZWN0VW5hZG1pdHRlZFRyYWZmaWMgPDwgNyApOwotICAgICAgICB0bXAxMjNfXyB8PSAoIHBTcmMtPnNlcnZpY2VJbnRlcnZhbEdyYW51bGFyaXR5IDw8IDggKTsKLSAgICAgICAgdG1wMTIzX18gfD0gKCBwU3JjLT5pZGVudGlmaWVyTG9jIDw8IDExICk7Ci0gICAgICAgIHRtcDEyM19fIHw9ICggcFNyYy0+dWFwc2RDb2V4aXN0ZW5jZSA8PCAxMiApOwotICAgICAgICB0bXAxMjNfXyB8PSAoIHBTcmMtPndubU5vdGlmaWNhdGlvbiA8PCAxMyApOwotICAgICAgICB0bXAxMjNfXyB8PSAoIHBTcmMtPnJlc2VydmVkNSA8PCAxNCApOwotICAgICAgICB0bXAxMjNfXyB8PSAoIHBTcmMtPlVURjhTU0lEIDw8IDE1ICk7Ci0gICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHRtcDEyM19fLCAwKTsKKyAgICAgICAgdG1wMTI0X18gPSAwVTsKKyAgICAgICAgdG1wMTI0X18gfD0gKCBwU3JjLT5xb3NNYXAgPDwgMCApOworICAgICAgICB0bXAxMjRfXyB8PSAoIHBTcmMtPkVCUiA8PCAxICk7CisgICAgICAgIHRtcDEyNF9fIHw9ICggcFNyYy0+c3NwbkludGVyZmFjZSA8PCAyICk7CisgICAgICAgIHRtcDEyNF9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQ0IDw8IDMgKTsKKyAgICAgICAgdG1wMTI0X18gfD0gKCBwU3JjLT5tc2dDRkNhcCA8PCA0ICk7CisgICAgICAgIHRtcDEyNF9fIHw9ICggcFNyYy0+VERMU1N1cHBvcnQgPDwgNSApOworICAgICAgICB0bXAxMjRfXyB8PSAoIHBTcmMtPlRETFNQcm9oaWJpdGVkIDw8IDYgKTsKKyAgICAgICAgdG1wMTI0X18gfD0gKCBwU3JjLT5URExTQ2hhblN3aXRQcm9oaWJpdGVkIDw8IDcgKTsKKyAgICAgICAgdG1wMTI0X18gfD0gKCBwU3JjLT5yZWplY3RVbmFkbWl0dGVkVHJhZmZpYyA8PCA4ICk7CisgICAgICAgIHRtcDEyNF9fIHw9ICggcFNyYy0+c2VydmljZUludGVydmFsR3JhbnVsYXJpdHkgPDwgOSApOworICAgICAgICB0bXAxMjRfXyB8PSAoIHBTcmMtPmlkZW50aWZpZXJMb2MgPDwgMTIgKTsKKyAgICAgICAgdG1wMTI0X18gfD0gKCBwU3JjLT51YXBzZENvZXhpc3RlbmNlIDw8IDEzICk7CisgICAgICAgIHRtcDEyNF9fIHw9ICggcFNyYy0+d25tTm90aWZpY2F0aW9uIDw8IDE0ICk7CisgICAgICAgIHRtcDEyNF9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQ1IDw8IDE1ICk7CisgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHRtcDEyNF9fLCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwogICAgICAgICBuQnVmIC09ICAyIDsKLSAgICAgICAgdG1wMTI0X18gPSAwVTsKLSAgICAgICAgdG1wMTI0X18gfD0gKCBwU3JjLT5yZXNlcnZlZDYgPDwgMCApOwotICAgICAgICB0bXAxMjRfXyB8PSAoIHBTcmMtPlRETFNXaWRlckJXIDw8IDEzICk7Ci0gICAgICAgIHRtcDEyNF9fIHw9ICggcFNyYy0+b3Blck1vZGVOb3RpZmljYXRpb24gPDwgMTQgKTsKLSAgICAgICAgdG1wMTI0X18gfD0gKCBwU3JjLT5yZXNlcnZlZDcgPDwgMTUgKTsKLSAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wMTI0X18sIDApOworICAgICAgICB0bXAxMjVfXyA9IDBVOworICAgICAgICB0bXAxMjVfXyB8PSAoIHBTcmMtPlVURjhTU0lEIDw8IDAgKTsKKyAgICAgICAgdG1wMTI1X18gfD0gKCBwU3JjLT5yZXNlcnZlZDYgPDwgMSApOworICAgICAgICB0bXAxMjVfXyB8PSAoIHBTcmMtPlRETFNXaWRlckJXIDw8IDEzICk7CisgICAgICAgIHRtcDEyNV9fIHw9ICggcFNyYy0+b3Blck1vZGVOb3RpZmljYXRpb24gPDwgMTQgKTsKKyAgICAgICAgdG1wMTI1X18gfD0gKCBwU3JjLT5yZXNlcnZlZDcgPDwgMTUgKTsKKyAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wMTI1X18sIDApOwogICAgICAgICAqcG5Db25zdW1lZCArPSAyOwogICAgICAgICAvLyBmaWVsZHNFbmRGbGFnICA9IDEgCiAgICAgICAgIG5CdWYgLT0gIDIgOwpAQCAtMjU1ODMsNyArMjcyMzEsNyBAQAogICAgIHRBTklfVTgqIHBJZUxlbiA9IDA7CiAgICAgdEFOSV9VMzIgbkNvbnN1bWVkT25FbnRyeSA9ICpwbkNvbnN1bWVkOwogICAgIHRBTklfVTMyIG5OZWVkZWQgPSAwVTsKLSAgICB0QU5JX1UxNiB0bXAxMjVfXzsKKyAgICB0QU5JX1UxNiB0bXAxMjZfXzsKICAgICB0QU5JX1UzMiBzdGF0dXMgPSBET1QxMUZfUEFSU0VfU1VDQ0VTUzsKICAgICBzdGF0dXMgPSBkb3QxMWZHZXRQYWNrZWRJRUZUSW5mbyhwQ3R4LCBwU3JjLCAmbk5lZWRlZCk7CiAgICAgaWYgKCAhIERPVDExRl9TVUNDRUVERUQoIHN0YXR1cyApICkgcmV0dXJuIHN0YXR1czsKQEAgLTI1NTk0LDEwICsyNzI0MiwxMCBAQAogICAgICAgICArK3BCdWY7IC0tbkJ1ZjsgKysoKnBuQ29uc3VtZWQpOwogICAgICAgICBwSWVMZW4gPSBwQnVmOwogICAgICAgICArK3BCdWY7IC0tbkJ1ZjsgKysoKnBuQ29uc3VtZWQpOwotICAgICAgICB0bXAxMjVfXyA9IDBVOwotICAgICAgICB0bXAxMjVfXyB8PSAoIHBTcmMtPnJlc2VydmVkIDw8IDAgKTsKLSAgICAgICAgdG1wMTI1X18gfD0gKCBwU3JjLT5JRUNvdW50IDw8IDggKTsKLSAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wMTI1X18sIDApOworICAgICAgICB0bXAxMjZfXyA9IDBVOworICAgICAgICB0bXAxMjZfXyB8PSAoIHBTcmMtPnJlc2VydmVkIDw8IDAgKTsKKyAgICAgICAgdG1wMTI2X18gfD0gKCBwU3JjLT5JRUNvdW50IDw8IDggKTsKKyAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wMTI2X18sIDApOwogICAgICAgICAqcG5Db25zdW1lZCArPSAyOwogICAgICAgICBwQnVmICs9IDI7CiAgICAgICAgIG5CdWYgLT0gIDIgOwpAQCAtMjU2NjksMTEgKzI3MzE3LDExIEBACiAgICAgdEFOSV9VOCogcEllTGVuID0gMDsKICAgICB0QU5JX1UzMiBuQ29uc3VtZWRPbkVudHJ5ID0gKnBuQ29uc3VtZWQ7CiAgICAgdEFOSV9VMzIgbk5lZWRlZCA9IDBVOwotICAgIHRBTklfVTE2IHRtcDEyNl9fOwotICAgIHRBTklfVTggdG1wMTI3X187Ci0gICAgdEFOSV9VMTYgdG1wMTI4X187Ci0gICAgdEFOSV9VMzIgdG1wMTI5X187Ci0gICAgdEFOSV9VOCB0bXAxMzBfXzsKKyAgICB0QU5JX1UxNiB0bXAxMjdfXzsKKyAgICB0QU5JX1U4IHRtcDEyOF9fOworICAgIHRBTklfVTE2IHRtcDEyOV9fOworICAgIHRBTklfVTMyIHRtcDEzMF9fOworICAgIHRBTklfVTggdG1wMTMxX187CiAgICAgbk5lZWRlZCAgKz0gIChwU3JjLT5udW1fcnN2ZCArIDI2KTsKICAgICB3aGlsZSAoIHBTcmMtPnByZXNlbnQgKQogICAgIHsKQEAgLTI1NjgyLDc3ICsyNzMzMCw3NyBAQAogICAgICAgICArK3BCdWY7ICsrKCpwbkNvbnN1bWVkKTsKICAgICAgICAgcEllTGVuID0gcEJ1ZjsKICAgICAgICAgKytwQnVmOyArKygqcG5Db25zdW1lZCk7Ci0gICAgICAgIHRtcDEyNl9fID0gMFU7Ci0gICAgICAgIHRtcDEyNl9fIHw9ICggcFNyYy0+YWR2Q29kaW5nQ2FwIDw8IDAgKTsKLSAgICAgICAgdG1wMTI2X18gfD0gKCBwU3JjLT5zdXBwb3J0ZWRDaGFubmVsV2lkdGhTZXQgPDwgMSApOwotICAgICAgICB0bXAxMjZfXyB8PSAoIHBTcmMtPm1pbW9Qb3dlclNhdmUgPDwgMiApOwotICAgICAgICB0bXAxMjZfXyB8PSAoIHBTcmMtPmdyZWVuRmllbGQgPDwgNCApOwotICAgICAgICB0bXAxMjZfXyB8PSAoIHBTcmMtPnNob3J0R0kyME1IeiA8PCA1ICk7Ci0gICAgICAgIHRtcDEyNl9fIHw9ICggcFNyYy0+c2hvcnRHSTQwTUh6IDw8IDYgKTsKLSAgICAgICAgdG1wMTI2X18gfD0gKCBwU3JjLT50eFNUQkMgPDwgNyApOwotICAgICAgICB0bXAxMjZfXyB8PSAoIHBTcmMtPnJ4U1RCQyA8PCA4ICk7Ci0gICAgICAgIHRtcDEyNl9fIHw9ICggcFNyYy0+ZGVsYXllZEJBIDw8IDEwICk7Ci0gICAgICAgIHRtcDEyNl9fIHw9ICggcFNyYy0+bWF4aW1hbEFNU0RVc2l6ZSA8PCAxMSApOwotICAgICAgICB0bXAxMjZfXyB8PSAoIHBTcmMtPmRzc3NDY2tNb2RlNDBNSHogPDwgMTIgKTsKLSAgICAgICAgdG1wMTI2X18gfD0gKCBwU3JjLT5wc21wIDw8IDEzICk7Ci0gICAgICAgIHRtcDEyNl9fIHw9ICggcFNyYy0+c3RiY0NvbnRyb2xGcmFtZSA8PCAxNCApOwotICAgICAgICB0bXAxMjZfXyB8PSAoIHBTcmMtPmxzaWdUWE9QUHJvdGVjdGlvbiA8PCAxNSApOwotICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXAxMjZfXywgMCk7CisgICAgICAgIHRtcDEyN19fID0gMFU7CisgICAgICAgIHRtcDEyN19fIHw9ICggcFNyYy0+YWR2Q29kaW5nQ2FwIDw8IDAgKTsKKyAgICAgICAgdG1wMTI3X18gfD0gKCBwU3JjLT5zdXBwb3J0ZWRDaGFubmVsV2lkdGhTZXQgPDwgMSApOworICAgICAgICB0bXAxMjdfXyB8PSAoIHBTcmMtPm1pbW9Qb3dlclNhdmUgPDwgMiApOworICAgICAgICB0bXAxMjdfXyB8PSAoIHBTcmMtPmdyZWVuRmllbGQgPDwgNCApOworICAgICAgICB0bXAxMjdfXyB8PSAoIHBTcmMtPnNob3J0R0kyME1IeiA8PCA1ICk7CisgICAgICAgIHRtcDEyN19fIHw9ICggcFNyYy0+c2hvcnRHSTQwTUh6IDw8IDYgKTsKKyAgICAgICAgdG1wMTI3X18gfD0gKCBwU3JjLT50eFNUQkMgPDwgNyApOworICAgICAgICB0bXAxMjdfXyB8PSAoIHBTcmMtPnJ4U1RCQyA8PCA4ICk7CisgICAgICAgIHRtcDEyN19fIHw9ICggcFNyYy0+ZGVsYXllZEJBIDw8IDEwICk7CisgICAgICAgIHRtcDEyN19fIHw9ICggcFNyYy0+bWF4aW1hbEFNU0RVc2l6ZSA8PCAxMSApOworICAgICAgICB0bXAxMjdfXyB8PSAoIHBTcmMtPmRzc3NDY2tNb2RlNDBNSHogPDwgMTIgKTsKKyAgICAgICAgdG1wMTI3X18gfD0gKCBwU3JjLT5wc21wIDw8IDEzICk7CisgICAgICAgIHRtcDEyN19fIHw9ICggcFNyYy0+c3RiY0NvbnRyb2xGcmFtZSA8PCAxNCApOworICAgICAgICB0bXAxMjdfXyB8PSAoIHBTcmMtPmxzaWdUWE9QUHJvdGVjdGlvbiA8PCAxNSApOworICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXAxMjdfXywgMCk7CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDI7CiAgICAgICAgIHBCdWYgKz0gMjsKICAgICAgICAgbkJ1ZiAtPSAgMiA7Ci0gICAgICAgIHRtcDEyN19fID0gMFU7Ci0gICAgICAgIHRtcDEyN19fIHw9ICggcFNyYy0+bWF4UnhBTVBEVUZhY3RvciA8PCAwICk7Ci0gICAgICAgIHRtcDEyN19fIHw9ICggcFNyYy0+bXBkdURlbnNpdHkgPDwgMiApOwotICAgICAgICB0bXAxMjdfXyB8PSAoIHBTcmMtPnJlc2VydmVkMSA8PCA1ICk7Ci0gICAgICAgICpwQnVmID0gdG1wMTI3X187CisgICAgICAgIHRtcDEyOF9fID0gMFU7CisgICAgICAgIHRtcDEyOF9fIHw9ICggcFNyYy0+bWF4UnhBTVBEVUZhY3RvciA8PCAwICk7CisgICAgICAgIHRtcDEyOF9fIHw9ICggcFNyYy0+bXBkdURlbnNpdHkgPDwgMiApOworICAgICAgICB0bXAxMjhfXyB8PSAoIHBTcmMtPnJlc2VydmVkMSA8PCA1ICk7CisgICAgICAgICpwQnVmID0gdG1wMTI4X187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7CiAgICAgICAgIERPVDExRl9NRU1DUFkocEN0eCwgcEJ1ZiwgcFNyYy0+c3VwcG9ydGVkTUNTU2V0LCAxNik7CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE2OwogICAgICAgICBwQnVmICs9IDE2OwotICAgICAgICB0bXAxMjhfXyA9IDBVOwotICAgICAgICB0bXAxMjhfXyB8PSAoIHBTcmMtPnBjbyA8PCAwICk7Ci0gICAgICAgIHRtcDEyOF9fIHw9ICggcFNyYy0+dHJhbnNpdGlvblRpbWUgPDwgMSApOwotICAgICAgICB0bXAxMjhfXyB8PSAoIHBTcmMtPnJlc2VydmVkMiA8PCAzICk7Ci0gICAgICAgIHRtcDEyOF9fIHw9ICggcFNyYy0+bWNzRmVlZGJhY2sgPDwgOCApOwotICAgICAgICB0bXAxMjhfXyB8PSAoIHBTcmMtPnJlc2VydmVkMyA8PCAxMCApOwotICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXAxMjhfXywgMCk7CisgICAgICAgIHRtcDEyOV9fID0gMFU7CisgICAgICAgIHRtcDEyOV9fIHw9ICggcFNyYy0+cGNvIDw8IDAgKTsKKyAgICAgICAgdG1wMTI5X18gfD0gKCBwU3JjLT50cmFuc2l0aW9uVGltZSA8PCAxICk7CisgICAgICAgIHRtcDEyOV9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQyIDw8IDMgKTsKKyAgICAgICAgdG1wMTI5X18gfD0gKCBwU3JjLT5tY3NGZWVkYmFjayA8PCA4ICk7CisgICAgICAgIHRtcDEyOV9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQzIDw8IDEwICk7CisgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHRtcDEyOV9fLCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwogICAgICAgICBuQnVmIC09ICAyIDsKLSAgICAgICAgdG1wMTI5X18gPSAwVTsKLSAgICAgICAgdG1wMTI5X18gfD0gKCBwU3JjLT50eEJGIDw8IDAgKTsKLSAgICAgICAgdG1wMTI5X18gfD0gKCBwU3JjLT5yeFN0YWdnZXJlZFNvdW5kaW5nIDw8IDEgKTsKLSAgICAgICAgdG1wMTI5X18gfD0gKCBwU3JjLT50eFN0YWdnZXJlZFNvdW5kaW5nIDw8IDIgKTsKLSAgICAgICAgdG1wMTI5X18gfD0gKCBwU3JjLT5yeFpMRiA8PCAzICk7Ci0gICAgICAgIHRtcDEyOV9fIHw9ICggcFNyYy0+dHhaTEYgPDwgNCApOwotICAgICAgICB0bXAxMjlfXyB8PSAoIHBTcmMtPmltcGxpY2l0VHhCRiA8PCA1ICk7Ci0gICAgICAgIHRtcDEyOV9fIHw9ICggcFNyYy0+Y2FsaWJyYXRpb24gPDwgNiApOwotICAgICAgICB0bXAxMjlfXyB8PSAoIHBTcmMtPmV4cGxpY2l0Q1NJVHhCRiA8PCA4ICk7Ci0gICAgICAgIHRtcDEyOV9fIHw9ICggcFNyYy0+ZXhwbGljaXRVbmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeCA8PCA5ICk7Ci0gICAgICAgIHRtcDEyOV9fIHw9ICggcFNyYy0+ZXhwbGljaXRCRkNTSUZlZWRiYWNrIDw8IDEwICk7Ci0gICAgICAgIHRtcDEyOV9fIHw9ICggcFNyYy0+ZXhwbGljaXRVbmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeEZlZWRiYWNrIDw8IDEzICk7Ci0gICAgICAgIHRtcDEyOV9fIHw9ICggcFNyYy0+ZXhwbGljaXRDb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhGZWVkYmFjayA8PCAxNiApOwotICAgICAgICB0bXAxMjlfXyB8PSAoIHBTcmMtPmNzaU51bUJGQW50ZW5uYWUgPDwgMTkgKTsKLSAgICAgICAgdG1wMTI5X18gfD0gKCBwU3JjLT51bmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeEJGQW50ZW5uYWUgPDwgMjEgKTsKLSAgICAgICAgdG1wMTI5X18gfD0gKCBwU3JjLT5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlIDw8IDIzICk7Ci0gICAgICAgIHRtcDEyOV9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQ0IDw8IDI1ICk7Ci0gICAgICAgIGZyYW1lc2h0b25sKHBDdHgsIHBCdWYsIHRtcDEyOV9fLCAwKTsKKyAgICAgICAgdG1wMTMwX18gPSAwVTsKKyAgICAgICAgdG1wMTMwX18gfD0gKCBwU3JjLT50eEJGIDw8IDAgKTsKKyAgICAgICAgdG1wMTMwX18gfD0gKCBwU3JjLT5yeFN0YWdnZXJlZFNvdW5kaW5nIDw8IDEgKTsKKyAgICAgICAgdG1wMTMwX18gfD0gKCBwU3JjLT50eFN0YWdnZXJlZFNvdW5kaW5nIDw8IDIgKTsKKyAgICAgICAgdG1wMTMwX18gfD0gKCBwU3JjLT5yeFpMRiA8PCAzICk7CisgICAgICAgIHRtcDEzMF9fIHw9ICggcFNyYy0+dHhaTEYgPDwgNCApOworICAgICAgICB0bXAxMzBfXyB8PSAoIHBTcmMtPmltcGxpY2l0VHhCRiA8PCA1ICk7CisgICAgICAgIHRtcDEzMF9fIHw9ICggcFNyYy0+Y2FsaWJyYXRpb24gPDwgNiApOworICAgICAgICB0bXAxMzBfXyB8PSAoIHBTcmMtPmV4cGxpY2l0Q1NJVHhCRiA8PCA4ICk7CisgICAgICAgIHRtcDEzMF9fIHw9ICggcFNyYy0+ZXhwbGljaXRVbmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeCA8PCA5ICk7CisgICAgICAgIHRtcDEzMF9fIHw9ICggcFNyYy0+ZXhwbGljaXRCRkNTSUZlZWRiYWNrIDw8IDEwICk7CisgICAgICAgIHRtcDEzMF9fIHw9ICggcFNyYy0+ZXhwbGljaXRVbmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeEZlZWRiYWNrIDw8IDEzICk7CisgICAgICAgIHRtcDEzMF9fIHw9ICggcFNyYy0+ZXhwbGljaXRDb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhGZWVkYmFjayA8PCAxNiApOworICAgICAgICB0bXAxMzBfXyB8PSAoIHBTcmMtPmNzaU51bUJGQW50ZW5uYWUgPDwgMTkgKTsKKyAgICAgICAgdG1wMTMwX18gfD0gKCBwU3JjLT51bmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeEJGQW50ZW5uYWUgPDwgMjEgKTsKKyAgICAgICAgdG1wMTMwX18gfD0gKCBwU3JjLT5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlIDw8IDIzICk7CisgICAgICAgIHRtcDEzMF9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQ0IDw8IDI1ICk7CisgICAgICAgIGZyYW1lc2h0b25sKHBDdHgsIHBCdWYsIHRtcDEzMF9fLCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gNDsKICAgICAgICAgcEJ1ZiArPSA0OwogICAgICAgICBuQnVmIC09ICA0IDsKLSAgICAgICAgdG1wMTMwX18gPSAwVTsKLSAgICAgICAgdG1wMTMwX18gfD0gKCBwU3JjLT5hbnRlbm5hU2VsZWN0aW9uIDw8IDAgKTsKLSAgICAgICAgdG1wMTMwX18gfD0gKCBwU3JjLT5leHBsaWNpdENTSUZlZWRiYWNrVHggPDwgMSApOwotICAgICAgICB0bXAxMzBfXyB8PSAoIHBTcmMtPmFudGVubmFJbmRpY2VzRmVlZGJhY2tUeCA8PCAyICk7Ci0gICAgICAgIHRtcDEzMF9fIHw9ICggcFNyYy0+ZXhwbGljaXRDU0lGZWVkYmFjayA8PCAzICk7Ci0gICAgICAgIHRtcDEzMF9fIHw9ICggcFNyYy0+YW50ZW5uYUluZGljZXNGZWVkYmFjayA8PCA0ICk7Ci0gICAgICAgIHRtcDEzMF9fIHw9ICggcFNyYy0+cnhBUyA8PCA1ICk7Ci0gICAgICAgIHRtcDEzMF9fIHw9ICggcFNyYy0+dHhTb3VuZGluZ1BQRFVzIDw8IDYgKTsKLSAgICAgICAgdG1wMTMwX18gfD0gKCBwU3JjLT5yZXNlcnZlZDUgPDwgNyApOwotICAgICAgICAqcEJ1ZiA9IHRtcDEzMF9fOworICAgICAgICB0bXAxMzFfXyA9IDBVOworICAgICAgICB0bXAxMzFfXyB8PSAoIHBTcmMtPmFudGVubmFTZWxlY3Rpb24gPDwgMCApOworICAgICAgICB0bXAxMzFfXyB8PSAoIHBTcmMtPmV4cGxpY2l0Q1NJRmVlZGJhY2tUeCA8PCAxICk7CisgICAgICAgIHRtcDEzMV9fIHw9ICggcFNyYy0+YW50ZW5uYUluZGljZXNGZWVkYmFja1R4IDw8IDIgKTsKKyAgICAgICAgdG1wMTMxX18gfD0gKCBwU3JjLT5leHBsaWNpdENTSUZlZWRiYWNrIDw8IDMgKTsKKyAgICAgICAgdG1wMTMxX18gfD0gKCBwU3JjLT5hbnRlbm5hSW5kaWNlc0ZlZWRiYWNrIDw8IDQgKTsKKyAgICAgICAgdG1wMTMxX18gfD0gKCBwU3JjLT5yeEFTIDw8IDUgKTsKKyAgICAgICAgdG1wMTMxX18gfD0gKCBwU3JjLT50eFNvdW5kaW5nUFBEVXMgPDwgNiApOworICAgICAgICB0bXAxMzFfXyB8PSAoIHBTcmMtPnJlc2VydmVkNSA8PCA3ICk7CisgICAgICAgICpwQnVmID0gdG1wMTMxX187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7CkBAIC0yNTc3OCw5ICsyNzQyNiw5IEBACiAgICAgdEFOSV9VOCogcEllTGVuID0gMDsKICAgICB0QU5JX1UzMiBuQ29uc3VtZWRPbkVudHJ5ID0gKnBuQ29uc3VtZWQ7CiAgICAgdEFOSV9VMzIgbk5lZWRlZCA9IDBVOwotICAgIHRBTklfVTggdG1wMTMxX187Ci0gICAgdEFOSV9VMTYgdG1wMTMyX187CisgICAgdEFOSV9VOCB0bXAxMzJfXzsKICAgICB0QU5JX1UxNiB0bXAxMzNfXzsKKyAgICB0QU5JX1UxNiB0bXAxMzRfXzsKICAgICBuTmVlZGVkICArPSAgKHBTcmMtPm51bV9yc3ZkICsgMjIpOwogICAgIHdoaWxlICggcFNyYy0+cHJlc2VudCApCiAgICAgewpAQCAtMjU3OTIsMzUgKzI3NDQwLDM1IEBACiAgICAgICAgICpwQnVmID0gcFNyYy0+cHJpbWFyeUNoYW5uZWw7CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKLSAgICAgICAgdG1wMTMxX18gPSAwVTsKLSAgICAgICAgdG1wMTMxX18gfD0gKCBwU3JjLT5zZWNvbmRhcnlDaGFubmVsT2Zmc2V0IDw8IDAgKTsKLSAgICAgICAgdG1wMTMxX18gfD0gKCBwU3JjLT5yZWNvbW1lbmRlZFR4V2lkdGhTZXQgPDwgMiApOwotICAgICAgICB0bXAxMzFfXyB8PSAoIHBTcmMtPnJpZnNNb2RlIDw8IDMgKTsKLSAgICAgICAgdG1wMTMxX18gfD0gKCBwU3JjLT5jb250cm9sbGVkQWNjZXNzT25seSA8PCA0ICk7Ci0gICAgICAgIHRtcDEzMV9fIHw9ICggcFNyYy0+c2VydmljZUludGVydmFsR3JhbnVsYXJpdHkgPDwgNSApOwotICAgICAgICAqcEJ1ZiA9IHRtcDEzMV9fOworICAgICAgICB0bXAxMzJfXyA9IDBVOworICAgICAgICB0bXAxMzJfXyB8PSAoIHBTcmMtPnNlY29uZGFyeUNoYW5uZWxPZmZzZXQgPDwgMCApOworICAgICAgICB0bXAxMzJfXyB8PSAoIHBTcmMtPnJlY29tbWVuZGVkVHhXaWR0aFNldCA8PCAyICk7CisgICAgICAgIHRtcDEzMl9fIHw9ICggcFNyYy0+cmlmc01vZGUgPDwgMyApOworICAgICAgICB0bXAxMzJfXyB8PSAoIHBTcmMtPmNvbnRyb2xsZWRBY2Nlc3NPbmx5IDw8IDQgKTsKKyAgICAgICAgdG1wMTMyX18gfD0gKCBwU3JjLT5zZXJ2aWNlSW50ZXJ2YWxHcmFudWxhcml0eSA8PCA1ICk7CisgICAgICAgICpwQnVmID0gdG1wMTMyX187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7Ci0gICAgICAgIHRtcDEzMl9fID0gMFU7Ci0gICAgICAgIHRtcDEzMl9fIHw9ICggcFNyYy0+b3BNb2RlIDw8IDAgKTsKLSAgICAgICAgdG1wMTMyX18gfD0gKCBwU3JjLT5ub25HRkRldmljZXNQcmVzZW50IDw8IDIgKTsKLSAgICAgICAgdG1wMTMyX18gfD0gKCBwU3JjLT50cmFuc21pdEJ1cnN0TGltaXQgPDwgMyApOwotICAgICAgICB0bXAxMzJfXyB8PSAoIHBTcmMtPm9ic3NOb25IVFN0YVByZXNlbnQgPDwgNCApOwotICAgICAgICB0bXAxMzJfXyB8PSAoIHBTcmMtPnJlc2VydmVkIDw8IDUgKTsKLSAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wMTMyX18sIDApOworICAgICAgICB0bXAxMzNfXyA9IDBVOworICAgICAgICB0bXAxMzNfXyB8PSAoIHBTcmMtPm9wTW9kZSA8PCAwICk7CisgICAgICAgIHRtcDEzM19fIHw9ICggcFNyYy0+bm9uR0ZEZXZpY2VzUHJlc2VudCA8PCAyICk7CisgICAgICAgIHRtcDEzM19fIHw9ICggcFNyYy0+dHJhbnNtaXRCdXJzdExpbWl0IDw8IDMgKTsKKyAgICAgICAgdG1wMTMzX18gfD0gKCBwU3JjLT5vYnNzTm9uSFRTdGFQcmVzZW50IDw8IDQgKTsKKyAgICAgICAgdG1wMTMzX18gfD0gKCBwU3JjLT5yZXNlcnZlZCA8PCA1ICk7CisgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHRtcDEzM19fLCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwogICAgICAgICBuQnVmIC09ICAyIDsKLSAgICAgICAgdG1wMTMzX18gPSAwVTsKLSAgICAgICAgdG1wMTMzX18gfD0gKCBwU3JjLT5iYXNpY1NUQkNNQ1MgPDwgMCApOwotICAgICAgICB0bXAxMzNfXyB8PSAoIHBTcmMtPmR1YWxDVFNQcm90ZWN0aW9uIDw8IDcgKTsKLSAgICAgICAgdG1wMTMzX18gfD0gKCBwU3JjLT5zZWNvbmRhcnlCZWFjb24gPDwgOCApOwotICAgICAgICB0bXAxMzNfXyB8PSAoIHBTcmMtPmxzaWdUWE9QUHJvdGVjdGlvbkZ1bGxTdXBwb3J0IDw8IDkgKTsKLSAgICAgICAgdG1wMTMzX18gfD0gKCBwU3JjLT5wY29BY3RpdmUgPDwgMTAgKTsKLSAgICAgICAgdG1wMTMzX18gfD0gKCBwU3JjLT5wY29QaGFzZSA8PCAxMSApOwotICAgICAgICB0bXAxMzNfXyB8PSAoIHBTcmMtPnJlc2VydmVkMiA8PCAxMiApOwotICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXAxMzNfXywgMCk7CisgICAgICAgIHRtcDEzNF9fID0gMFU7CisgICAgICAgIHRtcDEzNF9fIHw9ICggcFNyYy0+YmFzaWNTVEJDTUNTIDw8IDAgKTsKKyAgICAgICAgdG1wMTM0X18gfD0gKCBwU3JjLT5kdWFsQ1RTUHJvdGVjdGlvbiA8PCA3ICk7CisgICAgICAgIHRtcDEzNF9fIHw9ICggcFNyYy0+c2Vjb25kYXJ5QmVhY29uIDw8IDggKTsKKyAgICAgICAgdG1wMTM0X18gfD0gKCBwU3JjLT5sc2lnVFhPUFByb3RlY3Rpb25GdWxsU3VwcG9ydCA8PCA5ICk7CisgICAgICAgIHRtcDEzNF9fIHw9ICggcFNyYy0+cGNvQWN0aXZlIDw8IDEwICk7CisgICAgICAgIHRtcDEzNF9fIHw9ICggcFNyYy0+cGNvUGhhc2UgPDwgMTEgKTsKKyAgICAgICAgdG1wMTM0X18gfD0gKCBwU3JjLT5yZXNlcnZlZDIgPDwgMTIgKTsKKyAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wMTM0X18sIDApOwogICAgICAgICAqcG5Db25zdW1lZCArPSAyOwogICAgICAgICBwQnVmICs9IDI7CiAgICAgICAgIG5CdWYgLT0gIDIgOwpAQCAtMjU4NzAsNiArMjc1MTgsNDIgQEAKICAgICByZXR1cm4gRE9UMTFGX1BBUlNFX1NVQ0NFU1M7CiB9IC8qIEVuZCBkb3QxMWZQYWNrSWVJQlNTUGFyYW1zLiAqLwogCit0QU5JX1UzMiBkb3QxMWZQYWNrSWVMaW5rSWRlbnRpZmllcih0cEFuaVNpckdsb2JhbCBwQ3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdERvdDExZklFTGlua0lkZW50aWZpZXIgKnBTcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0QU5JX1U4ICpwQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdEFOSV9VMzIgbkJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRBTklfVTMyICpwbkNvbnN1bWVkKQoreworICAgIHRBTklfVTgqIHBJZUxlbiA9IDA7CisgICAgdEFOSV9VMzIgbkNvbnN1bWVkT25FbnRyeSA9ICpwbkNvbnN1bWVkOworICAgIHRBTklfVTMyIG5OZWVkZWQgPSAwVTsKKyAgICBuTmVlZGVkICArPSAxODsKKyAgICB3aGlsZSAoIHBTcmMtPnByZXNlbnQgKQorICAgIHsKKyAgICAgICAgaWYgKCBuTmVlZGVkID4gbkJ1ZiApIHJldHVybiBET1QxMUZfQlVGRkVSX09WRVJGTE9XOworICAgICAgICAqcEJ1ZiA9IDEwMTsKKyAgICAgICAgKytwQnVmOyArKygqcG5Db25zdW1lZCk7CisgICAgICAgIHBJZUxlbiA9IHBCdWY7CisgICAgICAgICsrcEJ1ZjsgKysoKnBuQ29uc3VtZWQpOworICAgICAgICBET1QxMUZfTUVNQ1BZKHBDdHgsIHBCdWYsIHBTcmMtPmJzc2lkLCA2KTsKKyAgICAgICAgKnBuQ29uc3VtZWQgKz0gNjsKKyAgICAgICAgcEJ1ZiArPSA2OworICAgICAgICBET1QxMUZfTUVNQ1BZKHBDdHgsIHBCdWYsIHBTcmMtPkluaXRTdGFBZGRyLCA2KTsKKyAgICAgICAgKnBuQ29uc3VtZWQgKz0gNjsKKyAgICAgICAgcEJ1ZiArPSA2OworICAgICAgICBET1QxMUZfTUVNQ1BZKHBDdHgsIHBCdWYsIHBTcmMtPlJlc3BTdGFBZGRyLCA2KTsKKyAgICAgICAgKnBuQ29uc3VtZWQgKz0gNjsKKyAgICAgICAgLy8gZmllbGRzRW5kRmxhZyA9IDEgCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAodm9pZClwQ3R4OworICAgIGlmIChwSWVMZW4pCisgICAgeworICAgICAgICAqcEllTGVuID0gKnBuQ29uc3VtZWQgLSBuQ29uc3VtZWRPbkVudHJ5IC0gMjsKKyAgICB9CisgICAgcmV0dXJuIERPVDExRl9QQVJTRV9TVUNDRVNTOworfSAvKiBFbmQgZG90MTFmUGFja0llTGlua0lkZW50aWZpZXIuICovCisKIHRBTklfVTMyIGRvdDExZlBhY2tJZU1lYXN1cmVtZW50UmVwb3J0KHRwQW5pU2lyR2xvYmFsIHBDdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0RG90MTFmSUVNZWFzdXJlbWVudFJlcG9ydCAqcFNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRBTklfVTggKnBCdWYsCkBAIC0yNTg3OSw5ICsyNzU2Myw5IEBACiAgICAgdEFOSV9VOCogcEllTGVuID0gMDsKICAgICB0QU5JX1UzMiBuQ29uc3VtZWRPbkVudHJ5ID0gKnBuQ29uc3VtZWQ7CiAgICAgdEFOSV9VMzIgbk5lZWRlZCA9IDBVOwotICAgIHRBTklfVTggdG1wMTM0X187CiAgICAgdEFOSV9VOCB0bXAxMzVfXzsKICAgICB0QU5JX1U4IHRtcDEzNl9fOworICAgIHRBTklfVTggdG1wMTM3X187CiAgICAgdEFOSV9VMzIgc3RhdHVzID0gRE9UMTFGX1BBUlNFX1NVQ0NFU1M7CiAgICAgc3RhdHVzID0gZG90MTFmR2V0UGFja2VkSUVNZWFzdXJlbWVudFJlcG9ydChwQ3R4LCBwU3JjLCAmbk5lZWRlZCk7CiAgICAgaWYgKCAhIERPVDExRl9TVUNDRUVERUQoIHN0YXR1cyApICkgcmV0dXJuIHN0YXR1czsKQEAgLTI1ODk1LDEyICsyNzU3OSwxMiBAQAogICAgICAgICAqcEJ1ZiA9IHBTcmMtPnRva2VuOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7Ci0gICAgICAgIHRtcDEzNF9fID0gMFU7Ci0gICAgICAgIHRtcDEzNF9fIHw9ICggcFNyYy0+bGF0ZSA8PCAwICk7Ci0gICAgICAgIHRtcDEzNF9fIHw9ICggcFNyYy0+aW5jYXBhYmxlIDw8IDEgKTsKLSAgICAgICAgdG1wMTM0X18gfD0gKCBwU3JjLT5yZWZ1c2VkIDw8IDIgKTsKLSAgICAgICAgdG1wMTM0X18gfD0gKCBwU3JjLT51bnVzZWQgPDwgMyApOwotICAgICAgICAqcEJ1ZiA9IHRtcDEzNF9fOworICAgICAgICB0bXAxMzVfXyA9IDBVOworICAgICAgICB0bXAxMzVfXyB8PSAoIHBTcmMtPmxhdGUgPDwgMCApOworICAgICAgICB0bXAxMzVfXyB8PSAoIHBTcmMtPmluY2FwYWJsZSA8PCAxICk7CisgICAgICAgIHRtcDEzNV9fIHw9ICggcFNyYy0+cmVmdXNlZCA8PCAyICk7CisgICAgICAgIHRtcDEzNV9fIHw9ICggcFNyYy0+dW51c2VkIDw8IDMgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxMzVfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKQEAgLTI1OTIwLDE0ICsyNzYwNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCBwU3JjLT5yZXBvcnQuQmFzaWMubWVhc19kdXJhdGlvbiwgMCk7CiAgICAgICAgICAgICAgICAgICAgICpwbkNvbnN1bWVkICs9IDI7CiAgICAgICAgICAgICAgICAgICAgIHBCdWYgKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgdG1wMTM1X18gPSAwVTsKLSAgICAgICAgICAgICAgICAgICAgdG1wMTM1X18gfD0gKCBwU3JjLT5yZXBvcnQuQmFzaWMuYnNzIDw8IDAgKTsKLSAgICAgICAgICAgICAgICAgICAgdG1wMTM1X18gfD0gKCBwU3JjLT5yZXBvcnQuQmFzaWMub2ZkbV9wcmVhbWJsZSA8PCAxICk7Ci0gICAgICAgICAgICAgICAgICAgIHRtcDEzNV9fIHw9ICggcFNyYy0+cmVwb3J0LkJhc2ljLnVuaWRfc2lnbmFsIDw8IDIgKTsKLSAgICAgICAgICAgICAgICAgICAgdG1wMTM1X18gfD0gKCBwU3JjLT5yZXBvcnQuQmFzaWMucmFkZXIgPDwgMyApOwotICAgICAgICAgICAgICAgICAgICB0bXAxMzVfXyB8PSAoIHBTcmMtPnJlcG9ydC5CYXNpYy51bm1lYXN1cmVkIDw8IDQgKTsKLSAgICAgICAgICAgICAgICAgICAgdG1wMTM1X18gfD0gKCBwU3JjLT5yZXBvcnQuQmFzaWMudW51c2VkIDw8IDUgKTsKLSAgICAgICAgICAgICAgICAgICAgKnBCdWYgPSB0bXAxMzVfXzsKKyAgICAgICAgICAgICAgICAgICAgdG1wMTM2X18gPSAwVTsKKyAgICAgICAgICAgICAgICAgICAgdG1wMTM2X18gfD0gKCBwU3JjLT5yZXBvcnQuQmFzaWMuYnNzIDw8IDAgKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wMTM2X18gfD0gKCBwU3JjLT5yZXBvcnQuQmFzaWMub2ZkbV9wcmVhbWJsZSA8PCAxICk7CisgICAgICAgICAgICAgICAgICAgIHRtcDEzNl9fIHw9ICggcFNyYy0+cmVwb3J0LkJhc2ljLnVuaWRfc2lnbmFsIDw8IDIgKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wMTM2X18gfD0gKCBwU3JjLT5yZXBvcnQuQmFzaWMucmFkZXIgPDwgMyApOworICAgICAgICAgICAgICAgICAgICB0bXAxMzZfXyB8PSAoIHBTcmMtPnJlcG9ydC5CYXNpYy51bm1lYXN1cmVkIDw8IDQgKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wMTM2X18gfD0gKCBwU3JjLT5yZXBvcnQuQmFzaWMudW51c2VkIDw8IDUgKTsKKyAgICAgICAgICAgICAgICAgICAgKnBCdWYgPSB0bXAxMzZfXzsKICAgICAgICAgICAgICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgICAgICAgICAgICAgLy8gZmllbGRzRW5kRmxhZyAgPSAxIAogICAgICAgICAgICAgICAgICAgICBuQnVmIC09ICAxIDsKQEAgLTI1OTk0LDEwICsyNzY3OCwxMCBAQAogICAgICAgICAgICAgICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCBwU3JjLT5yZXBvcnQuQmVhY29uLm1lYXNfZHVyYXRpb24sIDApOwogICAgICAgICAgICAgICAgICAgICAqcG5Db25zdW1lZCArPSAyOwogICAgICAgICAgICAgICAgICAgICBwQnVmICs9IDI7Ci0gICAgICAgICAgICAgICAgICAgIHRtcDEzNl9fID0gMFU7Ci0gICAgICAgICAgICAgICAgICAgIHRtcDEzNl9fIHw9ICggcFNyYy0+cmVwb3J0LkJlYWNvbi5jb25kZW5zZWRfUEhZIDw8IDAgKTsKLSAgICAgICAgICAgICAgICAgICAgdG1wMTM2X18gfD0gKCBwU3JjLT5yZXBvcnQuQmVhY29uLnJlcG9ydGVkX2ZyYW1lX3R5cGUgPDwgNyApOwotICAgICAgICAgICAgICAgICAgICAqcEJ1ZiA9IHRtcDEzNl9fOworICAgICAgICAgICAgICAgICAgICB0bXAxMzdfXyA9IDBVOworICAgICAgICAgICAgICAgICAgICB0bXAxMzdfXyB8PSAoIHBTcmMtPnJlcG9ydC5CZWFjb24uY29uZGVuc2VkX1BIWSA8PCAwICk7CisgICAgICAgICAgICAgICAgICAgIHRtcDEzN19fIHw9ICggcFNyYy0+cmVwb3J0LkJlYWNvbi5yZXBvcnRlZF9mcmFtZV90eXBlIDw8IDcgKTsKKyAgICAgICAgICAgICAgICAgICAgKnBCdWYgPSB0bXAxMzdfXzsKICAgICAgICAgICAgICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgICAgICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICAgICAgICAgICAgICBuQnVmIC09ICAxIDsKQEAgLTI2MDQ2LDcgKzI3NzMwLDcgQEAKICAgICB0QU5JX1U4KiBwSWVMZW4gPSAwOwogICAgIHRBTklfVTMyIG5Db25zdW1lZE9uRW50cnkgPSAqcG5Db25zdW1lZDsKICAgICB0QU5JX1UzMiBuTmVlZGVkID0gMFU7Ci0gICAgdEFOSV9VOCB0bXAxMzdfXzsKKyAgICB0QU5JX1U4IHRtcDEzOF9fOwogICAgIHRBTklfVTMyIHN0YXR1cyA9IERPVDExRl9QQVJTRV9TVUNDRVNTOwogICAgIHN0YXR1cyA9IGRvdDExZkdldFBhY2tlZElFTWVhc3VyZW1lbnRSZXF1ZXN0KHBDdHgsIHBTcmMsICZuTmVlZGVkKTsKICAgICBpZiAoICEgRE9UMTFGX1NVQ0NFRURFRCggc3RhdHVzICkgKSByZXR1cm4gc3RhdHVzOwpAQCAtMjYwNjAsMTQgKzI3NzQ0LDE0IEBACiAgICAgICAgICpwQnVmID0gcFNyYy0+bWVhc3VyZW1lbnRfdG9rZW47CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKLSAgICAgICAgdG1wMTM3X18gPSAwVTsKLSAgICAgICAgdG1wMTM3X18gfD0gKCBwU3JjLT5wYXJhbGxlbCA8PCAwICk7Ci0gICAgICAgIHRtcDEzN19fIHw9ICggcFNyYy0+ZW5hYmxlIDw8IDEgKTsKLSAgICAgICAgdG1wMTM3X18gfD0gKCBwU3JjLT5yZXF1ZXN0IDw8IDIgKTsKLSAgICAgICAgdG1wMTM3X18gfD0gKCBwU3JjLT5yZXBvcnQgPDwgMyApOwotICAgICAgICB0bXAxMzdfXyB8PSAoIHBTcmMtPmR1cmF0aW9uTWFuZGF0b3J5IDw8IDQgKTsKLSAgICAgICAgdG1wMTM3X18gfD0gKCBwU3JjLT51bnVzZWQgPDwgNSApOwotICAgICAgICAqcEJ1ZiA9IHRtcDEzN19fOworICAgICAgICB0bXAxMzhfXyA9IDBVOworICAgICAgICB0bXAxMzhfXyB8PSAoIHBTcmMtPnBhcmFsbGVsIDw8IDAgKTsKKyAgICAgICAgdG1wMTM4X18gfD0gKCBwU3JjLT5lbmFibGUgPDwgMSApOworICAgICAgICB0bXAxMzhfXyB8PSAoIHBTcmMtPnJlcXVlc3QgPDwgMiApOworICAgICAgICB0bXAxMzhfXyB8PSAoIHBTcmMtPnJlcG9ydCA8PCAzICk7CisgICAgICAgIHRtcDEzOF9fIHw9ICggcFNyYy0+ZHVyYXRpb25NYW5kYXRvcnkgPDwgNCApOworICAgICAgICB0bXAxMzhfXyB8PSAoIHBTcmMtPnVudXNlZCA8PCA1ICk7CisgICAgICAgICpwQnVmID0gdG1wMTM4X187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7CkBAIC0yNjE1Niw3ICsyNzg0MCw3IEBACiAgICAgdEFOSV9VOCogcEllTGVuID0gMDsKICAgICB0QU5JX1UzMiBuQ29uc3VtZWRPbkVudHJ5ID0gKnBuQ29uc3VtZWQ7CiAgICAgdEFOSV9VMzIgbk5lZWRlZCA9IDBVOwotICAgIHRBTklfVTggdG1wMTM4X187CisgICAgdEFOSV9VOCB0bXAxMzlfXzsKICAgICBuTmVlZGVkICArPSAzOwogICAgIHdoaWxlICggcFNyYy0+cHJlc2VudCApCiAgICAgewpAQCAtMjYxNjgsMTEgKzI3ODUyLDExIEBACiAgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHBTcmMtPk1ESUQsIDApOwogICAgICAgICAqcG5Db25zdW1lZCArPSAyOwogICAgICAgICBwQnVmICs9IDI7Ci0gICAgICAgIHRtcDEzOF9fID0gMFU7Ci0gICAgICAgIHRtcDEzOF9fIHw9ICggcFNyYy0+b3ZlckRTQ2FwIDw8IDAgKTsKLSAgICAgICAgdG1wMTM4X18gfD0gKCBwU3JjLT5yZXNvdXJjZVJlcUNhcCA8PCAxICk7Ci0gICAgICAgIHRtcDEzOF9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQgPDwgMiApOwotICAgICAgICAqcEJ1ZiA9IHRtcDEzOF9fOworICAgICAgICB0bXAxMzlfXyA9IDBVOworICAgICAgICB0bXAxMzlfXyB8PSAoIHBTcmMtPm92ZXJEU0NhcCA8PCAwICk7CisgICAgICAgIHRtcDEzOV9fIHw9ICggcFNyYy0+cmVzb3VyY2VSZXFDYXAgPDwgMSApOworICAgICAgICB0bXAxMzlfXyB8PSAoIHBTcmMtPnJlc2VydmVkIDw8IDIgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxMzlfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgLy8gZmllbGRzRW5kRmxhZyAgPSAxIAogICAgICAgICBuQnVmIC09ICAxIDsKQEAgLTI2MTk1LDggKzI3ODc5LDggQEAKICAgICB0QU5JX1U4KiBwSWVMZW4gPSAwOwogICAgIHRBTklfVTMyIG5Db25zdW1lZE9uRW50cnkgPSAqcG5Db25zdW1lZDsKICAgICB0QU5JX1UzMiBuTmVlZGVkID0gMFU7Ci0gICAgdEFOSV9VOCB0bXAxMzlfXzsKICAgICB0QU5JX1U4IHRtcDE0MF9fOworICAgIHRBTklfVTggdG1wMTQxX187CiAgICAgdEFOSV9VMzIgc3RhdHVzID0gRE9UMTFGX1BBUlNFX1NVQ0NFU1M7CiAgICAgc3RhdHVzID0gZG90MTFmR2V0UGFja2VkSUVOZWlnaGJvclJlcG9ydChwQ3R4LCBwU3JjLCAmbk5lZWRlZCk7CiAgICAgaWYgKCAhIERPVDExRl9TVUNDRUVERUQoIHN0YXR1cyApICkgcmV0dXJuIHN0YXR1czsKQEAgLTI2MjEwLDI0ICsyNzg5NCwyNCBAQAogICAgICAgICBET1QxMUZfTUVNQ1BZKHBDdHgsIHBCdWYsIHBTcmMtPmJzc2lkLCA2KTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gNjsKICAgICAgICAgcEJ1ZiArPSA2OwotICAgICAgICB0bXAxMzlfXyA9IDBVOwotICAgICAgICB0bXAxMzlfXyB8PSAoIHBTcmMtPkFQUmVhY2hhYmlsaXR5IDw8IDAgKTsKLSAgICAgICAgdG1wMTM5X18gfD0gKCBwU3JjLT5TZWN1cml0eSA8PCAyICk7Ci0gICAgICAgIHRtcDEzOV9fIHw9ICggcFNyYy0+S2V5U2NvcGUgPDwgMyApOwotICAgICAgICB0bXAxMzlfXyB8PSAoIHBTcmMtPlNwZWNNZ210Q2FwIDw8IDQgKTsKLSAgICAgICAgdG1wMTM5X18gfD0gKCBwU3JjLT5Rb3NDYXAgPDwgNSApOwotICAgICAgICB0bXAxMzlfXyB8PSAoIHBTcmMtPmFwc2QgPDwgNiApOwotICAgICAgICB0bXAxMzlfXyB8PSAoIHBTcmMtPnJybSA8PCA3ICk7Ci0gICAgICAgICpwQnVmID0gdG1wMTM5X187CisgICAgICAgIHRtcDE0MF9fID0gMFU7CisgICAgICAgIHRtcDE0MF9fIHw9ICggcFNyYy0+QVBSZWFjaGFiaWxpdHkgPDwgMCApOworICAgICAgICB0bXAxNDBfXyB8PSAoIHBTcmMtPlNlY3VyaXR5IDw8IDIgKTsKKyAgICAgICAgdG1wMTQwX18gfD0gKCBwU3JjLT5LZXlTY29wZSA8PCAzICk7CisgICAgICAgIHRtcDE0MF9fIHw9ICggcFNyYy0+U3BlY01nbXRDYXAgPDwgNCApOworICAgICAgICB0bXAxNDBfXyB8PSAoIHBTcmMtPlFvc0NhcCA8PCA1ICk7CisgICAgICAgIHRtcDE0MF9fIHw9ICggcFNyYy0+YXBzZCA8PCA2ICk7CisgICAgICAgIHRtcDE0MF9fIHw9ICggcFNyYy0+cnJtIDw8IDcgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxNDBfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKLSAgICAgICAgdG1wMTQwX18gPSAwVTsKLSAgICAgICAgdG1wMTQwX18gfD0gKCBwU3JjLT5EZWxheWVkQkEgPDwgMCApOwotICAgICAgICB0bXAxNDBfXyB8PSAoIHBTcmMtPkltbUJBIDw8IDEgKTsKLSAgICAgICAgdG1wMTQwX18gfD0gKCBwU3JjLT5Nb2JpbGl0eURvbWFpbiA8PCAyICk7Ci0gICAgICAgIHRtcDE0MF9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQgPDwgMyApOwotICAgICAgICAqcEJ1ZiA9IHRtcDE0MF9fOworICAgICAgICB0bXAxNDFfXyA9IDBVOworICAgICAgICB0bXAxNDFfXyB8PSAoIHBTcmMtPkRlbGF5ZWRCQSA8PCAwICk7CisgICAgICAgIHRtcDE0MV9fIHw9ICggcFNyYy0+SW1tQkEgPDwgMSApOworICAgICAgICB0bXAxNDFfXyB8PSAoIHBTcmMtPk1vYmlsaXR5RG9tYWluIDw8IDIgKTsKKyAgICAgICAgdG1wMTQxX18gfD0gKCBwU3JjLT5yZXNlcnZlZCA8PCAzICk7CisgICAgICAgICpwQnVmID0gdG1wMTQxX187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIHBCdWYgKz0gMTsKICAgICAgICAgbkJ1ZiAtPSAgMSA7CkBAIC0yNjI2OSw3ICsyNzk1Myw3IEBACiAgICAgdEFOSV9VOCogcEllTGVuID0gMDsKICAgICB0QU5JX1UzMiBuQ29uc3VtZWRPbkVudHJ5ID0gKnBuQ29uc3VtZWQ7CiAgICAgdEFOSV9VMzIgbk5lZWRlZCA9IDBVOwotICAgIHRBTklfVTggdG1wMTQxX187CisgICAgdEFOSV9VOCB0bXAxNDJfXzsKICAgICBuTmVlZGVkICArPSAxOwogICAgIHdoaWxlICggcFNyYy0+cHJlc2VudCApCiAgICAgewpAQCAtMjYyNzgsMTIgKzI3OTYyLDEyIEBACiAgICAgICAgICsrcEJ1ZjsgKysoKnBuQ29uc3VtZWQpOwogICAgICAgICBwSWVMZW4gPSBwQnVmOwogICAgICAgICArK3BCdWY7ICsrKCpwbkNvbnN1bWVkKTsKLSAgICAgICAgdG1wMTQxX18gPSAwVTsKLSAgICAgICAgdG1wMTQxX18gfD0gKCBwU3JjLT5jaGFuV2lkdGggPDwgMCApOwotICAgICAgICB0bXAxNDFfXyB8PSAoIHBTcmMtPnJlc2VydmVkIDw8IDIgKTsKLSAgICAgICAgdG1wMTQxX18gfD0gKCBwU3JjLT5yeE5TUyA8PCA0ICk7Ci0gICAgICAgIHRtcDE0MV9fIHw9ICggcFNyYy0+cnhOU1NUeXBlIDw8IDcgKTsKLSAgICAgICAgKnBCdWYgPSB0bXAxNDFfXzsKKyAgICAgICAgdG1wMTQyX18gPSAwVTsKKyAgICAgICAgdG1wMTQyX18gfD0gKCBwU3JjLT5jaGFuV2lkdGggPDwgMCApOworICAgICAgICB0bXAxNDJfXyB8PSAoIHBTcmMtPnJlc2VydmVkIDw8IDIgKTsKKyAgICAgICAgdG1wMTQyX18gfD0gKCBwU3JjLT5yeE5TUyA8PCA0ICk7CisgICAgICAgIHRtcDE0Ml9fIHw9ICggcFNyYy0+cnhOU1NUeXBlIDw8IDcgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxNDJfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgLy8gZmllbGRzRW5kRmxhZyAgPSAxIAogICAgICAgICBuQnVmIC09ICAxIDsKQEAgLTI3MTk1LDYgKzI4ODc5LDc3IEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0gLyogRW5kIGRvdDExZlBhY2tJZVAyUFdTQ1Byb3Zpc2lvbkRpc2NvdmVyeVJlcy4gKi8KIAordEFOSV9VMzIgZG90MTFmUGFja0llUFRJQ29udHJvbCh0cEFuaVNpckdsb2JhbCBwQ3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0RG90MTFmSUVQVElDb250cm9sICpwU3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0QU5JX1U4ICpwQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0QU5JX1UzMiBuQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0QU5JX1UzMiAqcG5Db25zdW1lZCkKK3sKKyAgICB0QU5JX1U4KiBwSWVMZW4gPSAwOworICAgIHRBTklfVTMyIG5Db25zdW1lZE9uRW50cnkgPSAqcG5Db25zdW1lZDsKKyAgICB0QU5JX1UzMiBuTmVlZGVkID0gMFU7CisgICAgbk5lZWRlZCAgKz0gMzsKKyAgICB3aGlsZSAoIHBTcmMtPnByZXNlbnQgKQorICAgIHsKKyAgICAgICAgaWYgKCBuTmVlZGVkID4gbkJ1ZiApIHJldHVybiBET1QxMUZfQlVGRkVSX09WRVJGTE9XOworICAgICAgICAqcEJ1ZiA9IDEwNTsKKyAgICAgICAgKytwQnVmOyArKygqcG5Db25zdW1lZCk7CisgICAgICAgIHBJZUxlbiA9IHBCdWY7CisgICAgICAgICsrcEJ1ZjsgKysoKnBuQ29uc3VtZWQpOworICAgICAgICAqcEJ1ZiA9IHBTcmMtPnRpZDsKKyAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKKyAgICAgICAgcEJ1ZiArPSAxOworICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCBwU3JjLT5zZXF1ZW5jZV9jb250cm9sLCAwKTsKKyAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKKyAgICAgICAgLy8gZmllbGRzRW5kRmxhZyA9IDEgCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAodm9pZClwQ3R4OworICAgIGlmIChwSWVMZW4pCisgICAgeworICAgICAgICAqcEllTGVuID0gKnBuQ29uc3VtZWQgLSBuQ29uc3VtZWRPbkVudHJ5IC0gMjsKKyAgICB9CisgICAgcmV0dXJuIERPVDExRl9QQVJTRV9TVUNDRVNTOworfSAvKiBFbmQgZG90MTFmUGFja0llUFRJQ29udHJvbC4gKi8KKwordEFOSV9VMzIgZG90MTFmUGFja0llUFVCdWZmZXJTdGF0dXModHBBbmlTaXJHbG9iYWwgcEN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHREb3QxMWZJRVBVQnVmZmVyU3RhdHVzICpwU3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdEFOSV9VOCAqcEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRBTklfVTMyIG5CdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0QU5JX1UzMiAqcG5Db25zdW1lZCkKK3sKKyAgICB0QU5JX1U4KiBwSWVMZW4gPSAwOworICAgIHRBTklfVTMyIG5Db25zdW1lZE9uRW50cnkgPSAqcG5Db25zdW1lZDsKKyAgICB0QU5JX1UzMiBuTmVlZGVkID0gMFU7CisgICAgdEFOSV9VOCB0bXAxNDNfXzsKKyAgICBuTmVlZGVkICArPSAxOworICAgIHdoaWxlICggcFNyYy0+cHJlc2VudCApCisgICAgeworICAgICAgICBpZiAoIG5OZWVkZWQgPiBuQnVmICkgcmV0dXJuIERPVDExRl9CVUZGRVJfT1ZFUkZMT1c7CisgICAgICAgICpwQnVmID0gMTA2OworICAgICAgICArK3BCdWY7ICsrKCpwbkNvbnN1bWVkKTsKKyAgICAgICAgcEllTGVuID0gcEJ1ZjsKKyAgICAgICAgKytwQnVmOyArKygqcG5Db25zdW1lZCk7CisgICAgICAgIHRtcDE0M19fID0gMFU7CisgICAgICAgIHRtcDE0M19fIHw9ICggcFNyYy0+YWNfYmtfdHJhZmZpY19hdmFsIDw8IDAgKTsKKyAgICAgICAgdG1wMTQzX18gfD0gKCBwU3JjLT5hY19iZV90cmFmZmljX2F2YWwgPDwgMSApOworICAgICAgICB0bXAxNDNfXyB8PSAoIHBTcmMtPmFjX3ZpX3RyYWZmaWNfYXZhbCA8PCAyICk7CisgICAgICAgIHRtcDE0M19fIHw9ICggcFNyYy0+YWNfdm9fdHJhZmZpY19hdmFsIDw8IDMgKTsKKyAgICAgICAgdG1wMTQzX18gfD0gKCBwU3JjLT5yZXNlcnZlZCA8PCA0ICk7CisgICAgICAgICpwQnVmID0gdG1wMTQzX187CisgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CisgICAgICAgIC8vIGZpZWxkc0VuZEZsYWcgID0gMSAKKyAgICAgICAgbkJ1ZiAtPSAgMSA7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAodm9pZClwQ3R4OworICAgIGlmIChwSWVMZW4pCisgICAgeworICAgICAgICAqcEllTGVuID0gKnBuQ29uc3VtZWQgLSBuQ29uc3VtZWRPbkVudHJ5IC0gMjsKKyAgICB9CisgICAgcmV0dXJuIERPVDExRl9QQVJTRV9TVUNDRVNTOworfSAvKiBFbmQgZG90MTFmUGFja0llUFVCdWZmZXJTdGF0dXMuICovCisKIHRBTklfVTMyIGRvdDExZlBhY2tJZVBvd2VyQ2Fwcyh0cEFuaVNpckdsb2JhbCBwQ3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHREb3QxMWZJRVBvd2VyQ2FwcyAqcFNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0QU5JX1U4ICpwQnVmLApAQCAtMjczMDMsNyArMjkwNTgsNyBAQAogICAgIHRBTklfVTgqIHBJZUxlbiA9IDA7CiAgICAgdEFOSV9VMzIgbkNvbnN1bWVkT25FbnRyeSA9ICpwbkNvbnN1bWVkOwogICAgIHRBTklfVTMyIG5OZWVkZWQgPSAwVTsKLSAgICB0QU5JX1U4IHRtcDE0Ml9fOworICAgIHRBTklfVTggdG1wMTQ0X187CiAgICAgbk5lZWRlZCAgKz0gMTsKICAgICB3aGlsZSAoIHBTcmMtPnByZXNlbnQgKQogICAgIHsKQEAgLTI3MzEyLDEzICsyOTA2NywxMyBAQAogICAgICAgICArK3BCdWY7ICsrKCpwbkNvbnN1bWVkKTsKICAgICAgICAgcEllTGVuID0gcEJ1ZjsKICAgICAgICAgKytwQnVmOyArKygqcG5Db25zdW1lZCk7Ci0gICAgICAgIHRtcDE0Ml9fID0gMFU7Ci0gICAgICAgIHRtcDE0Ml9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQgPDwgMCApOwotICAgICAgICB0bXAxNDJfXyB8PSAoIHBTcmMtPnR4b3ByZXEgPDwgMSApOwotICAgICAgICB0bXAxNDJfXyB8PSAoIHBTcmMtPnFyZXEgPDwgMiApOwotICAgICAgICB0bXAxNDJfXyB8PSAoIHBTcmMtPnFhY2sgPDwgMyApOwotICAgICAgICB0bXAxNDJfXyB8PSAoIHBTcmMtPmNvdW50IDw8IDQgKTsKLSAgICAgICAgKnBCdWYgPSB0bXAxNDJfXzsKKyAgICAgICAgdG1wMTQ0X18gPSAwVTsKKyAgICAgICAgdG1wMTQ0X18gfD0gKCBwU3JjLT5yZXNlcnZlZCA8PCAwICk7CisgICAgICAgIHRtcDE0NF9fIHw9ICggcFNyYy0+dHhvcHJlcSA8PCAxICk7CisgICAgICAgIHRtcDE0NF9fIHw9ICggcFNyYy0+cXJlcSA8PCAyICk7CisgICAgICAgIHRtcDE0NF9fIHw9ICggcFNyYy0+cWFjayA8PCAzICk7CisgICAgICAgIHRtcDE0NF9fIHw9ICggcFNyYy0+Y291bnQgPDwgNCApOworICAgICAgICAqcEJ1ZiA9IHRtcDE0NF9fOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICAvLyBmaWVsZHNFbmRGbGFnICA9IDEgCiAgICAgICAgIG5CdWYgLT0gIDEgOwpAQCAtMjczNDEsNyArMjkwOTYsNyBAQAogICAgIHRBTklfVTgqIHBJZUxlbiA9IDA7CiAgICAgdEFOSV9VMzIgbkNvbnN1bWVkT25FbnRyeSA9ICpwbkNvbnN1bWVkOwogICAgIHRBTklfVTMyIG5OZWVkZWQgPSAwVTsKLSAgICB0QU5JX1U4IHRtcDE0M19fOworICAgIHRBTklfVTggdG1wMTQ1X187CiAgICAgbk5lZWRlZCAgKz0gMTsKICAgICB3aGlsZSAoIHBTcmMtPnByZXNlbnQgKQogICAgIHsKQEAgLTI3MzUwLDE1ICsyOTEwNSwxNSBAQAogICAgICAgICArK3BCdWY7ICsrKCpwbkNvbnN1bWVkKTsKICAgICAgICAgcEllTGVuID0gcEJ1ZjsKICAgICAgICAgKytwQnVmOyArKygqcG5Db25zdW1lZCk7Ci0gICAgICAgIHRtcDE0M19fID0gMFU7Ci0gICAgICAgIHRtcDE0M19fIHw9ICggcFNyYy0+bW9yZV9kYXRhX2FjayA8PCAwICk7Ci0gICAgICAgIHRtcDE0M19fIHw9ICggcFNyYy0+bWF4X3NwX2xlbmd0aCA8PCAxICk7Ci0gICAgICAgIHRtcDE0M19fIHw9ICggcFNyYy0+cWFjayA8PCAzICk7Ci0gICAgICAgIHRtcDE0M19fIHw9ICggcFNyYy0+YWNiZV91YXBzZCA8PCA0ICk7Ci0gICAgICAgIHRtcDE0M19fIHw9ICggcFNyYy0+YWNia191YXBzZCA8PCA1ICk7Ci0gICAgICAgIHRtcDE0M19fIHw9ICggcFNyYy0+YWN2aV91YXBzZCA8PCA2ICk7Ci0gICAgICAgIHRtcDE0M19fIHw9ICggcFNyYy0+YWN2b191YXBzZCA8PCA3ICk7Ci0gICAgICAgICpwQnVmID0gdG1wMTQzX187CisgICAgICAgIHRtcDE0NV9fID0gMFU7CisgICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+bW9yZV9kYXRhX2FjayA8PCAwICk7CisgICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+bWF4X3NwX2xlbmd0aCA8PCAxICk7CisgICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+cWFjayA8PCAzICk7CisgICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+YWNiZV91YXBzZCA8PCA0ICk7CisgICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+YWNia191YXBzZCA8PCA1ICk7CisgICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+YWN2aV91YXBzZCA8PCA2ICk7CisgICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+YWN2b191YXBzZCA8PCA3ICk7CisgICAgICAgICpwQnVmID0gdG1wMTQ1X187CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDE7CiAgICAgICAgIC8vIGZpZWxkc0VuZEZsYWcgID0gMSAKICAgICAgICAgbkJ1ZiAtPSAgMSA7CkBAIC0yNzQ3Niw3ICsyOTIzMSw3IEBACiAgICAgdEFOSV9VOCogcEllTGVuID0gMDsKICAgICB0QU5JX1UzMiBuQ29uc3VtZWRPbkVudHJ5ID0gKnBuQ29uc3VtZWQ7CiAgICAgdEFOSV9VMzIgbk5lZWRlZCA9IDBVOwotICAgIHRBTklfVTE2IHRtcDE0NF9fOworICAgIHRBTklfVTE2IHRtcDE0Nl9fOwogICAgIHRBTklfVTMyIHN0YXR1cyA9IERPVDExRl9QQVJTRV9TVUNDRVNTOwogICAgIHN0YXR1cyA9IGRvdDExZkdldFBhY2tlZElFUlNOKHBDdHgsIHBTcmMsICZuTmVlZGVkKTsKICAgICBpZiAoICEgRE9UMTFGX1NVQ0NFRURFRCggc3RhdHVzICkgKSByZXR1cm4gc3RhdHVzOwpAQCAtMjc1MTEsMTMgKzI5MjY2LDEzIEBACiAgICAgICAgIERPVDExRl9NRU1DUFkocEN0eCwgcEJ1ZiwgJiggcFNyYy0+YWttX3N1aXRlcyApLCAoIHBTcmMtPmFrbV9zdWl0ZV9jb3VudCAqIDQgKSk7CiAgICAgICAgICpwbkNvbnN1bWVkICs9ICggcFNyYy0+YWttX3N1aXRlX2NvdW50ICogNCApOwogICAgICAgICBwQnVmICs9ICggcFNyYy0+YWttX3N1aXRlX2NvdW50ICogNCApOwotICAgICAgICB0bXAxNDRfXyA9IDBVOwotICAgICAgICB0bXAxNDRfXyB8PSAoIHBTcmMtPnByZWF1dGggPDwgMCApOwotICAgICAgICB0bXAxNDRfXyB8PSAoIHBTcmMtPm5vX3B3aXNlIDw8IDEgKTsKLSAgICAgICAgdG1wMTQ0X18gfD0gKCBwU3JjLT5QVEtTQV9yZXBsYXlfY291bnRlciA8PCAyICk7Ci0gICAgICAgIHRtcDE0NF9fIHw9ICggcFNyYy0+R1RLU0FfcmVwbGF5X2NvdW50ZXIgPDwgNCApOwotICAgICAgICB0bXAxNDRfXyB8PSAoIHBTcmMtPnJlc2VydmVkIDw8IDYgKTsKLSAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wMTQ0X18sIDApOworICAgICAgICB0bXAxNDZfXyA9IDBVOworICAgICAgICB0bXAxNDZfXyB8PSAoIHBTcmMtPnByZWF1dGggPDwgMCApOworICAgICAgICB0bXAxNDZfXyB8PSAoIHBTcmMtPm5vX3B3aXNlIDw8IDEgKTsKKyAgICAgICAgdG1wMTQ2X18gfD0gKCBwU3JjLT5QVEtTQV9yZXBsYXlfY291bnRlciA8PCAyICk7CisgICAgICAgIHRtcDE0Nl9fIHw9ICggcFNyYy0+R1RLU0FfcmVwbGF5X2NvdW50ZXIgPDwgNCApOworICAgICAgICB0bXAxNDZfXyB8PSAoIHBTcmMtPnJlc2VydmVkIDw8IDYgKTsKKyAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgdG1wMTQ2X18sIDApOwogICAgICAgICAqcG5Db25zdW1lZCArPSAyOwogICAgICAgICBwQnVmICs9IDI7CiAgICAgICAgIG5CdWYgLT0gIDIgOwpAQCAtMjc3NjgsOSArMjk1MjMsOSBAQAogICAgIHRBTklfVTgqIHBJZUxlbiA9IDA7CiAgICAgdEFOSV9VMzIgbkNvbnN1bWVkT25FbnRyeSA9ICpwbkNvbnN1bWVkOwogICAgIHRBTklfVTMyIG5OZWVkZWQgPSAwVTsKLSAgICB0QU5JX1UzMiB0bXAxNDVfXzsKLSAgICB0QU5JX1UxNiB0bXAxNDZfXzsKLSAgICB0QU5JX1UxNiB0bXAxNDdfXzsKKyAgICB0QU5JX1UzMiB0bXAxNDdfXzsKKyAgICB0QU5JX1UxNiB0bXAxNDhfXzsKKyAgICB0QU5JX1UxNiB0bXAxNDlfXzsKICAgICBuTmVlZGVkICArPSAxMjsKICAgICB3aGlsZSAoIHBTcmMtPnByZXNlbnQgKQogICAgIHsKQEAgLTI3Nzc5LDQ4ICsyOTUzNCw0OCBAQAogICAgICAgICArK3BCdWY7ICsrKCpwbkNvbnN1bWVkKTsKICAgICAgICAgcEllTGVuID0gcEJ1ZjsKICAgICAgICAgKytwQnVmOyArKygqcG5Db25zdW1lZCk7Ci0gICAgICAgIHRtcDE0NV9fID0gMFU7Ci0gICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+bWF4TVBEVUxlbiA8PCAwICk7Ci0gICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+c3VwcG9ydGVkQ2hhbm5lbFdpZHRoU2V0IDw8IDIgKTsKLSAgICAgICAgdG1wMTQ1X18gfD0gKCBwU3JjLT5sZHBjQ29kaW5nQ2FwIDw8IDQgKTsKLSAgICAgICAgdG1wMTQ1X18gfD0gKCBwU3JjLT5zaG9ydEdJODBNSHogPDwgNSApOwotICAgICAgICB0bXAxNDVfXyB8PSAoIHBTcmMtPnNob3J0R0kxNjBhbmQ4MHBsdXM4ME1IeiA8PCA2ICk7Ci0gICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+dHhTVEJDIDw8IDcgKTsKLSAgICAgICAgdG1wMTQ1X18gfD0gKCBwU3JjLT5yeFNUQkMgPDwgOCApOwotICAgICAgICB0bXAxNDVfXyB8PSAoIHBTcmMtPnN1QmVhbUZvcm1lckNhcCA8PCAxMSApOwotICAgICAgICB0bXAxNDVfXyB8PSAoIHBTcmMtPnN1QmVhbWZvcm1lZUNhcCA8PCAxMiApOwotICAgICAgICB0bXAxNDVfXyB8PSAoIHBTcmMtPmNzbm9mQmVhbWZvcm1lckFudFN1cCA8PCAxMyApOwotICAgICAgICB0bXAxNDVfXyB8PSAoIHBTcmMtPm51bVNvdW5kaW5nRGltIDw8IDE2ICk7Ci0gICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+bXVCZWFtZm9ybWVyQ2FwIDw8IDE5ICk7Ci0gICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+bXVCZWFtZm9ybWVlQ2FwIDw8IDIwICk7Ci0gICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+dmh0VFhPUFBTIDw8IDIxICk7Ci0gICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+aHRjVkhUQ2FwIDw8IDIyICk7Ci0gICAgICAgIHRtcDE0NV9fIHw9ICggcFNyYy0+bWF4QU1QRFVMZW5FeHAgPDwgMjMgKTsKLSAgICAgICAgdG1wMTQ1X18gfD0gKCBwU3JjLT52aHRMaW5rQWRhcHRDYXAgPDwgMjYgKTsKLSAgICAgICAgdG1wMTQ1X18gfD0gKCBwU3JjLT5yeEFudFBhdHRlcm4gPDwgMjggKTsKLSAgICAgICAgdG1wMTQ1X18gfD0gKCBwU3JjLT50eEFudFBhdHRlcm4gPDwgMjkgKTsKLSAgICAgICAgdG1wMTQ1X18gfD0gKCBwU3JjLT5yZXNlcnZlZDEgPDwgMzAgKTsKLSAgICAgICAgZnJhbWVzaHRvbmwocEN0eCwgcEJ1ZiwgdG1wMTQ1X18sIDApOworICAgICAgICB0bXAxNDdfXyA9IDBVOworICAgICAgICB0bXAxNDdfXyB8PSAoIHBTcmMtPm1heE1QRFVMZW4gPDwgMCApOworICAgICAgICB0bXAxNDdfXyB8PSAoIHBTcmMtPnN1cHBvcnRlZENoYW5uZWxXaWR0aFNldCA8PCAyICk7CisgICAgICAgIHRtcDE0N19fIHw9ICggcFNyYy0+bGRwY0NvZGluZ0NhcCA8PCA0ICk7CisgICAgICAgIHRtcDE0N19fIHw9ICggcFNyYy0+c2hvcnRHSTgwTUh6IDw8IDUgKTsKKyAgICAgICAgdG1wMTQ3X18gfD0gKCBwU3JjLT5zaG9ydEdJMTYwYW5kODBwbHVzODBNSHogPDwgNiApOworICAgICAgICB0bXAxNDdfXyB8PSAoIHBTcmMtPnR4U1RCQyA8PCA3ICk7CisgICAgICAgIHRtcDE0N19fIHw9ICggcFNyYy0+cnhTVEJDIDw8IDggKTsKKyAgICAgICAgdG1wMTQ3X18gfD0gKCBwU3JjLT5zdUJlYW1Gb3JtZXJDYXAgPDwgMTEgKTsKKyAgICAgICAgdG1wMTQ3X18gfD0gKCBwU3JjLT5zdUJlYW1mb3JtZWVDYXAgPDwgMTIgKTsKKyAgICAgICAgdG1wMTQ3X18gfD0gKCBwU3JjLT5jc25vZkJlYW1mb3JtZXJBbnRTdXAgPDwgMTMgKTsKKyAgICAgICAgdG1wMTQ3X18gfD0gKCBwU3JjLT5udW1Tb3VuZGluZ0RpbSA8PCAxNiApOworICAgICAgICB0bXAxNDdfXyB8PSAoIHBTcmMtPm11QmVhbWZvcm1lckNhcCA8PCAxOSApOworICAgICAgICB0bXAxNDdfXyB8PSAoIHBTcmMtPm11QmVhbWZvcm1lZUNhcCA8PCAyMCApOworICAgICAgICB0bXAxNDdfXyB8PSAoIHBTcmMtPnZodFRYT1BQUyA8PCAyMSApOworICAgICAgICB0bXAxNDdfXyB8PSAoIHBTcmMtPmh0Y1ZIVENhcCA8PCAyMiApOworICAgICAgICB0bXAxNDdfXyB8PSAoIHBTcmMtPm1heEFNUERVTGVuRXhwIDw8IDIzICk7CisgICAgICAgIHRtcDE0N19fIHw9ICggcFNyYy0+dmh0TGlua0FkYXB0Q2FwIDw8IDI2ICk7CisgICAgICAgIHRtcDE0N19fIHw9ICggcFNyYy0+cnhBbnRQYXR0ZXJuIDw8IDI4ICk7CisgICAgICAgIHRtcDE0N19fIHw9ICggcFNyYy0+dHhBbnRQYXR0ZXJuIDw8IDI5ICk7CisgICAgICAgIHRtcDE0N19fIHw9ICggcFNyYy0+cmVzZXJ2ZWQxIDw8IDMwICk7CisgICAgICAgIGZyYW1lc2h0b25sKHBDdHgsIHBCdWYsIHRtcDE0N19fLCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gNDsKICAgICAgICAgcEJ1ZiArPSA0OwogICAgICAgICBuQnVmIC09ICA0IDsKICAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgcFNyYy0+cnhNQ1NNYXAsIDApOwogICAgICAgICAqcG5Db25zdW1lZCArPSAyOwogICAgICAgICBwQnVmICs9IDI7Ci0gICAgICAgIHRtcDE0Nl9fID0gMFU7Ci0gICAgICAgIHRtcDE0Nl9fIHw9ICggcFNyYy0+cnhIaWdoU3VwRGF0YVJhdGUgPDwgMCApOwotICAgICAgICB0bXAxNDZfXyB8PSAoIHBTcmMtPnJlc2VydmVkMiA8PCAxMyApOwotICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXAxNDZfXywgMCk7CisgICAgICAgIHRtcDE0OF9fID0gMFU7CisgICAgICAgIHRtcDE0OF9fIHw9ICggcFNyYy0+cnhIaWdoU3VwRGF0YVJhdGUgPDwgMCApOworICAgICAgICB0bXAxNDhfXyB8PSAoIHBTcmMtPnJlc2VydmVkMiA8PCAxMyApOworICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXAxNDhfXywgMCk7CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDI7CiAgICAgICAgIHBCdWYgKz0gMjsKICAgICAgICAgbkJ1ZiAtPSAgMiA7CiAgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHBTcmMtPnR4TUNTTWFwLCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwotICAgICAgICB0bXAxNDdfXyA9IDBVOwotICAgICAgICB0bXAxNDdfXyB8PSAoIHBTcmMtPnR4U3VwRGF0YVJhdGUgPDwgMCApOwotICAgICAgICB0bXAxNDdfXyB8PSAoIHBTcmMtPnJlc2VydmVkMyA8PCAxMyApOwotICAgICAgICBmcmFtZXNodG9ucyhwQ3R4LCBwQnVmLCB0bXAxNDdfXywgMCk7CisgICAgICAgIHRtcDE0OV9fID0gMFU7CisgICAgICAgIHRtcDE0OV9fIHw9ICggcFNyYy0+dHhTdXBEYXRhUmF0ZSA8PCAwICk7CisgICAgICAgIHRtcDE0OV9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQzIDw8IDEzICk7CisgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHRtcDE0OV9fLCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgLy8gZmllbGRzRW5kRmxhZyAgPSAxIAogICAgICAgICBuQnVmIC09ICAyIDsKQEAgLTI3OTI0LDcgKzI5Njc5LDcgQEAKICAgICB0QU5JX1U4KiBwSWVMZW4gPSAwOwogICAgIHRBTklfVTMyIG5Db25zdW1lZE9uRW50cnkgPSAqcG5Db25zdW1lZDsKICAgICB0QU5JX1UzMiBuTmVlZGVkID0gMFU7Ci0gICAgdEFOSV9VMTYgdG1wMTQ4X187CisgICAgdEFOSV9VMTYgdG1wMTUwX187CiAgICAgdEFOSV9VMzIgc3RhdHVzID0gRE9UMTFGX1BBUlNFX1NVQ0NFU1M7CiAgICAgc3RhdHVzID0gZG90MTFmR2V0UGFja2VkSUVXQVBJKHBDdHgsIHBTcmMsICZuTmVlZGVkKTsKICAgICBpZiAoICEgRE9UMTFGX1NVQ0NFRURFRCggc3RhdHVzICkgKSByZXR1cm4gc3RhdHVzOwpAQCAtMjc5NTMsMTAgKzI5NzA4LDEwIEBACiAgICAgICAgIERPVDExRl9NRU1DUFkocEN0eCwgcEJ1ZiwgcFNyYy0+bXVsdGljYXN0X2NpcGhlcl9zdWl0ZSwgNCk7CiAgICAgICAgICpwbkNvbnN1bWVkICs9IDQ7CiAgICAgICAgIHBCdWYgKz0gNDsKLSAgICAgICAgdG1wMTQ4X18gPSAwVTsKLSAgICAgICAgdG1wMTQ4X18gfD0gKCBwU3JjLT5wcmVhdXRoIDw8IDAgKTsKLSAgICAgICAgdG1wMTQ4X18gfD0gKCBwU3JjLT5yZXNlcnZlZCA8PCAxICk7Ci0gICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHRtcDE0OF9fLCAwKTsKKyAgICAgICAgdG1wMTUwX18gPSAwVTsKKyAgICAgICAgdG1wMTUwX18gfD0gKCBwU3JjLT5wcmVhdXRoIDw8IDAgKTsKKyAgICAgICAgdG1wMTUwX18gfD0gKCBwU3JjLT5yZXNlcnZlZCA8PCAxICk7CisgICAgICAgIGZyYW1lc2h0b25zKHBDdHgsIHBCdWYsIHRtcDE1MF9fLCAwKTsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMjsKICAgICAgICAgcEJ1ZiArPSAyOwogICAgICAgICBuQnVmIC09ICAyIDsKQEAgLTI4MDk5LDcgKzI5ODU0LDcgQEAKICAgICB0QU5JX1U4KiBwSWVMZW4gPSAwOwogICAgIHRBTklfVTMyIG5Db25zdW1lZE9uRW50cnkgPSAqcG5Db25zdW1lZDsKICAgICB0QU5JX1UzMiBuTmVlZGVkID0gMFU7Ci0gICAgdEFOSV9VOCB0bXAxNDlfXzsKKyAgICB0QU5JX1U4IHRtcDE1MV9fOwogICAgIG5OZWVkZWQgICs9IDI7CiAgICAgd2hpbGUgKCBwU3JjLT5wcmVzZW50ICkKICAgICB7CkBAIC0yODEyMSwxMyArMjk4NzYsMTMgQEAKICAgICAgICAgKnBCdWYgPSBwU3JjLT52ZXJzaW9uOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7Ci0gICAgICAgIHRtcDE0OV9fID0gMFU7Ci0gICAgICAgIHRtcDE0OV9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQgPDwgMCApOwotICAgICAgICB0bXAxNDlfXyB8PSAoIHBTcmMtPnFhY2sgPDwgNCApOwotICAgICAgICB0bXAxNDlfXyB8PSAoIHBTcmMtPnF1ZXVlX3JlcXVlc3QgPDwgNSApOwotICAgICAgICB0bXAxNDlfXyB8PSAoIHBTcmMtPnR4b3BfcmVxdWVzdCA8PCA2ICk7Ci0gICAgICAgIHRtcDE0OV9fIHw9ICggcFNyYy0+bW9yZV9hY2sgPDwgNyApOwotICAgICAgICAqcEJ1ZiA9IHRtcDE0OV9fOworICAgICAgICB0bXAxNTFfXyA9IDBVOworICAgICAgICB0bXAxNTFfXyB8PSAoIHBTcmMtPnJlc2VydmVkIDw8IDAgKTsKKyAgICAgICAgdG1wMTUxX18gfD0gKCBwU3JjLT5xYWNrIDw8IDQgKTsKKyAgICAgICAgdG1wMTUxX18gfD0gKCBwU3JjLT5xdWV1ZV9yZXF1ZXN0IDw8IDUgKTsKKyAgICAgICAgdG1wMTUxX18gfD0gKCBwU3JjLT50eG9wX3JlcXVlc3QgPDwgNiApOworICAgICAgICB0bXAxNTFfXyB8PSAoIHBTcmMtPm1vcmVfYWNrIDw8IDcgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxNTFfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgLy8gZmllbGRzRW5kRmxhZyAgPSAxIAogICAgICAgICBuQnVmIC09ICAxIDsKQEAgLTI4MTUwLDcgKzI5OTA1LDcgQEAKICAgICB0QU5JX1U4KiBwSWVMZW4gPSAwOwogICAgIHRBTklfVTMyIG5Db25zdW1lZE9uRW50cnkgPSAqcG5Db25zdW1lZDsKICAgICB0QU5JX1UzMiBuTmVlZGVkID0gMFU7Ci0gICAgdEFOSV9VOCB0bXAxNTBfXzsKKyAgICB0QU5JX1U4IHRtcDE1Ml9fOwogICAgIG5OZWVkZWQgICs9IDI7CiAgICAgd2hpbGUgKCBwU3JjLT5wcmVzZW50ICkKICAgICB7CkBAIC0yODE3MiwxMSArMjk5MjcsMTEgQEAKICAgICAgICAgKnBCdWYgPSBwU3JjLT52ZXJzaW9uOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7Ci0gICAgICAgIHRtcDE1MF9fID0gMFU7Ci0gICAgICAgIHRtcDE1MF9fIHw9ICggcFNyYy0+cGFyYW1fc2V0X2NvdW50IDw8IDAgKTsKLSAgICAgICAgdG1wMTUwX18gfD0gKCBwU3JjLT5yZXNlcnZlZCA8PCA0ICk7Ci0gICAgICAgIHRtcDE1MF9fIHw9ICggcFNyYy0+dWFwc2QgPDwgNyApOwotICAgICAgICAqcEJ1ZiA9IHRtcDE1MF9fOworICAgICAgICB0bXAxNTJfXyA9IDBVOworICAgICAgICB0bXAxNTJfXyB8PSAoIHBTcmMtPnBhcmFtX3NldF9jb3VudCA8PCAwICk7CisgICAgICAgIHRtcDE1Ml9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQgPDwgNCApOworICAgICAgICB0bXAxNTJfXyB8PSAoIHBTcmMtPnVhcHNkIDw8IDcgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxNTJfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgLy8gZmllbGRzRW5kRmxhZyAgPSAxIAogICAgICAgICBuQnVmIC09ICAxIDsKQEAgLTI4MTk5LDcgKzI5OTU0LDcgQEAKICAgICB0QU5JX1U4KiBwSWVMZW4gPSAwOwogICAgIHRBTklfVTMyIG5Db25zdW1lZE9uRW50cnkgPSAqcG5Db25zdW1lZDsKICAgICB0QU5JX1UzMiBuTmVlZGVkID0gMFU7Ci0gICAgdEFOSV9VOCB0bXAxNTFfXzsKKyAgICB0QU5JX1U4IHRtcDE1M19fOwogICAgIG5OZWVkZWQgICs9IDI7CiAgICAgd2hpbGUgKCBwU3JjLT5wcmVzZW50ICkKICAgICB7CkBAIC0yODIyMSwxNSArMjk5NzYsMTUgQEAKICAgICAgICAgKnBCdWYgPSBwU3JjLT52ZXJzaW9uOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7Ci0gICAgICAgIHRtcDE1MV9fID0gMFU7Ci0gICAgICAgIHRtcDE1MV9fIHw9ICggcFNyYy0+YWN2b191YXBzZCA8PCAwICk7Ci0gICAgICAgIHRtcDE1MV9fIHw9ICggcFNyYy0+YWN2aV91YXBzZCA8PCAxICk7Ci0gICAgICAgIHRtcDE1MV9fIHw9ICggcFNyYy0+YWNia191YXBzZCA8PCAyICk7Ci0gICAgICAgIHRtcDE1MV9fIHw9ICggcFNyYy0+YWNiZV91YXBzZCA8PCAzICk7Ci0gICAgICAgIHRtcDE1MV9fIHw9ICggcFNyYy0+cmVzZXJ2ZWQxIDw8IDQgKTsKLSAgICAgICAgdG1wMTUxX18gfD0gKCBwU3JjLT5tYXhfc3BfbGVuZ3RoIDw8IDUgKTsKLSAgICAgICAgdG1wMTUxX18gfD0gKCBwU3JjLT5yZXNlcnZlZDIgPDwgNyApOwotICAgICAgICAqcEJ1ZiA9IHRtcDE1MV9fOworICAgICAgICB0bXAxNTNfXyA9IDBVOworICAgICAgICB0bXAxNTNfXyB8PSAoIHBTcmMtPmFjdm9fdWFwc2QgPDwgMCApOworICAgICAgICB0bXAxNTNfXyB8PSAoIHBTcmMtPmFjdmlfdWFwc2QgPDwgMSApOworICAgICAgICB0bXAxNTNfXyB8PSAoIHBTcmMtPmFjYmtfdWFwc2QgPDwgMiApOworICAgICAgICB0bXAxNTNfXyB8PSAoIHBTcmMtPmFjYmVfdWFwc2QgPDwgMyApOworICAgICAgICB0bXAxNTNfXyB8PSAoIHBTcmMtPnJlc2VydmVkMSA8PCA0ICk7CisgICAgICAgIHRtcDE1M19fIHw9ICggcFNyYy0+bWF4X3NwX2xlbmd0aCA8PCA1ICk7CisgICAgICAgIHRtcDE1M19fIHw9ICggcFNyYy0+cmVzZXJ2ZWQyIDw8IDcgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxNTNfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgLy8gZmllbGRzRW5kRmxhZyAgPSAxIAogICAgICAgICBuQnVmIC09ICAxIDsKQEAgLTI4MjUyLDE0ICszMDAwNywxNCBAQAogICAgIHRBTklfVTgqIHBJZUxlbiA9IDA7CiAgICAgdEFOSV9VMzIgbkNvbnN1bWVkT25FbnRyeSA9ICpwbkNvbnN1bWVkOwogICAgIHRBTklfVTMyIG5OZWVkZWQgPSAwVTsKLSAgICB0QU5JX1U4IHRtcDE1Ml9fOwotICAgIHRBTklfVTggdG1wMTUzX187CiAgICAgdEFOSV9VOCB0bXAxNTRfXzsKICAgICB0QU5JX1U4IHRtcDE1NV9fOwogICAgIHRBTklfVTggdG1wMTU2X187CiAgICAgdEFOSV9VOCB0bXAxNTdfXzsKICAgICB0QU5JX1U4IHRtcDE1OF9fOwogICAgIHRBTklfVTggdG1wMTU5X187CisgICAgdEFOSV9VOCB0bXAxNjBfXzsKKyAgICB0QU5JX1U4IHRtcDE2MV9fOwogICAgIG5OZWVkZWQgICs9IDE5OwogICAgIHdoaWxlICggcFNyYy0+cHJlc2VudCApCiAgICAgewpAQCAtMjgyODcsNzYgKzMwMDQyLDc2IEBACiAgICAgICAgICpwQnVmID0gcFNyYy0+cmVzZXJ2ZWQyOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7Ci0gICAgICAgIHRtcDE1Ml9fID0gMFU7Ci0gICAgICAgIHRtcDE1Ml9fIHw9ICggcFNyYy0+YWNiZV9haWZzbiA8PCAwICk7Ci0gICAgICAgIHRtcDE1Ml9fIHw9ICggcFNyYy0+YWNiZV9hY20gPDwgNCApOwotICAgICAgICB0bXAxNTJfXyB8PSAoIHBTcmMtPmFjYmVfYWNpIDw8IDUgKTsKLSAgICAgICAgdG1wMTUyX18gfD0gKCBwU3JjLT51bnVzZWQxIDw8IDcgKTsKLSAgICAgICAgKnBCdWYgPSB0bXAxNTJfXzsKKyAgICAgICAgdG1wMTU0X18gPSAwVTsKKyAgICAgICAgdG1wMTU0X18gfD0gKCBwU3JjLT5hY2JlX2FpZnNuIDw8IDAgKTsKKyAgICAgICAgdG1wMTU0X18gfD0gKCBwU3JjLT5hY2JlX2FjbSA8PCA0ICk7CisgICAgICAgIHRtcDE1NF9fIHw9ICggcFNyYy0+YWNiZV9hY2kgPDwgNSApOworICAgICAgICB0bXAxNTRfXyB8PSAoIHBTcmMtPnVudXNlZDEgPDwgNyApOworICAgICAgICAqcEJ1ZiA9IHRtcDE1NF9fOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7CiAgICAgICAgIG5CdWYgLT0gIDEgOwotICAgICAgICB0bXAxNTNfXyA9IDBVOwotICAgICAgICB0bXAxNTNfXyB8PSAoIHBTcmMtPmFjYmVfYWN3bWluIDw8IDAgKTsKLSAgICAgICAgdG1wMTUzX18gfD0gKCBwU3JjLT5hY2JlX2Fjd21heCA8PCA0ICk7Ci0gICAgICAgICpwQnVmID0gdG1wMTUzX187CisgICAgICAgIHRtcDE1NV9fID0gMFU7CisgICAgICAgIHRtcDE1NV9fIHw9ICggcFNyYy0+YWNiZV9hY3dtaW4gPDwgMCApOworICAgICAgICB0bXAxNTVfXyB8PSAoIHBTcmMtPmFjYmVfYWN3bWF4IDw8IDQgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxNTVfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKICAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgcFNyYy0+YWNiZV90eG9wbGltaXQsIDApOwogICAgICAgICAqcG5Db25zdW1lZCArPSAyOwogICAgICAgICBwQnVmICs9IDI7Ci0gICAgICAgIHRtcDE1NF9fID0gMFU7Ci0gICAgICAgIHRtcDE1NF9fIHw9ICggcFNyYy0+YWNia19haWZzbiA8PCAwICk7Ci0gICAgICAgIHRtcDE1NF9fIHw9ICggcFNyYy0+YWNia19hY20gPDwgNCApOwotICAgICAgICB0bXAxNTRfXyB8PSAoIHBTcmMtPmFjYmtfYWNpIDw8IDUgKTsKLSAgICAgICAgdG1wMTU0X18gfD0gKCBwU3JjLT51bnVzZWQyIDw8IDcgKTsKLSAgICAgICAgKnBCdWYgPSB0bXAxNTRfXzsKKyAgICAgICAgdG1wMTU2X18gPSAwVTsKKyAgICAgICAgdG1wMTU2X18gfD0gKCBwU3JjLT5hY2JrX2FpZnNuIDw8IDAgKTsKKyAgICAgICAgdG1wMTU2X18gfD0gKCBwU3JjLT5hY2JrX2FjbSA8PCA0ICk7CisgICAgICAgIHRtcDE1Nl9fIHw9ICggcFNyYy0+YWNia19hY2kgPDwgNSApOworICAgICAgICB0bXAxNTZfXyB8PSAoIHBTcmMtPnVudXNlZDIgPDwgNyApOworICAgICAgICAqcEJ1ZiA9IHRtcDE1Nl9fOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7CiAgICAgICAgIG5CdWYgLT0gIDEgOwotICAgICAgICB0bXAxNTVfXyA9IDBVOwotICAgICAgICB0bXAxNTVfXyB8PSAoIHBTcmMtPmFjYmtfYWN3bWluIDw8IDAgKTsKLSAgICAgICAgdG1wMTU1X18gfD0gKCBwU3JjLT5hY2JrX2Fjd21heCA8PCA0ICk7Ci0gICAgICAgICpwQnVmID0gdG1wMTU1X187CisgICAgICAgIHRtcDE1N19fID0gMFU7CisgICAgICAgIHRtcDE1N19fIHw9ICggcFNyYy0+YWNia19hY3dtaW4gPDwgMCApOworICAgICAgICB0bXAxNTdfXyB8PSAoIHBTcmMtPmFjYmtfYWN3bWF4IDw8IDQgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxNTdfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKICAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgcFNyYy0+YWNia190eG9wbGltaXQsIDApOwogICAgICAgICAqcG5Db25zdW1lZCArPSAyOwogICAgICAgICBwQnVmICs9IDI7Ci0gICAgICAgIHRtcDE1Nl9fID0gMFU7Ci0gICAgICAgIHRtcDE1Nl9fIHw9ICggcFNyYy0+YWN2aV9haWZzbiA8PCAwICk7Ci0gICAgICAgIHRtcDE1Nl9fIHw9ICggcFNyYy0+YWN2aV9hY20gPDwgNCApOwotICAgICAgICB0bXAxNTZfXyB8PSAoIHBTcmMtPmFjdmlfYWNpIDw8IDUgKTsKLSAgICAgICAgdG1wMTU2X18gfD0gKCBwU3JjLT51bnVzZWQzIDw8IDcgKTsKLSAgICAgICAgKnBCdWYgPSB0bXAxNTZfXzsKKyAgICAgICAgdG1wMTU4X18gPSAwVTsKKyAgICAgICAgdG1wMTU4X18gfD0gKCBwU3JjLT5hY3ZpX2FpZnNuIDw8IDAgKTsKKyAgICAgICAgdG1wMTU4X18gfD0gKCBwU3JjLT5hY3ZpX2FjbSA8PCA0ICk7CisgICAgICAgIHRtcDE1OF9fIHw9ICggcFNyYy0+YWN2aV9hY2kgPDwgNSApOworICAgICAgICB0bXAxNThfXyB8PSAoIHBTcmMtPnVudXNlZDMgPDwgNyApOworICAgICAgICAqcEJ1ZiA9IHRtcDE1OF9fOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7CiAgICAgICAgIG5CdWYgLT0gIDEgOwotICAgICAgICB0bXAxNTdfXyA9IDBVOwotICAgICAgICB0bXAxNTdfXyB8PSAoIHBTcmMtPmFjdmlfYWN3bWluIDw8IDAgKTsKLSAgICAgICAgdG1wMTU3X18gfD0gKCBwU3JjLT5hY3ZpX2Fjd21heCA8PCA0ICk7Ci0gICAgICAgICpwQnVmID0gdG1wMTU3X187CisgICAgICAgIHRtcDE1OV9fID0gMFU7CisgICAgICAgIHRtcDE1OV9fIHw9ICggcFNyYy0+YWN2aV9hY3dtaW4gPDwgMCApOworICAgICAgICB0bXAxNTlfXyB8PSAoIHBTcmMtPmFjdmlfYWN3bWF4IDw8IDQgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxNTlfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKICAgICAgICAgZnJhbWVzaHRvbnMocEN0eCwgcEJ1ZiwgcFNyYy0+YWN2aV90eG9wbGltaXQsIDApOwogICAgICAgICAqcG5Db25zdW1lZCArPSAyOwogICAgICAgICBwQnVmICs9IDI7Ci0gICAgICAgIHRtcDE1OF9fID0gMFU7Ci0gICAgICAgIHRtcDE1OF9fIHw9ICggcFNyYy0+YWN2b19haWZzbiA8PCAwICk7Ci0gICAgICAgIHRtcDE1OF9fIHw9ICggcFNyYy0+YWN2b19hY20gPDwgNCApOwotICAgICAgICB0bXAxNThfXyB8PSAoIHBTcmMtPmFjdm9fYWNpIDw8IDUgKTsKLSAgICAgICAgdG1wMTU4X18gfD0gKCBwU3JjLT51bnVzZWQ0IDw8IDcgKTsKLSAgICAgICAgKnBCdWYgPSB0bXAxNThfXzsKKyAgICAgICAgdG1wMTYwX18gPSAwVTsKKyAgICAgICAgdG1wMTYwX18gfD0gKCBwU3JjLT5hY3ZvX2FpZnNuIDw8IDAgKTsKKyAgICAgICAgdG1wMTYwX18gfD0gKCBwU3JjLT5hY3ZvX2FjbSA8PCA0ICk7CisgICAgICAgIHRtcDE2MF9fIHw9ICggcFNyYy0+YWN2b19hY2kgPDwgNSApOworICAgICAgICB0bXAxNjBfXyB8PSAoIHBTcmMtPnVudXNlZDQgPDwgNyApOworICAgICAgICAqcEJ1ZiA9IHRtcDE2MF9fOwogICAgICAgICAqcG5Db25zdW1lZCArPSAxOwogICAgICAgICBwQnVmICs9IDE7CiAgICAgICAgIG5CdWYgLT0gIDEgOwotICAgICAgICB0bXAxNTlfXyA9IDBVOwotICAgICAgICB0bXAxNTlfXyB8PSAoIHBTcmMtPmFjdm9fYWN3bWluIDw8IDAgKTsKLSAgICAgICAgdG1wMTU5X18gfD0gKCBwU3JjLT5hY3ZvX2Fjd21heCA8PCA0ICk7Ci0gICAgICAgICpwQnVmID0gdG1wMTU5X187CisgICAgICAgIHRtcDE2MV9fID0gMFU7CisgICAgICAgIHRtcDE2MV9fIHw9ICggcFNyYy0+YWN2b19hY3dtaW4gPDwgMCApOworICAgICAgICB0bXAxNjFfXyB8PSAoIHBTcmMtPmFjdm9fYWN3bWF4IDw8IDQgKTsKKyAgICAgICAgKnBCdWYgPSB0bXAxNjFfXzsKICAgICAgICAgKnBuQ29uc3VtZWQgKz0gMTsKICAgICAgICAgcEJ1ZiArPSAxOwogICAgICAgICBuQnVmIC09ICAxIDsKQEAgLTMwMDU3LDYgKzMxODEyLDcgQEAKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFUVVFU1QpLCBGUkZMKCJETVMgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5ETVMpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVRVUVTVCksIEZSRkwoIlVUQ1RTRk9mZnNldCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVUQ1RTRk9mZnNldCk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVFVRVNUKSwgRlJGTCgiVERMU1BlZXJVQVBTREJ1ZmZlclNUQSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNQZWVyVUFQU0RCdWZmZXJTVEEpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVRVUVTVCksIEZSRkwoIlRETFNQZWVyUFNNU3VwcCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNQZWVyUFNNU3VwcCk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVFVRVNUKSwgRlJGTCgiVERMU0NoYW5uZWxTd2l0Y2hpbmcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTQ2hhbm5lbFN3aXRjaGluZyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVFVRVNUKSwgRlJGTCgiaW50ZXJ3b3JraW5nU2VydmljZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmludGVyd29ya2luZ1NlcnZpY2UpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVRVUVTVCksIEZSRkwoInFvc01hcCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnFvc01hcCk7CkBAIC0zMDA3NCw3ICszMTgzMCw3IEBACiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVFVRVNUKSwgRlJGTCgid25tTm90aWZpY2F0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAud25tTm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFUVVFU1QpLCBGUkZMKCJyZXNlcnZlZDUgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDUpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVRVUVTVCksIEZSRkwoIlVURjhTU0lEICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVVRGOFNTSUQpOwotICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVRVUVTVCksIEZSRkwoInJlc2VydmVkNiAoMTMpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVRVUVTVCksIEZSRkwoInJlc2VydmVkNiAoMTIpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDYpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVRVUVTVCksIEZSRkwoIlRETFNXaWRlckJXICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1dpZGVyQlcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVRVUVTVCksIEZSRkwoIm9wZXJNb2RlTm90aWZpY2F0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAub3Blck1vZGVOb3RpZmljYXRpb24pOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVRVUVTVCksIEZSRkwoInJlc2VydmVkNyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNyk7CkBAIC0zMTE3OSw2ICszMjkzNSw3IEBACiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoIkRNUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLkRNUyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoIlVUQ1RTRk9mZnNldCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVUQ1RTRk9mZnNldCk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoIlRETFNQZWVyVUFQU0RCdWZmZXJTVEEgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclVBUFNEQnVmZmVyU1RBKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFU1BPTlNFKSwgRlJGTCgiVERMU1BlZXJQU01TdXBwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJQU01TdXBwKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFU1BPTlNFKSwgRlJGTCgiVERMU0NoYW5uZWxTd2l0Y2hpbmcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTQ2hhbm5lbFN3aXRjaGluZyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoImludGVyd29ya2luZ1NlcnZpY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5pbnRlcndvcmtpbmdTZXJ2aWNlKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFU1BPTlNFKSwgRlJGTCgicW9zTWFwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucW9zTWFwKTsKQEAgLTMxMTk2LDcgKzMyOTUzLDcgQEAKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFU1BPTlNFKSwgRlJGTCgid25tTm90aWZpY2F0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAud25tTm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFU1BPTlNFKSwgRlJGTCgicmVzZXJ2ZWQ1ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ1KTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFU1BPTlNFKSwgRlJGTCgiVVRGOFNTSUQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVEY4U1NJRCk7Ci0gICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoInJlc2VydmVkNiAoMTMpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVTUE9OU0UpLCBGUkZMKCJyZXNlcnZlZDYgKDEyKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9BU1NPQ1JFU1BPTlNFKSwgRlJGTCgiVERMU1dpZGVyQlcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTV2lkZXJCVyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQVNTT0NSRVNQT05TRSksIEZSRkwoIm9wZXJNb2RlTm90aWZpY2F0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAub3Blck1vZGVOb3RpZmljYXRpb24pOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0FTU09DUkVTUE9OU0UpLCBGUkZMKCJyZXNlcnZlZDcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDcpOwpAQCAtMzI2MjksNiArMzQzODYsNyBAQAogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTiksIEZSRkwoIkRNUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLkRNUyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgiVVRDVFNGT2Zmc2V0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVVRDVFNGT2Zmc2V0KTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04pLCBGUkZMKCJURExTUGVlclVBUFNEQnVmZmVyU1RBICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJVQVBTREJ1ZmZlclNUQSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgiVERMU1BlZXJQU01TdXBwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJQU01TdXBwKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04pLCBGUkZMKCJURExTQ2hhbm5lbFN3aXRjaGluZyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNDaGFubmVsU3dpdGNoaW5nKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04pLCBGUkZMKCJpbnRlcndvcmtpbmdTZXJ2aWNlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuaW50ZXJ3b3JraW5nU2VydmljZSk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgicW9zTWFwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucW9zTWFwKTsKQEAgLTMyNjQ2LDcgKzM0NDA0LDcgQEAKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04pLCBGUkZMKCJ3bm1Ob3RpZmljYXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC53bm1Ob3RpZmljYXRpb24pOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTiksIEZSRkwoInJlc2VydmVkNSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNSk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgiVVRGOFNTSUQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVEY4U1NJRCk7Ci0gICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgicmVzZXJ2ZWQ2ICgxMyk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgicmVzZXJ2ZWQ2ICgxMik6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgiVERMU1dpZGVyQlcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTV2lkZXJCVyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgib3Blck1vZGVOb3RpZmljYXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5vcGVyTW9kZU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OKSwgRlJGTCgicmVzZXJ2ZWQ3ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ3KTsKQEAgLTMzNjU1LDYgKzM1NDEzLDcgQEAKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04yKSwgRlJGTCgiRE1TICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRE1TKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04yKSwgRlJGTCgiVVRDVFNGT2Zmc2V0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVVRDVFNGT2Zmc2V0KTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04yKSwgRlJGTCgiVERMU1BlZXJVQVBTREJ1ZmZlclNUQSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNQZWVyVUFQU0RCdWZmZXJTVEEpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJURExTUGVlclBTTVN1cHAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclBTTVN1cHApOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJURExTQ2hhbm5lbFN3aXRjaGluZyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNDaGFubmVsU3dpdGNoaW5nKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04yKSwgRlJGTCgiaW50ZXJ3b3JraW5nU2VydmljZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmludGVyd29ya2luZ1NlcnZpY2UpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJxb3NNYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5xb3NNYXApOwpAQCAtMzM2NzIsNyArMzU0MzEsNyBAQAogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJ3bm1Ob3RpZmljYXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC53bm1Ob3RpZmljYXRpb24pOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJyZXNlcnZlZDUgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDUpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJVVEY4U1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVURjhTU0lEKTsKLSAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04yKSwgRlJGTCgicmVzZXJ2ZWQ2ICgxMyk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OMiksIEZSRkwoInJlc2VydmVkNiAoMTIpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDYpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTjIpLCBGUkZMKCJURExTV2lkZXJCVyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNXaWRlckJXKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT04yKSwgRlJGTCgib3Blck1vZGVOb3RpZmljYXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5vcGVyTW9kZU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OMiksIEZSRkwoInJlc2VydmVkNyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNyk7CkBAIC0zNDg1NCw2ICszNjYxMyw3IEBACiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OSUVTKSwgRlJGTCgiRE1TICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRE1TKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJVVENUU0ZPZmZzZXQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVENUU0ZPZmZzZXQpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTklFUyksIEZSRkwoIlRETFNQZWVyVUFQU0RCdWZmZXJTVEEgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclVBUFNEQnVmZmVyU1RBKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJURExTUGVlclBTTVN1cHAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclBTTVN1cHApOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTklFUyksIEZSRkwoIlRETFNDaGFubmVsU3dpdGNoaW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU0NoYW5uZWxTd2l0Y2hpbmcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTklFUyksIEZSRkwoImludGVyd29ya2luZ1NlcnZpY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5pbnRlcndvcmtpbmdTZXJ2aWNlKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJxb3NNYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5xb3NNYXApOwpAQCAtMzQ4NzEsNyArMzY2MzEsNyBAQAogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX0JFQUNPTklFUyksIEZSRkwoIndubU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfQkVBQ09OSUVTKSwgRlJGTCgicmVzZXJ2ZWQ1ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ1KTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJVVEY4U1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVURjhTU0lEKTsKLSAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJyZXNlcnZlZDYgKDEzKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJyZXNlcnZlZDYgKDEyKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJURExTV2lkZXJCVyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNXaWRlckJXKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJvcGVyTW9kZU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm9wZXJNb2RlTm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9CRUFDT05JRVMpLCBGUkZMKCJyZXNlcnZlZDcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDcpOwpAQCAtMzc5ODEsNiArMzk3NDEsNyBAQAogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1BST0JFUkVTUE9OU0UpLCBGUkZMKCJETVMgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5ETVMpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1BST0JFUkVTUE9OU0UpLCBGUkZMKCJVVENUU0ZPZmZzZXQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVENUU0ZPZmZzZXQpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1BST0JFUkVTUE9OU0UpLCBGUkZMKCJURExTUGVlclVBUFNEQnVmZmVyU1RBICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJVQVBTREJ1ZmZlclNUQSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoIlRETFNQZWVyUFNNU3VwcCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNQZWVyUFNNU3VwcCk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoIlRETFNDaGFubmVsU3dpdGNoaW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU0NoYW5uZWxTd2l0Y2hpbmcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1BST0JFUkVTUE9OU0UpLCBGUkZMKCJpbnRlcndvcmtpbmdTZXJ2aWNlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuaW50ZXJ3b3JraW5nU2VydmljZSk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoInFvc01hcCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnFvc01hcCk7CkBAIC0zNzk5OCw3ICszOTc1OSw3IEBACiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoIndubU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoInJlc2VydmVkNSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNSk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoIlVURjhTU0lEICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVVRGOFNTSUQpOwotICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1BST0JFUkVTUE9OU0UpLCBGUkZMKCJyZXNlcnZlZDYgKDEzKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9QUk9CRVJFU1BPTlNFKSwgRlJGTCgicmVzZXJ2ZWQ2ICgxMik6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUFJPQkVSRVNQT05TRSksIEZSRkwoIlRETFNXaWRlckJXICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1dpZGVyQlcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1BST0JFUkVTUE9OU0UpLCBGUkZMKCJvcGVyTW9kZU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm9wZXJNb2RlTm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9QUk9CRVJFU1BPTlNFKSwgRlJGTCgicmVzZXJ2ZWQ3ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ3KTsKQEAgLTM5MjY4LDYgKzQxMDI5LDcgQEAKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVRVUVTVCksIEZSRkwoIkRNUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLkRNUyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUkVBU1NPQ1JFUVVFU1QpLCBGUkZMKCJVVENUU0ZPZmZzZXQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVENUU0ZPZmZzZXQpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVFVRVNUKSwgRlJGTCgiVERMU1BlZXJVQVBTREJ1ZmZlclNUQSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNQZWVyVUFQU0RCdWZmZXJTVEEpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVFVRVNUKSwgRlJGTCgiVERMU1BlZXJQU01TdXBwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJQU01TdXBwKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVRVUVTVCksIEZSRkwoIlRETFNDaGFubmVsU3dpdGNoaW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU0NoYW5uZWxTd2l0Y2hpbmcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVFVRVNUKSwgRlJGTCgiaW50ZXJ3b3JraW5nU2VydmljZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmludGVyd29ya2luZ1NlcnZpY2UpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVFVRVNUKSwgRlJGTCgicW9zTWFwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucW9zTWFwKTsKQEAgLTM5Mjg1LDcgKzQxMDQ3LDcgQEAKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVRVUVTVCksIEZSRkwoIndubU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUkVBU1NPQ1JFUVVFU1QpLCBGUkZMKCJyZXNlcnZlZDUgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDUpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVFVRVNUKSwgRlJGTCgiVVRGOFNTSUQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVEY4U1NJRCk7Ci0gICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUkVBU1NPQ1JFUVVFU1QpLCBGUkZMKCJyZXNlcnZlZDYgKDEzKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVRVUVTVCksIEZSRkwoInJlc2VydmVkNiAoMTIpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDYpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVFVRVNUKSwgRlJGTCgiVERMU1dpZGVyQlcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTV2lkZXJCVyk7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUkVBU1NPQ1JFUVVFU1QpLCBGUkZMKCJvcGVyTW9kZU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm9wZXJNb2RlTm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVRVUVTVCksIEZSRkwoInJlc2VydmVkNyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNyk7CkBAIC00MDM5Nyw2ICs0MjE1OSw3IEBACiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUkVBU1NPQ1JFU1BPTlNFKSwgRlJGTCgiRE1TICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRE1TKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJVVENUU0ZPZmZzZXQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVENUU0ZPZmZzZXQpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVNQT05TRSksIEZSRkwoIlRETFNQZWVyVUFQU0RCdWZmZXJTVEEgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclVBUFNEQnVmZmVyU1RBKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJURExTUGVlclBTTVN1cHAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTUGVlclBTTVN1cHApOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVNQT05TRSksIEZSRkwoIlRETFNDaGFubmVsU3dpdGNoaW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU0NoYW5uZWxTd2l0Y2hpbmcpOwogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVNQT05TRSksIEZSRkwoImludGVyd29ya2luZ1NlcnZpY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5pbnRlcndvcmtpbmdTZXJ2aWNlKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJxb3NNYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5xb3NNYXApOwpAQCAtNDA0MTQsNyArNDIxNzcsNyBAQAogICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1JFQVNTT0NSRVNQT05TRSksIEZSRkwoIndubU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubU5vdGlmaWNhdGlvbik7CiAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfUkVBU1NPQ1JFU1BPTlNFKSwgRlJGTCgicmVzZXJ2ZWQ1ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ1KTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJVVEY4U1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVURjhTU0lEKTsKLSAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJyZXNlcnZlZDYgKDEzKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJyZXNlcnZlZDYgKDEyKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJURExTV2lkZXJCVyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNXaWRlckJXKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJvcGVyTW9kZU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm9wZXJNb2RlTm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9SRUFTU09DUkVTUE9OU0UpLCBGUkZMKCJyZXNlcnZlZDcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDcpOwpAQCAtNDA0NTUsNiArNDIyMTgsMTM3MiBAQAogCiB9IC8qIEVuZCBkb3QxMWZVbnBhY2tTTVBvd2VyU2F2ZS4gKi8KIAordEFOSV9VMzIgZG90MTFmUGFja1RETFNEaXNSZXEodHBBbmlTaXJHbG9iYWwgcEN0eCwgdERvdDExZlRETFNEaXNSZXEgKnBGcm0sIHRBTklfVTggKnBCdWYsIHRBTklfVTMyIG5CdWYsIHRBTklfVTMyICpwbkNvbnN1bWVkKQoreworICAgIHRBTklfVTMyIGkgPSAwOworICAgIHRBTklfVTMyIHN0YXR1cyA9IDA7CisgICAgKHZvaWQpaTsKKyAgICAqcG5Db25zdW1lZCA9IDBVOworICAgIHN0YXR1cyA9IFBhY2tDb3JlKHBDdHgsICh0QU5JX1U4KilwRnJtLCBwQnVmLCBuQnVmLCBwbkNvbnN1bWVkLCBGRlNfVERMU0Rpc1JlcSwgSUVTX1RETFNEaXNSZXEpOworCisjICAgaWZkZWYgRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgaWYgKCFET1QxMUZfRkFJTEVEKHN0YXR1cykpCisgICAgeworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JFUSksIEZSRkwoIlBhY2tlZCB0aGUgVERMU0Rpc1JlcTpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSRVEpLCBGUkZMKCJDYXRlZ29yeTpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+Q2F0ZWdvcnkuY2F0ZWdvcnksIDEpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JFUSksIEZSRkwoIkFjdGlvbjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+QWN0aW9uLmFjdGlvbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUkVRKSwgRlJGTCgiRGlhbG9nVG9rZW46XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUkVRKSwgKCB0QU5JX1U4KiApJnBGcm0tPkRpYWxvZ1Rva2VuLnRva2VuLCAxKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSRVEpLCBGUkZMKCJMaW5rSWRlbnRpZmllcjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5MaW5rSWRlbnRpZmllci5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JFUSksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuYnNzaWQsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuSW5pdFN0YUFkZHIsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuUmVzcFN0YUFkZHIsIDYpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUkVRKSwgRlJGTCgidG86XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUkVRKSwgcEJ1ZiwgbkJ1Zik7CisgICAgfQorIyAgIGVuZGlmIC8vIERPVDExRl9EVU1QX0ZSQU1FUworICAgIHJldHVybiBzdGF0dXM7CisKK30gLyogRW5kIGRvdDExZlVucGFja1RETFNEaXNSZXEuICovCisKK3RBTklfVTMyIGRvdDExZlBhY2tURExTRGlzUnNwKHRwQW5pU2lyR2xvYmFsIHBDdHgsIHREb3QxMWZURExTRGlzUnNwICpwRnJtLCB0QU5JX1U4ICpwQnVmLCB0QU5JX1UzMiBuQnVmLCB0QU5JX1UzMiAqcG5Db25zdW1lZCkKK3sKKyAgICB0QU5JX1UzMiBpID0gMDsKKyAgICB0QU5JX1UzMiBzdGF0dXMgPSAwOworICAgICh2b2lkKWk7CisgICAgKnBuQ29uc3VtZWQgPSAwVTsKKyAgICBzdGF0dXMgPSBQYWNrQ29yZShwQ3R4LCAodEFOSV9VOCopcEZybSwgcEJ1ZiwgbkJ1ZiwgcG5Db25zdW1lZCwgRkZTX1RETFNEaXNSc3AsIElFU19URExTRGlzUnNwKTsKKworIyAgIGlmZGVmIERPVDExRl9EVU1QX0ZSQU1FUworICAgIGlmICghRE9UMTFGX0ZBSUxFRChzdGF0dXMpKQorICAgIHsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJQYWNrZWQgdGhlIFRETFNEaXNSc3A6XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiQ2F0ZWdvcnk6XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkNhdGVnb3J5LmNhdGVnb3J5LCAxKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJBY3Rpb246XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkFjdGlvbi5hY3Rpb24sIDEpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIkRpYWxvZ1Rva2VuOlxuIikpOworICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5EaWFsb2dUb2tlbi50b2tlbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiQ2FwYWJpbGl0aWVzOlxuIikpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImVzcyAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmVzcyk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiaWJzcyAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmlic3MpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImNmUG9sbGFibGUgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5jZlBvbGxhYmxlKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJjZlBvbGxSZXEgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5jZlBvbGxSZXEpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInByaXZhY3kgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5wcml2YWN5KTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJzaG9ydFByZWFtYmxlICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuc2hvcnRQcmVhbWJsZSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicGJjYyAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLnBiY2MpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImNoYW5uZWxBZ2lsaXR5ICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuY2hhbm5lbEFnaWxpdHkpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInNwZWN0cnVtTWd0ICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuc3BlY3RydW1NZ3QpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInFvcyAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLnFvcyk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgic2hvcnRTbG90VGltZSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLnNob3J0U2xvdFRpbWUpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImFwc2QgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5hcHNkKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJycm0gKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5ycm0pOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImRzc3NPZmRtICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuZHNzc09mZG0pOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImRlbGF5ZWRCQSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmRlbGF5ZWRCQSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiaW1tZWRpYXRlQkEgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5pbW1lZGlhdGVCQSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiU3VwcFJhdGVzOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlN1cHBSYXRlcy5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJudW1fcmF0ZXM6ICVkLlxuIiksIHBGcm0tPlN1cHBSYXRlcy5udW1fcmF0ZXMpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkgcEZybS0+U3VwcFJhdGVzLnJhdGVzLCBwRnJtLT5TdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIkV4dFN1cHBSYXRlczpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5FeHRTdXBwUmF0ZXMucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgibnVtX3JhdGVzOiAlZC5cbiIpLCBwRnJtLT5FeHRTdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApIHBGcm0tPkV4dFN1cHBSYXRlcy5yYXRlcywgcEZybS0+RXh0U3VwcFJhdGVzLm51bV9yYXRlcyk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJTdXBwQ2hhbm5lbHM6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+U3VwcENoYW5uZWxzLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIm51bV9iYW5kczogJWQuXG4iKSwgcEZybS0+U3VwcENoYW5uZWxzLm51bV9iYW5kcyk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSBwRnJtLT5TdXBwQ2hhbm5lbHMuYmFuZHMsIDIgKiBwRnJtLT5TdXBwQ2hhbm5lbHMubnVtX2JhbmRzKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlJTTjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5SU04ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJTTi52ZXJzaW9uLCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJTTi5ncF9jaXBoZXJfc3VpdGUsIDQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLnB3aXNlX2NpcGhlcl9zdWl0ZV9jb3VudCwgMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSBwRnJtLT5SU04ucHdpc2VfY2lwaGVyX3N1aXRlcywgNCAqIHBGcm0tPlJTTi5wd2lzZV9jaXBoZXJfc3VpdGVfY291bnQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLmFrbV9zdWl0ZV9jb3VudCwgMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSBwRnJtLT5SU04uYWttX3N1aXRlcywgNCAqIHBGcm0tPlJTTi5ha21fc3VpdGVfY291bnQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJwcmVhdXRoICgxKTogJWRcbiIpLCBwRnJtLT5SU04ucHJlYXV0aCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIm5vX3B3aXNlICgxKTogJWRcbiIpLCBwRnJtLT5SU04ubm9fcHdpc2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJQVEtTQV9yZXBsYXlfY291bnRlciAoMik6ICVkXG4iKSwgcEZybS0+UlNOLlBUS1NBX3JlcGxheV9jb3VudGVyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiR1RLU0FfcmVwbGF5X2NvdW50ZXIgKDIpOiAlZFxuIiksIHBGcm0tPlJTTi5HVEtTQV9yZXBsYXlfY291bnRlcik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJlc2VydmVkICgxMCk6ICVkXG4iKSwgcEZybS0+UlNOLnJlc2VydmVkKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJTTi5wbWtpZF9jb3VudCwgMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSBwRnJtLT5SU04ucG1raWQsIDE2ICogcEZybS0+UlNOLnBta2lkX2NvdW50KTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIkV4dENhcDpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5FeHRDYXAucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiYnNzQ29leGlzdE1nbXRTdXBwb3J0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuYnNzQ29leGlzdE1nbXRTdXBwb3J0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicmVzZXJ2ZWQxICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQxKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiZXh0Q2hhblN3aXRjaCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmV4dENoYW5Td2l0Y2gpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyZXNlcnZlZDIgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJwc21wQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucHNtcENhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJlc2VydmVkMyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkMyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInNwc21wQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuc3BzbXBDYXApOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJldmVudCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmV2ZW50KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiZGlhZ25vc3RpY3MgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5kaWFnbm9zdGljcyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIm11bHRpRGlhZ25vc3RpY3MgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5tdWx0aURpYWdub3N0aWNzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgibG9jVHJhY2tpbmcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5sb2NUcmFja2luZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIkZNUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLkZNUyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInByb3h5QVJQU2VydmljZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnByb3h5QVJQU2VydmljZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImNvTG9jSW50ZlJlcG9ydGluZyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmNvTG9jSW50ZlJlcG9ydGluZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImNpdmljTG9jICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuY2l2aWNMb2MpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJnZW9zcGF0aWFsTG9jICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuZ2Vvc3BhdGlhbExvYyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlRGUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRGUyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIndubVNsZWVwTW9kZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubVNsZWVwTW9kZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInRpbUJyb2FkY2FzdCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnRpbUJyb2FkY2FzdCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImJzc1RyYW5zaXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5ic3NUcmFuc2l0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicW9zVHJhZmZpY0NhcCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnFvc1RyYWZmaWNDYXApOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJhY1N0YUNudCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmFjU3RhQ250KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgibXVsdGlCU1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm11bHRpQlNTSUQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJ0aW1pbmdNZWFzICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAudGltaW5nTWVhcyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImNoYW5Vc2FnZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmNoYW5Vc2FnZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInNzaWRMaXN0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuc3NpZExpc3QpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJETVMgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5ETVMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJVVENUU0ZPZmZzZXQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5VVENUU0ZPZmZzZXQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJURExTUGVlclVBUFNEQnVmZmVyU1RBICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJVQVBTREJ1ZmZlclNUQSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlRETFNQZWVyUFNNU3VwcCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNQZWVyUFNNU3VwcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlRETFNDaGFubmVsU3dpdGNoaW5nICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU0NoYW5uZWxTd2l0Y2hpbmcpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJpbnRlcndvcmtpbmdTZXJ2aWNlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuaW50ZXJ3b3JraW5nU2VydmljZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInFvc01hcCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnFvc01hcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIkVCUiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLkVCUik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInNzcG5JbnRlcmZhY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5zc3BuSW50ZXJmYWNlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicmVzZXJ2ZWQ0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgibXNnQ0ZDYXAgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5tc2dDRkNhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlRETFNTdXBwb3J0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1N1cHBvcnQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJURExTUHJvaGliaXRlZCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNQcm9oaWJpdGVkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiVERMU0NoYW5Td2l0UHJvaGliaXRlZCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNDaGFuU3dpdFByb2hpYml0ZWQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyZWplY3RVbmFkbWl0dGVkVHJhZmZpYyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlamVjdFVuYWRtaXR0ZWRUcmFmZmljKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgic2VydmljZUludGVydmFsR3JhbnVsYXJpdHkgKDMpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5zZXJ2aWNlSW50ZXJ2YWxHcmFudWxhcml0eSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImlkZW50aWZpZXJMb2MgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5pZGVudGlmaWVyTG9jKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgidWFwc2RDb2V4aXN0ZW5jZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnVhcHNkQ29leGlzdGVuY2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJ3bm1Ob3RpZmljYXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC53bm1Ob3RpZmljYXRpb24pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyZXNlcnZlZDUgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDUpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJVVEY4U1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVURjhTU0lEKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicmVzZXJ2ZWQ2ICgxMik6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlc2VydmVkNik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIlRETFNXaWRlckJXICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1dpZGVyQlcpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJvcGVyTW9kZU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm9wZXJNb2RlTm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicmVzZXJ2ZWQ3ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ3KTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIkZUSW5mbzpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicmVzZXJ2ZWQgKDgpOiAlZFxuIiksIHBGcm0tPkZUSW5mby5yZXNlcnZlZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIklFQ291bnQgKDgpOiAlZFxuIiksIHBGcm0tPkZUSW5mby5JRUNvdW50KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5NSUMsIDE2KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5Bbm9uY2UsIDMyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5Tbm9uY2UsIDMyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiUjFLSF9JRDpcbiIpKTsKKyAgICAgICAgICAgIGlmICghcEZybS0+RlRJbmZvLlIxS0hfSUQucHJlc2VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5SMUtIX0lELlBNS19SMV9JRCwgNik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIkdUSzpcbiIpKTsKKyAgICAgICAgICAgIGlmICghcEZybS0+RlRJbmZvLkdUSy5wcmVzZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJrZXlJZCAoMik6ICVkXG4iKSwgcEZybS0+RlRJbmZvLkdUSy5rZXlJZCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyZXNlcnZlZCAoMTQpOiAlZFxuIiksIHBGcm0tPkZUSW5mby5HVEsucmVzZXJ2ZWQpOworICAgICAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5HVEsua2V5TGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uR1RLLlJTQywgOCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJudW1fa2V5OiAlZC5cbiIpLCBwRnJtLT5GVEluZm8uR1RLLm51bV9rZXkpOworICAgICAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApIHBGcm0tPkZUSW5mby5HVEsua2V5LCBwRnJtLT5GVEluZm8uR1RLLm51bV9rZXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJSMEtIX0lEOlxuIikpOworICAgICAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8uUjBLSF9JRC5wcmVzZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJudW1fUE1LX1IwX0lEOiAlZC5cbiIpLCBwRnJtLT5GVEluZm8uUjBLSF9JRC5udW1fUE1LX1IwX0lEKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSBwRnJtLT5GVEluZm8uUjBLSF9JRC5QTUtfUjBfSUQsIHBGcm0tPkZUSW5mby5SMEtIX0lELm51bV9QTUtfUjBfSUQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiRlRUaW1lb3V0SW50ZXJ2YWw6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+RlRUaW1lb3V0SW50ZXJ2YWwucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUVGltZW91dEludGVydmFsLnRpbWVvdXRUeXBlLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUVGltZW91dEludGVydmFsLnRpbWVvdXRWYWx1ZSwgNCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJSSUNEYXRhOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlJJQ0RhdGEucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJJQ0RhdGEuSWRlbnRpZmllciwgMSk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5SSUNEYXRhLnJlc291cmNlRGVzY0NvdW50LCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJJQ0RhdGEuc3RhdHVzQ29kZSwgMik7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJIVENhcHM6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+SFRDYXBzLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImFkdkNvZGluZ0NhcCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmFkdkNvZGluZ0NhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInN1cHBvcnRlZENoYW5uZWxXaWR0aFNldCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnN1cHBvcnRlZENoYW5uZWxXaWR0aFNldCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIm1pbW9Qb3dlclNhdmUgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5taW1vUG93ZXJTYXZlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiZ3JlZW5GaWVsZCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmdyZWVuRmllbGQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJzaG9ydEdJMjBNSHogKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5zaG9ydEdJMjBNSHopOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJzaG9ydEdJNDBNSHogKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5zaG9ydEdJNDBNSHopOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJ0eFNUQkMgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50eFNUQkMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyeFNUQkMgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yeFNUQkMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJkZWxheWVkQkEgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5kZWxheWVkQkEpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJtYXhpbWFsQU1TRFVzaXplICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubWF4aW1hbEFNU0RVc2l6ZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImRzc3NDY2tNb2RlNDBNSHogKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5kc3NzQ2NrTW9kZTQwTUh6KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicHNtcCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnBzbXApOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJzdGJjQ29udHJvbEZyYW1lICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuc3RiY0NvbnRyb2xGcmFtZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImxzaWdUWE9QUHJvdGVjdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmxzaWdUWE9QUHJvdGVjdGlvbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIm1heFJ4QU1QRFVGYWN0b3IgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5tYXhSeEFNUERVRmFjdG9yKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgibXBkdURlbnNpdHkgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5tcGR1RGVuc2l0eSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJlc2VydmVkMSAoMyk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnJlc2VydmVkMSk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5IVENhcHMuc3VwcG9ydGVkTUNTU2V0LCAxNik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInBjbyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnBjbyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInRyYW5zaXRpb25UaW1lICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMudHJhbnNpdGlvblRpbWUpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyZXNlcnZlZDIgKDUpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yZXNlcnZlZDIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJtY3NGZWVkYmFjayAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLm1jc0ZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicmVzZXJ2ZWQzICg2KTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgidHhCRiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnR4QkYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyeFN0YWdnZXJlZFNvdW5kaW5nICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucnhTdGFnZ2VyZWRTb3VuZGluZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInR4U3RhZ2dlcmVkU291bmRpbmcgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50eFN0YWdnZXJlZFNvdW5kaW5nKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgicnhaTEYgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yeFpMRik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInR4WkxGICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMudHhaTEYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJpbXBsaWNpdFR4QkYgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5pbXBsaWNpdFR4QkYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJjYWxpYnJhdGlvbiAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmNhbGlicmF0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiZXhwbGljaXRDU0lUeEJGICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRDU0lUeEJGKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiZXhwbGljaXRVbmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmV4cGxpY2l0VW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXgpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJleHBsaWNpdEJGQ1NJRmVlZGJhY2sgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdEJGQ1NJRmVlZGJhY2spOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJleHBsaWNpdFVuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4RmVlZGJhY2sgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdFVuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4RmVlZGJhY2spOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJleHBsaWNpdENvbXByZXNzZWRTdGVlcmluZ01hdHJpeEZlZWRiYWNrICgzKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRDb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhGZWVkYmFjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImNzaU51bUJGQW50ZW5uYWUgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5jc2lOdW1CRkFudGVubmFlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgidW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMudW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4QkZBbnRlbm5hZSAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeEJGQW50ZW5uYWUpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyZXNlcnZlZDQgKDcpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yZXNlcnZlZDQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJhbnRlbm5hU2VsZWN0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuYW50ZW5uYVNlbGVjdGlvbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImV4cGxpY2l0Q1NJRmVlZGJhY2tUeCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmV4cGxpY2l0Q1NJRmVlZGJhY2tUeCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImFudGVubmFJbmRpY2VzRmVlZGJhY2tUeCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmFudGVubmFJbmRpY2VzRmVlZGJhY2tUeCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoImV4cGxpY2l0Q1NJRmVlZGJhY2sgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdENTSUZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgiYW50ZW5uYUluZGljZXNGZWVkYmFjayAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmFudGVubmFJbmRpY2VzRmVlZGJhY2spOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJyeEFTICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucnhBUyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInR4U291bmRpbmdQUERVcyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnR4U291bmRpbmdQUERVcyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoInJlc2VydmVkNSAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnJlc2VydmVkNSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIm51bV9yc3ZkOiAlZC5cbiIpLCBwRnJtLT5IVENhcHMubnVtX3JzdmQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkgcEZybS0+SFRDYXBzLnJzdmQsIHBGcm0tPkhUQ2Fwcy5udW1fcnN2ZCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCBGUkZMKCJMaW5rSWRlbnRpZmllcjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5MaW5rSWRlbnRpZmllci5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU0RJU1JTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuYnNzaWQsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuSW5pdFN0YUFkZHIsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNESVNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuUmVzcFN0YUFkZHIsIDYpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgRlJGTCgidG86XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTRElTUlNQKSwgcEJ1ZiwgbkJ1Zik7CisgICAgfQorIyAgIGVuZGlmIC8vIERPVDExRl9EVU1QX0ZSQU1FUworICAgIHJldHVybiBzdGF0dXM7CisKK30gLyogRW5kIGRvdDExZlVucGFja1RETFNEaXNSc3AuICovCisKK3RBTklfVTMyIGRvdDExZlBhY2tURExTUGVlclRyYWZmaWNJbmQodHBBbmlTaXJHbG9iYWwgcEN0eCwgdERvdDExZlRETFNQZWVyVHJhZmZpY0luZCAqcEZybSwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdEFOSV9VMzIgKnBuQ29uc3VtZWQpCit7CisgICAgdEFOSV9VMzIgaSA9IDA7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICAodm9pZClpOworICAgICpwbkNvbnN1bWVkID0gMFU7CisgICAgc3RhdHVzID0gUGFja0NvcmUocEN0eCwgKHRBTklfVTgqKXBGcm0sIHBCdWYsIG5CdWYsIHBuQ29uc3VtZWQsIEZGU19URExTUGVlclRyYWZmaWNJbmQsIElFU19URExTUGVlclRyYWZmaWNJbmQpOworCisjICAgaWZkZWYgRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgaWYgKCFET1QxMUZfRkFJTEVEKHN0YXR1cykpCisgICAgeworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgRlJGTCgiUGFja2VkIHRoZSBURExTUGVlclRyYWZmaWNJbmQ6XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCBGUkZMKCJDYXRlZ29yeTpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksICggdEFOSV9VOCogKSZwRnJtLT5DYXRlZ29yeS5jYXRlZ29yeSwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCBGUkZMKCJBY3Rpb246XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCAoIHRBTklfVTgqICkmcEZybS0+QWN0aW9uLmFjdGlvbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCBGUkZMKCJEaWFsb2dUb2tlbjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksICggdEFOSV9VOCogKSZwRnJtLT5EaWFsb2dUb2tlbi50b2tlbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCBGUkZMKCJMaW5rSWRlbnRpZmllcjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5MaW5rSWRlbnRpZmllci5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgKCB0QU5JX1U4KiApJnBGcm0tPkxpbmtJZGVudGlmaWVyLmJzc2lkLCA2KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuSW5pdFN0YUFkZHIsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5SZXNwU3RhQWRkciwgNik7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksIEZSRkwoIlBUSUNvbnRyb2w6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+UFRJQ29udHJvbC5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgKCB0QU5JX1U4KiApJnBGcm0tPlBUSUNvbnRyb2wudGlkLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCAoIHRBTklfVTgqICkmcEZybS0+UFRJQ29udHJvbC5zZXF1ZW5jZV9jb250cm9sLCAyKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgRlJGTCgiUFVCdWZmZXJTdGF0dXM6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+UFVCdWZmZXJTdGF0dXMucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksIEZSRkwoImFjX2JrX3RyYWZmaWNfYXZhbCAoMSk6ICVkXG4iKSwgcEZybS0+UFVCdWZmZXJTdGF0dXMuYWNfYmtfdHJhZmZpY19hdmFsKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCBGUkZMKCJhY19iZV90cmFmZmljX2F2YWwgKDEpOiAlZFxuIiksIHBGcm0tPlBVQnVmZmVyU3RhdHVzLmFjX2JlX3RyYWZmaWNfYXZhbCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDSU5EKSwgRlJGTCgiYWNfdmlfdHJhZmZpY19hdmFsICgxKTogJWRcbiIpLCBwRnJtLT5QVUJ1ZmZlclN0YXR1cy5hY192aV90cmFmZmljX2F2YWwpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksIEZSRkwoImFjX3ZvX3RyYWZmaWNfYXZhbCAoMSk6ICVkXG4iKSwgcEZybS0+UFVCdWZmZXJTdGF0dXMuYWNfdm9fdHJhZmZpY19hdmFsKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCBGUkZMKCJyZXNlcnZlZCAoNCk6ICVkXG4iKSwgcEZybS0+UFVCdWZmZXJTdGF0dXMucmVzZXJ2ZWQpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNJTkQpLCBGUkZMKCJ0bzpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ0lORCksIHBCdWYsIG5CdWYpOworICAgIH0KKyMgICBlbmRpZiAvLyBET1QxMUZfRFVNUF9GUkFNRVMKKyAgICByZXR1cm4gc3RhdHVzOworCit9IC8qIEVuZCBkb3QxMWZVbnBhY2tURExTUGVlclRyYWZmaWNJbmQuICovCisKK3RBTklfVTMyIGRvdDExZlBhY2tURExTUGVlclRyYWZmaWNSc3AodHBBbmlTaXJHbG9iYWwgcEN0eCwgdERvdDExZlRETFNQZWVyVHJhZmZpY1JzcCAqcEZybSwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdEFOSV9VMzIgKnBuQ29uc3VtZWQpCit7CisgICAgdEFOSV9VMzIgaSA9IDA7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICAodm9pZClpOworICAgICpwbkNvbnN1bWVkID0gMFU7CisgICAgc3RhdHVzID0gUGFja0NvcmUocEN0eCwgKHRBTklfVTgqKXBGcm0sIHBCdWYsIG5CdWYsIHBuQ29uc3VtZWQsIEZGU19URExTUGVlclRyYWZmaWNSc3AsIElFU19URExTUGVlclRyYWZmaWNSc3ApOworCisjICAgaWZkZWYgRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgaWYgKCFET1QxMUZfRkFJTEVEKHN0YXR1cykpCisgICAgeworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDUlNQKSwgRlJGTCgiUGFja2VkIHRoZSBURExTUGVlclRyYWZmaWNSc3A6XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNSU1ApLCBGUkZMKCJDYXRlZ29yeTpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5DYXRlZ29yeS5jYXRlZ29yeSwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNSU1ApLCBGUkZMKCJBY3Rpb246XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+QWN0aW9uLmFjdGlvbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNSU1ApLCBGUkZMKCJEaWFsb2dUb2tlbjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5EaWFsb2dUb2tlbi50b2tlbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNSU1ApLCBGUkZMKCJMaW5rSWRlbnRpZmllcjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5MaW5rSWRlbnRpZmllci5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkxpbmtJZGVudGlmaWVyLmJzc2lkLCA2KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTUEVFUlRSQUZGSUNSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuSW5pdFN0YUFkZHIsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ1JTUCksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5SZXNwU3RhQWRkciwgNik7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNQRUVSVFJBRkZJQ1JTUCksIEZSRkwoInRvOlxuIikpOworICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1BFRVJUUkFGRklDUlNQKSwgcEJ1ZiwgbkJ1Zik7CisgICAgfQorIyAgIGVuZGlmIC8vIERPVDExRl9EVU1QX0ZSQU1FUworICAgIHJldHVybiBzdGF0dXM7CisKK30gLyogRW5kIGRvdDExZlVucGFja1RETFNQZWVyVHJhZmZpY1JzcC4gKi8KKwordEFOSV9VMzIgZG90MTFmUGFja1RETFNTZXR1cENuZih0cEFuaVNpckdsb2JhbCBwQ3R4LCB0RG90MTFmVERMU1NldHVwQ25mICpwRnJtLCB0QU5JX1U4ICpwQnVmLCB0QU5JX1UzMiBuQnVmLCB0QU5JX1UzMiAqcG5Db25zdW1lZCkKK3sKKyAgICB0QU5JX1UzMiBpID0gMDsKKyAgICB0QU5JX1UzMiBzdGF0dXMgPSAwOworICAgICh2b2lkKWk7CisgICAgKnBuQ29uc3VtZWQgPSAwVTsKKyAgICBzdGF0dXMgPSBQYWNrQ29yZShwQ3R4LCAodEFOSV9VOCopcEZybSwgcEJ1ZiwgbkJ1ZiwgcG5Db25zdW1lZCwgRkZTX1RETFNTZXR1cENuZiwgSUVTX1RETFNTZXR1cENuZik7CisKKyMgICBpZmRlZiBET1QxMUZfRFVNUF9GUkFNRVMKKyAgICBpZiAoIURPVDExRl9GQUlMRUQoc3RhdHVzKSkKKyAgICB7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJQYWNrZWQgdGhlIFRETFNTZXR1cENuZjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIkNhdGVnb3J5OlxuIikpOworICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPkNhdGVnb3J5LmNhdGVnb3J5LCAxKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIkFjdGlvbjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5BY3Rpb24uYWN0aW9uLCAxKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIlN0YXR1czpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5TdGF0dXMuc3RhdHVzLCAyKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIkRpYWxvZ1Rva2VuOlxuIikpOworICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPkRpYWxvZ1Rva2VuLnRva2VuLCAxKTsKKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIlJTTjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5SU04ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5SU04udmVyc2lvbiwgMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJTTi5ncF9jaXBoZXJfc3VpdGUsIDQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5SU04ucHdpc2VfY2lwaGVyX3N1aXRlX2NvdW50LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkgcEZybS0+UlNOLnB3aXNlX2NpcGhlcl9zdWl0ZXMsIDQgKiBwRnJtLT5SU04ucHdpc2VfY2lwaGVyX3N1aXRlX2NvdW50KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLmFrbV9zdWl0ZV9jb3VudCwgMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApIHBGcm0tPlJTTi5ha21fc3VpdGVzLCA0ICogcEZybS0+UlNOLmFrbV9zdWl0ZV9jb3VudCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgicHJlYXV0aCAoMSk6ICVkXG4iKSwgcEZybS0+UlNOLnByZWF1dGgpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIm5vX3B3aXNlICgxKTogJWRcbiIpLCBwRnJtLT5SU04ubm9fcHdpc2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIlBUS1NBX3JlcGxheV9jb3VudGVyICgyKTogJWRcbiIpLCBwRnJtLT5SU04uUFRLU0FfcmVwbGF5X2NvdW50ZXIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIkdUS1NBX3JlcGxheV9jb3VudGVyICgyKTogJWRcbiIpLCBwRnJtLT5SU04uR1RLU0FfcmVwbGF5X2NvdW50ZXIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoInJlc2VydmVkICgxMCk6ICVkXG4iKSwgcEZybS0+UlNOLnJlc2VydmVkKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLnBta2lkX2NvdW50LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkgcEZybS0+UlNOLnBta2lkLCAxNiAqIHBGcm0tPlJTTi5wbWtpZF9jb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIkVEQ0FQYXJhbVNldDpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5FRENBUGFyYW1TZXQucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5FRENBUGFyYW1TZXQucW9zLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+RURDQVBhcmFtU2V0LnJlc2VydmVkLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY2JlX2FpZnNuICg0KTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWNiZV9haWZzbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWNiZV9hY20gKDEpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC5hY2JlX2FjbSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWNiZV9hY2kgKDIpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC5hY2JlX2FjaSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgidW51c2VkMSAoMSk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LnVudXNlZDEpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjYmVfYWN3bWluICg0KTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWNiZV9hY3dtaW4pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjYmVfYWN3bWF4ICg0KTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWNiZV9hY3dtYXgpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5FRENBUGFyYW1TZXQuYWNiZV90eG9wbGltaXQsIDIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjYmtfYWlmc24gKDQpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC5hY2JrX2FpZnNuKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY2JrX2FjbSAoMSk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LmFjYmtfYWNtKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY2JrX2FjaSAoMik6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LmFjYmtfYWNpKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJ1bnVzZWQyICgxKTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQudW51c2VkMik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWNia19hY3dtaW4gKDQpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC5hY2JrX2Fjd21pbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWNia19hY3dtYXggKDQpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC5hY2JrX2Fjd21heCk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPkVEQ0FQYXJhbVNldC5hY2JrX3R4b3BsaW1pdCwgMik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWN2aV9haWZzbiAoNCk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LmFjdmlfYWlmc24pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjdmlfYWNtICgxKTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWN2aV9hY20pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjdmlfYWNpICgyKTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWN2aV9hY2kpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoInVudXNlZDMgKDEpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC51bnVzZWQzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY3ZpX2Fjd21pbiAoNCk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LmFjdmlfYWN3bWluKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY3ZpX2Fjd21heCAoNCk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LmFjdmlfYWN3bWF4KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+RURDQVBhcmFtU2V0LmFjdmlfdHhvcGxpbWl0LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY3ZvX2FpZnNuICg0KTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWN2b19haWZzbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWN2b19hY20gKDEpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC5hY3ZvX2FjbSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiYWN2b19hY2kgKDIpOiAlZFxuIiksIHBGcm0tPkVEQ0FQYXJhbVNldC5hY3ZvX2FjaSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgidW51c2VkNCAoMSk6ICVkXG4iKSwgcEZybS0+RURDQVBhcmFtU2V0LnVudXNlZDQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjdm9fYWN3bWluICg0KTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWN2b19hY3dtaW4pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImFjdm9fYWN3bWF4ICg0KTogJWRcbiIpLCBwRnJtLT5FRENBUGFyYW1TZXQuYWN2b19hY3dtYXgpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5FRENBUGFyYW1TZXQuYWN2b190eG9wbGltaXQsIDIpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJGVEluZm86XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+RlRJbmZvLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJyZXNlcnZlZCAoOCk6ICVkXG4iKSwgcEZybS0+RlRJbmZvLnJlc2VydmVkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJJRUNvdW50ICg4KTogJWRcbiIpLCBwRnJtLT5GVEluZm8uSUVDb3VudCk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5NSUMsIDE2KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLkFub25jZSwgMzIpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uU25vbmNlLCAzMik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiUjFLSF9JRDpcbiIpKTsKKyAgICAgICAgICAgIGlmICghcEZybS0+RlRJbmZvLlIxS0hfSUQucHJlc2VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uUjFLSF9JRC5QTUtfUjFfSUQsIDYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIkdUSzpcbiIpKTsKKyAgICAgICAgICAgIGlmICghcEZybS0+RlRJbmZvLkdUSy5wcmVzZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgia2V5SWQgKDIpOiAlZFxuIiksIHBGcm0tPkZUSW5mby5HVEsua2V5SWQpOworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJyZXNlcnZlZCAoMTQpOiAlZFxuIiksIHBGcm0tPkZUSW5mby5HVEsucmVzZXJ2ZWQpOworICAgICAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLkdUSy5rZXlMZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLkdUSy5SU0MsIDgpOworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJudW1fa2V5OiAlZC5cbiIpLCBwRnJtLT5GVEluZm8uR1RLLm51bV9rZXkpOworICAgICAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkgcEZybS0+RlRJbmZvLkdUSy5rZXksIHBGcm0tPkZUSW5mby5HVEsubnVtX2tleSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiUjBLSF9JRDpcbiIpKTsKKyAgICAgICAgICAgIGlmICghcEZybS0+RlRJbmZvLlIwS0hfSUQucHJlc2VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIm51bV9QTUtfUjBfSUQ6ICVkLlxuIiksIHBGcm0tPkZUSW5mby5SMEtIX0lELm51bV9QTUtfUjBfSUQpOworICAgICAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkgcEZybS0+RlRJbmZvLlIwS0hfSUQuUE1LX1IwX0lELCBwRnJtLT5GVEluZm8uUjBLSF9JRC5udW1fUE1LX1IwX0lEKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiRlRUaW1lb3V0SW50ZXJ2YWw6XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+RlRUaW1lb3V0SW50ZXJ2YWwucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5GVFRpbWVvdXRJbnRlcnZhbC50aW1lb3V0VHlwZSwgMSk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUVGltZW91dEludGVydmFsLnRpbWVvdXRWYWx1ZSwgNCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIkhUSW5mbzpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5IVEluZm8ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5IVEluZm8ucHJpbWFyeUNoYW5uZWwsIDEpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoInNlY29uZGFyeUNoYW5uZWxPZmZzZXQgKDIpOiAlZFxuIiksIHBGcm0tPkhUSW5mby5zZWNvbmRhcnlDaGFubmVsT2Zmc2V0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJyZWNvbW1lbmRlZFR4V2lkdGhTZXQgKDEpOiAlZFxuIiksIHBGcm0tPkhUSW5mby5yZWNvbW1lbmRlZFR4V2lkdGhTZXQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoInJpZnNNb2RlICgxKTogJWRcbiIpLCBwRnJtLT5IVEluZm8ucmlmc01vZGUpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImNvbnRyb2xsZWRBY2Nlc3NPbmx5ICgxKTogJWRcbiIpLCBwRnJtLT5IVEluZm8uY29udHJvbGxlZEFjY2Vzc09ubHkpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoInNlcnZpY2VJbnRlcnZhbEdyYW51bGFyaXR5ICgzKTogJWRcbiIpLCBwRnJtLT5IVEluZm8uc2VydmljZUludGVydmFsR3JhbnVsYXJpdHkpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIm9wTW9kZSAoMik6ICVkXG4iKSwgcEZybS0+SFRJbmZvLm9wTW9kZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgibm9uR0ZEZXZpY2VzUHJlc2VudCAoMSk6ICVkXG4iKSwgcEZybS0+SFRJbmZvLm5vbkdGRGV2aWNlc1ByZXNlbnQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoInRyYW5zbWl0QnVyc3RMaW1pdCAoMSk6ICVkXG4iKSwgcEZybS0+SFRJbmZvLnRyYW5zbWl0QnVyc3RMaW1pdCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgib2Jzc05vbkhUU3RhUHJlc2VudCAoMSk6ICVkXG4iKSwgcEZybS0+SFRJbmZvLm9ic3NOb25IVFN0YVByZXNlbnQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoInJlc2VydmVkICgxMSk6ICVkXG4iKSwgcEZybS0+SFRJbmZvLnJlc2VydmVkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJiYXNpY1NUQkNNQ1MgKDcpOiAlZFxuIiksIHBGcm0tPkhUSW5mby5iYXNpY1NUQkNNQ1MpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoImR1YWxDVFNQcm90ZWN0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5IVEluZm8uZHVhbENUU1Byb3RlY3Rpb24pOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoInNlY29uZGFyeUJlYWNvbiAoMSk6ICVkXG4iKSwgcEZybS0+SFRJbmZvLnNlY29uZGFyeUJlYWNvbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgibHNpZ1RYT1BQcm90ZWN0aW9uRnVsbFN1cHBvcnQgKDEpOiAlZFxuIiksIHBGcm0tPkhUSW5mby5sc2lnVFhPUFByb3RlY3Rpb25GdWxsU3VwcG9ydCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgicGNvQWN0aXZlICgxKTogJWRcbiIpLCBwRnJtLT5IVEluZm8ucGNvQWN0aXZlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJwY29QaGFzZSAoMSk6ICVkXG4iKSwgcEZybS0+SFRJbmZvLnBjb1BoYXNlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJyZXNlcnZlZDIgKDQpOiAlZFxuIiksIHBGcm0tPkhUSW5mby5yZXNlcnZlZDIpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5IVEluZm8uYmFzaWNNQ1NTZXQsIDE2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJudW1fcnN2ZDogJWQuXG4iKSwgcEZybS0+SFRJbmZvLm51bV9yc3ZkKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkgcEZybS0+SFRJbmZvLnJzdmQsIHBGcm0tPkhUSW5mby5udW1fcnN2ZCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIkxpbmtJZGVudGlmaWVyOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkxpbmtJZGVudGlmaWVyLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuYnNzaWQsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5Jbml0U3RhQWRkciwgNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgKCB0QU5JX1U4KiApJnBGcm0tPkxpbmtJZGVudGlmaWVyLlJlc3BTdGFBZGRyLCA2KTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgiV01NSW5mb1N0YXRpb246XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+V01NSW5mb1N0YXRpb24ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksICggdEFOSV9VOCogKSZwRnJtLT5XTU1JbmZvU3RhdGlvbi52ZXJzaW9uLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY3ZvX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY3ZvX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY3ZpX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY3ZpX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY2JrX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY2JrX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJhY2JlX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY2JlX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJyZXNlcnZlZDEgKDEpOiAlZFxuIiksIHBGcm0tPldNTUluZm9TdGF0aW9uLnJlc2VydmVkMSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgibWF4X3NwX2xlbmd0aCAoMik6ICVkXG4iKSwgcEZybS0+V01NSW5mb1N0YXRpb24ubWF4X3NwX2xlbmd0aCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQQ05GKSwgRlJGTCgicmVzZXJ2ZWQyICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5yZXNlcnZlZDIpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBDTkYpLCBGUkZMKCJ0bzpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUENORiksIHBCdWYsIG5CdWYpOworICAgIH0KKyMgICBlbmRpZiAvLyBET1QxMUZfRFVNUF9GUkFNRVMKKyAgICByZXR1cm4gc3RhdHVzOworCit9IC8qIEVuZCBkb3QxMWZVbnBhY2tURExTU2V0dXBDbmYuICovCisKK3RBTklfVTMyIGRvdDExZlBhY2tURExTU2V0dXBSZXEodHBBbmlTaXJHbG9iYWwgcEN0eCwgdERvdDExZlRETFNTZXR1cFJlcSAqcEZybSwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdEFOSV9VMzIgKnBuQ29uc3VtZWQpCit7CisgICAgdEFOSV9VMzIgaSA9IDA7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICAodm9pZClpOworICAgICpwbkNvbnN1bWVkID0gMFU7CisgICAgc3RhdHVzID0gUGFja0NvcmUocEN0eCwgKHRBTklfVTgqKXBGcm0sIHBCdWYsIG5CdWYsIHBuQ29uc3VtZWQsIEZGU19URExTU2V0dXBSZXEsIElFU19URExTU2V0dXBSZXEpOworCisjICAgaWZkZWYgRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgaWYgKCFET1QxMUZfRkFJTEVEKHN0YXR1cykpCisgICAgeworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiUGFja2VkIHRoZSBURExTU2V0dXBSZXE6XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJDYXRlZ29yeTpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5DYXRlZ29yeS5jYXRlZ29yeSwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJBY3Rpb246XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+QWN0aW9uLmFjdGlvbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJEaWFsb2dUb2tlbjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5EaWFsb2dUb2tlbi50b2tlbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJDYXBhYmlsaXRpZXM6XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJlc3MgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5lc3MpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiaWJzcyAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmlic3MpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiY2ZQb2xsYWJsZSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmNmUG9sbGFibGUpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiY2ZQb2xsUmVxICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuY2ZQb2xsUmVxKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInByaXZhY3kgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5wcml2YWN5KTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInNob3J0UHJlYW1ibGUgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5zaG9ydFByZWFtYmxlKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInBiY2MgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5wYmNjKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImNoYW5uZWxBZ2lsaXR5ICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuY2hhbm5lbEFnaWxpdHkpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgic3BlY3RydW1NZ3QgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5zcGVjdHJ1bU1ndCk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJxb3MgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5xb3MpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgic2hvcnRTbG90VGltZSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLnNob3J0U2xvdFRpbWUpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiYXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmFwc2QpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicnJtICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMucnJtKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImRzc3NPZmRtICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuZHNzc09mZG0pOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZGVsYXllZEJBICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuZGVsYXllZEJBKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImltbWVkaWF0ZUJBICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuaW1tZWRpYXRlQkEpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiU3VwcFJhdGVzOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlN1cHBSYXRlcy5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibnVtX3JhdGVzOiAlZC5cbiIpLCBwRnJtLT5TdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+U3VwcFJhdGVzLnJhdGVzLCBwRnJtLT5TdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiQ291bnRyeTpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5Db3VudHJ5LnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+Q291bnRyeS5jb3VudHJ5LCAzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJudW1fdHJpcGxldHM6ICVkLlxuIiksIHBGcm0tPkNvdW50cnkubnVtX3RyaXBsZXRzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+Q291bnRyeS50cmlwbGV0cywgMyAqIHBGcm0tPkNvdW50cnkubnVtX3RyaXBsZXRzKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiRXh0U3VwcFJhdGVzOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkV4dFN1cHBSYXRlcy5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibnVtX3JhdGVzOiAlZC5cbiIpLCBwRnJtLT5FeHRTdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+RXh0U3VwcFJhdGVzLnJhdGVzLCBwRnJtLT5FeHRTdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiU3VwcENoYW5uZWxzOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlN1cHBDaGFubmVscy5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibnVtX2JhbmRzOiAlZC5cbiIpLCBwRnJtLT5TdXBwQ2hhbm5lbHMubnVtX2JhbmRzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+U3VwcENoYW5uZWxzLmJhbmRzLCAyICogcEZybS0+U3VwcENoYW5uZWxzLm51bV9iYW5kcyk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIlJTTjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5SU04ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5SU04udmVyc2lvbiwgMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJTTi5ncF9jaXBoZXJfc3VpdGUsIDQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5SU04ucHdpc2VfY2lwaGVyX3N1aXRlX2NvdW50LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+UlNOLnB3aXNlX2NpcGhlcl9zdWl0ZXMsIDQgKiBwRnJtLT5SU04ucHdpc2VfY2lwaGVyX3N1aXRlX2NvdW50KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLmFrbV9zdWl0ZV9jb3VudCwgMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApIHBGcm0tPlJTTi5ha21fc3VpdGVzLCA0ICogcEZybS0+UlNOLmFrbV9zdWl0ZV9jb3VudCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicHJlYXV0aCAoMSk6ICVkXG4iKSwgcEZybS0+UlNOLnByZWF1dGgpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIm5vX3B3aXNlICgxKTogJWRcbiIpLCBwRnJtLT5SU04ubm9fcHdpc2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIlBUS1NBX3JlcGxheV9jb3VudGVyICgyKTogJWRcbiIpLCBwRnJtLT5SU04uUFRLU0FfcmVwbGF5X2NvdW50ZXIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIkdUS1NBX3JlcGxheV9jb3VudGVyICgyKTogJWRcbiIpLCBwRnJtLT5SU04uR1RLU0FfcmVwbGF5X2NvdW50ZXIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInJlc2VydmVkICgxMCk6ICVkXG4iKSwgcEZybS0+UlNOLnJlc2VydmVkKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLnBta2lkX2NvdW50LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+UlNOLnBta2lkLCAxNiAqIHBGcm0tPlJTTi5wbWtpZF9jb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIkV4dENhcDpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5FeHRDYXAucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImJzc0NvZXhpc3RNZ210U3VwcG9ydCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmJzc0NvZXhpc3RNZ210U3VwcG9ydCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQxICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQxKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJleHRDaGFuU3dpdGNoICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuZXh0Q2hhblN3aXRjaCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQyICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJwc21wQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucHNtcENhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQzICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJzcHNtcENhcCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnNwc21wQ2FwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJldmVudCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmV2ZW50KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJkaWFnbm9zdGljcyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmRpYWdub3N0aWNzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJtdWx0aURpYWdub3N0aWNzICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAubXVsdGlEaWFnbm9zdGljcyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibG9jVHJhY2tpbmcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5sb2NUcmFja2luZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiRk1TICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRk1TKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJwcm94eUFSUFNlcnZpY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5wcm94eUFSUFNlcnZpY2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImNvTG9jSW50ZlJlcG9ydGluZyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmNvTG9jSW50ZlJlcG9ydGluZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiY2l2aWNMb2MgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5jaXZpY0xvYyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZ2Vvc3BhdGlhbExvYyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmdlb3NwYXRpYWxMb2MpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIlRGUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRGUyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgid25tU2xlZXBNb2RlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAud25tU2xlZXBNb2RlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJ0aW1Ccm9hZGNhc3QgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC50aW1Ccm9hZGNhc3QpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImJzc1RyYW5zaXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5ic3NUcmFuc2l0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJxb3NUcmFmZmljQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucW9zVHJhZmZpY0NhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiYWNTdGFDbnQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5hY1N0YUNudCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibXVsdGlCU1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm11bHRpQlNTSUQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInRpbWluZ01lYXMgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC50aW1pbmdNZWFzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJjaGFuVXNhZ2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5jaGFuVXNhZ2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInNzaWRMaXN0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuc3NpZExpc3QpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIkRNUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLkRNUyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiVVRDVFNGT2Zmc2V0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVVRDVFNGT2Zmc2V0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJURExTUGVlclVBUFNEQnVmZmVyU1RBICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJVQVBTREJ1ZmZlclNUQSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiVERMU1BlZXJQU01TdXBwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJQU01TdXBwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJURExTQ2hhbm5lbFN3aXRjaGluZyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNDaGFubmVsU3dpdGNoaW5nKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJpbnRlcndvcmtpbmdTZXJ2aWNlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuaW50ZXJ3b3JraW5nU2VydmljZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicW9zTWFwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucW9zTWFwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJFQlIgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5FQlIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInNzcG5JbnRlcmZhY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5zc3BuSW50ZXJmYWNlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyZXNlcnZlZDQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIm1zZ0NGQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAubXNnQ0ZDYXApOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIlRETFNTdXBwb3J0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1N1cHBvcnQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIlRETFNQcm9oaWJpdGVkICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1Byb2hpYml0ZWQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIlRETFNDaGFuU3dpdFByb2hpYml0ZWQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTQ2hhblN3aXRQcm9oaWJpdGVkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyZWplY3RVbmFkbWl0dGVkVHJhZmZpYyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlamVjdFVuYWRtaXR0ZWRUcmFmZmljKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJzZXJ2aWNlSW50ZXJ2YWxHcmFudWxhcml0eSAoMyk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnNlcnZpY2VJbnRlcnZhbEdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJpZGVudGlmaWVyTG9jICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuaWRlbnRpZmllckxvYyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgidWFwc2RDb2V4aXN0ZW5jZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnVhcHNkQ29leGlzdGVuY2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIndubU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubU5vdGlmaWNhdGlvbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQ1ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ1KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJVVEY4U1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVURjhTU0lEKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyZXNlcnZlZDYgKDEyKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJURExTV2lkZXJCVyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNXaWRlckJXKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJvcGVyTW9kZU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm9wZXJNb2RlTm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyZXNlcnZlZDcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDcpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJRT1NDYXBzU3RhdGlvbjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5RT1NDYXBzU3RhdGlvbi5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibW9yZV9kYXRhX2FjayAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24ubW9yZV9kYXRhX2Fjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibWF4X3NwX2xlbmd0aCAoMik6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24ubWF4X3NwX2xlbmd0aCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicWFjayAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24ucWFjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiYWNiZV91YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24uYWNiZV91YXBzZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiYWNia191YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24uYWNia191YXBzZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiYWN2aV91YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24uYWN2aV91YXBzZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiYWN2b191YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24uYWN2b191YXBzZCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIkZUSW5mbzpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInJlc2VydmVkICg4KTogJWRcbiIpLCBwRnJtLT5GVEluZm8ucmVzZXJ2ZWQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIklFQ291bnQgKDgpOiAlZFxuIiksIHBGcm0tPkZUSW5mby5JRUNvdW50KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLk1JQywgMTYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uQW5vbmNlLCAzMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5Tbm9uY2UsIDMyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJSMUtIX0lEOlxuIikpOworICAgICAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8uUjFLSF9JRC5wcmVzZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5SMUtIX0lELlBNS19SMV9JRCwgNik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiR1RLOlxuIikpOworICAgICAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8uR1RLLnByZXNlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJrZXlJZCAoMik6ICVkXG4iKSwgcEZybS0+RlRJbmZvLkdUSy5rZXlJZCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInJlc2VydmVkICgxNCk6ICVkXG4iKSwgcEZybS0+RlRJbmZvLkdUSy5yZXNlcnZlZCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uR1RLLmtleUxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uR1RLLlJTQywgOCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIm51bV9rZXk6ICVkLlxuIiksIHBGcm0tPkZUSW5mby5HVEsubnVtX2tleSk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSBwRnJtLT5GVEluZm8uR1RLLmtleSwgcEZybS0+RlRJbmZvLkdUSy5udW1fa2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJSMEtIX0lEOlxuIikpOworICAgICAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8uUjBLSF9JRC5wcmVzZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibnVtX1BNS19SMF9JRDogJWQuXG4iKSwgcEZybS0+RlRJbmZvLlIwS0hfSUQubnVtX1BNS19SMF9JRCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSBwRnJtLT5GVEluZm8uUjBLSF9JRC5QTUtfUjBfSUQsIHBGcm0tPkZUSW5mby5SMEtIX0lELm51bV9QTUtfUjBfSUQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJGVFRpbWVvdXRJbnRlcnZhbDpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5GVFRpbWVvdXRJbnRlcnZhbC5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUVGltZW91dEludGVydmFsLnRpbWVvdXRUeXBlLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+RlRUaW1lb3V0SW50ZXJ2YWwudGltZW91dFZhbHVlLCA0KTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiUklDRGF0YTpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5SSUNEYXRhLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+UklDRGF0YS5JZGVudGlmaWVyLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+UklDRGF0YS5yZXNvdXJjZURlc2NDb3VudCwgMSk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJJQ0RhdGEuc3RhdHVzQ29kZSwgMik7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIkhUQ2FwczpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5IVENhcHMucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImFkdkNvZGluZ0NhcCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmFkdkNvZGluZ0NhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgic3VwcG9ydGVkQ2hhbm5lbFdpZHRoU2V0ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuc3VwcG9ydGVkQ2hhbm5lbFdpZHRoU2V0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJtaW1vUG93ZXJTYXZlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubWltb1Bvd2VyU2F2ZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZ3JlZW5GaWVsZCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmdyZWVuRmllbGQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInNob3J0R0kyME1IeiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnNob3J0R0kyME1Ieik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgic2hvcnRHSTQwTUh6ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuc2hvcnRHSTQwTUh6KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJ0eFNUQkMgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50eFNUQkMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInJ4U1RCQyAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnJ4U1RCQyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZGVsYXllZEJBICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZGVsYXllZEJBKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJtYXhpbWFsQU1TRFVzaXplICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubWF4aW1hbEFNU0RVc2l6ZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZHNzc0Nja01vZGU0ME1IeiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmRzc3NDY2tNb2RlNDBNSHopOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInBzbXAgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5wc21wKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJzdGJjQ29udHJvbEZyYW1lICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuc3RiY0NvbnRyb2xGcmFtZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibHNpZ1RYT1BQcm90ZWN0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubHNpZ1RYT1BQcm90ZWN0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJtYXhSeEFNUERVRmFjdG9yICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubWF4UnhBTVBEVUZhY3Rvcik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibXBkdURlbnNpdHkgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5tcGR1RGVuc2l0eSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQxICgzKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+SFRDYXBzLnN1cHBvcnRlZE1DU1NldCwgMTYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInBjbyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnBjbyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgidHJhbnNpdGlvblRpbWUgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50cmFuc2l0aW9uVGltZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQyICg1KTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJtY3NGZWVkYmFjayAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLm1jc0ZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyZXNlcnZlZDMgKDYpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yZXNlcnZlZDMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInR4QkYgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50eEJGKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyeFN0YWdnZXJlZFNvdW5kaW5nICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucnhTdGFnZ2VyZWRTb3VuZGluZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgidHhTdGFnZ2VyZWRTb3VuZGluZyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnR4U3RhZ2dlcmVkU291bmRpbmcpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInJ4WkxGICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucnhaTEYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInR4WkxGICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMudHhaTEYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImltcGxpY2l0VHhCRiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmltcGxpY2l0VHhCRik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiY2FsaWJyYXRpb24gKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5jYWxpYnJhdGlvbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZXhwbGljaXRDU0lUeEJGICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRDU0lUeEJGKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJleHBsaWNpdFVuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRVbmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZXhwbGljaXRCRkNTSUZlZWRiYWNrICgzKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRCRkNTSUZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJleHBsaWNpdFVuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4RmVlZGJhY2sgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdFVuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4RmVlZGJhY2spOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImV4cGxpY2l0Q29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4RmVlZGJhY2sgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdENvbXByZXNzZWRTdGVlcmluZ01hdHJpeEZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJjc2lOdW1CRkFudGVubmFlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuY3NpTnVtQkZBbnRlbm5hZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgidW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMudW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJjb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4QkZBbnRlbm5hZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQ0ICg3KTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQ0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhbnRlbm5hU2VsZWN0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuYW50ZW5uYVNlbGVjdGlvbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiZXhwbGljaXRDU0lGZWVkYmFja1R4ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRDU0lGZWVkYmFja1R4KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhbnRlbm5hSW5kaWNlc0ZlZWRiYWNrVHggKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5hbnRlbm5hSW5kaWNlc0ZlZWRiYWNrVHgpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoImV4cGxpY2l0Q1NJRmVlZGJhY2sgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdENTSUZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhbnRlbm5hSW5kaWNlc0ZlZWRiYWNrICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuYW50ZW5uYUluZGljZXNGZWVkYmFjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicnhBUyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnJ4QVMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoInR4U291bmRpbmdQUERVcyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnR4U291bmRpbmdQUERVcyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQ1ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQ1KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJudW1fcnN2ZDogJWQuXG4iKSwgcEZybS0+SFRDYXBzLm51bV9yc3ZkKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkgcEZybS0+SFRDYXBzLnJzdmQsIHBGcm0tPkhUQ2Fwcy5udW1fcnN2ZCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIkxpbmtJZGVudGlmaWVyOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkxpbmtJZGVudGlmaWVyLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuYnNzaWQsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5Jbml0U3RhQWRkciwgNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgKCB0QU5JX1U4KiApJnBGcm0tPkxpbmtJZGVudGlmaWVyLlJlc3BTdGFBZGRyLCA2KTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgiV01NSW5mb1N0YXRpb246XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+V01NSW5mb1N0YXRpb24ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksICggdEFOSV9VOCogKSZwRnJtLT5XTU1JbmZvU3RhdGlvbi52ZXJzaW9uLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhY3ZvX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY3ZvX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhY3ZpX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY3ZpX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhY2JrX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY2JrX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJhY2JlX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY2JlX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJyZXNlcnZlZDEgKDEpOiAlZFxuIiksIHBGcm0tPldNTUluZm9TdGF0aW9uLnJlc2VydmVkMSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgibWF4X3NwX2xlbmd0aCAoMik6ICVkXG4iKSwgcEZybS0+V01NSW5mb1N0YXRpb24ubWF4X3NwX2xlbmd0aCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUkVRKSwgRlJGTCgicmVzZXJ2ZWQyICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5yZXNlcnZlZDIpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSRVEpLCBGUkZMKCJ0bzpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJFUSksIHBCdWYsIG5CdWYpOworICAgIH0KKyMgICBlbmRpZiAvLyBET1QxMUZfRFVNUF9GUkFNRVMKKyAgICByZXR1cm4gc3RhdHVzOworCit9IC8qIEVuZCBkb3QxMWZVbnBhY2tURExTU2V0dXBSZXEuICovCisKK3RBTklfVTMyIGRvdDExZlBhY2tURExTU2V0dXBSc3AodHBBbmlTaXJHbG9iYWwgcEN0eCwgdERvdDExZlRETFNTZXR1cFJzcCAqcEZybSwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdEFOSV9VMzIgKnBuQ29uc3VtZWQpCit7CisgICAgdEFOSV9VMzIgaSA9IDA7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICAodm9pZClpOworICAgICpwbkNvbnN1bWVkID0gMFU7CisgICAgc3RhdHVzID0gUGFja0NvcmUocEN0eCwgKHRBTklfVTgqKXBGcm0sIHBCdWYsIG5CdWYsIHBuQ29uc3VtZWQsIEZGU19URExTU2V0dXBSc3AsIElFU19URExTU2V0dXBSc3ApOworCisjICAgaWZkZWYgRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgaWYgKCFET1QxMUZfRkFJTEVEKHN0YXR1cykpCisgICAgeworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiUGFja2VkIHRoZSBURExTU2V0dXBSc3A6XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJDYXRlZ29yeTpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5DYXRlZ29yeS5jYXRlZ29yeSwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJBY3Rpb246XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+QWN0aW9uLmFjdGlvbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJTdGF0dXM6XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+U3RhdHVzLnN0YXR1cywgMik7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJEaWFsb2dUb2tlbjpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5EaWFsb2dUb2tlbi50b2tlbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJDYXBhYmlsaXRpZXM6XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJlc3MgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5lc3MpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiaWJzcyAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmlic3MpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiY2ZQb2xsYWJsZSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmNmUG9sbGFibGUpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiY2ZQb2xsUmVxICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuY2ZQb2xsUmVxKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInByaXZhY3kgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5wcml2YWN5KTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInNob3J0UHJlYW1ibGUgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5zaG9ydFByZWFtYmxlKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInBiY2MgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5wYmNjKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImNoYW5uZWxBZ2lsaXR5ICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuY2hhbm5lbEFnaWxpdHkpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgic3BlY3RydW1NZ3QgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5zcGVjdHJ1bU1ndCk7CisgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJxb3MgKDEpOiAlZFxuIiksIHBGcm0tPkNhcGFiaWxpdGllcy5xb3MpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgic2hvcnRTbG90VGltZSAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLnNob3J0U2xvdFRpbWUpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiYXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+Q2FwYWJpbGl0aWVzLmFwc2QpOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicnJtICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMucnJtKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImRzc3NPZmRtICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuZHNzc09mZG0pOworICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiZGVsYXllZEJBICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuZGVsYXllZEJBKTsKKyAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImltbWVkaWF0ZUJBICgxKTogJWRcbiIpLCBwRnJtLT5DYXBhYmlsaXRpZXMuaW1tZWRpYXRlQkEpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiU3VwcFJhdGVzOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlN1cHBSYXRlcy5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibnVtX3JhdGVzOiAlZC5cbiIpLCBwRnJtLT5TdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkgcEZybS0+U3VwcFJhdGVzLnJhdGVzLCBwRnJtLT5TdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiQ291bnRyeTpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5Db3VudHJ5LnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+Q291bnRyeS5jb3VudHJ5LCAzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJudW1fdHJpcGxldHM6ICVkLlxuIiksIHBGcm0tPkNvdW50cnkubnVtX3RyaXBsZXRzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkgcEZybS0+Q291bnRyeS50cmlwbGV0cywgMyAqIHBGcm0tPkNvdW50cnkubnVtX3RyaXBsZXRzKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiRXh0U3VwcFJhdGVzOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkV4dFN1cHBSYXRlcy5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibnVtX3JhdGVzOiAlZC5cbiIpLCBwRnJtLT5FeHRTdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkgcEZybS0+RXh0U3VwcFJhdGVzLnJhdGVzLCBwRnJtLT5FeHRTdXBwUmF0ZXMubnVtX3JhdGVzKTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiU3VwcENoYW5uZWxzOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPlN1cHBDaGFubmVscy5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibnVtX2JhbmRzOiAlZC5cbiIpLCBwRnJtLT5TdXBwQ2hhbm5lbHMubnVtX2JhbmRzKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkgcEZybS0+U3VwcENoYW5uZWxzLmJhbmRzLCAyICogcEZybS0+U3VwcENoYW5uZWxzLm51bV9iYW5kcyk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlJTTjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5SU04ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5SU04udmVyc2lvbiwgMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJTTi5ncF9jaXBoZXJfc3VpdGUsIDQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5SU04ucHdpc2VfY2lwaGVyX3N1aXRlX2NvdW50LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkgcEZybS0+UlNOLnB3aXNlX2NpcGhlcl9zdWl0ZXMsIDQgKiBwRnJtLT5SU04ucHdpc2VfY2lwaGVyX3N1aXRlX2NvdW50KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLmFrbV9zdWl0ZV9jb3VudCwgMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApIHBGcm0tPlJTTi5ha21fc3VpdGVzLCA0ICogcEZybS0+UlNOLmFrbV9zdWl0ZV9jb3VudCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicHJlYXV0aCAoMSk6ICVkXG4iKSwgcEZybS0+UlNOLnByZWF1dGgpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIm5vX3B3aXNlICgxKTogJWRcbiIpLCBwRnJtLT5SU04ubm9fcHdpc2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlBUS1NBX3JlcGxheV9jb3VudGVyICgyKTogJWRcbiIpLCBwRnJtLT5SU04uUFRLU0FfcmVwbGF5X2NvdW50ZXIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIkdUS1NBX3JlcGxheV9jb3VudGVyICgyKTogJWRcbiIpLCBwRnJtLT5SU04uR1RLU0FfcmVwbGF5X2NvdW50ZXIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInJlc2VydmVkICgxMCk6ICVkXG4iKSwgcEZybS0+UlNOLnJlc2VydmVkKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+UlNOLnBta2lkX2NvdW50LCAyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkgcEZybS0+UlNOLnBta2lkLCAxNiAqIHBGcm0tPlJTTi5wbWtpZF9jb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIkV4dENhcDpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5FeHRDYXAucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImJzc0NvZXhpc3RNZ210U3VwcG9ydCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmJzc0NvZXhpc3RNZ210U3VwcG9ydCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicmVzZXJ2ZWQxICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQxKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJleHRDaGFuU3dpdGNoICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuZXh0Q2hhblN3aXRjaCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicmVzZXJ2ZWQyICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJwc21wQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucHNtcENhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicmVzZXJ2ZWQzICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJzcHNtcENhcCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnNwc21wQ2FwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJldmVudCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmV2ZW50KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJkaWFnbm9zdGljcyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmRpYWdub3N0aWNzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJtdWx0aURpYWdub3N0aWNzICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAubXVsdGlEaWFnbm9zdGljcyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibG9jVHJhY2tpbmcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5sb2NUcmFja2luZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiRk1TICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuRk1TKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJwcm94eUFSUFNlcnZpY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5wcm94eUFSUFNlcnZpY2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImNvTG9jSW50ZlJlcG9ydGluZyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmNvTG9jSW50ZlJlcG9ydGluZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiY2l2aWNMb2MgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5jaXZpY0xvYyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiZ2Vvc3BhdGlhbExvYyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLmdlb3NwYXRpYWxMb2MpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlRGUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRGUyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgid25tU2xlZXBNb2RlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAud25tU2xlZXBNb2RlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJ0aW1Ccm9hZGNhc3QgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC50aW1Ccm9hZGNhc3QpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImJzc1RyYW5zaXRpb24gKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5ic3NUcmFuc2l0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJxb3NUcmFmZmljQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucW9zVHJhZmZpY0NhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiYWNTdGFDbnQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5hY1N0YUNudCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibXVsdGlCU1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm11bHRpQlNTSUQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInRpbWluZ01lYXMgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC50aW1pbmdNZWFzKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJjaGFuVXNhZ2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5jaGFuVXNhZ2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInNzaWRMaXN0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuc3NpZExpc3QpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIkRNUyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLkRNUyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiVVRDVFNGT2Zmc2V0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVVRDVFNGT2Zmc2V0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJURExTUGVlclVBUFNEQnVmZmVyU1RBICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJVQVBTREJ1ZmZlclNUQSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiVERMU1BlZXJQU01TdXBwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1BlZXJQU01TdXBwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJURExTQ2hhbm5lbFN3aXRjaGluZyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNDaGFubmVsU3dpdGNoaW5nKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJpbnRlcndvcmtpbmdTZXJ2aWNlICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuaW50ZXJ3b3JraW5nU2VydmljZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicW9zTWFwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucW9zTWFwKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJFQlIgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5FQlIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInNzcG5JbnRlcmZhY2UgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5zc3BuSW50ZXJmYWNlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIm1zZ0NGQ2FwICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAubXNnQ0ZDYXApOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlRETFNTdXBwb3J0ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1N1cHBvcnQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlRETFNQcm9oaWJpdGVkICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuVERMU1Byb2hpYml0ZWQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIlRETFNDaGFuU3dpdFByb2hpYml0ZWQgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5URExTQ2hhblN3aXRQcm9oaWJpdGVkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZWplY3RVbmFkbWl0dGVkVHJhZmZpYyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnJlamVjdFVuYWRtaXR0ZWRUcmFmZmljKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJzZXJ2aWNlSW50ZXJ2YWxHcmFudWxhcml0eSAoMyk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnNlcnZpY2VJbnRlcnZhbEdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJpZGVudGlmaWVyTG9jICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAuaWRlbnRpZmllckxvYyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgidWFwc2RDb2V4aXN0ZW5jZSAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLnVhcHNkQ29leGlzdGVuY2UpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIndubU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLndubU5vdGlmaWNhdGlvbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicmVzZXJ2ZWQ1ICgxKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ1KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJVVEY4U1NJRCAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlVURjhTU0lEKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDYgKDEyKTogJWRcbiIpLCBwRnJtLT5FeHRDYXAucmVzZXJ2ZWQ2KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJURExTV2lkZXJCVyAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLlRETFNXaWRlckJXKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJvcGVyTW9kZU5vdGlmaWNhdGlvbiAoMSk6ICVkXG4iKSwgcEZybS0+RXh0Q2FwLm9wZXJNb2RlTm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDcgKDEpOiAlZFxuIiksIHBGcm0tPkV4dENhcC5yZXNlcnZlZDcpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJRT1NDYXBzU3RhdGlvbjpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5RT1NDYXBzU3RhdGlvbi5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibW9yZV9kYXRhX2FjayAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24ubW9yZV9kYXRhX2Fjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibWF4X3NwX2xlbmd0aCAoMik6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24ubWF4X3NwX2xlbmd0aCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicWFjayAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24ucWFjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiYWNiZV91YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24uYWNiZV91YXBzZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiYWNia191YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24uYWNia191YXBzZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiYWN2aV91YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24uYWN2aV91YXBzZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiYWN2b191YXBzZCAoMSk6ICVkXG4iKSwgcEZybS0+UU9TQ2Fwc1N0YXRpb24uYWN2b191YXBzZCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIkZUSW5mbzpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInJlc2VydmVkICg4KTogJWRcbiIpLCBwRnJtLT5GVEluZm8ucmVzZXJ2ZWQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIklFQ291bnQgKDgpOiAlZFxuIiksIHBGcm0tPkZUSW5mby5JRUNvdW50KTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLk1JQywgMTYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uQW5vbmNlLCAzMik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5Tbm9uY2UsIDMyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJSMUtIX0lEOlxuIikpOworICAgICAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8uUjFLSF9JRC5wcmVzZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5SMUtIX0lELlBNS19SMV9JRCwgNik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiR1RLOlxuIikpOworICAgICAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8uR1RLLnByZXNlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJrZXlJZCAoMik6ICVkXG4iKSwgcEZybS0+RlRJbmZvLkdUSy5rZXlJZCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInJlc2VydmVkICgxNCk6ICVkXG4iKSwgcEZybS0+RlRJbmZvLkdUSy5yZXNlcnZlZCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uR1RLLmtleUxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uR1RLLlJTQywgOCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIm51bV9rZXk6ICVkLlxuIiksIHBGcm0tPkZUSW5mby5HVEsubnVtX2tleSk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSBwRnJtLT5GVEluZm8uR1RLLmtleSwgcEZybS0+RlRJbmZvLkdUSy5udW1fa2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJSMEtIX0lEOlxuIikpOworICAgICAgICAgICAgaWYgKCFwRnJtLT5GVEluZm8uUjBLSF9JRC5wcmVzZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibnVtX1BNS19SMF9JRDogJWQuXG4iKSwgcEZybS0+RlRJbmZvLlIwS0hfSUQubnVtX1BNS19SMF9JRCk7CisgICAgICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSBwRnJtLT5GVEluZm8uUjBLSF9JRC5QTUtfUjBfSUQsIHBGcm0tPkZUSW5mby5SMEtIX0lELm51bV9QTUtfUjBfSUQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJGVFRpbWVvdXRJbnRlcnZhbDpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5GVFRpbWVvdXRJbnRlcnZhbC5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUVGltZW91dEludGVydmFsLnRpbWVvdXRUeXBlLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+RlRUaW1lb3V0SW50ZXJ2YWwudGltZW91dFZhbHVlLCA0KTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiUklDRGF0YTpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5SSUNEYXRhLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+UklDRGF0YS5JZGVudGlmaWVyLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+UklDRGF0YS5yZXNvdXJjZURlc2NDb3VudCwgMSk7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPlJJQ0RhdGEuc3RhdHVzQ29kZSwgMik7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIkhUQ2FwczpcbiIpKTsKKyAgICAgICAgaWYgKCFwRnJtLT5IVENhcHMucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImFkdkNvZGluZ0NhcCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmFkdkNvZGluZ0NhcCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgic3VwcG9ydGVkQ2hhbm5lbFdpZHRoU2V0ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuc3VwcG9ydGVkQ2hhbm5lbFdpZHRoU2V0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJtaW1vUG93ZXJTYXZlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubWltb1Bvd2VyU2F2ZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiZ3JlZW5GaWVsZCAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmdyZWVuRmllbGQpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInNob3J0R0kyME1IeiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnNob3J0R0kyME1Ieik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgic2hvcnRHSTQwTUh6ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuc2hvcnRHSTQwTUh6KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJ0eFNUQkMgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50eFNUQkMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInJ4U1RCQyAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnJ4U1RCQyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiZGVsYXllZEJBICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZGVsYXllZEJBKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJtYXhpbWFsQU1TRFVzaXplICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubWF4aW1hbEFNU0RVc2l6ZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiZHNzc0Nja01vZGU0ME1IeiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmRzc3NDY2tNb2RlNDBNSHopOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInBzbXAgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5wc21wKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJzdGJjQ29udHJvbEZyYW1lICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuc3RiY0NvbnRyb2xGcmFtZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibHNpZ1RYT1BQcm90ZWN0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubHNpZ1RYT1BQcm90ZWN0aW9uKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJtYXhSeEFNUERVRmFjdG9yICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMubWF4UnhBTVBEVUZhY3Rvcik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibXBkdURlbnNpdHkgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5tcGR1RGVuc2l0eSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicmVzZXJ2ZWQxICgzKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQxKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+SFRDYXBzLnN1cHBvcnRlZE1DU1NldCwgMTYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInBjbyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnBjbyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgidHJhbnNpdGlvblRpbWUgKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50cmFuc2l0aW9uVGltZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicmVzZXJ2ZWQyICg1KTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQyKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJtY3NGZWVkYmFjayAoMik6ICVkXG4iKSwgcEZybS0+SFRDYXBzLm1jc0ZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDMgKDYpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5yZXNlcnZlZDMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInR4QkYgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy50eEJGKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyeFN0YWdnZXJlZFNvdW5kaW5nICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucnhTdGFnZ2VyZWRTb3VuZGluZyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgidHhTdGFnZ2VyZWRTb3VuZGluZyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnR4U3RhZ2dlcmVkU291bmRpbmcpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInJ4WkxGICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucnhaTEYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInR4WkxGICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMudHhaTEYpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImltcGxpY2l0VHhCRiAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLmltcGxpY2l0VHhCRik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiY2FsaWJyYXRpb24gKDIpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5jYWxpYnJhdGlvbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiZXhwbGljaXRDU0lUeEJGICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRDU0lUeEJGKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJleHBsaWNpdFVuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRVbmNvbXByZXNzZWRTdGVlcmluZ01hdHJpeCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiZXhwbGljaXRCRkNTSUZlZWRiYWNrICgzKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRCRkNTSUZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJleHBsaWNpdFVuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4RmVlZGJhY2sgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdFVuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4RmVlZGJhY2spOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImV4cGxpY2l0Q29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4RmVlZGJhY2sgKDMpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdENvbXByZXNzZWRTdGVlcmluZ01hdHJpeEZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJjc2lOdW1CRkFudGVubmFlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuY3NpTnVtQkZBbnRlbm5hZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgidW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMudW5jb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJjb21wcmVzc2VkU3RlZXJpbmdNYXRyaXhCRkFudGVubmFlICgyKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuY29tcHJlc3NlZFN0ZWVyaW5nTWF0cml4QkZBbnRlbm5hZSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicmVzZXJ2ZWQ0ICg3KTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQ0KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJhbnRlbm5hU2VsZWN0aW9uICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuYW50ZW5uYVNlbGVjdGlvbik7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiZXhwbGljaXRDU0lGZWVkYmFja1R4ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuZXhwbGljaXRDU0lGZWVkYmFja1R4KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJhbnRlbm5hSW5kaWNlc0ZlZWRiYWNrVHggKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5hbnRlbm5hSW5kaWNlc0ZlZWRiYWNrVHgpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoImV4cGxpY2l0Q1NJRmVlZGJhY2sgKDEpOiAlZFxuIiksIHBGcm0tPkhUQ2Fwcy5leHBsaWNpdENTSUZlZWRiYWNrKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJhbnRlbm5hSW5kaWNlc0ZlZWRiYWNrICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMuYW50ZW5uYUluZGljZXNGZWVkYmFjayk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicnhBUyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnJ4QVMpOworICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoInR4U291bmRpbmdQUERVcyAoMSk6ICVkXG4iKSwgcEZybS0+SFRDYXBzLnR4U291bmRpbmdQUERVcyk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicmVzZXJ2ZWQ1ICgxKTogJWRcbiIpLCBwRnJtLT5IVENhcHMucmVzZXJ2ZWQ1KTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJudW1fcnN2ZDogJWQuXG4iKSwgcEZybS0+SFRDYXBzLm51bV9yc3ZkKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkgcEZybS0+SFRDYXBzLnJzdmQsIHBGcm0tPkhUQ2Fwcy5udW1fcnN2ZCk7CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIkxpbmtJZGVudGlmaWVyOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkxpbmtJZGVudGlmaWVyLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuYnNzaWQsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5Jbml0U3RhQWRkciwgNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgKCB0QU5JX1U4KiApJnBGcm0tPkxpbmtJZGVudGlmaWVyLlJlc3BTdGFBZGRyLCA2KTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgiV01NSW5mb1N0YXRpb246XG4iKSk7CisgICAgICAgIGlmICghcEZybS0+V01NSW5mb1N0YXRpb24ucHJlc2VudCkKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksICggdEFOSV9VOCogKSZwRnJtLT5XTU1JbmZvU3RhdGlvbi52ZXJzaW9uLCAxKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJhY3ZvX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY3ZvX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJhY3ZpX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY3ZpX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJhY2JrX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY2JrX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJhY2JlX3VhcHNkICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5hY2JlX3VhcHNkKTsKKyAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJyZXNlcnZlZDEgKDEpOiAlZFxuIiksIHBGcm0tPldNTUluZm9TdGF0aW9uLnJlc2VydmVkMSk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgibWF4X3NwX2xlbmd0aCAoMik6ICVkXG4iKSwgcEZybS0+V01NSW5mb1N0YXRpb24ubWF4X3NwX2xlbmd0aCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1NFVFVQUlNQKSwgRlJGTCgicmVzZXJ2ZWQyICgxKTogJWRcbiIpLCBwRnJtLT5XTU1JbmZvU3RhdGlvbi5yZXNlcnZlZDIpOworICAgICAgICB9CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTU0VUVVBSU1ApLCBGUkZMKCJ0bzpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNTRVRVUFJTUCksIHBCdWYsIG5CdWYpOworICAgIH0KKyMgICBlbmRpZiAvLyBET1QxMUZfRFVNUF9GUkFNRVMKKyAgICByZXR1cm4gc3RhdHVzOworCit9IC8qIEVuZCBkb3QxMWZVbnBhY2tURExTU2V0dXBSc3AuICovCisKK3RBTklfVTMyIGRvdDExZlBhY2tURExTVGVhcmRvd24odHBBbmlTaXJHbG9iYWwgcEN0eCwgdERvdDExZlRETFNUZWFyZG93biAqcEZybSwgdEFOSV9VOCAqcEJ1ZiwgdEFOSV9VMzIgbkJ1ZiwgdEFOSV9VMzIgKnBuQ29uc3VtZWQpCit7CisgICAgdEFOSV9VMzIgaSA9IDA7CisgICAgdEFOSV9VMzIgc3RhdHVzID0gMDsKKyAgICAodm9pZClpOworICAgICpwbkNvbnN1bWVkID0gMFU7CisgICAgc3RhdHVzID0gUGFja0NvcmUocEN0eCwgKHRBTklfVTgqKXBGcm0sIHBCdWYsIG5CdWYsIHBuQ29uc3VtZWQsIEZGU19URExTVGVhcmRvd24sIElFU19URExTVGVhcmRvd24pOworCisjICAgaWZkZWYgRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgaWYgKCFET1QxMUZfRkFJTEVEKHN0YXR1cykpCisgICAgeworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgiUGFja2VkIHRoZSBURExTVGVhcmRvd246XG4iKSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCBGUkZMKCJDYXRlZ29yeTpcbiIpKTsKKyAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksICggdEFOSV9VOCogKSZwRnJtLT5DYXRlZ29yeS5jYXRlZ29yeSwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCBGUkZMKCJBY3Rpb246XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCAoIHRBTklfVTgqICkmcEZybS0+QWN0aW9uLmFjdGlvbiwgMSk7CisgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCBGUkZMKCJSZWFzb246XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCAoIHRBTklfVTgqICkmcEZybS0+UmVhc29uLmNvZGUsIDIpOworICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgiRlRJbmZvOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5wcmVzZW50KQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgicmVzZXJ2ZWQgKDgpOiAlZFxuIiksIHBGcm0tPkZUSW5mby5yZXNlcnZlZCk7CisgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgiSUVDb3VudCAoOCk6ICVkXG4iKSwgcEZybS0+RlRJbmZvLklFQ291bnQpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksICggdEFOSV9VOCogKSZwRnJtLT5GVEluZm8uTUlDLCAxNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5Bbm9uY2UsIDMyKTsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLlNub25jZSwgMzIpOworICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksIEZSRkwoIlIxS0hfSUQ6XG4iKSk7CisgICAgICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5SMUtIX0lELnByZXNlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCAoIHRBTklfVTgqICkmcEZybS0+RlRJbmZvLlIxS0hfSUQuUE1LX1IxX0lELCA2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCBGUkZMKCJHVEs6XG4iKSk7CisgICAgICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5HVEsucHJlc2VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgiTm90IHByZXNlbnQuXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzEocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksIEZSRkwoImtleUlkICgyKTogJWRcbiIpLCBwRnJtLT5GVEluZm8uR1RLLmtleUlkKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgicmVzZXJ2ZWQgKDE0KTogJWRcbiIpLCBwRnJtLT5GVEluZm8uR1RLLnJlc2VydmVkKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5HVEsua2V5TGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgKCB0QU5JX1U4KiApJnBGcm0tPkZUSW5mby5HVEsuUlNDLCA4KTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfTE9HMShwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgibnVtX2tleTogJWQuXG4iKSwgcEZybS0+RlRJbmZvLkdUSy5udW1fa2V5KTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgKCB0QU5JX1U4KiApIHBGcm0tPkZUSW5mby5HVEsua2V5LCBwRnJtLT5GVEluZm8uR1RLLm51bV9rZXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksIEZSRkwoIlIwS0hfSUQ6XG4iKSk7CisgICAgICAgICAgICBpZiAoIXBGcm0tPkZUSW5mby5SMEtIX0lELnByZXNlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksIEZSRkwoIk5vdCBwcmVzZW50LlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZSQU1FU19MT0cxKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCBGUkZMKCJudW1fUE1LX1IwX0lEOiAlZC5cbiIpLCBwRnJtLT5GVEluZm8uUjBLSF9JRC5udW1fUE1LX1IwX0lEKTsKKyAgICAgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgKCB0QU5JX1U4KiApIHBGcm0tPkZUSW5mby5SMEtIX0lELlBNS19SMF9JRCwgcEZybS0+RlRJbmZvLlIwS0hfSUQubnVtX1BNS19SMF9JRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgRlJBTUVTX0xPRzAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksIEZSRkwoIkxpbmtJZGVudGlmaWVyOlxuIikpOworICAgICAgICBpZiAoIXBGcm0tPkxpbmtJZGVudGlmaWVyLnByZXNlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19MT0cwKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCBGUkZMKCJOb3QgcHJlc2VudC5cbiIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCAoIHRBTklfVTgqICkmcEZybS0+TGlua0lkZW50aWZpZXIuYnNzaWQsIDYpOworICAgICAgICAgICAgRlJBTUVTX0RVTVAocEN0eCwgRlJBTUVTX1NFVl9GT1JfRlJBTUUocEN0eCwgRE9UMTFGX1RETFNURUFSRE9XTiksICggdEFOSV9VOCogKSZwRnJtLT5MaW5rSWRlbnRpZmllci5Jbml0U3RhQWRkciwgNik7CisgICAgICAgICAgICBGUkFNRVNfRFVNUChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgKCB0QU5JX1U4KiApJnBGcm0tPkxpbmtJZGVudGlmaWVyLlJlc3BTdGFBZGRyLCA2KTsKKyAgICAgICAgfQorICAgICAgICBGUkFNRVNfTE9HMChwQ3R4LCBGUkFNRVNfU0VWX0ZPUl9GUkFNRShwQ3R4LCBET1QxMUZfVERMU1RFQVJET1dOKSwgRlJGTCgidG86XG4iKSk7CisgICAgICAgIEZSQU1FU19EVU1QKHBDdHgsIEZSQU1FU19TRVZfRk9SX0ZSQU1FKHBDdHgsIERPVDExRl9URExTVEVBUkRPV04pLCBwQnVmLCBuQnVmKTsKKyAgICB9CisjICAgZW5kaWYgLy8gRE9UMTFGX0RVTVBfRlJBTUVTCisgICAgcmV0dXJuIHN0YXR1czsKKworfSAvKiBFbmQgZG90MTFmVW5wYWNrVERMU1RlYXJkb3duLiAqLworCiB0QU5JX1UzMiBkb3QxMWZQYWNrVFBDUmVwb3J0KHRwQW5pU2lyR2xvYmFsIHBDdHgsIHREb3QxMWZUUENSZXBvcnQgKnBGcm0sIHRBTklfVTggKnBCdWYsIHRBTklfVTMyIG5CdWYsIHRBTklfVTMyICpwbkNvbnN1bWVkKQogewogICAgIHRBTklfVTMyIGkgPSAwOwpAQCAtNDExMTEsNiArNDQyNDAsOSBAQAogICAgICAgICAgICAgICAgICAgICBjYXNlIFNpZ0llSUJTU1BhcmFtczoKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyB8PSBkb3QxMWZQYWNrSWVJQlNTUGFyYW1zKHBDdHgsICggdERvdDExZklFSUJTU1BhcmFtcyogKShwU3JjICsgcEllLT5vZmZzZXQgKyBzaXplb2YodERvdDExZklFSUJTU1BhcmFtcykgKiBpICksICBwQnVmUmVtYWluaW5nLCBuQnVmUmVtYWluaW5nLCAmbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFNpZ0llTGlua0lkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgfD0gZG90MTFmUGFja0llTGlua0lkZW50aWZpZXIocEN0eCwgKCB0RG90MTFmSUVMaW5rSWRlbnRpZmllciogKShwU3JjICsgcEllLT5vZmZzZXQgKyBzaXplb2YodERvdDExZklFTGlua0lkZW50aWZpZXIpICogaSApLCAgcEJ1ZlJlbWFpbmluZywgbkJ1ZlJlbWFpbmluZywgJmxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaWdJZU1lYXN1cmVtZW50UmVwb3J0OgogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIHw9IGRvdDExZlBhY2tJZU1lYXN1cmVtZW50UmVwb3J0KHBDdHgsICggdERvdDExZklFTWVhc3VyZW1lbnRSZXBvcnQqICkocFNyYyArIHBJZS0+b2Zmc2V0ICsgc2l6ZW9mKHREb3QxMWZJRU1lYXN1cmVtZW50UmVwb3J0KSAqIGkgKSwgIHBCdWZSZW1haW5pbmcsIG5CdWZSZW1haW5pbmcsICZsZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00MTE4OSw2ICs0NDMyMSwxMiBAQAogICAgICAgICAgICAgICAgICAgICBjYXNlIFNpZ0llUDJQV1NDUHJvdmlzaW9uRGlzY292ZXJ5UmVzOgogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIHw9IGRvdDExZlBhY2tJZVAyUFdTQ1Byb3Zpc2lvbkRpc2NvdmVyeVJlcyhwQ3R4LCAoIHREb3QxMWZJRVAyUFdTQ1Byb3Zpc2lvbkRpc2NvdmVyeVJlcyogKShwU3JjICsgcEllLT5vZmZzZXQgKyBzaXplb2YodERvdDExZklFUDJQV1NDUHJvdmlzaW9uRGlzY292ZXJ5UmVzKSAqIGkgKSwgIHBCdWZSZW1haW5pbmcsIG5CdWZSZW1haW5pbmcsICZsZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU2lnSWVQVElDb250cm9sOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIHw9IGRvdDExZlBhY2tJZVBUSUNvbnRyb2wocEN0eCwgKCB0RG90MTFmSUVQVElDb250cm9sKiApKHBTcmMgKyBwSWUtPm9mZnNldCArIHNpemVvZih0RG90MTFmSUVQVElDb250cm9sKSAqIGkgKSwgIHBCdWZSZW1haW5pbmcsIG5CdWZSZW1haW5pbmcsICZsZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU2lnSWVQVUJ1ZmZlclN0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyB8PSBkb3QxMWZQYWNrSWVQVUJ1ZmZlclN0YXR1cyhwQ3R4LCAoIHREb3QxMWZJRVBVQnVmZmVyU3RhdHVzKiApKHBTcmMgKyBwSWUtPm9mZnNldCArIHNpemVvZih0RG90MTFmSUVQVUJ1ZmZlclN0YXR1cykgKiBpICksICBwQnVmUmVtYWluaW5nLCBuQnVmUmVtYWluaW5nLCAmbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIFNpZ0llUG93ZXJDYXBzOgogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzIHw9IGRvdDExZlBhY2tJZVBvd2VyQ2FwcyhwQ3R4LCAoIHREb3QxMWZJRVBvd2VyQ2FwcyogKShwU3JjICsgcEllLT5vZmZzZXQgKyBzaXplb2YodERvdDExZklFUG93ZXJDYXBzKSAqIGkgKSwgIHBCdWZSZW1haW5pbmcsIG5CdWZSZW1haW5pbmcsICZsZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9DT1JFL1RML2luYy93bGFuX3FjdF90bC5oIGIvQ09SRS9UTC9pbmMvd2xhbl9xY3RfdGwuaAppbmRleCBjYjY2MWQ3Li5kNjA3M2JmIDEwMDY0NAotLS0gYS9DT1JFL1RML2luYy93bGFuX3FjdF90bC5oCisrKyBiL0NPUkUvVEwvaW5jL3dsYW5fcWN0X3RsLmgKQEAgLTE2OCw4ICsxNjgsMjAgQEAKICNpZmRlZiBXTEFOX1NPRlRBUF9GRUFUVVJFCiAgIC8qIFNvZnRBUCBzdGF0aW9uICovCiAgIFdMQU5fU1RBX1NPRlRBUCwKKworI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisgIC8qIFRETFMgZGlyZWN0IGxpbmsgKi8KKyAgV0xBTl9TVEFfVERMUywgICAgLyogNCAqLwogI2VuZGlmCiAKKyNlbHNlICAgLyogIWRlZmluZWQgV0xBTl9TT0ZUQVBfRkVBVFVSRSAqLworI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisgIC8qIFRETFMgZGlyZWN0IGxpbmsgKi8KKyAgV0xBTl9TVEFfVERMUywgICAgLyogMyAqLworI2VuZGlmCisKKyNlbmRpZi8qIFdMQU5fU09GVEFQX0ZFQVRVUkUgKi8KKwogICAvKiBJbnZhbGlkIGxpbmsqLwogICBXTEFOX1NUQV9NQVgKIApkaWZmIC0tZ2l0IGEvQ09SRS9UTC9zcmMvd2xhbl9xY3RfdGwuYyBiL0NPUkUvVEwvc3JjL3dsYW5fcWN0X3RsLmMKaW5kZXggOTYzODBjMC4uNmRmZmNjOCAxMDA2NDQKLS0tIGEvQ09SRS9UTC9zcmMvd2xhbl9xY3RfdGwuYworKysgYi9DT1JFL1RML3NyYy93bGFuX3FjdF90bC5jCkBAIC0xODQsNiArMTg0LDExIEBACiAjZGVmaW5lIFdMQU5UTF9JU19DVFJMX0ZSQU1FKF90eXBlX3N1YikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgKCBXTEFOVExfQ1RSTF9GUkFNRV9UWVBFID09ICggKF90eXBlX3N1YikgJiAweDMwICkpCiAKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworI2RlZmluZSBXTEFOVExfSVNfVERMU19GUkFNRShfZXRoX3R5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICggV0xBTlRMX0xMQ19URExTX1RZUEUgPT0gKCBfZXRoX3R5cGUpKQorI2VuZGlmCisKIC8qTUFYIEFsbG93ZWQgbGVuIHByb2Nlc3NlZCBieSBUTCAtIE1BeCBNVFUgKyA4MDIuMyBoZWFkZXIgKyBCRCtEWEUrWFRMKi8KICNkZWZpbmUgV0xBTlRMX01BWF9BTExPV0VEX0xFTiAgICAoMTUxNCArIDEwMCkKIApAQCAtMzQ3LDYgKzM1MiwyNSBAQAogICB2X1UxNl90ICAgICAgICAgICAgICAqIHVzRXRoZXJUeXBlCiApOwogCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwKKy8qIEZJWE1FX01VU1Q6IGR1cmluZyBURExTIGludGVncmF0aW9uIHRvIG1haW4vbGF0ZXN0LCBXTEFOVExfR2V0RXRoZXJUeXBlKCkgY29uZmxpY3RzLgorQnV0IHRoZXJlIGlzIGRpZmZlcmVuY2UuIGV4aXN0aW5nIFdMQU5UTF9HZXRFdGhlclR5cGUoKSBleHBlY3RzIHZvc0RhdGFCdWZmLT5vZmZzZXQgcG9pbnRzIHRvIE1QRFUgSGVhZGVyLAord2hlcmVhc2UgVERMUyBleHBlY3Qgdm9zRGF0YUJ1ZmYtPm9mZnNldCBzaG91bGQgc3RpbGwgcG9pbnRzIHRvIFJ4QmQuIAorU28gZmFyLCBkYXRhIGZybWFlIHN0cmlwcGVkIFJ4QkQgYW5kIHBhc3NlZCB0byBkYXRhIGZyYW1lIGhhbmRsZXIuCisoUnhCZCBzaG91bGQgbm90IGJlIHN0cmlwcGVkIGluIGNhc2UgVERMUywgYmVjYXVzZSBpdCB3aWxsIGJlIGV2ZW50dWFsbHkgcm91dGVkIHRvIG1nbXQgcGFja2V0IAoraGFuZGxlciwgd2hlcmUgUlggQkQgc2hvdWxkIGJlIHByZXNlcnZlZCkKK1RvIGF2b2lkIGJyZWFraW5nIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHksIGZvciBub3csIEkgdGVtcG9yYXJpbHkgcmVuYW1lIHRvCitXTEFOVExfR2V0RXRoZXJUeXBlXzIoKS4gRXZlbnR1YWxseSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSByZW1vdmVkIGFuZCBtZXJnZWQgdG8gV0xBTlRMX0dldEV0aGVyVHlwZSgpCisqLworc3RhdGljIFZPU19TVEFUVVMgCitXTEFOVExfR2V0RXRoZXJUeXBlXzIKKygKKyAgdl9VOF90ICAgICAgICAgICAgICAgKiBhdWNCREhlYWRlciwKKyAgdm9zX3BrdF90ICAgICAgICAgICAgKiB2b3NEYXRhQnVmZiwKKyAgdl9VOF90ICAgICAgICAgICAgICAgICB1Y01QRFVITGVuLAorICB2X1UxNl90ICAgICAgICAgICAgICAqIHVzRXRoZXJUeXBlCispOworI2VuZGlmCiAjaWZkZWYgRkVBVFVSRV9XTEFOX1dBUEkKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBBZGRpbmcgYSBnbG9iYWwgdmFyaWFibGUgdG8gYmUgdXNlZCB3aGVuIGRvaW5nIGZyYW1lIHRyYW5zbGF0aW9uIGluIFR4QXV0aApAQCAtNTAwMSw2ICs1MDI1LDEwIEBACiAjaWZkZWYgV0xBTl9TT0ZUQVBfRkVBVFVSRQogICB2X1UxNl90ICAgICAgICAgICAgIHVzUGt0TGVuOwogI2VuZGlmCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFNfSU5URVJOQUwgCisgIHZfVThfdCAgICAgICAgICAgICAgdWNNUERVSExlbiA9IDAgOworICB2X1UxNl90ICAgICAgICAgICAgIHVzRXRoZXJUeXBlID0gMDsKKyNlbmRpZgogICAvKi0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtKi8KIAogICBUTExPRzIoVk9TX1RSQUNFKCBWT1NfTU9EVUxFX0lEX1RMLCBWT1NfVFJBQ0VfTEVWRUxfSU5GT19ISUdILApAQCAtNTA5Nyw2ICs1MTI1LDEzIEBACiAgICAgICBjb250aW51ZTsKICAgICB9CiAKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMU19JTlRFUk5BTAorICAgIGlmICggV0xBTlRMX0lTX0RBVEFfRlJBTUUodWNGcm1UeXBlKSkKKyAgICB7CisgICAgICAgdWNNUERVSExlbiAgICA9ICh2X1U4X3QpV0RBX0dFVF9SWF9NUERVX0hFQURFUl9MRU4ocHZCREhlYWRlcik7CisgICAgICAgV0xBTlRMX0dldEV0aGVyVHlwZV8yKHB2QkRIZWFkZXIsIHZvc1RlbXBCdWZmLCB1Y01QRFVITGVuLCAmdXNFdGhlclR5cGUpIDsKKyAgICB9CisjZW5kaWYKICNpZmRlZiBXTEFOX1NPRlRBUF9GRUFUVVJFCiAgICAgdm9zX3BrdF9nZXRfcGFja2V0X2xlbmd0aCh2b3NUZW1wQnVmZiwgJnVzUGt0TGVuKTsKICNlbmRpZgpAQCAtNTEwNSw3ICs1MTQwLDExIEBACiAgICAgICBDaGVjayBpZiBtYW5hZ2VtZW50IGFuZCBzZW5kIHRvIFBFCiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotICAgIGlmICggV0xBTlRMX0lTX01HTVRfRlJBTUUodWNGcm1UeXBlKSApCisgICAgaWYgKCBXTEFOVExfSVNfTUdNVF9GUkFNRSh1Y0ZybVR5cGUpIAorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTX0lOVEVSTkFMCisgICAgICAgIHx8IChXTEFOVExfSVNfVERMU19GUkFNRSh1c0V0aGVyVHlwZSkpIAorI2VuZGlmCisgICAgICAgKQogICAgIHsKICAgICAgIFRMTE9HMihWT1NfVFJBQ0UoIFZPU19NT0RVTEVfSURfVEwsIFZPU19UUkFDRV9MRVZFTF9JTkZPX0hJR0gsCiAgICAgICAgICAgICAgICAgICJXTEFOIFRMOlNlbmRpbmcgcGFja2V0IHRvIG1hbmFnZW1lbnQgY2xpZW50IikpOwpAQCAtNjM2OSw2ICs2NDA4LDEyIEBACiAgICAgfQogICB9CiAjZW5kaWYgLyogRkVBVFVSRV9XTEFOX1dBUEkgKi8KKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICBpZiAoIHBTdGFDbGllbnQtPndTVEFEZXNjLndTVEFUeXBlID09IFdMQU5fU1RBX1RETFMgKQorICB7CisgICAgdWNUeEZsYWcgPSB1Y1R4RmxhZyB8IEhBTF9URExTX1BFRVJfU1RBX01BU0s7CisgIH0KKyNlbmRpZiAvKiBGRUFUVVJFX1dMQU5fVERMUyAqLwogCiAgIHZvc1N0YXR1cyA9IChWT1NfU1RBVFVTKVdEQV9EU19CdWlsZFR4UGFja2V0SW5mbyggcHZvc0dDdHgsIAogICAgICAgICAgICAgICAgICAgICAgdm9zRGF0YUJ1ZmYgLCAmdkRlc3RNYWNBZGRyLApAQCAtODA4NCw2ICs4MTI5LDI2IEBACiAgICAgIHJldHVybiB2b3NTdGF0dXM7CiAgIH0KIAorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisgICAgaWYoIFdMQU5fU1RBX0lORlJBID09IHBUTENiLT5hdGxTVEFDbGllbnRzW3VjU3RhSWRdLndTVEFEZXNjLndTVEFUeXBlICkKKyAgICB7CisgICAgICB2X1U4X3QgdWNJbmRleCA9IDA7CisgICAgICBmb3IgKCB1Y0luZGV4ID0gMDsgdWNJbmRleCA8IFdMQU5fTUFYX1NUQV9DT1VOVCA7IHVjSW5kZXgrKykKKyAgICAgIHsKKyAgICAgICAgaWYoIHVjSW5kZXggIT0gdWNTdGFJZCAmJiBwVExDYi0+YXRsU1RBQ2xpZW50c1t1Y0luZGV4XS51Y0V4aXN0cyAmJgorICAgICAgICAgICAgdm9zX21lbV9jb21wYXJlKCAodm9pZCopcFRMQ2ItPmF0bFNUQUNsaWVudHNbdWNJbmRleF0ud1NUQURlc2MudlNUQU1BQ0FkZHJlc3MuYnl0ZXMsCisgICAgICAgICAgICAgICh2b2lkKil3ODAyM0hlYWRlci52REEsIDYpICkKKyAgICAgICAgeworICAgICAgICAgIFRMTE9HRShWT1NfVFJBQ0UoIFZPU19NT0RVTEVfSURfVEwsIFZPU19UUkFDRV9MRVZFTF9JTkZPX0xPVywKKyAgICAgICAgICAgICAgICAiV0xBTiBUTDogR290IGEgVERMUyBzdGF0aW9uLiBVc2luZyB0aGF0IGluZGV4IikpOworICAgICAgICAgIHVjU3RhSWQgPSB1Y0luZGV4OworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICB9CisjZW5kaWYKKwogCiAgIGlmICggMCAhPSBwVExDYi0+YXRsU1RBQ2xpZW50c1t1Y1N0YUlkXS53U1RBRGVzYy51Y0FkZFJtdkxMQyApCiAgIHsKQEAgLTgyNzgsNyArODM0MywyMCBAQAogICAgICAgICAgICAgdWNTdGFJZCkpOwogICAgICAgICBicmVhazsKICNlbmRpZgotCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKKyAgICAgIGNhc2UgV0xBTl9TVEFfVERMUzoKKyAgICAgICAgcHc4MDIxMUhlYWRlci0+d0ZybUN0cmwudG9EUyAgICAgICAgICA9IDA7CisgICAgICAgIHB3ODAyMTFIZWFkZXItPndGcm1DdHJsLmZyb21EUyAgICAgICAgPSAwOworICAgICAgICAvKkZpeCBtZSovCisgICAgICAgIHZvc19jb3B5X21hY2FkZHIoICh2X01BQ0FERFJfdCopJnB3ODAyMTFIZWFkZXItPnZBMSwKKyAgICAgICAgICAgICAgJnBUTENiLT5hdGxTVEFDbGllbnRzW3VjU3RhSWRdLndTVEFEZXNjLnZTVEFNQUNBZGRyZXNzKTsKKyAgICAgICAgdm9zX21lbV9jb3B5KCBwdzgwMjExSGVhZGVyLT52QTMsCisgICAgICAgICAgICAgICZwVExDYi0+YXRsU1RBQ2xpZW50c1t1Y1N0YUlkXS53U1RBRGVzYy52QlNTSURmb3JJQlNTICwKKyAgICAgICAgICAgICAgVk9TX01BQ19BRERSX1NJWkUpOworICAgICAgICBWT1NfVFJBQ0UoIFZPU19NT0RVTEVfSURfVEwsIFZPU19UUkFDRV9MRVZFTF9JTkZPX0hJR0gsCisgICAgICAgICAgICAoIlRMOlRETFMgQ0FTRSBOT1cgLS0tLS0tLS0tc3RhaWQ9JWRcbiIpLCB1Y1N0YUlkKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgIGNhc2UgV0xBTl9TVEFfSU5GUkE6CiAgICAgICBkZWZhdWx0OgogICAgICAgICBwdzgwMjExSGVhZGVyLT53RnJtQ3RybC50b0RTICAgICAgICAgID0gMTsKQEAgLTEwOTc3LDYgKzExMDU1LDg0IEBACiAgICAgcmV0dXJuIHZvc1N0YXR1czsKIH0KICNlbmRpZgorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTX0lOVEVSTkFMCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEZVTkNUSU9OICAgICAgV0xBTlRMX0dldEV0aGVyVHlwZV8yCisKKyAgREVTQ1JJUFRJT04gICBFeHRyYWN0IEV0aGVyIHR5cGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgQkQKKworICBERVBFTkRFTkNJRVMgIE5PTkUKKyAgICAKKyAgUEFSQU1FVEVSUyAgICBpbiBhdWNCREhlYWRlciAtIEJEIGhlYWRlcgorICAgICAgICAgICAgICAgIGluIHZvc0RhdGFCdWZmIC0gZGF0YSBidWZmZXIKKyAgICAgICAgICAgICAgICBpbiB1Y01QRFVITGVuICAtIE1QRFUgaGVhZGVyIGxlbmd0aAorICAgICAgICAgICAgICAgIG91dCBwVXNFdGhlclR5cGUgLSBwb2ludGVyIHRvIEV0aGVydHlwZQorCisgIFJFVFVSTiBWQUxVRSAgVk9TX1NUQVRVU19TVUNDRVNTIDogaWYgdGhlIEV0aGVyVHlwZSBpcyBzdWNjZXNzZnVsbHkgZXh0cmFjdGVkCisgICAgICAgICAgICAgICAgVk9TX1NUQVRVU19GQUlMVVJFIDogaWYgdGhlIEV0aGVyVHlwZSBleHRyYWN0aW9uIGZhaWxlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcGFja2V0IHdhcyBkcm9wcGVkCisKKyAgU0lERSBFRkZFQ1RTICBOT05FCisgIAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitzdGF0aWMgVk9TX1NUQVRVUyBXTEFOVExfR2V0RXRoZXJUeXBlXzIKKygKKyAgIHZfVThfdCAgICAgICAgICAgICAgICogYXVjQkRIZWFkZXIsCisgICB2b3NfcGt0X3QgICAgICAgICAgICAqIHZvc0RhdGFCdWZmLAorICAgdl9VOF90ICAgICAgICAgICAgICAgICB1Y01QRFVITGVuLAorICAgdl9VMTZfdCAgICAgICAgICAgICAgKiBwVXNFdGhlclR5cGUKKykKK3sKKyAgdl9VOF90ICAgICAgICAgICAgICAgICAgIHVjT2Zmc2V0OworICB2X1UxNl90ICAgICAgICAgICAgICAgICAgdXNFdGhlclR5cGUgPSAqcFVzRXRoZXJUeXBlOworICB2X1NJWkVfdCAgICAgICAgICAgICAgICAgdXNMTENTaXplID0gc2l6ZW9mKHVzRXRoZXJUeXBlKTsKKyAgVk9TX1NUQVRVUyAgICAgICAgICAgICAgIHZvc1N0YXR1cyAgPSBWT1NfU1RBVFVTX1NVQ0NFU1M7CisgIC8vdl9VOF90ICAgICAgICAgICAgICAgICAgIHVjTExDSGVhZGVyOworICB2X1U4X3QgICAgICAgICAgICAgICAgICAgdWNNUERVSE9mZnNldCA7IAorICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIENoZWNrIGlmIExMQyBpcyBwcmVzZW50IC0gaWYgbm90LCBUTCBpcyB1bmFibGUgdG8gZGV0ZXJtaW5lIHR5cGUKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgIC8vdWNNUERVSE9mZnNldCA9ICh2X1U4X3QpV0xBTkhBTF9SWF9CRF9HRVRfTVBEVV9IX09GRlNFVChhdWNCREhlYWRlcikgOworICAvL3VjTExDSGVhZGVyICAgPSAodl9VOF90KVdMQU5IQUxfUlhfQkRfR0VUX0xMQyhhdWNCREhlYWRlcik7CisgIHVjTVBEVUhPZmZzZXQgPSAodl9VOF90KVdEQV9HRVRfUlhfTVBEVV9IRUFERVJfT0ZGU0VUKGF1Y0JESGVhZGVyKTsKKworICBpZiAoIFZPU19UUlVFID09IFdEQV9JU19SWF9MTENfUFJFU0VOVChhdWNCREhlYWRlcikgKQorICB7CisgICAgdWNPZmZzZXQgPSB1Y01QRFVIT2Zmc2V0ICsgV0xBTlRMXzgwMl8zX0hFQURFUl9MRU4gLSBzaXplb2YodXNFdGhlclR5cGUpOyAKKyAgfQorICBlbHNlCisgIHsKKyAgICB1Y09mZnNldCA9IFdMQU5IQUxfUlhfQkRfSEVBREVSX1NJWkUgKyB1Y01QRFVITGVuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5UTF9MTENfUFJPVE9fVFlQRV9PRkZTRVQ7CisgIH0KKworICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEV4dHJhY3QgTExDIHR5cGUgCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgIHZvc1N0YXR1cyA9IHZvc19wa3RfZXh0cmFjdF9kYXRhKCB2b3NEYXRhQnVmZiwgdWNPZmZzZXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZfUFZPSURfdCkmdXNFdGhlclR5cGUsICZ1c0xMQ1NpemUpOyAKKworICAvKiBUT0RPOiBEbyBpdCBpbiBiZXR0ZXIgd2F5ICovCisgIGlmKHZvc19iZTE2X3RvX2NwdSh1c0V0aGVyVHlwZSkgPT0gMHg4OTBkKQorICB7CisgICAgIFZPU19UUkFDRShWT1NfTU9EVUxFX0lEX1RMLCBWT1NfVFJBQ0VfTEVWRUxfRVJST1IsIAorICAgICAgICAgICAgICAgICAgICAgICgiVERMUyBmcmFtZSBsbGMgJXggXG4iKSwgdm9zX2JlMTZfdG9fY3B1KHVzRXRoZXJUeXBlKSkgOworICB9CisgICAgICAKKyAgICBWT1NfVFJBQ0UoIFZPU19NT0RVTEVfSURfVEwsIFZPU19UUkFDRV9MRVZFTF9JTkZPX0hJR0gsCisgICAgICAgICAgICAgICAiV0xBTiBUTDpFdGhlciB0eXBlIHJldHJpZXZlZCBiZWZvcmUgZW5kaWFuZXNzIGNvbnY6ICVkIiwgCisgICAgICAgICAgICAgICB1c0V0aGVyVHlwZSk7CisKKyAgICB1c0V0aGVyVHlwZSA9IHZvc19iZTE2X3RvX2NwdSh1c0V0aGVyVHlwZSk7CisgICAgKnBVc0V0aGVyVHlwZSA9IHVzRXRoZXJUeXBlOworCisgICAgVk9TX1RSQUNFKCBWT1NfTU9EVUxFX0lEX1RMLCBWT1NfVFJBQ0VfTEVWRUxfSU5GT19ISUdILAorICAgICAgICAgICAgICAgIldMQU4gVEw6RXRoZXIgdHlwZSByZXRyaWV2ZWQ6ICVkIiwgdXNFdGhlclR5cGUpOworICAKKyAgcmV0dXJuIHZvc1N0YXR1czsKK30KKyNlbmRpZiAvKiBGRUFUVVJFX1dMQU5fVERMUyAqLworCiAjaWZkZWYgQU5JX0NISVBTRVRfVk9MQU5TCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgRlVOQ1RJT04gICAgICBXTEFOVExfSXNSZXBsYXlQYWNrZXQKZGlmZiAtLWdpdCBhL0NPUkUvVEwvc3JjL3dsYW5fcWN0X3RsaS5oIGIvQ09SRS9UTC9zcmMvd2xhbl9xY3RfdGxpLmgKaW5kZXggM2JjMmI0My4uZTFmNWIyZCAxMDA2NDQKLS0tIGEvQ09SRS9UTC9zcmMvd2xhbl9xY3RfdGxpLmgKKysrIGIvQ09SRS9UTC9zcmMvd2xhbl9xY3RfdGxpLmgKQEAgLTEyNSw2ICsxMjUsMTAgQEAKIC8qV0FQSSBwcm90b2NvbCB0eXBlICovCiAjZGVmaW5lIFdMQU5UTF9MTENfV0FJX1RZUEUgICAgICAgICAgICAgIDB4ODhiNAogCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKKyNkZWZpbmUgV0xBTlRMX0xMQ19URExTX1RZUEUgICAgICAgICAgICAgMHg4OTBkCisjZW5kaWYKKwogLypMZW5ndGggb2Zmc2V0IGluc2lkZSB0aGUgQU1TRFUgc3ViLWZyYW1lIGhlYWRlciovCiAjZGVmaW5lIFdMQU5UTF9BTVNEVV9TVUJGUkFNRV9MRU5fT0ZGU0VUICAgICAxMgogCmRpZmYgLS1naXQgYS9DT1JFL1dEQS9pbmMvbGVnYWN5L2hhbE1zZ0FwaS5oIGIvQ09SRS9XREEvaW5jL2xlZ2FjeS9oYWxNc2dBcGkuaAppbmRleCBiNDA0NDJlLi42NTQxNmJkIDEwMDY0NAotLS0gYS9DT1JFL1dEQS9pbmMvbGVnYWN5L2hhbE1zZ0FwaS5oCisrKyBiL0NPUkUvV0RBL2luYy9sZWdhY3kvaGFsTXNnQXBpLmgKQEAgLTQzLDYgKzQzLDkgQEAKICNkZWZpbmUgU1RBX0VOVFJZX0JTU0lEICAgICAgICAgICAgIDIKICNkZWZpbmUgU1RBX0VOVFJZX0JDQVNUICAgICAgICAgICAgIDMgLy9TcGVjaWFsIHN0YXRpb24gaWQgZm9yIHRyYW5zbWl0dGluZyBicm9hZGNhc3QgZnJhbWVzLgogI2RlZmluZSBTVEFfRU5UUllfUEVFUiAgICAgICAgICAgICAgU1RBX0VOVFJZX09USEVSCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKKyNkZWZpbmUgU1RBX0VOVFJZX1RETFNfUEVFUiAgICAgICAgIDQKKyNlbmRpZiAvKiBGRUFUVVJFX1dMQU5fVERMUyAqLwogCiAjZGVmaW5lIFNUQV9FTlRSWV9UUkFOU01JVFRFUiAgICAgICBTVEFfRU5UUllfU0VMRgogI2RlZmluZSBTVEFfRU5UUllfUkVDRUlWRVIgICAgICAgICAgU1RBX0VOVFJZX09USEVSCmRpZmYgLS1naXQgYS9DT1JFL1dEQS9pbmMvbGVnYWN5L3dsYW5fcWN0X2hhbC5oIGIvQ09SRS9XREEvaW5jL2xlZ2FjeS93bGFuX3FjdF9oYWwuaAppbmRleCAxZDQ5OWQzLi45MjhiODA4IDEwMDY0NAotLS0gYS9DT1JFL1dEQS9pbmMvbGVnYWN5L3dsYW5fcWN0X2hhbC5oCisrKyBiL0NPUkUvV0RBL2luYy9sZWdhY3kvd2xhbl9xY3RfaGFsLmgKQEAgLTM2NCw2ICszNjQsOSBAQAogI2RlZmluZSBIQUxfVVNFX0JEX1JBVEUyX0ZPUl9NQU5BR0VNRU5UX0ZSQU1FIDB4NDAgLy8gQml0IDYgd2lsbCBiZSB1c2VkIHRvIGNvbnRyb2wgQkQgcmF0ZSBmb3IgTWFuYWdlbWVudCBmcmFtZXMKICNkZWZpbmUgSEFMX1VTRV9QRUVSX1NUQV9SRVFVRVNURURfTUFTSyAgIDB4ODAgLy9iaXQgNyB3aWxsIGJlIHVzZWQgdG8gY29udHJvbCBmcmFtZXMgZm9yIHAycCBpbnRlcmZhY2UKIAorI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTCisjZGVmaW5lIEhBTF9URExTX1BFRVJfU1RBX01BU0sgICAgICAgICAgICAgIDB4ODAgLy9iaXQgNyBzZXQgZm9yIFRETFMgcGVlciBzdGF0aW9uIAorI2VuZGlmCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgRlVOQ1RJT04gICAgV0xBTkhBTF9GaWxsVHhCZApkaWZmIC0tZ2l0IGEvQ09SRS9XREEvc3JjL3dsYW5fcWN0X3dkYS5jIGIvQ09SRS9XREEvc3JjL3dsYW5fcWN0X3dkYS5jCmluZGV4IDdjMmM2Y2IuLjM5ZDhjZTcgMTAwNjQ0Ci0tLSBhL0NPUkUvV0RBL3NyYy93bGFuX3FjdF93ZGEuYworKysgYi9DT1JFL1dEQS9zcmMvd2xhbl9xY3Rfd2RhLmMKQEAgLTMwMDIsNyArMzAwMiwxMiBAQAogICAgICAgYWRkU3RhUmVxUGFyYW0tPnVjVWNhc3RTaWcgPSB3ZGlDb25maWdTdGFSc3AtPnVjVWNhc3RTaWc7CiAgICAgICBhZGRTdGFSZXFQYXJhbS0+dWNCY2FzdFNpZyA9IHdkaUNvbmZpZ1N0YVJzcC0+dWNCY2FzdFNpZzsKICAgICAgIC8qIHVwZGF0ZSBzdGFJbmRleCBhcyB2YWxpZCBpbmRleCBmb3IgQkEgaWYgU1RBIGlzIEhUIGNhcGFibGUqLworI2lmZGVmIEZFQVRVUkVfV0xBTl9URExTIAorICAgICAgaWYoIChhZGRTdGFSZXFQYXJhbS0+c3RhVHlwZSA9PSBTVEFfRU5UUllfUEVFUiB8fAorICAgICAgICAgYWRkU3RhUmVxUGFyYW0tPnN0YVR5cGUgPT0gU1RBX0VOVFJZX1RETFNfUEVFUikgJiYgYWRkU3RhUmVxUGFyYW0tPmh0Q2FwYWJsZSkKKyNlbHNlCiAgICAgICBpZihhZGRTdGFSZXFQYXJhbS0+c3RhVHlwZSA9PSBTVEFfRU5UUllfUEVFUiAmJiBhZGRTdGFSZXFQYXJhbS0+aHRDYXBhYmxlKQorI2VuZGlmCiAgICAgICB7CiAgICAgICAgICBwV0RBLT53ZGFTdGFJbmZvW2FkZFN0YVJlcVBhcmFtLT5zdGFJZHhdLmJzc0lkeCA9IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkaUNvbmZpZ1N0YVJzcC0+dWNCc3NJZHg7CkBAIC05Mjg4LDcgKzkyOTMsNyBAQAogICAgICAgc3lzdGVtUm9sZSA9IHdkYUdldEdsb2JhbFN5c3RlbVJvbGUocE1hYyk7CiAgICAgICBpZiAoKCBlU1lTVEVNX1VOS05PV05fUk9MRSA9PSBzeXN0ZW1Sb2xlICkgfHwgCiAgICAgICAgICAgKCggZVNZU1RFTV9TVEFfUk9MRSA9PSBzeXN0ZW1Sb2xlICkKLSNpZmRlZiBGRUFUVVJFX1dMQU5fQ0NYCisjaWYgZGVmaW5lZCBGRUFUVVJFX1dMQU5fQ0NYIHx8IGRlZmluZWQgRkVBVFVSRV9XTEFOX1RETFMKICAgICAgICAgICAmJiBmcm1UeXBlID09IEhBTF9UWFJYX0ZSTV84MDJfMTFfTUdNVAogI2VuZGlmCiAgICAgICAgICAgKSkKZGlmZiAtLWdpdCBhL0NPUkUvV0RJL0NQL2luYy93bGFuX3FjdF93ZGkuaCBiL0NPUkUvV0RJL0NQL2luYy93bGFuX3FjdF93ZGkuaAppbmRleCBhYmZkZjM0Li45Zjg1NjQ1IDEwMDY0NAotLS0gYS9DT1JFL1dESS9DUC9pbmMvd2xhbl9xY3Rfd2RpLmgKKysrIGIvQ09SRS9XREkvQ1AvaW5jL3dsYW5fcWN0X3dkaS5oCkBAIC0xMTA5LDcgKzExMDksMTAgQEAKICAgV0RJX1NUQV9FTlRSWV9TRUxGLAogICBXRElfU1RBX0VOVFJZX1BFRVIsCiAgIFdESV9TVEFfRU5UUllfQlNTSUQsCi0gIFdESV9TVEFfRU5UUllfQkNBU1QKKyAgV0RJX1NUQV9FTlRSWV9CQ0FTVCwKKyNpZmRlZiBGRUFUVVJFX1dMQU5fVERMUworICBXRElfU1RBX0VOVFJZX1RETFNfUEVFUiwKKyNlbmRpZgogfVdESV9TVEFFbnRyeVR5cGU7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9DT1JFL1dESS9DUC9zcmMvd2xhbl9xY3Rfd2RpLmMgYi9DT1JFL1dESS9DUC9zcmMvd2xhbl9xY3Rfd2RpLmMKaW5kZXggMzVlNTZkMi4uYTExNTBhZiAxMDA2NDQKLS0tIGEvQ09SRS9XREkvQ1Avc3JjL3dsYW5fcWN0X3dkaS5jCisrKyBiL0NPUkUvV0RJL0NQL3NyYy93bGFuX3FjdF93ZGkuYwpAQCAtMTA3LDcgKzEwNywxMSBAQAogICogYW5kIG90aGVyIHR3byBwbGFjZXMgLSB3bGFuX2hhbF9tc2cuaCBhbmQgaGFsTXNnLmMgKEZXIGZpbGUpCiAgKi8KIHN0YXRpYyBwbGFjZUhvbGRlckluQ2FwQml0bWFwIHN1cHBvcnRFbmFibGVkRmVhdHVyZXNbXSA9Ci0gICB7TUNDLCBQMlAsIERPVDExQUMsIFNMTV9TRVNTSU9OSVpBVElPTiwgRE9UMTFBQ19PUE1PREV9OworICAge01DQywgUDJQLCBET1QxMUFDLCBTTE1fU0VTU0lPTklaQVRJT04sIERPVDExQUNfT1BNT0RFCisjaWZkZWYgRkVBVFVSRV9XTEFOX1RETFMKKyAgICAgLFRETFMKKyNlbmRpZgorICAgfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKICAgIFdMQU4gREFMICBTdGF0ZSBNYWNoaW5lCg==