From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Tomas Mraz To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: new upstream version Date: Tue, 09 Jun 2026 12:42:38 GMT Message-ID: <178100895836.1.8765762779504744411.rpms-openssl-5eb4589d8303@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: 5eb4589d8303b19e28296f3731030ac9b06bde41 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IDVlYjQ1ODlkODMwM2IxOWUyODI5NmYzNzMxMDMw YWM5YjA2YmRlNDEKQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+ CkRhdGUgICA6IDIwMTItMDQtMjZUMTg6MTA6NTIrMDI6MDAKU3RhdHMgIDogKzIwNTM0Ly0yMTE5 NSBpbiA5IGZpbGUocykKVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBt cy9vcGVuc3NsL2MvNWViNDU4OWQ4MzAzYjE5ZTI4Mjk2ZjM3MzEwMzBhYzliMDZiZGU0MT9icmFu Y2g9cmViYXNlXzQwYmV0YQoKTG9nOgpuZXcgdXBzdHJlYW0gdmVyc2lvbgoKLS0tCmRpZmYgLS1n aXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCA5YTMwNjQyLi43ZDFmMmMxIDEwMDY0 NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTksMyArOSw0IEBAIG9wZW5z c2wtMS4wLjBhLXVzYS50YXIuYnoyCiAvb3BlbnNzbC0xLjAuMS1iZXRhMy11c2EudGFyLnh6CiAv b3BlbnNzbC0xLjAuMS11c2EudGFyLnh6CiAvb3BlbnNzbC0xLjAuMWEtdXNhLnRhci54egorL29w ZW5zc2wtMS4wLjFiLXVzYS50YXIueHoKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWZpcHMt cGtjczgucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWZpcHMtcGtjczgucGF0Y2gKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3ZTM2YQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5z c2wtMS4wLjAtZmlwcy1wa2NzOC5wYXRjaApAQCAtMCwwICsxLDE4OSBAQAorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vcGVtL3BlbV9hbGwuYy5wa2NzOCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9wZW0vcGVtX2FsbC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcGVtL3BlbV9hbGwuYy5w a2NzOAkyMDA2LTExLTA2IDIwOjUzOjM3LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjAvY3J5cHRvL3BlbS9wZW1fYWxsLmMJMjAxMi0wNC0yNiAxNzoxNzozNS43NjUzMTc2NTIgKzAy MDAKK0BAIC0xNDcsNyArMTQ3LDM3IEBAIElNUExFTUVOVF9QRU1fcncoUEtDUzcsIFBLQ1M3LCBQ RU1fU1RSSU4KKyAKKyBJTVBMRU1FTlRfUEVNX3J3KE5FVFNDQVBFX0NFUlRfU0VRVUVOQ0UsIE5F VFNDQVBFX0NFUlRfU0VRVUVOQ0UsCisgCQkJCQlQRU1fU1RSSU5HX1g1MDksIE5FVFNDQVBFX0NF UlRfU0VRVUVOQ0UpCisrI2lmZGVmIE9QRU5TU0xfRklQUworIAorK3N0YXRpYyBpbnQgZmlwc19Q RU1fd3JpdGVfYmlvX1ByaXZhdGVLZXkoQklPICpicCwgRVZQX1BLRVkgKngsIGNvbnN0IEVWUF9D SVBIRVIgKmVuYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGludCBrbGVuLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkK KysJeworKwkJaWYgKEZJUFNfbW9kZSgpKQorKwkJCXJldHVybiBQRU1fd3JpdGVfYmlvX1BLQ1M4 UHJpdmF0ZUtleShicCwgeCwgZW5jLAorKwkJCQkJCShjaGFyICopa3N0ciwga2xlbiwgY2IsIHUp OworKwkJZWxzZQorKyAgICAgICAgICAgICAgICAJcmV0dXJuIFBFTV9BU04xX3dyaXRlX2Jpbygo aTJkX29mX3ZvaWQgKilpMmRfUHJpdmF0ZUtleSwKKysgICAgICAgICAgICAgICAgKCh4LT50eXBl ID09IEVWUF9QS0VZX0RTQSk/UEVNX1NUUklOR19EU0E6KHgtPnR5cGUgPT0gRVZQX1BLRVlfUlNB KT9QRU1fU1RSSU5HX1JTQTpQRU1fU1RSSU5HX0VDUFJJVkFURUtFWSksCisrICAgICAgICAgICAg ICAgICAgICAgICAgYnAseCxlbmMsa3N0cixrbGVuLGNiLHUpOworKwl9CisrCisrI2lmbmRlZiBP UEVOU1NMX05PX0ZQX0FQSQorK3N0YXRpYyBpbnQgZmlwc19QRU1fd3JpdGVfUHJpdmF0ZUtleShG SUxFICpmcCwgRVZQX1BLRVkgKngsIGNvbnN0IEVWUF9DSVBIRVIgKmVuYywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIs IGludCBrbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkKKysJeworKwkJaWYgKEZJUFNfbW9kZSgp KQorKwkJCXJldHVybiBQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5KGZwLCB4LCBlbmMsCisrCQkJ CQkJKGNoYXIgKilrc3RyLCBrbGVuLCBjYiwgdSk7CisrCQllbHNlCisrICAgICAgICAgICAgICAg IAlyZXR1cm4gUEVNX0FTTjFfd3JpdGUoKGkyZF9vZl92b2lkICopaTJkX1ByaXZhdGVLZXksCisr ICAgICAgICAgICAgICAgICgoeC0+dHlwZSA9PSBFVlBfUEtFWV9EU0EpP1BFTV9TVFJJTkdfRFNB Oih4LT50eXBlID09IEVWUF9QS0VZX1JTQSk/UEVNX1NUUklOR19SU0E6UEVNX1NUUklOR19FQ1BS SVZBVEVLRVkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGZwLHgsZW5jLGtzdHIsa2xlbixj Yix1KTsKKysJfQorKyNlbmRpZgorKworKyNlbmRpZgorIAorICNpZm5kZWYgT1BFTlNTTF9OT19S U0EKKyAKK0BAIC0xOTMsNyArMjIzLDQ5IEBAIFJTQSAqUEVNX3JlYWRfUlNBUHJpdmF0ZUtleShG SUxFICpmcCwgUlMKKyAKKyAjZW5kaWYKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisraW50 IFBFTV93cml0ZV9iaW9fUlNBUHJpdmF0ZUtleShCSU8gKmJwLCBSU0EgKngsIGNvbnN0IEVWUF9D SVBIRVIgKmVuYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGludCBrbGVuLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkK Kyt7CisrCUVWUF9QS0VZICprOworKwlpbnQgcmV0OworKwlrID0gRVZQX1BLRVlfbmV3KCk7Cisr CWlmICghaykKKysJCXJldHVybiAwOworKwlFVlBfUEtFWV9zZXQxX1JTQShrLCB4KTsKKysKKysJ cmV0ID0gZmlwc19QRU1fd3JpdGVfYmlvX1ByaXZhdGVLZXkoYnAsIGssIGVuYywga3N0ciwga2xl biwgY2IsIHUpOworKwlFVlBfUEtFWV9mcmVlKGspOworKwlyZXR1cm4gcmV0OworK30KKysKKysj aWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCisraW50IFBFTV93cml0ZV9SU0FQcml2YXRlS2V5KEZJ TEUgKmZwLCBSU0EgKngsIGNvbnN0IEVWUF9DSVBIRVIgKmVuYywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGludCBr bGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVt X3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkKKyt7CisrCUVWUF9QS0VZICprOworKwlpbnQgcmV0 OworKwlrID0gRVZQX1BLRVlfbmV3KCk7CisrCWlmICghaykKKysJCXJldHVybiAwOworKworKwlF VlBfUEtFWV9zZXQxX1JTQShrLCB4KTsKKysKKysJcmV0ID0gZmlwc19QRU1fd3JpdGVfUHJpdmF0 ZUtleShmcCwgaywgZW5jLCBrc3RyLCBrbGVuLCBjYiwgdSk7CisrCUVWUF9QS0VZX2ZyZWUoayk7 CisrCXJldHVybiByZXQ7CisrfQorKyNlbmRpZgorKworKyNlbHNlCisrCisgSU1QTEVNRU5UX1BF TV93cml0ZV9jYl9jb25zdChSU0FQcml2YXRlS2V5LCBSU0EsIFBFTV9TVFJJTkdfUlNBLCBSU0FQ cml2YXRlS2V5KQorKworKyNlbmRpZgorKworIElNUExFTUVOVF9QRU1fcndfY29uc3QoUlNBUHVi bGljS2V5LCBSU0EsIFBFTV9TVFJJTkdfUlNBX1BVQkxJQywgUlNBUHVibGljS2V5KQorIElNUExF TUVOVF9QRU1fcncoUlNBX1BVQktFWSwgUlNBLCBQRU1fU1RSSU5HX1BVQkxJQywgUlNBX1BVQktF WSkKKyAKK0BAIC0yMjMsNyArMjk1LDQ3IEBAIERTQSAqUEVNX3JlYWRfYmlvX0RTQVByaXZhdGVL ZXkoQklPICpicCwKKyAJcmV0dXJuIHBrZXlfZ2V0X2RzYShwa3RtcCwgZHNhKTsJLyogd2lsbCBm cmVlIHBrdG1wICovCisgfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgUEVNX3dy aXRlX2Jpb19EU0FQcml2YXRlS2V5KEJJTyAqYnAsIERTQSAqeCwgY29uc3QgRVZQX0NJUEhFUiAq ZW5jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY2hhciAqa3N0ciwgaW50IGtsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dvcmRfY2IgKmNiLCB2b2lkICp1KQorK3sKKysJ RVZQX1BLRVkgKms7CisrCWludCByZXQ7CisrCWsgPSBFVlBfUEtFWV9uZXcoKTsKKysJaWYgKCFr KQorKwkJcmV0dXJuIDA7CisrCUVWUF9QS0VZX3NldDFfRFNBKGssIHgpOworKworKwlyZXQgPSBm aXBzX1BFTV93cml0ZV9iaW9fUHJpdmF0ZUtleShicCwgaywgZW5jLCBrc3RyLCBrbGVuLCBjYiwg dSk7CisrCUVWUF9QS0VZX2ZyZWUoayk7CisrCXJldHVybiByZXQ7CisrfQorKworKyNpZm5kZWYg T1BFTlNTTF9OT19GUF9BUEkKKytpbnQgUEVNX3dyaXRlX0RTQVByaXZhdGVLZXkoRklMRSAqZnAs IERTQSAqeCwgY29uc3QgRVZQX0NJUEhFUiAqZW5jLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqa3N0ciwgaW50IGtsZW4sCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW1fcGFzc3dv cmRfY2IgKmNiLCB2b2lkICp1KQorK3sKKysJRVZQX1BLRVkgKms7CisrCWludCByZXQ7CisrCWsg PSBFVlBfUEtFWV9uZXcoKTsKKysJaWYgKCFrKQorKwkJcmV0dXJuIDA7CisrCUVWUF9QS0VZX3Nl dDFfRFNBKGssIHgpOworKwlyZXQgPSBmaXBzX1BFTV93cml0ZV9Qcml2YXRlS2V5KGZwLCBrLCBl bmMsIGtzdHIsIGtsZW4sIGNiLCB1KTsKKysJRVZQX1BLRVlfZnJlZShrKTsKKysJcmV0dXJuIHJl dDsKKyt9CisrI2VuZGlmCisrCisrI2Vsc2UKKysKKyBJTVBMRU1FTlRfUEVNX3dyaXRlX2NiX2Nv bnN0KERTQVByaXZhdGVLZXksIERTQSwgUEVNX1NUUklOR19EU0EsIERTQVByaXZhdGVLZXkpCisr CisrI2VuZGlmCisrCisgSU1QTEVNRU5UX1BFTV9ydyhEU0FfUFVCS0VZLCBEU0EsIFBFTV9TVFJJ TkdfUFVCTElDLCBEU0FfUFVCS0VZKQorIAorICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKK0BA IC0yNjksOCArMzgxLDQ5IEBAIEVDX0tFWSAqUEVNX3JlYWRfYmlvX0VDUHJpdmF0ZUtleShCSU8g KmIKKyAKKyBJTVBMRU1FTlRfUEVNX3J3X2NvbnN0KEVDUEtQYXJhbWV0ZXJzLCBFQ19HUk9VUCwg UEVNX1NUUklOR19FQ1BBUkFNRVRFUlMsIEVDUEtQYXJhbWV0ZXJzKQorIAorKworKworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgUEVNX3dyaXRlX2Jpb19FQ1ByaXZhdGVLZXkoQklPICpi cCwgRUNfS0VZICp4LCBjb25zdCBFVlBfQ0lQSEVSICplbmMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICprc3RyLCBpbnQga2xl biwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbV9w YXNzd29yZF9jYiAqY2IsIHZvaWQgKnUpCisreworKwlFVlBfUEtFWSAqazsKKysJaW50IHJldDsK KysJayA9IEVWUF9QS0VZX25ldygpOworKwlpZiAoIWspCisrCQlyZXR1cm4gMDsKKysJRVZQX1BL RVlfc2V0MV9FQ19LRVkoaywgeCk7CisrCisrCXJldCA9IGZpcHNfUEVNX3dyaXRlX2Jpb19Qcml2 YXRlS2V5KGJwLCBrLCBlbmMsIGtzdHIsIGtsZW4sIGNiLCB1KTsKKysJRVZQX1BLRVlfZnJlZShr KTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisrI2lmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQorK2lu dCBQRU1fd3JpdGVfRUNQcml2YXRlS2V5KEZJTEUgKmZwLCBFQ19LRVkgKngsIGNvbnN0IEVWUF9D SVBIRVIgKmVuYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgKmtzdHIsIGludCBrbGVuLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVtX3Bhc3N3b3JkX2NiICpjYiwgdm9pZCAqdSkK Kyt7CisrCUVWUF9QS0VZICprOworKwlpbnQgcmV0OworKwlrID0gRVZQX1BLRVlfbmV3KCk7Cisr CWlmICghaykKKysJCXJldHVybiAwOworKwlFVlBfUEtFWV9zZXQxX0VDX0tFWShrLCB4KTsKKysJ cmV0ID0gZmlwc19QRU1fd3JpdGVfUHJpdmF0ZUtleShmcCwgaywgZW5jLCBrc3RyLCBrbGVuLCBj YiwgdSk7CisrCUVWUF9QS0VZX2ZyZWUoayk7CisrCXJldHVybiByZXQ7CisrfQorKyNlbmRpZgor KworKyNlbHNlCisrCisgSU1QTEVNRU5UX1BFTV93cml0ZV9jYihFQ1ByaXZhdGVLZXksIEVDX0tF WSwgUEVNX1NUUklOR19FQ1BSSVZBVEVLRVksIEVDUHJpdmF0ZUtleSkKKyAKKysjZW5kaWYKKysK KyBJTVBMRU1FTlRfUEVNX3J3KEVDX1BVQktFWSwgRUNfS0VZLCBQRU1fU1RSSU5HX1BVQkxJQywg RUNfUFVCS0VZKQorIAorICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKCmRpZmYgLS1naXQgYS9v cGVuc3NsLTEuMC4xLWJldGEyLXNzbC1vcC1hbGwucGF0Y2ggYi9vcGVuc3NsLTEuMC4xLWJldGEy LXNzbC1vcC1hbGwucGF0Y2gKaW5kZXggZTgwMzM4Ni4uMzI1OWQ4YyAxMDA2NDQKLS0tIGEvb3Bl bnNzbC0xLjAuMS1iZXRhMi1zc2wtb3AtYWxsLnBhdGNoCisrKyBiL29wZW5zc2wtMS4wLjEtYmV0 YTItc3NsLW9wLWFsbC5wYXRjaApAQCAtMTUsNyArMTUsNyBAQCBkaWZmIC11cCBvcGVuc3NsLTEu MC4xLWJldGEyL3NzbC9zc2wuaC5vcC1hbGwgb3BlbnNzbC0xLjAuMS1iZXRhMi9zc2wvc3NsLmgK ICAvKiBTU0xfT1BfQUxMOiB2YXJpb3VzIGJ1ZyB3b3JrYXJvdW5kcyB0aGF0IHNob3VsZCBiZSBy YXRoZXIgaGFybWxlc3MuCiAgICogICAgICAgICAgICAgVGhpcyB1c2VkIHRvIGJlIDB4MDAwRkZG RkZMIGJlZm9yZSAwLjkuNy4gKi8KIC0jZGVmaW5lIFNTTF9PUF9BTEwJCQkJCTB4ODAwMDBCRkZM Ci0rI2RlZmluZSBTU0xfT1BfQUxMCQkJCQkweDgwMDAwRkY3TCAvKiB3ZSBzdGlsbCBoYXZlIHRv IGluY2x1ZGUgU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUyAqLworKyNkZWZpbmUg U1NMX09QX0FMTAkJCQkJMHg4MDAwMEJGN0wgLyogd2Ugc3RpbGwgaGF2ZSB0byBpbmNsdWRlIFNT TF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMgKi8KICAKICAvKiBEVExTIG9wdGlvbnMg Ki8KICAjZGVmaW5lIFNTTF9PUF9OT19RVUVSWV9NVFUgICAgICAgICAgICAgICAgIDB4MDAwMDEw MDBMCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMS12ZXJzaW9uLnBhdGNoIGIvb3BlbnNzbC0x LjAuMS12ZXJzaW9uLnBhdGNoCmluZGV4IGQ1MzVhYjQuLjhhY2QwYWUgMTAwNjQ0Ci0tLSBhL29w ZW5zc2wtMS4wLjEtdmVyc2lvbi5wYXRjaAorKysgYi9vcGVuc3NsLTEuMC4xLXZlcnNpb24ucGF0 Y2gKQEAgLTI2LDcgKzI2LDcgQEAgZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS9jcnlwdG8vb3BlbnNz bHYuaC52ZXJzaW9uIG9wZW5zc2wtMS4wLjEvY3J5cHRvL29wZW5zc2x2LmgKICAgKi8KICAjZGVm aW5lIFNITElCX1ZFUlNJT05fSElTVE9SWSAiIgogLSNkZWZpbmUgU0hMSUJfVkVSU0lPTl9OVU1C RVIgIjEuMC4wIgotKyNkZWZpbmUgU0hMSUJfVkVSU0lPTl9OVU1CRVIgIjEuMC4xYSIKKysjZGVm aW5lIFNITElCX1ZFUlNJT05fTlVNQkVSICIxLjAuMWIiCiAgCiAgCiAgI2VuZGlmIC8qIEhFQURF Ul9PUEVOU1NMVl9IICovCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMWEtYmFja3BvcnQucGF0 Y2ggYi9vcGVuc3NsLTEuMC4xYS1iYWNrcG9ydC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggYjJjZDc2OS4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4xYS1iYWNrcG9ydC5w YXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9ldnAvZV9yYzRfaG1hY19tZDUuYy5iYWNrcG9ydCBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZXZwL2VfcmM0X2htYWNfbWQ1LmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZw L2VfcmM0X2htYWNfbWQ1LmMuYmFja3BvcnQJMjAxMi0wNC0xOCAxOTo1MTozMy4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2VfcmM0X2htYWNfbWQ1LmMJMjAx Mi0wNC0yMCAwOToyMDoyOS40MTE4NjExMzAgKzAyMDAKLUBAIC0xMjEsNiArMTIxLDcgQEAgc3Rh dGljIGludCByYzRfaG1hY19tZDVfY2lwaGVyKEVWUF9DSVBIRQotIAkJbWQ1X29mZiA9IE1ENV9D QkxPQ0sta2V5LT5tZC5udW0sCi0gCQlibG9ja3M7Ci0gCXVuc2lnbmVkIGludCBsOwotKwlleHRl cm4gdW5zaWduZWQgaW50IE9QRU5TU0xfaWEzMmNhcF9QW107Ci0gI2VuZGlmCi0gCXNpemVfdAlw bGVuID0ga2V5LT5wYXlsb2FkX2xlbmd0aDsKLSAKLUBAIC0xMzIsNyArMTMzLDggQEAgc3RhdGlj IGludCByYzRfaG1hY19tZDVfY2lwaGVyKEVWUF9DSVBIRQotIAkJLyogY2lwaGVyIGhhcyB0byAi ZmFsbCBiZWhpbmQiICovCi0gCQlpZiAocmM0X29mZj5tZDVfb2ZmKSBtZDVfb2ZmKz1NRDVfQ0JM T0NLOwotIAotLQkJaWYgKHBsZW4+bWQ1X29mZiAmJiAoYmxvY2tzPShwbGVuLW1kNV9vZmYpL01E NV9DQkxPQ0spKSB7Ci0rCQlpZiAocGxlbj5tZDVfb2ZmICYmIChibG9ja3M9KHBsZW4tbWQ1X29m ZikvTUQ1X0NCTE9DSykgJiYKLSsJCSAgICAoT1BFTlNTTF9pYTMyY2FwX1BbMF0mKDE8PDIwKSk9 PTApIHsKLSAJCQlNRDVfVXBkYXRlKCZrZXktPm1kLGluLG1kNV9vZmYpOwotIAkJCVJDNCgma2V5 LT5rcyxyYzRfb2ZmLGluLG91dCk7Ci0gCi1AQCAtMTcyLDcgKzE3NCw4IEBAIHN0YXRpYyBpbnQg cmM0X2htYWNfbWQ1X2NpcGhlcihFVlBfQ0lQSEUKLSAJCWlmIChtZDVfb2ZmPnJjNF9vZmYpCXJj NF9vZmYgKz0gMipNRDVfQ0JMT0NLOwotIAkJZWxzZQkJCXJjNF9vZmYgKz0gTUQ1X0NCTE9DSzsK LSAKLS0JCWlmIChsZW4+cmM0X29mZiAmJiAoYmxvY2tzPShsZW4tcmM0X29mZikvTUQ1X0NCTE9D SykpIHsKLSsJCWlmIChsZW4+cmM0X29mZiAmJiAoYmxvY2tzPShsZW4tcmM0X29mZikvTUQ1X0NC TE9DSykgJiYKLSsJCSAgICAoT1BFTlNTTF9pYTMyY2FwX1BbMF0mKDE8PDIwKSk9PTApIHsKLSAJ CQlSQzQoJmtleS0+a3MscmM0X29mZixpbixvdXQpOwotIAkJCU1ENV9VcGRhdGUoJmtleS0+bWQs b3V0LG1kNV9vZmYpOwotIAotQEAgLTI4OSw4ICsyOTIsNiBAQCBzdGF0aWMgRVZQX0NJUEhFUiBy NF9obWFjX21kNV9jaXBoZXI9Ci0gCi0gY29uc3QgRVZQX0NJUEhFUiAqRVZQX3JjNF9obWFjX21k NSh2b2lkKQotIAl7Ci0tCWV4dGVybiB1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbXTsK LS0JLyogUkM0X0NIQVIgZmxhZyAtLS0tLS0tLS0tLS12dnZ2diAqLwotLQlyZXR1cm4oT1BFTlNT TF9pYTMyY2FwX1BbMF0mKDE8PDIwKSA/IE5VTEwgOiAmcjRfaG1hY19tZDVfY2lwaGVyKTsKLSsJ cmV0dXJuKCZyNF9obWFjX21kNV9jaXBoZXIpOwotIAl9Ci0gI2VuZGlmCgpkaWZmIC0tZ2l0IGEv b3BlbnNzbC0xLjAuMWEtZmlwcy5wYXRjaCBiL29wZW5zc2wtMS4wLjFhLWZpcHMucGF0Y2gKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NTQ0OTUuLjAwMDAwMDAKLS0tIGEvb3BlbnNz bC0xLjAuMWEtZmlwcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMTQ3ICswLDAgQEAKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2FwcHMvcGtjczEyLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9h cHBzL3BrY3MxMi5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvYXBwcy9wa2NzMTIuYy5maXBzCTIwMTEt MDMtMTMgMTk6MjA6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWEvYXBwcy9w a2NzMTIuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjIyOTc4NDk0OCArMDIwMAotQEAgLTY3LDYgKzY3 LDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9wZW0u aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotICNkZWZpbmUgUFJPRyBwa2Nz MTJfbWFpbgotIAotQEAgLTEzMCw2ICsxMzMsMTEgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQotIAotICAgICBhcHBzX3N0YXJ0dXAoKTsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rICAgIGlmIChGSVBTX21vZGUoKSkKLSsJY2VydF9wYmUgPSBrZXlfcGJlOyAvKiBjYW5ub3Qg dXNlIFJDMiBpbiB0aGUgRklQUyBtb2RlICovCi0rI2VuZGlmCi0rCi0gICAgIGVuYyA9IEVWUF9k ZXNfZWRlM19jYmMoKTsKLSAgICAgaWYgKGJpb19lcnIgPT0gTlVMTCApIGJpb19lcnIgPSBCSU9f bmV3X2ZwIChzdGRlcnIsIEJJT19OT0NMT1NFKTsKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFh L2FwcHMvc3BlZWQuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2FwcHMvc3BlZWQuYwotLS0tIG9wZW5z c2wtMS4wLjFhL2FwcHMvc3BlZWQuYy5maXBzCTIwMTItMDEtMTEgMjI6NDk6MTYuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWEvYXBwcy9zcGVlZC5jCTIwMTItMDQtMjAgMDk6MDc6 MDYuMjMwNzg0OTY5ICswMjAwCi1AQCAtMTk1LDcgKzE5NSw2IEBACi0gI2lmZGVmIE9QRU5TU0xf RE9JTkdfTUFLRURFUEVORAotICN1bmRlZiBBRVNfc2V0X2VuY3J5cHRfa2V5Ci0gI3VuZGVmIEFF U19zZXRfZGVjcnlwdF9rZXkKLS0jdW5kZWYgREVTX3NldF9rZXlfdW5jaGVja2VkCi0gI2VuZGlm Ci0gI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tleQotICNkZWZpbmUgQ0FTVF9z ZXRfa2V5CXByaXZhdGVfQ0FTVF9zZXRfa2V5Ci1AQCAtMjAzLDcgKzIwMiw2IEBACi0gI2RlZmlu ZSBTRUVEX3NldF9rZXkJcHJpdmF0ZV9TRUVEX3NldF9rZXkKLSAjZGVmaW5lIFJDMl9zZXRfa2V5 CXByaXZhdGVfUkMyX3NldF9rZXkKLSAjZGVmaW5lIFJDNF9zZXRfa2V5CXByaXZhdGVfUkM0X3Nl dF9rZXkKLS0jZGVmaW5lIERFU19zZXRfa2V5X3VuY2hlY2tlZAlwcml2YXRlX0RFU19zZXRfa2V5 X3VuY2hlY2tlZAotICNkZWZpbmUgQUVTX3NldF9lbmNyeXB0X2tleQlwcml2YXRlX0FFU19zZXRf ZW5jcnlwdF9rZXkKLSAjZGVmaW5lIEFFU19zZXRfZGVjcnlwdF9rZXkJcHJpdmF0ZV9BRVNfc2V0 X2RlY3J5cHRfa2V5Ci0gI2RlZmluZSBDYW1lbGxpYV9zZXRfa2V5CXByaXZhdGVfQ2FtZWxsaWFf c2V0X2tleQotQEAgLTk0MSw3ICs5MzksMTIgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQotICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLSAJCQlpZiAoc3RyY21wKCphcmd2LCJyc2Ei KSA9PSAwKQotIAkJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQkJCWlmICghRklQU19tb2Rl KCkpCi0rI2VuZGlmCi0rCQkJCXsKLSAJCQlyc2FfZG9pdFtSX1JTQV81MTJdPTE7Ci0rCQkJCX0K LSAJCQlyc2FfZG9pdFtSX1JTQV8xMDI0XT0xOwotIAkJCXJzYV9kb2l0W1JfUlNBXzIwNDhdPTE7 Ci0gCQkJcnNhX2RvaXRbUl9SU0FfNDA5Nl09MTsKLUBAIC05NTEsNyArOTU0LDEyIEBAIGludCBN QUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0gCQkJ aWYgKHN0cmNtcCgqYXJndiwiZHNhIikgPT0gMCkKLSAJCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwkJCQlpZiAoIUZJUFNfbW9kZSgpKQotKyNlbmRpZgotKwkJCQl7Ci0gCQkJZHNhX2RvaXRb Ul9EU0FfNTEyXT0xOwotKwkJCQl9Ci0gCQkJZHNhX2RvaXRbUl9EU0FfMTAyNF09MTsKLSAJCQlk c2FfZG9pdFtSX0RTQV8yMDQ4XT0xOwotIAkJCX0KLUBAIC0xMjI2LDMwICsxMjM0LDU0IEBAIGlu dCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJQUVTX3NldF9lbmNyeXB0X2tleShrZXkz MiwyNTYsJmFlc19rczMpOwotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19DQU1FTExJQQot KwlpZiAoZG9pdFtEX0NCQ18xMjhfQ01MXSB8fCBkb2l0W0RfQ0JDXzE5Ml9DTUxdIHx8IGRvaXRb RF9DQkNfMjU2X0NNTF0pCi0rCSAgICB7Ci0gCUNhbWVsbGlhX3NldF9rZXkoa2V5MTYsMTI4LCZj YW1lbGxpYV9rczEpOwotIAlDYW1lbGxpYV9zZXRfa2V5KGNrZXkyNCwxOTIsJmNhbWVsbGlhX2tz Mik7Ci0gCUNhbWVsbGlhX3NldF9rZXkoY2tleTMyLDI1NiwmY2FtZWxsaWFfa3MzKTsKLSsJICAg IH0KLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fSURFQQotKwlpZiAoZG9pdFtEX0NCQ19J REVBXSkKLSsJICAgIHsKLSAJaWRlYV9zZXRfZW5jcnlwdF9rZXkoa2V5MTYsJmlkZWFfa3MpOwot KwkgICAgfQotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19TRUVECi0rCWlmIChkb2l0W0Rf Q0JDX1NFRURdKQotKwkgICAgewotIAlTRUVEX3NldF9rZXkoa2V5MTYsJnNlZWRfa3MpOwotKwkg ICAgfQotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19SQzQKLSsJaWYgKGRvaXRbRF9SQzRd KQotKwkgICAgewotIAlSQzRfc2V0X2tleSgmcmM0X2tzLDE2LGtleTE2KTsKLSsJICAgIH0KLSAj ZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUkMyCi0rCWlmIChkb2l0W0RfQ0JDX1JDMl0pCi0r CSAgICB7Ci0gCVJDMl9zZXRfa2V5KCZyYzJfa3MsMTYsa2V5MTYsMTI4KTsKLSsJICAgIH0KLSAj ZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUkM1Ci0rCWlmIChkb2l0W0RfQ0JDX1JDNV0pCi0r CSAgICB7Ci0gCVJDNV8zMl9zZXRfa2V5KCZyYzVfa3MsMTYsa2V5MTYsMTIpOwotKwkgICAgfQot ICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19CRgotKwlpZiAoZG9pdFtEX0NCQ19CRl0pCi0r CSAgICB7Ci0gCUJGX3NldF9rZXkoJmJmX2tzLDE2LGtleTE2KTsKLSsJICAgIH0KLSAjZW5kaWYK LSAjaWZuZGVmIE9QRU5TU0xfTk9fQ0FTVAotKwlpZiAoZG9pdFtEX0NCQ19DQVNUXSkKLSsJICAg IHsKLSAJQ0FTVF9zZXRfa2V5KCZjYXN0X2tzLDE2LGtleTE2KTsKLSsJICAgIH0KLSAjZW5kaWYK LSAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gCW1lbXNldChyc2FfYywwLHNpemVvZihyc2FfYykp OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvQ29uZmlndXJlLmZpcHMgb3BlbnNzbC0xLjAuMWEv Q29uZmlndXJlCi0tLS0gb3BlbnNzbC0xLjAuMWEvQ29uZmlndXJlLmZpcHMJMjAxMi0wNC0yMCAw OTowNzowNi4xOTA3ODQxMTEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9Db25maWd1cmUJMjAx Mi0wNC0yMCAwOTowNzowNi4yMzI3ODUwMTEgKzAyMDAKLUBAIC05OTMsMTEgKzk5Myw2IEBAIGlm IChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQKLSAJJGRpc2FibGVkeyJzc2wy In0gPSAiZm9yY2VkIjsKLSAJfQotIAotLWlmICgkZmlwcyAmJiAkZmlwc2xpYmRpciBlcSAiIikK LS0JewotLQkkZmlwc2xpYmRpciA9ICRmaXBzZGlyIC4gIi9saWIvIjsKLS0JfQotLQotICMgUlNB WCBFTkdJTkUgc2V0cyBkZWZhdWx0IG5vbi1GSVBTIFJTQSBtZXRob2QuCi0gaWYgKCRmaXBzKQot IAl7Ci1AQCAtMTQ3Miw3ICsxNDY3LDYgQEAgJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX0dG Mm0iIGlmICgkYgotIGlmICgkZmlwcykKLSAJewotIAkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0i I2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7Ci0tCSRjZmxhZ3MgLj0gIiAtSVwkKEZJUFNESVIpL2lu Y2x1ZGUiOwotIAl9Ci0gCi0gJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVpZF9v YmogPX4gL1wubyQvKTsKLUBAIC0xNjU5LDkgKzE2NTMsMTIgQEAgd2hpbGUgKDxJTj4pCi0gCi0g CXMvXkZJUFNESVI9LiovRklQU0RJUj0kZmlwc2Rpci87Ci0gCXMvXkZJUFNMSUJESVI9LiovRklQ U0xJQkRJUj0kZmlwc2xpYmRpci87Ci0tCXMvXkZJUFNDQU5MSUI9LiovRklQU0NBTkxJQj1saWJj cnlwdG8vIGlmICRmaXBzOwotIAlzL15CQVNFQUREUj0uKi9CQVNFQUREUj0kYmFzZWFkZHIvOwot IAotKwlpZiAoJGZpcHMpCi0rCQl7Ci0rCQlzL15GSVBTPS4qL0ZJUFM9eWVzLzsKLSsJCX0KLSAJ cy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hhcmVkX3RhcmdldC87Ci0gCXMvXlNI TElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsvOwotIAlzL15TSEFSRURfTElCUz0u Ki9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NMKS8gaWYgKCEkbm9f c2hhcmVkKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9hZXMvYWVzX21pc2MuYy5m aXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9hZXMvYWVzX21pc2MuYwotLS0tIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9hZXMvYWVzX21pc2MuYy5maXBzCTIwMTEtMDYtMDUgMTk6MzY6MzMuMDAwMDAw MDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Flcy9hZXNfbWlzYy5jCTIwMTIt MDQtMjAgMDk6MDc6MDYuMjMyNzg1MDExICswMjAwCi1AQCAtNjksMTcgKzY5LDExIEBAIGNvbnN0 IGNoYXIgKkFFU19vcHRpb25zKHZvaWQpIHsKLSBpbnQgQUVTX3NldF9lbmNyeXB0X2tleShjb25z dCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLSAJCQlBRVNfS0VZICpr ZXkpCi0gCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWZpcHNfY2lwaGVyX2Fib3J0KEFFUyk7 Ci0tI2VuZGlmCi0gCXJldHVybiBwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXkodXNlcktleSwg Yml0cywga2V5KTsKLSAJfQotIAotIGludCBBRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2ln bmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotIAkJCUFFU19LRVkgKmtleSkKLSAJ ewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JZmlwc19jaXBoZXJfYWJvcnQoQUVTKTsKLS0jZW5k aWYKLSAJcmV0dXJuIHByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBr ZXkpOwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vY21hYy9jbWFjLmMuZmlw cyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vY21hYy9jbWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vY21hYy9jbWFjLmMuZmlwcwkyMDEyLTA0LTExIDE3OjExOjE2LjAwMDAwMDAwMCArMDIw MAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9jbWFjL2NtYWMuYwkyMDEyLTA0LTIwIDA5OjA3 OjA2LjIzMzc4NTAzMyArMDIwMAotQEAgLTEwNywxMyArMTA3LDYgQEAgQ01BQ19DVFggKkNNQUNf Q1RYX25ldyh2b2lkKQotIAotIHZvaWQgQ01BQ19DVFhfY2xlYW51cChDTUFDX0NUWCAqY3R4KQot IAl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0 eC5lbmdpbmUpCi0tCQl7Ci0tCQlGSVBTX2NtYWNfY3R4X2NsZWFudXAoY3R4KTsKLS0JCXJldHVy bjsKLS0JCX0KLS0jZW5kaWYKLSAJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4LT5jY3R4KTsK LSAJT1BFTlNTTF9jbGVhbnNlKGN0eC0+dGJsLCBFVlBfTUFYX0JMT0NLX0xFTkdUSCk7Ci0gCU9Q RU5TU0xfY2xlYW5zZShjdHgtPmsxLCBFVlBfTUFYX0JMT0NLX0xFTkdUSCk7Ci1AQCAtMTY0LDEx ICsxNTcsNiBAQCBpbnQgQ01BQ19Jbml0KENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQKLSAJCQlF VlBlcnIoRVZQX0ZfQ01BQ19JTklULCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0gCQkJcmV0 dXJuIDA7Ci0gCQkJfQotLQkJLyogT3RoZXIgYWxnb3JpdGhtIGJsb2NraW5nIHdpbGwgYmUgZG9u ZSBpbiBGSVBTX2NtYWNfaW5pdCwKLS0JCSAqIHZpYSBGSVBTX2NpcGhlcmluaXQoKS4KLS0JCSAq LwotLQkJaWYgKCFpbXBsICYmICFjdHgtPmNjdHguZW5naW5lKQotLQkJCXJldHVybiBGSVBTX2Nt YWNfaW5pdChjdHgsIGtleSwga2V5bGVuLCBjaXBoZXIsIE5VTEwpOwotIAkJfQotICNlbmRpZgot IAkvKiBBbGwgemVyb3MgbWVhbnMgcmVzdGFydCAqLwotQEAgLTIxNiwxMCArMjA0LDYgQEAgaW50 IENNQUNfVXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaQotIAl7Ci0gCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmRhdGEgPSBpbjsKLSAJc2l6ZV90IGJsOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMK LS0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5lKQotLQkJcmV0dXJuIEZJUFNf Y21hY191cGRhdGUoY3R4LCBpbiwgZGxlbik7Ci0tI2VuZGlmCi0gCWlmIChjdHgtPm5sYXN0X2Js b2NrID09IC0xKQotIAkJcmV0dXJuIDA7Ci0gCWlmIChkbGVuID09IDApCi1AQCAtMjYxLDEwICsy NDUsNiBAQCBpbnQgQ01BQ19VcGRhdGUoQ01BQ19DVFggKmN0eCwgY29uc3Qgdm9pCi0gaW50IENN QUNfRmluYWwoQ01BQ19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgKnBvdXRs ZW4pCi0gCXsKLSAJaW50IGksIGJsLCBsYjsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChG SVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKLS0JCXJldHVybiBGSVBTX2NtYWNfZmlu YWwoY3R4LCBvdXQsIHBvdXRsZW4pOwotLSNlbmRpZgotIAlpZiAoY3R4LT5ubGFzdF9ibG9jayA9 PSAtMSkKLSAJCXJldHVybiAwOwotIAlibCA9IEVWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemUoJmN0 eC0+Y2N0eCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vY3J5cHRvLmguZmlwcyBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vY3J5cHRvLmgKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8v Y3J5cHRvLmguZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA1Ljk1OTc3OTE1OSArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9jcnlwdG8uaAkyMDEyLTA0LTIwIDA5OjA3OjA2LjIzMzc4NTAz MyArMDIwMAotQEAgLTU1MywyNCArNTUzLDI5IEBAIGludCBGSVBTX21vZGVfc2V0KGludCByKTsK LSB2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKTsKLSAKLSAjZGVmaW5lIGZpcHNfbWRfaW5pdChhbGcp IGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcpCi0rI2RlZmluZSBub25maXBzX21kX2luaXQoYWxn KSBub25maXBzX21kX2luaXRfY3R4KGFsZywgYWxnKQotKyNkZWZpbmUgZmlwc19tZF9pbml0X2N0 eChhbGcsIGN4KSBcCi0rCWludCBhbGcjI19Jbml0KGN4IyNfQ1RYICpjKQotIAotICNpZmRlZiBP UEVOU1NMX0ZJUFMKLS0jZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAotKyNkZWZp bmUgbm9uZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCi0gCWludCBhbGcjI19Jbml0KGN4IyNf Q1RYICpjKSBcCi0gCXsgXAotIAlpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18s IF9fTElORV9fLCBcCi0tCQkiTG93IGxldmVsIEFQSSBjYWxsIHRvIGRpZ2VzdCAiICNhbGcgIiBm b3JiaWRkZW4gaW4gRklQUyBtb2RlISIpOyBcCi0rCQkiRGlnZXN0ICIgI2FsZyAiIGZvcmJpZGRl biBpbiBGSVBTIG1vZGUhIik7IFwKLSAJcmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMpOyBc Ci0gCX0gXAotIAlpbnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQoY3gjI19DVFggKmMpCi0gCi0gI2Rl ZmluZSBmaXBzX2NpcGhlcl9hYm9ydChhbGcpIFwKLSAJaWYgKEZJUFNfbW9kZSgpKSBPcGVuU1NM RGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAotLQkJIkxvdyBsZXZlbCBBUEkgY2FsbCB0byBjaXBo ZXIgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKQotKwkJIkNpcGhlciAiICNhbGcg IiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCi0rCi0rLyogZGllIGlmIEZJUFMgc2VsZnRlc3Qg ZmFpbGVkICovCi0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpOwotIAotICNlbHNlCi0t I2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKLS0JaW50IGFsZyMjX0luaXQoY3gj I19DVFggKmMpCi0rI2RlZmluZSBub25maXBzX21kX2luaXRfY3R4KGFsZywgY3gpIGZpcHNfbWRf aW5pdF9jdHgoYWxnLCBjeCkKLSAjZGVmaW5lIGZpcHNfY2lwaGVyX2Fib3J0KGFsZykgd2hpbGUo MCkKLSAjZW5kaWYKLSAKLUBAIC01ODAsNiArNTg1LDkgQEAgdm9pZCBPUEVOU1NMX2luaXQodm9p ZCk7Ci0gICovCi0gdm9pZCBFUlJfbG9hZF9DUllQVE9fc3RyaW5ncyh2b2lkKTsKLSAKLSsjZGVm aW5lIE9QRU5TU0xfSEFWRV9JTklUCTEKLSt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQp OwotKwotIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgQ1JZUFRPIGZ1bmN0aW9ucy4gKi8KLSAKLSAv KiBGdW5jdGlvbiBjb2Rlcy4gKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kZXMv ZGVzLmguZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGVzL2Rlcy5oCi0tLS0gb3BlbnNzbC0x LjAuMWEvY3J5cHRvL2Rlcy9kZXMuaC5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMDMwNzgwNjgx ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Rlcy9kZXMuaAkyMDEyLTA0LTIwIDA5 OjA3OjA2LjIzNDc4NTA1NSArMDIwMAotQEAgLTIyNCw5ICsyMjQsNiBAQCBpbnQgREVTX3NldF9r ZXkoY29uc3RfREVTX2NibG9jayAqa2V5LERFCi0gaW50IERFU19rZXlfc2NoZWQoY29uc3RfREVT X2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKLSBpbnQgREVTX3NldF9r ZXlfY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1 bGUpOwotIHZvaWQgREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxE RVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLXZvaWQg cHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19r ZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKLS0jZW5kaWYKLSB2b2lkIERFU19zdHJpbmdfdG9fa2V5 KGNvbnN0IGNoYXIgKnN0cixERVNfY2Jsb2NrICprZXkpOwotIHZvaWQgREVTX3N0cmluZ190b18y a2V5cyhjb25zdCBjaGFyICpzdHIsREVTX2NibG9jayAqa2V5MSxERVNfY2Jsb2NrICprZXkyKTsK LSB2b2lkIERFU19jZmI2NF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVk IGNoYXIgKm91dCxsb25nIGxlbmd0aCwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9k ZXMvc2V0X2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Rlcy9zZXRfa2V5LmMKLS0t LSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGVzL3NldF9rZXkuYy5maXBzCTIwMTEtMDYtMDEgMTg6 NTQ6MDQuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Rlcy9zZXRf a2V5LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yMzQ3ODUwNTUgKzAyMDAKLUBAIC0zMzcsMTMgKzMz Nyw2IEBAIGludCBERVNfc2V0X2tleV9jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sKLSAJfQotIAot IHZvaWQgREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tl eV9zY2hlZHVsZSAqc2NoZWR1bGUpCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQl7Ci0tCWZpcHNf Y2lwaGVyX2Fib3J0KERFUyk7Ci0tCXByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkKGtleSwg c2NoZWR1bGUpOwotLQl9Ci0tdm9pZCBwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChjb25z dF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQotLSNlbmRpZgot IAl7Ci0gCXN0YXRpYyBjb25zdCBpbnQgc2hpZnRzMlsxNl09ezAsMCwxLDEsMSwxLDEsMSwwLDEs MSwxLDEsMSwxLDB9OwotIAlyZWdpc3RlciBERVNfTE9ORyBjLGQsdCxzLHQyOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5 cHRvL2RoL2RoX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RoL2RoX2dlbi5jLmZp cHMJMjAxMS0wNi0wOSAxNzoyMTo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZGgvZGhfZ2VuLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yMzU3ODUwNzcgKzAyMDAK LUBAIC04NCwxMSArODQsNiBAQCBpbnQgREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChESCAqcmV0 LCBpCi0gI2VuZGlmCi0gCWlmKHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKQotIAkJcmV0dXJu IHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNi KTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSkKLS0JCXJldHVybiBG SVBTX2RoX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgocmV0LCBwcmltZV9sZW4sCi0tCQkJCQkJCWdl bmVyYXRvciwgY2IpOwotLSNlbmRpZgotIAlyZXR1cm4gZGhfYnVpbHRpbl9nZW5wYXJhbXMocmV0 LCBwcmltZV9sZW4sIGdlbmVyYXRvciwgY2IpOwotIAl9Ci0gCi1AQCAtMTIzLDYgKzExOCwyMCBA QCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQsCi0gCWludCBnLG9rPSAt MTsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9ESF9CVUlMVElO X0dFTlBBUkFNUyxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rCi0rCWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVfbGVuIDwgT1BFTlNTTF9ESF9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIoREhfRl9ESF9CVUlMVElOX0dFTlBB UkFNUywgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2Vu ZGlmCi0rCi0gCWN0eD1CTl9DVFhfbmV3KCk7Ci0gCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7 Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Ro L2RoLmguZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGgvZGguaAotLS0tIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9kaC9kaC5oLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNS44OTg3Nzc4NTIgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGgvZGguaAkyMDEyLTA0LTIwIDA5OjA3OjA2 LjIzNTc4NTA3NyArMDIwMAotQEAgLTc3LDYgKzc3LDggQEAKLSAjIGRlZmluZSBPUEVOU1NMX0RI X01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKLSAjZW5kaWYKLSAKLSsjZGVmaW5lIE9QRU5TU0xfREhf RklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsKLSAjZGVmaW5lIERIX0ZMQUdfQ0FDSEVfTU9O VF9QICAgICAweDAxCi0gI2RlZmluZSBESF9GTEFHX05PX0VYUF9DT05TVFRJTUUgMHgwMiAvKiBu ZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBESAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQgdGltZQot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMgb3BlbnNzbC0x LjAuMWEvY3J5cHRvL2RoL2RoX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RoL2Ro X2tleS5jLmZpcHMJMjAxMS0xMS0xNCAxNToxNjowOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4xYS9jcnlwdG8vZGgvZGhfa2V5LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yMzU3ODUw NzcgKzAyMDAKLUBAIC02MSw2ICs2MSw5IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAot IHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpkaCk7Ci0gc3RhdGljIGludCBjb21wdXRlX2tl eSh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IEJJR05VTSAqcHViX2tleSwgREggKmRoKTsKLUBA IC0xMDQsNyArMTA3LDcgQEAgY29tcHV0ZV9rZXksCi0gZGhfYm5fbW9kX2V4cCwKLSBkaF9pbml0 LAotIGRoX2ZpbmlzaCwKLS0wLAotK0RIX0ZMQUdfRklQU19NRVRIT0QsCi0gTlVMTCwKLSBOVUxM Ci0gfTsKLUBAIC0xMjMsNiArMTI2LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpk aCkKLSAJQk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKLSAJQklHTlVNICpwdWJfa2V5PU5VTEwsKnBy aXZfa2V5PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkg JiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRT KSkKLSsJCXsKLSsJCURIZXJyKERIX0ZfR0VORVJBVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19T TUFMTCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJY3R4ID0gQk5fQ1RYX25l dygpOwotIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwotIAotQEAgLTIxMyw2ICsyMjQsMTMg QEAgc3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZQotIAkJREhlcnIoREhf Rl9DT01QVVRFX0tFWSxESF9SX01PRFVMVVNfVE9PX0xBUkdFKTsKLSAJCWdvdG8gZXJyOwotIAkJ fQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0 cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlE SGVycihESF9GX0NPTVBVVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlnb3Rv IGVycjsKLSsJCX0KLSsjZW5kaWYKLSAKLSAJY3R4ID0gQk5fQ1RYX25ldygpOwotIAlpZiAoY3R4 ID09IE5VTEwpIGdvdG8gZXJyOwotQEAgLTI4MCw2ICsyOTgsOSBAQCBzdGF0aWMgaW50IGRoX2Ju X21vZF9leHAoY29uc3QgREggKmRoLCBCCi0gCi0gc3RhdGljIGludCBkaF9pbml0KERIICpkaCkK LSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNl bmRpZgotIAlkaC0+ZmxhZ3MgfD0gREhfRkxBR19DQUNIRV9NT05UX1A7Ci0gCXJldHVybigxKTsK LSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RoL2RoX2xpYi5jLmZpcHMgb3Bl bnNzbC0xLjAuMWEvY3J5cHRvL2RoL2RoX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2RoL2RoX2xpYi5jLmZpcHMJMjAxMS0wNi0yMCAyMTo0MToxMS4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGgvZGhfbGliLmMJMjAxMi0wNC0yMCAwOTowNzowNi4y MzY3ODUwOTkgKzAyMDAKLUBAIC04MSwxNCArODEsNyBAQCBjb25zdCBESF9NRVRIT0QgKkRIX2dl dF9kZWZhdWx0X21ldGhvZCh2Ci0gCXsKLSAJaWYoIWRlZmF1bHRfREhfbWV0aG9kKQotIAkJewot LSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChGSVBTX21vZGUoKSkKLS0JCQlyZXR1cm4gRklQ U19kaF9vcGVuc3NsKCk7Ci0tCQllbHNlCi0tCQkJcmV0dXJuIERIX09wZW5TU0woKTsKLS0jZWxz ZQotIAkJZGVmYXVsdF9ESF9tZXRob2QgPSBESF9PcGVuU1NMKCk7Ci0tI2VuZGlmCi0gCQl9Ci0g CXJldHVybiBkZWZhdWx0X0RIX21ldGhvZDsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEv Y3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYV9l cnIuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kc2EvZHNhX2Vyci5jLmZpcHMJMjAxMS0x MC0xMCAwMToxMzo0OS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8v ZHNhL2RzYV9lcnIuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjIzNjc4NTA5OSArMDIwMAotQEAgLTc0 LDYgKzc0LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX2Z1bmN0c1tdPQotIHtF UlJfRlVOQyhEU0FfRl9ET19EU0FfUFJJTlQpLAkiRE9fRFNBX1BSSU5UIn0sCi0ge0VSUl9GVU5D KERTQV9GX0RTQVBBUkFNU19QUklOVCksCSJEU0FwYXJhbXNfcHJpbnQifSwKLSB7RVJSX0ZVTkMo RFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQKSwJIkRTQXBhcmFtc19wcmludF9mcCJ9LAotK3tFUlJf RlVOQyhEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4pLAkiZHNhX2J1aWx0aW5fa2V5Z2VuIn0sCi0r e0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOKSwJImRzYV9idWlsdGluX3BhcmFt Z2VuIn0sCi0ge0VSUl9GVU5DKERTQV9GX0RTQV9ET19TSUdOKSwJIkRTQV9kb19zaWduIn0sCi0g e0VSUl9GVU5DKERTQV9GX0RTQV9ET19WRVJJRlkpLAkiRFNBX2RvX3ZlcmlmeSJ9LAotIHtFUlJf RlVOQyhEU0FfRl9EU0FfR0VORVJBVEVfS0VZKSwJIkRTQV9nZW5lcmF0ZV9rZXkifSwKLUBAIC0x MDYsNiArMTA4LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX3JlYXNvbnNbXQot IHtFUlJfUkVBU09OKERTQV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRSksImRhdGEgdG9v IGxhcmdlIGZvciBrZXkgc2l6ZSJ9LAotIHtFUlJfUkVBU09OKERTQV9SX0RFQ09ERV9FUlJPUikg ICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKLSB7RVJSX1JFQVNPTihEU0FfUl9JTlZBTElEX0RJ R0VTVF9UWVBFKSAgICwiaW52YWxpZCBkaWdlc3QgdHlwZSJ9LAotK3tFUlJfUkVBU09OKERTQV9S X0tFWV9TSVpFX0lOVkFMSUQpICAgICAgLCJrZXkgc2l6ZSBpbnZhbGlkIn0sCi0re0VSUl9SRUFT T04oRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAot IHtFUlJfUkVBU09OKERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUykgICAgLCJtaXNzaW5nIHBhcmFt ZXRlcnMifSwKLSB7RVJSX1JFQVNPTihEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSkgICAgICwibW9k dWx1cyB0b28gbGFyZ2UifSwKLSB7RVJSX1JFQVNPTihEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxV RVMpICwibmVlZCBuZXcgc2V0dXAgdmFsdWVzIn0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kc2EvZHNhX2dl bi5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwkyMDExLTA2 LTA5IDE3OjIxOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9k c2EvZHNhX2dlbi5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjM3Nzg1MTIwICswMjAwCi1AQCAtODUs NiArODUsMTQgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0gI2VuZGlmCi0gCi0rI2lm bmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMgaW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NU WCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotKwkJY29uc3QgRVZQX01EICpldnBt ZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAotKwkJQklHTlVNICoqcF9yZXQs IEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpOwotK3N0YXRp YyBpbnQgRklQU19kc2FfZ2VuZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0g KnEsCi0rCQlCSUdOVU0gKipnX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpj Yik7Ci0rI2VuZGlmCi0rCi0gaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0 LCBpbnQgYml0cywKLSAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIGludCBzZWVkX2xl biwKLSAJCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAq Y2IpCi1AQCAtMTAwLDE0ICsxMDgsNiBAQCBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgo RFNBICpyZXQsCi0gCWlmKHJldC0+bWV0aC0+ZHNhX3BhcmFtZ2VuKQotIAkJcmV0dXJuIHJldC0+ bWV0aC0+ZHNhX3BhcmFtZ2VuKHJldCwgYml0cywgc2VlZF9pbiwgc2VlZF9sZW4sCi0gCQkJCWNv dW50ZXJfcmV0LCBoX3JldCwgY2IpOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JZWxzZSBpZiAo RklQU19tb2RlKCkpCi0tCQl7Ci0tCQlyZXR1cm4gRklQU19kc2FfZ2VuZXJhdGVfcGFyYW1ldGVy c19leChyZXQsIGJpdHMsIAotLQkJCQkJCQlzZWVkX2luLCBzZWVkX2xlbiwKLS0JCQkJCQkJY291 bnRlcl9yZXQsIGhfcmV0LCBjYik7Ci0tCQl9Ci0tI2VuZGlmCi0gCWVsc2UKLSAJCXsKLSAJCWNv bnN0IEVWUF9NRCAqZXZwbWQ7Ci1AQCAtMTI1LDI3ICsxMjUsMTE5IEBAIGludCBEU0FfZ2VuZXJh dGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwKLSAJCQl9Ci0gCi0gCQlyZXR1cm4gZHNhX2J1aWx0 aW5fcGFyYW1nZW4ocmV0LCBiaXRzLCBxYml0cywgZXZwbWQsCi0tCQkJc2VlZF9pbiwgc2VlZF9s ZW4sIE5VTEwsIGNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwotKwkJCQlzZWVkX2luLCBzZWVkX2xl biwgY291bnRlcl9yZXQsIGhfcmV0LCBjYik7Ci0gCQl9Ci0gCX0KLSAKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0raW50IEZJUFNfZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBi aXRzLCBzaXplX3QgcWJpdHMsCi0rCWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKLSsJaW50ICpjb3VudGVyX3JldCwgdW5z aWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikKLSsJewotKwlyZXR1cm4gZHNhX2J1aWx0 aW5fcGFyYW1nZW4ocmV0LCBiaXRzLCBxYml0cywKLSsJCWV2cG1kLCBzZWVkX2luLCBzZWVkX2xl biwKLSsJCWNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwotKwl9Ci0rI2VuZGlmCi0rCi0gaW50IGRz YV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAot IAljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXpl X3Qgc2VlZF9sZW4sCi0tCXVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0LAotIAlpbnQgKmNvdW50ZXJf cmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQotIAl7Ci0gCWludCBvaz0w OwotIAl1bnNpZ25lZCBjaGFyIHNlZWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwlCSUdOVU0g Kmc9TlVMTCwqcT1OVUxMLCpwPU5VTEw7Ci0rCXNpemVfdCBxc2l6ZSA9IHFiaXRzID4+IDM7Ci0r CUJOX0NUWCAqY3R4PU5VTEw7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX3Nl bGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0JVSUxU SU5fUEFSQU1HRU4sCi0rCQkgICAgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAg IGdvdG8gZXJyOwotKwkgICAgfQotKwotKwlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmCi0rCSAg ICAoYml0cyAhPSAxMDI0IHx8IHFiaXRzICE9IDE2MCkgJiYKLSsJICAgIChiaXRzICE9IDIwNDgg fHwgcWJpdHMgIT0gMjI0KSAmJgotKwkgICAgKGJpdHMgIT0gMjA0OCB8fCBxYml0cyAhPSAyNTYp ICYmCi0rCSAgICAoYml0cyAhPSAzMDcyIHx8IHFiaXRzICE9IDI1NikpCi0rCQl7Ci0rCQlEU0Fl cnIoRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sIERTQV9SX0tFWV9TSVpFX0lOVkFMSUQpOwot KwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCWlmIChzZWVkX2xlbiAmJiAoc2VlZF9sZW4g PCAoc2l6ZV90KXFzaXplKSkKLSsJCXNlZWRfaW4gPSBOVUxMOwkJLyogc2VlZCBidWZmZXIgdG9v IHNtYWxsIC0tIGlnbm9yZSAqLwotKwlpZiAoc2VlZF9sZW4gPiBzaXplb2Yoc2VlZCkpIAotKwkJ c2VlZF9sZW4gPSBzaXplb2Yoc2VlZCk7CS8qIEFwcC4gMi4yIG9mIEZJUFMgUFVCIDE4NiBhbGxv d3MgbGFyZ2VyIFNFRUQsCi0rCQkJCQkJICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSBy ZXN0cmljdGVkIHRvIDI1NiBiaXRzKi8KLSsJaWYgKHNlZWRfaW4gIT0gTlVMTCkKLSsJCW1lbWNw eShzZWVkLCBzZWVkX2luLCBzZWVkX2xlbik7Ci0rCWVsc2UKLSsJCXNlZWRfbGVuID0gMDsKLSsK LSsJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUJO X0NUWF9zdGFydChjdHgpOwotKwotKwlpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX3BxKGN0eCwgYml0 cywgcWJpdHMsIGV2cG1kLAotKwkJc2VlZCwgc2VlZF9sZW4sICZwLCAmcSwgY291bnRlcl9yZXQs IGNiKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX2coY3R4LCBw LCBxLCAmZywgaF9yZXQsIGNiKSkKLSsJCWdvdG8gZXJyOwotKwotKwlvaz0xOwotK2VycjoKLSsJ aWYgKG9rKQotKwkJewotKwkJaWYocmV0LT5wKQotKwkJCXsKLSsJCQlCTl9mcmVlKHJldC0+cCk7 Ci0rCQkJcmV0LT5wID0gTlVMTDsKLSsJCQl9Ci0rCQlpZihyZXQtPnEpCi0rCQkJewotKwkJCUJO X2ZyZWUocmV0LT5xKTsKLSsJCQlyZXQtPnEgPSBOVUxMOwotKwkJCX0KLSsJCWlmKHJldC0+ZykK LSsJCQl7Ci0rCQkJQk5fZnJlZShyZXQtPmcpOwotKwkJCXJldC0+ZyA9IE5VTEw7Ci0rCQkJfQot KwkJcmV0LT5wPUJOX2R1cChwKTsKLSsJCXJldC0+cT1CTl9kdXAocSk7Ci0rCQlyZXQtPmc9Qk5f ZHVwKGcpOwotKwkJaWYgKHJldC0+cCA9PSBOVUxMIHx8IHJldC0+cSA9PSBOVUxMIHx8IHJldC0+ ZyA9PSBOVUxMKQotKwkJCW9rPTA7Ci0rCQl9Ci0rCWlmKGN0eCkKLSsJCXsKLSsJCUJOX0NUWF9l bmQoY3R4KTsKLSsJCUJOX0NUWF9mcmVlKGN0eCk7Ci0rCQl9Ci0rCXJldHVybiBvazsKLSsJfQot KwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rc3RhdGljCi0rI2VuZGlmCi0raW50IEZJUFNfZHNh X2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotKwkJ Y29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAot KwkJQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9H RU5DQiAqY2IpCi0rCXsKLSsJaW50IG9rPTA7Ci0gCXVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJ R0VTVF9MRU5HVEhdOwotLQl1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF0s YnVmMltTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgYnVmW1NIQTI1Nl9E SUdFU1RfTEVOR1RIXTsKLSAJQklHTlVNICpyMCwqVywqWCwqYywqdGVzdDsKLS0JQklHTlVNICpn PU5VTEwsKnE9TlVMTCwqcD1OVUxMOwotLQlCTl9NT05UX0NUWCAqbW9udD1OVUxMOwotLQlpbnQg aSwgaywgbj0wLCBtPTAsIHFzaXplID0gcWJpdHMgPj4gMzsKLSsJQklHTlVNICpxPU5VTEwsKnA9 TlVMTDsKLSsJaW50IGksIGssIGIsIG49MCwgbT0wLCBxc2l6ZSA9IHFiaXRzID4+IDM7Ci0gCWlu dCBjb3VudGVyPTA7Ci0gCWludCByPTA7Ci0tCUJOX0NUWCAqY3R4PU5VTEw7Ci0tCXVuc2lnbmVk IGludCBoPTI7Ci0gCi0gCWlmIChxc2l6ZSAhPSBTSEFfRElHRVNUX0xFTkdUSCAmJiBxc2l6ZSAh PSBTSEEyMjRfRElHRVNUX0xFTkdUSCAmJgotIAkgICAgcXNpemUgIT0gU0hBMjU2X0RJR0VTVF9M RU5HVEgpCi1AQCAtMTUzLDUxICsyNDUsNDMgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERT QSAqcmV0LCBzaXplXwotIAkJcmV0dXJuIDA7Ci0gCi0gCWlmIChldnBtZCA9PSBOVUxMKQotLQkJ LyogdXNlIFNIQTEgYXMgZGVmYXVsdCAqLwotLQkJZXZwbWQgPSBFVlBfc2hhMSgpOwotKwkgICAg ewotKwkJaWYgKHFiaXRzIDw9IDE2MCkKLSsJCQlldnBtZCA9IEVWUF9zaGExKCk7Ci0rCQllbHNl IGlmIChxYml0cyA8PSAyMjQpCi0rCQkJZXZwbWQgPSBFVlBfc2hhMjI0KCk7Ci0rCQllbHNlCi0r CQkJZXZwbWQgPSBFVlBfc2hhMjU2KCk7Ci0rCSAgICB9Ci0gCi0gCWlmIChiaXRzIDwgNTEyKQot IAkJYml0cyA9IDUxMjsKLSAKLSAJYml0cyA9IChiaXRzKzYzKS82NCo2NDsKLSAKLS0JLyogTkI6 IHNlZWRfbGVuID09IDAgaXMgc3BlY2lhbCBjYXNlOiBjb3B5IGdlbmVyYXRlZCBzZWVkIHRvCi0t IAkgKiBzZWVkX2luIGlmIGl0IGlzIG5vdCBOVUxMLgotLSAJICovCi0tCWlmIChzZWVkX2xlbiAm JiAoc2VlZF9sZW4gPCAoc2l6ZV90KXFzaXplKSkKLS0JCXNlZWRfaW4gPSBOVUxMOwkJLyogc2Vl ZCBidWZmZXIgdG9vIHNtYWxsIC0tIGlnbm9yZSAqLwotLQlpZiAoc2VlZF9sZW4gPiAoc2l6ZV90 KXFzaXplKSAKLS0JCXNlZWRfbGVuID0gcXNpemU7CS8qIEFwcC4gMi4yIG9mIEZJUFMgUFVCIDE4 NiBhbGxvd3MgbGFyZ2VyIFNFRUQsCi0tCQkJCQkgKiBidXQgb3VyIGludGVybmFsIGJ1ZmZlcnMg YXJlIHJlc3RyaWN0ZWQgdG8gMTYwIGJpdHMqLwotLQlpZiAoc2VlZF9pbiAhPSBOVUxMKQotLQkJ bWVtY3B5KHNlZWQsIHNlZWRfaW4sIHNlZWRfbGVuKTsKLS0KLS0JaWYgKChjdHg9Qk5fQ1RYX25l dygpKSA9PSBOVUxMKQotLQkJZ290byBlcnI7Ci0tCi0tCWlmICgobW9udD1CTl9NT05UX0NUWF9u ZXcoKSkgPT0gTlVMTCkKLS0JCWdvdG8gZXJyOwotLQotLQlCTl9DVFhfc3RhcnQoY3R4KTsKLSAJ cjAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0tCWcgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gCVcgPSBCTl9D VFhfZ2V0KGN0eCk7Ci0tCXEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCSpxX3JldCA9IHEgPSBCTl9D VFhfZ2V0KGN0eCk7Ci0gCVggPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gCWMgPSBCTl9DVFhfZ2V0KGN0 eCk7Ci0tCXAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCSpwX3JldCA9IHAgPSBCTl9DVFhfZ2V0KGN0 eCk7Ci0gCXRlc3QgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gCi0gCWlmICghQk5fbHNoaWZ0KHRlc3Qs Qk5fdmFsdWVfb25lKCksYml0cy0xKSkKLSAJCWdvdG8gZXJyOwotIAotKwkvKiBzdGVwIDMgbiA9 IFxsY2VpbCBiaXRzIC8gcWJpdHMgXHJjZWlsIC0gMSAqLwotKwluID0gKGJpdHMrcWJpdHMtMSkv cWJpdHMgLSAxOwotKwkvKiBzdGVwIDQgYiA9IGJpdHMgLSAxIC0gbiAqIHFiaXRzICovCi0rCWIg PSBiaXRzIC0gMSAtIG4qcWJpdHM7Ci0rCi0gCWZvciAoOzspCi0gCQl7Ci0gCQlmb3IgKDs7KSAv KiBmaW5kIHEgKi8KLSAJCQl7Ci0gCQkJaW50IHNlZWRfaXNfcmFuZG9tOwotIAotLQkJCS8qIHN0 ZXAgMSAqLwotKwkJCS8qIHN0ZXAgNSBnZW5lcmF0ZSBzZWVkICovCi0gCQkJaWYoIUJOX0dFTkNC X2NhbGwoY2IsIDAsIG0rKykpCi0gCQkJCWdvdG8gZXJyOwotIAotQEAgLTIxMiwzMCArMjk2LDE4 IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJCQkJc2VlZF9s ZW49MDsgLyogdXNlIHJhbmRvbSBzZWVkIGlmICdzZWVkX2luJyB0dXJucyBvdXQgdG8gYmUgYmFk Ki8KLSAJCQkJfQotIAkJCW1lbWNweShidWYgLCBzZWVkLCBxc2l6ZSk7Ci0tCQkJbWVtY3B5KGJ1 ZjIsIHNlZWQsIHFzaXplKTsKLS0JCQkvKiBwcmVjb21wdXRlICJTRUVEICsgMSIgZm9yIHN0ZXAg NzogKi8KLS0JCQlmb3IgKGkgPSBxc2l6ZS0xOyBpID49IDA7IGktLSkKLS0JCQkJewotLQkJCQli dWZbaV0rKzsKLS0JCQkJaWYgKGJ1ZltpXSAhPSAwKQotLQkJCQkJYnJlYWs7Ci0tCQkJCX0KLSAK LS0JCQkvKiBzdGVwIDIgKi8KLSsJCQkvKiBzdGVwIDYgVSA9IGhhc2goc2VlZCkgKi8KLSAJCQlp ZiAoIUVWUF9EaWdlc3Qoc2VlZCwgcXNpemUsIG1kLCAgIE5VTEwsIGV2cG1kLCBOVUxMKSkKLSAJ CQkJZ290byBlcnI7Ci0tCQkJaWYgKCFFVlBfRGlnZXN0KGJ1ZiwgIHFzaXplLCBidWYyLCBOVUxM LCBldnBtZCwgTlVMTCkpCi0tCQkJCWdvdG8gZXJyOwotLQkJCWZvciAoaSA9IDA7IGkgPCBxc2l6 ZTsgaSsrKQotLQkJCQltZFtpXV49YnVmMltpXTsKLSAKLS0JCQkvKiBzdGVwIDMgKi8KLSsJCQkv KiBzdGVwIDcgcSA9IDJeKHFiaXRzLTEpICsgVSArIDEgLSAoVSBtb2QgMikgKi8KLSAJCQltZFsw XSB8PSAweDgwOwotIAkJCW1kW3FzaXplLTFdIHw9IDB4MDE7Ci0gCQkJaWYgKCFCTl9iaW4yYm4o bWQsIHFzaXplLCBxKSkKLSAJCQkJZ290byBlcnI7Ci0gCi0tCQkJLyogc3RlcCA0ICovCi0rCQkJ Lyogc3RlcCA4IHRlc3QgZm9yIHByaW1lICg2NCByb3VuZCBvZiBSYWJpbi1NaWxsZXIpICovCi0g CQkJciA9IEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHEsIERTU19wcmltZV9jaGVja3MsIGN0eCwK LSAJCQkJCXNlZWRfaXNfcmFuZG9tLCBjYik7Ci0gCQkJaWYgKHIgPiAwKQotQEAgLTI0MywyNyAr MzE1LDIyIEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJCQlp ZiAociAhPSAwKQotIAkJCQlnb3RvIGVycjsKLSAKLS0JCQkvKiBkbyBhIGNhbGxiYWNrIGNhbGwg Ki8KLS0JCQkvKiBzdGVwIDUgKi8KLSAJCQl9Ci0gCi0gCQlpZighQk5fR0VOQ0JfY2FsbChjYiwg MiwgMCkpIGdvdG8gZXJyOwotIAkJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDMsIDApKSBnb3RvIGVy cjsKLSAKLS0JCS8qIHN0ZXAgNiAqLwotKwkJLyogc3RlcCAxMSAqLwotIAkJY291bnRlcj0wOwot LQkJLyogIm9mZnNldCA9IDIiICovCi0tCi0tCQluPShiaXRzLTEpLzE2MDsKLSsJCS8qICJvZmZz ZXQgPSAxIiAqLwotIAotIAkJZm9yICg7OykKLSAJCQl7Ci0gCQkJaWYgKChjb3VudGVyICE9IDAp ICYmICFCTl9HRU5DQl9jYWxsKGNiLCAwLCBjb3VudGVyKSkKLSAJCQkJZ290byBlcnI7Ci0gCi0t CQkJLyogc3RlcCA3ICovCi0rCQkJLyogc3RlcCAxMS4xLCAxMS4yIG9idGFpbiBXICovCi0gCQkJ Qk5femVybyhXKTsKLS0JCQkvKiBub3cgJ2J1ZicgY29udGFpbnMgIlNFRUQgKyBvZmZzZXQgLSAx IiAqLwotIAkJCWZvciAoaz0wOyBrPD1uOyBrKyspCi0gCQkJCXsKLSAJCQkJLyogb2J0YWluICJT RUVEICsgb2Zmc2V0ICsgayIgYnkgaW5jcmVtZW50aW5nOiAqLwotQEAgLTI3OCwyOCArMzQ1LDMw IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJCQkJCQkJCQlO VUxMKSkKLSAJCQkJCWdvdG8gZXJyOwotIAotLQkJCQkvKiBzdGVwIDggKi8KLSAJCQkJaWYgKCFC Tl9iaW4yYm4obWQsIHFzaXplLCByMCkpCi0gCQkJCQlnb3RvIGVycjsKLS0JCQkJaWYgKCFCTl9s c2hpZnQocjAscjAsKHFzaXplIDw8IDMpKmspKSBnb3RvIGVycjsKLSsJCQkJaWYgKGsgPT0gbikK LSsJCQkJCUJOX21hc2tfYml0cyhyMCxiKTsKLSsJCQkJaWYgKCFCTl9sc2hpZnQocjAscjAscWJp dHMqaykpIGdvdG8gZXJyOwotIAkJCQlpZiAoIUJOX2FkZChXLFcscjApKSBnb3RvIGVycjsKLSAJ CQkJfQotIAotLQkJCS8qIG1vcmUgb2Ygc3RlcCA4ICovCi0tCQkJaWYgKCFCTl9tYXNrX2JpdHMo VyxiaXRzLTEpKSBnb3RvIGVycjsKLSsJCQkvKiBzdGVwIDExLjMgWCA9IFcgKyAyXihMLTEpICov Ci0gCQkJaWYgKCFCTl9jb3B5KFgsVykpIGdvdG8gZXJyOwotIAkJCWlmICghQk5fYWRkKFgsWCx0 ZXN0KSkgZ290byBlcnI7Ci0gCi0tCQkJLyogc3RlcCA5ICovCi0rCQkJLyogc3RlcCAxMS40IGMg PSBYIG1vZCAyKnEgKi8KLSAJCQlpZiAoIUJOX2xzaGlmdDEocjAscSkpIGdvdG8gZXJyOwotIAkJ CWlmICghQk5fbW9kKGMsWCxyMCxjdHgpKSBnb3RvIGVycjsKLSsKLSsJCQkvKiBzdGVwIDExLjUg cCA9IFggLSAoYyAtIDEpICovCi0gCQkJaWYgKCFCTl9zdWIocjAsYyxCTl92YWx1ZV9vbmUoKSkp IGdvdG8gZXJyOwotIAkJCWlmICghQk5fc3ViKHAsWCxyMCkpIGdvdG8gZXJyOwotIAotLQkJCS8q IHN0ZXAgMTAgKi8KLSsJCQkvKiBzdGVwIDExLjYgKi8KLSAJCQlpZiAoQk5fY21wKHAsdGVzdCkg Pj0gMCkKLSAJCQkJewotLQkJCQkvKiBzdGVwIDExICovCi0rCQkJCS8qIHN0ZXAgMTEuNyAqLwot IAkJCQlyID0gQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocCwgRFNTX3ByaW1lX2NoZWNrcywKLSAJ CQkJCQljdHgsIDEsIGNiKTsKLSAJCQkJaWYgKHIgPiAwKQotQEAgLTMwOCwxOSArMzc3LDQ1IEBA IGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJCQkJCWdvdG8gZXJy OwotIAkJCQl9Ci0gCi0tCQkJLyogc3RlcCAxMyAqLwotKwkJCS8qIHN0ZXAgMTEuOSAqLwotIAkJ CWNvdW50ZXIrKzsKLSAJCQkvKiAib2Zmc2V0ID0gb2Zmc2V0ICsgbiArIDEiICovCi0gCi0tCQkJ Lyogc3RlcCAxNCAqLwotLQkJCWlmIChjb3VudGVyID49IDQwOTYpIGJyZWFrOwotKwkJCS8qIHN0 ZXAgMTIgKi8KLSsJCQlpZiAoY291bnRlciA+PSA0KmJpdHMpIGJyZWFrOwotIAkJCX0KLSAJCX0K LSBlbmQ6Ci0gCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCAxKSkKLSAJCWdvdG8gZXJyOwotIAot LQkvKiBXZSBub3cgbmVlZCB0byBnZW5lcmF0ZSBnICovCi0rCW9rPTE7Ci0rZXJyOgotKwlpZiAo b2spCi0rCQl7Ci0rCQlpZiAoY291bnRlcl9yZXQgIT0gTlVMTCkgKmNvdW50ZXJfcmV0PWNvdW50 ZXI7Ci0rCQl9Ci0rCXJldHVybiBvazsKLSsJfQotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0r c3RhdGljCi0rI2VuZGlmCi0raW50IEZJUFNfZHNhX2dlbmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJ R05VTSAqcCwgQklHTlVNICpxLAotKwkJQklHTlVNICoqZ19yZXQsIHVuc2lnbmVkIGxvbmcgKmhf cmV0LCBCTl9HRU5DQiAqY2IpCi0rCXsKLSsJaW50IG9rPTA7Ci0rCUJJR05VTSAqcjAsICp0ZXN0 LCAqZyA9IE5VTEw7Ci0rCUJOX01PTlRfQ1RYICptb250OwotKwl1bnNpZ25lZCBpbnQgaD0yOwot KwotKwlpZiAoKG1vbnQ9Qk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwpCi0rCQlnb3RvIGVycjsK LSsKLSsJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCSpnX3JldCA9IGcgPSBCTl9DVFhfZ2V0KGN0 eCk7Ci0rCXRlc3QgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0gCS8qIFNldCByMD0ocC0xKS9xICov Ci0gCWlmICghQk5fc3ViKHRlc3QscCxCTl92YWx1ZV9vbmUoKSkpIGdvdG8gZXJyOwotIAlpZiAo IUJOX2RpdihyMCxOVUxMLHRlc3QscSxjdHgpKSBnb3RvIGVycjsKLUBAIC0zNDQsMjYgKzQzOSw3 IEBAIGVuZDoKLSBlcnI6Ci0gCWlmIChvaykKLSAJCXsKLS0JCWlmKHJldC0+cCkgQk5fZnJlZShy ZXQtPnApOwotLQkJaWYocmV0LT5xKSBCTl9mcmVlKHJldC0+cSk7Ci0tCQlpZihyZXQtPmcpIEJO X2ZyZWUocmV0LT5nKTsKLS0JCXJldC0+cD1CTl9kdXAocCk7Ci0tCQlyZXQtPnE9Qk5fZHVwKHEp OwotLQkJcmV0LT5nPUJOX2R1cChnKTsKLS0JCWlmIChyZXQtPnAgPT0gTlVMTCB8fCByZXQtPnEg PT0gTlVMTCB8fCByZXQtPmcgPT0gTlVMTCkKLS0JCQl7Ci0tCQkJb2s9MDsKLS0JCQlnb3RvIGVy cjsKLS0JCQl9Ci0tCQlpZiAoY291bnRlcl9yZXQgIT0gTlVMTCkgKmNvdW50ZXJfcmV0PWNvdW50 ZXI7Ci0gCQlpZiAoaF9yZXQgIT0gTlVMTCkgKmhfcmV0PWg7Ci0tCQlpZiAoc2VlZF9vdXQpCi0t CQkJbWVtY3B5KHNlZWRfb3V0LCBzZWVkLCBxc2l6ZSk7Ci0tCQl9Ci0tCWlmKGN0eCkKLS0JCXsK LS0JCUJOX0NUWF9lbmQoY3R4KTsKLS0JCUJOX0NUWF9mcmVlKGN0eCk7Ci0gCQl9Ci0gCWlmICht b250ICE9IE5VTEwpIEJOX01PTlRfQ1RYX2ZyZWUobW9udCk7Ci0gCXJldHVybiBvazsKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZHNhL2RzYS5oCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2EuaC5maXBz CTIwMTItMDQtMjAgMDk6MDc6MDUuNzEwNzczODIwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEv Y3J5cHRvL2RzYS9kc2EuaAkyMDEyLTA0LTIwIDA5OjA3OjA2LjIzODc4NTE0MSArMDIwMAotQEAg LTg4LDYgKzg4LDggQEAKLSAjIGRlZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTCTEw MDAwCi0gI2VuZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJ VFMgMTAyNAotKwotICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QCTB4MDEKLSAjZGVmaW5l IERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7 IHRoZSBidWlsdC1pbiBEU0EKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCi1AQCAtMjY0 LDYgKzI2NiwxNyBAQCBpbnQJRFNBX3ByaW50X2ZwKEZJTEUgKmJwLCBjb25zdCBEU0EgKngsCi0g REggKkRTQV9kdXBfREgoY29uc3QgRFNBICpyKTsKLSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0raW50IEZJUFNfZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBi aXRzLCBzaXplX3QgcWJpdHMsCi0rCWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKLSsJaW50ICpjb3VudGVyX3JldCwgdW5z aWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7Ci0raW50IEZJUFNfZHNhX2dlbmVyYXRl X3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotKwkJY29uc3QgRVZQ X01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAotKwkJQklHTlVN ICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2Ip OwotK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05V TSAqcSwKLSsJCUJJR05VTSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0Ig KmNiKTsKLSsjZW5kaWYKLSsKLSAjZGVmaW5lIEVWUF9QS0VZX0NUWF9zZXRfZHNhX3BhcmFtZ2Vu X2JpdHMoY3R4LCBuYml0cykgXAotIAlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX0RT QSwgRVZQX1BLRVlfT1BfUEFSQU1HRU4sIFwKLSAJCQkJRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1H RU5fQklUUywgbmJpdHMsIE5VTEwpCi1AQCAtMjg1LDEwICsyOTgsMTMgQEAgdm9pZCBFUlJfbG9h ZF9EU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIERTQV9GX0RPX0RTQV9QUklOVAkJCQkgMTA0 Ci0gI2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlQJCQkJIDEwMAotICNkZWZpbmUgRFNBX0Zf RFNBUEFSQU1TX1BSSU5UX0ZQCQkJIDEwMQotKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fS0VZ R0VOCQkJIDEyNAotKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTIzCi0g I2RlZmluZSBEU0FfRl9EU0FfRE9fU0lHTgkJCQkgMTEyCi0gI2RlZmluZSBEU0FfRl9EU0FfRE9f VkVSSUZZCQkJCSAxMTMKLS0jZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9LRVkJCQkJIDEyNAot LSNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVgJCSAxMjMKLSsjZGVmaW5l IERTQV9GX0RTQV9HRU5FUkFURV9LRVkJCQkJIDEyNgotKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVS QVRFX1BBUkFNRVRFUlNfRVgJCSAxMjcKLSsjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJB TUVURVJTCS8qIHVudXNlZCAqLwkgMTI1Ci0gI2RlZmluZSBEU0FfRl9EU0FfTkVXX01FVEhPRAkJ CQkgMTAzCi0gI2RlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVDT0RFCQkJCSAxMTkKLSAjZGVmaW5l IERTQV9GX0RTQV9QUklOVF9GUAkJCQkgMTA1Ci1AQCAtMzE0LDExICszMzAsMTUgQEAgdm9pZCBF UlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIERTQV9SX0RBVEFfVE9PX0xBUkdF X0ZPUl9LRVlfU0laRQkJIDEwMAotICNkZWZpbmUgRFNBX1JfREVDT0RFX0VSUk9SCQkJCSAxMDQK LSAjZGVmaW5lIERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUJCQkgMTA2Ci0rI2RlZmluZSBEU0Ff Ul9LRVlfU0laRV9JTlZBTElECQkJCSAxMTMKLSsjZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19T TUFMTAkJCSAxMTAKLSAjZGVmaW5lIERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKLSAj ZGVmaW5lIERTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDMKLS0jZGVmaW5lIERTQV9SX05F RURfTkVXX1NFVFVQX1ZBTFVFUwkJCSAxMTAKLSsjZGVmaW5lIERTQV9SX05FRURfTkVXX1NFVFVQ X1ZBTFVFUwkJCSAxMTIKLSAjZGVmaW5lIERTQV9SX05PTl9GSVBTX0RTQV9NRVRIT0QJCQkgMTEx Ci0rI2RlZmluZSBEU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDExMQotICNkZWZpbmUgRFNBX1Jf Tk9fUEFSQU1FVEVSU19TRVQJCQkJIDEwNwotKyNkZWZpbmUgRFNBX1JfT1BFUkFUSU9OX05PVF9B TExPV0VEX0lOX0ZJUFNfTU9ERSAvKiB1bnVzZWQgKi8gMTEyCi0gI2RlZmluZSBEU0FfUl9QQVJB TUVURVJfRU5DT0RJTkdfRVJST1IJCQkgMTA1Ci0gCi0gI2lmZGVmICBfX2NwbHVzcGx1cwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcyBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vZHNhL2RzYV9rZXkuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kc2Ev ZHNhX2tleS5jLmZpcHMJMjAxMS0wNi0wOSAxNzoyMTo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYV9rZXkuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjIz ODc4NTE0MSArMDIwMAotQEAgLTY2LDYgKzY2LDI0IEBACi0gCi0gI2lmZGVmIE9QRU5TU0xfRklQ UwotICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSsKLStzdGF0aWMgaW50IGZpcHNfY2hlY2tfZHNhKERTQSAqZHNhKQotKwl7Ci0rCUVWUF9QS0VZ IHBrOwotKwl1bnNpZ25lZCBjaGFyIHRic1tdID0gIkRTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsK LSsgICAgCXBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7Ci0rICAgIAlway5wa2V5LmRzYSA9IGRzYTsK LSsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoJnBrLCB0YnMsIDAsIE5VTEwsIDAs IE5VTEwsIDAsIE5VTEwpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19EU0Es RklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKLSsJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwo KTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotICNlbmRpZgotIAot IHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKTsKLUBAIC04MiwxMCArMTAw LDYgQEAgaW50IERTQV9nZW5lcmF0ZV9rZXkoRFNBICpkc2EpCi0gI2VuZGlmCi0gCWlmKGRzYS0+ bWV0aC0+ZHNhX2tleWdlbikKLSAJCXJldHVybiBkc2EtPm1ldGgtPmRzYV9rZXlnZW4oZHNhKTsK LS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSkKLS0JCXJldHVybiBGSVBT X2RzYV9nZW5lcmF0ZV9rZXkoZHNhKTsKLS0jZW5kaWYKLSAJcmV0dXJuIGRzYV9idWlsdGluX2tl eWdlbihkc2EpOwotIAl9Ci0gCi1AQCAtOTUsNiArMTA5LDE1IEBAIHN0YXRpYyBpbnQgZHNhX2J1 aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQotIAlCTl9DVFggKmN0eD1OVUxMOwotIAlCSUdOVU0gKnB1 Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlm IChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykK LSsJCSYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxV U19CSVRTKSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4sIERTQV9S X0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJ aWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKLSAKLSAJaWYgKGRzYS0+ cHJpdl9rZXkgPT0gTlVMTCkKLUBAIC0xMzMsNiArMTU2LDE0IEBAIHN0YXRpYyBpbnQgZHNhX2J1 aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQotIAotIAlkc2EtPnByaXZfa2V5PXByaXZfa2V5OwotIAlk c2EtPnB1Yl9rZXk9cHViX2tleTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfbW9k ZSgpICYmICFmaXBzX2NoZWNrX2RzYShkc2EpKQotKwkJewotKwkJZHNhLT5wdWJfa2V5ID0gTlVM TDsKLSsJCWRzYS0+cHJpdl9rZXkgPSBOVUxMOwotKwkgICAgCWdvdG8gZXJyOwotKwkJfQotKyNl bmRpZgotIAlvaz0xOwotIAotIGVycjoKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9k c2EvZHNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2FfbGliLmMKLS0t LSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYV9saWIuYy5maXBzCTIwMTEtMTEtMTQgMTU6 MTY6MDkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2Ff bGliLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yMzk3ODUxNjIgKzAyMDAKLUBAIC04NywxNCArODcs NyBAQCBjb25zdCBEU0FfTUVUSE9EICpEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kCi0gCXsKLSAJaWYo IWRlZmF1bHRfRFNBX21ldGhvZCkKLSAJCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCQlpZiAo RklQU19tb2RlKCkpCi0tCQkJcmV0dXJuIEZJUFNfZHNhX29wZW5zc2woKTsKLS0JCWVsc2UKLS0J CQlyZXR1cm4gRFNBX09wZW5TU0woKTsKLS0jZWxzZQotIAkJZGVmYXVsdF9EU0FfbWV0aG9kID0g RFNBX09wZW5TU0woKTsKLS0jZW5kaWYKLSAJCX0KLSAJcmV0dXJuIGRlZmF1bHRfRFNBX21ldGhv ZDsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2FfbG9jbC5oLmZp cHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2FfbG9jbC5oCi0tLS0gb3BlbnNzbC0xLjAu MWEvY3J5cHRvL2RzYS9kc2FfbG9jbC5oLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNS43MTQ3NzM5 MDYgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYV9sb2NsLmgJMjAxMi0w NC0yMCAwOTowNzowNi4yMzk3ODUxNjIgKzAyMDAKLUBAIC01Niw1ICs1Niw0IEBACi0gCi0gaW50 IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRz LAotIAljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBz aXplX3Qgc2VlZF9sZW4sCi0tCXVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0LAotIAlpbnQgKmNvdW50 ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9kc2EvZHNhX29zc2wuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kc2EvZHNhX29z c2wuYy5maXBzCTIwMTEtMDItMDEgMTM6NTM6NDcuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjM5Nzg1 MTYyICswMjAwCi1AQCAtNjUsNiArNjUsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgot ICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+Ci0r I2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYK LSAKLSBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduZWQgY2hhciAqZGdz dCwgaW50IGRsZW4sIERTQSAqZHNhKTsKLSBzdGF0aWMgaW50IGRzYV9zaWduX3NldHVwKERTQSAq ZHNhLCBCTl9DVFggKmN0eF9pbiwgQklHTlVNICoqa2ludnAsIEJJR05VTSAqKnJwKTsKLUBAIC04 Miw3ICs4NSw3IEBAIE5VTEwsIC8qIGRzYV9tb2RfZXhwLCAqLwotIE5VTEwsIC8qIGRzYV9ibl9t b2RfZXhwLCAqLwotIGRzYV9pbml0LAotIGRzYV9maW5pc2gsCi0tMCwKLStEU0FfRkxBR19GSVBT X01FVEhPRCwKLSBOVUxMLAotIE5VTEwsCi0gTlVMTAotQEAgLTEzOCw2ICsxNDEsMjEgQEAgc3Rh dGljIERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbgotIAlEU0FfU0lHICpyZXQ9TlVM TDsKLSAJaW50IG5vcmVkbyA9IDA7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBT X3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0RP X1NJR04sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiBOVUxMOwot KwkgICAgfQotKwotKwlpZiAoRklQU19tb2RlKCkgJiYgIShkc2EtPmZsYWdzICYgRFNBX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cpIAotKwkJJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RT QV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJRFNBZXJyKERTQV9GX0RTQV9ET19T SUdOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0r I2VuZGlmCi0rCi0gCUJOX2luaXQoJm0pOwotIAlCTl9pbml0KCZ4cik7Ci0gCi1AQCAtMzI1LDYg KzM0MywyMSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQKLSAJCXJl dHVybiAtMTsKLSAJCX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fVkVSSUZZ LEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gLTE7Ci0rCSAgICB9 Ci0rCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQ U19BTExPVykgCi0rCQkmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSwg RFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCXJldHVybiAtMTsKLSsJCX0KLSsjZW5kaWYK LSsKLSAJaWYgKEJOX251bV9iaXRzKGRzYS0+cCkgPiBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19C SVRTKQotIAkJewotIAkJRFNBZXJyKERTQV9GX0RTQV9ET19WRVJJRlksRFNBX1JfTU9EVUxVU19U T09fTEFSR0UpOwotQEAgLTM5OSw2ICs0MzIsOSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnko Y29uc3QgdW5zaWduZWQKLSAKLSBzdGF0aWMgaW50IGRzYV9pbml0KERTQSAqZHNhKQotIHsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJ ZHNhLT5mbGFnc3w9RFNBX0ZMQUdfQ0FDSEVfTU9OVF9QOwotIAlyZXR1cm4oMSk7Ci0gfQotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2FfcG1ldGguYy5maXBzIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8v ZHNhL2RzYV9wbWV0aC5jLmZpcHMJMjAxMS0wNi0yMCAyMjowNToxMy4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jCTIwMTItMDQtMjAgMDk6 MDc6MDYuMjQwNzg1MTgzICswMjAwCi1AQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyBpbnQgcGtl eV9kc2FfcGFyYW1nZW4oRVZQX1BLRVlfQ1QKLSAJaWYgKCFkc2EpCi0gCQlyZXR1cm4gMDsKLSAJ cmV0ID0gZHNhX2J1aWx0aW5fcGFyYW1nZW4oZHNhLCBkY3R4LT5uYml0cywgZGN0eC0+cWJpdHMs IGRjdHgtPnBtZCwKLS0JICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwg TlVMTCwgTlVMTCwgcGNiKTsKLSsJICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwg TlVMTCwgTlVMTCwgcGNiKTsKLSAJaWYgKHJldCkKLSAJCUVWUF9QS0VZX2Fzc2lnbl9EU0EocGtl eSwgZHNhKTsKLSAJZWxzZQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2F0 ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYXRlc3QuYwotLS0tIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9kc2EvZHNhdGVzdC5jLmZpcHMJMjAwOC0wOC0wNiAxNzo1NDoxMS4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYXRlc3QuYwky MDEyLTA0LTIwIDA5OjA3OjA2LjI0MDc4NTE4MyArMDIwMAotQEAgLTk2LDM2ICs5Niw0MSBAQCBz dGF0aWMgaW50IE1TX0NBTExCQUNLIGRzYV9jYihpbnQgcCwgaW50Ci0gLyogc2VlZCwgb3V0X3As IG91dF9xLCBvdXRfZyBhcmUgdGFrZW4gZnJvbSB0aGUgdXBkYXRlZCBBcHBlbmRpeCA1IHRvCi0g ICogRklQUyBQVUIgMTg2IGFuZCBhbHNvIGFwcGVhciBpbiBBcHBlbmRpeCA1IHRvIEZJUFMgUElC IDE4Ni0xICovCi0gc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VlZFsyMF09ewotLQkweGQ1LDB4MDEs MHg0ZSwweDRiLDB4NjAsMHhlZiwweDJiLDB4YTgsMHhiNiwweDIxLDB4MWIsMHg0MCwKLS0JMHg2 MiwweGJhLDB4MzIsMHgyNCwweGUwLDB4NDIsMHg3ZCwweGQzLAotKwkweDAyLDB4NDcsMHgxMSww eDkyLDB4MTEsMHg4OCwweEM4LDB4RkIsMHhBRiwweDQ4LDB4NEMsMHg2MiwKLSsJMHhERiwweEE1 LDB4QkUsMHhBMCwweEE0LDB4M0MsMHg1NiwweEUzLAotIAl9OwotIAotIHN0YXRpYyB1bnNpZ25l ZCBjaGFyIG91dF9wW109ewotLQkweDhkLDB4ZjIsMHhhNCwweDk0LDB4NDksMHgyMiwweDc2LDB4 YWEsCi0tCTB4M2QsMHgyNSwweDc1LDB4OWIsMHhiMCwweDY4LDB4NjksMHhjYiwKLS0JMHhlYSww eGMwLDB4ZDgsMHgzYSwweGZiLDB4OGQsMHgwYywweGY3LAotLQkweGNiLDB4YjgsMHgzMiwweDRm LDB4MGQsMHg3OCwweDgyLDB4ZTUsCi0tCTB4ZDAsMHg3NiwweDJmLDB4YzUsMHhiNywweDIxLDB4 MGUsMHhhZiwKLS0JMHhjMiwweGU5LDB4YWQsMHhhYywweDMyLDB4YWIsMHg3YSwweGFjLAotLQkw eDQ5LDB4NjksMHgzZCwweGZiLDB4ZjgsMHgzNywweDI0LDB4YzIsCi0tCTB4ZWMsMHgwNywweDM2 LDB4ZWUsMHgzMSwweGM4LDB4MDIsMHg5MSwKLSsJMHhBQywweENCLDB4MUUsMHg2MywweDYwLDB4 NjksMHgwQywweEZCLDB4MDYsMHgxOSwweDY4LDB4M0UsCi0rCTB4QTUsMHgwMSwweDVBLDB4QTIs MHgxNSwweDVDLDB4RTIsMHg5OSwweDJELDB4RDUsMHgzMCwweDk5LAotKwkweDdFLDB4NUYsMHg4 RCwweEUyLDB4RjcsMHhDNiwweDJFLDB4OEQsMHhBMywweDlGLDB4NTgsMHhBRCwKLSsJMHhENiww eEE5LDB4N0QsMHgwRSwweDBELDB4OTUsMHg1MywweEE2LDB4NzEsMHgzQSwweERFLDB4QUIsCi0r CTB4QUMsMHhFOSwweEY0LDB4MzYsMHg1NSwweDlFLDB4QjksMHhENiwweDkzLDB4QkYsMHhGMyww eDE4LAotKwkweDFDLDB4MTQsMHg3QiwweEE1LDB4NDIsMHgyRSwweENELDB4MDAsMHhFQiwweDM1 LDB4M0IsMHgxQiwKLSsJMHhBOCwweDUxLDB4QkIsMHhFMSwweDU4LDB4NDIsMHg4NSwweDg0LDB4 MjIsMHhBNywweDk3LDB4NUUsCi0rCTB4OTksMHg2RiwweDM4LDB4MjAsMHhCRCwweDlELDB4QjYs MHhEOSwweDMzLDB4MzcsMHgyQSwweEZELAotKwkweEJCLDB4RDQsMHhCQywweDBDLDB4MkEsMHg2 NywweENCLDB4OUYsMHhCQiwweERGLDB4RjksMHg5MywKLSsJMHhBQSwweEQ2LDB4RjAsMHhENiww eDk1LDB4MEIsMHg1RCwweDY1LDB4MTQsMHhEMCwweDE4LDB4OUQsCi0rCTB4QzYsMHhBRiwweEYw LDB4QzYsMHgzNywweDdDLDB4RjMsMHg1RiwKLSAJfTsKLSAKLSBzdGF0aWMgdW5zaWduZWQgY2hh ciBvdXRfcVtdPXsKLS0JMHhjNywweDczLDB4MjEsMHg4YywweDczLDB4N2UsMHhjOCwweGVlLAot LQkweDk5LDB4M2IsMHg0ZiwweDJkLDB4ZWQsMHgzMCwweGY0LDB4OGUsCi0tCTB4ZGEsMHhjZSww eDkxLDB4NWYsCi0rCTB4RTMsMHg4RSwweDVFLDB4NkQsMHhCRiwweDJCLDB4NzksMHhGOCwweEM1 LDB4NEIsMHg4OSwweDhCLAotKwkweEJBLDB4MkQsMHg5MSwweEMzLDB4NkMsMHg4MCwweEFDLDB4 ODcsCi0gCX07Ci0gCi0gc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X2dbXT17Ci0tCTB4NjIsMHg2 ZCwweDAyLDB4NzgsMHgzOSwweGVhLDB4MGEsMHgxMywKLS0JMHg0MSwweDMxLDB4NjMsMHhhNSww eDViLDB4NGMsMHhiNSwweDAwLAotLQkweDI5LDB4OWQsMHg1NSwweDIyLDB4OTUsMHg2YywweGVm LDB4Y2IsCi0tCTB4M2IsMHhmZiwweDEwLDB4ZjMsMHg5OSwweGNlLDB4MmMsMHgyZSwKLS0JMHg3 MSwweGNiLDB4OWQsMHhlNSwweGZhLDB4MjQsMHhiYSwweGJmLAotLQkweDU4LDB4ZTUsMHhiNyww eDk1LDB4MjEsMHg5MiwweDVjLDB4OWMsCi0tCTB4YzQsMHgyZSwweDlmLDB4NmYsMHg0NiwweDRi LDB4MDgsMHg4YywKLS0JMHhjNSwweDcyLDB4YWYsMHg1MywweGU2LDB4ZDcsMHg4OCwweDAyLAot KwkweDQyLDB4NEEsMHgwNCwweDRFLDB4NzksMHhCNCwweDk5LDB4N0YsMHhGRCwweDU4LDB4MzYs MHgyQywKLSsJMHgxQiwweDVGLDB4MTgsMHg3RSwweDBELDB4Q0MsMHhBQiwweDgxLDB4QzksMHg1 RCwweDEwLDB4Q0UsCi0rCTB4NEUsMHg4MCwweDdFLDB4NTgsMHhCNCwweDM0LDB4M0YsMHhBNyww eDQ1LDB4QzcsMHhBQSwweDM2LAotKwkweDI0LDB4NDIsMHhBOSwweDNCLDB4RTgsMHgwRSwweDA0 LDB4MDIsMHgyRCwweEZCLDB4QTYsMHgxMywKLSsJMHhCOSwweEI1LDB4MTUsMHhBNSwweDU2LDB4 MDcsMHgzNSwweEU0LDB4MDMsMHhCNiwweDc5LDB4N0MsCi0rCTB4NjIsMHhERCwweERGLDB4M0Ys MHg3MSwweDNBLDB4OUQsMHg4QiwweEM0LDB4RjYsMHhFNywweDFELAotKwkweDUyLDB4QTgsMHhB OSwweDQzLDB4MUQsMHgzMywweDUxLDB4ODgsMHgzOSwweEJELDB4NzMsMHhFOSwKLSsJMHg1Riww eEJFLDB4ODIsMHg0OSwweDI3LDB4RTYsMHhCNSwweDUzLDB4QzEsMHgzOCwweEFDLDB4MkYsCi0r CTB4NkQsMHg5NywweDZDLDB4RUIsMHg2NywweEMxLDB4NUYsMHg2NywweEY4LDB4MzUsMHgwNSww eDVFLAotKwkweEQ1LDB4NjgsMHg4MCwweEFBLDB4OTYsMHhDQSwweDBCLDB4OEEsMHhFNiwweEYx LDB4QjEsMHg0MSwKLSsJMHhDNiwweDc1LDB4OTQsMHgwQSwweDBBLDB4MkEsMHhGQSwweDI5LAot IAl9OwotIAotIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHN0cjFbXT0iMTIzNDU2Nzg5MDEy MzQ1Njc4OTAiOwotQEAgLTE1Nyw3ICsxNjIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCi0gCUJJT19wcmludGYoYmlvX2VyciwidGVzdCBnZW5lcmF0aW9uIG9mIERTQSBwYXJh bWV0ZXJzXG4iKTsKLSAKLSAJQk5fR0VOQ0Jfc2V0KCZjYiwgZHNhX2NiLCBiaW9fZXJyKTsKLS0J aWYoKChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVy c19leChkc2EsIDUxMiwKLSsJaWYoKChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFEU0Ff Z2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsCi0gCQkJCXNlZWQsIDIwLCAmY291bnRl ciwgJmgsICZjYikpCi0gCQlnb3RvIGVuZDsKLSAKLUBAIC0xNzAsOSArMTc1LDkgQEAgaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotIAlCSU9fcHJpbnRmKGJpb19lcnIsIlxuY291bnRl cj0lZCBoPSVsZFxuIixjb3VudGVyLGgpOwotIAkJCi0gCURTQV9wcmludChiaW9fZXJyLGRzYSww KTsKLS0JaWYgKGNvdW50ZXIgIT0gMTA1KSAKLSsJaWYgKGNvdW50ZXIgIT0gMjM5KSAKLSAJCXsK LS0JCUJJT19wcmludGYoYmlvX2VyciwiY291bnRlciBzaG91bGQgYmUgMTA1XG4iKTsKLSsJCUJJ T19wcmludGYoYmlvX2VyciwiY291bnRlciBzaG91bGQgYmUgMjM5XG4iKTsKLSAJCWdvdG8gZW5k OwotIAkJfQotIAlpZiAoaCAhPSAyKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Vu Z2luZS9lbmdfYWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZW5naW5lL2VuZ19hbGwu YwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jLmZpcHMJMjAxMS0w OC0xMCAyMDo1MzoxMy4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8v ZW5naW5lL2VuZ19hbGwuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI0MTc4NTIwNSArMDIwMAotQEAg LTU4LDExICs1OCwyNSBAQAotIAotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNsdWRlICJl bmdfaW50LmgiCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsjZW5kaWYKLSAKLSB2b2lkIEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lcyh2b2lkKQot IAl7Ci0gCS8qIFNvbWUgRU5HSU5FcyBuZWVkIHRoaXMgKi8KLSAJT1BFTlNTTF9jcHVpZF9zZXR1 cCgpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsJ aWYgKEZJUFNfbW9kZSgpKSB7Ci0rCQkvKiBXZSBhbGxvdyBsb2FkaW5nIGR5bmFtaWMgZW5naW5l IGFzIGEgdGhpcmQgcGFydHkKLSsJCSAgIGVuZ2luZSBtaWdodCBiZSBGSVBTIHZhbGlkYXRlZC4K LSsJCSAgIFVzZXIgaXMgZGlzYWxsb3dlZCB0byBsb2FkIG5vbi12YWxpZGF0ZWQgZW5naW5lcwot KwkJICAgYnkgc2VjdXJpdHkgcG9saWN5LiAqLwotKwkJRU5HSU5FX2xvYWRfZHluYW1pYygpOwot KwkJcmV0dXJuOwotKwl9Ci0rI2VuZGlmCi0gI2lmIDAKLSAJLyogVGhlcmUncyBubyBsb25nZXIg YW55IG5lZWQgZm9yIGFuICJvcGVuc3NsIiBFTkdJTkUgdW5sZXNzLCBvbmUgZGF5LAotIAkgKiBp dCBpcyB0aGUgKm9ubHkqIHdheSBmb3Igc3RhbmRhcmQgYnVpbHRpbiBpbXBsZW1lbnRhdGlvbnMg dG8gYmUgYmUKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9lcnIvZXJyX2FsbC5jLmZp cHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Vyci9lcnJfYWxsLmMKLS0tLSBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZXJyL2Vycl9hbGwuYy5maXBzCTIwMTEtMDYtMjEgMTg6NTg6MTAuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Vyci9lcnJfYWxsLmMJMjAxMi0wNC0y MCAwOTowNzowNi4yNDE3ODUyMDUgKzAyMDAKLUBAIC05Niw2ICs5Niw5IEBACi0gI2luY2x1ZGUg PG9wZW5zc2wvb2NzcC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotICNpbmNsdWRlIDxv cGVuc3NsL3RzLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCi0gI2luY2x1ZGUgPG9wZW5z c2wvY21zLmg+Ci0gI2VuZGlmCi1AQCAtMTUzLDYgKzE1Niw5IEBAIHZvaWQgRVJSX2xvYWRfY3J5 cHRvX3N0cmluZ3Modm9pZCkKLSAjZW5kaWYKLSAJRVJSX2xvYWRfT0NTUF9zdHJpbmdzKCk7Ci0g CUVSUl9sb2FkX1VJX3N0cmluZ3MoKTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUVSUl9sb2Fk X0ZJUFNfc3RyaW5ncygpOwotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19DTVMKLSAJRVJS X2xvYWRfQ01TX3N0cmluZ3MoKTsKLSAjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9ldnAvY19hbGxjLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2NfYWxsYy5j Ci0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9jX2FsbGMuYy5maXBzCTIwMTEtMTEtMTQg MjI6MTM6MzUuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9j X2FsbGMuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI0Mjc4NTIyNyArMDIwMAotQEAgLTY1LDYgKzY1 LDExIEBACi0gdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2b2lkKQotIAl7Ci0gCi0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZighRklQU19t b2RlKCkpIAotKwkJewotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSAJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Rlc19jZmIoKSk7Ci0gCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2ZiMSgp KTsKLUBAIC0yMjcsNCArMjMyLDYwIEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9p ZCkKLSAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywiQ0FNRUxMSUEy NTYiKTsKLSAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywiY2FtZWxs aWEyNTYiKTsKLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQl9Ci0rCWVsc2UKLSsJ CXsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fREVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRl X2NmYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NmYigpKTsKLSsKLSsJRVZQ X2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfb2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZTNfb2ZiKCkpOwotKwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9jYmMoKSk7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyX2Fs aWFzKFNOX2Rlc19lZGUzX2NiYywiREVTMyIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9k ZXNfZWRlM19jYmMsImRlczMiKTsKLSsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUoKSk7 Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlMygpKTsKLSsjZW5kaWYKLSsKLSsjaWZuZGVm IE9QRU5TU0xfTk9fQUVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2VjYigpKTsKLSsJ RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzEyOF9jZmIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjEoKSk7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjgoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X29mYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY3RyKCkpOwot KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X3h0cygpKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMs IkFFUzEyOCIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywiYWVzMTI4 Iik7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2VjYigpKTsKLSsJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xOTJfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmIo KSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYjEoKSk7Ci0rCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMTkyX2NmYjgoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX29m YigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY3RyKCkpOwotKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzE5Ml9nY20oKSk7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18x OTJfY2JjLCJBRVMxOTIiKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMs ImFlczE5MiIpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9lY2IoKSk7Ci0rCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18y NTZfY2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmIxKCkpOwotKwlFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmI4KCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9vZmIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2N0cigpKTsKLSsJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl94dHMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCJBRVMy NTYiKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsImFlczI1NiIpOwot KyNlbmRpZgotKwkJfQotKyNlbmRpZgotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vZXZwL2NfYWxsZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9jX2FsbGQuYwot LS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvY19hbGxkLmMuZmlwcwkyMDA5LTA3LTA4IDEw OjUwOjUzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvY19h bGxkLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNDI3ODUyMjcgKzAyMDAKLUBAIC02NCw2ICs2NCwx MSBAQAotIAotIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHModm9pZCkKLSAJewotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsJaWYgKCFGSVBTX21v ZGUoKSkKLSsJCXsKLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fTUQ0Ci0gCUVWUF9hZGRf ZGlnZXN0KEVWUF9tZDQoKSk7Ci0gI2VuZGlmCi1AQCAtMTExLDQgKzExNiwzMiBAQCB2b2lkIE9w ZW5TU0xfYWRkX2FsbF9kaWdlc3RzKHZvaWQpCi0gI2lmbmRlZiBPUEVOU1NMX05PX1dISVJMUE9P TAotIAlFVlBfYWRkX2RpZ2VzdChFVlBfd2hpcmxwb29sKCkpOwotICNlbmRpZgotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJCX0KLSsJZWxzZQotKwkJewotKyNpZiAhZGVmaW5lZChPUEVOU1NMX05P X1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEExKQotKwlFVlBfYWRkX2RpZ2VzdChFVlBf c2hhMSgpKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwic3NsMy1zaGExIik7Ci0r CUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlvbixTTl9zaGExV2l0 aFJTQSk7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfZHNz MSgpKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsU05fZHNhV2l0aFNI QTFfMik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCJEU1MxIik7Ci0r CUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCJkc3MxIik7Ci0rI2VuZGlmCi0r I2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9lY2RzYSgpKTsK LSsjZW5kaWYKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2Ci0rCUVWUF9hZGRf ZGlnZXN0KEVWUF9zaGEyMjQoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7Ci0r I2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgotKwlFVlBfYWRkX2RpZ2VzdChFVlBf c2hhMzg0KCkpOwotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOwotKyNlbmRpZgotKwkJ fQotKyNlbmRpZgotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2RpZ2Vz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9kaWdlc3QuYwotLS0tIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcwkyMDExLTA1LTI5IDE3OjU1OjEzLjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvZGlnZXN0LmMJMjAxMi0w NC0yMCAwOTowNzowNi4yNDM3ODUyNDkgKzAyMDAKLUBAIC0xNDIsOSArMTQyLDUwIEBAIGludCBF VlBfRGlnZXN0SW5pdChFVlBfTURfQ1RYICpjdHgsIGNvbnMKLSAJcmV0dXJuIEVWUF9EaWdlc3RJ bml0X2V4KGN0eCwgdHlwZSwgTlVMTCk7Ci0gCX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r Ci0rLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVt cHQgdG8gdXNlIG5vbiBGSVBTCi0rICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9y ZSB0aGUgZXJyb3JzLgotKyAqLwotKwotK3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQX01EX0NUWCAq Y3R4KQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IGluaXQiKTsgcmV0dXJuIDA7fQot KwotK3N0YXRpYyBpbnQgYmFkX3VwZGF0ZShFVlBfTURfQ1RYICpjdHgsY29uc3Qgdm9pZCAqZGF0 YSxzaXplX3QgY291bnQpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgdXBkYXRlIik7 IHJldHVybiAwO30KLSsKLStzdGF0aWMgaW50IGJhZF9maW5hbChFVlBfTURfQ1RYICpjdHgsdW5z aWduZWQgY2hhciAqbWQpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgRmluYWwiKTsg cmV0dXJuIDA7fQotKwotK3N0YXRpYyBjb25zdCBFVlBfTUQgYmFkX21kID0KLSsJewotKwkwLAot KwkwLAotKwkwLAotKwkwLAotKwliYWRfaW5pdCwKLSsJYmFkX3VwZGF0ZSwKLSsJYmFkX2ZpbmFs LAotKwlOVUxMLAotKwlOVUxMLAotKwlOVUxMLAotKwkwLAotKwl7MCwwLDAsMH0sCi0rCX07Ci0r Ci0rI2VuZGlmCi0rCi0gaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgY29u c3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmltcGwpCi0gCXsKLSAJRVZQX01EX0NUWF9jbGVhcl9m bGFncyhjdHgsRVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0VW UF9ESUdFU1RJTklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQljdHgtPmRp Z2VzdCA9ICZiYWRfbWQ7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAjaWZuZGVmIE9Q RU5TU0xfTk9fRU5HSU5FCi0gCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBj YW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKLSAJICogc28gdGhpcyBjb250ZXh0IG1h eSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5nCi1AQCAtMjAx LDYgKzI0MiwxOCBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCi0g I2VuZGlmCi0gCWlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKQotIAkJewotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJCWlmIChGSVBTX21vZGUoKSkKLSsJCQl7Ci0rCQkJaWYgKCEodHlwZS0+ZmxhZ3Mg JiBFVlBfTURfRkxBR19GSVBTKSAKLSsJCQkgJiYgIShjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9G TEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJCQkJewotKwkJCQlFVlBlcnIoRVZQX0ZfRVZQX0RJR0VT VElOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKLSsJCQkJY3R4LT5kaWdlc3QgPSAm YmFkX21kOwotKwkJCQlyZXR1cm4gMDsKLSsJCQkJfQotKwkJCX0KLSsjZW5kaWYKLSAJCWlmIChj dHgtPmRpZ2VzdCAmJiBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpCi0gCQkJT1BFTlNTTF9mcmVlKGN0 eC0+bWRfZGF0YSk7Ci0gCQljdHgtPmRpZ2VzdD10eXBlOwotQEAgLTIyOSwyNiArMjgyLDE1IEBA IHNraXBfdG9faW5pdDoKLSAJCX0KLSAJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdf Tk9fSU5JVCkKLSAJCXJldHVybiAxOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNf bW9kZSgpKQotLQkJewotLQkJaWYgKEZJUFNfZGlnZXN0aW5pdChjdHgsIHR5cGUpKQotLQkJCXJl dHVybiAxOwotLQkJT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7Ci0tCQljdHgtPm1kX2RhdGEg PSBOVUxMOwotLQkJcmV0dXJuIDA7Ci0tCQl9Ci0tI2VuZGlmCi0gCXJldHVybiBjdHgtPmRpZ2Vz dC0+aW5pdChjdHgpOwotIAl9Ci0gCi0gaW50IEVWUF9EaWdlc3RVcGRhdGUoRVZQX01EX0NUWCAq Y3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQpCi0gCXsKLSAjaWZkZWYgT1BFTlNT TF9GSVBTCi0tCXJldHVybiBGSVBTX2RpZ2VzdHVwZGF0ZShjdHgsIGRhdGEsIGNvdW50KTsKLS0j ZWxzZQotLQlyZXR1cm4gY3R4LT51cGRhdGUoY3R4LGRhdGEsY291bnQpOwotKwlGSVBTX3NlbGZ0 ZXN0X2NoZWNrKCk7Ci0gI2VuZGlmCi0rCXJldHVybiBjdHgtPnVwZGF0ZShjdHgsZGF0YSxjb3Vu dCk7Ci0gCX0KLSAKLSAvKiBUaGUgY2FsbGVyIGNhbiBhc3N1bWUgdGhhdCB0aGlzIHJlbW92ZXMg YW55IHNlY3JldCBkYXRhIGZyb20gdGhlIGNvbnRleHQgKi8KLUBAIC0yNjMsMTAgKzMwNSwxMSBA QCBpbnQgRVZQX0RpZ2VzdEZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zCi0gLyogVGhlIGNhbGxl ciBjYW4gYXNzdW1lIHRoYXQgdGhpcyByZW1vdmVzIGFueSBzZWNyZXQgZGF0YSBmcm9tIHRoZSBj b250ZXh0ICovCi0gaW50IEVWUF9EaWdlc3RGaW5hbF9leChFVlBfTURfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKnNpemUpCi0gCXsKLS0jaWZkZWYgT1BFTlNTTF9G SVBTCi0tCXJldHVybiBGSVBTX2RpZ2VzdGZpbmFsKGN0eCwgbWQsIHNpemUpOwotLSNlbHNlCi0g CWludCByZXQ7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7 Ci0rI2VuZGlmCi0rCi0gCU9QRU5TU0xfYXNzZXJ0KGN0eC0+ZGlnZXN0LT5tZF9zaXplIDw9IEVW UF9NQVhfTURfU0laRSk7Ci0gCXJldD1jdHgtPmRpZ2VzdC0+ZmluYWwoY3R4LG1kKTsKLSAJaWYg KHNpemUgIT0gTlVMTCkKLUBAIC0yNzgsNyArMzIxLDYgQEAgaW50IEVWUF9EaWdlc3RGaW5hbF9l eChFVlBfTURfQ1RYICpjdHgsCi0gCQl9Ci0gCW1lbXNldChjdHgtPm1kX2RhdGEsMCxjdHgtPmRp Z2VzdC0+Y3R4X3NpemUpOwotIAlyZXR1cm4gcmV0OwotLSNlbmRpZgotIAl9Ci0gCi0gaW50IEVW UF9NRF9DVFhfY29weShFVlBfTURfQ1RYICpvdXQsIGNvbnN0IEVWUF9NRF9DVFggKmluKQotQEAg LTM3Miw3ICs0MTQsNiBAQCB2b2lkIEVWUF9NRF9DVFhfZGVzdHJveShFVlBfTURfQ1RYICpjdHgp Ci0gLyogVGhpcyBjYWxsIGZyZWVzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRl eHQgKi8KLSBpbnQgRVZQX01EX0NUWF9jbGVhbnVwKEVWUF9NRF9DVFggKmN0eCkKLSAJewotLSNp Zm5kZWYgT1BFTlNTTF9GSVBTCi0gCS8qIERvbid0IGFzc3VtZSBjdHgtPm1kX2RhdGEgd2FzIGNs ZWFuZWQgaW4gRVZQX0RpZ2VzdF9GaW5hbCwKLSAJICogYmVjYXVzZSBzb21ldGltZXMgb25seSBj b3BpZXMgb2YgdGhlIGNvbnRleHQgYXJlIGV2ZXIgZmluYWxpc2VkLgotIAkgKi8KLUBAIC0zODUs NyArNDI2LDYgQEAgaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURfQ1RYICpjdHgpCi0gCQlP UEVOU1NMX2NsZWFuc2UoY3R4LT5tZF9kYXRhLGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7Ci0gCQlP UEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKLSAJCX0KLS0jZW5kaWYKLSAJaWYgKGN0eC0+cGN0 eCkKLSAJCUVWUF9QS0VZX0NUWF9mcmVlKGN0eC0+cGN0eCk7Ci0gI2lmbmRlZiBPUEVOU1NMX05P X0VOR0lORQotQEAgLTM5NCw5ICs0MzQsNiBAQCBpbnQgRVZQX01EX0NUWF9jbGVhbnVwKEVWUF9N RF9DVFggKmN0eCkKLSAJCSAqIGZ1bmN0aW9uYWwgcmVmZXJlbmNlIHdlIGhlbGQgZm9yIHRoaXMg cmVhc29uLiAqLwotIAkJRU5HSU5FX2ZpbmlzaChjdHgtPmVuZ2luZSk7Ci0gI2VuZGlmCi0tI2lm ZGVmIE9QRU5TU0xfRklQUwotLQlGSVBTX21kX2N0eF9jbGVhbnVwKGN0eCk7Ci0tI2VuZGlmCi0g CW1lbXNldChjdHgsJ1wwJyxzaXplb2YgKmN0eCk7Ci0gCi0gCXJldHVybiAxOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5 cHRvL2V2cC9lX2Flcy5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9lX2Flcy5jLmZp cHMJMjAxMS0xMS0xNSAxMzoxOTo1Ni4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZXZwL2VfYWVzLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNDM3ODUyNDkgKzAyMDAK LUBAIC01Niw3ICs1Niw2IEBACi0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxvcGVu c3NsL2Flcy5oPgotICNpbmNsdWRlICJldnBfbG9jbC5oIgotLSNpZm5kZWYgT1BFTlNTTF9GSVBT Ci0gI2luY2x1ZGUgIm1vZGVzX2xjbC5oIgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSAK LUBAIC03MTYsNyArNzE1LDcgQEAgc3RhdGljIGludCBhZXNfZ2NtX2N0cmwoRVZQX0NJUEhFUl9D VFggKgotIAkJaWYgKGFyZyA8PSAwKQotIAkJCXJldHVybiAwOwotICNpZmRlZiBPUEVOU1NMX0ZJ UFMKLS0JCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYgIShjLT5mbGFncyAmIEVWUF9DSVBIX0ZM QUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQlpZiAoRklQU19tb2RlKCkgJiYgIShjLT5mbGFncyAmIEVW UF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0gCQkJCQkJICYmIGFyZyA8IDEyKQotIAkJCXJl dHVybiAwOwotICNlbmRpZgotQEAgLTExMjgsNyArMTEyNyw3IEBAIHN0YXRpYyBpbnQgYWVzX3h0 c19jaXBoZXIoRVZQX0NJUEhFUl9DVFgKLSAJCXJldHVybiAwOwotICNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSAJLyogUmVxdWlyZW1lbnQgb2YgU1A4MDAtMzhFICovCi0tCWlmIChGSVBTX21vZHVsZV9t b2RlKCkgJiYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykgJiYK LSsJaWYgKEZJUFNfbW9kZSgpICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpICYmCi0gCQkJKGxlbiA+ICgxVUw8PDIwKSoxNikpCi0gCQl7Ci0gCQlFVlBlcnIo RVZQX0ZfQUVTX1hUU19DSVBIRVIsIEVWUF9SX1RPT19MQVJHRSk7Ci1AQCAtMTMxMCw0ICsxMzA5 LDMgQEAgQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLDE5MiwxLDEyLGNjbQotIEJMT0NLX0NJ UEhFUl9jdXN0b20oTklEX2FlcywyNTYsMSwxMixjY20sQ0NNLEVWUF9DSVBIX0ZMQUdfRklQU3xD VVNUT01fRkxBR1MpCi0gCi0gI2VuZGlmCi0tI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9lX2Rl czMuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcwkyMDExLTA1 LTI5IDAxOjAxOjI2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9l dnAvZV9kZXMzLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNDQ3ODUyNzAgKzAyMDAKLUBAIC02NSw4 ICs2NSw2IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgotIAotLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0tCi0gc3RhdGljIGludCBkZXNfZWRl X2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwK LSAJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsaW50IGVuYyk7Ci0gCi1AQCAtMjA4LDkg KzIwNiw5IEBAIHN0YXRpYyBpbnQgZGVzX2VkZTNfY2ZiOF9jaXBoZXIoRVZQX0NJUEgKLSAgICAg fQotIAotIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUsIERFU19FREVfS0VZLCBOSURfZGVzX2Vk ZSwgOCwgMTYsIDgsIDY0LAotLQkJCUVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlX2luaXRfa2V5 LCBOVUxMLCAKLS0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJCUVWUF9DSVBIRVJfZ2V0 X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJ UEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkJZGVzX2VkZV9pbml0X2tleSwKLSsJCQlOVUxMLCBO VUxMLCBOVUxMLAotIAkJCWRlczNfY3RybCkKLSAKLSAjZGVmaW5lIGRlc19lZGUzX2NmYjY0X2Np cGhlciBkZXNfZWRlX2NmYjY0X2NpcGhlcgotQEAgLTIxOSwyMSArMjE3LDIxIEBAIEJMT0NLX0NJ UEhFUl9kZWZzKGRlc19lZGUsIERFU19FREVfS0VZLAotICNkZWZpbmUgZGVzX2VkZTNfZWNiX2Np cGhlciBkZXNfZWRlX2VjYl9jaXBoZXIKLSAKLSBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlMywg REVTX0VERV9LRVksIE5JRF9kZXNfZWRlMywgOCwgMjQsIDgsIDY0LAotLQkJCUVWUF9DSVBIX1JB TkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSwgTlVMTCwgCi0tCQkJRVZQX0NJUEhFUl9zZXRfYXNu MV9pdiwKLS0JCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8 RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJCWRlc19l ZGUzX2luaXRfa2V5LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAot IEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNfZWRlMywy NCw4LDEsCi0tCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSxOVUxM LAotLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICBFVlBfQ0lQSEVSX2dl dF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9D SVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICBkZXNfZWRlM19pbml0X2tleSwKLSsJCSAg ICAgTlVMTCwgTlVMTCwgTlVMTCwKLSAJCSAgICAgZGVzM19jdHJsKQotIAotIEJMT0NLX0NJUEhF Ul9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNfZWRlMywyNCw4LDgsCi0tCQkg ICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSxOVUxMLAotLQkJICAgICBF VlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAot KwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVG QVVMVF9BU04xLAotKwkJICAgICBkZXNfZWRlM19pbml0X2tleSwKLSsJCSAgICAgTlVMTCwgTlVM TCwgTlVMTCwKLSAJCSAgICAgZGVzM19jdHJsKQotIAotIHN0YXRpYyBpbnQgZGVzX2VkZV9pbml0 X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi1AQCAt MzEzLDQgKzMxMSwzIEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlMyh2b2lkKQotIAly ZXR1cm4gJmRlc19lZGUzX2VjYjsKLSB9Ci0gI2VuZGlmCi0tI2VuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xYS9jcnlwdG8vZXZwL2VfbnVsbC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2V2cC9lX251bGwuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvZV9udWxsLmMuZmlw cwkyMDExLTA2LTIwIDIyOjAwOjEwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFh L2NyeXB0by9ldnAvZV9udWxsLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNDQ3ODUyNzAgKzAyMDAK LUBAIC02MSw4ICs2MSw2IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvb2JqZWN0cy5oPgotIAotLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0tCi0gc3RhdGlj IGludCBudWxsX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmtleSwKLSAJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsaW50IGVuYyk7Ci0gc3RhdGljIGlu dCBudWxsX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi1A QCAtNzEsNyArNjksNyBAQCBzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBuX2NpcGhlcj0KLSAJewot IAlOSURfdW5kZWYsCi0gCTEsMCwwLAotLQkwLAotKwlFVlBfQ0lQSF9GTEFHX0ZJUFMsCi0gCW51 bGxfaW5pdF9rZXksCi0gCW51bGxfY2lwaGVyLAotIAlOVUxMLAotQEAgLTEwMSw0ICs5OSwzIEBA IHN0YXRpYyBpbnQgbnVsbF9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmMKLSAJCW1lbWNweSgoY2hh ciAqKW91dCwoY29uc3QgY2hhciAqKWluLGlubCk7Ci0gCXJldHVybiAxOwotIAl9Ci0tI2VuZGlm Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9ldnAvZXZwX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2V2cC9ldnBfZW5jLmMuZmlwcwkyMDEyLTA0LTE5IDAwOjQxOjUwLjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvZXZwX2VuYy5jCTIwMTItMDQtMjAgMDk6MDg6 MDMuNjk2MDE3MDQzICswMjAwCi1AQCAtNjksMTcgKzY5LDU4IEBACi0gI2VuZGlmCi0gI2luY2x1 ZGUgImV2cF9sb2NsLmgiCi0gCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSNkZWZpbmUgTV9kb19j aXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpIEZJUFNfY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKQot LSNlbHNlCi0gI2RlZmluZSBNX2RvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkgY3R4LT5jaXBo ZXItPmRvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkKLS0jZW5kaWYKLSAKLSAKLSBjb25zdCBj aGFyIEVWUF92ZXJzaW9uW109IkVWUCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHBy b2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKLSsgKiBhbGdvcml0aG1zIGluIEZJ UFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCi0rICovCi0rCi0rc3RhdGljIGludCBiYWRf aW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0rCQkg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCi0rCXsgRklQU19FUlJPUl9JR05P UkVEKCJDaXBoZXIgaW5pdCIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRfZG9fY2lw aGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsJCQkgY29uc3Qg dW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCi0rCXsgRklQU19FUlJPUl9JR05P UkVEKCJDaXBoZXIgdXBkYXRlIik7IHJldHVybiAwO30KLSsKLSsvKiBOQjogbm8gY2xlYW51cCBi ZWNhdXNlIGl0IGlzIGFsbG93ZWQgYWZ0ZXIgZmFpbGVkIGluaXQgKi8KLSsKLStzdGF0aWMgaW50 IGJhZF9zZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKLSsJeyBG SVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBzZXRfYXNuMSIpOyByZXR1cm4gMDt9Ci0rc3RhdGlj IGludCBiYWRfZ2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCi0r CXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgZ2V0X2FzbjEiKTsgcmV0dXJuIDA7fQotK3N0 YXRpYyBpbnQgYmFkX2N0cmwoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IHR5cGUsIGludCBhcmcs IHZvaWQgKnB0cikKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBjdHJsIik7IHJldHVy biAwO30KLSsKLStzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0KLSsJewotKwkw LAotKwkwLAotKwkwLAotKwkwLAotKwkwLAotKwliYWRfaW5pdCwKLSsJYmFkX2RvX2NpcGhlciwK LSsJTlVMTCwKLSsJMCwKLSsJYmFkX3NldF9hc24xLAotKwliYWRfZ2V0X2FzbjEsCi0rCWJhZF9j dHJsLAotKwlOVUxMCi0rCX07Ci0rCi0rI2VuZGlmCi0rCi0gdm9pZCBFVlBfQ0lQSEVSX0NUWF9p bml0KEVWUF9DSVBIRVJfQ1RYICpjdHgpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJ UFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0KGN0eCwwLHNpemVvZihFVlBf Q0lQSEVSX0NUWCkpOwotIAkvKiBjdHgtPmNpcGhlcj1OVUxMOyAqLwotIAl9Ci1AQCAtMTExLDYg KzE1MiwxNCBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0Ci0gCQkJ ZW5jID0gMTsKLSAJCWN0eC0+ZW5jcnlwdCA9IGVuYzsKLSAJCX0KLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNf Rl9FVlBfQ0lQSEVSSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJY3R4 LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKLSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRpZgotICNp Zm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAi SW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cwotIAkgKiBzbyB0aGlzIGNv bnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcK LUBAIC0xNjksMTAgKzIxOCw2IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NU WCAqY3QKLSAJCQljdHgtPmVuZ2luZSA9IE5VTEw7Ci0gI2VuZGlmCi0gCi0tI2lmZGVmIE9QRU5T U0xfRklQUwotLQkJaWYgKEZJUFNfbW9kZSgpKQotLQkJCXJldHVybiBGSVBTX2NpcGhlcmluaXQo Y3R4LCBjaXBoZXIsIGtleSwgaXYsIGVuYyk7Ci0tI2Vsc2UKLSAJCWN0eC0+Y2lwaGVyPWNpcGhl cjsKLSAJCWlmIChjdHgtPmNpcGhlci0+Y3R4X3NpemUpCi0gCQkJewotQEAgLTE5Nyw3ICsyNDIs NiBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0Ci0gCQkJCXJldHVy biAwOwotIAkJCQl9Ci0gCQkJfQotLSNlbmRpZgotIAkJfQotIAllbHNlIGlmKCFjdHgtPmNpcGhl cikKLSAJCXsKLUBAIC0yMDcsMTAgKzI1MSw2IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBf Q0lQSEVSX0NUWCAqY3QKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gc2tpcF90b19pbml0 OgotICNlbmRpZgotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpKQotLQkJ cmV0dXJuIEZJUFNfY2lwaGVyaW5pdChjdHgsIGNpcGhlciwga2V5LCBpdiwgZW5jKTsKLS0jZWxz ZQotIAkvKiB3ZSBhc3N1bWUgYmxvY2sgc2l6ZSBpcyBhIHBvd2VyIG9mIDIgaW4gKmNyeXB0VXBk YXRlICovCi0gCU9QRU5TU0xfYXNzZXJ0KGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDEKLSAJ ICAgIHx8IGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDgKLUBAIC0yNTAsNiArMjkwLDIyIEBA IHNraXBfdG9faW5pdDoKLSAJCX0KLSAJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJLyog QWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1ldGVycyBjaGFuZ2VzIGFyZSBwZXJt aXNzaWJsZS4KLSsJICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcgYXQgdGhp cyBwb2ludC4KLSsJICovCi0rCWlmIChrZXkgJiYgRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAo IShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rCQkJJiAhKGN0eC0+ ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJCQl7Ci0rCQkJRVZQZXJy KEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0rCQkJ Y3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0r I2VuZGlmCi0rCi0gCWlmKGtleSB8fCAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQUxX QVlTX0NBTExfSU5JVCkpIHsKLSAJCWlmKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsa2V5LGl2LGVu YykpIHJldHVybiAwOwotIAl9Ci1AQCAtMjU3LDcgKzMxMyw2IEBAIHNraXBfdG9faW5pdDoKLSAJ Y3R4LT5maW5hbF91c2VkPTA7Ci0gCWN0eC0+YmxvY2tfbWFzaz1jdHgtPmNpcGhlci0+YmxvY2tf c2l6ZS0xOwotIAlyZXR1cm4gMTsKLS0jZW5kaWYKLSAJfQotIAotIGludCBFVlBfQ2lwaGVyVXBk YXRlKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgaW50ICpvdXRsLAot QEAgLTU3MCw3ICs2MjUsNiBAQCB2b2lkIEVWUF9DSVBIRVJfQ1RYX2ZyZWUoRVZQX0NJUEhFUl9D VFgKLSAKLSBpbnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51cChFVlBfQ0lQSEVSX0NUWCAqYykKLSAJ ewotLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0gCWlmIChjLT5jaXBoZXIgIT0gTlVMTCkKLSAJCXsK LSAJCWlmKGMtPmNpcGhlci0+Y2xlYW51cCAmJiAhYy0+Y2lwaGVyLT5jbGVhbnVwKGMpKQotQEAg LTU4MSwxNiArNjM1LDEyIEBAIGludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJf Q1QKLSAJCX0KLSAJaWYgKGMtPmNpcGhlcl9kYXRhKQotIAkJT1BFTlNTTF9mcmVlKGMtPmNpcGhl cl9kYXRhKTsKLS0jZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gCWlmIChjLT5l bmdpbmUpCi0gCQkvKiBUaGUgRVZQX0NJUEhFUiB3ZSB1c2VkIGJlbG9uZ3MgdG8gYW4gRU5HSU5F LCByZWxlYXNlIHRoZQotIAkJICogZnVuY3Rpb25hbCByZWZlcmVuY2Ugd2UgaGVsZCBmb3IgdGhp cyByZWFzb24uICovCi0gCQlFTkdJTkVfZmluaXNoKGMtPmVuZ2luZSk7Ci0gI2VuZGlmCi0tI2lm ZGVmIE9QRU5TU0xfRklQUwotLQlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cChjKTsKLS0jZW5kaWYK LSAJbWVtc2V0KGMsMCxzaXplb2YoRVZQX0NJUEhFUl9DVFgpKTsKLSAJcmV0dXJuIDE7Ci0gCX0K LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvZXZwLmguZmlwcyBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vZXZwL2V2cC5oCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9ldnAu aC5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDUuOTkwNzc5ODI0ICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMWEvY3J5cHRvL2V2cC9ldnAuaAkyMDEyLTA0LTIwIDA5OjA3OjA2LjI0Njc4NTMxMiArMDIw MAotQEAgLTc1LDYgKzc1LDEwIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0gI2VuZGlm Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj ZW5kaWYKLSsKLSAvKgotICNkZWZpbmUgRVZQX1JDMl9LRVlfU0laRQkJMTYKLSAjZGVmaW5lIEVW UF9SQzRfS0VZX1NJWkUJCTE2Ci1AQCAtMjcyLDEwICsyNzYsNiBAQCBzdHJ1Y3QgZW52X21kX2N0 eF9zdAotIAkJCQkJCSogY2xlYW5lZCAqLwotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1JFVVNF CQkweDAwMDQgLyogRG9uJ3QgZnJlZSB1cCBjdHgtPm1kX2RhdGEKLSAJCQkJCQkqIGluIEVWUF9N RF9DVFhfY2xlYW51cCAqLwotLS8qIEZJUFMgYW5kIHBhZCBvcHRpb25zIGFyZSBpZ25vcmVkIGlu IDEuMC4wLCBkZWZpbml0aW9ucyBhcmUgaGVyZQotLSAqIHNvIHdlIGRvbid0IGFjY2lkZW50YWxs eSByZXVzZSB0aGUgdmFsdWVzIGZvciBvdGhlciBwdXJwb3Nlcy4KLS0gKi8KLS0KLSAjZGVmaW5l IEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVwkweDAwMDgJLyogQWxsb3cgdXNlIG9mIG5v biBGSVBTIGRpZ2VzdAotIAkJCQkJCSAqIGluIEZJUFMgbW9kZSAqLwotIAotQEAgLTI4Nyw2ICsy ODcsMTAgQEAgc3RydWN0IGVudl9tZF9jdHhfc3QKLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19Q QURfUEtDUzEJMHgwMAkvKiBQS0NTIzEgdjEuNSBtb2RlICovCi0gI2RlZmluZSBFVlBfTURfQ1RY X0ZMQUdfUEFEX1g5MzEJMHgxMAkvKiBYOS4zMSBtb2RlICovCi0gI2RlZmluZSBFVlBfTURfQ1RY X0ZMQUdfUEFEX1BTUwkJMHgyMAkvKiBQU1MgbW9kZSAqLwotKyNkZWZpbmUgTV9FVlBfTURfQ1RY X0ZMQUdfUFNTX1NBTFQoY3R4KSBcCi0rCQkoKGN0eC0+ZmxhZ3M+PjE2KSAmMHhGRkZGKSAvKiBz ZWVkIGxlbmd0aCAqLwotKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTgkweEZGRkYJ Lyogc2FsdCBsZW4gc2FtZSBhcyBkaWdlc3QgKi8KLSsjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19Q U1NfTVJFQwkweEZGRkUJLyogc2FsdCBtYXggb3IgYXV0byByZWNvdmVyZWQgKi8KLSAKLSAjZGVm aW5lIEVWUF9NRF9DVFhfRkxBR19OT19JTklUCQkweDAxMDAgLyogRG9uJ3QgaW5pdGlhbGl6ZSBt ZF9kYXRhICovCi0gCi1AQCAtMzM4LDE1ICszNDIsMTUgQEAgc3RydWN0IGV2cF9jaXBoZXJfc3QK LSAvKiBjaXBoZXIgaGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRpb24gKi8KLSAjZGVmaW5lIAlF VlBfQ0lQSF9SQU5EX0tFWQkJMHgyMDAKLSAvKiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25h bCBjb3B5aW5nIGxvZ2ljICovCi0tI2RlZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAw Ci0rI2RlZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAwMAotIC8qIEFsbG93IHVzZSBk ZWZhdWx0IEFTTjEgZ2V0L3NldCBpdiAqLwotICNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfREVGQVVM VF9BU04xCTB4MTAwMAotIC8qIEJ1ZmZlciBsZW5ndGggaW4gYml0cyBub3QgYnl0ZXM6IENGQjEg bW9kZSBvbmx5ICovCi0gI2RlZmluZQkJRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUwkweDIwMDAK LSAvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCi0tI2RlZmluZQkJ RVZQX0NJUEhfRkxBR19GSVBTCQkweDQwMDAKLSsjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0ZJUFMJ CTB4NDAwCi0gLyogQWxsb3cgbm9uIEZJUFMgY2lwaGVyIGluIEZJUFMgbW9kZSAqLwotLSNkZWZp bmUJCUVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHg4MDAwCi0rI2RlZmluZQkJRVZQX0NJ UEhfRkxBR19OT05fRklQU19BTExPVwkweDgwMAotIC8qIENpcGhlciBoYW5kbGVzIGFueSBhbmQg YWxsIHBhZGRpbmcgbG9naWMgYXMgd2VsbAotICAqIGFzIGZpbmFsaXNhdGlvbi4KLSAgKi8KLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMgb3BlbnNzbC0x LjAuMWEvY3J5cHRvL2V2cC9ldnBfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZw L2V2cF9saWIuYy5maXBzCTIwMTEtMDUtMjkgMDQ6MzI6MDUuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9ldnBfbGliLmMJMjAxMi0wNC0yMCAwOTowNzowNi4y NDY3ODUzMTIgKzAyMDAKLUBAIC0xOTAsNiArMTkwLDkgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2Js b2NrX3NpemUoY29uc3QgRVZQXwotIAotIGludCBFVlBfQ2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpj dHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVk IGludCBpbmwpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hl Y2soKTsKLSsjZW5kaWYKLSAJcmV0dXJuIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LG91dCxp bixpbmwpOwotIAl9Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2V2cF9s b2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2V2cF9sb2NsLmgKLS0tLSBvcGVu c3NsLTEuMC4xYS9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA1 Ljk4MDc3OTYwOSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvZXZwX2xvY2wu aAkyMDEyLTA0LTIwIDA5OjA3OjA2LjI0Nzc4NTMzMyArMDIwMAotQEAgLTI1OCwxMCArMjU4LDkg QEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQXyMjY25hbWUjI19lY2Iodm9pZAotIAlCTE9DS19DSVBI RVJfZnVuY19jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGNwcmVmaXgsY2JpdHMsa3N0cnVjdCxrc2No ZWQpIFwKLSAJQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGtzdHJ1Y3Qs IFwKLSAJCQkgICAgIE5JRF8jI2NpcGhlciMjXyMja2V5c2l6ZSwga2V5c2l6ZS84LCBpdl9sZW4s IGNiaXRzLCBcCi0tCQkJICAgICAwLCBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgXAotLQkJCSAg ICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAotLQkJCSAgICAgRVZQX0NJUEhFUl9nZXRfYXNu MV9pdiwgXAotLQkJCSAgICAgTlVMTCkKLSsJCQkgICAgIEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9B U04xLCBcCi0rCQkJICAgICBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCkKLSsKLSAKLSBzdHJ1Y3QgZXZwX3BrZXlfY3R4X3N0Ci0gCXsKLUBAIC0zNjcsMTEgKzM2Niw2 IEBAIGludCBQS0NTNV92Ml9QQktERjJfa2V5aXZnZW4oRVZQX0NJUEhFUl8KLSAjZGVmaW5lIE1E Ml9Jbml0CXByaXZhdGVfTUQyX0luaXQKLSAjZGVmaW5lIE1EQzJfSW5pdAlwcml2YXRlX01EQzJf SW5pdAotICNkZWZpbmUgU0hBX0luaXQJcHJpdmF0ZV9TSEFfSW5pdAotLSNkZWZpbmUgU0hBMV9J bml0CXByaXZhdGVfU0hBMV9Jbml0Ci0tI2RlZmluZSBTSEEyMjRfSW5pdAlwcml2YXRlX1NIQTIy NF9Jbml0Ci0tI2RlZmluZSBTSEEyNTZfSW5pdAlwcml2YXRlX1NIQTI1Nl9Jbml0Ci0tI2RlZmlu ZSBTSEEzODRfSW5pdAlwcml2YXRlX1NIQTM4NF9Jbml0Ci0tI2RlZmluZSBTSEE1MTJfSW5pdAlw cml2YXRlX1NIQTUxMl9Jbml0Ci0gCi0gI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0 X2tleQotICNkZWZpbmUgQ0FTVF9zZXRfa2V5CXByaXZhdGVfQ0FTVF9zZXRfa2V5Ci1AQCAtMzc5 LDcgKzM3Myw2IEBAIGludCBQS0NTNV92Ml9QQktERjJfa2V5aXZnZW4oRVZQX0NJUEhFUl8KLSAj ZGVmaW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0X2tleQotICNkZWZpbmUgUkMyX3Nl dF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQotICNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9S QzRfc2V0X2tleQotLSNkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVfREVTX3Nl dF9rZXlfdW5jaGVja2VkCi0gI2RlZmluZSBDYW1lbGxpYV9zZXRfa2V5CXByaXZhdGVfQ2FtZWxs aWFfc2V0X2tleQotIAotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2 cC9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvTWFrZWZpbGUKLS0tLSBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL01ha2VmaWxlLmZpcHMJMjAxMS0xMi0yNyAxNTozODoy Ny4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL01ha2VmaWxl CTIwMTItMDQtMjAgMDk6MDc6MDYuMjQ4Nzg1MzU0ICswMjAwCi1AQCAtMjgsNyArMjgsNyBAQCBM SUJTUkM9IGVuY29kZS5jIGRpZ2VzdC5jIGV2cF9lbmMuYyBldnBfCi0gCWJpb19tZC5jIGJpb19i NjQuYyBiaW9fZW5jLmMgZXZwX2Vyci5jIGVfbnVsbC5jIFwKLSAJY19hbGwuYyBjX2FsbGMuYyBj X2FsbGQuYyBldnBfbGliLmMgYmlvX29rLmMgXAotIAlldnBfcGtleS5jIGV2cF9wYmUuYyBwNV9j cnB0LmMgcDVfY3JwdDIuYyBcCi0tCWVfb2xkLmMgcG1ldGhfbGliLmMgcG1ldGhfZm4uYyBwbWV0 aF9nbi5jIG1fc2lndmVyLmMgZXZwX2ZpcHMuYwlcCi0rCWVfb2xkLmMgcG1ldGhfbGliLmMgcG1l dGhfZm4uYyBwbWV0aF9nbi5jIG1fc2lndmVyLmMgXAotIAllX2Flc19jYmNfaG1hY19zaGExLmMg ZV9yYzRfaG1hY19tZDUuYwotIAotIExJQk9CSj0JZW5jb2RlLm8gZGlnZXN0Lm8gZXZwX2VuYy5v IGV2cF9rZXkubyBldnBfYWNuZi5vIFwKLUBAIC00MSw3ICs0MSw3IEBAIExJQk9CSj0JZW5jb2Rl Lm8gZGlnZXN0Lm8gZXZwX2VuYy5vIGV2cF8KLSAJYmlvX21kLm8gYmlvX2I2NC5vIGJpb19lbmMu byBldnBfZXJyLm8gZV9udWxsLm8gXAotIAljX2FsbC5vIGNfYWxsYy5vIGNfYWxsZC5vIGV2cF9s aWIubyBiaW9fb2subyBcCi0gCWV2cF9wa2V5Lm8gZXZwX3BiZS5vIHA1X2NycHQubyBwNV9jcnB0 Mi5vIFwKLS0JZV9vbGQubyBwbWV0aF9saWIubyBwbWV0aF9mbi5vIHBtZXRoX2duLm8gbV9zaWd2 ZXIubyBldnBfZmlwcy5vIFwKLSsJZV9vbGQubyBwbWV0aF9saWIubyBwbWV0aF9mbi5vIHBtZXRo X2duLm8gbV9zaWd2ZXIubyBcCi0gCWVfYWVzX2NiY19obWFjX3NoYTEubyBlX3JjNF9obWFjX21k NS5vCi0gCi0gU1JDPSAkKExJQlNSQykKLUBAIC0xMDMsNDQgKzEwMyw0NiBAQCBiaW9fYjY0Lm86 IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wCi0gYmlvX2I2NC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gYmlvX2I2NC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmgKLSBiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmgKLS1iaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLS1iaW9fYjY0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmgKLS1iaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0tYmlvX2I2NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLS1iaW9fYjY0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYmlvX2I2NC5j Ci0rYmlvX2I2NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oCi0rYmlvX2I2NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStiaW9fYjY0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns di5oCi0rYmlvX2I2NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rYmlvX2I2NC5v OiAuLi9jcnlwdGxpYi5oIGJpb19iNjQuYwotIGJpb19lbmMubzogLi4vLi4vZV9vcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLSBiaW9fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLSBiaW9fZW5jLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAot IGJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaAotLWJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotLWJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotLWJp b19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29zc2xfdHlwLmgKLS1iaW9fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotLWJpb19lbmMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBiaW9fZW5jLmMKLStiaW9f ZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKLStiaW9fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2Jpb19lbmMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLSti aW9fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaAotK2Jpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0 YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStiaW9fZW5jLm86IC4uL2Ny eXB0bGliLmggYmlvX2VuYy5jCi0gYmlvX21kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIGJpb19tZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0 by5oCi0gYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaAotLWJpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLS1iaW9fbWQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0tYmlvX21k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oCi0tYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5 cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotLWJpb19tZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAot LWJpb19tZC5vOiAuLi9jcnlwdGxpYi5oIGJpb19tZC5jCi0rYmlvX21kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rYmlvX21kLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmgKLStiaW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2Jpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2Jpb19t ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmgKLStiaW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgg Li4vY3J5cHRsaWIuaCBiaW9fbWQuYwotIGJpb19vay5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBiaW9fb2su bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9j cnlwdG8uaAotIGJpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXJyLmgKLS1iaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0tYmlvX29rLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotLWJp b19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaAotLWJpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0tYmlvX29rLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAot LWJpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5o IGJpb19vay5jCi0rYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9s aGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStiaW9fb2subzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaAotK2Jpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2Jpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2Jpb19vay5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFj a3MuaAotK2Jpb19vay5vOiAuLi9jcnlwdGxpYi5oIGJpb19vay5jCi0gY19hbGwubzogLi4vLi4v ZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Jpby5oCi0gY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotLWNfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l X29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi0tY19hbGwubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotLWNfYWxsLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmgKLS1jX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmgKLStjX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLStjX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rY19hbGwubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotIGNf YWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29iamVjdHMuaAotIGNfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0gY19hbGwubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLUBA IC0xNTAsOSArMTUyLDggQEAgY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAu LgotIGNfYWxsLm86IC4uL2NyeXB0bGliLmggY19hbGwuYwotIGNfYWxsYy5vOiAuLi8uLi9lX29z LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlv LmgKLSBjX2FsbGMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaAotLWNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotLWNfYWxsYy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi0tY19hbGxjLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgK LStjX2FsbGMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCi0rY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0gY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLSBjX2FsbGMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bGNvbmYuaAotIGNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotQEAgLTE2Myw5ICsxNjQsOCBAQCBjX2FsbGMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuCi0gY19hbGxjLm86IC4uL2NyeXB0bGli LmggY19hbGxjLmMKLSBjX2FsbGQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gY19hbGxkLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLS1j X2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2VjLmgKLS1jX2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZWNkc2EuaAotLWNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rY19hbGxkLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2NfYWxsZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aAotIGNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqX21hYy5oCi0gY19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpl Y3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBjX2FsbGQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmgKLUBAIC0xNzYsMTAgKzE3Niw5IEBAIGNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wveDUwOS5oIC4KLSBjX2FsbGQubzogLi4vY3J5cHRsaWIuaCBjX2FsbGQuYwotIGRpZ2VzdC5v OiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmgKLSBkaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotLWRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotLWRpZ2VzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5o Ci0tZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmgKLS1kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotK2RpZ2VzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0r ZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmgKLSBkaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0gZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0g ZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9wa2NzNy5oCi1AQCAtMTkwLDE4ICsxODksMTkgQEAgZGlnZXN0Lm86IC4uL2NyeXB0 bGliLmggZGlnZXN0LmMKLSBlX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotIGVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLSBlX2Flcy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1lX2Fl cy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmgKLS1lX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbW9kZXMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCi0tZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotLWVfYWVzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oCi0tZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLS1lX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotLWVfYWVzLm86IC4uL21v ZGVzL21vZGVzX2xjbC5oIGVfYWVzLmMgZXZwX2xvY2wuaAotK2VfYWVzLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZV9hZXMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL21vZGVz LmgKLStlX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStlX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2VfYWVzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5k LmgKLStlX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N0YWNrLmgKLStlX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuaCAuLi9tb2Rlcy9tb2Rlc19sY2wuaCBlX2Flcy5jCi0rZV9hZXMubzogZXZwX2xvY2wu aAotIGVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLSBlX2Flc19jYmNfaG1hY19zaGExLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIGVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oCi0gZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaAotLWVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oCi0rZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotIGVfYWVzX2NiY19obWFj X3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotIGVfYWVzX2NiY19obWFj X3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotIGVfYWVzX2NiY19obWFj X3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLUBAIC0yMTEsMjAg KzIxMSwyMyBAQCBlX2Flc19jYmNfaG1hY19zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlCi0gZV9h ZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLSBlX2Flc19j YmNfaG1hY19zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0gZV9hZXNfY2Jj X2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBlX2Flc19jYmNf aG1hY19zaGExLmMKLStlX2Flc19jYmNfaG1hY19zaGExLm86IGV2cF9sb2NsLmgKLSBlX2JmLm86 IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaAotIGVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jsb3dmaXNoLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLSBlX2JmLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLS1l X2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmgKLS1lX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLS1lX2JmLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0tZV9i Zi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmgKLS1lX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4u L2NyeXB0bGliLmggZV9iZi5jIGV2cF9sb2NsLmgKLStlX2JmLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStlX2JmLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aAotK2VfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStlX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2VfYmYubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tz LmgKLStlX2JmLm86IC4uL2NyeXB0bGliLmggZV9iZi5jIGV2cF9sb2NsLmgKLSBlX2NhbWVsbGlh Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oCi0gZV9jYW1lbGxpYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY2FtZWxsaWEuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLSBlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLWVfY2FtZWxsaWEu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oCi0tZV9jYW1lbGxpYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZV9jYW1lbGxpYS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq X21hYy5oCi0rZV9jYW1lbGxpYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0g ZV9jYW1lbGxpYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotIGVfY2Ft ZWxsaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29zc2xfdHlwLmgKLSBlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z YWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotQEAgLTIzMyw3NCArMjM2 LDgwIEBAIGVfY2FzdC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGUKLSBlX2Nhc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9j YXN0LmgKLSBlX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0gZV9jYXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLS1lX2Nhc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotLWVfY2Fz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCi0tZV9jYXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns di5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0tZV9jYXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAot LWVfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5o IGVfY2FzdC5jIGV2cF9sb2NsLmgKLStlX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2VfY2FzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStl X2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKLStlX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZV9jYXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oCi0rZV9jYXN0Lm86IC4uL2NyeXB0bGliLmggZV9jYXN0LmMgZXZwX2xvY2wuaAotIGVfZGVz Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaAotIGVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLSBlX2Rlcy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZGVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaAotIGVfZGVzLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aAotLWVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAotLWVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotLWVfZGVzLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0t ZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3JhbmQuaAotLWVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotLWVfZGVzLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oCi0tZV9kZXMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oIC4uL2NyeXB0bGliLmggZV9kZXMuYyBl dnBfbG9jbC5oCi0rZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKLStlX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZV9kZXMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYu aAotK2VfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Jh bmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStlX2Rlcy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAot K2VfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC91aV9jb21wYXQuaAotK2VfZGVzLm86IC4uL2NyeXB0bGliLmggZV9kZXMuYyBldnBfbG9jbC5o Ci0gZV9kZXMzLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIGVfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0gZV9kZXMzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5o Ci0gZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lcnIuaAotLWVfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLS1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0tZV9kZXMzLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oCi0tZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLS1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0tZV9kZXMz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC91aS5oCi0tZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaCAuLi9j cnlwdGxpYi5oIGVfZGVzMy5jIGV2cF9sb2NsLmgKLStlX2RlczMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStlX2RlczMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aAotK2VfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZV9kZXMzLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVz dGFjay5oCi0rZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC91aS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaAotK2VfZGVzMy5vOiAuLi9j cnlwdGxpYi5oIGVfZGVzMy5jIGV2cF9sb2NsLmgKLSBlX2lkZWEubzogLi4vLi4vZV9vcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0g ZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvY3J5cHRvLmgKLSBlX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaWRlYS5oCi0tZV9pZGVhLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgK LS1lX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaAotLWVfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotLWVfaWRlYS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0 YWNrLmgKLS1lX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5 cHRsaWIuaCBlX2lkZWEuYyBldnBfbG9jbC5oCi0rZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZV9pZGVhLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9pZGVhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStl X2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oCi0rZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZV9pZGVhLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaAotK2VfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaAotK2VfaWRlYS5vOiAuLi9jcnlwdGxpYi5oIGVfaWRlYS5j IGV2cF9sb2NsLmgKLSBlX251bGwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gZV9udWxsLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLSBl X251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vyci5oCi0tZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaAotLWVfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLS1lX251bGwubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmgKLS1lX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0tZV9udWxsLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0tZV9udWxs Lm86IC4uL2NyeXB0bGliLmggZV9udWxsLmMKLStlX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStlX251bGwubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAot K2VfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZV9udWxsLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3Rh Y2suaAotK2VfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlw dGxpYi5oIGVfbnVsbC5jCi0gZV9vbGQubzogZV9vbGQuYwotIGVfcmMyLm86IC4uLy4uL2Vfb3Mu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aAotIGVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvY3J5cHRvLmgKLSBlX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1lX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLS1lX3JjMi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmgKLS1lX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotLWVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYzIuaAotLWVfcmMyLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2su aAotLWVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGli LmggZV9yYzIuYyBldnBfbG9jbC5oCi0rZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStlX3JjMi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZV9yYzIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaAotK2VfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZV9yYzIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3JjMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2VfcmMy Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oCi0rZV9yYzIubzogLi4vY3J5cHRsaWIuaCBlX3JjMi5jIGV2cF9sb2NsLmgKLSBl X3JjNC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmgKLSBlX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVm ZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0gZV9yYzQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tZV9yYzQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oCi0tZV9yYzQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oCi0tZV9yYzQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLS1lX3JjNC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmM0 LmgKLS1lX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N0YWNrLmgKLS1lX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuaCAuLi9jcnlwdGxpYi5oIGVfcmM0LmMgZXZwX2xvY2wuaAotK2VfcmM0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZV9y YzQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29ial9tYWMuaAotK2VfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStlX3JjNC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2Vf cmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYzQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmgKLStlX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotK2VfcmM0Lm86IC4uL2NyeXB0bGliLmggZV9y YzQuYyBldnBfbG9jbC5oCi0gZV9yYzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBlX3JjNF9obWFjX21kNS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmgKLS1lX3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL21kNS5oCi0tZV9yYzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAotK2VfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZV9yYzRfaG1hY19tZDUubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL21kNS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFj LmgKLSBlX3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0g ZV9yYzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBl X3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotQEAgLTMw OCwyOSArMzE3LDI0IEBAIGVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC8K LSBlX3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLSBl X3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotIGVfcmM0X2ht YWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGVfcmM0X2htYWNfbWQ1 LmMKLS1lX3JjNS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0t ZV9yYzUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAotLWVfcmM1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLWVfcmM1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0tZV9yYzUubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmgKLS1lX3JjNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLS1lX3JjNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGVfcmM1LmMKLStlX3JjNS5vOiBlX3JjNS5jCi0g ZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oCi0gZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotIGVfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0tZV9zZWVkLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLS1l X3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAotLWVfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotLWVfc2VlZC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NlZWQu aAotLWVfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3ltaGFja3MuaAotLWVfc2VlZC5vOiBlX3NlZWQuYyBldnBfbG9jbC5oCi0rZV9z ZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKLStlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZV9z ZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zYWZlc3RhY2suaAotK2Vfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2VlZC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oIGVfc2VlZC5jIGV2cF9sb2NsLmgKLSBlX3hjYmNfZC5vOiAuLi8u Li9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotIGVfeGNiY19kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLSBl X3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Rlcy5oCi0gZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotIGVfeGNiY19kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLS1lX3hjYmNfZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq X21hYy5oCi0tZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2VfeGNiY19kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStlX3hjYmNf ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKLStlX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaAotIGVfeGNiY19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0gZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0gZV94Y2Jj X2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3VpLmgKLUBAIC0zMzksMjggKzM0MywyNyBAQCBlX3hjYmNfZC5vOiBldnBfbG9jbC5oCi0g ZW5jb2RlLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIGVuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0gZW5jb2RlLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLWVu Y29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKLS1lbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0tZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0tZW5j b2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zYWZlc3RhY2suaAotLWVuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2su aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotLWVuY29kZS5vOiAuLi9jcnlwdGxp Yi5oIGVuY29kZS5jCi0rZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStlbmNvZGUubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bGNvbmYuaAotK2VuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2VuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStlbmNvZGUu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBlbmNvZGUu YwotIGV2cF9hY25mLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5o Ci0gZXZwX2FjbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9idWZmZXIuaAotIGV2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25m LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0gZXZwX2FjbmYubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tZXZwX2Fj bmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9s aGFzaC5oCi0tZXZwX2FjbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0tZXZwX2FjbmYubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmgKLStldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2V2cF9hY25mLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStl dnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gZXZwX2FjbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLSBldnBfYWNuZi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKLSBldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAu Li9jcnlwdGxpYi5oIGV2cF9hY25mLmMKLSBldnBfZW5jLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMS5oCi0gZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gZXZwX2VuYy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLS1l dnBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lY2RoLmgKLS1ldnBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotLWV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2V2cF9lbmMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2V2 cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9maXBzLmgKLSBldnBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLSBldnBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBldnBf ZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vc3NsX3R5cC5oCi1AQCAtMzcyLDI0ICszNzUsMTcgQEAgZXZwX2VuYy5vOiAuLi9jcnlw dGxpYi5oIGV2cF9lbmMuYyBldnBfbAotIGV2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBldnBfZXJyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotIGV2 cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaAotLWV2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotLWV2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotLWV2cF9l cnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmgKLS1ldnBfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotLWV2cF9lcnIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZXZwX2Vyci5jCi0tZXZwX2ZpcHMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLS1ldnBfZmlw cy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmgKLS1ldnBfZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotLWV2cF9maXBzLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLS1ldnBf Zmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3NzbF90eXAuaAotLWV2cF9maXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotLWV2cF9maXBzLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGV2cF9maXBzLmMKLStldnBfZXJyLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStl dnBfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaAotK2V2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStldnBfZXJyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaAotK2V2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStldnBfZXJyLm86IGV2cF9lcnIuYwotIGV2cF9r ZXkubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLSBldnBfa2V5 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVm ZmVyLmgKLSBldnBfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZV9vczIuaAotLWV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotLWV2cF9rZXkubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tZXZwX2tl eS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmgKLStldnBfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmgKLStldnBfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLSBldnBfa2V5Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotIGV2 cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKLSBldnBfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1AQCAtNDAxLDE3ICszOTcs MTcgQEAgZXZwX2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcAotIGV2cF9saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZm ZXIuaAotIGV2cF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0gZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0tZXZwX2xpYi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0tZXZw X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3NsY29uZi5oCi0tZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotLWV2cF9saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oCi0tZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlw dGxpYi5oIGV2cF9saWIuYwotK2V2cF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2V2cF9saWIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZXZw X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaAotK2V2cF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZXZwX2xpYi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFj a3MuaAotK2V2cF9saWIubzogLi4vY3J5cHRsaWIuaCBldnBfbGliLmMKLSBldnBfcGJlLm86IC4u Ly4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0gZXZwX3BiZS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0g ZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmgKLS1ldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLS1ldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLWV2cF9wYmUubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0r ZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oCi0rZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0gZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLSBldnBfcGJlLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oCi0gZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczEyLmgKLUBAIC00MjIsOSArNDE4LDggQEAgZXZw X3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZgotIGV2cF9wa2V5Lm86IC4uLy4u L2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0gZXZwX3BrZXkubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotIGV2 cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaAotLWV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLS1ldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1ldnBfcGtleS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK LStldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oCi0rZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotIGV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotIGV2cF9w a2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gZXZwX3BrZXkubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmgKLUBAIC00MzYsOSArNDMxLDggQEAgZXZwX3BrZXkubzogLi4vYXNuMS9hc24xX2xv Y2wuaCAuLi9jcnlwdAotIG1fZHNzLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIG1fZHNzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLSBt X2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmgKLS1tX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZWNkaC5oCi0tbV9kc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNh LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tbV9kc3MubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rbV9kc3MubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK21f ZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKLSBtX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLSBtX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotIG1fZHNz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9wa2NzNy5oCi1AQCAtNDQ5LDkgKzQ0Myw4IEBAIG1fZHNzLm86IC4uL2NyeXB0bGliLmggbV9k c3MuYwotIG1fZHNzMS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBtX2RzczEubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotIG1fZHNzMS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmgKLS1tX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2VjZGguaAotLW1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1tX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rbV9kc3MxLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLSttX2Rz czEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaAotIG1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLSBtX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLSBtX2Rz czEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3BrY3M3LmgKLUBAIC00NTksMzEgKzQ1MiwyMyBAQCBtX2RzczEubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjCi0gbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0gbV9kc3MxLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLSBt X2RzczEubzogLi4vY3J5cHRsaWIuaCBtX2RzczEuYwotLW1fZWNkc2EubzogLi4vLi4vZV9vcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLS1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLS1tX2VjZHNhLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaAotLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjZGguaAotLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNh LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLS1tX2VjZHNhLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAotLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLS1tX2VjZHNhLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi0tbV9l Y2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3NoYS5oCi0tbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotLW1fZWNkc2EubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotLW1fZWNk c2EubzogLi4vY3J5cHRsaWIuaCBtX2VjZHNhLmMKLS1tX21kMi5vOiAuLi8uLi9lX29zLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rbV9lY2RzYS5vOiBtX2VjZHNhLmMKLSttX21kMi5v OiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmgKLSBtX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0gbV9tZDIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tbV9tZDIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKLS1tX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotLW1fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotLW1fbWQyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggbV9tZDIuYwotK21f bWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oCi0rbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL21kMi5oCi0rbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9t YWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rbV9tZDIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmgKLSttX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvcGtjczcuaAotK21fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2Eu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLSttX21kMi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLSttX21kMi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv eDUwOS5oCi0rbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5 cHRsaWIuaCBldnBfbG9jbC5oIG1fbWQyLmMKLSBtX21kNC5vOiAuLi8uLi9lX29zLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBtX21k NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oCi0tbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjLmgKLS1tX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNk aC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi0tbV9tZDQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK21fbWQ0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAot K21fbWQ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oCi0gbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL21kNC5oCi0gbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i al9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0gbV9tZDQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2x2LmgKLUBAIC00OTQsOSArNDc5LDggQEAgbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N5bWhhY2tzLgotIG1fbWQ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4u L2NyeXB0bGliLmggZXZwX2xvY2wuaCBtX21kNC5jCi0gbV9tZDUubzogLi4vLi4vZV9vcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0g bV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAotLW1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi0tbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotLW1fbWQ1Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLSttX21kNS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmgKLSttX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaAotIG1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9tZDUuaAotIG1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotIG1fbWQ1Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oCi1AQCAtNTA1LDI2ICs0ODksMTcgQEAgbV9tZDUubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3JzYS5oIC4uLwotIG1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotIG1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLSBtX21kNS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGV2cF9sb2NsLmgg bV9tZDUuYwotLW1fbWRjMi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSttX21kYzIubzogLi4vLi4vZV9vcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIG1fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0tbV9tZGMyLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29s ZC5oCi0tbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lYy5oCi0tbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLS1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotLW1fbWRjMi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbWRjMi5oCi0t bV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaAotLW1fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotLW1fbWRjMi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcu aAotLW1fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3NhZmVzdGFjay5oCi0tbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotLW1fbWRjMi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaAotLW1fbWRjMi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3g1MDkuaAotLW1fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9j cnlwdGxpYi5oIGV2cF9sb2NsLmggbV9tZGMyLmMKLSttX21kYzIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rbV9tZGMyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCi0rbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK21fbWRjMi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIG1fbWRjMi5j Ci0gbV9udWxsLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIG1fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0tbV9udWxsLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi0t bV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2VjZHNhLmgKLS1tX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK21fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLSttX251bGwubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLSBtX251bGwu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i al9tYWMuaAotIG1fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gbV9udWxsLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1AQCAt NTM1LDkgKzUxMCw4IEBAIG1fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkK LSBtX3JpcGVtZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAot IG1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYnVmZmVyLmgKLSBtX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLS1tX3JpcGVtZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi0tbV9yaXBlbWQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vy ci5oCi0tbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oCi0rbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vy ci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK21fcmlwZW1kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLSBtX3JpcGVt ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKLSBtX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaAotIG1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1AQCAtNTQ5LDkgKzUyMyw4IEBAIG1fcmlwZW1k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3YKLSBtX3JpcGVtZC5vOiBtX3JpcGVtZC5j Ci0gbV9zaGEubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotLW1fc2hhLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi0tbV9z aGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZWNkc2EuaAotLW1fc2hhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmgKLSttX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLSttX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotIG1fc2hhLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgK LSBtX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLUBAIC01NjIsOSArNTM1 LDggQEAgbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLgotIG1fc2hhLm86 IC4uL2NyeXB0bGliLmggZXZwX2xvY2wuaCBtX3NoYS5jCi0gbV9zaGExLm86IC4uLy4uL2Vfb3Mu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aAotIG1fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCi0tbV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi0tbV9zaGExLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLS1tX3NoYTEubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAot K21fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmgKLSttX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLSBtX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotIG1fc2hhMS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCi0gbV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1AQCAtNTc2LDkgKzU0OCw4IEBAIG1fc2hhMS5v OiAuLi9jcnlwdGxpYi5oIG1fc2hhMS5jCi0gbV9zaWd2ZXIubzogLi4vLi4vZV9vcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLSBtX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gbV9zaWd2ZXIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o Ci0tbV9zaWd2ZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2VjZGguaAotLW1fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLW1fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK21fc2lndmVyLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgK LSttX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oCi0gbV9zaWd2ZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9t YWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0gbV9zaWd2ZXIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBtX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotQEAg LTU4OSw5ICs1NjAsOCBAQCBtX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92 Ci0gbV9zaWd2ZXIubzogbV9zaWd2ZXIuYwotIG1fd3AubzogLi4vLi4vZV9vcy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gbV93cC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ny eXB0by5oCi0tbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZWMuaAotLW1fd3AubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotLW1fd3AubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK21fd3AubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rbV93cC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aAotIG1fd3AubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAotIG1fd3AubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotIG1fd3AubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgK LUBAIC02MDIsOSArNTcyLDggQEAgbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5o IC4uLwotIG1fd3AubzogLi4vY3J5cHRsaWIuaCBldnBfbG9jbC5oIG1fd3AuYwotIG5hbWVzLm86 IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaAotIG5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLS1uYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotLW5hbWVzLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLS1u YW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oCi0rbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oCi0rbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLSBuYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0gbmFtZXMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAotIG5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1AQCAtNjE1LDkgKzU4NCw4IEBAIG5hbWVz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS4KLSBwNV9jcnB0Lm86IC4uLy4uL2Vf b3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0gcDVfY3JwdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gcDVfY3Jw dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmgKLS1wNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lY2RoLmgKLS1wNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l Y2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLXA1X2NycHQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rcDVfY3Jw dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oCi0rcDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oCi0gcDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq X21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLSBwNV9jcnB0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3Nsdi5oCi0gcDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotQEAgLTYyOCw5ICs1OTYsOCBAQCBwNV9jcnB0Lm86 IC4uL2NyeXB0bGliLmggcDVfY3JwdC5jCi0gcDVfY3JwdDIubzogLi4vLi4vZV9vcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLSBwNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gcDVfY3JwdDIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o Ci0tcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2VjZGguaAotLXA1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLXA1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCi0rcDVfY3JwdDIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAot K3A1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2htYWMuaAotIHA1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLSBwNV9jcnB0Mi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o Ci0gcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLUBAIC02NDEsOSArNjA4LDggQEAgcDVfY3JwdDIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdgotIHA1X2NycHQyLm86IHA1X2NycHQyLmMKLSBw X2RlYy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmgKLSBwX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVm ZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0tcF9kZWMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLS1wX2RlYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2Rz YS5oCi0tcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaAotK3BfZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK3BfZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0gcF9kZWMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotIHBf ZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmgKLSBwX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotQEAgLTY1NCw5ICs2MjAsOCBA QCBwX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuCi0gcF9kZWMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBwX2RlYy5jCi0gcF9l bmMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Jpby5oCi0gcF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZl ci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotLXBfZW5jLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi0tcF9lbmMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2Eu aAotLXBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmgKLStwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotIHBfZW5jLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLSBwX2Vu Yy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCi0gcF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLUBAIC02NzAsOSArNjM1LDggQEAg cF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjFfbWFjLgotIHBfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotIHBf bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZGguaAotIHBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaAotLXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLS1wX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKLS1wX2xpYi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0r cF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaAotK3BfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oCi0gcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotIHBfbGliLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmgKLSBwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3NzbF90eXAuaAotQEAgLTY4Myw5ICs2NDcsOCBAQCBwX2xpYi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uCi0gcF9saWIubzogLi4vYXNuMS9hc24xX2xvY2wu aCAuLi9jcnlwdGxpYi5oIHBfbGliLmMKLSBwX29wZW4ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gcF9vcGVu Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmgKLS1wX29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjLmgKLS1wX29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vj ZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotLXBfb3Blbi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rcF9vcGVuLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aAotK3Bfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaAotIHBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0gcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBw X29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29zc2xfdHlwLmgKLUBAIC02OTYsOSArNjU5LDggQEAgcF9vcGVuLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC94NTA5LmggLgotIHBfb3Blbi5vOiAuLi9jcnlwdGxpYi5oIHBfb3Blbi5j Ci0gcF9zZWFsLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIHBfc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0tcF9zZWFsLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi0t cF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2VjZHNhLmgKLS1wX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK3Bfc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStwX3NlYWwubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLSBwX3NlYWwu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i al9tYWMuaAotIHBfc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1AQCAt NzA5LDM1ICs2NzEsMzYgQEAgcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cwotIHBfc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxp Yi5oIHBfc2VhbC5jCi0gcF9zaWduLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIHBfc2lnbi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0t cF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lYy5oCi0tcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLS1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK3Bfc2lnbi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStwX3NpZ24u bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz LmgKLSBwX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29ial9tYWMuaAotIHBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq ZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gcF9zaWduLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oCi0tcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotLXBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLS1wX3NpZ24ubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAot LXBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5o IHBfc2lnbi5jCi0rcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotK3Bfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi0rcF9zaWduLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5o Ci0rcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3g1MDlfdmZ5LmgKLStwX3NpZ24ubzogLi4vY3J5cHRsaWIuaCBwX3NpZ24uYwotIHBf dmVyaWZ5Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0gcF92 ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9idWZmZXIuaAotIHBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLS1wX3ZlcmlmeS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgK LS1wX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmgKLStwX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotIHBfdmVyaWZ5Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAotIHBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o Ci0gcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLS1wX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLS1wX3ZlcmlmeS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNr LmgKLS1wX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wveDUwOS5oCi0tcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBwX3ZlcmlmeS5jCi0rcF92ZXJpZnkubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi0rcF92 ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zaGEuaAotK3BfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rcF92ZXJpZnkubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotK3Bf dmVyaWZ5Lm86IC4uL2NyeXB0bGliLmggcF92ZXJpZnkuYwotIHBtZXRoX2ZuLm86IC4uLy4uL2Vf b3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0gcG1ldGhfZm4ubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotIHBtZXRo X2ZuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaAotIHBtZXRoX2ZuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLS1wbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0tcG1ldGhfZm4ubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAotK3BtZXRoX2ZuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStwbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStwbWV0aF9m bi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotIHBtZXRoX2ZuLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oCi0gcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0gcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBldnBfbG9jbC5oCi1AQCAtNzQ2LDkgKzcw OSw5IEBAIHBtZXRoX2duLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL28KLSBwbWV0aF9n bi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ju LmgKLSBwbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oCi0gcG1ldGhfZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tcG1ldGhfZ24ubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0tcG1l dGhfZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oCi0tcG1ldGhfZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2xjb25mLmgKLStwbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK3BtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStwbWV0aF9nbi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCi0gcG1ldGhfZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2Lmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLSBwbWV0aF9nbi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLSBw bWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5o IGV2cF9sb2NsLmgKLUBAIC03NTYsOSArNzE5LDggQEAgcG1ldGhfZ24ubzogcG1ldGhfZ24uYwot IHBtZXRoX2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAot IHBtZXRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2J1ZmZlci5oCi0gcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlw dG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotLXBtZXRoX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi0tcG1ldGhf bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lbmdpbmUuaAotLXBtZXRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lbmdpbmUuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStwbWV0aF9saWIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgK LSBwbWV0aF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29ial9tYWMuaAotIHBtZXRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oCi0gcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMgb3Bl bnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9tX2RzczEuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9ldnAvbV9kc3MxLmMuZmlwcwkyMDExLTA2LTAxIDE3OjExOjAwLjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvbV9kc3MxLmMJMjAxMi0wNC0yMCAwOTowNzow Ni4yNDk3ODUzNzYgKzAyMDAKLUBAIC02OCw4ICs2OCw2IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wv ZHNhLmg+Ci0gI2VuZGlmCi0gCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMgCi0tCi0gc3RhdGljIGlu dCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gU0hBMV9Jbml0KGN0eC0+bWRfZGF0 YSk7IH0KLSAKLUBAIC04NCw3ICs4Miw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNzMV9tZD0K LSAJTklEX2RzYSwKLSAJTklEX2RzYVdpdGhTSEExLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0J RVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QsCi0rCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9N RF9GTEFHX0ZJUFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWwsCi1AQCAtMTAwLDQgKzk4 LDMgQEAgY29uc3QgRVZQX01EICpFVlBfZHNzMSh2b2lkKQotIAlyZXR1cm4oJmRzczFfbWQpOwot IAl9Ci0gI2VuZGlmCi0tI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZw L21fZHNzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL21fZHNzLmMKLS0tLSBvcGVu c3NsLTEuMC4xYS9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcwkyMDExLTA2LTAxIDE3OjExOjAwLjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvbV9kc3MuYwkyMDEy LTA0LTIwIDA5OjA3OjA2LjI0OTc4NTM3NiArMDIwMAotQEAgLTY2LDcgKzY2LDYgQEAKLSAjZW5k aWYKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSAK LSBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQotIAl7IHJldHVybiBTSEExX0luaXQo Y3R4LT5tZF9kYXRhKTsgfQotQEAgLTgyLDcgKzgxLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBk c2FfbWQ9Ci0gCU5JRF9kc2FXaXRoU0hBLAotIAlOSURfZHNhV2l0aFNIQSwKLSAJU0hBX0RJR0VT VF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAotKwlFVlBfTURfRkxBR19QS0VZ X0RJR0VTVHxFVlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUsCi0gCWZpbmFsLAot QEAgLTk4LDQgKzk3LDMgQEAgY29uc3QgRVZQX01EICpFVlBfZHNzKHZvaWQpCi0gCXJldHVybigm ZHNhX21kKTsKLSAJfQotICNlbmRpZgotLSNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEv Y3J5cHRvL2V2cC9tX21kMi5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9tX21kMi5j Ci0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9tX21kMi5jLmZpcHMJMjAwNS0wNy0xNiAx NDozNzozMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL21f bWQyLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNDk3ODUzNzYgKzAyMDAKLUBAIC02OCw2ICs2OCw3 IEBACi0gI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgot ICNlbmRpZgotKyNpbmNsdWRlICJldnBfbG9jbC5oIgotIAotIHN0YXRpYyBpbnQgaW5pdChFVlBf TURfQ1RYICpjdHgpCi0gCXsgcmV0dXJuIE1EMl9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcyBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZXZwL21fc2hhMS5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9tX3No YTEuYy5maXBzCTIwMTEtMDUtMjkgMDE6MDE6MjYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2V2cC9tX3NoYTEuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1MDc4NTM5 OCArMDIwMAotQEAgLTU5LDggKzU5LDYgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVk ZSAiY3J5cHRsaWIuaCIKLSAKLS0jaWZuZGVmIE9QRU5TU0xfRklQUwotLQotICNpZm5kZWYgT1BF TlNTTF9OT19TSEEKLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLUBAIC04NSw3ICs4Myw4 IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMV9tZD0KLSAJTklEX3NoYTEsCi0gCU5JRF9zaGEx V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQV9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19Q S0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBf TURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5U fAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdCwKLSAJdXBkYXRlLAotIAlmaW5hbCwKLUBA IC0xMjIsNyArMTIxLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyMjRfbWQ9Ci0gCU5JRF9z aGEyMjQsCi0gCU5JRF9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBMjI0X0RJR0VTVF9M RU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19E SUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBf TURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0MjI0 LAotIAl1cGRhdGUyNTYsCi0gCWZpbmFsMjU2LAotQEAgLTE0MSw3ICsxNDEsOCBAQCBzdGF0aWMg Y29uc3QgRVZQX01EIHNoYTI1Nl9tZD0KLSAJTklEX3NoYTI1NiwKLSAJTklEX3NoYTI1NldpdGhS U0FFbmNyeXB0aW9uLAotIAlTSEEyNTZfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtF WV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01E X0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwK LSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQyNTYsCi0gCXVwZGF0ZTI1NiwKLSAJZmluYWwy NTYsCi1AQCAtMTcyLDcgKzE3Myw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMzg0X21kPQot IAlOSURfc2hhMzg0LAotIAlOSURfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTM4NF9E SUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01E X0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRV UkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJ aW5pdDM4NCwKLSAJdXBkYXRlNTEyLAotIAlmaW5hbDUxMiwKLUBAIC0xOTEsNyArMTkzLDggQEAg c3RhdGljIGNvbnN0IEVWUF9NRCBzaGE1MTJfbWQ9Ci0gCU5JRF9zaGE1MTIsCi0gCU5JRF9zaGE1 MTJXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBNTEyX0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9G TEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0r CUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9B QlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0NTEyLAotIAl1cGRhdGU1MTIsCi0g CWZpbmFsNTEyLAotQEAgLTIwNiw0ICsyMDksMyBAQCBjb25zdCBFVlBfTUQgKkVWUF9zaGE1MTIo dm9pZCkKLSAJeyByZXR1cm4oJnNoYTUxMl9tZCk7IH0KLSAjZW5kaWYJLyogaWZuZGVmIE9QRU5T U0xfTk9fU0hBNTEyICovCi0gCi0tI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vZXZwL3Bfc2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9wX3NpZ24uYwot LS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcwkyMDExLTA2LTA5IDE4 OjAyOjM5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvcF9z aWduLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTA3ODUzOTggKzAyMDAKLUBAIC02MSw2ICs2MSw3 IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0 cy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2Eu aD4KLSAKLSAjaWZkZWYgdW5kZWYKLSB2b2lkIEVWUF9TaWduSW5pdChFVlBfTURfQ1RYICpjdHgs IEVWUF9NRCAqdHlwZSkKLUBAIC0xMDMsNiArMTA0LDIyIEBAIGludCBFVlBfU2lnbkZpbmFsKEVW UF9NRF9DVFggKmN0eCwgdW5zaWcKLSAJCQlnb3RvIGVycjsKLSAJCWlmIChFVlBfUEtFWV9DVFhf c2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDApCi0gCQkJZ290byBlcnI7 Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkKLSsJCQlpZiAo RVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFERElORykgPD0g MCkKLSsJCQkJZ290byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19Q QURfUFNTKQotKwkJCXsKLSsJCQlpbnQgc2FsdGxlbjsKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3Nl dF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PSAwKQotKwkJCQln b3RvIGVycjsKLSsJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KTsK LSsJCQlpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOKQotKwkJCQlzYWx0 bGVuID0gLTE7Ci0rCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01S RUMpCi0rCQkJCXNhbHRsZW4gPSAtMjsKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcHNz X3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJCX0KLSAJ CWlmIChFVlBfUEtFWV9zaWduKHBrY3R4LCBzaWdyZXQsICZzbHRtcCwgbSwgbV9sZW4pIDw9IDAp Ci0gCQkJZ290byBlcnI7Ci0gCQkqc2lnbGVuID0gc2x0bXA7Ci1kaWZmIC11cCBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZw L3BfdmVyaWZ5LmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlw cwkyMDExLTA2LTA5IDE4OjAyOjM5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFh L2NyeXB0by9ldnAvcF92ZXJpZnkuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1MDc4NTM5OCArMDIw MAotQEAgLTYxLDYgKzYxLDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAjaW5jbHVk ZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL3JzYS5oPgotIAotIGludCBFVlBfVmVyaWZ5RmluYWwoRVZQX01EX0NUWCAq Y3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWdidWYsCi0gCSAgICAgdW5zaWduZWQgaW50IHNp Z2xlbiwgRVZQX1BLRVkgKnBrZXkpCi1AQCAtODgsNiArODksMjIgQEAgaW50IEVWUF9WZXJpZnlG aW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbgotIAkJCWdvdG8gZXJyOwotIAkJaWYgKEVWUF9QS0VZ X0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKLSAJCQlnb3Rv IGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQotKwkJ CWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5H KSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9G TEFHX1BBRF9QU1MpCi0rCQkJewotKwkJCWludCBzYWx0bGVuOwotKwkJCWlmIChFVlBfUEtFWV9D VFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCi0r CQkJCWdvdG8gZXJyOwotKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChj dHgpOwotKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCi0rCQkJ CXNhbHRsZW4gPSAtMTsKLSsJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19Q U1NfTVJFQykKLSsJCQkJc2FsdGxlbiA9IC0yOwotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3Jz YV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJ fQotIAkJaSA9IEVWUF9QS0VZX3ZlcmlmeShwa2N0eCwgc2lnYnVmLCBzaWdsZW4sIG0sIG1fbGVu KTsKLSAJCWVycjoKLSAJCUVWUF9QS0VZX0NUWF9mcmVlKHBrY3R4KTsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYy5maXBzIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjUx Nzg1NDIwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Fl c2F2cy5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjUxNzg1NDIwICswMjAwCi1AQCAtMCwwICsxLDkz OSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK LSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRp c3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK LSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAq Ci0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBOSVNUIEFFUyBBbGdvcml0aG0gVmFsaWRhdGlv biBTdWl0ZQotKyAgVGVzdCBQcm9ncmFtCi0rCi0rICBEb25hdGVkIHRvIE9wZW5TU0wgYnk6Ci0r ICBWLU9ORSBDb3Jwb3JhdGlvbgotKyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAzMDAKLSsg IEdlcm1hbnRvd24sIE1EIDIwODc0Ci0rICBVLlMuQS4KLSsgIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNp bmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGVycm5v Lmg+Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgImVf b3MuaCIKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgQUVTIHN1cHBvcnRcbiIpOwot KyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotKyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUg MTYKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotK2ludCBBRVNUZXN0KEVWUF9DSVBIRVJfQ1RY ICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtl eSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKLSsJICAgIGludCBkaXIsICAvKiAwID0g ZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwg dW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwgaW50IGxlbikKLSsgICAgewotKyAgICBjb25zdCBF VlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOwotKwotKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwg IkNCQyIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoK LSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5 MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNl IDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NiYygpOwotKwkJYnJlYWs7Ci0rCQl9Ci0r Ci0rCX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkVDQiIpID09IDApCi0rCXsK LSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9h ZXNfMTI4X2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVW UF9hZXNfMTkyX2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9 IEVWUF9hZXNfMjU2X2VjYigpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZSBpZiAo c3RyY2FzZWNtcChhbW9kZSwgIkNGQjEyOCIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3op Ci0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjEyOCgpOwot KwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjEy OCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2 X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0rCX0KLSsgICAgZWxzZSBpZiAoc3RybmNh c2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJ ewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9vZmIoKTsKLSsJCWJyZWFr OwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9vZmIoKTsKLSsJCWJy ZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9vZmIoKTsKLSsJ CWJyZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEi KSkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVy ID0gRVZQX2Flc18xMjhfY2ZiMSgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNp cGhlciA9IEVWUF9hZXNfMTkyX2NmYjEoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0r CQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxKCk7Ci0rCQlicmVhazsKLSsJCX0KLSsJfQotKyAg ICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCi0rCXsKLSsJc3dpdGNoIChha2V5 c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjgoKTsK LSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmI4 KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZf Y2ZiOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZQotKwl7Ci0rCXByaW50Zigi VW5rbm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gMDsKLSsJfQotKyAgICBpZiAo IWNpcGhlcikKLSsJewotKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4iLCBha2V5c3op OwotKwlyZXR1cm4gMDsgCi0rCX0KLSsgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lw aGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCi0rCXJldHVybiAwOwotKyAgICBpZigh c3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhj dHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOwotKyAgICBpZiAoZGlyKQotKwkJRVZQX0Np cGhlcihjdHgsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKLSsJZWxzZQotKwkJRVZQX0Np cGhlcihjdHgsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsgICAgcmV0dXJuIDE7Ci0r ICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhFUlRFWFQifTsKLStj aGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJDRkI4IiwiQ0ZCMTI4 In07Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBDRkI4LCBDRkIxMjh9OwotK2Vu dW0gWENyeXB0IHtYREVDUllQVCwgWEVOQ1JZUFR9OwotKwotKy8qPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0qLwotKy8qICBNb250ZSBDYXJsbyBUZXN0cyAgICAgICAgICAqLwotKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKy8qI2RlZmluZSBnYihhLGIpICgoKGEp WyhiKS84XSA+PiAoKGIpJTgpKSYxKSovCi0rLyojZGVmaW5lIHNiKGEsYix2KSAoKGEpWyhiKS84 XT0oKGEpWyhiKS84XSZ+KDEgPDwgKChiKSU4KSkpfCghISh2KSA8PCAoKGIpJTgpKSkqLwotKwot KyNkZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKDctKGIpJTgpKSYxKQotKyNkZWZpbmUg c2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoNy0oYiklOCkpKXwoISEo dikgPDwgKDctKGIpJTgpKSkKLSsKLStpbnQgZG9fbWN0KGNoYXIgKmFtb2RlLCAKLSsJICAgaW50 IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSx1bnNpZ25lZCBjaGFyICppVmVjLAotKwkgICBp bnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAotKwkgICBGSUxFICpyZnApCi0r ICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5WzEwMV1bMzJd OwotKyAgICB1bnNpZ25lZCBjaGFyIGl2WzEwMV1bQUVTX0JMT0NLX1NJWkVdOwotKyAgICB1bnNp Z25lZCBjaGFyIHB0ZXh0WzEwMDFdWzMyXTsKLSsgICAgdW5zaWduZWQgY2hhciBjdGV4dFsxMDAx XVszMl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs2NCs0XTsKLSsgICAgaW50IGks IGosIG4sIG4xLCBuMjsKLSsgICAgaW50IGltb2RlID0gMCwgbmtleXN6ID0gYWtleXN6Lzg7Ci0r ICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsK LSsKLSsgICAgaWYgKGxlbiA+IDMyKQotKwl7Ci0rCXByaW50ZigiXG4+Pj4+IExlbmd0aCBleGNl ZWRzIDMyIGZvciAlcyAlZCA8PDw8XG5cbiIsIAotKwkgICAgICAgYW1vZGUsIGFrZXlzeik7Ci0r CXJldHVybiAtMTsKLSsJfQotKyAgICBmb3IgKGltb2RlID0gMDsgaW1vZGUgPCA2OyArK2ltb2Rl KQotKwlpZiAoc3RyY21wKGFtb2RlLCB0X21vZGVbaW1vZGVdKSA9PSAwKQotKwkgICAgYnJlYWs7 Ci0rICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlwcmludGYoIlVucmVjb2duaXplZCBtb2Rl OiAlc1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsKLSsgICAgbWVtY3B5KGtleVsw XSwgYUtleSwgbmtleXN6KTsKLSsgICAgaWYgKGlWZWMpCi0rCW1lbWNweShpdlswXSwgaVZlYywg QUVTX0JMT0NLX1NJWkUpOwotKyAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwltZW1jcHkocHRl eHRbMF0sIHRleHQsIGxlbik7Ci0rICAgIGVsc2UKLSsJbWVtY3B5KGN0ZXh0WzBdLCB0ZXh0LCBs ZW4pOwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwOyArK2kpCi0rCXsKLSsJLyogcHJpbnRmKCJJ dGVyYXRpb24gJWRcbiIsIGkpOyAqLwotKwlpZiAoaSA+IDApCi0rCSAgICB7Ci0rCSAgICBmcHJp bnRmKHJmcCwiQ09VTlQgPSAlZFxuIixpKTsKLSsJICAgIE91dHB1dFZhbHVlKCJLRVkiLGtleVtp XSxua2V5c3oscmZwLDApOwotKwkgICAgaWYgKGltb2RlICE9IEVDQikgIC8qIEVDQiAqLwotKwkJ T3V0cHV0VmFsdWUoIklWIixpdltpXSxBRVNfQkxPQ0tfU0laRSxyZnAsMCk7Ci0rCSAgICAvKiBP dXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLwotKwkgICAgT3V0cHV0VmFsdWUodF90YWdb ZGlyXjFdLGRpciA/IHB0ZXh0WzBdIDogY3RleHRbMF0sbGVuLHJmcCwKLSsJCQlpbW9kZSA9PSBD RkIxKTsKLSsJICAgIH0KLSsJZm9yIChqID0gMDsgaiA8IDEwMDA7ICsraikKLSsJICAgIHsKLSsJ ICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJCWlmIChqID09IDAp Ci0rCQkgICAgeyAvKiBzZXQgdXAgZW5jcnlwdGlvbiAqLwotKwkJICAgIHJldCA9IEFFU1Rlc3Qo JmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBOVUxMLCAKLSsJCQkJICBkaXIsICAvKiAwID0g ZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7 Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQltZW1jcHkocHRleHRbaisxXSwgY3Rl eHRbal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtq XSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChkaXIgPT0g WEVOQ1JZUFQpCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pd LCBsZW4pOwotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCQl9Ci0r CQkgICAgZWxzZQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtq XSwgbGVuKTsKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0sIGxlbik7Ci0rCQkJfQot KwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjog IAotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQlpZiAoaiA9PSAwKQotKwkJICAgIHsKLSsJCSAgICBy ZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZbaV0sIAotKwkJCQkg IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHB0ZXh0W2pdLCBj dGV4dFtqXSwgbGVuKTsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCW1lbWNweShw dGV4dFtqKzFdLCBpdltpXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2or MV0sIGl2W2ldLCBsZW4pOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYg KGRpciA9PSBYRU5DUllQVCkKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwg cHRleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2otMV0sIGxlbik7 Ci0rCQkJfQotKwkJICAgIGVsc2UKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtq XSwgY3RleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2otMV0sIGxl bik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDRkI4OgotKwkJ aWYgKGogPT0gMCkKLSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwg YWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9 IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgfQot KwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCUVWUF9D aXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQlF VlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQlp ZiAoZGlyID09IFhFTkNSWVBUKQotKwkJICAgIHsKLSsJCSAgICBpZiAoaiA8IDE2KQotKwkJCW1l bWNweShwdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNw eShwdGV4dFtqKzFdLCBjdGV4dFtqLTE2XSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkg ICAgewotKwkJICAgIGlmIChqIDwgMTYpCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sICZpdltpXVtq XSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2otMTZd LCBsZW4pOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDRkIxOgotKwkJaWYo aiA9PSAwKQotKwkJICAgIHsKLSsjaWYgMAotKwkJICAgIC8qIGNvbXBlbnNhdGUgZm9yIHdyb25n IGVuZGlhbm5lc3Mgb2YgaW5wdXQgZmlsZSAqLwotKwkJICAgIGlmKGkgPT0gMCkKLSsJCQlwdGV4 dFswXVswXTw8PTc7Ci0rI2VuZGlmCi0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LGFtb2RlLGFr ZXlzeixrZXlbaV0saXZbaV0sZGlyLAotKwkJCQlwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0r CQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQot KwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVs c2UKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsKLSsJ CSAgICB9Ci0rCQlpZihkaXIgPT0gWEVOQ1JZUFQpCi0rCQkgICAgewotKwkJICAgIGlmKGogPCAx MjgpCi0rCQkJc2IocHRleHRbaisxXSwwLGdiKGl2W2ldLGopKTsKLSsJCSAgICBlbHNlCi0rCQkJ c2IocHRleHRbaisxXSwwLGdiKGN0ZXh0W2otMTI4XSwwKSk7Ci0rCQkgICAgfQotKwkJZWxzZQot KwkJICAgIHsKLSsJCSAgICBpZihqIDwgMTI4KQotKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihpdltp XSxqKSk7Ci0rCQkgICAgZWxzZQotKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihwdGV4dFtqLTEyOF0s MCkpOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQotKwkgICAgfQotKwktLWo7IC8qIHJlc2V0 IHRvIGxhc3Qgb2YgcmFuZ2UgKi8KLSsJLyogT3V0cHV0IENpcGhlcnRleHQgfCBQbGFpbnRleHQg Ki8KLSsJT3V0cHV0VmFsdWUodF90YWdbZGlyXSxkaXIgPyBjdGV4dFtqXSA6IHB0ZXh0W2pdLGxl bixyZnAsCi0rCQkgICAgaW1vZGUgPT0gQ0ZCMSk7Ci0rCWZwcmludGYocmZwLCAiXG4iKTsgIC8q IGFkZCBzZXBhcmF0b3IgKi8KLSsKLSsJLyogQ29tcHV0ZSBuZXh0IEtFWSAqLwotKwlpZiAoZGly ID09IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgaWYgKGltb2RlID09IENGQjgpCi0rCQl7IC8q IGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pdICovCi0rCQlmb3IgKG4x ID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lw aGVydGV4dFtuMV0gPSBjdGV4dFtqLW4yXVswXTsKLSsJCX0KLSsJICAgIGVsc2UgaWYoaW1vZGUg PT0gQ0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsgbjEgPCBha2V5c3ogOyAr K24xLC0tbjIpCi0rCQkgICAgc2IoY2lwaGVydGV4dCxuMSxnYihjdGV4dFtqLW4yXSwwKSk7Ci0r CQl9Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlzeikKLSsJCSAgICB7Ci0rCQljYXNlIDEy ODoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbal0sIDE2KTsKLSsJCSAgICBicmVh azsKLSsJCWNhc2UgMTkyOgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqLTFdKzgs IDgpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIGN0ZXh0W2pdLCAxNik7Ci0rCQkgICAg YnJlYWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0x XSwgMTYpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBjdGV4dFtqXSwgMTYpOwotKwkJ ICAgIGJyZWFrOwotKwkJICAgIH0KLSsJICAgIH0KLSsJZWxzZQotKwkgICAgewotKwkgICAgaWYg KGltb2RlID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4u IHx8IENUW2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7 ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtuMV0gPSBwdGV4dFtqLW4yXVswXTsKLSsJ CX0KLSsJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0wLG4yPWFr ZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIpCi0rCQkgICAgc2IoY2lwaGVydGV4dCxu MSxnYihwdGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlz eikKLSsJCSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRl eHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMTkyOgotKwkJICAgIG1lbWNweShj aXBoZXJ0ZXh0LCBwdGV4dFtqLTFdKzgsIDgpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0Kzgs IHB0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAgICBtZW1j cHkoY2lwaGVydGV4dCwgcHRleHRbai0xXSwgMTYpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0 KzE2LCBwdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJICAgIH0KLSsJ LyogQ29tcHV0ZSBuZXh0IGtleTogS2V5W2krMV0gPSBLZXlbaV0geG9yIGN0ICovCi0rCWZvciAo biA9IDA7IG4gPCBua2V5c3o7ICsrbikKLSsJICAgIGtleVtpKzFdW25dID0ga2V5W2ldW25dIF4g Y2lwaGVydGV4dFtuXTsKLSsJCi0rCS8qIENvbXB1dGUgbmV4dCBJViBhbmQgdGV4dCAqLwotKwlp ZiAoZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgc3dpdGNoIChpbW9kZSkKLSsJCXsK LSsJICAgIGNhc2UgRUNCOgotKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtqXSwgQUVTX0JMT0NL X1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENCQzoKLSsJICAgIGNhc2UgT0ZCOgotKwkg ICAgY2FzZSBDRkIxMjg6Ci0rCQltZW1jcHkoaXZbaSsxXSwgY3RleHRbal0sIEFFU19CTE9DS19T SVpFKTsKLSsJCW1lbWNweShwdGV4dFswXSwgY3RleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOwot KwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjg6Ci0rCQkvKiBJVltpKzFdID0gY3QgKi8KLSsJCWZv ciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQotKwkJICAgIGl2W2krMV1b bjFdID0gY3RleHRbai1uMl1bMF07Ci0rCQlwdGV4dFswXVswXSA9IGN0ZXh0W2otMTZdWzBdOwot KwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjE6Ci0rCQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8IDEy OCA7ICsrbjEsLS1uMikKLSsJCSAgICBzYihpdltpKzFdLG4xLGdiKGN0ZXh0W2otbjJdLDApKTsK LSsJCXB0ZXh0WzBdWzBdPWN0ZXh0W2otMTI4XVswXSYweDgwOwotKwkJYnJlYWs7Ci0rCQl9Ci0r CSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAg ICBjYXNlIEVDQjoKLSsJCW1lbWNweShjdGV4dFswXSwgcHRleHRbal0sIEFFU19CTE9DS19TSVpF KTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjoKLSsJICAgIGNh c2UgQ0ZCMTI4OgotKwkJbWVtY3B5KGl2W2krMV0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7 Ci0rCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsKLSsJCWJy ZWFrOwotKwkgICAgY2FzZSBDRkI4OgotKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7 ICsrbjEsIC0tbjIpCi0rCQkgICAgaXZbaSsxXVtuMV0gPSBwdGV4dFtqLW4yXVswXTsKLSsJCWN0 ZXh0WzBdWzBdID0gcHRleHRbai0xNl1bMF07Ci0rCQlicmVhazsKLSsJICAgIGNhc2UgQ0ZCMToK LSsJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQotKwkJICAgIHNiKGl2 W2krMV0sbjEsZ2IocHRleHRbai1uMl0sMCkpOwotKwkJY3RleHRbMF1bMF09cHRleHRbai0xMjhd WzBdJjB4ODA7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIH0KLSsJfQotKyAgICAKLSsgICAgcmV0 dXJuIHJldDsKLSsgICAgfQotKwotKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ki8KLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgICMg Q29uZmlnIGluZm8gZm9yIHYtb25lCi0rICAjIEFFU1ZTIE1NVCB0ZXN0IGRhdGEgZm9yIEVDQgot KyAgIyBTdGF0ZSA6IEVuY3J5cHQgYW5kIERlY3J5cHQKLSsgICMgS2V5IExlbmd0aCA6IDI1Ngot KyAgIyBGcmkgQXVnIDMwIDA0OjA3OjIyIFBNCi0rICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8KLSsKLStpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAqcnNwZmlsZSkKLSsg ICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKLSsgICAgRklMRSAqYWZwID0gTlVM TCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1ZlsyMDQ4XTsKLSsgICAgY2hhciB0YnVmWzIw NDhdOwotKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOwotKyAgICBjaGFyIGFsZ29bOF0gPSAi IjsKLSsgICAgY2hhciBhbW9kZVs4XSA9ICIiOwotKyAgICBjaGFyIGF0ZXN0WzhdID0gIiI7Ci0r ICAgIGludCBha2V5c3ogPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQw XTsKLSsgICAgaW50IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKLSsgICAgdW5zaWduZWQg Y2hhciBwbGFpbnRleHRbMjA0OF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4 XTsKLSsgICAgY2hhciAqcnA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJ UEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkK LSsJewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAg IHN0cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIp KSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAK LSsJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAg IGlmICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZuLGFmbik7Ci0rCXJwPXN0cnN0cihyZm4s InJlcS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJaWYgKCFycCkKLSsJICAgIHJw PXN0cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0rCWFzc2VydChycCk7Ci0rCW1lbWNweShy cCwicnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOwotKwltZW1jcHkocnAsICIu cnNwIiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0KLSsgICAgaWYgKChyZnAgPSBmb3Blbihy c3BmaWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTog JXMsICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJZmNsb3NlKGFm cCk7Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICB3aGlsZSAoIWVyciAm JiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQotKwl7Ci0rCXRpZHlf bGluZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxlbihpYnVmKTsKLSsJLyogICAgICBwcmlu dGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsgKi8KLSsJc3dpdGNoIChzdGVwKQotKwkg ICAgewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxlICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9 PSAnXG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUgKi8KLSsJCWlmICgoKmFsZ28gPT0gJ1ww JykgfHwKLSsJCSAgICAoKmFtb2RlID09ICdcMCcpIHx8Ci0rCQkgICAgKGFrZXlzeiA9PSAwKSkK LSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJNaXNzaW5nIEFsZ29yaXRobSwgTW9kZSBvciBLZXlT aXplICglcy8lcy8lZClcbiIsCi0rCQkJICAgYWxnbyxhbW9kZSxha2V5c3opOwotKwkJICAgIGVy ciA9IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCBy ZnApOwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAgfQotKwkJfQotKwkgICAgZWxzZSBpZiAoaWJ1 ZlswXSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYoIkludmFsaWQgcHJlYW1ibGUgaXRlbTogJXNc biIsIGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsgLyogcHJvY2Vz cyBwcmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpwcCA9IGlidWYrMjsKLSsJCWludCBuOwotKwkJ aWYgKGFrZXlzeikKLSsJCSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUgJiBkYXRlICovCi0r CQkgICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOwotKwkJICAgIGZwcmludGYocmZwLCAiIyAlcyIs IGN0aW1lKCZydGltKSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0 cyhpYnVmLCByZnApOwotKwkJICAgIGlmIChzdHJuY21wKHBwLCAiQUVTVlMgIiwgNikgPT0gMCkK LSsJCQl7Ci0rCQkJc3RyY3B5KGFsZ28sICJBRVMiKTsKLSsJCQkvKiBnZXQgdGVzdCB0eXBlICov Ci0rCQkJcHAgKz0gNjsKLSsJCQl4cCA9IHN0cmNocihwcCwgJyAnKTsKLSsJCQluID0geHAtcHA7 Ci0rCQkJc3RybmNweShhdGVzdCwgcHAsIG4pOwotKwkJCWF0ZXN0W25dID0gJ1wwJzsKLSsJCQkv KiBnZXQgbW9kZSAqLwotKwkJCXhwID0gc3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1vZGUiICov Ci0rCQkJbiA9IHN0cmxlbih4cCsxKS0xOwotKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEsIG4pOwot KwkJCWFtb2RlW25dID0gJ1wwJzsKLSsJCQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCi0rCQkJaWYg KFZFUkJPU0UpCi0rCQkJCXByaW50ZigiVGVzdCA9ICVzLCBNb2RlID0gJXNcbiIsIGF0ZXN0LCBh bW9kZSk7Ci0rCQkJfQotKwkJICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKHBwLCAiS2V5IExlbmd0 aCA6ICIsIDEzKSA9PSAwKQotKwkJCXsKLSsJCQlha2V5c3ogPSBhdG9pKHBwKzEzKTsKLSsJCQlp ZiAoVkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJLZXkgc2l6ZSA9ICVkXG4iLCBha2V5c3opOwotKwkJ CX0KLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAxOiAgLyogW0VOQ1JZ UFRdIHwgW0RFQ1JZUFRdICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnWycpCi0rCQl7Ci0rCQlm cHV0cyhpYnVmLCByZnApOwotKwkJKytzdGVwOwotKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJb RU5DUllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9IDE7Ci0rCQllbHNlIGlmIChzdHJuY2Fz ZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAwOwotKwkJZWxz ZQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYp OwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNl IGlmIChkaXIgPT0gLTEpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIEVO Q1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsKLSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSAK LSsJCXN0ZXAgPSAyOwotKwotKwljYXNlIDI6IC8qIEtFWSA9IHh4eHggKi8KLSsJICAgIGZwdXRz KGlidWYsIHJmcCk7Ci0rCSAgICBpZigqaWJ1ZiA9PSAnXG4nKQotKwkJYnJlYWs7Ci0rCSAgICBp Zighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJYnJlYWs7Ci0rCi0rCSAgICBp ZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIktFWSA9ICIsIDYpICE9IDApCi0rCQl7Ci0rCQlwcmludGYo Ik1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0r CQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwotKwkJaWYgKGxlbiA8IDApCi0r CQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVyciA9MTsK LSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJLRVkiLCBhS2V5LCBsZW4p OwotKwkJaWYgKHN0cmNtcChhbW9kZSwgIkVDQiIpID09IDApCi0rCQkgICAgewotKwkJICAgIG1l bXNldChpVmVjLCAwLCBzaXplb2YoaVZlYykpOwotKwkJICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsg IC8qIG5vIGl2ZWMgZm9yIEVDQiAqLwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICArK3N0ZXA7 Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KLSsJICAg IGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwg NSkgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBJVlxuIik7Ci0rCQllcnIgPSAxOwot KwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBp VmVjKTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQg SVZcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmlu dFZhbHVlKCJJViIsIGlWZWMsIGxlbik7Ci0rCQlzdGVwID0gKGRpcik/IDQ6IDU7Ci0rCQl9Ci0r CSAgICBicmVhazsKLSsKLSsJY2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCi0rCSAgICBm cHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQg PSAiLCAxMikgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOwot KwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWludCBubiA9IHN0cmxlbihp YnVmKzEyKTsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJi aW4oaWJ1ZisxMixubi0xLHBsYWludGV4dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuPWhleDJiaW4o aWJ1ZisxMiwgcGxhaW50ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBw cmludGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIsIGlidWYrMTIpOwotKwkJICAgIGVyciA9MTsK LSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQp KQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0rCQkgICAg fQotKwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwg bGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8g VGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBpZihkb19tY3QoYW1vZGUsIGFrZXlzeiwgYUtleSwg aVZlYywgCi0rCQkJICAgICAgZGlyLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4sIAot KwkJCSAgICAgIHJmcCkgPCAwKQotKwkJCUVYSVQoMSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJ ICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlW ZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkg IHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVS VEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwot KwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNTog LyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBp ZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkKLSsJCXsKLSsJ CXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UK LSsJCXsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4o aWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBs ZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAg ICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOwotKwkJICAgIGVyciA9 MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCi0rCQlQcmludFZhbHVlKCJDSVBIRVJURVhU IiwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAg LyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19tY3QoYW1vZGUsIGFr ZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJICAgZGlyLCBjaXBoZXJ0ZXh0LCBsZW4sIHJmcCk7Ci0r CQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFt b2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAx ID0gZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCSAg ICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4dCxsZW4s cmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2 OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNjoKLSsJICAgIGlmIChpYnVmWzBdICE9 ICdcbicpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1pbmF0b3Jc biIpOwotKwkJfQotKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0gMCkKLSsJ CXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KLSsJCWZwdXRzKGlidWYs IHJmcCk7Ci0rCQl9Ci0rCSAgICBzdGVwID0gMTsKLSsJICAgIGJyZWFrOwotKwkgICAgfQotKwl9 Ci0rICAgIGlmIChyZnApCi0rCWZjbG9zZShyZnApOwotKyAgICBpZiAoYWZwKQotKwlmY2xvc2Uo YWZwKTsKLSsgICAgcmV0dXJuIGVycjsKLSsgICAgfQotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgIFByb2Nlc3NlcyBlaXRoZXIgYSBz aW5nbGUgZmlsZSBvciAKLSsgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBwYXNzZWQg aW4gYSBmaWxlLgotKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190 ZXN0IC1mIHh4eC5yZXEKLSsgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoKLSsgICAg YWVzX3Rlc3QgLWQgeHh4eHgueHh4Ci0rICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4dAotKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgY2hhciAqcnFsaXN0ID0g InJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7Ci0rICAgIEZJTEUgKmZwID0gTlVMTDsKLSsgICAg Y2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7Ci0rICAgIGludCBmX29wdCA9IDAsIGRf b3B0ID0gMTsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmKCFGSVBTX21vZGVfc2V0 KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlFWElUKDEpOwotKwl9Ci0rI2VuZGlm Ci0rICAgIGlmIChhcmdjID4gMSkKLSsJewotKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWQi KSA9PSAwKQotKwkgICAgewotKwkgICAgZF9vcHQgPSAxOwotKwkgICAgfQotKwllbHNlIGlmIChz dHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCi0rCSAgICB7Ci0rCSAgICBmX29wdCA9IDE7 Ci0rCSAgICBkX29wdCA9IDA7Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHByaW50 ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKLSsJICAgIHJldHVybiAwOwot KwkgICAgfQotKwlpZiAoYXJnYyA8IDMpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIk1pc3Npbmcg cGFyYW1ldGVyXG4iKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwlpZiAoZF9vcHQpCi0r CSAgICBycWxpc3QgPSBhcmd2WzJdOwotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBzdHJjcHkoZm4s IGFyZ3ZbMl0pOwotKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107Ci0rCSAgICB9Ci0rCX0KLSsgICAg aWYgKGRfb3B0KQotKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KLSsJaWYgKCEo ZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJDYW5ub3Qg b3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0KLSsJd2hp bGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCi0rCSAgICB7Ci0rCSAgICBzdHJ0b2soZm4s ICJcclxuIik7Ci0rCSAgICBzdHJjcHkocmZuLCBmbik7Ci0rCSAgICBpZiAoVkVSQk9TRSkKLSsJ CXByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7Ci0rCSAgICBpZiAocHJvY19maWxlKHJm biwgcnNwZmlsZSkpCi0rCQl7Ci0rCQlwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6 ICVzIDw8PFxuIiwgcmZuKTsKLSsJCUVYSVQoMSk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWZjbG9zZShm cCk7Ci0rCX0KLSsgICAgZWxzZSAvKiBzaW5nbGUgZmlsZSAqLwotKwl7Ci0rCWlmIChWRVJCT1NF KQotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgZm4pOwotKwlpZiAocHJvY19maWxl KGZuLCByc3BmaWxlKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFp bGVkIGZvcjogJXMgPDw8XG4iLCBmbik7Ci0rCSAgICB9Ci0rCX0KLSsgICAgRVhJVCgwKTsKLSsg ICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFh L2NyeXB0by9maXBzL2NhdnMvZmlwc19jbWFjdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX2NtYWN0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3QuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjUyNzg1 NDQyICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2NtYWN0 ZXN0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTI3ODU0NDIgKzAyMDAKLUBAIC0wLDAgKzEsNTE3 IEBACi0rLyogZmlwc19jbWFjdGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4g SGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdCAy MDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAq ICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wu b3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK LSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgot KyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBw cm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlv dW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAq Ci0rICovCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsKLSsjaW5jbHVkZSA8c3RkaW8u aD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvY21hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIENNQUMgc3VwcG9ydFxu Iik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIGludCBjbWFjX3Rl c3QoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsIEZJTEUgKmluLAotKwlpbnQg bW9kZSwgaW50IEtsZW5fY291bnRzX2tleXMsIGludCBrbm93bl9rZXlsZW4pOwotK3N0YXRpYyBp bnQgcHJpbnRfY21hY19nZW4oY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCi0r CQl1bnNpZ25lZCBjaGFyICpLZXksIGludCBLbGVuLAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBp bnQgTXNnbGVuLAotKwkJaW50IFRsZW4pOwotK3N0YXRpYyBpbnQgcHJpbnRfY21hY192ZXIoY29u c3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpLZXks IGludCBLbGVuLAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuLAotKwkJdW5zaWdu ZWQgY2hhciAqTWFjLCBpbnQgTWFjbGVuLAotKwkJaW50IFRsZW4pOwotKwotKyNpZmRlZiBGSVBT X0FMR1ZTCi0raW50IGZpcHNfY21hY3Rlc3RfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0r I2Vsc2UKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2VuZGlmCi0rCXsKLSsJ RklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsJaW50IG1vZGUgPSAwOwkJLyogMCA9PiBH ZW5lcmF0ZSwgMSA9PiBWZXJpZnkgKi8KLSsJaW50IEtsZW5fY291bnRzX2tleXMgPSAwOyAvKiAw ID0+IEtsZW4gaXMgc2l6ZSBvZiBvbmUga2V5Ci0rCQkJCSAgICAgMSA9PiBLbGVuIGlzIGFtb3Vu dCBvZiBrZXlzCi0rCQkJCSAgKi8KLSsJaW50IGtub3duX2tleWxlbiA9IDA7CS8qIE9ubHkgc2V0 IHdoZW4gS2xlbl9jb3VudHNfa2V5cyA9IDEgKi8KLSsJY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVy ID0gMDsKLSsJaW50IHJldCA9IDE7Ci0rCWZpcHNfYWxndGVzdF9pbml0KCk7Ci0rCi0rCXdoaWxl IChhcmdjID4gMSAmJiBhcmd2WzFdWzBdID09ICctJykKLSsJCXsKLSsJCXN3aXRjaCAoYXJndlsx XVsxXSkKLSsJCQl7Ci0rCQljYXNlICdhJzoKLSsJCQl7Ci0rCQkJY2hhciAqcCA9ICZhcmd2WzFd WzJdOwotKwkJCWlmICgqcCA9PSAnXDAnKQotKwkJCQl7Ci0rCQkJCWlmIChhcmdjIDw9IDIpCi0r CQkJCQl7Ci0rCQkJCQlmcHJpbnRmKHN0ZGVyciwgIk9wdGlvbiAlcyBuZWVkcyBhIHZhbHVlXG4i LCBhcmd2WzFdKTsKLSsJCQkJCWdvdG8gZW5kOwotKwkJCQkJfQotKwkJCQlhcmd2Kys7Ci0rCQkJ CWFyZ2MtLTsKLSsJCQkJcCA9ICZhcmd2WzFdWzBdOwotKwkJCQl9Ci0rCQkJaWYgKCFzdHJjbXAo cCwgImFlczEyOCIpKQotKwkJCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jYmMoKTsKLSsJCQllbHNl IGlmICghc3RyY21wKHAsICJhZXMxOTIiKSkKLSsJCQkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2Jj KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcChwLCAiYWVzMjU2IikpCi0rCQkJCWNpcGhlciA9IEVW UF9hZXNfMjU2X2NiYygpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAocCwgInRkZWEzIikgfHwgIXN0 cmNtcChwLCAidGRlczMiKSkKLSsJCQkJewotKwkJCQljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2Jj KCk7Ci0rCQkJCUtsZW5fY291bnRzX2tleXMgPSAxOwotKwkJCQlrbm93bl9rZXlsZW4gPSA4Owot KwkJCQl9Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBh bGdvcml0aG0gJXNcbiIsIHApOwotKwkJCQlnb3RvIGVuZDsKLSsJCQkJfQotKwkJCX0KLSsJCQli cmVhazsKLSsJCWNhc2UgJ2cnOgotKwkJCW1vZGUgPSAwOwotKwkJCWJyZWFrOwotKwkJY2FzZSAn dic6Ci0rCQkJbW9kZSA9IDE7Ci0rCQkJYnJlYWs7Ci0rCQlkZWZhdWx0OgotKwkJCWZwcmludGYo c3RkZXJyLCAiVW5rbm93biBvcHRpb24gJXNcbiIsIGFyZ3ZbMV0pOwotKwkJCWdvdG8gZW5kOwot KwkJCX0KLSsJCWFyZ3YrKzsKLSsJCWFyZ2MtLTsKLSsJCX0KLSsJaWYgKGFyZ2MgPT0gMSkKLSsJ CWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJ aWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihh cmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJG QVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0K LSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBp bml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFj bWFjX3Rlc3QoY2lwaGVyLCBvdXQsIGluLCBtb2RlLAotKwkJCUtsZW5fY291bnRzX2tleXMsIGtu b3duX2tleWxlbikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGNtYWMgZmlsZSBw cm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQg PSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQotKwkJZmNsb3Nl KGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0rCQlmY2xvc2Uob3V0KTsKLSsK LSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgQ01BQ19URVNUX01BWExJTkVMRU4J MTUwMDAwCi0rCi0raW50IGNtYWNfdGVzdChjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUg Km91dCwgRklMRSAqaW4sCi0rCWludCBtb2RlLCBpbnQgS2xlbl9jb3VudHNfa2V5cywgaW50IGtu b3duX2tleWxlbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJ Y2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwl1bnNpZ25lZCBjaGFyICoqS2V5cyA9IE5VTEwsICpN c2cgPSBOVUxMLCAqTWFjID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqS2V5ID0gTlVMTDsKLSsJ aW50IENvdW50LCBLbGVuLCBNbGVuLCBUbGVuOwotKwlsb25nIEtleWxlbiwgTXNnbGVuLCBNYWNs ZW47Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BF TlNTTF9tYWxsb2MoQ01BQ19URVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0gT1BFTlNTTF9t YWxsb2MoQ01BQ19URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5l YnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJQ291bnQgPSAtMTsKLSsJS2xlbiA9IC0xOwotKwlN bGVuID0gLTE7Ci0rCVRsZW4gPSAtMTsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBDTUFD X1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVi dWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5n IHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0r CQkJa2V5d29yZCsrOwotKwotKwkJLyogU2tpcCBjb21tZW50cyAqLwotKwkJaWYgKGtleXdvcmRb MF0gPT0gJyMnKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJ CQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCS8qIExvb2sgZm9yID0g c2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyogSWYgbm8gPSBv ciBzdGFydHMgd2l0aCBbIChmb3IgW0w9MjBdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYgKCFw KQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVy cm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJl bW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsK LSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92 ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFs dWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkNvdW50 IikpCi0rCQkJewotKwkJCWlmIChDb3VudCAhPSAtMSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQlDb3VudCA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChDb3VudCA8IDApCi0rCQkJCWdvdG8g cGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiS2xlbiIp KQotKwkJCXsKLSsJCQlpZiAoS2xlbiAhPSAtMSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJ CQlLbGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKEtsZW4gPCAwKQotKwkJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwkJCWlmIChLbGVuX2NvdW50c19rZXlzKQotKwkJCQl7Ci0rCQkJCUtleXMgPSBP UEVOU1NMX21hbGxvYyhzaXplb2YoKktleXMpICogS2xlbik7Ci0rCQkJCW1lbXNldChLZXlzLCAn XDAnLCBzaXplb2YoKktleXMpICogS2xlbik7Ci0rCQkJCX0KLSsJCQllbHNlCi0rCQkJCXsKLSsJ CQkJS2V5cyA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZigqS2V5cykpOwotKwkJCQltZW1zZXQoS2V5 cywgJ1wwJywgc2l6ZW9mKCpLZXlzKSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJNbGVuIikpCi0rCQkJewotKwkJCWlmIChNbGVuICE9IC0xKQotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCU1sZW4gPSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoTWxlbiA8 IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiVGxlbiIpKQotKwkJCXsKLSsJCQlpZiAoVGxlbiAhPSAtMSkKLSsJCQkJZ290byBw YXJzZV9lcnJvcjsKLSsJCQlUbGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKFRsZW4gPCAwKQot KwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgIktleSIpICYmICFLbGVuX2NvdW50c19rZXlzKQotKwkJCXsKLSsJCQlpZiAoS2V5c1swXSkK LSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlLZXlzWzBdID0gaGV4MmJpbl9tKHZhbHVlLCAm S2V5bGVuKTsKLSsJCQlpZiAoIUtleXNbMF0pCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ fQotKwkJZWxzZSBpZiAoIXN0cm5jbXAoa2V5d29yZCwgIktleSIsIDMpICYmIEtsZW5fY291bnRz X2tleXMpCi0rCQkJewotKwkJCWludCBrZXludW0gPSBhdG9pKGtleXdvcmQgKyAzKTsKLSsJCQlp ZiAoIWtleW51bSB8fCBrZXludW0gPiBLbGVuIHx8IEtleXNba2V5bnVtLTFdKQotKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOwotKwkJCUtleXNba2V5bnVtLTFdID0gaGV4MmJpbl9tKHZhbHVlLCAmS2V5 bGVuKTsKLSsJCQlpZiAoIUtleXNba2V5bnVtLTFdKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwot KwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlp ZiAoTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1 ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ fQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTWFjIikpCi0rCQkJewotKwkJCWlmICht b2RlID09IDApCi0rCQkJCWNvbnRpbnVlOwotKwkJCWlmIChNYWMpCi0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJTWFjID0gaGV4MmJpbl9tKHZhbHVlLCAmTWFjbGVuKTsKLSsJCQlpZiAoIU1h YykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJSZXN1bHQiKSkKLSsJCQl7Ci0rCQkJaWYgKG1vZGUgPT0gMSkKLSsJCQkJY29udGlu dWU7Ci0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlCi0rCQkJZ290byBwYXJz ZV9lcnJvcjsKLSsKLSsJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJaWYgKEtleXMgJiYg TXNnICYmICghbW9kZSB8fCBNYWMpICYmIChUbGVuID4gMCkgJiYgKEtsZW4gPiAwKSkKLSsJCQl7 Ci0rCQkJaWYgKEtsZW5fY291bnRzX2tleXMpCi0rCQkJCXsKLSsJCQkJaW50IHg7Ci0rCQkJCUtl eSA9IE9QRU5TU0xfbWFsbG9jKEtsZW4gKiBrbm93bl9rZXlsZW4pOwotKwkJCQlmb3IgKHggPSAw OyB4IDwgS2xlbjsgeCsrKQotKwkJCQkJewotKwkJCQkJbWVtY3B5KEtleSArIHggKiBrbm93bl9r ZXlsZW4sCi0rCQkJCQkJS2V5c1t4XSwga25vd25fa2V5bGVuKTsKLSsJCQkJCU9QRU5TU0xfZnJl ZShLZXlzW3hdKTsKLSsJCQkJCX0KLSsJCQkJS2xlbiAqPSBrbm93bl9rZXlsZW47Ci0rCQkJCX0K LSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJS2V5ID0gT1BFTlNTTF9tYWxsb2MoS2xlbik7Ci0rCQkJ CW1lbWNweShLZXksIEtleXNbMF0sIEtsZW4pOwotKwkJCQlPUEVOU1NMX2ZyZWUoS2V5c1swXSk7 Ci0rCQkJCX0KLSsJCQlPUEVOU1NMX2ZyZWUoS2V5cyk7Ci0rCi0rCQkJc3dpdGNoKG1vZGUpCi0r CQkJCXsKLSsJCQljYXNlIDA6Ci0rCQkJCWlmICghcHJpbnRfY21hY19nZW4oY2lwaGVyLCBvdXQs Ci0rCQkJCQkJS2V5LCBLbGVuLAotKwkJCQkJCU1zZywgTWxlbiwKLSsJCQkJCQlUbGVuKSkKLSsJ CQkJCWdvdG8gZXJyb3I7Ci0rCQkJCWJyZWFrOwotKwkJCWNhc2UgMToKLSsJCQkJaWYgKCFwcmlu dF9jbWFjX3ZlcihjaXBoZXIsIG91dCwKLSsJCQkJCQlLZXksIEtsZW4sCi0rCQkJCQkJTXNnLCBN bGVuLAotKwkJCQkJCU1hYywgTWFjbGVuLAotKwkJCQkJCVRsZW4pKQotKwkJCQkJZ290byBlcnJv cjsKLSsJCQkJYnJlYWs7Ci0rCQkJCX0KLSsKLSsJCQlPUEVOU1NMX2ZyZWUoS2V5KTsKLSsJCQlL ZXkgPSBOVUxMOwotKwkJCU9QRU5TU0xfZnJlZShNc2cpOwotKwkJCU1zZyA9IE5VTEw7Ci0rCQkJ T1BFTlNTTF9mcmVlKE1hYyk7Ci0rCQkJTWFjID0gTlVMTDsKLSsJCQlLbGVuID0gLTE7Ci0rCQkJ TWxlbiA9IC0xOwotKwkJCVRsZW4gPSAtMTsKLSsJCQlDb3VudCA9IC0xOwotKwkJCX0KLSsJCX0K LSsKLSsKLSsJcmV0ID0gMTsKLSsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJ CU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVl KGxpbmVidWYpOwotKwlpZiAoS2V5KQotKwkJT1BFTlNTTF9mcmVlKEtleSk7Ci0rCWlmIChNc2cp Ci0rCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJaWYgKE1hYykKLSsJCU9QRU5TU0xfZnJlZShNYWMp OwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRl cnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwot Kwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCBwcmludF9jbWFjX2dlbihjb25z dCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKktleSwg aW50IEtsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNbGVuLAotKwkJaW50IFRsZW4p Ci0rCXsKLSsJaW50IHJjLCBpOwotKwlzaXplX3QgcmVzbGVuOwotKwl1bnNpZ25lZCBjaGFyIHJl c1sxMjhdOwotKwlDTUFDX0NUWCAqY21hY19jdHggPSBDTUFDX0NUWF9uZXcoKTsKLSsKLSsJQ01B Q19Jbml0KGNtYWNfY3R4LCBLZXksIEtsZW4sIGNpcGhlciwgMCk7Ci0rCUNNQUNfVXBkYXRlKGNt YWNfY3R4LCBNc2csIE1sZW4pOwotKwlpZiAoIUNNQUNfRmluYWwoY21hY19jdHgsIHJlcywgJnJl c2xlbikpCi0rCQl7Ci0rCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgQ01BQ1xuIiwgc3RkZXJy KTsKLSsJCXJjID0gMDsKLSsJCX0KLSsJZWxzZSBpZiAoVGxlbiA+IChpbnQpcmVzbGVuKQotKwkJ ewotKwkJZnB1dHMoIlBhcmFtZXRlciBlcnJvciwgVGxlbiA+IENNQUMgbGVuZ3RoXG4iLCBzdGRl cnIpOwotKwkJcmMgPSAwOwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlmcHV0cygiTWFjID0gIiwg b3V0KTsKLSsJCWZvciAoaSA9IDA7IGkgPCBUbGVuOyBpKyspCi0rCQkJZnByaW50ZihvdXQsICIl MDJ4IiwgcmVzW2ldKTsKLSsJCWZwdXRzKFJFU1BfRU9MLCBvdXQpOwotKwkJcmMgPSAxOwotKwkJ fQotKwlDTUFDX0NUWF9mcmVlKGNtYWNfY3R4KTsKLSsJcmV0dXJuIHJjOwotKwl9Ci0rCi0rc3Rh dGljIGludCBwcmludF9jbWFjX3Zlcihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91 dCwKLSsJCXVuc2lnbmVkIGNoYXIgKktleSwgaW50IEtsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpN c2csIGludCBNbGVuLAotKwkJdW5zaWduZWQgY2hhciAqTWFjLCBpbnQgTWFjbGVuLAotKwkJaW50 IFRsZW4pCi0rCXsKLSsJaW50IHJjID0gMTsKLSsJc2l6ZV90IHJlc2xlbjsKLSsJdW5zaWduZWQg Y2hhciByZXNbMTI4XTsKLSsJQ01BQ19DVFggKmNtYWNfY3R4ID0gQ01BQ19DVFhfbmV3KCk7Ci0r Ci0rCUNNQUNfSW5pdChjbWFjX2N0eCwgS2V5LCBLbGVuLCBjaXBoZXIsIDApOwotKwlDTUFDX1Vw ZGF0ZShjbWFjX2N0eCwgTXNnLCBNbGVuKTsKLSsJaWYgKCFDTUFDX0ZpbmFsKGNtYWNfY3R4LCBy ZXMsICZyZXNsZW4pKQotKwkJewotKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIENNQUNcbiIs IHN0ZGVycik7Ci0rCQlyYyA9IDA7Ci0rCQl9Ci0rCWVsc2UgaWYgKFRsZW4gPiAoaW50KXJlc2xl bikKLSsJCXsKLSsJCWZwdXRzKCJQYXJhbWV0ZXIgZXJyb3IsIFRsZW4gPiBDTUFDIGxlbmd0aFxu Iiwgc3RkZXJyKTsKLSsJCXJjID0gMDsKLSsJCX0KLSsJZWxzZSBpZiAoVGxlbiAhPSBNYWNsZW4p Ci0rCQl7Ci0rCQlmcHV0cygiUGFyYW1ldGVyIGVycm9yLCBUbGVuICE9IHJlc3VsdGluZyBNYWMg bGVuZ3RoXG4iLCBzdGRlcnIpOwotKwkJcmMgPSAwOwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlp ZiAoIW1lbWNtcChNYWMsIHJlcywgTWFjbGVuKSkKLSsJCQlmcHV0cygiUmVzdWx0ID0gUCIgUkVT UF9FT0wsIG91dCk7Ci0rCQllbHNlCi0rCQkJZnB1dHMoIlJlc3VsdCA9IEYiIFJFU1BfRU9MLCBv dXQpOwotKwkJfQotKwlDTUFDX0NUWF9mcmVlKGNtYWNfY3R4KTsKLSsJcmV0dXJuIHJjOwotKwl9 Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfZGVzbW92cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rl c21vdnMuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3Zz LmMuZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1Mjc4NTQ0MiArMDIwMAotKysrIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMJMjAxMi0wNC0yMCAwOTowNzow Ni4yNTI3ODU0NDIgKzAyMDAKLUBAIC0wLDAgKzEsNzAyIEBACi0rLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg KiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0Ogot KyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVu c3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAq Ci0rICovCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSsgIE5JU1QgREVTIE1vZGVzIG9mIE9wZXJhdGlvbiBWYWxpZGF0aW9uIFN5c3RlbQotKyAgVGVz dCBQcm9ncmFtCi0rCi0rICBCYXNlZCBvbiB0aGUgQUVTIFZhbGlkYXRpb24gU3VpdGUsIHdoaWNo IHdhczoKLSsgIERvbmF0ZWQgdG8gT3BlblNTTCBieToKLSsgIFYtT05FIENvcnBvcmF0aW9uCi0r ICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMwMAotKyAgR2VybWFudG93biwgTUQgMjA4NzQK LSsgIFUuUy5BLgotKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8ZXJybm8uaD4KLSsjaW5jbHVkZSA8YXNzZXJ0 Lmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKyNpZm5kZWYgT1BF TlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAg IHByaW50ZigiTm8gRklQUyBERVMgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0r Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNf dXRsLmgiCi0rCi0rI2RlZmluZSBERVNfQkxPQ0tfU0laRSA4Ci0rCi0rI2RlZmluZSBWRVJCT1NF IDAKLSsKLStpbnQgREVTVGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LAotKwkgICAgY2hhciAqYW1v ZGUsIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksIAotKwkgICAgdW5zaWduZWQgY2hh ciAqaVZlYywgCi0rCSAgICBpbnQgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICov Ci0rCSAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbGVuKQot KyAgICB7Ci0rICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7Ci0rCi0rICAgIGlm IChha2V5c3ogIT0gMTkyKQotKwl7Ci0rCXByaW50ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIs IGFrZXlzeik7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsKLSsgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUs ICJDQkMiKSA9PSAwKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2JjKCk7Ci0rICAgIGVsc2Ug aWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQotKwljaXBoZXIgPSBFVlBfZGVzX2Vk ZTNfZWNiKCk7Ci0rICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDRkI2NCIpID09IDAp Ci0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI2NCgpOwotKyAgICBlbHNlIGlmIChzdHJuY2Fz ZWNtcChhbW9kZSwgIk9GQiIsIDMpID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19vZmIo KTsKLSsgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQotKwljaXBoZXIgPSBF VlBfZGVzX2VkZTNfY2ZiOCgpOwotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIx IikpCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmIxKCk7Ci0rICAgIGVsc2UKLSsJewotKwlw cmludGYoIlVua25vd24gbW9kZTogJXNcbiIsIGFtb2RlKTsKLSsJRVhJVCgxKTsKLSsJfQotKwot KyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlWZWMs IGRpcikgPD0gMCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIx IikpCi0rCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwgRVZQX0NJUEhfRkxBR19MRU5H VEhfQklUUyk7Ci0rICAgIEVWUF9DaXBoZXIoY3R4LCBvdXQsIGluLCBsZW4pOwotKwotKyAgICBy ZXR1cm4gMTsKLSsgICAgfQotKwotK3ZvaWQgRGVidWdWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVk IGNoYXIgKnZhbCwgaW50IGxlbikKLSsgICAgewotKyAgICBjaGFyIG9idWZbMjA0OF07Ci0rICAg IGludCBvbGVuOwotKyAgICBvbGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1Zik7Ci0rICAgIHBy aW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwotKyAgICB9Ci0rCi0rdm9pZCBz aGlmdGluKHVuc2lnbmVkIGNoYXIgKmRzdCx1bnNpZ25lZCBjaGFyICpzcmMsaW50IG5iaXRzKQot KyAgICB7Ci0rICAgIGludCBuOwotKwotKyAgICAvKiBtb3ZlIHRoZSBieXRlcy4uLiAqLwotKyAg ICBtZW1tb3ZlKGRzdCxkc3QrbmJpdHMvOCwzKjgtbmJpdHMvOCk7Ci0rICAgIC8qIGFwcGVuZCBu ZXcgZGF0YSAqLwotKyAgICBtZW1jcHkoZHN0KzMqOC1uYml0cy84LHNyYywobmJpdHMrNykvOCk7 Ci0rICAgIC8qIGxlZnQgc2hpZnQgdGhlIGJpdHMgKi8KLSsgICAgaWYobmJpdHMlOCkKLSsJZm9y KG49MCA7IG4gPCAzKjggOyArK24pCi0rCSAgICBkc3Rbbl09KGRzdFtuXSA8PCAobmJpdHMlOCkp fChkc3RbbisxXSA+PiAoOC1uYml0cyU4KSk7Ci0rICAgIH0JCi0rCi0rLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rY2hhciAqdF90YWdbMl0gPSB7 IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07Ci0rY2hhciAqdF9tb2RlWzZdID0geyJDQkMiLCJF Q0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjY0In07Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwg T0ZCLCBDRkIxLCBDRkI4LCBDRkI2NH07Ci0raW50IFNpemVzWzZdPXs2NCw2NCw2NCwxLDgsNjR9 OwotKwotK3ZvaWQgZG9fbWN0KGNoYXIgKmFtb2RlLCAKLSsJICAgIGludCBha2V5c3osIGludCBu dW1rZXlzLCB1bnNpZ25lZCBjaGFyICpha2V5LHVuc2lnbmVkIGNoYXIgKml2ZWMsCi0rCSAgICBp bnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAotKwkgICAgRklMRSAqcmZwKQot KyAgICB7Ci0rICAgIGludCBpLGltb2RlOwotKyAgICB1bnNpZ25lZCBjaGFyIG5rWzQqOF07IC8q IGxvbmdlc3Qga2V5KzggKi8KLSsgICAgdW5zaWduZWQgY2hhciB0ZXh0MFs4XTsKLSsKLSsgICAg Zm9yIChpbW9kZT0wIDsgaW1vZGUgPCA2IDsgKytpbW9kZSkKLSsJaWYoIXN0cmNtcChhbW9kZSx0 X21vZGVbaW1vZGVdKSkKLSsJICAgIGJyZWFrOwotKyAgICBpZiAoaW1vZGUgPT0gNikKLSsJeyAK LSsJcHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTogJXNcbiIsIGFtb2RlKTsKLSsJRVhJVCgxKTsK LSsJfQotKwotKyAgICBmb3IoaT0wIDsgaSA8IDQwMCA7ICsraSkKLSsJewotKwlpbnQgajsKLSsJ aW50IG47Ci0rCWludCBrcD1ha2V5c3ovNjQ7Ci0rCXVuc2lnbmVkIGNoYXIgb2xkX2l2WzhdOwot KwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0r CWZwcmludGYocmZwLCJcbkNPVU5UID0gJWRcbiIsaSk7Ci0rCWlmKGtwID09IDEpCi0rCSAgICBP dXRwdXRWYWx1ZSgiS0VZIixha2V5LDgscmZwLDApOwotKwllbHNlCi0rCSAgICBmb3Iobj0wIDsg biA8IGtwIDsgKytuKQotKwkJewotKwkJZnByaW50ZihyZnAsIktFWSVkIixuKzEpOwotKwkJT3V0 cHV0VmFsdWUoIiIsYWtleStuKjgsOCxyZnAsMCk7Ci0rCQl9Ci0rCi0rCWlmKGltb2RlICE9IEVD QikKLSsJICAgIE91dHB1dFZhbHVlKCJJViIsaXZlYyw4LHJmcCwwKTsKLSsJT3V0cHV0VmFsdWUo dF90YWdbZGlyXjFdLHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIxKTsKLSsjaWYgMAotKwkvKiBj b21wZW5zYXRlIGZvciBlbmRpYW5uZXNzICovCi0rCWlmKGltb2RlID09IENGQjEpCi0rCSAgICB0 ZXh0WzBdPDw9NzsKLSsjZW5kaWYKLSsJbWVtY3B5KHRleHQwLHRleHQsOCk7Ci0rCi0rCWZvcihq PTAgOyBqIDwgMTAwMDAgOyArK2opCi0rCSAgICB7Ci0rCSAgICB1bnNpZ25lZCBjaGFyIG9sZF90 ZXh0WzhdOwotKwotKwkgICAgbWVtY3B5KG9sZF90ZXh0LHRleHQsOCk7Ci0rCSAgICBpZihqID09 IDApCi0rCQl7Ci0rCQltZW1jcHkob2xkX2l2LGl2ZWMsOCk7Ci0rCQlERVNUZXN0KCZjdHgsYW1v ZGUsYWtleXN6LGFrZXksaXZlYyxkaXIsdGV4dCx0ZXh0LGxlbik7Ci0rCQl9Ci0rCSAgICBlbHNl Ci0rCQl7Ci0rCQltZW1jcHkob2xkX2l2LGN0eC5pdiw4KTsKLSsJCUVWUF9DaXBoZXIoJmN0eCx0 ZXh0LHRleHQsbGVuKTsKLSsJCX0KLSsJICAgIGlmKGogPT0gOTk5OSkKLSsJCXsKLSsJCU91dHB1 dFZhbHVlKHRfdGFnW2Rpcl0sdGV4dCxsZW4scmZwLGltb2RlID09IENGQjEpOwotKwkJLyoJCW1l bWNweShpdmVjLHRleHQsOCk7ICovCi0rCQl9Ci0rCSAgICAvKgkgICAgRGVidWdWYWx1ZSgiaXYi LGN0eC5pdiw4KTsgKi8KLSsJICAgIC8qIGFjY3VtdWxhdGUgbWF0ZXJpYWwgZm9yIHRoZSBuZXh0 IGtleSAqLwotKwkgICAgc2hpZnRpbihuayx0ZXh0LFNpemVzW2ltb2RlXSk7Ci0rCSAgICAvKgkg ICAgRGVidWdWYWx1ZSgibmsiLG5rLDI0KTsqLwotKwkgICAgaWYoKGRpciAmJiAoaW1vZGUgPT0g Q0ZCMSB8fCBpbW9kZSA9PSBDRkI4IHx8IGltb2RlID09IENGQjY0Ci0rCQkJfHwgaW1vZGUgPT0g Q0JDKSkgfHwgaW1vZGUgPT0gT0ZCKQotKwkJbWVtY3B5KHRleHQsb2xkX2l2LDgpOwotKwotKwkg ICAgaWYoIWRpciAmJiAoaW1vZGUgPT0gQ0ZCMSB8fCBpbW9kZSA9PSBDRkI4IHx8IGltb2RlID09 IENGQjY0KSkKLSsJCXsKLSsJCS8qIHRoZSB0ZXN0IHNwZWNpZmllcyB1c2luZyB0aGUgb3V0cHV0 IG9mIHRoZSByYXcgREVTIG9wZXJhdGlvbgotKwkJICAgd2hpY2ggd2UgZG9uJ3QgaGF2ZSwgc28g cmVjb25zdHJ1Y3QgaXQuLi4gKi8KLSsJCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKLSsJCSAgICB0 ZXh0W25dXj1vbGRfdGV4dFtuXTsKLSsJCX0KLSsJICAgIH0KLSsJZm9yKG49MCA7IG4gPCA4IDsg KytuKQotKwkgICAgYWtleVtuXV49bmtbMTYrbl07Ci0rCWZvcihuPTAgOyBuIDwgOCA7ICsrbikK LSsJICAgIGFrZXlbOCtuXV49bmtbOCtuXTsKLSsJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkg ICAgYWtleVsxNituXV49bmtbbl07Ci0rCWlmKG51bWtleXMgPCAzKQotKwkgICAgbWVtY3B5KCZh a2V5WzIqOF0sYWtleSw4KTsKLSsJaWYobnVta2V5cyA8IDIpCi0rCSAgICBtZW1jcHkoJmFrZXlb OF0sYWtleSw4KTsKLSsJREVTX3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopYWtleSk7Ci0r CURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5KzgpKTsKLSsJREVTX3NldF9v ZGRfcGFyaXR5KChERVNfY2Jsb2NrICopKGFrZXkrMTYpKTsKLSsJbWVtY3B5KGl2ZWMsY3R4Lml2 LDgpOwotKwotKwkvKiBwb2ludGxlc3MgZXhlcmNpc2UgLSB0aGUgZmluYWwgdGV4dCBkb2Vzbid0 IGRlcGVuZCBvbiB0aGUKLSsJICAgaW5pdGlhbCB0ZXh0IGluIE9GQiBtb2RlLCBzbyB3aG8gY2Fy ZXMgd2hhdCBpdCBpcz8gKFdobwotKwkgICBkZXNpZ25lZCB0aGVzZSB0ZXN0cz8pICovCi0rCWlm KGltb2RlID09IE9GQikKLSsJICAgIGZvcihuPTAgOyBuIDwgOCA7ICsrbikKLSsJCXRleHRbbl09 dGV4dDBbbl1eb2xkX2l2W25dOwotKwl9Ci0rICAgIH0KLSsgICAgCi0raW50IHByb2NfZmlsZShj aGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUpCi0rICAgIHsKLSsgICAgY2hhciBhZm5bMjU2XSwg cmZuWzI1Nl07Ci0rICAgIEZJTEUgKmFmcCA9IE5VTEwsICpyZnAgPSBOVUxMOwotKyAgICBjaGFy IGlidWZbMjA0OF0sIHRidWZbMjA0OF07Ci0rICAgIGludCBpbGVuLCBsZW4sIHJldCA9IDA7Ci0r ICAgIGNoYXIgYW1vZGVbOF0gPSAiIjsKLSsgICAgY2hhciBhdGVzdFsxMDBdID0gIiI7Ci0rICAg IGludCBha2V5c3o9MDsKLSsgICAgdW5zaWduZWQgY2hhciBpVmVjWzIwXSwgYUtleVs0MF07Ci0r ICAgIGludCBkaXIgPSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIg cGxhaW50ZXh0WzIwNDhdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07Ci0r ICAgIGNoYXIgKnJwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIGludCBudW1rZXlz PTE7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAgIGlmICghcnFmaWxl IHx8ICEoKnJxZmlsZSkpCi0rCXsKLSsJcHJpbnRmKCJObyByZXEgZmlsZVxuIik7Ci0rCXJldHVy biAtMTsKLSsJfQotKyAgICBzdHJjcHkoYWZuLCBycWZpbGUpOwotKwotKyAgICBpZiAoKGFmcCA9 IGZvcGVuKGFmbiwgInIiKSkgPT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNhbm5vdCBvcGVuIGZp bGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICBhZm4sIHN0cmVycm9yKGVycm5vKSk7Ci0rCXJldHVy biAtMTsKLSsJfQotKyAgICBpZiAoIXJzcGZpbGUpCi0rCXsKLSsJc3RyY3B5KHJmbixhZm4pOwot KwlycD1zdHJzdHIocmZuLCJyZXEvIik7Ci0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCWlm ICghcnApCi0rCSAgICBycD1zdHJzdHIocmZuLCJyZXFcXCIpOwotKyNlbmRpZgotKwlhc3NlcnQo cnApOwotKwltZW1jcHkocnAsInJzcCIsMyk7Ci0rCXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsK LSsJbWVtY3B5KHJwLCAiLnJzcCIsIDQpOwotKwlyc3BmaWxlID0gcmZuOwotKwl9Ci0rICAgIGlm ICgocmZwID0gZm9wZW4ocnNwZmlsZSwgInciKSkgPT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNh bm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICByZm4sIHN0cmVycm9yKGVycm5v KSk7Ci0rCWZjbG9zZShhZnApOwotKwlhZnAgPSBOVUxMOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsg ICAgd2hpbGUgKCFlcnIgJiYgKGZnZXRzKGlidWYsIHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVM TCkKLSsJewotKwl0aWR5X2xpbmUodGJ1ZiwgaWJ1Zik7Ci0rCWlsZW4gPSBzdHJsZW4oaWJ1Zik7 Ci0rCS8qCXByaW50Zigic3RlcD0lZCBpYnVmPSVzIixzdGVwLGlidWYpOyovCi0rCWlmKHN0ZXAg PT0gMyAmJiAhc3RyY21wKGFtb2RlLCJFQ0IiKSkKLSsJICAgIHsKLSsJICAgIG1lbXNldChpVmVj LCAwLCBzaXplb2YoaVZlYykpOwotKwkgICAgc3RlcCA9IChkaXIpPyA0OiA1OyAgLyogbm8gaXZl YyBmb3IgRUNCICovCi0rCSAgICB9Ci0rCXN3aXRjaCAoc3RlcCkKLSsJICAgIHsKLSsJY2FzZSAw OiAgLyogcmVhZCBwcmVhbWJsZSAqLwotKwkgICAgaWYgKGlidWZbMF0gPT0gJ1xuJykKLSsJCXsg LyogZW5kIG9mIHByZWFtYmxlICovCi0rCQlpZiAoKmFtb2RlID09ICdcMCcpCi0rCQkgICAgewot KwkJICAgIHByaW50ZigiTWlzc2luZyBNb2RlXG4iKTsKLSsJCSAgICBlcnIgPSAxOwotKwkJICAg IH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSAgICAr KyBzdGVwOwotKwkJICAgIH0KLSsJCX0KLSsJICAgIGVsc2UgaWYgKGlidWZbMF0gIT0gJyMnKQot KwkJewotKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4iLCBpYnVmKTsKLSsJ CWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8K LSsJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7Ci0rCQlpbnQgbjsKLSsJCWlmKCphbW9kZSkKLSsJ CSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUgJiBkYXRlICovCi0rCQkgICAgdGltZV90IHJ0 aW0gPSB0aW1lKDApOwotKwkJICAgIGZwcmludGYocmZwLCAiIyAlcyIsIGN0aW1lKCZydGltKSk7 Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwot KwkJICAgIGlmKCFzdHJuY21wKHBwLCJJTlZFUlNFICIsOCkgfHwgIXN0cm5jbXAocHAsIkRFUyAi LDQpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlRERVMgIiw1KQotKwkJICAgICAgIHx8ICFz dHJuY21wKHBwLCJQRVJNVVRBVElPTiAiLDEyKQotKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJT VUJTVElUVVRJT04gIiwxMykKLSsJCSAgICAgICB8fCAhc3RybmNtcChwcCwiVkFSSUFCTEUgIiw5 KSkKLSsJCQl7Ci0rCQkJLyogZ2V0IHRlc3QgdHlwZSAqLwotKwkJCWlmKCFzdHJuY21wKHBwLCJE RVMgIiw0KSkKLSsJCQkgICAgcHArPTQ7Ci0rCQkJZWxzZSBpZighc3RybmNtcChwcCwiVERFUyAi LDUpKQotKwkJCSAgICBwcCs9NTsKLSsJCQl4cCA9IHN0cmNocihwcCwgJyAnKTsKLSsJCQluID0g eHAtcHA7Ci0rCQkJc3RybmNweShhdGVzdCwgcHAsIG4pOwotKwkJCWF0ZXN0W25dID0gJ1wwJzsK LSsJCQkvKiBnZXQgbW9kZSAqLwotKwkJCXhwID0gc3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1v ZGUiICovCi0rCQkJbiA9IHN0cmxlbih4cCsxKS0xOwotKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEs IG4pOwotKwkJCWFtb2RlW25dID0gJ1wwJzsKLSsJCQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCi0r CQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50ZigiVGVzdD0lcywgTW9kZT0lc1xuIixhdGVzdCxh bW9kZSk7Ci0rCQkJfQotKwkJICAgIH0KLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDE6 ICAvKiBbRU5DUllQVF0gfCBbREVDUllQVF0gKi8KLSsJICAgIGlmKGlidWZbMF0gPT0gJ1xuJykK LSsJCWJyZWFrOwotKwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQotKwkJewotKwkJZnB1dHMoaWJ1 ZiwgcmZwKTsKLSsJCSsrc3RlcDsKLSsJCWlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0VOQ1JZUFRd IiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAxOwotKwkJZWxzZSBpZiAoc3RybmNhc2VjbXAoaWJ1 ZiwgIltERUNSWVBUXSIsIDkpID09IDApCi0rCQkgICAgZGlyID0gMDsKLSsJCWVsc2UKLSsJCSAg ICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBpYnVmKTsKLSsJCSAg ICBlcnIgPSAxOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSBpZiAoZGly ID09IC0xKQotKwkJewotKwkJZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2luZyBFTkNSWVBUL0RF Q1JZUFQga2V5d29yZFxuIik7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIGVsc2UgCi0rCQlzdGVw ID0gMjsKLSsKLSsJY2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCi0rCSAgICBpZigqaWJ1ZiA9PSAn XG4nKQotKwkJewotKwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAg ICAgICAgICAgICAgfQotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UID0gIiw4KSkK LSsJCXsKLSsJICAgICAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJYnJlYWs7Ci0rICAgICAgICAg ICAgICAgIH0KLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVD0iLDYpKQotKwkJewot KwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAgICAgICAgICAgICAg fQotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIk51bUtleXMgPSAiLDEwKSkKLSsJCXsKLSsJ CW51bWtleXM9YXRvaShpYnVmKzEwKTsKLSsJCWJyZWFrOwotKwkJfQotKwkgIAotKwkgICAgZnB1 dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkgPSAiLDYpKQot KwkJewotKwkJYWtleXN6PTY0OwotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis2LCBhS2V5 KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgS0VZ XG4iKTsKLSsJCSAgICBlcnI9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZh bHVlKCJLRVkiLCBhS2V5LCBsZW4pOwotKwkJKytzdGVwOwotKwkJfQotKwkgICAgZWxzZSBpZigh c3RybmNhc2VjbXAoaWJ1ZiwiS0VZcyA9ICIsNykpCi0rCQl7Ci0rCQlha2V5c3o9NjQqMzsKLSsJ CWxlbj1oZXgyYmluKGlidWYrNyxhS2V5KTsKLSsJCWlmKGxlbiAhPSA4KQotKwkJICAgIHsKLSsJ CSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKLSsJCSAgICBlcnI9MTsKLSsJCSAgICBicmVh azsKLSsJCSAgICB9Ci0rCQltZW1jcHkoYUtleSs4LGFLZXksOCk7Ci0rCQltZW1jcHkoYUtleSsx NixhS2V5LDgpOwotKwkJaWJ1Zls0XT0nXDAnOwotKwkJUHJpbnRWYWx1ZSgiS0VZcyIsYUtleSxs ZW4pOwotKwkJKytzdGVwOwotKwkJfQotKwkgICAgZWxzZSBpZighc3RybmNhc2VjbXAoaWJ1Ziwi S0VZIiwzKSkKLSsJCXsKLSsJCWludCBuPWlidWZbM10tJzEnOwotKwotKwkJYWtleXN6PTY0KjM7 Ci0rCQlsZW49aGV4MmJpbihpYnVmKzcsYUtleStuKjgpOwotKwkJaWYobGVuICE9IDgpCi0rCQkg ICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVycj0xOwotKwkJ ICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCWlidWZbNF09J1wwJzsKLSsJCVByaW50VmFsdWUoaWJ1 ZixhS2V5LGxlbik7Ci0rCQlpZihuID09IDIpCi0rCQkgICAgKytzdGVwOwotKwkJfQotKwkgICAg ZWxzZQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7Ci0rCQllcnIgPSAxOwotKwkJ fQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMzogLyogSVYgPSB4eHh4ICovCi0rCSAgICBmcHV0 cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJJViA9ICIsIDUpICE9 IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0K LSsJICAgIGVsc2UKLSsJCXsKLSsJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNSwgaVZlYyk7 Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIElWXG4i KTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1 ZSgiSVYiLCBpVmVjLCBsZW4pOwotKwkJc3RlcCA9IChkaXIpPyA0OiA1OwotKwkJfQotKwkgICAg YnJlYWs7Ci0rCi0rCWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMo aWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiUExBSU5URVhUID0gIiwg MTIpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgUExBSU5URVhUXG4iKTsKLSsJCWVy ciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpbnQgbm4gPSBzdHJsZW4oaWJ1Zisx Mik7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVuPWJpbnQyYmluKGli dWYrMTIsbm4tMSxwbGFpbnRleHQpOwotKwkJZWxzZQotKwkJICAgIGxlbj1oZXgyYmluKGlidWYr MTIsIHBsYWludGV4dCk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRm KCJJbnZhbGlkIFBMQUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkg ICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJaWYgKGxlbiA+PSBzaXplb2YocGxhaW50ZXh0KSkKLSsJ CSAgICB7Ci0rCQkgICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIpOwotKwkJICAgIH0KLSsJ CVByaW50VmFsdWUoIlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbik7 Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTW9udGUiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVz dCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19tY3QoYW1vZGUsYWtleXN6LG51bWtleXMsYUtleSxp VmVjLGRpcixwbGFpbnRleHQsbGVuLHJmcCk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsK LSsJCSAgICBhc3NlcnQoZGlyID09IDEpOwotKwkJICAgIHJldCA9IERFU1Rlc3QoJmN0eCwgYW1v ZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEg PSBlbmNyeXB0ICovCi0rCQkJCSAgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBsZW4pOwotKwkJICAg IE91dHB1dFZhbHVlKCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxlbixyZnAsCi0rCQkJCSFzdHJj bXAoYW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAgfQotKwkJc3RlcCA9IDY7Ci0rCQl9Ci0rCSAgICBi cmVhazsKLSsKLSsJY2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMo aWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiQ0lQSEVSVEVYVCA9ICIs IDEzKSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7Ci0rCQllcnIgPSAx OwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQot KwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVmKzEzKS0xLGNpcGhlcnRleHQp OwotKwkJZWxzZQotKwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0KTsKLSsJ CWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgQ0lQSEVSVEVY VFxuIik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCQotKwkJ UHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQlpZiAoc3RyY21w KGF0ZXN0LCAiTW9udGUiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsK LSsJCSAgICBkb19tY3QoYW1vZGUsIGFrZXlzeiwgbnVta2V5cywgYUtleSwgaVZlYywgCi0rCQkJ ICAgZGlyLCBjaXBoZXJ0ZXh0LCBsZW4sIHJmcCk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAg IHsKLSsJCSAgICBhc3NlcnQoZGlyID09IDApOwotKwkJICAgIHJldCA9IERFU1Rlc3QoJmN0eCwg YW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQs IDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOwotKwkJ ICAgIE91dHB1dFZhbHVlKCJQTEFJTlRFWFQiLCh1bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxl bixyZnAsCi0rCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAgfQotKwkJc3RlcCA9 IDY7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA2OgotKwkgICAgaWYgKGlidWZbMF0g IT0gJ1xuJykKLSsJCXsKLSsJCWVyciA9IDE7Ci0rCQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRv clxuIik7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQot KwkJeyAvKiBNQ1QgYWxyZWFkeSBhZGRlZCB0ZXJtaW5hdGluZyBubCAqLwotKwkJZnB1dHMoaWJ1 ZiwgcmZwKTsKLSsJCX0KLSsJICAgIHN0ZXAgPSAxOwotKwkgICAgYnJlYWs7Ci0rCSAgICB9Ci0r CX0KLSsgICAgaWYgKHJmcCkKLSsJZmNsb3NlKHJmcCk7Ci0rICAgIGlmIChhZnApCi0rCWZjbG9z ZShhZnApOwotKyAgICByZXR1cm4gZXJyOwotKyAgICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgUHJvY2Vzc2VzIGVpdGhlciBh IHNpbmdsZSBmaWxlIG9yIAotKyAgYSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3Nl ZCBpbiBhIGZpbGUuCi0rICBBIHNpbmdsZSBmaWxlIGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVz X3Rlc3QgLWYgeHh4LnJlcQotKyAgQSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgotKyAg ICBhZXNfdGVzdCAtZCB4eHh4eC54eHgKLSsgIFRoZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0Ci0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsgICAgewotKyAgICBjaGFyICpycWxpc3Qg PSAicmVxLnR4dCIsICpyc3BmaWxlID0gTlVMTDsKLSsgICAgRklMRSAqZnAgPSBOVUxMOwotKyAg ICBjaGFyIGZuWzI1MF0gPSAiIiwgcmZuWzI1Nl0gPSAiIjsKLSsgICAgaW50IGZfb3B0ID0gMCwg ZF9vcHQgPSAxOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYoIUZJUFNfbW9kZV9z ZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsjZW5k aWYKLSsgICAgaWYgKGFyZ2MgPiAxKQotKwl7Ci0rCWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICIt ZCIpID09IDApCi0rCSAgICB7Ci0rCSAgICBkX29wdCA9IDE7Ci0rCSAgICB9Ci0rCWVsc2UgaWYg KHN0cmNhc2VjbXAoYXJndlsxXSwgIi1mIikgPT0gMCkKLSsJICAgIHsKLSsJICAgIGZfb3B0ID0g MTsKLSsJICAgIGRfb3B0ID0gMDsKLSsJICAgIH0KLSsJZWxzZQotKwkgICAgewotKwkgICAgcHJp bnRmKCJJbnZhbGlkIHBhcmFtZXRlcjogJXNcbiIsIGFyZ3ZbMV0pOwotKwkgICAgcmV0dXJuIDA7 Ci0rCSAgICB9Ci0rCWlmIChhcmdjIDwgMykKLSsJICAgIHsKLSsJICAgIHByaW50ZigiTWlzc2lu ZyBwYXJhbWV0ZXJcbiIpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCWlmIChkX29wdCkK LSsJICAgIHJxbGlzdCA9IGFyZ3ZbMl07Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN0cmNweShm biwgYXJndlsyXSk7Ci0rCSAgICByc3BmaWxlID0gYXJndlszXTsKLSsJICAgIH0KLSsJfQotKyAg ICBpZiAoZF9vcHQpCi0rCXsgLyogbGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5KSAqLwotKwlpZiAo IShmcCA9IGZvcGVuKHJxbGlzdCwgInIiKSkpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIkNhbm5v dCBvcGVuIHJlcSBsaXN0IGZpbGVcbiIpOwotKwkgICAgcmV0dXJuIC0xOwotKwkgICAgfQotKwl3 aGlsZSAoZmdldHMoZm4sIHNpemVvZihmbiksIGZwKSkKLSsJICAgIHsKLSsJICAgIHN0cnRvayhm biwgIlxyXG4iKTsKLSsJICAgIHN0cmNweShyZm4sIGZuKTsKLSsJICAgIHByaW50ZigiUHJvY2Vz c2luZzogJXNcbiIsIHJmbik7Ci0rCSAgICBpZiAocHJvY19maWxlKHJmbiwgcnNwZmlsZSkpCi0r CQl7Ci0rCQlwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgcmZu KTsKLSsJCUVYSVQoMSk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWZjbG9zZShmcCk7Ci0rCX0KLSsgICAg ZWxzZSAvKiBzaW5nbGUgZmlsZSAqLwotKwl7Ci0rCWlmIChWRVJCT1NFKQotKwkJcHJpbnRmKCJQ cm9jZXNzaW5nOiAlc1xuIiwgZm4pOwotKwlpZiAocHJvY19maWxlKGZuLCByc3BmaWxlKSkKLSsJ ICAgIHsKLSsJICAgIHByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4i LCBmbik7Ci0rCSAgICB9Ci0rCX0KLSsgICAgRVhJVCgwKTsKLSsgICAgcmV0dXJuIDA7Ci0rICAg IH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMv Zmlwc19kaHZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2 cy5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RodnMuYy5maXBz CTIwMTItMDQtMjAgMDk6MDc6MDYuMjUzNzg1NDYzICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RodnMuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1Mzc4NTQ2 MyArMDIwMAotQEAgLTAsMCArMSwyOTIgQEAKLSsvKiBmaXBzL2RoL2ZpcHNfZGh2cy5jICovCi0r LyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9y IHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENv cHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoK LSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK LSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0r ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3Jn LgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0r ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKi8KLSsKLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKyNpbmNsdWRlIDxv cGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVk ZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rewotKyAg ICBwcmludGYoIk5vIEZJUFMgREggc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0r I2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5o PgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVk ZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgY29uc3QgRVZQX01EICpwYXJzZV9tZChjaGFyICps aW5lKQotKwl7Ci0rCWNoYXIgKnA7Ci0rCWlmIChsaW5lWzBdICE9ICdbJyB8fCBsaW5lWzFdICE9 ICdGJykKLSsJCXJldHVybiBOVUxMOwotKwlwID0gc3RyY2hyKGxpbmUsICctJyk7Ci0rCWlmICgh cCkKLSsJCXJldHVybiBOVUxMOwotKwlsaW5lID0gcCArIDE7Ci0rCXAgPSBzdHJjaHIobGluZSwg J10nKTsKLSsJaWYgKCFwKQotKwkJcmV0dXJuIE5VTEw7Ci0rCSpwID0gMDsKLSsJcCA9IGxpbmU7 Ci0rCXdoaWxlKGlzc3BhY2UoKnApKQotKwkJcCsrOwotKwlpZiAoIXN0cmNtcChwLCAiU0hBMSIp KQotKwkJcmV0dXJuIEVWUF9zaGExKCk7Ci0rCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTIyNCIp KQotKwkJcmV0dXJuIEVWUF9zaGEyMjQoKTsKLSsJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBMjU2 IikpCi0rCQlyZXR1cm4gRVZQX3NoYTI1NigpOwotKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEz ODQiKSkKLSsJCXJldHVybiBFVlBfc2hhMzg0KCk7Ci0rCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNI QTUxMiIpKQotKwkJcmV0dXJuIEVWUF9zaGE1MTIoKTsKLSsJZWxzZQotKwkJcmV0dXJuIE5VTEw7 Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBvdXRwdXRfWmhhc2goRklMRSAqb3V0LCBpbnQgZXhvdXQs Ci0rCQkJCURIICpkaCwgQklHTlVNICpwZWVya2V5LCBjb25zdCBFVlBfTUQgKm1kLAotKwkJCQl1 bnNpZ25lZCBjaGFyICpyaGFzaCwgc2l6ZV90IHJoYXNobGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNo YXIgKlo7Ci0rCXVuc2lnbmVkIGNoYXIgY2hhc2hbRVZQX01BWF9NRF9TSVpFXTsKLSsJaW50IFps ZW47Ci0rCWlmIChyaGFzaCA9PSBOVUxMKQotKwkJewotKwkJcmhhc2hsZW4gPSBNX0VWUF9NRF9z aXplKG1kKTsKLSsJCWlmICghREhfZ2VuZXJhdGVfa2V5KGRoKSkKLSsJCQlleGl0ICgxKTsKLSsJ CWRvX2JuX3ByaW50X25hbWUob3V0LCAiWWVwaGVtSVVUIiwgZGgtPnB1Yl9rZXkpOwotKwkJaWYg KGV4b3V0KQotKwkJCWRvX2JuX3ByaW50X25hbWUob3V0LCAiWGVwaGVtSVVUIiwgZGgtPnByaXZf a2V5KTsKLSsJCX0KLSsJWiA9IE9QRU5TU0xfbWFsbG9jKEJOX251bV9ieXRlcyhkaC0+cCkpOwot KwlpZiAoIVopCi0rCQlleGl0KDEpOwotKwlabGVuID0gREhfY29tcHV0ZV9rZXlfcGFkZGVkKFos IHBlZXJrZXksIGRoKTsKLSsJaWYgKGV4b3V0KQotKwkJT3V0cHV0VmFsdWUoIloiLCBaLCBabGVu LCBvdXQsIDApOwotKwlGSVBTX2RpZ2VzdChaLCBabGVuLCBjaGFzaCwgTlVMTCwgbWQpOwotKwlP dXRwdXRWYWx1ZShyaGFzaCA/ICJJVVRIYXNoWloiIDogIkhhc2haWiIsIGNoYXNoLCByaGFzaGxl biwgb3V0LCAwKTsKLSsJaWYgKHJoYXNoKQotKwkJewotKwkJZnByaW50ZihvdXQsICJSZXN1bHQg PSAlc1xuIiwKLSsJCQkJbWVtY21wKGNoYXNoLCByaGFzaCwgcmhhc2hsZW4pID8gIkYiIDogIlAi KTsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJQk5fY2xlYXJfZnJlZShkaC0+cHJpdl9rZXkpOwot KwkJQk5fY2xlYXJfZnJlZShkaC0+cHViX2tleSk7Ci0rCQlkaC0+cHJpdl9rZXkgPSBOVUxMOwot KwkJZGgtPnB1Yl9rZXkgPSBOVUxMOwotKwkJfQotKwlPUEVOU1NMX2NsZWFuc2UoWiwgWmxlbik7 Ci0rCU9QRU5TU0xfZnJlZShaKTsKLSsJfQotKwotKyNpZmRlZiBGSVBTX0FMR1ZTCi0raW50IGZp cHNfZGh2c19tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsjZWxzZQotK2ludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKLSsjZW5kaWYKLSsJewotKwljaGFyICoqYXJncyA9IGFyZ3Yg KyAxOwotKwlpbnQgYXJnbiA9IGFyZ2MgLSAxOwotKwlGSUxFICppbiwgKm91dDsKLSsJY2hhciBi dWZbMjA0OF0sIGxidWZbMjA0OF07Ci0rCXVuc2lnbmVkIGNoYXIgKnJoYXNoOwotKwlsb25nIHJo YXNobGVuOwotKwlESCAqZGggPSBOVUxMOwotKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKLSsJ QklHTlVNICpwZWVya2V5ID0gTlVMTDsKLSsJY2hhciAqa2V5d29yZCA9IE5VTEwsICp2YWx1ZSA9 IE5VTEw7Ci0rCWludCBkb192ZXJpZnkgPSAtMSwgZXhvdXQgPSAwOwotKwotKwlmaXBzX2FsZ3Rl c3RfaW5pdCgpOwotKwotKwlpZiAoYXJnbiAmJiAhc3RyY21wKCphcmdzLCAiZGh2ZXIiKSkKLSsJ CXsKLSsJCWRvX3ZlcmlmeSA9IDE7Ci0rCQlhcmdzKys7Ci0rCQlhcmduLS07Ci0rCQl9Ci0rCWVs c2UgaWYgKGFyZ24gJiYgIXN0cmNtcCgqYXJncywgImRoZ2VuIikpCi0rCQl7Ci0rCQlkb192ZXJp ZnkgPSAwOwotKwkJYXJncysrOwotKwkJYXJnbi0tOwotKwkJfQotKwotKwlpZiAoYXJnbiAmJiAh c3RyY21wKCphcmdzLCAiLWV4b3V0IikpCi0rCQl7Ci0rCQlleG91dCA9IDE7Ci0rCQlhcmdzKys7 Ci0rCQlhcmduLS07Ci0rCQl9Ci0rCi0rCWlmIChkb192ZXJpZnkgPT0gLTEpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwiJXMgW2RodmVyfGRoZ2VufF0gWy1leG91dF0gKGluZmlsZSBvdXRmaWxl KVxuIixhcmd2WzBdKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCi0rCWlmIChhcmduID09IDIpCi0r CQl7Ci0rCQlpbiA9IGZvcGVuKCphcmdzLCAiciIpOwotKwkJaWYgKCFpbikKLSsJCQl7Ci0rCQkJ ZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIGlucHV0IGZpbGVcbiIpOwotKwkJCWV4aXQo MSk7Ci0rCQkJfQotKwkJb3V0ID0gZm9wZW4oYXJnc1sxXSwgInciKTsKLSsJCWlmICghb3V0KQot KwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGVcbiIp OwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJfQotKwllbHNlIGlmIChhcmduID09IDApCi0rCQl7 Ci0rCQlpbiA9IHN0ZGluOwotKwkJb3V0ID0gc3Rkb3V0OwotKwkJfQotKwllbHNlCi0rCQl7Ci0r CQlmcHJpbnRmKHN0ZGVyciwiJXMgW2RodmVyfGRoZ2VufF0gWy1leG91dF0gKGluZmlsZSBvdXRm aWxlKVxuIixhcmd2WzBdKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCi0rCWRoID0gRklQU19kaF9u ZXcoKTsKLSsKLSsJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGluKSAhPSBOVUxMKQot KwkJewotKwkJZnB1dHMoYnVmLCBvdXQpOwotKwkJaWYgKHN0cmxlbihidWYpID4gNiAmJiAhc3Ry bmNtcChidWYsICJbRiIsIDIpKQotKwkJCXsKLSsJCQltZCA9IHBhcnNlX21kKGJ1Zik7Ci0rCQkJ aWYgKG1kID09IE5VTEwpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKGRoKQotKwkJ CQlGSVBTX2RoX2ZyZWUoZGgpOwotKwkJCWRoID0gRklQU19kaF9uZXcoKTsKLSsJCQljb250aW51 ZTsKLSsJCQl9Ci0rCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVm KSkKLSsJCQljb250aW51ZTsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJQIikpCi0rCQkJewot KwkJCWlmICghZG9faGV4MmJuKCZkaC0+cCwgdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlEiKSkKLSsJCQl7Ci0rCQkJ aWYgKCFkb19oZXgyYm4oJmRoLT5xLCB2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiRyIpKQotKwkJCXsKLSsJCQlpZiAo IWRvX2hleDJibigmZGgtPmcsIHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9 Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYZXBoZW1JVVQiKSkKLSsJCQl7Ci0rCQkJ aWYgKCFkb19oZXgyYm4oJmRoLT5wcml2X2tleSwgdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlllcGhlbUlVVCIpKQot KwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmZGgtPnB1Yl9rZXksIHZhbHVlKSkKLSsJCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJZZXBo ZW1DQVZTIikpCi0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZwZWVya2V5LCB2YWx1ZSkpCi0r CQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKGRvX3ZlcmlmeSA9PSAwKQotKwkJCQlvdXRw dXRfWmhhc2gob3V0LCBleG91dCwgZGgsIHBlZXJrZXksIG1kLAotKwkJCQkJCQlOVUxMLCAwKTsK LSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJDQVZTSGFzaFpaIikpCi0rCQkJ ewotKwkJCWlmICghbWQpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJcmhhc2ggPSBoZXgy YmluX20odmFsdWUsICZyaGFzaGxlbik7Ci0rCQkJaWYgKCFyaGFzaCB8fCByaGFzaGxlbiAhPSBN X0VWUF9NRF9zaXplKG1kKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlvdXRwdXRfWmhh c2gob3V0LCBleG91dCwgZGgsIHBlZXJrZXksIG1kLAotKwkJCQkJCQlyaGFzaCwgcmhhc2hsZW4p OwotKwkJCX0KLSsJCX0KLSsJaWYgKGluICYmIGluICE9IHN0ZGluKQotKwkJZmNsb3NlKGluKTsK LSsJaWYgKG91dCAmJiBvdXQgIT0gc3Rkb3V0KQotKwkJZmNsb3NlKG91dCk7Ci0rCXJldHVybiAw OwotKwlwYXJzZV9lcnJvcjoKLSsJZnByaW50ZihzdGRlcnIsICJFcnJvciBQYXJzaW5nIHJlcXVl c3QgZmlsZVxuIik7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19kcmJndnMuYy5maXBzIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19kcmJndnMuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9maXBzL2NhdnMvZmlwc19kcmJndnMuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjUz Nzg1NDYzICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Ry Ymd2cy5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjUzNzg1NDYzICswMjAwCi1AQCAtMCwwICsxLDQx NiBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmd2cy5jICovCi0rLyogV3JpdHRlbiBieSBEciBT dGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICog cHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK LSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0r ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsK LSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25m Lmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsKLStp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMg RFJCRyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsjZWxzZQotKwotKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRl IDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAiZmlwc191dGwu aCIKLSsKLStzdGF0aWMgaW50IGRwYXJzZV9tZChjaGFyICpzdHIpCi0rCXsKLSsJc3dpdGNoKGF0 b2koc3RyICsgNSkpCi0rCQl7Ci0rCQljYXNlIDE6Ci0rCQlyZXR1cm4gTklEX3NoYTE7Ci0rCi0r CQljYXNlIDIyNDoKLSsJCXJldHVybiBOSURfc2hhMjI0OwotKwotKwkJY2FzZSAyNTY6Ci0rCQly ZXR1cm4gTklEX3NoYTI1NjsKLSsKLSsJCWNhc2UgMzg0OgotKwkJcmV0dXJuIE5JRF9zaGEzODQ7 Ci0rCi0rCQljYXNlIDUxMjoKLSsJCXJldHVybiBOSURfc2hhNTEyOwotKwotKwkJfQotKwotKwly ZXR1cm4gTklEX3VuZGVmOwotKwl9Ci0rCi0rc3RhdGljIGludCBwYXJzZV9lYyhjaGFyICpzdHIp Ci0rCXsKLSsJaW50IGN1cnZlX25pZCwgbWRfbmlkOwotKwljaGFyICptZDsKLSsJbWQgPSBzdHJj aHIoc3RyLCAnICcpOwotKwlpZiAoIW1kKQotKwkJcmV0dXJuIE5JRF91bmRlZjsKLSsJaWYgKCFz dHJuY21wKHN0ciwgIltQLTI1NiIsIDYpKQotKwkJY3VydmVfbmlkID0gTklEX1g5XzYyX3ByaW1l MjU2djE7Ci0rCWVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIltQLTM4NCIsIDYpKQotKwkJY3VydmVf bmlkID0gTklEX3NlY3AzODRyMTsKLSsJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiW1AtNTIxIiwg NikpCi0rCQljdXJ2ZV9uaWQgPSBOSURfc2VjcDUyMXIxOwotKwllbHNlCi0rCQlyZXR1cm4gTklE X3VuZGVmOwotKwltZF9uaWQgPSBkcGFyc2VfbWQobWQpOwotKwlpZiAobWRfbmlkID09IE5JRF91 bmRlZikKLSsJCXJldHVybiBOSURfdW5kZWY7Ci0rCXJldHVybiAoY3VydmVfbmlkIDw8IDE2KSB8 IG1kX25pZDsKLSsJfQotKwotK3N0YXRpYyBpbnQgcGFyc2VfYWVzKGNoYXIgKnN0ciwgaW50ICpw ZGYpCi0rCXsKLSsKLSsJaWYgKCFzdHJuY21wKHN0ciArIDksICJubyIsIDIpKQotKwkJKnBkZiA9 IDA7Ci0rCWVsc2UKLSsJCSpwZGYgPSBEUkJHX0ZMQUdfQ1RSX1VTRV9ERjsKLSsKLSsJc3dpdGNo KGF0b2koc3RyICsgNSkpCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCXJldHVybiBOSURfYWVzXzEy OF9jdHI7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCXJldHVybiBOSURfYWVzXzE5Ml9jdHI7Ci0rCi0r CQljYXNlIDI1NjoKLSsJCXJldHVybiBOSURfYWVzXzI1Nl9jdHI7Ci0rCi0rCQlkZWZhdWx0Ogot KwkJcmV0dXJuIE5JRF91bmRlZjsKLSsKLSsJCX0KLSsJfQotKwotK3R5cGVkZWYgc3RydWN0IAot Kwl7Ci0rCXVuc2lnbmVkIGNoYXIgKmVudDsKLSsJc2l6ZV90IGVudGxlbjsKLSsJdW5zaWduZWQg Y2hhciAqbm9uY2U7Ci0rCXNpemVfdCBub25jZWxlbjsKLSsJfSBURVNUX0VOVDsKLSsKLStzdGF0 aWMgc2l6ZV90IHRlc3RfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBv dXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90 IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQotKwl7Ci0rCVRFU1RfRU5UICp0ID0gRklQU19kcmJn X2dldF9hcHBfZGF0YShkY3R4KTsKLSsJKnBvdXQgPSAodW5zaWduZWQgY2hhciAqKXQtPmVudDsK LSsJcmV0dXJuIHQtPmVudGxlbjsKLSsJfQotKwotK3N0YXRpYyBzaXplX3QgdGVzdF9ub25jZShE UkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVu KQotKwl7Ci0rCVRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKLSsJ KnBvdXQgPSAodW5zaWduZWQgY2hhciAqKXQtPm5vbmNlOwotKwlyZXR1cm4gdC0+bm9uY2VsZW47 Ci0rCX0KLSsKLSsjaWZkZWYgRklQU19BTEdWUwotK2ludCBmaXBzX2RyYmd2c19tYWluKGludCBh cmdjLGNoYXIgKiphcmd2KQotKyNlbHNlCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3Yp Ci0rI2VuZGlmCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsJRFJCR19D VFggKmRjdHggPSBOVUxMOwotKwlURVNUX0VOVCB0OwotKwlpbnQgciwgbmlkID0gMDsKLSsJaW50 IHByID0gMDsKLSsJY2hhciBidWZbMjA0OF0sIGxidWZbMjA0OF07Ci0rCXVuc2lnbmVkIGNoYXIg cmFuZG91dFsyMDQ4XTsKLSsJY2hhciAqa2V5d29yZCA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7Ci0r Ci0rCXVuc2lnbmVkIGNoYXIgKmVudCA9IE5VTEwsICpub25jZSA9IE5VTEwsICpwZXJzID0gTlVM TCwgKmFkaW4gPSBOVUxMOwotKwlsb25nIGVudGxlbiwgbm9uY2VsZW4sIHBlcnNsZW4sIGFkaW5s ZW47Ci0rCWludCBkZiA9IDA7Ci0rCi0rCWVudW0gZHR5cGUgeyBEUkJHX05PTkUsIERSQkdfQ1RS LCBEUkJHX0hBU0gsIERSQkdfSE1BQywgRFJCR19EVUFMX0VDIH0KLSsJCWRyYmdfdHlwZSA9IERS QkdfTk9ORTsKLSsKLSsJaW50IHJhbmRvdXRsZW4gPSAwOwotKwotKwlpbnQgZ2VuID0gMDsKLSsK LSsJZmlwc19hbGd0ZXN0X2luaXQoKTsKLSsKLSsJaWYgKGFyZ2MgPT0gMykKLSsJCXsKLSsJCWlu ID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsJCWlmICghaW4pCi0rCQkJewotKwkJCWZwcmludGYo c3RkZXJyLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKLSsJCQlleGl0KDEpOwotKwkJ CX0KLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCQlpZiAoIW91dCkKLSsJCQl7Ci0r CQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsKLSsJCQll eGl0KDEpOwotKwkJCX0KLSsJCX0KLSsJZWxzZSBpZiAoYXJnYyA9PSAxKQotKwkJewotKwkJaW4g PSBzdGRpbjsKLSsJCW91dCA9IHN0ZG91dDsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsIiVzIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7Ci0rCQlleGl0KDEpOwot KwkJfQotKwotKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgaW4pICE9IE5VTEwpCi0r CQl7Ci0rCQlmcHV0cyhidWYsIG91dCk7Ci0rCQlpZiAoZHJiZ190eXBlID09IERSQkdfTk9ORSkK LSsJCQl7Ci0rCQkJaWYgKHN0cnN0cihidWYsICJDVFJfRFJCRyIpKQotKwkJCQlkcmJnX3R5cGUg PSBEUkJHX0NUUjsKLSsJCQllbHNlIGlmIChzdHJzdHIoYnVmLCAiSGFzaF9EUkJHIikpCi0rCQkJ CWRyYmdfdHlwZSA9IERSQkdfSEFTSDsKLSsJCQllbHNlIGlmIChzdHJzdHIoYnVmLCAiSE1BQ19E UkJHIikpCi0rCQkJCWRyYmdfdHlwZSA9IERSQkdfSE1BQzsKLSsJCQllbHNlIGlmIChzdHJzdHIo YnVmLCAiRHVhbF9FQ19EUkJHIikpCi0rCQkJCWRyYmdfdHlwZSA9IERSQkdfRFVBTF9FQzsKLSsJ CQllbHNlCi0rCQkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmIChzdHJsZW4oYnVmKSA+IDQgJiYg IXN0cm5jbXAoYnVmLCAiW1NIQS0iLCA1KSkKLSsJCQl7Ci0rCQkJbmlkID0gZHBhcnNlX21kKGJ1 Zik7Ci0rCQkJaWYgKG5pZCA9PSBOSURfdW5kZWYpCi0rCQkJCWV4aXQoMSk7Ci0rCQkJaWYgKGRy YmdfdHlwZSA9PSBEUkJHX0hNQUMpCi0rCQkJCXsKLSsJCQkJc3dpdGNoIChuaWQpCi0rCQkJCQl7 Ci0rCQkJCQljYXNlIE5JRF9zaGExOgotKwkJCQkJbmlkID0gTklEX2htYWNXaXRoU0hBMTsKLSsJ CQkJCWJyZWFrOwotKwotKwkJCQkJY2FzZSBOSURfc2hhMjI0OgotKwkJCQkJbmlkID0gTklEX2ht YWNXaXRoU0hBMjI0OwotKwkJCQkJYnJlYWs7Ci0rCi0rCQkJCQljYXNlIE5JRF9zaGEyNTY6Ci0r CQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEEyNTY7Ci0rCQkJCQlicmVhazsKLSsKLSsJCQkJCWNh c2UgTklEX3NoYTM4NDoKLSsJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTM4NDsKLSsJCQkJCWJy ZWFrOwotKwotKwkJCQkJY2FzZSBOSURfc2hhNTEyOgotKwkJCQkJbmlkID0gTklEX2htYWNXaXRo U0hBNTEyOwotKwkJCQkJYnJlYWs7Ci0rCi0rCQkJCQlkZWZhdWx0OgotKwkJCQkJZXhpdCgxKTsK LSsJCQkJCX0KLSsJCQkJfQotKwkJCX0KLSsJCWlmIChzdHJsZW4oYnVmKSA+IDEyICYmICFzdHJu Y21wKGJ1ZiwgIltBRVMtIiwgNSkpCi0rCQkJewotKwkJCW5pZCA9IHBhcnNlX2FlcyhidWYsICZk Zik7Ci0rCQkJaWYgKG5pZCA9PSBOSURfdW5kZWYpCi0rCQkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJ aWYgKHN0cmxlbihidWYpID4gMTIgJiYgIXN0cm5jbXAoYnVmLCAiW1AtIiwgMykpCi0rCQkJewot KwkJCW5pZCA9IHBhcnNlX2VjKGJ1Zik7Ci0rCQkJaWYgKG5pZCA9PSBOSURfdW5kZWYpCi0rCQkJ CWV4aXQoMSk7Ci0rCQkJfQotKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxi dWYsIGJ1ZikpCi0rCQkJY29udGludWU7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiW1By ZWRpY3Rpb25SZXNpc3RhbmNlIikpCi0rCQkJewotKwkJCWlmICghc3RyY21wKHZhbHVlLCAiVHJ1 ZV0iKSkKLSsJCQkJcHIgPSAxOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJGYWxzZV0i KSkKLSsJCQkJcHIgPSAwOwotKwkJCWVsc2UKLSsJCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCi0rCQlp ZiAoIXN0cmNtcChrZXl3b3JkLCAiRW50cm9weUlucHV0IikpCi0rCQkJewotKwkJCWVudCA9IGhl eDJiaW5fbSh2YWx1ZSwgJmVudGxlbik7Ci0rCQkJdC5lbnQgPSBlbnQ7Ci0rCQkJdC5lbnRsZW4g PSBlbnRsZW47Ci0rCQkJfQotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIk5vbmNlIikpCi0r CQkJewotKwkJCW5vbmNlID0gaGV4MmJpbl9tKHZhbHVlLCAmbm9uY2VsZW4pOwotKwkJCXQubm9u Y2UgPSBub25jZTsKLSsJCQl0Lm5vbmNlbGVuID0gbm9uY2VsZW47Ci0rCQkJfQotKwotKwkJaWYg KCFzdHJjbXAoa2V5d29yZCwgIlBlcnNvbmFsaXphdGlvblN0cmluZyIpKQotKwkJCXsKLSsJCQlw ZXJzID0gaGV4MmJpbl9tKHZhbHVlLCAmcGVyc2xlbik7Ci0rCQkJaWYgKG5pZCA9PSAwKQotKwkJ CQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiRFJCRyB0eXBlIG5vdCByZWNvZ25pc2VkIVxuIik7 Ci0rCQkJCWV4aXQgKDEpOwotKwkJCQl9Ci0rCQkJZGN0eCA9IEZJUFNfZHJiZ19uZXcobmlkLCBk ZiB8IERSQkdfRkxBR19URVNUKTsKLSsJCQlpZiAoIWRjdHgpCi0rCQkJCWV4aXQgKDEpOwotKwkJ CUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwKLSsJCQkJ CQkJdGVzdF9ub25jZSwgMCk7Ci0rCQkJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7 Ci0rCQkJcmFuZG91dGxlbiA9IChpbnQpRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChkY3R4KTsK LSsJCQlyID0gRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHBlcnMsIHBlcnNsZW4pOwotKwkJ CWlmICghcikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGluc3RhbnRpYXRp bmcgRFJCR1xuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQlPUEVOU1NMX2ZyZWUocGVy cyk7Ci0rCQkJT1BFTlNTTF9mcmVlKGVudCk7Ci0rCQkJT1BFTlNTTF9mcmVlKG5vbmNlKTsKLSsJ CQllbnQgPSBub25jZSA9IHBlcnMgPSBOVUxMOwotKwkJCWdlbiA9IDA7Ci0rCQkJfQotKwotKwkJ aWYgKCFzdHJjbXAoa2V5d29yZCwgIkFkZGl0aW9uYWxJbnB1dCIpKQotKwkJCXsKLSsJCQlhZGlu ID0gaGV4MmJpbl9tKHZhbHVlLCAmYWRpbmxlbik7Ci0rCQkJaWYgKHByKQotKwkJCQljb250aW51 ZTsKLSsJCQlyID0gRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHJhbmRvdXRsZW4s IDAsCi0rCQkJCQkJCQlhZGluLCBhZGlubGVuKTsKLSsJCQlpZiAoIXIpCi0rCQkJCXsKLSsJCQkJ ZnByaW50ZihzdGRlcnIsICJFcnJvciBnZW5lcmF0aW5nIERSQkcgYml0c1xuIik7Ci0rCQkJCWV4 aXQoMSk7Ci0rCQkJCX0KLSsJCQlpZiAoIXIpCi0rCQkJCWV4aXQoMSk7Ci0rCQkJT1BFTlNTTF9m cmVlKGFkaW4pOwotKwkJCWFkaW4gPSBOVUxMOwotKwkJCWdlbisrOwotKwkJCX0KLSsKLSsJCWlm IChwcikKLSsJCQl7Ci0rCQkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkVudHJvcHlJbnB1dFBSIikp Ci0rCQkJCXsKLSsJCQkJZW50ID0gaGV4MmJpbl9tKHZhbHVlLCAmZW50bGVuKTsKLSsJCQkJdC5l bnQgPSBlbnQ7Ci0rCQkJCXQuZW50bGVuID0gZW50bGVuOwotKwkJCQlyID0gRklQU19kcmJnX2dl bmVyYXRlKGRjdHgsCi0rCQkJCQkJCXJhbmRvdXQsIHJhbmRvdXRsZW4sCi0rCQkJCQkJCTEsIGFk aW4sIGFkaW5sZW4pOwotKwkJCQlpZiAoIXIpCi0rCQkJCQl7Ci0rCQkJCQlmcHJpbnRmKHN0ZGVy ciwKLSsJCQkJCQkiRXJyb3IgZ2VuZXJhdGluZyBEUkJHIGJpdHNcbiIpOwotKwkJCQkJZXhpdCgx KTsKLSsJCQkJCX0KLSsJCQkJT1BFTlNTTF9mcmVlKGFkaW4pOwotKwkJCQlPUEVOU1NMX2ZyZWUo ZW50KTsKLSsJCQkJYWRpbiA9IGVudCA9IE5VTEw7Ci0rCQkJCWdlbisrOwotKwkJCQl9Ci0rCQkJ fQotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkVudHJvcHlJbnB1dFJlc2VlZCIpKQotKwkJCXsK LSsJCQllbnQgPSBoZXgyYmluX20odmFsdWUsICZlbnRsZW4pOwotKwkJCXQuZW50ID0gZW50Owot KwkJCXQuZW50bGVuID0gZW50bGVuOwotKwkJCX0KLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJB ZGRpdGlvbmFsSW5wdXRSZXNlZWQiKSkKLSsJCQl7Ci0rCQkJYWRpbiA9IGhleDJiaW5fbSh2YWx1 ZSwgJmFkaW5sZW4pOwotKwkJCUZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxlbik7 Ci0rCQkJT1BFTlNTTF9mcmVlKGVudCk7Ci0rCQkJT1BFTlNTTF9mcmVlKGFkaW4pOwotKwkJCWVu dCA9IGFkaW4gPSBOVUxMOwotKwkJCX0KLSsJCWlmIChnZW4gPT0gMikKLSsJCQl7Ci0rCQkJT3V0 cHV0VmFsdWUoIlJldHVybmVkQml0cyIsIHJhbmRvdXQsIHJhbmRvdXRsZW4sCi0rCQkJCQkJCQkJ b3V0LCAwKTsKLSsJCQlGSVBTX2RyYmdfZnJlZShkY3R4KTsKLSsJCQlkY3R4ID0gTlVMTDsKLSsJ CQlnZW4gPSAwOwotKwkJCX0KLSsKLSsJCX0KLSsJaWYgKGluICYmIGluICE9IHN0ZGluKQotKwkJ ZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiBvdXQgIT0gc3Rkb3V0KQotKwkJZmNsb3NlKG91dCk7 Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9m aXBzL2NhdnMvZmlwc19kc3N2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2Rzc3ZzLmMuZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1NDc4NTQ4NCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jCTIwMTItMDQt MjAgMDk6MDc6MDYuMjU0Nzg1NDg0ICswMjAwCi1AQCAtMCwwICsxLDUzNyBAQAotKyNpbmNsdWRl IDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5j bHVkZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rewot KyAgICBwcmludGYoIk5vIEZJUFMgRFNBIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0r fQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3N0YXRp YyB2b2lkIHBibihjb25zdCBjaGFyICpuYW1lLCBCSUdOVU0gKmJuKQotKwl7Ci0rCWludCBsZW4s IGk7Ci0rCXVuc2lnbmVkIGNoYXIgKnRtcDsKLSsJbGVuID0gQk5fbnVtX2J5dGVzKGJuKTsKLSsJ dG1wID0gT1BFTlNTTF9tYWxsb2MobGVuKTsKLSsJaWYgKCF0bXApCi0rCQl7Ci0rCQlmcHJpbnRm KHN0ZGVyciwgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLSsJCXJldHVybjsKLSsJCX0K LSsJQk5fYm4yYmluKGJuLCB0bXApOwotKwlwcmludGYoIiVzID0gIiwgbmFtZSk7Ci0rCWZvciAo aSA9IDA7IGkgPCBsZW47IGkrKykKLSsJCXByaW50ZigiJTAyWCIsIHRtcFtpXSk7Ci0rCWZwdXRz KCJcbiIsIHN0ZG91dCk7Ci0rCU9QRU5TU0xfZnJlZSh0bXApOwotKwlyZXR1cm47Ci0rCX0KLSsK LSt2b2lkIHByaW1lcygpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNDBdOwotKyAgICBjaGFy IGxidWZbMTAyNDBdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCi0rICAgIHdoaWxl KGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWZwdXRzKGJ1Zixz dGRvdXQpOwotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkK LSsJCWNvbnRpbnVlOwotKwlpZighc3RyY21wKGtleXdvcmQsIlByaW1lIikpCi0rCSAgICB7Ci0r CSAgICBCSUdOVU0gKnBwOwotKwotKwkgICAgcHA9Qk5fbmV3KCk7Ci0rCSAgICBkb19oZXgyYm4o JnBwLHZhbHVlKTsKLSsJICAgIHByaW50ZigicmVzdWx0PSAlY1xuIiwKLSsJCSAgIEJOX2lzX3By aW1lX2V4KHBwLDIwLE5VTEwsTlVMTCkgPyAnUCcgOiAnRicpOwotKwkgICAgfQkgICAgCi0rCX0K LSsgICAgfQotKwotK3ZvaWQgcHFnKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsg ICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGlu dCBubW9kPTA7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBO VUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYp KQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYo IXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiTiIpKQotKwkgICAgewotKwkgICAgaW50IG49YXRvaSh2YWx1 ZSk7Ci0rCi0rCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKLSsKLSsJICAgIHdo aWxlKG4tLSkKLSsJCXsKLSsJCXVuc2lnbmVkIGNoYXIgc2VlZFsyMF07Ci0rCQlEU0EgKmRzYTsK LSsJCWludCBjb3VudGVyOwotKwkJdW5zaWduZWQgbG9uZyBoOwotKwkJZHNhID0gRklQU19kc2Ff bmV3KCk7Ci0rCi0rCQlpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxz ZWVkLDAsJmNvdW50ZXIsJmgsTlVMTCkpCi0rCQkJewotKwkJCWRvX3ByaW50X2Vycm9ycygpOwot KwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJcGJuKCJQIixkc2EtPnApOwotKwkJcGJuKCJRIixkc2Et PnEpOwotKwkJcGJuKCJHIixkc2EtPmcpOwotKwkJcHYoIlNlZWQiLHNlZWQsMjApOwotKwkJcHJp bnRmKCJjID0gJWRcbiIsY291bnRlcik7Ci0rCQlwcmludGYoIkggPSAlbHhcbiIsaCk7Ci0rCQlw dXRjKCdcbicsc3Rkb3V0KTsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZQotKwkgICAgZnB1dHMoYnVm LHN0ZG91dCk7Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgcHFndmVyKCkKLSsgICAgewotKyAgICBj aGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3Jk LCAqdmFsdWU7Ci0rICAgIEJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTCwgKmcgPSBOVUxMOwot KyAgICBpbnQgY291bnRlciwgY291bnRlcjI7Ci0rICAgIHVuc2lnbmVkIGxvbmcgaCwgaDI7Ci0r ICAgIERTQSAqZHNhPU5VTEw7Ci0rICAgIGludCBubW9kPTA7Ci0rICAgIHVuc2lnbmVkIGNoYXIg c2VlZFsxMDI0XTsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9 IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1 ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlm cHV0cyhidWYsIHN0ZG91dCk7Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAg bm1vZD1hdG9pKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKLSsJICAg IHA9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKLSsJICAg IHE9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKLSsJICAg IGc9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlNlZWQiKSkKLSsJ ICAgIHsKLSsJICAgIGludCBzbGVuID0gaGV4MmJpbih2YWx1ZSwgc2VlZCk7Ci0rCSAgICBpZiAo c2xlbiAhPSAyMCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiU2VlZCBwYXJzZSBsZW5ndGgg ZXJyb3JcbiIpOwotKwkJZXhpdCAoMSk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJjIikpCi0rCSAgICBjb3VudGVyID1hdG9pKGJ1Zis0KTsKLSsJZWxzZSBpZigh c3RyY21wKGtleXdvcmQsIkgiKSkKLSsJICAgIHsKLSsJICAgIGggPSBhdG9pKHZhbHVlKTsKLSsJ ICAgIGlmICghcCB8fCAhcSB8fCAhZykKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiUGFyc2Ug RXJyb3JcbiIpOwotKwkJZXhpdCAoMSk7Ci0rCQl9Ci0rCSAgICBkc2EgPSBGSVBTX2RzYV9uZXco KTsKLSsJICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQs MjAgLCZjb3VudGVyMiwmaDIsTlVMTCkpCi0rCQkJewotKwkJCWRvX3ByaW50X2Vycm9ycygpOwot KwkJCWV4aXQoMSk7Ci0rCQkJfQotKyAgICAgICAgICAgIGlmIChCTl9jbXAoZHNhLT5wLCBwKSB8 fCBCTl9jbXAoZHNhLT5xLCBxKSB8fCBCTl9jbXAoZHNhLT5nLCBnKQotKwkJfHwgKGNvdW50ZXIg IT0gY291bnRlcjIpIHx8IChoICE9IGgyKSkKLSsJICAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIp OwotKwkgICAgZWxzZQotKwkgICAgCXByaW50ZigiUmVzdWx0ID0gUFxuIik7Ci0rCSAgICBCTl9m cmVlKHApOwotKwkgICAgQk5fZnJlZShxKTsKLSsJICAgIEJOX2ZyZWUoZyk7Ci0rCSAgICBwID0g TlVMTDsKLSsJICAgIHEgPSBOVUxMOwotKwkgICAgZyA9IE5VTEw7Ci0rCSAgICBGSVBTX2RzYV9m cmVlKGRzYSk7Ci0rCSAgICBkc2EgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLSsv KiBLZXlwYWlyIHZlcmlmaWNhdGlvbiByb3V0aW5lLiBOQjogdGhpcyBpc24ndCBwYXJ0IG9mIHRo ZSBzdGFuZGFyZCBGSVBTMTQwLTIKLSsgKiBhbGdvcml0aG0gdGVzdHMuIEl0IGlzIGFuIGFkZGl0 aW9uYWwgdGVzdCB0byBwZXJmb3JtIHNhbml0eSBjaGVja3Mgb24gdGhlCi0rICogb3V0cHV0IG9m IHRoZSBLZXlQYWlyIHRlc3QuCi0rICovCi0rCi0rc3RhdGljIGludCBkc3NfcGFyYW1jaGVjayhp bnQgbm1vZCwgQklHTlVNICpwLCBCSUdOVU0gKnEsIEJJR05VTSAqZywKLSsJCQkJCQkJQk5fQ1RY ICpjdHgpCi0rICAgIHsKLSsgICAgQklHTlVNICpyZW0gPSBOVUxMOwotKyAgICBpZiAoQk5fbnVt X2JpdHMocCkgIT0gbm1vZCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmIChCTl9udW1fYml0cyhxKSAh PSAxNjApCi0rCXJldHVybiAwOwotKyAgICBpZiAoQk5faXNfcHJpbWVfZXgocCwgQk5fcHJpbWVf Y2hlY2tzLCBjdHgsIE5VTEwpICE9IDEpCi0rCXJldHVybiAwOwotKyAgICBpZiAoQk5faXNfcHJp bWVfZXgocSwgQk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5VTEwpICE9IDEpCi0rCXJldHVybiAwOwot KyAgICByZW0gPSBCTl9uZXcoKTsKLSsgICAgaWYgKCFCTl9tb2QocmVtLCBwLCBxLCBjdHgpIHx8 ICFCTl9pc19vbmUocmVtKQotKyAgICAJfHwgKEJOX2NtcChnLCBCTl92YWx1ZV9vbmUoKSkgPD0g MCkKLSsJfHwgIUJOX21vZF9leHAocmVtLCBnLCBxLCBwLCBjdHgpIHx8ICFCTl9pc19vbmUocmVt KSkKLSsJewotKwlCTl9mcmVlKHJlbSk7Ci0rCXJldHVybiAwOwotKwl9Ci0rICAgIC8qIFRvZG86 IGNoZWNrIGcgKi8KLSsgICAgQk5fZnJlZShyZW0pOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQot KwotK3ZvaWQga2V5dmVyKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hh ciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIEJJR05VTSAq cCA9IE5VTEwsICpxID0gTlVMTCwgKmcgPSBOVUxMLCAqWCA9IE5VTEwsICpZID0gTlVMTDsKLSsg ICAgQklHTlVNICpZMjsKLSsgICAgQk5fQ1RYICpjdHggPSBOVUxMOwotKyAgICBpbnQgbm1vZD0w LCBwYXJhbWNoZWNrID0gMDsKLSsKLSsgICAgY3R4ID0gQk5fQ1RYX25ldygpOwotKyAgICBZMiA9 IEJOX25ldygpOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0g TlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVm KSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlm KCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgewotKwkgICAgaWYgKHApCi0rCQlCTl9m cmVlKHApOwotKwkgICAgcCA9IE5VTEw7Ci0rCSAgICBpZiAocSkKLSsJCUJOX2ZyZWUocSk7Ci0r CSAgICBxID0gTlVMTDsKLSsJICAgIGlmIChnKQotKwkJQk5fZnJlZShnKTsKLSsJICAgIGcgPSBO VUxMOwotKwkgICAgcGFyYW1jaGVjayA9IDA7Ci0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwkg ICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQotKwkgICAgcD1oZXgyYm4odmFs dWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQotKwkgICAgcT1oZXgyYm4odmFs dWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQotKwkgICAgZz1oZXgyYm4odmFs dWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWCIpKQotKwkgICAgWD1oZXgyYm4odmFs dWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWSIpKQotKwkgICAgewotKwkgICAgWT1o ZXgyYm4odmFsdWUpOwotKwkgICAgaWYgKCFwIHx8ICFxIHx8ICFnIHx8ICFYIHx8ICFZKQotKwkJ ewotKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxuIik7Ci0rCQlleGl0ICgxKTsKLSsJ CX0KLSsJICAgIHBibigiUCIscCk7Ci0rCSAgICBwYm4oIlEiLHEpOwotKwkgICAgcGJuKCJHIixn KTsKLSsJICAgIHBibigiWCIsWCk7Ci0rCSAgICBwYm4oIlkiLFkpOwotKwkgICAgaWYgKCFwYXJh bWNoZWNrKQotKwkJewotKwkJaWYgKGRzc19wYXJhbWNoZWNrKG5tb2QsIHAsIHEsIGcsIGN0eCkp Ci0rCQkJcGFyYW1jaGVjayA9IDE7Ci0rCQllbHNlCi0rCQkJcGFyYW1jaGVjayA9IC0xOwotKwkJ fQotKwkgICAgaWYgKHBhcmFtY2hlY2sgIT0gMSkKLSsJICAgCXByaW50ZigiUmVzdWx0ID0gRlxu Iik7Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpZiAoIUJOX21vZF9leHAoWTIsIGcsIFgsIHAsIGN0 eCkgfHwgQk5fY21wKFkyLCBZKSkKLSsJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKLSsJ ICAgICAgICBlbHNlCi0rCSAgICAJCXByaW50ZigiUmVzdWx0ID0gUFxuIik7Ci0rCQl9Ci0rCSAg ICBCTl9mcmVlKFgpOwotKwkgICAgQk5fZnJlZShZKTsKLSsJICAgIFggPSBOVUxMOwotKwkgICAg WSA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsJaWYgKHApCi0rCSAgICBCTl9mcmVlKHApOwotKwlp ZiAocSkKLSsJICAgIEJOX2ZyZWUocSk7Ci0rCWlmIChnKQotKwkgICAgQk5fZnJlZShnKTsKLSsJ aWYgKFkyKQotKwkgICAgQk5fZnJlZShZMik7Ci0rICAgIH0KLSsKLSt2b2lkIGtleXBhaXIoKQot KyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAg IGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50IG5tb2Q9MDsKLSsKLSsgICAgd2hpbGUo ZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9s aW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rk b3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkK LSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJOIikp Ci0rCSAgICB7Ci0rCSAgICBEU0EgKmRzYTsKLSsJICAgIGludCBuPWF0b2kodmFsdWUpOwotKwot KwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7Ci0rCSAgICBkc2EgPSBGSVBTX2Rz YV9uZXcoKTsKLSsJICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9k LE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJ CWV4aXQoMSk7Ci0rCQl9Ci0rCSAgICBwYm4oIlAiLGRzYS0+cCk7Ci0rCSAgICBwYm4oIlEiLGRz YS0+cSk7Ci0rCSAgICBwYm4oIkciLGRzYS0+Zyk7Ci0rCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsK LSsKLSsJICAgIHdoaWxlKG4tLSkKLSsJCXsKLSsJCWlmICghRFNBX2dlbmVyYXRlX2tleShkc2Ep KQotKwkJCXsKLSsJCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsK LSsJCXBibigiWCIsZHNhLT5wcml2X2tleSk7Ci0rCQlwYm4oIlkiLGRzYS0+cHViX2tleSk7Ci0r CQlwdXRjKCdcbicsc3Rkb3V0KTsKLSsJCX0KLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0rdm9p ZCBzaWdnZW4oKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZb MTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50IG5tb2Q9MDsKLSsg ICAgRFNBICpkc2E9TlVMTDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3Rk aW4pICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxi dWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJ fQotKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIHsKLSsJICAgIG5tb2Q9YXRv aSh2YWx1ZSk7Ci0rCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKLSsJICAgIGlm IChkc2EpCi0rCQlGSVBTX2RzYV9mcmVlKGRzYSk7Ci0rCSAgICBkc2EgPSBGSVBTX2RzYV9uZXco KTsKLSsJICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLE5VTEws MCxOVUxMLE5VTEwsTlVMTCkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWV4aXQo MSk7Ci0rCQl9Ci0rCSAgICBwYm4oIlAiLGRzYS0+cCk7Ci0rCSAgICBwYm4oIlEiLGRzYS0+cSk7 Ci0rCSAgICBwYm4oIkciLGRzYS0+Zyk7Ci0rCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsJICAg IH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk1zZyIpKQotKwkgICAgewotKwkgICAgdW5z aWduZWQgY2hhciBtc2dbMTAyNF07Ci0rCSAgICB1bnNpZ25lZCBjaGFyIHNidWZbNjBdOwotKwkg ICAgdW5zaWduZWQgaW50IHNsZW47Ci0rCSAgICBpbnQgbjsKLSsJICAgIEVWUF9QS0VZIHBrOwot KwkgICAgRVZQX01EX0NUWCBtY3R4OwotKwkgICAgRFNBX1NJRyAqc2lnOwotKwkgICAgRVZQX01E X0NUWF9pbml0KCZtY3R4KTsKLSsKLSsJICAgIG49aGV4MmJpbih2YWx1ZSxtc2cpOwotKwkgICAg cHYoIk1zZyIsbXNnLG4pOwotKwotKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCi0r CQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCSAgICBway50 eXBlID0gRVZQX1BLRVlfRFNBOwotKwkgICAgcGsucGtleS5kc2EgPSBkc2E7Ci0rCSAgICBwYm4o IlkiLGRzYS0+cHViX2tleSk7Ci0rCi0rCSAgICBFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9k c3MxKCksIE5VTEwpOwotKwkgICAgRVZQX1NpZ25VcGRhdGUoJm1jdHgsIG1zZywgbik7Ci0rCSAg ICBFVlBfU2lnbkZpbmFsKCZtY3R4LCBzYnVmLCAmc2xlbiwgJnBrKTsKLSsKLSsJICAgIHNpZyA9 IERTQV9TSUdfbmV3KCk7Ci0rCSAgICBGSVBTX2RzYV9zaWdfZGVjb2RlKHNpZywgc2J1Ziwgc2xl bik7Ci0rCi0rCSAgICBwYm4oIlIiLHNpZy0+cik7Ci0rCSAgICBwYm4oIlMiLHNpZy0+cyk7Ci0r CSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsJICAgIERTQV9TSUdfZnJlZShzaWcpOwotKwkgICAg RVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsJICAgIH0KLSsJfQotKwlpZiAoZHNhKQotKwkJ RklQU19kc2FfZnJlZShkc2EpOwotKyAgICB9Ci0rCi0rdm9pZCBzaWd2ZXIoKQotKyAgICB7Ci0r ICAgIERTQSAqZHNhPU5VTEw7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZb MTAyNF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgbXNnWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3Jk LCAqdmFsdWU7Ci0rICAgIGludCBubW9kPTAsIG49MDsKLSsgICAgRFNBX1NJRyBzZywgKnNpZyA9 ICZzZzsKLSsKLSsgICAgc2lnLT5yID0gTlVMTDsKLSsgICAgc2lnLT5zID0gTlVMTDsKLSsKLSsg ICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJaWYg KCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0 cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3RyY21wKGtleXdvcmQs Ilttb2QiKSkKLSsJICAgIHsKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCSAgICBpZihkc2Ep Ci0rCQlGSVBTX2RzYV9mcmVlKGRzYSk7Ci0rCSAgICBkc2E9RklQU19kc2FfbmV3KCk7Ci0rCSAg ICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCi0rCSAgICBkc2EtPnA9aGV4MmJu KHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKLSsJICAgIGRzYS0+cT1o ZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQotKwkgICAgewot KwkgICAgZHNhLT5nPWhleDJibih2YWx1ZSk7Ci0rCi0rCSAgICBwcmludGYoIlttb2QgPSAlZF1c blxuIixubW9kKTsKLSsJICAgIHBibigiUCIsZHNhLT5wKTsKLSsJICAgIHBibigiUSIsZHNhLT5x KTsKLSsJICAgIHBibigiRyIsZHNhLT5nKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwkg ICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCi0rCSAgICB7Ci0rCSAgICBu PWhleDJiaW4odmFsdWUsbXNnKTsKLSsJICAgIHB2KCJNc2ciLG1zZyxuKTsKLSsJICAgIH0KLSsJ ZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlkiKSkKLSsJICAgIGRzYS0+cHViX2tleT1oZXgyYm4o dmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUiIpKQotKwkgICAgc2lnLT5yPWhl eDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTIikpCi0rCSAgICB7Ci0r CSAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rCSAgICBFVlBfUEtFWSBwazsKLSsJICAgIHVuc2lnbmVk IGNoYXIgc2lnYnVmWzYwXTsKLSsJICAgIHVuc2lnbmVkIGludCBzbGVuOwotKwkgICAgaW50IHI7 Ci0rCSAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKwkgICAgcGsudHlwZSA9IEVWUF9QS0VZ X0RTQTsKLSsJICAgIHBrLnBrZXkuZHNhID0gZHNhOwotKwkgICAgc2lnLT5zPWhleDJibih2YWx1 ZSk7Ci0rCQotKwkgICAgcGJuKCJZIixkc2EtPnB1Yl9rZXkpOwotKwkgICAgcGJuKCJSIixzaWct PnIpOwotKwkgICAgcGJuKCJTIixzaWctPnMpOwotKwotKwkgICAgc2xlbiA9IEZJUFNfZHNhX3Np Z19lbmNvZGUoc2lnYnVmLCBzaWcpOwotKwkgICAgRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVW UF9kc3MxKCksIE5VTEwpOwotKwkgICAgRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsK LSsJICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNpZ2J1Ziwgc2xlbiwgJnBrKTsKLSsJ ICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rCQotKwkgICAgcHJpbnRmKCJSZXN1bHQg PSAlY1xuIiwgciA9PSAxID8gJ1AnIDogJ0YnKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwot KwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikK LSsgICAgewotKyAgICBpZihhcmdjICE9IDIpCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsIiVzIFtw cmltZXxwcWd8cHFndmVyfGtleXBhaXJ8c2lnZ2VufHNpZ3Zlcl1cbiIsYXJndlswXSk7Ci0rCWV4 aXQoMSk7Ci0rCX0KLSsgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRf ZXJyb3JzKCk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJwcmlt ZSIpKQotKwlwcmltZXMoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInBxZyIpKQot KwlwcWcoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInBxZ3ZlciIpKQotKwlwcWd2 ZXIoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXBhaXIiKSkKLSsJa2V5cGFp cigpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5dmVyIikpCi0rCWtleXZlcigp OwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwic2lnZ2VuIikpCi0rCXNpZ2dlbigpOwot KyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwic2lndmVyIikpCi0rCXNpZ3ZlcigpOwotKyAg ICBlbHNlCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixh cmd2WzFdKTsKLSsJZXhpdCgxKTsKLSsJfQotKwotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKwot KyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2dj bXRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0 LmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVzdC5jLmZp cHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTQ3ODU0ODQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVzdC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjU0 Nzg1NDg0ICswMjAwCi1AQCAtMCwwICsxLDU3MSBAQAotKy8qIGZpcHMvYWVzL2ZpcHNfZ2NtdGVz dC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3Ns Lm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBt ZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9w ZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAg ICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0r ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKyNp bmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMK LSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp Ci0rewotKyAgICBwcmludGYoIk5vIEZJUFMgR0NNIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4o MCk7Ci0rfQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwot K3N0YXRpYyB2b2lkIGdjbXRlc3QoRklMRSAqaW4sIEZJTEUgKm91dCwgaW50IGVuY3J5cHQpCi0r CXsKLSsJY2hhciBidWZbMjA0OF07Ci0rCWNoYXIgbGJ1ZlsyMDQ4XTsKLSsJY2hhciAqa2V5d29y ZCwgKnZhbHVlOwotKwlpbnQga2V5bGVuID0gLTEsIGl2bGVuID0gLTEsIGFhZGxlbiA9IC0xLCB0 YWdsZW4gPSAtMSwgcHRsZW4gPSAtMTsKLSsJaW50IHJ2OwotKwlsb25nIGw7Ci0rCXVuc2lnbmVk IGNoYXIgKmtleSA9IE5VTEwsICppdiA9IE5VTEwsICphYWQgPSBOVUxMLCAqdGFnID0gTlVMTDsK LSsJdW5zaWduZWQgY2hhciAqY3QgPSBOVUxMLCAqcHQgPSBOVUxMOwotKwlFVlBfQ0lQSEVSX0NU WCBjdHg7Ci0rCWNvbnN0IEVWUF9DSVBIRVIgKmdjbSA9IE5VTEw7Ci0rCUZJUFNfY2lwaGVyX2N0 eF9pbml0KCZjdHgpOwotKwotKwl3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixpbikgIT0gTlVM TCkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixvdXQpOwotKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3Jk LCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQkJY29udGludWU7Ci0rCQlpZighc3RyY21wKGtleXdv cmQsIltLZXlsZW4iKSkKLSsJCQl7Ci0rCQkJa2V5bGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYg KGtleWxlbiA9PSAxMjgpCi0rCQkJCWdjbSA9IEVWUF9hZXNfMTI4X2djbSgpOwotKwkJCWVsc2Ug aWYgKGtleWxlbiA9PSAxOTIpCi0rCQkJCWdjbSA9IEVWUF9hZXNfMTkyX2djbSgpOwotKwkJCWVs c2UgaWYgKGtleWxlbiA9PSAyNTYpCi0rCQkJCWdjbSA9IEVWUF9hZXNfMjU2X2djbSgpOwotKwkJ CWVsc2UgCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJVbnN1cHBvcnRlZCBrZXlsZW4g JWRcbiIsCi0rCQkJCQkJCWtleWxlbik7Ci0rCQkJCX0KLSsJCQlrZXlsZW4gPj49IDM7Ci0rCQkJ fQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiW0lWbGVuIikpCi0rCQkJaXZsZW4gPSBh dG9pKHZhbHVlKSA+PiAzOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiW0FBRGxlbiIp KQotKwkJCWFhZGxlbiA9IGF0b2kodmFsdWUpID4+IDM7Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJbVGFnbGVuIikpCi0rCQkJdGFnbGVuID0gYXRvaSh2YWx1ZSkgPj4gMzsKLSsJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltQVGxlbiIpKQotKwkJCXB0bGVuID0gYXRvaSh2YWx1 ZSkgPj4gMzsKLSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKLSsJCQl7Ci0rCQkJ a2V5ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0ga2V5bGVuKQotKwkJCQl7 Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEtleSBsZW5ndGhcbiIpOwotKwkJ CQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIklW IikpCi0rCQkJewotKwkJCWl2ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0g aXZsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgSVYgbGVu Z3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJQVCIpKQotKwkJCXsKLSsJCQlwdCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwot KwkJCWlmIChsICE9IHB0bGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25z aXN0ZW50IFBUIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiQ1QiKSkKLSsJCQl7Ci0rCQkJY3QgPSBoZXgyYmluX20o dmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSBwdGxlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0 ZGVyciwgIkluY29uc2lzdGVudCBDVCBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9 Ci0rCQkJfQotKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkFBRCIpKQotKwkJCXsKLSsJCQlh YWQgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSBhYWRsZW4pCi0rCQkJCXsK LSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgQUFEIGxlbmd0aFxuIik7Ci0rCQkJ CWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiVGFn IikpCi0rCQkJewotKwkJCXRhZyA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsICE9 IHRhZ2xlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBUYWcg bGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWlmIChlbmNyeXB0 ICYmIHB0ICYmIGFhZCAmJiAoaXYgfHwgZW5jcnlwdD09MSkpCi0rCQkJewotKwkJCXRhZyA9IE9Q RU5TU0xfbWFsbG9jKHRhZ2xlbik7Ci0rCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIGdjbSwgTlVM TCwgTlVMTCwgMSk7Ci0rCQkJLyogUmVsYXggRklQUyBjb25zdHJhaW50cyBmb3IgdGVzdGluZyAq LwotKwkJCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9DSVBIX0ZMQUdfTk9O X0ZJUFNfQUxMT1cpOwotKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dD TV9TRVRfSVZMRU4sIGl2bGVuLCAwKTsKLSsJCQlpZiAoZW5jcnlwdCA9PSAxKQotKwkJCQl7Ci0r CQkJCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGl2X2ZpeGVkWzRdID0gezEsMiwzLDR9OwotKwkJCQlp ZiAoIWl2KQotKwkJCQkJaXYgPSBPUEVOU1NMX21hbGxvYyhpdmxlbik7Ci0rCQkJCUZJUFNfY2lw aGVyaW5pdCgmY3R4LCBOVUxMLCBrZXksIE5VTEwsIDEpOwotKwkJCQlGSVBTX2NpcGhlcl9jdHhf Y3RybCgmY3R4LAotKwkJCQkJCUVWUF9DVFJMX0dDTV9TRVRfSVZfRklYRUQsCi0rCQkJCQkJNCwg aXZfZml4ZWQpOwotKwkJCQlpZiAoIUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsCi0rCQkJCQlF VlBfQ1RSTF9HQ01fSVZfR0VOLCAwLCBpdikpCi0rCQkJCQl7Ci0rCQkJCQlmcHJpbnRmKHN0ZGVy ciwgIklWIGdlbiBlcnJvclxuIik7Ci0rCQkJCQlleGl0KDEpOwotKwkJCQkJfQotKwkJCQlPdXRw dXRWYWx1ZSgiSVYiLCBpdiwgaXZsZW4sIG91dCwgMCk7Ci0rCQkJCX0KLSsJCQllbHNlCi0rCQkJ CUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBrZXksIGl2LCAxKTsKLSsKLSsKLSsJCQlpZiAo YWFkbGVuKQotKwkJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBhYWQsIGFhZGxlbik7Ci0rCQkJ aWYgKHB0bGVuKQotKwkJCQl7Ci0rCQkJCWN0ID0gT1BFTlNTTF9tYWxsb2MocHRsZW4pOwotKwkJ CQlydiA9IEZJUFNfY2lwaGVyKCZjdHgsIGN0LCBwdCwgcHRsZW4pOwotKwkJCQl9Ci0rCQkJRklQ U19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCk7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwo JmN0eCwgRVZQX0NUUkxfR0NNX0dFVF9UQUcsCi0rCQkJCQkJCQl0YWdsZW4sIHRhZyk7CQotKwkJ CU91dHB1dFZhbHVlKCJDVCIsIGN0LCBwdGxlbiwgb3V0LCAwKTsKLSsJCQlPdXRwdXRWYWx1ZSgi VGFnIiwgdGFnLCB0YWdsZW4sIG91dCwgMCk7Ci0rCQkJaWYgKGl2KQotKwkJCQlPUEVOU1NMX2Zy ZWUoaXYpOwotKwkJCWlmIChhYWQpCi0rCQkJCU9QRU5TU0xfZnJlZShhYWQpOwotKwkJCWlmIChj dCkKLSsJCQkJT1BFTlNTTF9mcmVlKGN0KTsKLSsJCQlpZiAocHQpCi0rCQkJCU9QRU5TU0xfZnJl ZShwdCk7Ci0rCQkJaWYgKGtleSkKLSsJCQkJT1BFTlNTTF9mcmVlKGtleSk7Ci0rCQkJaWYgKHRh ZykKLSsJCQkJT1BFTlNTTF9mcmVlKHRhZyk7Ci0rCQkJaXYgPSBhYWQgPSBjdCA9IHB0ID0ga2V5 ID0gdGFnID0gTlVMTDsKLSsJCQl9CQotKwkJaWYgKCFlbmNyeXB0ICYmIHRhZykKLSsJCQl7Ci0r CQkJRklQU19jaXBoZXJpbml0KCZjdHgsIGdjbSwgTlVMTCwgTlVMTCwgMCk7Ci0rCQkJLyogUmVs YXggRklQUyBjb25zdHJhaW50cyBmb3IgdGVzdGluZyAqLwotKwkJCU1fRVZQX0NJUEhFUl9DVFhf c2V0X2ZsYWdzKCZjdHgsIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotKwkJCUZJUFNf Y2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4sIGl2bGVuLCAwKTsK LSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwga2V5LCBpdiwgMCk7Ci0rCQkJRklQU19j aXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9UQUcsIHRhZ2xlbiwgdGFnKTsK LSsJCQlpZiAoYWFkbGVuKQotKwkJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBhYWQsIGFhZGxl bik7Ci0rCQkJaWYgKHB0bGVuKQotKwkJCQl7Ci0rCQkJCXB0ID0gT1BFTlNTTF9tYWxsb2MocHRs ZW4pOwotKwkJCQlydiA9IEZJUFNfY2lwaGVyKCZjdHgsIHB0LCBjdCwgcHRsZW4pOwotKwkJCQl9 Ci0rCQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKTsKLSsJCQlpZiAocnYg PCAwKQotKwkJCQlmcHJpbnRmKG91dCwgIkZBSUwiIFJFU1BfRU9MKTsKLSsJCQllbHNlCi0rCQkJ CU91dHB1dFZhbHVlKCJQVCIsIHB0LCBwdGxlbiwgb3V0LCAwKTsKLSsJCQlpZiAoaXYpCi0rCQkJ CU9QRU5TU0xfZnJlZShpdik7Ci0rCQkJaWYgKGFhZCkKLSsJCQkJT1BFTlNTTF9mcmVlKGFhZCk7 Ci0rCQkJaWYgKGN0KQotKwkJCQlPUEVOU1NMX2ZyZWUoY3QpOwotKwkJCWlmIChwdCkKLSsJCQkJ T1BFTlNTTF9mcmVlKHB0KTsKLSsJCQlpZiAoa2V5KQotKwkJCQlPUEVOU1NMX2ZyZWUoa2V5KTsK LSsJCQlpZiAodGFnKQotKwkJCQlPUEVOU1NMX2ZyZWUodGFnKTsKLSsJCQlpdiA9IGFhZCA9IGN0 ID0gcHQgPSBrZXkgPSB0YWcgPSBOVUxMOwotKwkJCX0KLSsJCX0KLSsJRklQU19jaXBoZXJfY3R4 X2NsZWFudXAoJmN0eCk7CQotKwl9Ci0rCi0rc3RhdGljIHZvaWQgeHRzdGVzdChGSUxFICppbiwg RklMRSAqb3V0KQotKwl7Ci0rCWNoYXIgYnVmWzIwNDgwMF07Ci0rCWNoYXIgbGJ1ZlsyMDQ4MDBd OwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCWludCBpbmxlbiA9IDA7Ci0rCWludCBlbmNy eXB0ID0gMDsKLSsJbG9uZyBsOwotKwl1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMLCAqaXYgPSBO VUxMOwotKwl1bnNpZ25lZCBjaGFyICppbmJ1ZiA9IE5VTEwsICpvdXRidWYgPSBOVUxMOwotKwlF VlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCWNvbnN0IEVWUF9DSVBIRVIgKnh0cyA9IE5VTEw7Ci0rCUZJ UFNfY2lwaGVyX2N0eF9pbml0KCZjdHgpOwotKwotKwl3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1 ZixpbikgIT0gTlVMTCkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixvdXQpOwotKwkJaWYgKGJ1ZlswXSA9 PSAnWycgJiYgc3RybGVuKGJ1ZikgPj0gOSkKLSsJCQl7Ci0rCQkJaWYoIXN0cm5jbXAoYnVmLCJb RU5DUllQVF0iLCA5KSkKLSsJCQkJZW5jcnlwdCA9IDE7Ci0rCQkJZWxzZSBpZighc3RybmNtcChi dWYsIltERUNSWVBUXSIsIDkpKQotKwkJCQllbmNyeXB0ID0gMDsKLSsJCQl9Ci0rCQlpZiAgKCFw YXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQkJY29udGludWU7Ci0r CQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCQkJewotKwkJCWtleSA9IGhleDJi aW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsID09IDMyKQotKwkJCQl4dHMgPSBFVlBfYWVzXzEy OF94dHMoKTsKLSsJCQllbHNlIGlmIChsID09IDY0KQotKwkJCQl4dHMgPSBFVlBfYWVzXzI1Nl94 dHMoKTsKLSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3Rl bnQgS2V5IGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiaSIpKQotKwkJCXsKLSsJCQlpdiA9IGhleDJiaW5fbSh2YWx1 ZSwgJmwpOwotKwkJCWlmIChsICE9IDE2KQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAi SW5jb25zaXN0ZW50IGkgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0K LSsJCWVsc2UgaWYoZW5jcnlwdCAmJiAhc3RyY21wKGtleXdvcmQsIlBUIikpCi0rCQkJewotKwkJ CWluYnVmID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaW5sZW4gPSBsOwotKwkJCX0KLSsJ CWVsc2UgaWYoIWVuY3J5cHQgJiYgIXN0cmNtcChrZXl3b3JkLCJDVCIpKQotKwkJCXsKLSsJCQlp bmJ1ZiA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlubGVuID0gbDsKLSsJCQl9Ci0rCQlp ZiAoaW5idWYpCi0rCQkJewotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCB4dHMsIGtleSwgaXYs IGVuY3J5cHQpOwotKwkJCW91dGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKGlubGVuKTsKLSsJCQlGSVBT X2NpcGhlcigmY3R4LCBvdXRidWYsIGluYnVmLCBpbmxlbik7Ci0rCQkJT3V0cHV0VmFsdWUoZW5j cnlwdCA/ICJDVCI6IlBUIiwgb3V0YnVmLCBpbmxlbiwgb3V0LCAwKTsKLSsJCQlPUEVOU1NMX2Zy ZWUoaW5idWYpOwotKwkJCU9QRU5TU0xfZnJlZShvdXRidWYpOwotKwkJCU9QRU5TU0xfZnJlZShr ZXkpOwotKwkJCU9QRU5TU0xfZnJlZShpdik7Ci0rCQkJaXYgPSBrZXkgPSBpbmJ1ZiA9IG91dGJ1 ZiA9IE5VTEw7Ci0rCQkJfQkKLSsJCX0KLSsJRklQU19jaXBoZXJfY3R4X2NsZWFudXAoJmN0eCk7 CQotKwl9Ci0rCi0rc3RhdGljIHZvaWQgY2NtdGVzdChGSUxFICppbiwgRklMRSAqb3V0KQotKwl7 Ci0rCWNoYXIgYnVmWzIwMDA0OF07Ci0rCWNoYXIgbGJ1ZlsyMDAwNDhdOwotKwljaGFyICprZXl3 b3JkLCAqdmFsdWU7Ci0rCWxvbmcgbDsKLSsJdW5zaWduZWQgY2hhciAqS2V5ID0gTlVMTCwgKk5v bmNlID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqQWRhdGEgPSBOVUxMLCAqUGF5bG9hZCA9IE5V TEw7Ci0rCXVuc2lnbmVkIGNoYXIgKkNUID0gTlVMTDsKLSsJaW50IFBsZW4gPSAtMSwgTmxlbiA9 IC0xLCBUbGVuID0gLTEsIEFsZW4gPSAtMTsKLSsJaW50IGRlY3IgPSAwOwotKwlFVlBfQ0lQSEVS X0NUWCBjdHg7Ci0rCWNvbnN0IEVWUF9DSVBIRVIgKmNjbSA9IE5VTEw7Ci0rCUZJUFNfY2lwaGVy X2N0eF9pbml0KCZjdHgpOwotKwotKwl3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixpbikgIT0g TlVMTCkKLSsJCXsKLSsJCWNoYXIgKnA7Ci0rCQlmcHV0cyhidWYsb3V0KTsKLSsJCXJlZG86Ci0r CQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCQljb250 aW51ZTsKLSsKLSsJCS8qIElmIHN1cnJvdW5kZWQgYnkgc3F1YXJlIGJyYWNrZXRzIHphcCB0aGVt ICovCi0rCQlpZiAoa2V5d29yZFswXSA9PSAnWycpCi0rCQkJewotKwkJCWtleXdvcmQrKzsKLSsJ CQlwID0gc3RyY2hyKHZhbHVlLCAnXScpOwotKwkJCWlmIChwKQotKwkJCQkqcCA9IDA7Ci0rCQkJ fQotKwkJLyogU2VlIGlmIHdlIGhhdmUgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwYXJhbWV0 ZXJzCi0rCQkgKiBpZiBzbyBjb3B5IHJlc3Qgb2YgbGluZSBiYWNrIHRvIGJ1ZmZlciBhbmQgcmVk byBsYXRlci4KLSsJCSAqLwotKwkJcCA9IHN0cmNocih2YWx1ZSwgJywnKTsKLSsJCWlmIChwKQot KwkJCXsKLSsJCQkqcCA9IDA7Ci0rCQkJc3RyY3B5KGJ1ZiwgcCArIDEpOwotKwkJCXN0cmNhdChi dWYsICJcbiIpOwotKwkJCWRlY3IgPSAxOwotKwkJCX0KLSsJCWlmICghc3RyY21wKGtleXdvcmQs IlBsZW4iKSkKLSsJCQlQbGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsIk5sZW4iKSkKLSsJCQlObGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsIlRsZW4iKSkKLSsJCQlUbGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsIkFsZW4iKSkKLSsJCQlBbGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQlp ZiAocCkKLSsJCQlnb3RvIHJlZG87Ci0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKLSsJ CQl7Ci0rCQkJaWYgKEtleSkKLSsJCQkJT1BFTlNTTF9mcmVlKEtleSk7Ci0rCQkJS2V5ID0gaGV4 MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgPT0gMTYpCi0rCQkJCWNjbSA9IEVWUF9hZXNf MTI4X2NjbSgpOwotKwkJCWVsc2UgaWYgKGwgPT0gMjQpCi0rCQkJCWNjbSA9IEVWUF9hZXNfMTky X2NjbSgpOwotKwkJCWVsc2UgaWYgKGwgPT0gMzIpCi0rCQkJCWNjbSA9IEVWUF9hZXNfMjU2X2Nj bSgpOwotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVu dCBLZXkgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwiTm9uY2UiKSkKLSsJCQl7Ci0rCQkJaWYgKE5vbmNlKQotKwkJ CQlPUEVOU1NMX2ZyZWUoTm9uY2UpOwotKwkJCU5vbmNlID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7 Ci0rCQkJaWYgKGwgIT0gTmxlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29u c2lzdGVudCBub25jZSBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQot KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJQYXlsb2FkIikgJiYgIWRlY3IpCi0rCQkJewot KwkJCVBheWxvYWQgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAoUGxlbiAmJiBsICE9 IFBsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgUGF5bG9h ZCBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCJBZGF0YSIpKQotKwkJCXsKLSsJCQlpZiAoQWRhdGEpCi0rCQkJCU9Q RU5TU0xfZnJlZShBZGF0YSk7Ci0rCQkJQWRhdGEgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJ CQlpZiAoQWxlbiAmJiBsICE9IEFsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJ bmNvbnNpc3RlbnQgUGF5bG9hZCBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJDVCIpICYmIGRlY3IpCi0rCQkJewot KwkJCUNUID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0gKFBsZW4gKyBUbGVu KSkKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBDVCBsZW5ndGhc biIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJaWYgKFBheWxvYWQpCi0rCQkJ ewotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBjY20sIE5VTEwsIE5VTEwsIDEpOwotKwkJCUZJ UFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZMRU4sIE5sZW4sIDAp OwotKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfVEFHLCBU bGVuLCAwKTsKLSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwgS2V5LCBOb25jZSwgMSk7 Ci0rCi0rCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgUGxlbik7Ci0rCQkJRklQU19j aXBoZXIoJmN0eCwgTlVMTCwgQWRhdGEsIEFsZW4pOwotKwkJCUNUID0gT1BFTlNTTF9tYWxsb2Mo UGxlbiArIFRsZW4pOwotKwkJCUZJUFNfY2lwaGVyKCZjdHgsIENULCBQYXlsb2FkLCBQbGVuKTsK LSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fR0VUX1RBRywgVGxl biwKLSsJCQkJCQlDVCArIFBsZW4pOwotKwkJCU91dHB1dFZhbHVlKCJDVCIsIENULCBQbGVuICsg VGxlbiwgb3V0LCAwKTsKLSsJCQlPUEVOU1NMX2ZyZWUoQ1QpOwotKwkJCU9QRU5TU0xfZnJlZShQ YXlsb2FkKTsKLSsJCQlDVCA9IFBheWxvYWQgPSBOVUxMOwotKwkJCX0KLSsJCWlmIChDVCkKLSsJ CQl7Ci0rCQkJaW50IHJ2OwotKwkJCWludCBsZW4gPSBQbGVuID09IDAgPyAxOiBQbGVuOwotKwkJ CUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBjY20sIE5VTEwsIE5VTEwsIDApOwotKwkJCUZJUFNfY2lw aGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZMRU4sIE5sZW4sIDApOwotKwkJ CUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfVEFHLAotKwkJCQkJ CVRsZW4sIENUICsgUGxlbik7Ci0rCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIEtleSwg Tm9uY2UsIDApOwotKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIFBsZW4pOwotKwkJ CUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIEFkYXRhLCBBbGVuKTsKLSsJCQlQYXlsb2FkID0gT1BF TlNTTF9tYWxsb2MobGVuKTsKLSsJCQlydiA9IEZJUFNfY2lwaGVyKCZjdHgsIFBheWxvYWQsIENU LCBQbGVuKTsKLSsJCQlpZiAocnYgPj0gMCkKLSsJCQkJewotKwkJCQlpZiAocnYgPT0gMCkKLSsJ CQkJCVBheWxvYWRbMF0gPSAwOwotKwkJCQlmcHV0cygiUmVzdWx0ID0gUGFzcyIgUkVTUF9FT0ws IG91dCk7Ci0rCQkJCU91dHB1dFZhbHVlKCJQYXlsb2FkIiwgUGF5bG9hZCwgbGVuLCBvdXQsIDAp OwotKwkJCQl9Ci0rCQkJZWxzZQotKwkJCQlmcHV0cygiUmVzdWx0ID0gRmFpbCIgUkVTUF9FT0ws IG91dCk7Ci0rCQkJT1BFTlNTTF9mcmVlKENUKTsKLSsJCQlPUEVOU1NMX2ZyZWUoUGF5bG9hZCk7 Ci0rCQkJQ1QgPSBQYXlsb2FkID0gTlVMTDsKLSsJCQl9Ci0rCQl9Ci0rCWlmIChLZXkpCi0rCQlP UEVOU1NMX2ZyZWUoS2V5KTsKLSsJaWYgKE5vbmNlKQotKwkJT1BFTlNTTF9mcmVlKE5vbmNlKTsK LSsJaWYgKEFkYXRhKQotKwkJT1BFTlNTTF9mcmVlKEFkYXRhKTsKLSsJRklQU19jaXBoZXJfY3R4 X2NsZWFudXAoJmN0eCk7Ci0rCX0KLSsKLSsjaWZkZWYgRklQU19BTEdWUwotK2ludCBmaXBzX2dj bXRlc3RfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2Vsc2UKLStpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCi0rI2VuZGlmCi0rCXsKLSsJaW50IGVuY3J5cHQ7Ci0rCWludCB4 dHMgPSAwLCBjY20gPSAwOwotKwlGSUxFICppbiwgKm91dDsKLSsJaWYgKGFyZ2MgPT0gNCkKLSsJ CXsKLSsJCWluID0gZm9wZW4oYXJndlsyXSwgInIiKTsKLSsJCWlmICghaW4pCi0rCQkJewotKwkJ CWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKLSsJCQlleGl0 KDEpOwotKwkJCX0KLSsJCW91dCA9IGZvcGVuKGFyZ3ZbM10sICJ3Iik7Ci0rCQlpZiAoIW91dCkK LSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlXG4i KTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCX0KLSsJZWxzZSBpZiAoYXJnYyA9PSAyKQotKwkJ ewotKwkJaW4gPSBzdGRpbjsKLSsJCW91dCA9IHN0ZG91dDsKLSsJCX0KLSsJZWxzZQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsIiVzIFstZW5jcnlwdHwtZGVjcnlwdF1cbiIsYXJndlswXSk7Ci0r CQlleGl0KDEpOwotKwkJfQotKwlmaXBzX2FsZ3Rlc3RfaW5pdCgpOwotKwlpZighc3RyY21wKGFy Z3ZbMV0sIi1lbmNyeXB0IikpCi0rCQllbmNyeXB0ID0gMTsKLSsJZWxzZSBpZighc3RyY21wKGFy Z3ZbMV0sIi1lbmNyeXB0SVZleHQiKSkKLSsJCWVuY3J5cHQgPSAyOwotKwllbHNlIGlmKCFzdHJj bXAoYXJndlsxXSwiLWRlY3J5cHQiKSkKLSsJCWVuY3J5cHQgPSAwOwotKwllbHNlIGlmKCFzdHJj bXAoYXJndlsxXSwiLWNjbSIpKQotKwkJY2NtID0gMTsKLSsJZWxzZSBpZighc3RyY21wKGFyZ3Zb MV0sIi14dHMiKSkKLSsJCXh0cyA9IDE7Ci0rCWVsc2UKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJy LCJEb24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7Ci0rCQlleGl0KDEpOwotKwkJfQot KwotKwlpZiAoY2NtKQotKwkJY2NtdGVzdChpbiwgb3V0KTsKLSsJZWxzZSBpZiAoeHRzKQotKwkJ eHRzdGVzdChpbiwgb3V0KTsKLSsJZWxzZQotKwkJZ2NtdGVzdChpbiwgb3V0LCBlbmNyeXB0KTsK LSsKLSsJaWYgKGFyZ2MgPT0gNCkKLSsJCXsKLSsJCWZjbG9zZShpbik7Ci0rCQlmY2xvc2Uob3V0 KTsKLSsJCX0KLSsKLSsJcmV0dXJuIDA7Ci0rfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9maXBzL2NhdnMvZmlwc19ybmd2cy5jLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTU3ODU1 MDUgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMu YwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1NTc4NTUwNSArMDIwMAotQEAgLTAsMCArMSwyMzAgQEAK LSsvKgotKyAqIENydWRlIHRlc3QgZHJpdmVyIGZvciBwcm9jZXNzaW5nIHRoZSBWU1QgYW5kIE1D VCB0ZXN0dmVjdG9yIGZpbGVzCi0rICogZ2VuZXJhdGVkIGJ5IHRoZSBDTVZQIFJOR1ZTIHByb2R1 Y3QuCi0rICoKLSsgKiBOb3RlIHRoZSBpbnB1dCBmaWxlcyBhcmUgYXNzdW1lZCB0byBoYXZlIGEg X3ZlcnlfIHNwZWNpZmljIGZvcm1hdAotKyAqIGFzIGRlc2NyaWJlZCBpbiB0aGUgTklTVCBkb2N1 bWVudCAiVGhlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yCi0rICogVmFsaWRhdGlvbiBTeXN0ZW0g KFJOR1ZTKSIsIE1heSAyNSwgMjAwNC4KLSsgKgotKyAqLwotKyNpbmNsdWRlIDxvcGVuc3NsL29w ZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8c3RkaW8u aD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rewotKyAgICBwcmludGYo Ik5vIEZJUFMgUk5HIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rI2Vsc2UKLSsK LSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNs dWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3ZvaWQgdnN0KCkK LSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBj aGFyICp2ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOwotKyAgICB1bnNp Z25lZCBjaGFyIHJldFsxNl07Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZb MTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgbG9uZyBpLCBrZXlsZW47 Ci0rCi0rICAgIGtleWxlbiA9IDA7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVm LHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwlpZighc3RybmNt cChidWYsIltBRVMgMTI4LUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAxNjsKLSsJZWxzZSBpZigh c3RybmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAyNDsKLSsJZWxz ZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAzMjsK LSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQljb250 aW51ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKLSsJICAgIHsKLSsJICAgIGtleT1o ZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0ga2V5bGVuKQotKwkJewotKwkJZnBy aW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVjdGluZyAlbGRcbiIsIGtleWxl bik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJEVCIpKQotKwkgICAgewotKwkgICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlm IChpICE9IDE2KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIERUIGxlbmd0aFxu Iik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJWIikpCi0rCSAgICB7Ci0rCSAgICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAo aSAhPSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBWIGxlbmd0aFxuIik7 Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBpZiAoIWtleSB8fCAhZHQpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsKLSsJCXJldHVybjsKLSsJCX0K LSsKLSsJICAgIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKLSsJICAgIEZJUFNfeDkz MV9zZWVkKHYsMTYpOwotKwkgICAgRklQU194OTMxX3NldF9kdChkdCk7Ci0rCSAgICBpZiAoRklQ U194OTMxX2J5dGVzKHJldCwxNikgPD0gMCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRXJy b3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKLSsJICAgICAgICByZXR1cm47Ci0rCSAgICAgICAg fQotKwotKwkgICAgcHYoIlIiLHJldCwxNik7Ci0rCSAgICBPUEVOU1NMX2ZyZWUoa2V5KTsKLSsJ ICAgIGtleSA9IE5VTEw7Ci0rCSAgICBPUEVOU1NMX2ZyZWUoZHQpOwotKwkgICAgZHQgPSBOVUxM OwotKwkgICAgT1BFTlNTTF9mcmVlKHYpOwotKwkgICAgdiA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0K LSsgICAgfQotKwotK3ZvaWQgbWN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyICprZXkg PSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hh ciAqZHQgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07Ci0rICAgIGNoYXIgYnVm WzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKLSsgICAgbG9uZyBpLCBrZXlsZW47Ci0rICAgIGludCBqOwotKwotKyAgICBrZXlsZW4gPSAw OwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJ ewotKwlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1LZXld IiwgMTMpKQotKwkJa2V5bGVuID0gMTY7Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDE5 Mi1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMjQ7Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJb QUVTIDI1Ni1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMzI7Ci0rCWlmICghcGFyc2VfbGluZSgm a2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJY29udGludWU7Ci0rCWlmKCFzdHJjbXAo a2V5d29yZCwiS2V5IikpCi0rCSAgICB7Ci0rCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZpKTsK LSsJICAgIGlmIChpICE9IGtleWxlbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxp ZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOwotKwkJcmV0dXJuOwotKwkJ fQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKLSsJICAgIHsKLSsJ ICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJ CWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOwotKwkJcmV0dXJuOwotKwkJ fQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQotKwkgICAgewotKwkg ICAgdj1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOwotKwkJcmV0dXJuOwotKwkJfQot KwotKwkgICAgaWYgKCFrZXkgfHwgIWR0KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNaXNz aW5nIGtleSBvciBEVFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBGSVBTX3g5MzFf c2V0X2tleShrZXksIGtleWxlbik7Ci0rCSAgICBGSVBTX3g5MzFfc2VlZCh2LDE2KTsKLSsJICAg IGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQotKwkJewotKwkJICAgIEZJUFNfeDkzMV9zZXRf ZHQoZHQpOwotKwkJICAgIGlmIChGSVBTX3g5MzFfYnl0ZXMocmV0LDE2KSA8PSAwKQotKwkJCXsK LSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxuIik7Ci0rCQkg ICAgICAgIHJldHVybjsKLSsJCSAgICAgICAgfQotKwkJICAgIC8qIEluY3JlbWVudCBEVCAqLwot KwkJICAgIGZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKLSsJCQl7Ci0rCQkJZHRbal0rKzsKLSsJ CQlpZiAoZHRbal0pCi0rCQkJCWJyZWFrOwotKwkJCX0KLSsJCX0KLSsKLSsJICAgIHB2KCJSIixy ZXQsMTYpOwotKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7Ci0rCSAgICBrZXkgPSBOVUxMOwotKwkg ICAgT1BFTlNTTF9mcmVlKGR0KTsKLSsJICAgIGR0ID0gTlVMTDsKLSsJICAgIE9QRU5TU0xfZnJl ZSh2KTsKLSsJICAgIHYgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLStpbnQgbWFp bihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAgewotKyAgICBpZihhcmdjICE9IDIpCi0rCXsK LSsJZnByaW50ZihzdGRlcnIsIiVzIFttY3R8dnN0XVxuIixhcmd2WzBdKTsKLSsJZXhpdCgxKTsK LSsJfQotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMo KTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBGSVBTX3g5MzFfcmVzZXQoKTsKLSsgICAgaWYgKCFG SVBTX3g5MzFfdGVzdF9tb2RlKCkpCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsICJFcnJvciBzZXR0 aW5nIFBSTkcgdGVzdCBtb2RlXG4iKTsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCWV4aXQoMSk7 Ci0rCX0KLSsgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJtY3QiKSkKLSsJbWN0KCk7Ci0rICAgIGVs c2UgaWYoIXN0cmNtcChhcmd2WzFdLCJ2c3QiKSkKLSsJdnN0KCk7Ci0rICAgIGVsc2UKLSsJewot KwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOwotKwll eGl0KDEpOwotKwl9Ci0rCi0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rI2VuZGlmCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYy5maXBzIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jCi0tLS0gb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlwcwkyMDEyLTA0LTIw IDA5OjA3OjA2LjI1NTc4NTUwNSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBz L2NhdnMvZmlwc19yc2FndGVzdC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjU1Nzg1NTA1ICswMjAw Ci1AQCAtMCwwICsxLDM5MCBAQAotKy8qIGZpcHNfcnNhZ3Rlc3QuYyAqLwotKy8qIFdyaXR0ZW4g YnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNT TAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdo dCAoYykgMjAwNSwyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgot KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwot KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcu Ci0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdh cmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpo QGNyeXB0c29mdC5jb20pLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2lu Y2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ht YWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2Eu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5o PgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7Ci0rICAg IHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsK LStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7Ci0rc3RhdGljIGludCByc2FfcHJp bnRrZXkxKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIs IEJJR05VTSAqWHAsCi0rCQlCSUdOVU0gKmUpOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihG SUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0g KlhxKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAq aW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCi0rCWlmKCFGSVBT X21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsK LSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWlu ID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rk b3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWlu KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBl cnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0r CQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFyc2FfdGVzdChvdXQsIGluKSkKLSsJCXsKLSsJ CWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBR1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4i KTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0r Ci0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAh PSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkK LSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBS U0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0raW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklM RSAqaW4pCi0rCXsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7Ci0rCWNoYXIg KmtleXdvcmQsICp2YWx1ZTsKLSsJUlNBICpyc2EgPSBOVUxMOwotKwlCSUdOVU0gKlhwMSA9IE5V TEwsICpYcDIgPSBOVUxMLCAqWHAgPSBOVUxMOwotKwlCSUdOVU0gKlhxMSA9IE5VTEwsICpYcTIg PSBOVUxMLCAqWHEgPSBOVUxMOwotKwlCSUdOVU0gKmUgPSBOVUxMOwotKwlpbnQgcmV0ID0gMDsK LSsJaW50IGxudW0gPSAwOwotKwotKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNU X01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElO RUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwot KwotKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKLSsJ CXsKLSsJCWxudW0rKzsKLSsJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3Jk ID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3Bh Y2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIExv b2sgZm9yID0gc2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyog SWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVzdCBjb3B5 ICovCi0rCQlpZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKLSsJCQl7Ci0rCQkJaWYgKGZwdXRzKG9s aW5lYnVmLCBvdXQpIDwgMCkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQljb250aW51ZTsKLSsJCQl9 Ci0rCi0rCQlxID0gcCAtIDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJ CXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsKLSsJ CSpwID0gMDsKLSsJCXZhbHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFj ZSBmcm9tIHZhbHVlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUp KQotKwkJCXZhbHVlKys7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1 ZSAqLwotKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCQl3aGlsZSAoKnAg PT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsK LSsJCWlmICghc3RyY21wKGtleXdvcmQsICJ4cDEiKSkKLSsJCQl7Ci0rCQkJaWYgKFhwMSB8fCAh ZG9faGV4MmJuKCZYcDEsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMiIpKQotKwkJCXsKLSsJCQlpZiAoWHAyIHx8 ICFkb19oZXgyYm4oJlhwMix2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQot KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHAiKSkKLSsJCQl7Ci0rCQkJaWYgKFhwIHx8 ICFkb19oZXgyYm4oJlhwLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0r CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJ4cTEiKSkKLSsJCQl7Ci0rCQkJaWYgKFhxMSB8 fCAhZG9faGV4MmJuKCZYcTEsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0K LSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMiIpKQotKwkJCXsKLSsJCQlpZiAoWHEy IHx8ICFkb19oZXgyYm4oJlhxMix2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ fQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHEiKSkKLSsJCQl7Ci0rCQkJaWYgKFhx IHx8ICFkb19oZXgyYm4oJlhxLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9 Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJlIikpCi0rCQkJewotKwkJCWlmIChlIHx8 ICFkb19oZXgyYm4oJmUsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAxIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJwMiIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAicCIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAicTEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgInEyIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJxIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJuIikp Ci0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJkIikpCi0rCQkJ Y29udGludWU7Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsKLSsJCWZwdXRzKG9s aW5lYnVmLCBvdXQpOwotKwotKwkJaWYgKGUgJiYgWHAxICYmIFhwMiAmJiBYcCkKLSsJCQl7Ci0r CQkJcnNhID0gRklQU19yc2FfbmV3KCk7Ci0rCQkJaWYgKCFyc2EpCi0rCQkJCWdvdG8gZXJyb3I7 Ci0rCQkJaWYgKCFyc2FfcHJpbnRrZXkxKG91dCwgcnNhLCBYcDEsIFhwMiwgWHAsIGUpKQotKwkJ CQlnb3RvIGVycm9yOwotKwkJCUJOX2ZyZWUoWHAxKTsKLSsJCQlYcDEgPSBOVUxMOwotKwkJCUJO X2ZyZWUoWHAyKTsKLSsJCQlYcDIgPSBOVUxMOwotKwkJCUJOX2ZyZWUoWHApOwotKwkJCVhwID0g TlVMTDsKLSsJCQlCTl9mcmVlKGUpOwotKwkJCWUgPSBOVUxMOwotKwkJCX0KLSsKLSsJCWlmIChy c2EgJiYgWHExICYmIFhxMiAmJiBYcSkKLSsJCQl7Ci0rCQkJaWYgKCFyc2FfcHJpbnRrZXkyKG91 dCwgcnNhLCBYcTEsIFhxMiwgWHEpKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCUJOX2ZyZWUoWHEx KTsKLSsJCQlYcTEgPSBOVUxMOwotKwkJCUJOX2ZyZWUoWHEyKTsKLSsJCQlYcTIgPSBOVUxMOwot KwkJCUJOX2ZyZWUoWHEpOwotKwkJCVhxID0gTlVMTDsKLSsJCQlGSVBTX3JzYV9mcmVlKHJzYSk7 Ci0rCQkJcnNhID0gTlVMTDsKLSsJCQl9Ci0rCQl9Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9y OgotKwotKwlpZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwotKwlpZiAo bGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsKLSsJaWYgKFhwMSkKLSsJCUJO X2ZyZWUoWHAxKTsKLSsJaWYgKFhwMikKLSsJCUJOX2ZyZWUoWHAyKTsKLSsJaWYgKFhwKQotKwkJ Qk5fZnJlZShYcCk7Ci0rCWlmIChYcTEpCi0rCQlCTl9mcmVlKFhxMSk7Ci0rCWlmIChYcTEpCi0r CQlCTl9mcmVlKFhxMSk7Ci0rCWlmIChYcTIpCi0rCQlCTl9mcmVlKFhxMik7Ci0rCWlmIChYcSkK LSsJCUJOX2ZyZWUoWHEpOwotKwlpZiAoZSkKLSsJCUJOX2ZyZWUoZSk7Ci0rCWlmIChyc2EpCi0r CQlGSVBTX3JzYV9mcmVlKHJzYSk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9y OgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGlu ZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50 IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05VTSAqWHAxLCBCSUdO VU0gKlhwMiwgQklHTlVNICpYcCwKLSsJCUJJR05VTSAqZSkKLSsJewotKwlpbnQgcmV0ID0gMDsK LSsJQklHTlVNICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7Ci0rCXAxID0gQk5fbmV3KCk7Ci0rCXAy ID0gQk5fbmV3KCk7Ci0rCWlmICghcDEgfHwgIXAyKQotKwkJZ290byBlcnJvcjsKLSsKLSsJaWYg KCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBwMSwgcDIsIE5VTEwsIE5VTEwsIFhwMSwgWHAyLCBY cCwKLSsJCQkJCQlOVUxMLCBOVUxMLCBOVUxMLCBlLCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0r Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicDEiLCBwMSk7Ci0rCWRvX2JuX3ByaW50X25hbWUo b3V0LCAicDIiLCBwMik7Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicCIsIHJzYS0+cCk7Ci0r Ci0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwlpZiAocDEpCi0rCQlCTl9mcmVlKHAxKTsKLSsJ aWYgKHAyKQotKwkJQk5fZnJlZShwMik7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStzdGF0 aWMgaW50IHJzYV9wcmludGtleTIoRklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05VTSAqWHEx LCBCSUdOVU0gKlhxMiwgQklHTlVNICpYcSkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJQklHTlVN ICpxMSA9IE5VTEwsICpxMiA9IE5VTEw7Ci0rCXExID0gQk5fbmV3KCk7Ci0rCXEyID0gQk5fbmV3 KCk7Ci0rCWlmICghcTEgfHwgIXEyKQotKwkJZ290byBlcnJvcjsKLSsKLSsJaWYgKCFSU0FfWDkz MV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBxMSwgcTIsIE5VTEwsIE5VTEwsIE5VTEwsCi0r CQkJCQkJWHExLCBYcTIsIFhxLCBOVUxMLCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWRv X2JuX3ByaW50X25hbWUob3V0LCAicTEiLCBxMSk7Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAi cTIiLCBxMik7Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicSIsIHJzYS0+cSk7Ci0rCWRvX2Ju X3ByaW50X25hbWUob3V0LCAibiIsIHJzYS0+bik7Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAi ZCIsIHJzYS0+ZCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwlpZiAocTEpCi0rCQlC Tl9mcmVlKHExKTsKLSsJaWYgKHEyKQotKwkJQk5fZnJlZShxMik7Ci0rCi0rCXJldHVybiByZXQ7 Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2Nh dnMvZmlwc19yc2FzdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX3JzYXN0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf cnNhc3Rlc3QuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjU2Nzg1NTI2ICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMJMjAxMi0wNC0y MCAwOTowNzowNi4yNTY3ODU1MjYgKzAyMDAKLUBAIC0wLDAgKzEsMzcwIEBACi0rLyogZmlwc19y c2FzdGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBv cGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlv bi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBs aWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0r ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsg KgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK LSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVz IGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICogKGVheUBj cnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0rICovCi0rCi0rI2lu Y2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL3g1MDl2My5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBS U0Egc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5j bHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgaW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJ TEUgKmluLCBpbnQgU2FsdGxlbik7Ci0rc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAqb3V0 LCBSU0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBs b25nIE1zZ2xlbiwgaW50IFNhbHRsZW4pOwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKLSsJewotKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0 ID0gMSwgU2FsdGxlbiA9IC0xOwotKwotKwlpZighRklQU19tb2RlX3NldCgxKSkKLSsJCXsKLSsJ CWRvX3ByaW50X2Vycm9ycygpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICgoYXJnYyA+ IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwgYXJndlsxXSkpCi0rCQl7Ci0rCQlTYWx0bGVuID0g YXRvaShhcmd2WzJdKTsKLSsJCWlmIChTYWx0bGVuIDwgMCkKLSsJCQl7Ci0rCQkJZnByaW50Zihz dGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0IGxlbmd0aFxuIik7Ci0rCQkJZ290byBlbmQ7Ci0r CQkJfQotKwkJYXJnYyAtPSAyOwotKwkJYXJndiArPSAyOwotKwkJfQotKwllbHNlIGlmICgoYXJn YyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwgYXJndlsxXSkpCi0rCQl7Ci0rCQlTYWx0bGVuID0g LTI7Ci0rCQlhcmdjLS07Ci0rCQlhcmd2Kys7Ci0rCQl9Ci0rCi0rCWlmIChhcmdjID09IDEpCi0r CQlpbiA9IHN0ZGluOwotKwllbHNlCi0rCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7Ci0rCi0r CWlmIChhcmdjIDwgMikKLSsJCW91dCA9IHN0ZG91dDsKLSsJZWxzZQotKwkJb3V0ID0gZm9wZW4o YXJndlsyXSwgInciKTsKLSsKLSsJaWYgKCFpbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAi RkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9 Ci0rCi0rCWlmICghb3V0KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQg aW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICgh cnNhX3N0ZXN0KG91dCwgaW4sIFNhbHRsZW4pKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJG QVRBTCBSU0FTVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0r CQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRv X3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9z ZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0r Ci0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4J MTAyNDAKLSsKLStpbnQgcnNhX3N0ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVu KQotKwl7Ci0rCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3 b3JkLCAqdmFsdWU7Ci0rCVJTQSAqcnNhID0gTlVMTDsKLSsJY29uc3QgRVZQX01EICpkZ3N0ID0g TlVMTDsKLSsJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTDsKLSsJbG9uZyBNc2dsZW4gPSAtMTsK LSsJaW50IGtleWxlbiA9IC0xLCBjdXJyZW50X2tleWxlbiA9IC0xOwotKwlpbnQgcmV0ID0gMDsK LSsJaW50IGxudW0gPSAwOwotKwotKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNU X01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElO RUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwot KwotKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKLSsJ CXsKLSsJCWxudW0rKzsKLSsJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3Jk ID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3Bh Y2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIExv b2sgZm9yID0gc2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyog SWYgbm8gPSBqdXN0IGNvcHkgKi8KLSsJCWlmICghcCkKLSsJCQl7Ci0rCQkJaWYgKGZwdXRzKG9s aW5lYnVmLCBvdXQpIDwgMCkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQljb250aW51ZTsKLSsJCQl9 Ci0rCi0rCQlxID0gcCAtIDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJ CXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsKLSsJ CSpwID0gMDsKLSsJCXZhbHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFj ZSBmcm9tIHZhbHVlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUp KQotKwkJCXZhbHVlKys7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1 ZSAqLwotKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCQl3aGlsZSAoKnAg PT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsK LSsJCS8qIExvb2sgZm9yIFttb2QgPSBYWFhdIGZvciBrZXkgbGVuZ3RoICovCi0rCi0rCQlpZiAo IXN0cmNtcChrZXl3b3JkLCAiW21vZCIpKQotKwkJCXsKLSsJCQlwID0gdmFsdWUgKyBzdHJsZW4o dmFsdWUpIC0gMTsKLSsJCQlpZiAoKnAgIT0gJ10nKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwot KwkJCSpwID0gMDsKLSsJCQlrZXlsZW4gPSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoa2V5bGVuIDwg MCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJTSEFBbGciKSkKLSsJCQl7Ci0rCQkJaWYgKCFzdHJjbXAodmFsdWUsICJTSEExIikp Ci0rCQkJCWRnc3QgPSBFVlBfc2hhMSgpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJT SEEyMjQiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEyMjQoKTsKLSsJCQllbHNlIGlmICghc3RyY21w KHZhbHVlLCAiU0hBMjU2IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7Ci0rCQkJZWxzZSBp ZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTM4NCIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTM4NCgpOwot KwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEE1MTIiKSkKLSsJCQkJZGdzdCA9IEVWUF9z aGE1MTIoKTsKLSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsCi0rCQkJCQki RkFUQUw6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBcIiVzXCJcbiIsCi0rCQkJCQkJCQl2YWx1ZSk7 Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJNc2ciKSkKLSsJCQl7Ci0rCQkJaWYgKE1zZykKLSsJCQkJZ290byBwYXJz ZV9lcnJvcjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12YWx1ZSkgPSAn MCc7Ci0rCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKLSsJCQlpZiAoIU1zZykK LSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCi0rCQlmcHV0cyhvbGluZWJ1Ziwgb3V0 KTsKLSsKLSsJCS8qIElmIGtleSBsZW5ndGggaGFzIGNoYW5nZWQsIGdlbmVyYXRlIGFuZCBvdXRw dXQgcHVibGljCi0rCQkgKiBrZXkgY29tcG9uZW50cyBvZiBuZXcgUlNBIHByaXZhdGUga2V5Lgot KwkJICovCi0rCi0rCQlpZiAoa2V5bGVuICE9IGN1cnJlbnRfa2V5bGVuKQotKwkJCXsKLSsJCQlC SUdOVU0gKmJuX2U7Ci0rCQkJaWYgKHJzYSkKLSsJCQkJRklQU19yc2FfZnJlZShyc2EpOwotKwkJ CXJzYSA9IEZJUFNfcnNhX25ldygpOwotKwkJCWlmICghcnNhKQotKwkJCQlnb3RvIGVycm9yOwot KwkJCWJuX2UgPSBCTl9uZXcoKTsKLSsJCQlpZiAoIWJuX2UgfHwgIUJOX3NldF93b3JkKGJuX2Us IDB4MTAwMSkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJaWYgKCFSU0FfWDkzMV9nZW5lcmF0ZV9r ZXlfZXgocnNhLCBrZXlsZW4sIGJuX2UsIE5VTEwpKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCUJO X2ZyZWUoYm5fZSk7Ci0rCQkJZnB1dHMoIm4gPSAiLCBvdXQpOwotKwkJCWRvX2JuX3ByaW50KG91 dCwgcnNhLT5uKTsKLSsJCQlmcHV0cygiXG5lID0gIiwgb3V0KTsKLSsJCQlkb19ibl9wcmludChv dXQsIHJzYS0+ZSk7Ci0rCQkJZnB1dHMoIlxuIiwgb3V0KTsKLSsJCQljdXJyZW50X2tleWxlbiA9 IGtleWxlbjsKLSsJCQl9Ci0rCi0rCQlpZiAoTXNnICYmIGRnc3QpCi0rCQkJewotKwkJCWlmICgh cnNhX3ByaW50c2lnKG91dCwgcnNhLCBkZ3N0LCBNc2csIE1zZ2xlbiwKLSsJCQkJCQkJCVNhbHRs ZW4pKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCU9QRU5TU0xfZnJlZShNc2cpOwotKwkJCU1zZyA9 IE5VTEw7Ci0rCQkJfQotKwotKwkJfQotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsKLSsJ aWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxpbmVidWYp Ci0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChyc2EpCi0rCQlGSVBTX3JzYV9mcmVl KHJzYSk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7 Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IHJzYV9wcmludHNpZyhG SUxFICpvdXQsIFJTQSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFy ICpNc2csIGxvbmcgTXNnbGVuLCBpbnQgU2FsdGxlbikKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJ dW5zaWduZWQgY2hhciAqc2lnYnVmID0gTlVMTDsKLSsJaW50IGksIHNpZ2xlbjsKLSsJLyogRVZQ X1BLRVkgc3RydWN0dXJlICovCi0rCUVWUF9QS0VZIHBrOwotKwlFVlBfTURfQ1RYIGN0eDsKLSsJ cGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKLSsJcGsucGtleS5yc2EgPSByc2E7Ci0rCi0rCXNpZ2xl biA9IFJTQV9zaXplKHJzYSk7Ci0rCXNpZ2J1ZiA9IE9QRU5TU0xfbWFsbG9jKHNpZ2xlbik7Ci0r CWlmICghc2lnYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJRVZQX01EX0NUWF9pbml0KCZjdHgp OwotKwotKwlpZiAoU2FsdGxlbiA+PSAwKQotKwkJewotKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFn cygmY3R4LAotKwkJCUVWUF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsK LSsJCX0KLSsJZWxzZSBpZiAoU2FsdGxlbiA9PSAtMikKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxh Z3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKTsKLSsJaWYgKCFFVlBfU2lnbkluaXRf ZXgoJmN0eCwgZGdzdCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9TaWduVXBk YXRlKCZjdHgsIE1zZywgTXNnbGVuKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1NpZ25G aW5hbCgmY3R4LCBzaWdidWYsICh1bnNpZ25lZCBpbnQgKikmc2lnbGVuLCAmcGspKQotKwkJZ290 byBlcnJvcjsKLSsKLSsJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOwotKwotKwlmcHV0cygiUyA9 ICIsIG91dCk7Ci0rCi0rCWZvciAoaSA9IDA7IGkgPCBzaWdsZW47IGkrKykKLSsJCWZwcmludGYo b3V0LCAiJTAyWCIsIHNpZ2J1ZltpXSk7Ci0rCi0rCWZwdXRzKCJcbiIsIG91dCk7Ci0rCi0rCXJl dCA9IDE7Ci0rCi0rCWVycm9yOgotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rI2VuZGlmCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBz IG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCi0tLS0gb3Bl bnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMuZmlwcwkyMDEyLTA0 LTIwIDA5OjA3OjA2LjI1Njc4NTUyNiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9m aXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjU2Nzg1NTI2ICsw MjAwCi1AQCAtMCwwICsxLDM3NyBAQAotKy8qIGZpcHNfcnNhdnRlc3QuYyAqLwotKy8qIFdyaXR0 ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3Bl blNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHly aWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgot KyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJl IHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBj cnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNs dWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9i aW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFj Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYz Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4K LSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOwotKyAgICBy ZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0r aW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBzYWx0bGVuKTsKLStzdGF0aWMg aW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCi0rCQlCSUdOVU0gKm4sIEJJR05VTSAqZSwKLSsJ CWNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4s Ci0rCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKTsKLSsKLStpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0 ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCWludCBTYWx0bGVuID0gLTE7Ci0rCi0rCWlm KCFGSVBTX21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3Rv IGVuZDsKLSsJCX0KLSsKLSsJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBh cmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOwotKwkJaWYgKFNhbHRs ZW4gPCAwKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQg bGVuZ3RoXG4iKTsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQlhcmdjIC09IDI7Ci0rCQlhcmd2 ICs9IDI7Ci0rCQl9Ci0rCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBh cmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSAtMjsKLSsJCWFyZ2MtLTsKLSsJCWFyZ3YrKzsK LSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWlu ID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rk b3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWlu KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBl cnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0r CQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFyc2FfdGVzdChvdXQsIGluLCBTYWx0bGVuKSkK LSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBVlRFU1QgZmlsZSBwcm9jZXNzaW5n IGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwot KwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGlu ICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0g c3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0r I2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0raW50IHJzYV90ZXN0KEZJTEUg Km91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQotKwl7Ci0rCWNoYXIgKmxpbmVidWYsICpvbGlu ZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCWNvbnN0IEVWUF9NRCAq ZGdzdCA9IE5VTEw7Ci0rCUJJR05VTSAqbiA9IE5VTEwsICplID0gTlVMTDsKLSsJdW5zaWduZWQg Y2hhciAqTXNnID0gTlVMTCwgKlMgPSBOVUxMOwotKwlsb25nIE1zZ2xlbiwgU2xlbjsKLSsJaW50 IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxv YyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9U RVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290 byBlcnJvcjsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVO LCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwot KwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdo aWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0r Ci0rCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsK LSsKLSsJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUp IGp1c3QgY29weSAqLwotKwkJaWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCi0rCQkJewotKwkJCWlm IChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGlu dWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNw YWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9 IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxl YWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNl IGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJ d2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAt LSA9IDA7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQotKwkJCXsKLSsJCQlpZiAo IWRvX2hleDJibigmbix2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJi bigmZSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCi0rCQkJewotKwkJCWlmICghc3RyY21wKHZhbHVl LCAiU0hBMSIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKLSsJCQllbHNlIGlmICghc3RyY21w KHZhbHVlLCAiU0hBMjI0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7Ci0rCQkJZWxzZSBp ZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOwot KwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKLSsJCQkJZGdzdCA9IEVWUF9z aGEzODQoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCi0rCQkJCWRn c3QgPSBFVlBfc2hhNTEyKCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJy LAotKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAotKwkJCQkJ CQkJdmFsdWUpOwotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChNc2cpCi0rCQkJ CWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0t dmFsdWUpID0gJzAnOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7Ci0rCQkJ aWYgKCFNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAiUyIpKQotKwkJCXsKLSsJCQlpZiAoUykKLSsJCQkJZ290byBwYXJzZV9l cnJvcjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12YWx1ZSkgPSAnMCc7 Ci0rCQkJUyA9IGhleDJiaW5fbSh2YWx1ZSwgJlNsZW4pOwotKwkJCWlmICghUykKLSsJCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJSZXN1 bHQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwot KwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAobiAmJiBlICYmIE1zZyAmJiBTICYm IGRnc3QpCi0rCQkJewotKwkJCWlmICghcnNhX3ByaW50dmVyKG91dCwgbiwgZSwgZGdzdCwKLSsJ CQkJCU1zZywgTXNnbGVuLCBTLCBTbGVuLCBTYWx0bGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJ CQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxMOwotKwkJCU9QRU5TU0xfZnJlZShT KTsKLSsJCQlTID0gTlVMTDsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCi0rCXJldCA9IDE7Ci0rCi0r Ci0rCWVycm9yOgotKwotKwlpZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYp OwotKwlpZiAobGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsJaWYgKG4pCi0r CQlCTl9mcmVlKG4pOwotKwlpZiAoZSkKLSsJCUJOX2ZyZWUoZSk7Ci0rCi0rCXJldHVybiByZXQ7 Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVy cm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0r CX0KLSsKLStzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCi0rCQlCSUdOVU0gKm4s IEJJR05VTSAqZSwKLSsJCWNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1z ZywgbG9uZyBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0 bGVuKQotKwl7Ci0rCWludCByZXQgPSAwLCByOwotKwkvKiBTZXR1cCBSU0EgYW5kIEVWUF9QS0VZ IHN0cnVjdHVyZXMgKi8KLSsJUlNBICpyc2FfcHVia2V5ID0gTlVMTDsKLSsJRVZQX1BLRVkgcGs7 Ci0rCUVWUF9NRF9DVFggY3R4OwotKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOwotKwlyc2Ff cHVia2V5ID0gRklQU19yc2FfbmV3KCk7Ci0rCWlmICghcnNhX3B1YmtleSkKLSsJCWdvdG8gZXJy b3I7Ci0rCXJzYV9wdWJrZXktPm4gPSBCTl9kdXAobik7Ci0rCXJzYV9wdWJrZXktPmUgPSBCTl9k dXAoZSk7Ci0rCWlmICghcnNhX3B1YmtleS0+biB8fCAhcnNhX3B1YmtleS0+ZSkKLSsJCWdvdG8g ZXJyb3I7Ci0rCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rCXBrLnBrZXkucnNhID0gcnNhX3B1 YmtleTsKLSsKLSsJRVZQX01EX0NUWF9pbml0KCZjdHgpOwotKwotKwlpZiAoU2FsdGxlbiA+PSAw KQotKwkJewotKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LAotKwkJCUVWUF9NRF9DVFhf RkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKLSsJCX0KLSsJZWxzZSBpZiAoU2FsdGxl biA9PSAtMikKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFH X1BBRF9YOTMxKTsKLSsJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkK LSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmY3R4LCBNc2csIE1zZ2xl bikpCi0rCQlnb3RvIGVycm9yOwotKwotKwlyID0gRVZQX1ZlcmlmeUZpbmFsKCZjdHgsIFMsIFNs ZW4sICZwayk7Ci0rCi0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJaWYgKHIg PCAwKQotKwkJZ290byBlcnJvcjsKLSsJRVJSX2NsZWFyX2Vycm9yKCk7Ci0rCi0rCWlmIChyID09 IDApCi0rCQlmcHV0cygiUmVzdWx0ID0gRlxuIiwgb3V0KTsKLSsJZWxzZQotKwkJZnB1dHMoIlJl c3VsdCA9IFBcbiIsIG91dCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwlpZiAocnNh X3B1YmtleSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNhX3B1YmtleSk7Ci0rCWlmIChidWYpCi0rCQlP UEVOU1NMX2ZyZWUoYnVmKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRpZgotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMKLS0tLSBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMJMjAxMi0wNC0yMCAw OTowNzowNi4yNTc3ODU1NDcgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfc2hhdGVzdC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjU3Nzg1NTQ3ICswMjAwCi1A QCAtMCwwICsxLDM4OCBAQAotKy8qIGZpcHNfc2hhdGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBE ciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0r ICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChj KSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0r ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0r ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAq Ci0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRl biBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29m dC5jb20pLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPGN0 eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rCi0r I2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFNIQVhYWCBzdXBwb3J0XG4iKTsKLSsgICAgcmV0 dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3N0 YXRpYyBpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOwotK3N0YXRpYyBpbnQgcHJp bnRfZGdzdChjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpN c2csIGludCBNc2dsZW4pOwotK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQX01EICpt ZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4pOwotKwot K2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxFICppbiA9IE5VTEws ICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0ID0gMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQo MSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwot KwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihh cmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVs c2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0r CQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsK LSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5k OwotKwkJfQotKwotKwlpZiAoIWRnc3RfdGVzdChvdXQsIGluKSkKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiRkFUQUwgZGlnZXN0IGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7Ci0rCQlnb3Rv IGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5kOgotKwotKwlpZiAocmV0 KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQot KwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0rCQlmY2xvc2Uo b3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgU0hBX1RFU1RfTUFY X0JJVFMJMTAyNDAwCi0rI2RlZmluZSBTSEFfVEVTVF9NQVhMSU5FTEVOCSgoKFNIQV9URVNUX01B WF9CSVRTID4+IDMpICogMikgKyAxMDApCi0rCi0raW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJ TEUgKmluKQotKwl7Ci0rCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOwotKwljaGFyICpsaW5lYnVm LCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwl1bnNpZ25l ZCBjaGFyICpNc2cgPSBOVUxMLCAqU2VlZCA9IE5VTEw7Ci0rCWxvbmcgTXNnTGVuID0gLTEsIExl biA9IC0xLCBTZWVkTGVuID0gLTE7Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0r Ci0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7Ci0rCWxp bmVidWYgPSBPUEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFs aW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCi0rCXdoaWxlIChmZ2V0 cyhvbGluZWJ1ZiwgU0hBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsrOwot KwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJ LyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hh cikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9vayBmb3IgPSBzaWduICov Ci0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IG9yIHN0YXJ0 cyB3aXRoIFsgKGZvciBbTD0yMF0gbGluZSkganVzdCBjb3B5ICovCi0rCQlpZiAoIXApCi0rCQkJ ewotKwkJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJ CXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUg KGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAw OwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20g dmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJ dmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0r CQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8 IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJaWYgKCFz dHJjbXAoa2V5d29yZCwiW0wiKSAmJiAqcD09J10nKQotKwkJCXsKLSsJCQlzd2l0Y2ggKGF0b2ko dmFsdWUpKQotKwkJCQl7Ci0rCQkJCWNhc2UgMjA6IG1kPUVWUF9zaGExKCk7ICAgYnJlYWs7Ci0r CQkJCWNhc2UgMjg6IG1kPUVWUF9zaGEyMjQoKTsgYnJlYWs7Ci0rCQkJCWNhc2UgMzI6IG1kPUVW UF9zaGEyNTYoKTsgYnJlYWs7Ci0rCQkJCWNhc2UgNDg6IG1kPUVWUF9zaGEzODQoKTsgYnJlYWs7 Ci0rCQkJCWNhc2UgNjQ6IG1kPUVWUF9zaGE1MTIoKTsgYnJlYWs7Ci0rCQkJCWRlZmF1bHQ6IGdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJMZW4iKSkKLSsJCQl7Ci0rCQkJaWYgKExlbiAhPSAtMSkKLSsJCQkJZ290byBwYXJzZV9l cnJvcjsKLSsJCQlMZW4gPSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoTGVuIDwgMCkKLSsJCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsJCQkvKiBPbmx5IGhhbmRsZSBtdWx0aXBsZXMgb2YgOCBiaXRzICov Ci0rCQkJaWYgKExlbiAmIDB4NykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoTGVu ID4gU0hBX1RFU1RfTUFYX0JJVFMpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJTXNnTGVu ID0gTGVuID4+IDM7Ci0rCQkJfQotKwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNn IikpCi0rCQkJewotKwkJCWxvbmcgdG1wbGVuOwotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkK LSsJCQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJCQlpZiAoTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJnRtcGxlbik7Ci0rCQkJaWYgKCFNc2cp Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiU2VlZCIpKQotKwkJCXsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSoo LS12YWx1ZSkgPSAnMCc7Ci0rCQkJaWYgKFNlZWQpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJU2VlZCA9IGhleDJiaW5fbSh2YWx1ZSwgJlNlZWRMZW4pOwotKwkJCWlmICghU2VlZCkKLSsJ CQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJNRCIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZQotKwkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r Ci0rCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsKLSsJCWlmIChtZCAmJiBNc2cgJiYgKE1zZ0xl biA+PSAwKSkKLSsJCQl7Ci0rCQkJaWYgKCFwcmludF9kZ3N0KG1kLCBvdXQsIE1zZywgTXNnTGVu KSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBO VUxMOwotKwkJCU1zZ0xlbiA9IC0xOwotKwkJCUxlbiA9IC0xOwotKwkJCX0KLSsJCWVsc2UgaWYg KG1kICYmIFNlZWQgJiYgKFNlZWRMZW4gPiAwKSkKLSsJCQl7Ci0rCQkJaWYgKCFwcmludF9tb250 ZShtZCwgb3V0LCBTZWVkLCBTZWVkTGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NM X2ZyZWUoU2VlZCk7Ci0rCQkJU2VlZCA9IE5VTEw7Ci0rCQkJU2VlZExlbiA9IC0xOwotKwkJCX0K LSsJCi0rCi0rCQl9Ci0rCi0rCi0rCXJldCA9IDE7Ci0rCi0rCi0rCWVycm9yOgotKwotKwlpZiAo b2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwotKwlpZiAobGluZWJ1ZikKLSsJ CU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsJaWYgKE1zZykKLSsJCU9QRU5TU0xfZnJlZShNc2cp OwotKwlpZiAoU2VlZCkKLSsJCU9QRU5TU0xfZnJlZShTZWVkKTsKLSsKLSsJcmV0dXJuIHJldDsK LSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJy b3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJ fQotKwotK3N0YXRpYyBpbnQgcHJpbnRfZGdzdChjb25zdCBFVlBfTUQgKmVtZCwgRklMRSAqb3V0 LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuKQotKwl7Ci0rCWludCBpLCBtZGxl bjsKLSsJdW5zaWduZWQgY2hhciBtZFtFVlBfTUFYX01EX1NJWkVdOwotKwlpZiAoIUVWUF9EaWdl c3QoTXNnLCBNc2dsZW4sIG1kLCAodW5zaWduZWQgaW50ICopJm1kbGVuLCBlbWQsIE5VTEwpKQot KwkJewotKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIEhBU0hcbiIsIHN0ZGVycik7Ci0rCQly ZXR1cm4gMDsKLSsJCX0KLSsJZnB1dHMoIk1EID0gIiwgb3V0KTsKLSsJZm9yIChpID0gMDsgaSA8 IG1kbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtZFtpXSk7Ci0rCWZwdXRzKCJc biIsIG91dCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBwcmludF9tb250ZShj b25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQg U2VlZExlbikKLSsJewotKwl1bnNpZ25lZCBpbnQgaSwgaiwgazsKLSsJaW50IHJldCA9IDA7Ci0r CUVWUF9NRF9DVFggY3R4OwotKwl1bnNpZ25lZCBjaGFyICptMSwgKm0yLCAqbTMsICpwOwotKwl1 bnNpZ25lZCBpbnQgbWxlbiwgbTFsZW4sIG0ybGVuLCBtM2xlbjsKLSsKLSsJRVZQX01EX0NUWF9p bml0KCZjdHgpOwotKwotKwlpZiAoU2VlZExlbiA+IEVWUF9NQVhfTURfU0laRSkKLSsJCW1sZW4g PSBTZWVkTGVuOwotKwllbHNlCi0rCQltbGVuID0gRVZQX01BWF9NRF9TSVpFOwotKwotKwltMSA9 IE9QRU5TU0xfbWFsbG9jKG1sZW4pOwotKwltMiA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOwotKwlt MyA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOwotKwotKwlpZiAoIW0xIHx8ICFtMiB8fCAhbTMpCi0r CQlnb3RvIG1jX2Vycm9yOwotKwotKwltMWxlbiA9IG0ybGVuID0gbTNsZW4gPSBTZWVkTGVuOwot KwltZW1jcHkobTEsIFNlZWQsIFNlZWRMZW4pOwotKwltZW1jcHkobTIsIFNlZWQsIFNlZWRMZW4p OwotKwltZW1jcHkobTMsIFNlZWQsIFNlZWRMZW4pOwotKwotKwlmcHV0cygiXG4iLCBvdXQpOwot KwotKwlmb3IgKGogPSAwOyBqIDwgMTAwOyBqKyspCi0rCQl7Ci0rCQlmb3IgKGkgPSAwOyBpIDwg MTAwMDsgaSsrKQotKwkJCXsKLSsJCQlFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBtZCwgTlVMTCk7 Ci0rCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMSwgbTFsZW4pOwotKwkJCUVWUF9EaWdlc3RV cGRhdGUoJmN0eCwgbTIsIG0ybGVuKTsKLSsJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0zLCBt M2xlbik7Ci0rCQkJcCA9IG0xOwotKwkJCW0xID0gbTI7Ci0rCQkJbTFsZW4gPSBtMmxlbjsKLSsJ CQltMiA9IG0zOwotKwkJCW0ybGVuID0gbTNsZW47Ci0rCQkJbTMgPSBwOwotKwkJCUVWUF9EaWdl c3RGaW5hbF9leCgmY3R4LCBtMywgJm0zbGVuKTsKLSsJCQl9Ci0rCQlmcHJpbnRmKG91dCwgIkNP VU5UID0gJWRcbiIsIGopOwotKwkJZnB1dHMoIk1EID0gIiwgb3V0KTsKLSsJCWZvciAoayA9IDA7 IGsgPCBtM2xlbjsgaysrKQotKwkJCWZwcmludGYob3V0LCAiJTAyeCIsIG0zW2tdKTsKLSsJCWZw dXRzKCJcblxuIiwgb3V0KTsKLSsJCW1lbWNweShtMSwgbTMsIG0zbGVuKTsKLSsJCW1lbWNweSht MiwgbTMsIG0zbGVuKTsKLSsJCW0xbGVuID0gbTJsZW4gPSBtM2xlbjsKLSsJCX0KLSsKLSsJcmV0 ID0gMTsKLSsKLSsJbWNfZXJyb3I6Ci0rCWlmIChtMSkKLSsJCU9QRU5TU0xfZnJlZShtMSk7Ci0r CWlmIChtMikKLSsJCU9QRU5TU0xfZnJlZShtMik7Ci0rCWlmIChtMykKLSsJCU9QRU5TU0xfZnJl ZShtMyk7Ci0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJcmV0dXJuIHJldDsK LSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3V0bC5oLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0 bC5oCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oLmZpcHMJ MjAxMi0wNC0yMCAwOTowNzowNi4yNTc3ODU1NDcgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmgJMjAxMi0wNC0yMCAwOTowNzowNi4yNTc3ODU1NDcg KzAyMDAKLUBAIC0wLDAgKzEsMzQzIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQg KGMpIDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoK LSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K LSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsg KgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE Ci0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0r dm9pZCBkb19wcmludF9lcnJvcnModm9pZCkKLSsJewotKwljb25zdCBjaGFyICpmaWxlLCAqZGF0 YTsKLSsJaW50IGxpbmUsIGZsYWdzOwotKwl1bnNpZ25lZCBsb25nIGw7Ci0rCXdoaWxlICgobCA9 IEVSUl9nZXRfZXJyb3JfbGluZV9kYXRhKCZmaWxlLCAmbGluZSwgJmRhdGEsICZmbGFncykpKQot KwkJewotKwkJZnByaW50ZihzdGRlcnIsICJFUlJPUjolbHg6bGliPSVkLGZ1bmM9JWQscmVhc29u PSVkIgotKwkJCQkiOmZpbGU9JXM6bGluZT0lZDolc1xuIiwKLSsJCQlsLCBFUlJfR0VUX0xJQihs KSwgRVJSX0dFVF9GVU5DKGwpLCBFUlJfR0VUX1JFQVNPTihsKSwKLSsJCQlmaWxlLCBsaW5lLCBm bGFncyAmIEVSUl9UWFRfU1RSSU5HID8gZGF0YSA6ICIiKTsKLSsJCX0KLSsJfQotKwotK2ludCBo ZXgyYmluKGNvbnN0IGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQpCi0rICAgIHsKLSsgICAg aW50IG4xLCBuMjsKLSsgICAgdW5zaWduZWQgY2hhciBjaDsKLSsKLSsgICAgZm9yIChuMT0wLG4y PTAgOyBpbltuMV0gJiYgaW5bbjFdICE9ICdcbicgOyApCi0rCXsgLyogZmlyc3QgYnl0ZSAqLwot KwlpZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkKLSsJICAgIGNoID0gaW5b bjErK10gLSAnMCc7Ci0rCWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAmJiAoaW5bbjFdIDw9ICdG JykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7Ci0rCWVsc2UgaWYgKChpbltuMV0g Pj0gJ2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJ2EnICsg MTA7Ci0rCWVsc2UKLSsJICAgIHJldHVybiAtMTsKLSsJaWYoIWluW24xXSkKLSsJICAgIHsKLSsJ ICAgIG91dFtuMisrXT1jaDsKLSsJICAgIGJyZWFrOwotKwkgICAgfQotKwlvdXRbbjJdID0gY2gg PDwgNDsKLSsJLyogc2Vjb25kIGJ5dGUgKi8KLSsJaWYgKChpbltuMV0gPj0gJzAnKSAmJiAoaW5b bjFdIDw9ICc5JykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJzAnOwotKwllbHNlIGlmICgoaW5b bjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdB JyArIDEwOwotKwllbHNlIGlmICgoaW5bbjFdID49ICdhJykgJiYgKGluW24xXSA8PSAnZicpKQot KwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEwOwotKwllbHNlCi0rCSAgICByZXR1cm4gLTE7 Ci0rCW91dFtuMisrXSB8PSBjaDsKLSsJfQotKyAgICByZXR1cm4gbjI7Ci0rICAgIH0KLSsKLSt1 bnNpZ25lZCBjaGFyICpoZXgyYmluX20oY29uc3QgY2hhciAqaW4sIGxvbmcgKnBsZW4pCi0rCXsK LSsJdW5zaWduZWQgY2hhciAqcDsKLSsJcCA9IE9QRU5TU0xfbWFsbG9jKChzdHJsZW4oaW4pICsg MSkvMik7Ci0rCSpwbGVuID0gaGV4MmJpbihpbiwgcCk7Ci0rCXJldHVybiBwOwotKwl9Ci0rCi0r aW50IGRvX2hleDJibihCSUdOVU0gKipwciwgY29uc3QgY2hhciAqaW4pCi0rCXsKLSsJdW5zaWdu ZWQgY2hhciAqcDsKLSsJbG9uZyBwbGVuOwotKwlpbnQgciA9IDA7Ci0rCXAgPSBoZXgyYmluX20o aW4sICZwbGVuKTsKLSsJaWYgKCFwKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghKnByKQotKwkJKnBy ID0gQk5fbmV3KCk7Ci0rCWlmICghKnByKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChCTl9iaW4yYm4o cCwgcGxlbiwgKnByKSkKLSsJCXIgPSAxOwotKwlPUEVOU1NMX2ZyZWUocCk7Ci0rCXJldHVybiBy OwotKwl9Ci0rCi0raW50IGRvX2JuX3ByaW50KEZJTEUgKm91dCwgQklHTlVNICpibikKLSsJewot KwlpbnQgbGVuLCBpOwotKwl1bnNpZ25lZCBjaGFyICp0bXA7Ci0rCWxlbiA9IEJOX251bV9ieXRl cyhibik7Ci0rCWlmIChsZW4gPT0gMCkKLSsJCXsKLSsJCWZwdXRzKCIwMCIsIG91dCk7Ci0rCQly ZXR1cm4gMTsKLSsJCX0KLSsKLSsJdG1wID0gT1BFTlNTTF9tYWxsb2MobGVuKTsKLSsJaWYgKCF0 bXApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4i KTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlCTl9ibjJiaW4oYm4sIHRtcCk7Ci0rCWZvciAoaSA9 IDA7IGkgPCBsZW47IGkrKykKLSsJCWZwcmludGYob3V0LCAiJTAyeCIsIHRtcFtpXSk7Ci0rCU9Q RU5TU0xfZnJlZSh0bXApOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBkb19ibl9wcmludF9u YW1lKEZJTEUgKm91dCwgY29uc3QgY2hhciAqbmFtZSwgQklHTlVNICpibikKLSsJewotKwlpbnQg cjsKLSsJZnByaW50ZihvdXQsICIlcyA9ICIsIG5hbWUpOwotKwlyID0gZG9fYm5fcHJpbnQob3V0 LCBibik7Ci0rCWlmICghcikKLSsJCXJldHVybiAwOwotKwlmcHV0cygiXG4iLCBvdXQpOwotKwly ZXR1cm4gMTsKLSsJfQotKwotK2ludCBwYXJzZV9saW5lKGNoYXIgKipwa3csIGNoYXIgKipwdmFs LCBjaGFyICpsaW5lYnVmLCBjaGFyICpvbGluZWJ1ZikKLSsJewotKwljaGFyICprZXl3b3JkLCAq dmFsdWUsICpwLCAqcTsKLSsJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJa2V5d29yZCA9 IGxpbmVidWY7Ci0rCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQlrZXl3b3JkKys7Ci0rCi0rCS8qIExvb2sgZm9y ID0gc2lnbiAqLwotKwlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCS8qIElmIG5vICc9 JyBleGl0ICovCi0rCWlmICghcCkKLSsJCXJldHVybiAwOwotKwotKwlxID0gcCAtIDE7Ci0rCi0r CS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqcSkpCi0rCQkqcS0tID0gMDsKLSsKLSsJKnAgPSAwOwotKwl2YWx1ZSA9IHAgKyAxOwot KwotKwkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCXdoaWxlIChpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQl2YWx1ZSsrOwotKwotKwkvKiBSZW1vdmUg dHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUp IC0gMTsKLSsKLSsJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikq cCkpCi0rCQkqcC0tID0gMDsKLSsKLSsJKnBrdyA9IGtleXdvcmQ7Ci0rCSpwdmFsID0gdmFsdWU7 Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rQklHTlVNICpoZXgyYm4oY29uc3QgY2hhciAqaW4pCi0r ICAgIHsKLSsgICAgQklHTlVNICpwPU5VTEw7Ci0rCi0rICAgIGlmICghZG9faGV4MmJuKCZwLCBp bikpCi0rCXJldHVybiBOVUxMOwotKwotKyAgICByZXR1cm4gcDsKLSsgICAgfQotKwotK2ludCBi aW4yaGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hhciAqb3V0KQotKyAgICB7 Ci0rICAgIGludCBuMSwgbjI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2g7Ci0rCi0rICAgIGZvciAo bjE9MCxuMj0wIDsgbjEgPCBsZW4gOyArK24xKQotKwl7Ci0rCWNoPWluW24xXSA+PiA0OwotKwlp ZiAoY2ggPD0gMHgwOSkKLSsJICAgIG91dFtuMisrXT1jaCsnMCc7Ci0rCWVsc2UKLSsJICAgIG91 dFtuMisrXT1jaC0xMCsnYSc7Ci0rCWNoPWluW24xXSAmIDB4MGY7Ci0rCWlmKGNoIDw9IDB4MDkp Ci0rCSAgICBvdXRbbjIrK109Y2grJzAnOwotKwllbHNlCi0rCSAgICBvdXRbbjIrK109Y2gtMTAr J2EnOwotKwl9Ci0rICAgIG91dFtuMl09J1wwJzsKLSsgICAgcmV0dXJuIG4yOwotKyAgICB9Ci0r Ci0rdm9pZCBwdihjb25zdCBjaGFyICp0YWcsY29uc3QgdW5zaWduZWQgY2hhciAqdmFsLGludCBs ZW4pCi0rICAgIHsKLSsgICAgY2hhciBvYnVmWzIwNDhdOwotKwotKyAgICBiaW4yaGV4KHZhbCxs ZW4sb2J1Zik7Ci0rICAgIHByaW50ZigiJXMgPSAlc1xuIix0YWcsb2J1Zik7Ci0rICAgIH0KLSsK LSsvKiBUbyBhdm9pZCBleHRlbnNpdmUgY2hhbmdlcyB0byB0ZXN0IHByb2dyYW0gYXQgdGhpcyBz dGFnZSBqdXN0IGNvbnZlcnQKLSsgKiB0aGUgaW5wdXQgbGluZSBpbnRvIGFuIGFjY2VwdGFibGUg Zm9ybS4gS2V5d29yZCBsaW5lcyBjb252ZXJ0ZWQgdG8gZm9ybQotKyAqICJrZXl3b3JkID0gdmFs dWVcbiIgbm8gbWF0dGVyIHdoYXQgd2hpdGUgc3BhY2UgcHJlc2VudCwgYWxsIG90aGVyIGxpbmVz Ci0rICoganVzdCBoYXZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlIHJlbW92ZWQuCi0rICov Ci0rCi0raW50IHRpZHlfbGluZShjaGFyICpsaW5lYnVmLCBjaGFyICpvbGluZWJ1ZikKLSsJewot KwljaGFyICprZXl3b3JkLCAqdmFsdWUsICpwLCAqcTsKLSsJc3RyY3B5KGxpbmVidWYsIG9saW5l YnVmKTsKLSsJa2V5d29yZCA9IGxpbmVidWY7Ci0rCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwot Kwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQlrZXl3b3JkKys7 Ci0rCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0r Ci0rCS8qIElmIG5vICc9JyBqdXN0IGNob3AgbGVhZGluZywgdHJhaWxpbmcgd3MgKi8KLSsJaWYg KCFwKQotKwkJewotKwkJcCA9IGtleXdvcmQgKyBzdHJsZW4oa2V5d29yZCkgLSAxOwotKwkJd2hp bGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9 IDA7Ci0rCQlzdHJjcHkob2xpbmVidWYsIGtleXdvcmQpOwotKwkJc3RyY2F0KG9saW5lYnVmLCAi XG4iKTsKLSsJCXJldHVybiAxOwotKwkJfQotKwotKwlxID0gcCAtIDE7Ci0rCi0rCS8qIFJlbW92 ZSB0cmFpbGluZyBzcGFjZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkp Ci0rCQkqcS0tID0gMDsKLSsKLSsJKnAgPSAwOwotKwl2YWx1ZSA9IHAgKyAxOwotKwotKwkvKiBS ZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSp2YWx1ZSkpCi0rCQl2YWx1ZSsrOwotKwotKwkvKiBSZW1vdmUgdHJhaWxpbmcg c3BhY2UgZnJvbSB2YWx1ZSAqLwotKwlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsK LSsJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkq cC0tID0gMDsKLSsKLSsJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsKLSsJc3RyY2F0KG9saW5l YnVmLCAiID0gIik7Ci0rCXN0cmNhdChvbGluZWJ1ZiwgdmFsdWUpOwotKwlzdHJjYXQob2xpbmVi dWYsICJcbiIpOwotKwotKwlyZXR1cm4gMTsKLSsJfQotKwotKy8qIE5COiB0aGlzIHJldHVybiB0 aGUgbnVtYmVyIG9mIF9iaXRzXyByZWFkICovCi0raW50IGJpbnQyYmluKGNvbnN0IGNoYXIgKmlu LCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpvdXQpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rCi0r ICAgIG1lbXNldChvdXQsMCxsZW4pOwotKyAgICBmb3Iobj0wIDsgbiA8IGxlbiA7ICsrbikKLSsJ aWYoaW5bbl0gPT0gJzEnKQotKwkgICAgb3V0W24vOF18PSgweDgwID4+IChuJTgpKTsKLSsgICAg cmV0dXJuIGxlbjsKLSsgICAgfQotKwotK2ludCBiaW4yYmludChjb25zdCB1bnNpZ25lZCBjaGFy ICppbixpbnQgbGVuLGNoYXIgKm91dCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsKLSsgICAgZm9y KG49MCA7IG4gPCBsZW4gOyArK24pCi0rCW91dFtuXT0oaW5bbi84XSYoMHg4MCA+PiAobiU4KSkp ID8gJzEnIDogJzAnOwotKyAgICByZXR1cm4gbjsKLSsgICAgfQotKwotKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotK3ZvaWQgUHJpbnRWYWx1 ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbikKLSt7Ci0rI2lmIFZFUkJP U0UKLSsgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsgIGludCBvbGVuOwotKyAgb2xlbiA9IGJpbjJoZXgo dmFsLCBsZW4sIG9idWYpOwotKyAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1 Zik7Ci0rI2VuZGlmCi0rfQotKwotK3ZvaWQgT3V0cHV0VmFsdWUoY2hhciAqdGFnLCB1bnNpZ25l ZCBjaGFyICp2YWwsIGludCBsZW4sIEZJTEUgKnJmcCxpbnQgYml0bW9kZSkKLSsgICAgewotKyAg ICBjaGFyIG9idWZbMjA0OF07Ci0rICAgIGludCBvbGVuOwotKwotKyAgICBpZihiaXRtb2RlKQot KwlvbGVuPWJpbjJiaW50KHZhbCxsZW4sb2J1Zik7Ci0rICAgIGVsc2UKLSsJb2xlbj1iaW4yaGV4 KHZhbCxsZW4sb2J1Zik7Ci0rCi0rICAgIGZwcmludGYocmZwLCAiJXMgPSAlLipzXG4iLCB0YWcs IG9sZW4sIG9idWYpOwotKyNpZiBWRVJCT1NFCi0rICAgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0 YWcsIG9sZW4sIG9idWYpOwotKyNlbmRpZgotKyAgICB9Ci0rCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEv Y3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1ODc4 NTU2OSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0 ZXN0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTg3ODU1NjkgKzAyMDAKLUBAIC0wLDAgKzEsMzU5 IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot KyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlz dHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK LSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAot KyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoK LSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0r Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3N0YXRpYyBjb25zdCBzdHJ1Y3QKLSsgICAgewotKyAg ICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsxNl07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg cGxhaW50ZXh0WzE2XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzE2XTsK LSsgICAgfSB0ZXN0c1tdPQotKwl7Ci0rCXsKLSsJeyAweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQs MHgwNSwweDA2LDB4MDcsCi0rCSAgMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgwRSww eDBGIH0sCi0rCXsgMHgwMCwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NiwweDc3LAotKwkg IDB4ODgsMHg5OSwweEFBLDB4QkIsMHhDQywweERELDB4RUUsMHhGRiB9LAotKwl7IDB4NjksMHhD NCwweEUwLDB4RDgsMHg2QSwweDdCLDB4MDQsMHgzMCwKLSsJICAweEQ4LDB4Q0QsMHhCNywweDgw LDB4NzAsMHhCNCwweEM1LDB4NUEgfSwKLSsJfSwKLSsJfTsKLSsKLStzdGF0aWMgaW50IGNvcnJ1 cHRfYWVzOwotKwotK3ZvaWQgRklQU19jb3JydXB0X2FlcygpCi0rICAgIHsKLSsgICAgY29ycnVw dF9hZXMgPSAxOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVzKCkKLSsgICAgewot KyAgICBpbnQgbjsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsK LSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgZm9yKG49MCA7IG4gPCAx IDsgKytuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsKLSsJbWVtY3B5KGtleSwg dGVzdHNbbl0ua2V5LCBzaXplb2Yoa2V5KSk7Ci0rCWlmIChjb3JydXB0X2FlcykKLSsJCWtleVsw XSsrOwotKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwKLSsJ CQkJa2V5LCBOVUxMLAotKwkJCQl0ZXN0c1tuXS5wbGFpbnRleHQsCi0rCQkJCXRlc3RzW25dLmNp cGhlcnRleHQsCi0rCQkJCTE2KSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCX0KLSsgICAgcmV0ID0g MTsKLSsgICAgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKyAgICBp ZiAocmV0ID09IDApCi0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUyxGSVBT X1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8qIEFF Uy1DQ00gdGVzdCBkYXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCi0rCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2tleVtdID0gewotKwkweGNlLDB4YjAsMHgwOSww eGFlLDB4YTQsMHg0NSwweDQ0LDB4NTEsMHhmZSwweGFkLDB4ZjAsMHhlNiwKLSsJMHhiMywweDZm LDB4NDUsMHg1NSwweDVkLDB4ZDAsMHg0NywweDIzLDB4YmEsMHhhNCwweDQ4LDB4ZTgKLSt9Owot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9ub25jZVtdID0gewotKwkweDc2LDB4NDAs MHg0MywweGM0LDB4OTQsMHg2MCwweGI3Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBjY21fYWRhdGFbXSA9IHsKLSsJMHg2ZSwweDgwLDB4ZGQsMHg3ZiwweDFiLDB4YWQsMHhmMyww eGExLDB4YzksMHhhYiwweDI1LDB4YzcsCi0rCTB4NWYsMHgxMCwweGJkLDB4ZTcsMHg4YywweDIz LDB4ZmEsMHgwZSwweGI4LDB4ZjksMHhhYSwweGE1LAotKwkweDNhLDB4ZGUsMHhmYiwweGY0LDB4 Y2IsMHhmNywweDhmLDB4ZTQKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9w dFtdID0gewotKwkweGM4LDB4ZDIsMHg3NSwweGY5LDB4MTksMHhlMSwweDdkLDB4N2YsMHhlNiww eDljLDB4MmEsMHgxZiwKLSsJMHg1OCwweDkzLDB4OWQsMHhmZSwweDRkLDB4NDAsMHgzNywweDkx LDB4YjUsMHhkZiwweDEzLDB4MTAKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNj bV9jdFtdID0gewotKwkweDhhLDB4MGYsMHgzZCwweDgyLDB4MjksMHhlNCwweDhlLDB4NzQsMHg4 NywweGZkLDB4OTUsMHhhMiwKLSsJMHg4YSwweGQzLDB4OTIsMHhjOCwweDBiLDB4MzYsMHg4MSww eGQ0LDB4ZmIsMHhjNywweGJiLDB4ZmQKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGNjbV90YWdbXSA9IHsKLSsJMHgyZCwweGQ2LDB4ZWYsMHgxYywweDQ1LDB4ZDQsMHhjYywweGI3 LDB4MjMsMHhkYywweDA3LDB4NDQsCi0rCTB4MTQsMHhkYiwweDUwLDB4NmQKLSt9OwotKwotK2lu dCBGSVBTX3NlbGZ0ZXN0X2Flc19jY20odm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJdW5z aWduZWQgY2hhciBvdXRbMTI4XSwgdGFnWzE2XTsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwlF VlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7 Ci0rCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgRVZQX2Flc18xOTJfY2NtKCksIE5VTEwsIE5V TEwsIDEpKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBF VlBfQ1RSTF9DQ01fU0VUX0lWTEVOLAotKwkJCQkJc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwpKQot KwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9D Q01fU0VUX1RBRywKLSsJCQkJCXNpemVvZihjY21fdGFnKSwgTlVMTCkpCi0rCQlnb3RvIGVycjsK LSsJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBOVUxMLCBjY21fa2V5LCBjY21fbm9uY2UsIDEp KQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNpemVv ZihjY21fcHQpKSAhPSBzaXplb2YoY2NtX3B0KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0Np cGhlcigmY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDApCi0rCQln b3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBjY21fcHQsIHNpemVvZihjY21f cHQpKSAhPSBzaXplb2YoY2NtX2N0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUVWUF9DSVBI RVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcsIDE2LCB0YWcpKQotKwkJZ290 byBlcnI7Ci0rCWlmIChtZW1jbXAodGFnLCBjY21fdGFnLCBzaXplb2YoY2NtX3RhZykpCi0rCQl8 fCBtZW1jbXAob3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSkKLSsJCWdvdG8gZXJyOwotKwot KwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7Ci0rCi0rCWlmICghRVZQX0NpcGhlckluaXQo JmN0eCwgRVZQX2Flc18xOTJfY2NtKCksIE5VTEwsIE5VTEwsIDApKQotKwkJZ290byBlcnI7Ci0r CWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLAot KwkJCQkJc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwpKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQ X0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgMTYsIHRhZykpCi0r CQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBOVUxMLCBjY21fa2V5LCBj Y21fbm9uY2UsIDApKQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEws IE5VTEwsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2NtX2N0KSkKLSsJCWdvdG8gZXJyOwot KwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEp KSA8IDApCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBjY21fY3Qs IHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2NtX3B0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlp ZiAobWVtY21wKG91dCwgY2NtX3B0LCBzaXplb2YoY2NtX3B0KSkpCi0rCQlnb3RvIGVycjsKLSsK LSsJcmV0ID0gMTsKLSsKLSsJZXJyOgotKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwot KwotKwlpZiAocmV0ID09IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNU X0FFU19DQ00sRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJ ZWxzZQotKwkJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKy8qIEFFUy1HQ00gdGVzdCBkYXRhIGZy b20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgZ2NtX2tleVtdID0gewotKwkweGVlLDB4YmMsMHgxZiwweDU3LDB4NDgsMHg3ZiwweDUx LDB4OTIsMHgxYywweDA0LDB4NjUsMHg2NiwKLSsJMHg1ZiwweDhhLDB4ZTYsMHhkMSwweDY1LDB4 OGIsMHhiMiwweDZkLDB4ZTYsMHhmOCwweGEwLDB4NjksCi0rCTB4YTMsMHg1MiwweDAyLDB4OTMs MHhhNSwweDcyLDB4MDcsMHg4ZgotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2Nt X2l2W10gPSB7Ci0rCTB4OTksMHhhYSwweDNlLDB4NjgsMHhlZCwweDgxLDB4NzMsMHhhMCwweGVl LDB4ZDAsMHg2NiwweDg0Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fcHRb XSA9IHsKLSsJMHhmNSwweDZlLDB4ODcsMHgwNSwweDViLDB4YzMsMHgyZCwweDBlLDB4ZWIsMHgz MSwweGIyLDB4ZWEsCi0rCTB4Y2MsMHgyYiwweGYyLDB4YTUKLSt9OwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGdjbV9hYWRbXSA9IHsKLSsJMHg0ZCwweDIzLDB4YzMsMHhjZSwweGMzLDB4 MzQsMHhiNCwweDliLDB4ZGIsMHgzNywweDBjLDB4NDMsCi0rCTB4N2YsMHhlYywweDc4LDB4ZGUK LSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9jdFtdID0gewotKwkweGY3LDB4 MjYsMHg0NCwweDEzLDB4YTgsMHg0YywweDBlLDB4N2MsMHhkNSwweDM2LDB4ODYsMHg3ZSwKLSsJ MHhiOSwweGYyLDB4MTcsMHgzNgotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2Nt X3RhZ1tdID0gewotKwkweDY3LDB4YmEsMHgwNSwweDEwLDB4MjYsMHgyYSwweGU0LDB4ODcsMHhk NywweDM3LDB4ZWUsMHg2MiwKLSsJMHg5OCwweGY3LDB4N2UsMHgwYwotK307Ci0rCi0raW50IEZJ UFNfc2VsZnRlc3RfYWVzX2djbSh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwl1bnNpZ25l ZCBjaGFyIG91dFsxMjhdLCB0YWdbMTZdOwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9D SVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKLSsJ bWVtc2V0KHRhZywgMCwgc2l6ZW9mKHRhZykpOwotKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgs IEVWUF9hZXNfMjU2X2djbSgpLCBOVUxMLCBOVUxMLCAxKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAo IUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwKLSsJCQkJ CXNpemVvZihnY21faXYpLCBOVUxMKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DaXBoZXJJ bml0KCZjdHgsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMSkpCi0rCQlnb3RvIGVycjsKLSsJaWYg KEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8IDApCi0r CQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fcHQsIHNpemVvZihn Y21fcHQpKSAhPSBzaXplb2YoZ2NtX2N0KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhl cigmY3R4LCBOVUxMLCBOVUxMLCAwKSA8IDApCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFFVlBf Q0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9HRVRfVEFHLCAxNiwgdGFnKSkKLSsJ CWdvdG8gZXJyOwotKwotKwlpZiAobWVtY21wKHRhZywgZ2NtX3RhZywgMTYpIHx8IG1lbWNtcChv dXQsIGdjbV9jdCwgMTYpKQotKwkJZ290byBlcnI7Ci0rCi0rCW1lbXNldChvdXQsIDAsIHNpemVv ZihvdXQpKTsKLSsKLSsJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBFVlBfYWVzXzI1Nl9nY20o KSwgTlVMTCwgTlVMTCwgMCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NUWF9j dHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4sCi0rCQkJCQlzaXplb2YoZ2NtX2l2KSwg TlVMTCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVW UF9DVFJMX0dDTV9TRVRfVEFHLCAxNiwgdGFnKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9D aXBoZXJJbml0KCZjdHgsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMCkpCi0rCQlnb3RvIGVycjsK LSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8 IDApCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fY3QsIHNp emVvZihnY21fY3QpKSAhPSBzaXplb2YoZ2NtX3B0KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQ X0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKSA8IDApCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYg KG1lbWNtcChvdXQsIGdjbV9wdCwgMTYpKQotKwkJZ290byBlcnI7Ci0rCi0rCXJldCA9IDE7Ci0r Ci0rCWVycjoKLSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJaWYgKHJldCA9 PSAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfR0NNLEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldHVy biByZXQ7Ci0rCi0rCX0KLSsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4 X2tleVtdID0gewotKwkweGExLDB4YjksMHgwYywweGJhLDB4M2YsMHgwNiwweGFjLDB4MzUsMHgz YiwweDJjLDB4MzQsMHgzOCwKLSsJMHg3NiwweDA4LDB4MTcsMHg2MiwweDA5LDB4MDksMHgyMyww eDAyLDB4NmUsMHg5MSwweDc3LDB4MTgsCi0rCTB4MTUsMHhmMiwweDlkLDB4YWIsMHgwMSwweDkz LDB4MmYsMHgyZgotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9pW10g PSB7Ci0rCTB4NGYsMHhhZSwweGY3LDB4MTEsMHg3YywweGRhLDB4NTksMHhjNiwweDZlLDB4NGIs MHg5MiwweDAxLAotKwkweDNlLDB4NzYsMHg4YSwweGQ1Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBYVFNfMTI4X3B0W10gPSB7Ci0rCTB4ZWIsMHhhYiwweGNlLDB4OTUsMHhiMSww eDRkLDB4M2MsMHg4ZCwweDZmLDB4YjMsMHg1MCwweDM5LAotKwkweDA3LDB4OTAsMHgzMSwweDFj Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2N0W10gPSB7Ci0rCTB4 NzcsMHg4YSwweGU4LDB4YjQsMHgzYywweGI5LDB4OGQsMHg1YSwweDgyLDB4NTAsMHg4MSwweGQ1 LAotKwkweGJlLDB4NDcsMHgxYywweDYzCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBYVFNfMjU2X2tleVtdID0gewotKwkweDFlLDB4YTYsMHg2MSwweGM1LDB4OGQsMHg5NCww eDNhLDB4MGUsMHg0OCwweDAxLDB4ZTQsMHgyZiwKLSsJMHg0YiwweDA5LDB4NDcsMHgxNCwweDll LDB4N2YsMHg5ZiwweDhlLDB4M2UsMHg2OCwweGQwLDB4YzcsCi0rCTB4NTAsMHg1MiwweDEwLDB4 YmQsMHgzMSwweDFhLDB4MGUsMHg3YywweGQ2LDB4ZTEsMHgzZiwweGZkLAotKwkweGYyLDB4NDEs MHg4ZCwweDhkLDB4MTksMHgxMSwweGMwLDB4MDQsMHhjZCwweGE1LDB4OGQsMHhhMywKLSsJMHhk NiwweDE5LDB4YjcsMHhlMiwweGI5LDB4MTQsMHgxZSwweDU4LDB4MzEsMHg4ZSwweGVhLDB4Mzks Ci0rCTB4MmMsMHhmNCwweDFiLDB4MDgKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IFhUU18yNTZfaVtdID0gewotKwkweGFkLDB4ZjgsMHhkOSwweDI2LDB4MjcsMHg0NiwweDRhLDB4 ZDIsMHhmMCwweDQyLDB4OGUsMHg4NCwKLSsJMHhhOSwweGY4LDB4NzUsMHg2NAotK307Ci0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9wdFtdID0gewotKwkweDJlLDB4ZWQsMHhl YSwweDUyLDB4Y2QsMHg4MiwweDE1LDB4ZTEsMHhhYywweGM2LDB4NDcsMHhlOCwKLSsJMHgxMCww eGJiLDB4YzMsMHg2NCwweDJlLDB4ODcsMHgyOCwweDdmLDB4OGQsMHgyZSwweDU3LDB4ZTMsCi0r CTB4NmMsMHgwYSwweDI0LDB4ZmIsMHhjMSwweDJhLDB4MjAsMHgyZQotK307Ci0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9jdFtdID0gewotKwkweGNiLDB4YWEsMHhkMCwweGUy LDB4ZjYsMHhjZSwweGEzLDB4ZjUsMHgwYiwweDM3LDB4ZjksMHgzNCwKLSsJMHhkNCwweDZhLDB4 OWIsMHgxMywweDBiLDB4OWQsMHg1NCwweGYwLDB4N2UsMHgzNCwweGYzLDB4NmEsCi0rCTB4Zjcs MHg5MywweGU4LDB4NmYsMHg3MywweGM2LDB4ZDcsMHhkYgotK307Ci0rCi0raW50IEZJUFNfc2Vs ZnRlc3RfYWVzX3h0cygpCi0rCXsKLSsJaW50IHJldCA9IDE7Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0 eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKGZpcHNfY2lwaGVyX3Rl c3QoJmN0eCwgRVZQX2Flc18xMjhfeHRzKCksCi0rCQkJCVhUU18xMjhfa2V5LCBYVFNfMTI4X2ks IFhUU18xMjhfcHQsIFhUU18xMjhfY3QsCi0rCQkJCXNpemVvZihYVFNfMTI4X3B0KSkgPD0gMCkK LSsJCXJldCA9IDA7Ci0rCi0rCWlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMjU2 X3h0cygpLAotKwkJCQlYVFNfMjU2X2tleSwgWFRTXzI1Nl9pLCBYVFNfMjU2X3B0LCBYVFNfMjU2 X2N0LAotKwkJCQlzaXplb2YoWFRTXzI1Nl9wdCkpIDw9IDApCi0rCQlyZXQgPSAwOwotKwotKwlF VlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKwlpZiAocmV0ID09IDApCi0rCQlGSVBTZXJy KEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19YVFMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0r CXJldHVybiByZXQ7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9maXBzL2ZpcHMuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHMuYwot LS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzCTIwMTItMDQtMjAgMDk6 MDc6MDYuMjU4Nzg1NTY5ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlw cy5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjU4Nzg1NTY5ICswMjAwCi1AQCAtMCwwICsxLDQ4OSBA QAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsg KgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3Ry aWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsg KiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0r ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK LSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNkZWZpbmUgX0dOVV9TT1VSQ0UKLSsK LSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5k Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8bGltaXRzLmg+Ci0rI2luY2x1ZGUgPGRs ZmNuLmg+Ci0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNs dWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKwotKyNpZm5kZWYgUEFUSF9NQVgKLSsjZGVmaW5lIFBBVEhfTUFY IDEwMjQKLSsjZW5kaWYKLSsKLStzdGF0aWMgaW50IGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7Ci0r c3RhdGljIGludCBmaXBzX21vZGUgPSAwOwotK3N0YXRpYyBpbnQgZmlwc19zdGFydGVkID0gMDsK LSsKLStzdGF0aWMgaW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKTsKLStzdGF0aWMgaW50 IGZpcHNfc2V0X293bmluZ190aHJlYWQodm9pZCk7Ci0rc3RhdGljIGludCBmaXBzX2NsZWFyX293 bmluZ190aHJlYWQodm9pZCk7Ci0rCi0rI2RlZmluZSBmaXBzX3dfbG9jaygpCUNSWVBUT193X2xv Y2soQ1JZUFRPX0xPQ0tfRklQUykKLSsjZGVmaW5lIGZpcHNfd191bmxvY2soKQlDUllQVE9fd191 bmxvY2soQ1JZUFRPX0xPQ0tfRklQUykKLSsjZGVmaW5lIGZpcHNfcl9sb2NrKCkJQ1JZUFRPX3Jf bG9jayhDUllQVE9fTE9DS19GSVBTKQotKyNkZWZpbmUgZmlwc19yX3VubG9jaygpCUNSWVBUT19y X3VubG9jayhDUllQVE9fTE9DS19GSVBTKQotKwotK3N0YXRpYyB2b2lkIGZpcHNfc2V0X21vZGUo aW50IG9ub2ZmKQotKwl7Ci0rCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhy ZWFkKCk7Ci0rCi0rCWlmIChmaXBzX3N0YXJ0ZWQpCi0rCQl7Ci0rCQlpZiAoIW93bmluZ190aHJl YWQpIGZpcHNfd19sb2NrKCk7Ci0rCQlmaXBzX21vZGUgPSBvbm9mZjsKLSsJCWlmICghb3duaW5n X3RocmVhZCkgZmlwc193X3VubG9jaygpOwotKwkJfQotKwl9Ci0rCi0raW50IEZJUFNfbW9kdWxl X21vZGUodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJaW50IG93bmluZ190aHJlYWQgPSBm aXBzX2lzX293bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfc3RhcnRlZCkKLSsJCXsKLSsJ CWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKLSsJCXJldCA9IGZpcHNfbW9kZTsK LSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOwotKwkJfQotKwlyZXR1cm4g cmV0OwotKwl9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpCi0rICAgIHsKLSsg ICAgaW50IHJldCA9IDA7Ci0rICAgIGlmIChmaXBzX3N0YXJ0ZWQpCi0rCXsKLSsJaW50IG93bmlu Z190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKCFvd25pbmdfdGhy ZWFkKSBmaXBzX3JfbG9jaygpOwotKwlyZXQgPSBmaXBzX3NlbGZ0ZXN0X2ZhaWw7Ci0rCWlmICgh b3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOwotKwl9Ci0rICAgIHJldHVybiByZXQ7Ci0r ICAgIH0KLSsKLSsvKiBTZWxmdGVzdCBmYWlsdXJlIGZhdGFsIGV4aXQgcm91dGluZS4gVGhpcyB3 aWxsIGJlIGNhbGxlZAotKyAqIGR1cmluZyAqYW55KiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbi4g SXQgaGFzIHRoZSBtaW5pbXVtCi0rICogb3ZlcmhlYWQgcG9zc2libGUgdG8gYXZvaWQgdG9vIGJp ZyBhIHBlcmZvcm1hbmNlIGhpdC4KLSsgKi8KLSsKLSt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2so dm9pZCkKLSsgICAgewotKyAgICBpZiAoZmlwc19zZWxmdGVzdF9mYWlsKQotKwl7Ci0rCU9wZW5T U0xEaWUoX19GSUxFX18sX19MSU5FX18sICJGQVRBTCBGSVBTIFNFTEZURVNUIEZBSUxVUkUiKTsK LSsJfQotKyAgICB9Ci0rCi0rdm9pZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpCi0rICAg IHsKLSsgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsgICAgfQotKwotKy8qIHdlIGltcGxl bWVudCB3aGF0IGxpYmZpcHNjaGVjayBkb2VzIG91cnNlbHZlcyAqLwotKwotK3N0YXRpYyBpbnQK LStnZXRfbGlicmFyeV9wYXRoKGNvbnN0IGNoYXIgKmxpYm5hbWUsIGNvbnN0IGNoYXIgKnN5bWJv bG5hbWUsIGNoYXIgKnBhdGgsIHNpemVfdCBwYXRobGVuKQotK3sKLSsJRGxfaW5mbyBpbmZvOwot Kwl2b2lkICpkbCwgKnN5bTsKLSsJaW50IHJ2ID0gLTE7Ci0rCi0rICAgICAgICBkbCA9IGRsb3Bl bihsaWJuYW1lLCBSVExEX0xBWlkpOwotKyAgICAgICAgaWYgKGRsID09IE5VTEwpIHsKLSsJICAg ICAgICByZXR1cm4gLTE7Ci0rICAgICAgICB9ICAgICAgIAotKwotKwlzeW0gPSBkbHN5bShkbCwg c3ltYm9sbmFtZSk7Ci0rCi0rCWlmIChzeW0gIT0gTlVMTCAmJiBkbGFkZHIoc3ltLCAmaW5mbykp IHsKLSsJCXN0cm5jcHkocGF0aCwgaW5mby5kbGlfZm5hbWUsIHBhdGhsZW4tMSk7Ci0rCQlwYXRo W3BhdGhsZW4tMV0gPSAnXDAnOwotKwkJcnYgPSAwOwotKwl9Ci0rCi0rCWRsY2xvc2UoZGwpOwkK LSsJCi0rCXJldHVybiBydjsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IGNoYXIgY29udltdID0gIjAx MjM0NTY3ODlhYmNkZWYiOwotKwotK3N0YXRpYyBjaGFyICoKLStiaW4yaGV4KHZvaWQgKmJ1Ziwg c2l6ZV90IGxlbikKLSt7Ci0rCWNoYXIgKmhleCwgKnA7Ci0rCXVuc2lnbmVkIGNoYXIgKnNyYyA9 IGJ1ZjsKLSsJCi0rCWhleCA9IG1hbGxvYyhsZW4gKiAyICsgMSk7Ci0rCWlmIChoZXggPT0gTlVM TCkKLSsJCXJldHVybiBOVUxMOwotKwotKwlwID0gaGV4OwotKwotKwl3aGlsZSAobGVuID4gMCkg ewotKwkJdW5zaWduZWQgYzsKLSsKLSsJCWMgPSAqc3JjOwotKwkJc3JjKys7Ci0rCi0rCQkqcCA9 IGNvbnZbYyA+PiA0XTsKLSsJCSsrcDsKLSsJCSpwID0gY29udltjICYgMHgwZl07Ci0rCQkrK3A7 Ci0rCQktLWxlbjsKLSsJfQotKwkqcCA9ICdcMCc7Ci0rCXJldHVybiBoZXg7Ci0rfQotKwotKyNk ZWZpbmUgSE1BQ19QUkVGSVggIi4iIAotKyNkZWZpbmUgSE1BQ19TVUZGSVggIi5obWFjIiAKLSsj ZGVmaW5lIFJFQURfQlVGRkVSX0xFTkdUSCAxNjM4NAotKwotK3N0YXRpYyBjaGFyICoKLSttYWtl X2htYWNfcGF0aChjb25zdCBjaGFyICpvcmlncGF0aCkKLSt7Ci0rCWNoYXIgKnBhdGgsICpwOwot Kwljb25zdCBjaGFyICpmbjsKLSsKLSsJcGF0aCA9IG1hbGxvYyhzaXplb2YoSE1BQ19QUkVGSVgp ICsgc2l6ZW9mKEhNQUNfU1VGRklYKSArIHN0cmxlbihvcmlncGF0aCkpOwotKwlpZihwYXRoID09 IE5VTEwpIHsKLSsJCXJldHVybiBOVUxMOwotKwl9Ci0rCi0rCWZuID0gc3RycmNocihvcmlncGF0 aCwgJy8nKTsKLSsJaWYgKGZuID09IE5VTEwpIHsKLSsJCWZuID0gb3JpZ3BhdGg7Ci0rCX0gZWxz ZSB7Ci0rCQkrK2ZuOwotKwl9Ci0rCi0rCXN0cm5jcHkocGF0aCwgb3JpZ3BhdGgsIGZuLW9yaWdw YXRoKTsKLSsJcCA9IHBhdGggKyAoZm4gLSBvcmlncGF0aCk7Ci0rCXAgPSBzdHBjcHkocCwgSE1B Q19QUkVGSVgpOwotKwlwID0gc3RwY3B5KHAsIGZuKTsKLSsJcCA9IHN0cGNweShwLCBITUFDX1NV RkZJWCk7Ci0rCi0rCXJldHVybiBwYXRoOwotK30KLSsKLStzdGF0aWMgY29uc3QgY2hhciBobWFj a2V5W10gPSAib3Jib0RlSklUSVRlanNpcnBBRE9OaXZpcnBVa3ZhclAiOwotKwotK3N0YXRpYyBp bnQKLStjb21wdXRlX2ZpbGVfaG1hYyhjb25zdCBjaGFyICpwYXRoLCB2b2lkICoqYnVmLCBzaXpl X3QgKmhtYWNsZW4pCi0rewotKwlGSUxFICpmID0gTlVMTDsKLSsJaW50IHJ2ID0gLTE7Ci0rCXVu c2lnbmVkIGNoYXIgcmJ1ZltSRUFEX0JVRkZFUl9MRU5HVEhdOwotKwlzaXplX3QgbGVuOwotKwl1 bnNpZ25lZCBpbnQgaGxlbjsKLSsJSE1BQ19DVFggYzsKLSsKLSsJSE1BQ19DVFhfaW5pdCgmYyk7 Ci0rCi0rCWYgPSBmb3BlbihwYXRoLCAiciIpOwotKwotKwlpZiAoZiA9PSBOVUxMKSB7Ci0rCQln b3RvIGVuZDsKLSsJfQotKwotKwlITUFDX0luaXQoJmMsIGhtYWNrZXksIHNpemVvZihobWFja2V5 KS0xLCBFVlBfc2hhMjU2KCkpOwotKwotKwl3aGlsZSAoKGxlbj1mcmVhZChyYnVmLCAxLCBzaXpl b2YocmJ1ZiksIGYpKSAhPSAwKSB7Ci0rCQlITUFDX1VwZGF0ZSgmYywgcmJ1ZiwgbGVuKTsKLSsJ fQotKwotKwlsZW4gPSBzaXplb2YocmJ1Zik7Ci0rCS8qIHJldXNlIHJidWYgZm9yIGhtYWMgKi8K LSsJSE1BQ19GaW5hbCgmYywgcmJ1ZiwgJmhsZW4pOwotKwotKwkqYnVmID0gbWFsbG9jKGhsZW4p OwotKwlpZiAoKmJ1ZiA9PSBOVUxMKSB7Ci0rCQlnb3RvIGVuZDsKLSsJfQotKwotKwkqaG1hY2xl biA9IGhsZW47Ci0rCi0rCW1lbWNweSgqYnVmLCByYnVmLCBobGVuKTsKLSsKLSsJcnYgPSAwOwot K2VuZDoKLSsJSE1BQ19DVFhfY2xlYW51cCgmYyk7Ci0rCi0rCWlmIChmKQotKwkJZmNsb3NlKGYp OwotKwotKwlyZXR1cm4gcnY7Ci0rfQotKwotK3N0YXRpYyBpbnQKLStGSVBTQ0hFQ0tfdmVyaWZ5 KGNvbnN0IGNoYXIgKmxpYm5hbWUsIGNvbnN0IGNoYXIgKnN5bWJvbG5hbWUpCi0rewotKwljaGFy IHBhdGhbUEFUSF9NQVgrMV07Ci0rCWludCBydjsKLSsJRklMRSAqaGY7Ci0rCWNoYXIgKmhtYWNw YXRoLCAqcDsKLSsJY2hhciAqaG1hYyA9IE5VTEw7Ci0rCXNpemVfdCBuOwotKwkKLSsJcnYgPSBn ZXRfbGlicmFyeV9wYXRoKGxpYm5hbWUsIHN5bWJvbG5hbWUsIHBhdGgsIHNpemVvZihwYXRoKSk7 Ci0rCi0rCWlmIChydiA8IDApCi0rCQlyZXR1cm4gMDsKLSsKLSsJaG1hY3BhdGggPSBtYWtlX2ht YWNfcGF0aChwYXRoKTsKLSsJaWYgKGhtYWNwYXRoID09IE5VTEwpCi0rCQlyZXR1cm4gMDsKLSsK LSsJaGYgPSBmb3BlbihobWFjcGF0aCwgInIiKTsKLSsJaWYgKGhmID09IE5VTEwpIHsKLSsJCWZy ZWUoaG1hY3BhdGgpOwotKwkJcmV0dXJuIDA7Ci0rCX0KLSsKLSsJaWYgKGdldGxpbmUoJmhtYWMs ICZuLCBoZikgPiAwKSB7Ci0rCQl2b2lkICpidWY7Ci0rCQlzaXplX3QgaG1hY2xlbjsKLSsJCWNo YXIgKmhleDsKLSsKLSsJCWlmICgocD1zdHJjaHIoaG1hYywgJ1xuJykpICE9IE5VTEwpCi0rCQkJ KnAgPSAnXDAnOwotKwotKwkJaWYgKGNvbXB1dGVfZmlsZV9obWFjKHBhdGgsICZidWYsICZobWFj bGVuKSA8IDApIHsKLSsJCQlydiA9IC00OwotKwkJCWdvdG8gZW5kOwotKwkJfQotKwotKwkJaWYg KChoZXg9YmluMmhleChidWYsIGhtYWNsZW4pKSA9PSBOVUxMKSB7Ci0rCQkJZnJlZShidWYpOwot KwkJCXJ2ID0gLTU7Ci0rCQkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCQlpZiAoc3RyY21wKGhleCwg aG1hYykgIT0gMCkgewotKwkJCXJ2ID0gLTE7Ci0rCQl9Ci0rCQlmcmVlKGJ1Zik7Ci0rCQlmcmVl KGhleCk7Ci0rCX0KLSsKLStlbmQ6Ci0rCWZyZWUoaG1hYyk7Ci0rCWZyZWUoaG1hY3BhdGgpOwot KwlmY2xvc2UoaGYpOwotKwotKwlpZiAocnYgPCAwKQotKwkJcmV0dXJuIDA7Ci0rCi0rCS8qIGNo ZWNrIHN1Y2Nlc3NmdWwgKi8KLSsJcmV0dXJuIDE7CQotK30KLSsKLStpbnQgRklQU19tb2R1bGVf bW9kZV9zZXQoaW50IG9ub2ZmLCBjb25zdCBjaGFyICphdXRoKQotKyAgICB7Ci0rICAgIGludCBy ZXQgPSAwOwotKwotKyAgICBmaXBzX3dfbG9jaygpOwotKyAgICBmaXBzX3N0YXJ0ZWQgPSAxOwot KyAgICBmaXBzX3NldF9vd25pbmdfdGhyZWFkKCk7Ci0rCi0rICAgIGlmKG9ub2ZmKQotKwl7Ci0r Ci0rCWZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7Ci0rCi0rCS8qIERvbid0IGdvIGludG8gRklQUyBt b2RlIHR3aWNlLCBqdXN0IHNvIHdlIGNhbiBkbyBhdXRvbWFnaWMKLSsJICAgc2VlZGluZyAqLwot KwlpZihGSVBTX21vZHVsZV9tb2RlKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX01PRFVMRV9NT0RFX1NFVCxGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUKTsKLSsJICAg IGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAgZ290byBlbmQ7 Ci0rCSAgICB9Ci0rCi0rI2lmZGVmIE9QRU5TU0xfSUEzMl9TU0UyCi0rCXsKLSsJZXh0ZXJuIHVu c2lnbmVkIGludCBPUEVOU1NMX2lhMzJjYXBfUFsyXTsKLSsJaWYgKChPUEVOU1NMX2lhMzJjYXBf UFswXSAmICgxPDwyNXwxPDwyNikpICE9ICgxPDwyNXwxPDwyNikpCi0rCSAgICB7Ci0rCSAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCxGSVBTX1JfVU5TVVBQT1JURURfUExB VEZPUk0pOwotKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0r CSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsJT1BFTlNTTF9pYTMyY2FwX1BbMF0gfD0gKDE8PDI4 KTsJLyogc2V0ICJzaGFyZWQgY2FjaGUiCSovCi0rCU9QRU5TU0xfaWEzMmNhcF9QWzFdICY9IH4o MTw8KDYwLTMyKSk7CS8qIGNsZWFyIEFWWAkJKi8KLSsJfQotKyNlbmRpZgotKwotKwlpZighRklQ U0NIRUNLX3ZlcmlmeSgibGliY3J5cHRvLnNvLiIgU0hMSUJfVkVSU0lPTl9OVU1CRVIsIkZJUFNf bW9kZV9zZXQiKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01P REVfU0VULEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCk7Ci0rCSAgICBmaXBzX3Nl bGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAg fQotKwotKwlpZighRklQU0NIRUNLX3ZlcmlmeSgibGlic3NsLnNvLiIgU0hMSUJfVkVSU0lPTl9O VU1CRVIsIlNTTF9DVFhfbmV3IikpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X01PRFVMRV9NT0RFX1NFVCxGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpOwotKwkg ICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVu ZDsKLSsJICAgIH0KLSsKLSsJaWYoRklQU19zZWxmdGVzdCgpKQotKwkgICAgZmlwc19zZXRfbW9k ZShvbm9mZik7Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7 Ci0rCSAgICByZXQgPSAwOwotKwkgICAgZ290byBlbmQ7Ci0rCSAgICB9Ci0rCXJldCA9IDE7Ci0r CWdvdG8gZW5kOwotKwl9Ci0rICAgIGZpcHNfc2V0X21vZGUoMCk7Ci0rICAgIGZpcHNfc2VsZnRl c3RfZmFpbCA9IDA7Ci0rICAgIHJldCA9IDE7Ci0rZW5kOgotKyAgICBmaXBzX2NsZWFyX293bmlu Z190aHJlYWQoKTsKLSsgICAgZmlwc193X3VubG9jaygpOwotKyAgICByZXR1cm4gcmV0OwotKyAg ICB9Ci0rCi0rc3RhdGljIENSWVBUT19USFJFQURJRCBmaXBzX3RocmVhZDsKLStzdGF0aWMgaW50 IGZpcHNfdGhyZWFkX3NldCA9IDA7Ci0rCi0rc3RhdGljIGludCBmaXBzX2lzX293bmluZ190aHJl YWQodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYgKGZpcHNfc3RhcnRlZCkKLSsJ CXsKLSsJCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJaWYgKGZpcHNfdGhy ZWFkX3NldCkKLSsJCQl7Ci0rCQkJQ1JZUFRPX1RIUkVBRElEIGN1cjsKLSsJCQlDUllQVE9fVEhS RUFESURfY3VycmVudCgmY3VyKTsKLSsJCQlpZiAoIUNSWVBUT19USFJFQURJRF9jbXAoJmN1ciwg JmZpcHNfdGhyZWFkKSkKLSsJCQkJcmV0ID0gMTsKLSsJCQl9Ci0rCQlDUllQVE9fcl91bmxvY2so Q1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJfQotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IGZp cHNfc2V0X293bmluZ190aHJlYWQodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYg KGZpcHNfc3RhcnRlZCkKLSsJCXsKLSsJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIp OwotKwkJaWYgKCFmaXBzX3RocmVhZF9zZXQpCi0rCQkJewotKwkJCUNSWVBUT19USFJFQURJRF9j dXJyZW50KCZmaXBzX3RocmVhZCk7Ci0rCQkJcmV0ID0gMTsKLSsJCQlmaXBzX3RocmVhZF9zZXQg PSAxOwotKwkJCX0KLSsJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQl9 Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKHZv aWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCWlmIChmaXBzX3N0YXJ0ZWQpCi0rCQl7Ci0r CQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCWlmIChmaXBzX3RocmVhZF9z ZXQpCi0rCQkJewotKwkJCUNSWVBUT19USFJFQURJRCBjdXI7Ci0rCQkJQ1JZUFRPX1RIUkVBRElE X2N1cnJlbnQoJmN1cik7Ci0rCQkJaWYgKCFDUllQVE9fVEhSRUFESURfY21wKCZjdXIsICZmaXBz X3RocmVhZCkpCi0rCQkJCWZpcHNfdGhyZWFkX3NldCA9IDA7Ci0rCQkJfQotKwkJQ1JZUFRPX3df dW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwot KwotKyNpZiAwCi0rLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBlbnN1cmUgdGhlIGVycm9y IGNvZGUgZXhpc3RzIGFuZCB0aGUgZnVuY3Rpb24KLSsgKiBuYW1lIGlzIHRvIGtlZXAgdGhlIGVy cm9yIGNoZWNraW5nIHNjcmlwdCBxdWlldAotKyAqLwotK3ZvaWQgaGFzaF9maW5hbCh2b2lkKQot Kwl7Ci0rCUZJUFNlcnIoRklQU19GX0hBU0hfRklOQUwsRklQU19SX05PTl9GSVBTX01FVEhPRCk7 Ci0rCX0KLSsjZW5kaWYKLSsKLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlw cy9maXBzX2NtYWNfc2VsZnRlc3QuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjU5Nzg1NTkx ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0 LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTk3ODU1OTEgKzAyMDAKLUBAIC0wLDAgKzEsMTYxIEBA Ci0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAq Ci0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJp YnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsg KgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9jbWFjLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rCWludCBuaWQ7Ci0rCWNvbnN0IHVu c2lnbmVkIGNoYXIga2V5W0VWUF9NQVhfS0VZX0xFTkdUSF07IHNpemVfdCBrZXlzaXplOwotKwlj b25zdCB1bnNpZ25lZCBjaGFyIG1zZ1s2NF07IHNpemVfdCBtc2dzaXplOwotKwljb25zdCB1bnNp Z25lZCBjaGFyIG1hY1szMl07IHNpemVfdCBtYWNzaXplOwotK30gQ01BQ19LQVQ7Ci0rCi0rLyog ZnJvbSBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvbmlzdHB1YnMvODAwLTM4Qi9T UF84MDAtMzhCLnBkZiAqLwotK3N0YXRpYyBjb25zdCBDTUFDX0tBVCB2ZWN0b3JbXSA9IHsKLSsg ICAgewlOSURfYWVzXzEyOF9jYmMsCS8qIENvdW50ID0gMzIgZnJvbSBDTUFDR2VuQUVTMTI4LnR4 dCAqLwotKwl7IDB4NzcsMHhhNywweDdmLDB4YWYsIDB4MjksMHgwYywweDFmLDB4YTMsCi0rCSAg MHgwYywweDY4LDB4M2QsMHhmMSwgMHg2YiwweGE3LDB4YTcsMHg3YiwgfSwgMTI4LAotKwl7IDB4 MDIsMHgwNiwweDgzLDB4ZTEsIDB4ZjAsMHgzOSwweDJmLDB4NGMsCi0rCSAgMHhhYywweDU0LDB4 MzEsMHg4YiwgMHg2MCwweDI5LDB4MjUsMHg5ZSwKLSsJICAweDljLDB4NTUsMHgzZCwweGJjLCAw eDRiLDB4NmEsMHhkOSwweDk4LAotKwkgIDB4ZTYsMHg0ZCwweDU4LDB4ZTQsIDB4ZTcsMHhkYyww eDJlLDB4MTMsIH0sIDI1NiwKLSsJeyAweGZiLDB4ZmUsMHhhNCwweDFiLCB9LCAzMgotKyAgICB9 LAotKyAgICB7CU5JRF9hZXNfMTkyX2NiYywJLyogQ291bnQgPSAyMyBmcm9tIENNQUNHZW5BRVMx OTIudHh0ICovCi0rCXsgMHg3YiwweDMyLDB4MzksMHgxMywgMHg2OSwweGFhLDB4NGMsMHhhOSwK LSsJICAweDc1LDB4NTgsMHgwOSwweDViLCAweGUzLDB4YzMsMHhlYywweDg2LAotKwkgIDB4MmIs MHhkMCwweDU3LDB4Y2UsIDB4ZjEsMHhlMywweDJkLDB4NjIsIH0sIDE5MiwKLSsJeyAweDAgfSwg MCwKLSsJeyAweGU0LDB4ZDksMHgzNCwweDBiLCAweDAzLDB4ZTYsMHg3ZCwweGVmLAotKwkgIDB4 ZDQsMHg5NiwweDljLDB4YzEsIDB4ZWQsMHgzNywweDM1LDB4ZTYsIH0sIDEyOCwKLSsgICAgfSwK LSsgICAgewlOSURfYWVzXzI1Nl9jYmMsCS8qIENvdW50ID0gMzMgZnJvbSBDTUFDR2VuQUVTMjU2 LnR4dCAqLwotKwl7IDB4MGIsMHgxMiwweDJhLDB4YzgsIDB4ZjMsMHg0ZSwweGQxLDB4ZmUsCi0r CSAgMHgwOCwweDJhLDB4MzYsMHgyNSwgMHhkMSwweDU3LDB4NTYsMHgxNCwKLSsJICAweDU0LDB4 MTYsMHg3YSwweGMxLCAweDQ1LDB4YTEsMHgwYiwweGJmLAotKwkgIDB4NzcsMHhjNiwweGE3LDB4 MDUsIDB4OTYsMHhkNSwweDc0LDB4ZjEsIH0sIDI1NiwKLSsJeyAweDQ5LDB4OGIsMHg1MywweGZk LCAweGVjLDB4ODcsMHhlZCwweGNiLAotKwkgIDB4ZjAsMHg3MCwweDk3LDB4ZGMsIDB4Y2QsMHhl OSwweDNhLDB4MDgsCi0rCSAgMHg0YiwweGFkLDB4NzUsMHgwMSwgMHhhMiwweDI0LDB4ZTMsMHg4 OCwKLSsJICAweGRmLDB4MzQsMHg5YywweGUxLCAweDg5LDB4NTksMHhmZSwweDg0LAotKwkgIDB4 ODUsMHhmOCwweGFkLDB4MTUsIDB4MzcsMHhmMCwweGQ4LDB4OTYsCi0rCSAgMHhlYSwweDczLDB4 YmUsMHhkYywgMHg3MiwweDE0LDB4NzEsMHgzZiwgfSwgMzg0LAotKwl7IDB4ZjYsMHgyYywweDQ2 LDB4MzIsIDB4OWIsIH0sIDQwLAotKyAgICB9LAotKyAgICB7CU5JRF9kZXNfZWRlM19jYmMsCS8q IENvdW50ID0gNDEgZnJvbSBDTUFDR2VuVERFUzMucmVxICovCi0rCXsgMHg4OSwweGJjLDB4ZDks MHg1MiwgMHhhOCwweGM4LDB4YWIsMHgzNywKLSsJICAweDFhLDB4ZjQsMHg4YSwweGM3LCAweGQw LDB4NzAsMHg4NSwweGQ1LAotKwkgIDB4ZWYsMHhmNywweDAyLDB4ZTYsIDB4ZDYsMHgyYywweGRj LDB4MjMsIH0sIDE5MiwKLSsJeyAweGZhLDB4NjIsMHgwYywweDFiLCAweGJlLDB4OTcsMHgzMSww eDllLAotKwkgIDB4OWEsMHgwYywweGYwLDB4NDksIDB4MjEsMHgyMSwweGY3LDB4YTIsCi0rCSAg MHgwZSwweGIwLDB4OGEsMHg2YSwgMHg3MCwweDlkLDB4Y2IsMHhkMCwKLSsJICAweDBhLDB4YWYs MHgzOCwweGU0LCAweGY5LDB4OWUsMHg3NSwweDRlLCB9LCAyNTYsCi0rCXsgMHg4ZiwweDQ5LDB4 YTEsMHhiNywgMHhkNiwweGFhLDB4MjIsMHg1OCwgfSwgNjQsCi0rICAgIH0sCi0rfTsKLSsKLStp bnQgRklQU19zZWxmdGVzdF9jbWFjKCkKLSsJewotKwlzaXplX3Qgbiwgb3V0bGVuOwotKwl1bnNp Z25lZCBjaGFyICAgIG91dFszMl07Ci0rCWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlcjsKLSsJQ01B Q19DVFggKmN0eCA9IENNQUNfQ1RYX25ldygpOwotKwljb25zdCBDTUFDX0tBVCAqdDsKLSsJaW50 IHJ2ID0gMTsKLSsKLSsJZm9yKG49MCx0PXZlY3RvcjsgbjxzaXplb2YodmVjdG9yKS9zaXplb2Yo dmVjdG9yWzBdKTsgbisrLHQrKykKLSsJCXsKLSsJCWNpcGhlciA9IEZJUFNfZ2V0X2NpcGhlcmJ5 bmlkKHQtPm5pZCk7Ci0rCQlpZiAoIWNpcGhlcikKLSsJCQl7Ci0rCQkJcnYgPSAtMTsKLSsJCQln b3RvIGVycjsKLSsJCQl9Ci0rCQlpZiAoIUNNQUNfSW5pdChjdHgsIHQtPmtleSwgdC0+a2V5c2l6 ZS84LCBjaXBoZXIsIDApKQotKwkJCXsKLSsJCQlydiA9IC0xOwotKwkJCWdvdG8gZXJyOwotKwkJ CX0KLSsJCWlmICghQ01BQ19VcGRhdGUoY3R4LCB0LT5tc2csIHQtPm1zZ3NpemUvOCkpCi0rCQkJ ewotKwkJCXJ2ID0gLTE7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwkJCQotKwkJaWYgKCFDTUFD X0ZpbmFsKGN0eCwgb3V0LCAmb3V0bGVuKSkKLSsJCQl7Ci0rCQkJcnYgPSAtMTsKLSsJCQlnb3Rv IGVycjsKLSsJCQl9Ci0rCQlDTUFDX0NUWF9jbGVhbnVwKGN0eCk7Ci0rCi0rCQlpZihvdXRsZW4g PCB0LT5tYWNzaXplLzggfHwgbWVtY21wKG91dCx0LT5tYWMsdC0+bWFjc2l6ZS84KSkKLSsJCQl7 Ci0rCQkgICAgCXJ2ID0gMDsKLSsJCSAgICAJfQotKwkJfQotKwotKwllcnI6Ci0rCUNNQUNfQ1RY X2ZyZWUoY3R4KTsKLSsKLSsJaWYgKHJ2ID09IC0xKQotKwkJewotKwkJcnYgPSAwOwotKwkJfQot KwlpZiAoIXJ2KQotKwkJICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9DTUFDLEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOwotKwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsjZW5kaWYKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcyBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jCi0tLS0gb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYy5maXBzCTIwMTItMDQtMjAg MDk6MDc6MDYuMjU5Nzg1NTkxICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMv Zmlwc19kZXNfc2VsZnRlc3QuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1OTc4NTU5MSArMDIwMAot QEAgLTAsMCArMSwxNDcgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAw MyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3Bl bnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgY29uc3Qgc3RydWN0Ci0rICAgIHsKLSsgICAgY29u c3QgdW5zaWduZWQgY2hhciBrZXlbMTZdOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWlu dGV4dFs4XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwotKyAgICB9 IHRlc3RzMltdPQotKwl7Ci0rCXsKLSsJeyAweDdjLDB4NGYsMHg2ZSwweGY3LDB4YTIsMHgwNCww eDE2LDB4ZWMsCi0rCSAgMHgwYiwweDZiLDB4N2MsMHg5ZSwweDVlLDB4MTksMHhhNywweGM0IH0s Ci0rCXsgMHgwNiwweGE3LDB4ZDgsMHg3OSwweGFhLDB4Y2UsMHg2OSwweGVmIH0sCi0rCXsgMHg0 YywweDExLDB4MTcsMHg1NSwweGJmLDB4YzQsMHg0ZSwweGZkIH0KLSsJfSwKLSsJewotKwl7IDB4 NWQsMHg5ZSwweDAxLDB4ZDMsMHgyNSwweGM3LDB4M2UsMHgzNCwKLSsJICAweDAxLDB4MTYsMHg3 YywweDg1LDB4MjMsMHhkZiwweGUwLDB4NjggfSwKLSsJeyAweDljLDB4NTAsMHgwOSwweDBmLDB4 NWUsMHg3ZCwweDY5LDB4N2UgfSwKLSsJeyAweGQyLDB4MGIsMHgxOCwweGRmLDB4ZDksMHgwZCww eDllLDB4ZmYgfSwKLSsJfQotKwl9OwotKwotK3N0YXRpYyBjb25zdCBzdHJ1Y3QKLSsgICAgewot KyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsyNF07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgcGxhaW50ZXh0WzhdOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07 Ci0rICAgIH0gdGVzdHMzW109Ci0rCXsKLSsJewotKwl7IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwKLSsJICAweEZFLDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMy LDB4MTAsCi0rCSAgMHgxMiwweDM0LDB4NTYsMHg3OCwweDlhLDB4YmMsMHhkZSwweGYwIH0sCi0r CXsgMHg4ZiwweDhmLDB4YmYsMHg5YiwweDVkLDB4NDgsMHhiNCwweDFjIH0sCi0rCXsgMHg1OSww eDhjLDB4ZTUsMHhkMywweDZjLDB4YTIsMHhlYSwweDFiIH0sCi0rCX0sCi0rCXsKLSsJeyAweERD LDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLDB4RkUsCi0rCSAgMHgwMSwweDIzLDB4NDUs MHg2NywweDg5LDB4QUIsMHhDRCwweEVGLAotKwkgIDB4RUQsMHgzOSwweEQ5LDB4NTAsMHhGQSww eDc0LDB4QkMsMHhDNCB9LAotKwl7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0Qs MHhFRiB9LAotKwl7IDB4MTEsMHgyNSwweGIwLDB4MzUsMHhiZSwweGEwLDB4ODIsMHg4NiB9LAot Kwl9LAotKwl9OwotKwotKwotK3N0YXRpYyBpbnQgY29ycnVwdF9kZXM7Ci0rCi0rdm9pZCBGSVBT X2NvcnJ1cHRfZGVzKCkKLSsgICAgewotKyAgICBjb3JydXB0X2RlcyA9IDE7Ci0rICAgIH0KLSsK LStpbnQgRklQU19zZWxmdGVzdF9kZXMoKQotKyAgICB7Ci0rICAgIGludCBuLCByZXQgPSAwOwot KyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7 Ci0rICAgIC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDIta2V5IDNERVMgYW5kIGNvbXBhcmUgdG8g a25vd24gYW5zd2VycyAqLwotKyAgICBmb3Iobj0wIDsgbiA8IDIgOyArK24pCi0rCXsKLSsJdW5z aWduZWQgY2hhciBwbGFpbnRleHRbOF07Ci0rCi0rCW1lbWNweShwbGFpbnRleHQsIHRlc3RzMltu XS5wbGFpbnRleHQsIHNpemVvZihwbGFpbnRleHQpKTsKLSsJaWYgKGNvcnJ1cHRfZGVzKQotKwkJ cGxhaW50ZXh0WzBdKys7Ci0rCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2Vk ZV9lY2IoKSwKLSsJCQkJdGVzdHMyW25dLmtleSwgTlVMTCwKLSsJCQkJcGxhaW50ZXh0LCB0ZXN0 czJbbl0uY2lwaGVydGV4dCwgOCkpCi0rCQlnb3RvIGVycjsKLSsJfQotKwotKyAgICAvKiBFbmNy eXB0L2RlY3J5cHQgd2l0aCAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KLSsg ICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQotKwl7Ci0rCWlmICghZmlwc19jaXBoZXJfdGVzdCgm Y3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksCi0rCQkJCXRlc3RzM1tuXS5rZXksIE5VTEwsCi0rCQkJ CXRlc3RzM1tuXS5wbGFpbnRleHQsIHRlc3RzM1tuXS5jaXBoZXJ0ZXh0LCA4KSkKLSsJCWdvdG8g ZXJyOwotKwl9Ci0rICAgIHJldCA9IDE7Ci0rICAgIGVycjoKLSsgICAgRVZQX0NJUEhFUl9DVFhf Y2xlYW51cCgmY3R4KTsKLSsgICAgaWYgKHJldCA9PSAwKQotKwkgICAgRklQU2VycihGSVBTX0Zf RklQU19TRUxGVEVTVF9ERVMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCi0rICAgIHJldHVy biByZXQ7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19jdHIuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19jdHIuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIu Yy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjYwNzg1NjEzICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjYw Nzg1NjEzICswMjAwCi1AQCAtMCwwICsxLDQzNiBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdf Y3RyLmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5z c2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJl IG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgot KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdA T3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAq ICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up Ci0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K LSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRl ICJmaXBzX3JhbmRfbGNsLmgiCi0rCi0rc3RhdGljIHZvaWQgaW5jXzEyOChEUkJHX0NUUl9DVFgg KmNjdHgpCi0rCXsKLSsJaW50IGk7Ci0rCXVuc2lnbmVkIGNoYXIgYzsKLSsJdW5zaWduZWQgY2hh ciAqcCA9IGNjdHgtPlYgKyAxNTsKLSsJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0rCQl7Ci0r CQljID0gKnA7Ci0rCQljKys7Ci0rCQkqcCA9IGM7Ci0rCQlpZiAoYykKLSsJCQlyZXR1cm47Ci0r CQlwLS07Ci0rCQl9Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBjdHJfWE9SKERSQkdfQ1RSX0NUWCAq Y2N0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikKLSsJewotKwlzaXpl X3QgaSwgbjsKLSsJLyogQW55IHplcm8gcGFkZGluZyB3aWxsIGhhdmUgbm8gZWZmZWN0IG9uIHRo ZSByZXN1bHQgYXMgd2UKLSsJICogYXJlIFhPUmluZy4gU28ganVzdCBwcm9jZXNzIGhvd2V2ZXIg bXVjaCBpbnB1dCB3ZSBoYXZlLgotKwkgKi8KLSsKLSsJaWYgKCFpbiB8fCAhaW5sZW4pCi0rCQly ZXR1cm47Ci0rCi0rCWlmIChpbmxlbiA8IGNjdHgtPmtleWxlbikKLSsJCW4gPSBpbmxlbjsKLSsJ ZWxzZQotKwkJbiA9IGNjdHgtPmtleWxlbjsKLSsKLSsJZm9yIChpID0gMDsgaSA8IG47IGkrKykK LSsJCWNjdHgtPktbaV0gXj0gaW5baV07Ci0rCWlmIChpbmxlbiA8PSBjY3R4LT5rZXlsZW4pCi0r CQlyZXR1cm47Ci0rCi0rCW4gPSBpbmxlbiAtIGNjdHgtPmtleWxlbjsKLSsJLyogU2hvdWxkIG5l dmVyIGhhcHBlbiAqLwotKwlpZiAobiA+IDE2KQotKwkJbiA9IDE2OwotKwlmb3IgKGkgPSAwOyBp IDwgMTY7IGkrKykKLSsJCWNjdHgtPlZbaV0gXj0gaW5baSArIGNjdHgtPmtleWxlbl07Ci0rCX0K LSsKLSsvKiBQcm9jZXNzIGEgY29tcGxldGUgYmxvY2sgdXNpbmcgQkNDIGFsZ29yaXRobSBvZiBT UFAgODAwLTkwIDEwLjQuMyAqLwotKwotK3N0YXRpYyB2b2lkIGN0cl9CQ0NfYmxvY2soRFJCR19D VFJfQ1RYICpjY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmluKQotKwl7Ci0rCWludCBpOwotKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLSsJCW91 dFtpXSBePSBpbltpXTsKLSsJQUVTX2VuY3J5cHQob3V0LCBvdXQsICZjY3R4LT5kZl9rcyk7Ci0r I2lmIDAKLStmcHJpbnRmKHN0ZGVyciwgIkJDQyBpbitvdXRcbiIpOwotK0JJT19kdW1wX2ZwKHN0 ZGVyciwgaW4sIDE2KTsKLStCSU9fZHVtcF9mcChzdGRlcnIsIG91dCwgMTYpOwotKyNlbmRpZgot Kwl9Ci0rCi0rLyogSGFuZGxlIHNldmVyYWwgQkNDIG9wZXJhdGlvbnMgZm9yIGFzIG11Y2ggZGF0 YSBhcyB3ZSBuZWVkIGZvciBLIGFuZCBYICovCi0rc3RhdGljIHZvaWQgY3RyX0JDQ19ibG9ja3Mo RFJCR19DVFJfQ1RYICpjY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbikKLSsJewotKwljdHJf QkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYLCBpbik7Ci0rCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0 eC0+S1ggKyAxNiwgaW4pOwotKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQotKwkJY3RyX0JDQ19i bG9jayhjY3R4LCBjY3R4LT5LWCArIDMyLCBpbik7Ci0rCX0KLSsvKiBJbml0aWFsaXNlIEJDQyBi bG9ja3M6IHRoZXNlIGhhdmUgdGhlIHZhbHVlIDAsMSwyIGluIGxlZnRtb3N0IHBvc2l0aW9uczoK LSsgKiBzZWUgMTAuNC4yIHN0YWdlIDcuCi0rICovCi0rc3RhdGljIHZvaWQgY3RyX0JDQ19pbml0 KERSQkdfQ1RSX0NUWCAqY2N0eCkKLSsJewotKwltZW1zZXQoY2N0eC0+S1gsIDAsIDQ4KTsKLSsJ bWVtc2V0KGNjdHgtPmJsdG1wLCAwLCAxNik7Ci0rCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+ S1gsIGNjdHgtPmJsdG1wKTsKLSsJY2N0eC0+Ymx0bXBbM10gPSAxOwotKwljdHJfQkNDX2Jsb2Nr KGNjdHgsIGNjdHgtPktYICsgMTYsIGNjdHgtPmJsdG1wKTsKLSsJaWYgKGNjdHgtPmtleWxlbiAh PSAxNikKLSsJCXsKLSsJCWNjdHgtPmJsdG1wWzNdID0gMjsKLSsJCWN0cl9CQ0NfYmxvY2soY2N0 eCwgY2N0eC0+S1ggKyAzMiwgY2N0eC0+Ymx0bXApOwotKwkJfQotKwl9Ci0rCi0rLyogUHJvY2Vz cyBzZXZlcmFsIGJsb2NrcyBpbnRvIEJDQyBhbGdvcml0aG0sIHNvbWUgcG9zc2libHkgcGFydGlh bCAqLwotK3N0YXRpYyB2b2lkIGN0cl9CQ0NfdXBkYXRlKERSQkdfQ1RSX0NUWCAqY2N0eCwKLSsJ CQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikKLSsJewotKwlpZiAoIWlu IHx8ICFpbmxlbikKLSsJCXJldHVybjsKLSsJLyogSWYgd2UgaGF2ZSBwYXJ0aWFsIGJsb2NrIGhh bmRsZSBpdCBmaXJzdCAqLwotKwlpZiAoY2N0eC0+Ymx0bXBfcG9zKQotKwkJewotKwkJc2l6ZV90 IGxlZnQgPSAxNiAtIGNjdHgtPmJsdG1wX3BvczsKLSsJCS8qIElmIHdlIG5vdyBoYXZlIGEgY29t cGxldGUgYmxvY2sgcHJvY2VzcyBpdCAqLwotKwkJaWYgKGlubGVuID49IGxlZnQpCi0rCQkJewot KwkJCW1lbWNweShjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgaW4sIGxlZnQpOwotKwkJ CWN0cl9CQ0NfYmxvY2tzKGNjdHgsIGNjdHgtPmJsdG1wKTsKLSsJCQljY3R4LT5ibHRtcF9wb3Mg PSAwOwotKwkJCWlubGVuIC09IGxlZnQ7Ci0rCQkJaW4gKz0gbGVmdDsKLSsJCQl9Ci0rCQl9Ci0r CS8qIFByb2Nlc3MgemVybyBvciBtb3JlIGNvbXBsZXRlIGJsb2NrcyAqLwotKwl3aGlsZSAoaW5s ZW4gPj0gMTYpCi0rCQl7Ci0rCQljdHJfQkNDX2Jsb2NrcyhjY3R4LCBpbik7Ci0rCQlpbiArPSAx NjsKLSsJCWlubGVuIC09IDE2OwotKwkJfQotKwkvKiBDb3B5IGFueSByZW1haW5pbmcgcGFydGlh bCBibG9jayB0byB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciAqLwotKwlpZiAoaW5sZW4gPiAwKQotKwkJ ewotKwkJbWVtY3B5KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCBpbiwgaW5sZW4pOwot KwkJY2N0eC0+Ymx0bXBfcG9zICs9IGlubGVuOwotKwkJfQotKwl9Ci0rCi0rc3RhdGljIHZvaWQg Y3RyX0JDQ19maW5hbChEUkJHX0NUUl9DVFggKmNjdHgpCi0rCXsKLSsJaWYgKGNjdHgtPmJsdG1w X3BvcykKLSsJCXsKLSsJCW1lbXNldChjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgMCwg MTYgLSBjY3R4LT5ibHRtcF9wb3MpOwotKwkJY3RyX0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+Ymx0 bXApOwotKwkJfQotKwl9Ci0rCi0rc3RhdGljIHZvaWQgY3RyX2RmKERSQkdfQ1RSX0NUWCAqY2N0 eCwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCi0rCQkJY29u c3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAotKwkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmluMywgc2l6ZV90IGluM2xlbikKLSsJewotKwlzaXplX3QgaW5sZW47Ci0rCXVuc2ln bmVkIGNoYXIgKnAgPSBjY3R4LT5ibHRtcDsKLSsJc3RhdGljIHVuc2lnbmVkIGNoYXIgYzgwID0g MHg4MDsKLSsKLSsJY3RyX0JDQ19pbml0KGNjdHgpOwotKwlpZiAoIWluMSkKLSsJCWluMWxlbiA9 IDA7Ci0rCWlmICghaW4yKQotKwkJaW4ybGVuID0gMDsKLSsJaWYgKCFpbjMpCi0rCQlpbjNsZW4g PSAwOwotKwlpbmxlbiA9IGluMWxlbiArIGluMmxlbiArIGluM2xlbjsKLSsJLyogSW5pdGlhbGlz ZSBMfHxOIGluIHRlbXBvcmFyeSBibG9jayAqLwotKwkqcCsrID0gKGlubGVuID4+IDI0KSAmIDB4 ZmY7Ci0rCSpwKysgPSAoaW5sZW4gPj4gMTYpICYgMHhmZjsKLSsJKnArKyA9IChpbmxlbiA+PiA4 KSAmIDB4ZmY7Ci0rCSpwKysgPSBpbmxlbiAmIDB4ZmY7Ci0rCS8qIE5CIGtleWxlbiBpcyBhdCBt b3N0IDMyIGJ5dGVzICovCi0rCSpwKysgPSAwOwotKwkqcCsrID0gMDsKLSsJKnArKyA9IDA7Ci0r CSpwID0gKHVuc2lnbmVkIGNoYXIpKChjY3R4LT5rZXlsZW4gKyAxNikgJiAweGZmKTsKLSsJY2N0 eC0+Ymx0bXBfcG9zID0gODsKLSsJY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4xLCBpbjFsZW4pOwot KwljdHJfQkNDX3VwZGF0ZShjY3R4LCBpbjIsIGluMmxlbik7Ci0rCWN0cl9CQ0NfdXBkYXRlKGNj dHgsIGluMywgaW4zbGVuKTsKLSsJY3RyX0JDQ191cGRhdGUoY2N0eCwgJmM4MCwgMSk7Ci0rCWN0 cl9CQ0NfZmluYWwoY2N0eCk7Ci0rCS8qIFNldCB1cCBrZXkgSyAqLwotKwlBRVNfc2V0X2VuY3J5 cHRfa2V5KGNjdHgtPktYLCBjY3R4LT5rZXlsZW4gKiA4LCAmY2N0eC0+ZGZfa3hrcyk7Ci0rCS8q IFggZm9sbG93cyBrZXkgSyAqLwotKwlBRVNfZW5jcnlwdChjY3R4LT5LWCArIGNjdHgtPmtleWxl biwgY2N0eC0+S1gsICZjY3R4LT5kZl9reGtzKTsKLSsJQUVTX2VuY3J5cHQoY2N0eC0+S1gsIGNj dHgtPktYICsgMTYsICZjY3R4LT5kZl9reGtzKTsKLSsJaWYgKGNjdHgtPmtleWxlbiAhPSAxNikK LSsJCUFFU19lbmNyeXB0KGNjdHgtPktYICsgMTYsIGNjdHgtPktYICsgMzIsICZjY3R4LT5kZl9r eGtzKTsKLSsjaWYgMAotK2ZwcmludGYoc3RkZXJyLCAiT3V0cHV0IG9mIGN0cl9kZjpcbiIpOwot K0JJT19kdW1wX2ZwKHN0ZGVyciwgY2N0eC0+S1gsIGNjdHgtPmtleWxlbiArIDE2KTsKLSsjZW5k aWYKLSsJfQotKwotKy8qIE5CIHRoZSBuby1kZiAgVXBkYXRlIGluIFNQODAwLTkwIHNwZWNpZmll cyBhIGNvbnN0YW50IGlucHV0IGxlbmd0aAotKyAqIG9mIHNlZWRsZW4sIGhvd2V2ZXIgb3RoZXIg dXNlcyBvZiB0aGlzIGFsZ29yaXRobSBwYWQgdGhlIGlucHV0IHdpdGgKLSsgKiB6ZXJvZXMgaWYg bmVjZXNzYXJ5IGFuZCBoYXZlIHVwIHRvIHR3byBwYXJhbWV0ZXJzIFhPUmVkIHRvZ2V0aGVyLAot KyAqIGhhbmRsZSBib3RoIGNhc2VzIGluIHRoaXMgZnVuY3Rpb24gaW5zdGVhZC4KLSsgKi8KLSsK LStzdGF0aWMgdm9pZCBjdHJfVXBkYXRlKERSQkdfQ1RYICpkY3R4LAotKwkJY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAotKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4y LCBzaXplX3QgaW4ybGVuLAotKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBu b25jZWxlbikKLSsJewotKwlEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7Ci0rCS8q IGtzIGlzIGFscmVhZHkgc2V0dXAgZm9yIGNvcnJlY3Qga2V5ICovCi0rCWluY18xMjgoY2N0eCk7 Ci0rCUFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPkssICZjY3R4LT5rcyk7Ci0rCS8qIElmIGtl eWxlbiBsb25nZXIgdGhhbiAxMjggYml0cyBuZWVkIGV4dHJhIGVuY3J5cHQgKi8KLSsJaWYgKGNj dHgtPmtleWxlbiAhPSAxNikKLSsJCXsKLSsJCWluY18xMjgoY2N0eCk7Ci0rCQlBRVNfZW5jcnlw dChjY3R4LT5WLCBjY3R4LT5LICsgMTYsICZjY3R4LT5rcyk7Ci0rCQl9Ci0rCWluY18xMjgoY2N0 eCk7Ci0rCUFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPlYsICZjY3R4LT5rcyk7Ci0rCS8qIElm IDE5MiBiaXQga2V5IHBhcnQgb2YgViBpcyBvbiBlbmQgb2YgSyAqLwotKwlpZiAoY2N0eC0+a2V5 bGVuID09IDI0KQotKwkJewotKwkJbWVtY3B5KGNjdHgtPlYgKyA4LCBjY3R4LT5WLCA4KTsKLSsJ CW1lbWNweShjY3R4LT5WLCBjY3R4LT5LICsgMjQsIDgpOwotKwkJfQotKwotKwlpZiAoZGN0eC0+ eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYpCi0rCQl7Ci0rCQkvKiBJZiBubyBpbnB1dCBy ZXVzZSBleGlzdGluZyBkZXJpdmVkIHZhbHVlICovCi0rCQlpZiAoaW4xIHx8IG5vbmNlIHx8IGlu MikKLSsJCQljdHJfZGYoY2N0eCwgaW4xLCBpbjFsZW4sIG5vbmNlLCBub25jZWxlbiwgaW4yLCBp bjJsZW4pOwotKwkJLyogSWYgdGhpcyBhIHJldXNlIGlucHV0IGluMWxlbiAhPSAwICovCi0rCQlp ZiAoaW4xbGVuKQotKwkJCWN0cl9YT1IoY2N0eCwgY2N0eC0+S1gsIGRjdHgtPnNlZWRsZW4pOwot KwkJfQotKwllbHNlCi0rCQl7Ci0rCQljdHJfWE9SKGNjdHgsIGluMSwgaW4xbGVuKTsKLSsJCWN0 cl9YT1IoY2N0eCwgaW4yLCBpbjJsZW4pOwotKwkJfQotKwotKwlBRVNfc2V0X2VuY3J5cHRfa2V5 KGNjdHgtPkssIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+a3MpOwotKyNpZiAwCi0rZnByaW50Zihz dGRlcnIsICJLK1YgYWZ0ZXIgdXBkYXRlIGlzOlxuIik7Ci0rQklPX2R1bXBfZnAoc3RkZXJyLCBj Y3R4LT5LLCBjY3R4LT5rZXlsZW4pOwotK0JJT19kdW1wX2ZwKHN0ZGVyciwgY2N0eC0+ViwgMTYp OwotKyNlbmRpZgotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2N0cl9pbnN0YW50aWF0ZShEUkJH X0NUWCAqZGN0eCwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4s Ci0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbiwKLSsJCQlj b25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbikKLSsJewotKwlEUkJHX0NU Ul9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7Ci0rCW1lbXNldChjY3R4LT5LLCAwLCBzaXplb2Yo Y2N0eC0+SykpOwotKwltZW1zZXQoY2N0eC0+ViwgMCwgc2l6ZW9mKGNjdHgtPlYpKTsKLSsJQUVT X3NldF9lbmNyeXB0X2tleShjY3R4LT5LLCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgtPmtzKTsKLSsJ Y3RyX1VwZGF0ZShkY3R4LCBlbnQsIGVudGxlbiwgcGVycywgcGVyc2xlbiwgbm9uY2UsIG5vbmNl bGVuKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfY3RyX3Jlc2VlZChE UkJHX0NUWCAqZGN0eCwgCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50 bGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotKwl7 Ci0rCWN0cl9VcGRhdGUoZGN0eCwgZW50LCBlbnRsZW4sIGFkaW4sIGFkaW5sZW4sIE5VTEwsIDAp OwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19jdHJfZ2VuZXJhdGUoRFJC R19DVFggKmRjdHgsCi0rCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAotKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotKwl7Ci0rCURSQkdf Q1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKLSsJaWYgKGFkaW4gJiYgYWRpbmxlbikKLSsJ CXsKLSsJCWN0cl9VcGRhdGUoZGN0eCwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7 Ci0rCQkvKiBUaGlzIG1lYW5zIHdlIHJldXNlIGRlcml2ZWQgdmFsdWUgKi8KLSsJCWlmIChkY3R4 LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKLSsJCQl7Ci0rCQkJYWRpbiA9IE5VTEw7 Ci0rCQkJYWRpbmxlbiA9IDE7Ci0rCQkJfQotKwkJfQotKwllbHNlCi0rCQlhZGlubGVuID0gMDsK LSsKLSsJZm9yICg7OykKLSsJCXsKLSsJCWluY18xMjgoY2N0eCk7Ci0rCQlpZiAoIShkY3R4LT54 ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQotKwkJCXsKLSsJCQlB RVNfZW5jcnlwdChjY3R4LT5WLCBkY3R4LT5sYiwgJmNjdHgtPmtzKTsKLSsJCQlkY3R4LT5sYl92 YWxpZCA9IDE7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwkJaWYgKG91dGxlbiA8IDE2KQotKwkJ CXsKLSsJCQkvKiBVc2UgSyBhcyB0ZW1wIHNwYWNlIGFzIGl0IHdpbGwgYmUgdXBkYXRlZCAqLwot KwkJCUFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPkssICZjY3R4LT5rcyk7Ci0rCQkJaWYgKCFm aXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBjY3R4LT5LKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJ bWVtY3B5KG91dCwgY2N0eC0+Sywgb3V0bGVuKTsKLSsJCQlicmVhazsKLSsJCQl9Ci0rCQlBRVNf ZW5jcnlwdChjY3R4LT5WLCBvdXQsICZjY3R4LT5rcyk7Ci0rCQlpZiAoIWZpcHNfZHJiZ19jcHJu Z190ZXN0KGRjdHgsIG91dCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlvdXQgKz0gMTY7Ci0rCQlvdXRs ZW4gLT0gMTY7Ci0rCQlpZiAob3V0bGVuID09IDApCi0rCQkJYnJlYWs7Ci0rCQl9Ci0rCi0rCWN0 cl9VcGRhdGUoZGN0eCwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7Ci0rCi0rCXJl dHVybiAxOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2N0cl91bmluc3RhbnRpYXRlKERS QkdfQ1RYICpkY3R4KQotKwl7Ci0rCW1lbXNldCgmZGN0eC0+ZC5jdHIsIDAsIHNpemVvZihEUkJH X0NUUl9DVFgpKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZmlwc19kcmJnX2N0cl9pbml0 KERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0 cjsKLSsKLSsJc2l6ZV90IGtleWxlbjsKLSsKLSsJc3dpdGNoIChkY3R4LT50eXBlKQotKwkJewot KwkJY2FzZSBOSURfYWVzXzEyOF9jdHI6Ci0rCQlrZXlsZW4gPSAxNjsKLSsJCWJyZWFrOwotKwot KwkJY2FzZSBOSURfYWVzXzE5Ml9jdHI6Ci0rCQlrZXlsZW4gPSAyNDsKLSsJCWJyZWFrOwotKwot KwkJY2FzZSBOSURfYWVzXzI1Nl9jdHI6Ci0rCQlrZXlsZW4gPSAzMjsKLSsJCWJyZWFrOwotKwot KwkJZGVmYXVsdDoKLSsJCXJldHVybiAtMjsKLSsJCX0KLSsKLSsJZGN0eC0+aW5zdGFudGlhdGUg PSBkcmJnX2N0cl9pbnN0YW50aWF0ZTsKLSsJZGN0eC0+cmVzZWVkID0gZHJiZ19jdHJfcmVzZWVk OwotKwlkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfY3RyX2dlbmVyYXRlOwotKwlkY3R4LT51bmluc3Rh bnRpYXRlID0gZHJiZ19jdHJfdW5pbnN0YW50aWF0ZTsKLSsKLSsJY2N0eC0+a2V5bGVuID0ga2V5 bGVuOwotKwlkY3R4LT5zdHJlbmd0aCA9IGtleWxlbiAqIDg7Ci0rCWRjdHgtPmJsb2NrbGVuZ3Ro ID0gMTY7Ci0rCWRjdHgtPnNlZWRsZW4gPSBrZXlsZW4gKyAxNjsKLSsKLSsJaWYgKGRjdHgtPnhm bGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKQotKwkJewotKwkJLyogZGYgaW5pdGlhbGlzYXRp b24gKi8KLSsJCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRmX2tleVszMl0gPQotKwkJCXsKLSsJCQkw eDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsCi0rCQkJMHgwOCwweDA5LDB4 MGEsMHgwYiwweDBjLDB4MGQsMHgwZSwweDBmLAotKwkJCTB4MTAsMHgxMSwweDEyLDB4MTMsMHgx NCwweDE1LDB4MTYsMHgxNywKLSsJCQkweDE4LDB4MTksMHgxYSwweDFiLDB4MWMsMHgxZCwweDFl LDB4MWYgCi0rCQkJfTsKLSsJCS8qIFNldCBrZXkgc2NoZWR1bGUgZm9yIGRmX2tleSAqLwotKwkJ QUVTX3NldF9lbmNyeXB0X2tleShkZl9rZXksIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+ZGZfa3Mp OwotKwotKwkJZGN0eC0+bWluX2VudHJvcHkgPSBjY3R4LT5rZXlsZW47Ci0rCQlkY3R4LT5tYXhf ZW50cm9weSA9IERSQkdfTUFYX0xFTkdUSDsKLSsJCWRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1p bl9lbnRyb3B5IC8gMjsKLSsJCWRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsKLSsJ CWRjdHgtPm1heF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOwotKwkJZGN0eC0+bWF4X2FkaW4gPSBE UkJHX01BWF9MRU5HVEg7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWRjdHgtPm1pbl9lbnRyb3B5 ID0gZGN0eC0+c2VlZGxlbjsKLSsJCWRjdHgtPm1heF9lbnRyb3B5ID0gZGN0eC0+c2VlZGxlbjsK LSsJCS8qIE5vbmNlIG5vdCB1c2VkICovCi0rCQlkY3R4LT5taW5fbm9uY2UgPSAwOwotKwkJZGN0 eC0+bWF4X25vbmNlID0gMDsKLSsJCWRjdHgtPm1heF9wZXJzID0gZGN0eC0+c2VlZGxlbjsKLSsJ CWRjdHgtPm1heF9hZGluID0gZGN0eC0+c2VlZGxlbjsKLSsJCX0KLSsKLSsJZGN0eC0+bWF4X3Jl cXVlc3QgPSAxPDwxNjsKLSsJZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMTw8MjQ7Ci0rCi0rCXJl dHVybiAxOwotKwl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2Ry YmdfaGFzaC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2gu YwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMuZmlwcwky MDEyLTA0LTIwIDA5OjA3OjA2LjI2MDc4NTYxMyArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjE3ODU2MzUg KzAyMDAKLUBAIC0wLDAgKzEsMzc4IEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19oYXNoLmMg Ki8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3Jn KSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoK LSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNT TC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqLwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rCi0rI2luY2x1 ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9j cnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLSsvKiBUaGlzIGlz IEhhc2hfZGYgZnJvbSBTUCA4MDAtOTAgMTAuNC4xICovCi0rCi0rc3RhdGljIGludCBoYXNoX2Rm KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0rCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwg c2l6ZV90IGluMmxlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjMsIHNpemVfdCBpbjNs ZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW40LCBzaXplX3QgaW40bGVuKQotKwl7Ci0r CUVWUF9NRF9DVFggKm1jdHggPSAmZGN0eC0+ZC5oYXNoLm1jdHg7Ci0rCXVuc2lnbmVkIGNoYXIg KnZ0bXAgPSBkY3R4LT5kLmhhc2gudnRtcDsKLSsJdW5zaWduZWQgY2hhciB0bXBbNl07Ci0rCS8q IFN0YW5kYXJkIG9ubHkgZXZlciBuZWVkcyBzZWVkbGVuIGJ5dGVzIHdoaWNoIGlzIGFsd2F5cyBs ZXNzIHRoYW4KLSsJICogbWF4aW11bSBwZXJtaXR0ZWQgc28gbm8gbmVlZCB0byBjaGVjayBsZW5n dGguCi0rCSAqLwotKwlzaXplX3Qgb3V0bGVuID0gZGN0eC0+c2VlZGxlbjsKLSsJdG1wWzBdID0g MTsKLSsJdG1wWzFdID0gKChvdXRsZW4gKiA4KSA+PiAyNCkgJiAweGZmOwotKwl0bXBbMl0gPSAo KG91dGxlbiAqIDgpID4+IDE2KSAmIDB4ZmY7Ci0rCXRtcFszXSA9ICgob3V0bGVuICogOCkgPj4g OCkgJiAweGZmOwotKwl0bXBbNF0gPSAob3V0bGVuICogOCkgJiAweGZmOwotKwlpZiAoIWluMSkK LSsJCXsKLSsJCXRtcFs1XSA9ICh1bnNpZ25lZCBjaGFyKWluMWxlbjsKLSsJCWluMSA9IHRtcCAr IDU7Ci0rCQlpbjFsZW4gPSAxOwotKwkJfQotKwlmb3IgKDs7KQotKwkJewotKwkJaWYgKCFGSVBT X2RpZ2VzdGluaXQobWN0eCwgZGN0eC0+ZC5oYXNoLm1kKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlm ICghRklQU19kaWdlc3R1cGRhdGUobWN0eCwgdG1wLCA1KSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlm IChpbjEgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluMSwgaW4xbGVuKSkKLSsJCQlyZXR1 cm4gMDsKLSsJCWlmIChpbjIgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluMiwgaW4ybGVu KSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmIChpbjMgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgs IGluMywgaW4zbGVuKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmIChpbjQgJiYgIUZJUFNfZGlnZXN0 dXBkYXRlKG1jdHgsIGluNCwgaW40bGVuKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmIChvdXRsZW4g PCBkY3R4LT5ibG9ja2xlbmd0aCkKLSsJCQl7Ci0rCQkJaWYgKCFGSVBTX2RpZ2VzdGZpbmFsKG1j dHgsIHZ0bXAsIE5VTEwpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQltZW1jcHkob3V0LCB2dG1wLCBv dXRsZW4pOwotKwkJCU9QRU5TU0xfY2xlYW5zZSh2dG1wLCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0r CQkJcmV0dXJuIDE7Ci0rCQkJfQotKwkJZWxzZSBpZighRklQU19kaWdlc3RmaW5hbChtY3R4LCBv dXQsIE5VTEwpKQotKwkJCXJldHVybiAwOwotKwotKwkJb3V0bGVuIC09IGRjdHgtPmJsb2NrbGVu Z3RoOwotKwkJaWYgKG91dGxlbiA9PSAwKQotKwkJCXJldHVybiAxOwotKwkJdG1wWzBdKys7Ci0r CQlvdXQgKz0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rCQl9Ci0rCX0KLSsKLSsKLSsvKiBBZGQgYW4g dW5zaWduZWQgYnVmZmVyIHRvIHRoZSBidWYgdmFsdWUsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiBi dWYuIEZvcgotKyAqIHRoaXMgYWxnb3JpdGhtIHRoZSBsZW5ndGggb2YgaW5wdXQgbmV2ZXIgZXhj ZWVkcyB0aGUgc2VlZCBsZW5ndGguCi0rICovCi0rCi0rc3RhdGljIHZvaWQgY3R4X2FkZF9idWYo RFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKLSsJCQkJdW5zaWduZWQgY2hhciAq aW4sIHNpemVfdCBpbmxlbikKLSsJewotKwlzaXplX3QgaSA9IGlubGVuOwotKwljb25zdCB1bnNp Z25lZCBjaGFyICpxOwotKwl1bnNpZ25lZCBjaGFyIGMsICpwOwotKwlwID0gYnVmICsgZGN0eC0+ c2VlZGxlbjsKLSsJcSA9IGluICsgaW5sZW47Ci0rCi0rCU9QRU5TU0xfYXNzZXJ0KGkgPD0gZGN0 eC0+c2VlZGxlbik7Ci0rCi0rCS8qIFNwZWNpYWwgY2FzZTogemVybyBsZW5ndGgsIGp1c3QgaW5j cmVtZW50IGJ1ZmZlciAqLwotKwlpZiAoaSkKLSsJCWMgPSAwOwotKwllbHNlIAotKwkJYyA9IDE7 Ci0rCi0rCXdoaWxlIChpKQotKwkJewotKwkJaW50IHI7Ci0rCQlwLS07Ci0rCQlxLS07Ci0rCQly ID0gKnAgKyAqcSArIGM7Ci0rCQkvKiBDYXJyeSAqLwotKwkJaWYgKHIgPiAweGZmKQotKwkJCWMg PSAxOwotKwkJZWxzZQotKwkJCWMgPSAwOwotKwkJKnAgPSByICYgMHhmZjsKLSsJCWktLTsKLSsJ CX0KLSsKLSsJaSA9IGRjdHgtPnNlZWRsZW4gLSBpbmxlbjsKLSsKLSsJLyogSWYgbm90IGFkZGlu ZyB3aG9sZSBidWZmZXIgaGFuZGxlIGZpbmFsIGNhcnJpZXMgKi8KLSsJaWYgKGMgJiYgaSkKLSsJ CXsKLSsJCWRvCi0rCQkJewotKwkJCXAtLTsKLSsJCQljID0gKnA7Ci0rCQkJYysrOwotKwkJCSpw ID0gYzsKLSsJCQlpZihjKQotKwkJCQlyZXR1cm47Ci0rCQkJfSB3aGlsZShpLS0pOwotKwkJfQot Kwl9Ci0rCi0rLyogRmluYWxpc2UgYW5kIGFkZCBoYXNoIHRvIFYgKi8KLSsJCi0rc3RhdGljIGlu dCBjdHhfYWRkX21kKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWlmICghRklQU19kaWdlc3RmaW5h bCgmZGN0eC0+ZC5oYXNoLm1jdHgsIGRjdHgtPmQuaGFzaC52dG1wLCBOVUxMKSkKLSsJCQlyZXR1 cm4gMDsKLSsJY3R4X2FkZF9idWYoZGN0eCwgZGN0eC0+ZC5oYXNoLlYsIGRjdHgtPmQuaGFzaC52 dG1wLCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGlu dCBoYXNoX2dlbihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0 bGVuKQotKwl7Ci0rCURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKwlpZiAo b3V0bGVuID09IDApCi0rCQlyZXR1cm4gMTsKLSsJbWVtY3B5KGhjdHgtPnZ0bXAsIGhjdHgtPlYs IGRjdHgtPnNlZWRsZW4pOwotKwlmb3IoOzspCi0rCQl7Ci0rCQlGSVBTX2RpZ2VzdGluaXQoJmhj dHgtPm1jdHgsIGhjdHgtPm1kKTsKLSsJCUZJUFNfZGlnZXN0dXBkYXRlKCZoY3R4LT5tY3R4LCBo Y3R4LT52dG1wLCBkY3R4LT5zZWVkbGVuKTsKLSsJCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdf RkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpCi0rCQkJewotKwkJCUZJUFNfZGlnZXN0Zmlu YWwoJmhjdHgtPm1jdHgsIGRjdHgtPmxiLCBOVUxMKTsKLSsJCQlkY3R4LT5sYl92YWxpZCA9IDE7 Ci0rCQkJfQotKwkJZWxzZSBpZiAob3V0bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgpCi0rCQkJewot KwkJCUZJUFNfZGlnZXN0ZmluYWwoJmhjdHgtPm1jdHgsIGhjdHgtPnZ0bXAsIE5VTEwpOwotKwkJ CWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgaGN0eC0+dnRtcCkpCi0rCQkJCXJldHVy biAwOwotKwkJCW1lbWNweShvdXQsIGhjdHgtPnZ0bXAsIG91dGxlbik7Ci0rCQkJcmV0dXJuIDE7 Ci0rCQkJfQotKwkJZWxzZQotKwkJCXsKLSsJCQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4 LCBvdXQsIE5VTEwpOwotKwkJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkK LSsJCQkJcmV0dXJuIDA7Ci0rCQkJb3V0bGVuIC09IGRjdHgtPmJsb2NrbGVuZ3RoOwotKwkJCWlm IChvdXRsZW4gPT0gMCkKLSsJCQkJcmV0dXJuIDE7Ci0rCQkJb3V0ICs9IGRjdHgtPmJsb2NrbGVu Z3RoOwotKwkJCX0KLSsJCWN0eF9hZGRfYnVmKGRjdHgsIGhjdHgtPnZ0bXAsIE5VTEwsIDApOwot KwkJfQotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2hhc2hfaW5zdGFudGlhdGUoRFJCR19DVFgg KmRjdHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCi0r CQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VfbGVuLAotKwkJCQlj b25zdCB1bnNpZ25lZCBjaGFyICpwc3RyLCBzaXplX3QgcHN0cl9sZW4pCi0rCXsKLSsJRFJCR19I QVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7Ci0rCWlmICghaGFzaF9kZihkY3R4LCBoY3R4 LT5WLCAKLSsJCQllbnQsIGVudF9sZW4sIG5vbmNlLCBub25jZV9sZW4sIHBzdHIsIHBzdHJfbGVu LAotKwkJCU5VTEwsIDApKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghaGFzaF9kZihkY3R4LCBoY3R4 LT5DLCAKLSsJCQlOVUxMLCAwLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLAotKwkJCU5VTEwsIDAs IE5VTEwsIDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rI2lmZGVmIEhBU0hfRFJCR19UUkFDRQotKwlm cHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciBpbnN0YW50aWF0ZTpcbiIpOwotKwloZXhwcmludChz dGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOwotKwloZXhwcmludChzdGRlcnIsIGhjdHgt PkMsIGRjdHgtPnNlZWRsZW4pOwotKyNlbmRpZgotKwlyZXR1cm4gMTsKLSsJfQotKwotKwkKLStz dGF0aWMgaW50IGRyYmdfaGFzaF9yZXNlZWQoRFJCR19DVFggKmRjdHgsCi0rCQkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKLSsJewotKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0g JmRjdHgtPmQuaGFzaDsKLSsJLyogViBhYm91dCB0byBiZSB1cGRhdGVkIHNvIHVzZSBDIGFzIG91 dHB1dCBpbnN0ZWFkICovCi0rCWlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5DLAotKwkJCU5VTEws IDEsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4sCi0rCQkJZW50LCBlbnRfbGVuLCBhZGluLCBhZGlu X2xlbikpCi0rCQlyZXR1cm4gMDsKLSsJbWVtY3B5KGhjdHgtPlYsIGhjdHgtPkMsIGRjdHgtPnNl ZWRsZW4pOwotKwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywgTlVMTCwgMCwKLSsJCQloY3R4 LT5WLCBkY3R4LT5zZWVkbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKLSsJCXJldHVybiAwOwotKyNp ZmRlZiBIQVNIX0RSQkdfVFJBQ0UKLSsJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgcmVzZWVk OlxuIik7Ci0rCWhleHByaW50KHN0ZGVyciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7Ci0rCWhl eHByaW50KHN0ZGVyciwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7Ci0rI2VuZGlmCi0rCXJldHVy biAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2hhc2hfZ2VuZXJhdGUoRFJCR19DVFggKmRj dHgsCi0rCQkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsJCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQotKwl7Ci0rCURSQkdfSEFTSF9D VFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKwlFVlBfTURfQ1RYICptY3R4ID0gJmhjdHgtPm1j dHg7Ci0rCXVuc2lnbmVkIGNoYXIgdG1wWzRdOwotKwlpZiAoYWRpbiAmJiBhZGluX2xlbikKLSsJ CXsKLSsJCXRtcFswXSA9IDI7Ci0rCQlpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBoY3R4LT5t ZCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgdG1wLCAx KSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCBoY3R4LT5W LCBkY3R4LT5zZWVkbGVuKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmICghRVZQX0RpZ2VzdFVwZGF0 ZShtY3R4LCBhZGluLCBhZGluX2xlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIWN0eF9hZGRf bWQoZGN0eCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmICghaGFzaF9nZW4oZGN0eCwgb3V0 LCBvdXRsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCi0rCXRtcFswXSA9IDM7Ci0rCWlmICghRklQU19k aWdlc3Rpbml0KG1jdHgsIGhjdHgtPm1kKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUVWUF9EaWdl c3RVcGRhdGUobWN0eCwgdG1wLCAxKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUVWUF9EaWdlc3RV cGRhdGUobWN0eCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbikpCi0rCQlyZXR1cm4gMDsKLSsKLSsJ aWYgKCFjdHhfYWRkX21kKGRjdHgpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWN0eF9hZGRfYnVmKGRj dHgsIGhjdHgtPlYsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwotKwotKwl0bXBbMF0gPSAoZGN0 eC0+cmVzZWVkX2NvdW50ZXIgPj4gMjQpICYgMHhmZjsKLSsJdG1wWzFdID0gKGRjdHgtPnJlc2Vl ZF9jb3VudGVyID4+IDE2KSAmIDB4ZmY7Ci0rCXRtcFsyXSA9IChkY3R4LT5yZXNlZWRfY291bnRl ciA+PiA4KSAmIDB4ZmY7Ci0rCXRtcFszXSA9IGRjdHgtPnJlc2VlZF9jb3VudGVyICYgMHhmZjsK LSsJY3R4X2FkZF9idWYoZGN0eCwgaGN0eC0+ViwgdG1wLCA0KTsKLSsjaWZkZWYgSEFTSF9EUkJH X1RSQUNFCi0rCWZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIGdlbmVyYXRlOlxuIik7Ci0rCWhl eHByaW50KHN0ZGVyciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7Ci0rCWhleHByaW50KHN0ZGVy ciwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7Ci0rI2VuZGlmCi0rCXJldHVybiAxOwotKwl9Ci0r Ci0rc3RhdGljIGludCBkcmJnX2hhc2hfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKLSsJ ewotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmRjdHgtPmQuaGFzaC5tY3R4KTsKLSsJT1BFTlNTTF9j bGVhbnNlKCZkY3R4LT5kLmhhc2gsIHNpemVvZihEUkJHX0hBU0hfQ1RYKSk7Ci0rCXJldHVybiAx OwotKwl9Ci0rCi0raW50IGZpcHNfZHJiZ19oYXNoX2luaXQoRFJCR19DVFggKmRjdHgpCi0rCXsK LSsJY29uc3QgRVZQX01EICptZDsKLSsJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhh c2g7Ci0rCW1kID0gRklQU19nZXRfZGlnZXN0YnluaWQoZGN0eC0+dHlwZSk7Ci0rCWlmICghbWQp Ci0rCQlyZXR1cm4gLTI7Ci0rCXN3aXRjaCAoZGN0eC0+dHlwZSkKLSsJCXsKLSsJCWNhc2UgTklE X3NoYTE6Ci0rCQlkY3R4LT5zdHJlbmd0aCA9IDEyODsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSBO SURfc2hhMjI0OgotKwkJZGN0eC0+c3RyZW5ndGggPSAxOTI7Ci0rCQlicmVhazsKLSsKLSsJCWRl ZmF1bHQ6Ci0rCQlkY3R4LT5zdHJlbmd0aCA9IDI1NjsKLSsJCWJyZWFrOwotKwkJfQotKwotKwlk Y3R4LT5pbnN0YW50aWF0ZSA9IGRyYmdfaGFzaF9pbnN0YW50aWF0ZTsKLSsJZGN0eC0+cmVzZWVk ID0gZHJiZ19oYXNoX3Jlc2VlZDsKLSsJZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2hhc2hfZ2VuZXJh dGU7Ci0rCWRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2hhc2hfdW5pbnN0YW50aWF0ZTsKLSsK LSsJZGN0eC0+ZC5oYXNoLm1kID0gbWQ7Ci0rCUVWUF9NRF9DVFhfaW5pdCgmaGN0eC0+bWN0eCk7 Ci0rCi0rCS8qIFRoZXNlIGFyZSB0YWtlbiBmcm9tIFNQIDgwMC05MCAxMC4xIHRhYmxlIDIgKi8K LSsKLSsJZGN0eC0+YmxvY2tsZW5ndGggPSBNX0VWUF9NRF9zaXplKG1kKTsKLSsJaWYgKGRjdHgt PmJsb2NrbGVuZ3RoID4gMzIpCi0rCQlkY3R4LT5zZWVkbGVuID0gMTExOwotKwllbHNlCi0rCQlk Y3R4LT5zZWVkbGVuID0gNTU7Ci0rCi0rCi0rCWRjdHgtPm1pbl9lbnRyb3B5ID0gZGN0eC0+c3Ry ZW5ndGggLyA4OwotKwlkY3R4LT5tYXhfZW50cm9weSA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsJ ZGN0eC0+bWluX25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOwotKwlkY3R4LT5tYXhfbm9u Y2UgPSBEUkJHX01BWF9MRU5HVEg7Ci0rCi0rCWRjdHgtPm1heF9wZXJzID0gRFJCR19NQVhfTEVO R1RIOwotKwlkY3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsJZGN0eC0+bWF4 X3JlcXVlc3QgPSAxPDwxNjsKLSsJZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMTw8MjQ7Ci0rCi0r CXJldHVybiAxOwotKwl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBz X2RyYmdfaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2ht YWMuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMuZmlw cwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2MTc4NTYzNSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFh L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjE3ODU2 MzUgKzAyMDAKLUBAIC0wLDAgKzEsMjgxIEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19obWFj LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wu b3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3Bl blNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAg IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0r ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsg KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8 c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgotKwotK3N0YXRpYyBpbnQg ZHJiZ19obWFjX3VwZGF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqaW4xLCBzaXplX3QgaW4xbGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNp emVfdCBpbjJsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMywgc2l6ZV90IGluM2xl bgotKwkJCSkKLSsJewotKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjMCA9IDAsIGMxID0gMTsKLSsJ RFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7Ci0rCUhNQUNfQ1RYICpoY3R4ID0g JmhtYWMtPmhjdHg7Ci0rCi0rCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgt PmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFITUFD X1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rCQlyZXR1cm4gMDsK LSsJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCAmYzAsIDEpKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChp bjFsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKLSsJCXJldHVybiAwOwot KwlpZiAoaW4ybGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxlbikpCi0rCQlyZXR1 cm4gMDsKLSsJaWYgKGluM2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4pKQot KwkJcmV0dXJuIDA7Ci0rCi0rCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5LLCBOVUxMKSkK LSsJCXJldHVybiAwOwotKwotKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4 LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghSE1B Q19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQotKwkJcmV0dXJuIDA7 Ci0rCi0rCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKLSsJCXJldHVybiAw OwotKwotKwlpZiAoIWluMWxlbiAmJiAhaW4ybGVuICYmICFpbjNsZW4pCi0rCQlyZXR1cm4gMTsK LSsKLSsJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgs IGhtYWMtPm1kLCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgs IGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUhNQUNf VXBkYXRlKGhjdHgsICZjMSwgMSkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKGluMWxlbiAmJiAhSE1B Q19VcGRhdGUoaGN0eCwgaW4xLCBpbjFsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChpbjJsZW4g JiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMiwgaW4ybGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAo aW4zbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjMsIGluM2xlbikpCi0rCQlyZXR1cm4gMDsK LSsKLSsJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPkssIE5VTEwpKQotKwkJcmV0dXJuIDA7 Ci0rCi0rCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3Ro LCBobWFjLT5tZCwgTlVMTCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFITUFDX1VwZGF0ZShoY3R4 LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFI TUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYsIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCXJldHVy biAxOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2htYWNfaW5zdGFudGlhdGUoRFJCR19D VFggKmRjdHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4s Ci0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VfbGVuLAotKwkJ CQljb25zdCB1bnNpZ25lZCBjaGFyICpwc3RyLCBzaXplX3QgcHN0cl9sZW4pCi0rCXsKLSsJRFJC R19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7Ci0rCW1lbXNldChobWFjLT5LLCAwLCBk Y3R4LT5ibG9ja2xlbmd0aCk7Ci0rCW1lbXNldChobWFjLT5WLCAxLCBkY3R4LT5ibG9ja2xlbmd0 aCk7Ci0rCWlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LAotKwkJCWVudCwgZW50X2xlbiwgbm9u Y2UsIG5vbmNlX2xlbiwgcHN0ciwgcHN0cl9sZW4pKQotKwkJcmV0dXJuIDA7Ci0rCi0rI2lmZGVm IEhNQUNfRFJCR19UUkFDRQotKwlmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciBpbnN0YW50aWF0 ZTpcbiIpOwotKwloZXhwcmludChzdGRlcnIsIGhtYWMtPkssIGhtYWMtPmJsb2NrbGVuZ3RoKTsK LSsJaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9ja2xlbmd0aCk7Ci0rI2VuZGlm Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2htYWNfcmVzZWVkKERSQkdf Q1RYICpkY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVu LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0rCXsK LSsJaWYgKCFkcmJnX2htYWNfdXBkYXRlKGRjdHgsCi0rCQkJZW50LCBlbnRfbGVuLCBhZGluLCBh ZGluX2xlbiwgTlVMTCwgMCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsjaWZkZWYgSE1BQ19EUkJHX1RS QUNFCi0rCXsKLSsJCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOwotKwkJZnBy aW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIgcmVzZWVkOlxuIik7Ci0rCQloZXhwcmludChzdGRlcnIs IGhtYWMtPkssIGhtYWMtPmJsb2NrbGVuZ3RoKTsKLSsJCWhleHByaW50KHN0ZGVyciwgaG1hYy0+ ViwgaG1hYy0+YmxvY2tsZW5ndGgpOwotKwl9Ci0rI2VuZGlmCi0rCXJldHVybiAxOwotKwl9Ci0r Ci0rc3RhdGljIGludCBkcmJnX2htYWNfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsCi0rCQkJCXVu c2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQotKwl7Ci0rCURSQkdfSE1BQ19DVFggKmhtYWMgPSAm ZGN0eC0+ZC5obWFjOwotKwlITUFDX0NUWCAqaGN0eCA9ICZobWFjLT5oY3R4OwotKwljb25zdCB1 bnNpZ25lZCBjaGFyICpWdG1wID0gaG1hYy0+VjsKLSsJaWYgKGFkaW5fbGVuICYmICFkcmJnX2ht YWNfdXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVuLAotKwkJCQkJCU5VTEwsIDAsIE5VTEwsIDAp KQotKwkJcmV0dXJuIDA7Ci0rCWZvciAoOzspCi0rCQl7Ci0rCQlpZiAoIUhNQUNfSW5pdF9leCho Y3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwKLSsJCQkJCQkJaG1hYy0+bWQsIE5VTEwp KQotKwkJCXJldHVybiAwOwotKwkJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBWdG1wLCBkY3R4LT5i bG9ja2xlbmd0aCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIShkY3R4LT54ZmxhZ3MgJiBEUkJH X0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQotKwkJCXsKLSsJCQlpZiAoIUhNQUNfRmlu YWwoaGN0eCwgZGN0eC0+bGIsIE5VTEwpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQlkY3R4LT5sYl92 YWxpZCA9IDE7Ci0rCQkJVnRtcCA9IGRjdHgtPmxiOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJ CWVsc2UgaWYgKG91dGxlbiA+IGRjdHgtPmJsb2NrbGVuZ3RoKQotKwkJCXsKLSsJCQlpZiAoIUhN QUNfRmluYWwoaGN0eCwgb3V0LCBOVUxMKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJaWYgKCFmaXBz X2RyYmdfY3BybmdfdGVzdChkY3R4LCBvdXQpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQlWdG1wID0g b3V0OwotKwkJCX0KLSsJCWVsc2UKLSsJCQl7Ci0rCQkJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGht YWMtPlYsIE5VTEwpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190 ZXN0KGRjdHgsIGhtYWMtPlYpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQltZW1jcHkob3V0LCBobWFj LT5WLCBvdXRsZW4pOwotKwkJCWJyZWFrOwotKwkJCX0KLSsJCW91dCArPSBkY3R4LT5ibG9ja2xl bmd0aDsKLSsJCW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJCX0KLSsJaWYgKCFkcmJn X2htYWNfdXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKLSsJ CXJldHVybiAwOwotKwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFj X3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJSE1BQ19DVFhfY2xlYW51cCgm ZGN0eC0+ZC5obWFjLmhjdHgpOwotKwlPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQuaG1hYywgc2l6 ZW9mKERSQkdfSE1BQ19DVFgpKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZmlwc19kcmJn X2htYWNfaW5pdChEUkJHX0NUWCAqZGN0eCkKLSsJewotKwljb25zdCBFVlBfTUQgKm1kID0gTlVM TDsKLSsJRFJCR19ITUFDX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhtYWM7Ci0rCWRjdHgtPnN0cmVu Z3RoID0gMjU2OwotKwlzd2l0Y2ggKGRjdHgtPnR5cGUpCi0rCQl7Ci0rCQljYXNlIE5JRF9obWFj V2l0aFNIQTE6Ci0rCQltZCA9IEVWUF9zaGExKCk7Ci0rCQlkY3R4LT5zdHJlbmd0aCA9IDEyODsK LSsJCWJyZWFrOwotKwotKwkJY2FzZSBOSURfaG1hY1dpdGhTSEEyMjQ6Ci0rCQltZCA9IEVWUF9z aGEyMjQoKTsKLSsJCWRjdHgtPnN0cmVuZ3RoID0gMTkyOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNl IE5JRF9obWFjV2l0aFNIQTI1NjoKLSsJCW1kID0gRVZQX3NoYTI1NigpOwotKwkJYnJlYWs7Ci0r Ci0rCQljYXNlIE5JRF9obWFjV2l0aFNIQTM4NDoKLSsJCW1kID0gRVZQX3NoYTM4NCgpOwotKwkJ YnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9obWFjV2l0aFNIQTUxMjoKLSsJCW1kID0gRVZQX3NoYTUx MigpOwotKwkJYnJlYWs7Ci0rCi0rCQlkZWZhdWx0OgotKwkJZGN0eC0+c3RyZW5ndGggPSAwOwot KwkJcmV0dXJuIC0yOwotKwkJfQotKyAgICAgICAgZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2ht YWNfaW5zdGFudGlhdGU7Ci0rICAgICAgICBkY3R4LT5yZXNlZWQgPSBkcmJnX2htYWNfcmVzZWVk OwotKyAgICAgICAgZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2htYWNfZ2VuZXJhdGU7Ci0rICAgICAg ICBkY3R4LT51bmluc3RhbnRpYXRlID0gZHJiZ19obWFjX3VuaW5zdGFudGlhdGU7Ci0rCUhNQUNf Q1RYX2luaXQoJmhjdHgtPmhjdHgpOwotKwloY3R4LT5tZCA9IG1kOwotKwlkY3R4LT5ibG9ja2xl bmd0aCA9IE1fRVZQX01EX3NpemUobWQpOwotKwlkY3R4LT5zZWVkbGVuID0gTV9FVlBfTURfc2l6 ZShtZCk7Ci0rCi0rICAgICAgICBkY3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnN0cmVuZ3RoIC8g ODsKLSsgICAgICAgIGRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAg ICAgICAgZGN0eC0+bWluX25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOwotKyAgICAgICAg ZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICAgICAgZGN0eC0+bWF4 X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7Ci0rICAgICAgICBkY3R4LT5tYXhfYWRpbiA9IERSQkdf TUFYX0xFTkdUSDsKLSsKLSsgICAgICAgIGRjdHgtPm1heF9yZXF1ZXN0ID0gMTw8MTY7Ci0rICAg ICAgICBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxPDwyNDsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0K LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYy5maXBz IG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYwotLS0tIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6 MDYuMjYyNzg1NjU2ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19k cmJnX2xpYi5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjYyNzg1NjU2ICswMjAwCi1AQCAtMCwwICsx LDU3OCBAQAotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNz bC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUg bWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0r ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BP cGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICog ICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK LSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot KyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsjaW5jbHVk ZSAiZmlwc19yYW5kX2xjbC5oIgotKwotKy8qIFN1cHBvcnQgZnJhbWV3b3JrIGZvciBTUDgwMC05 MCBEUkJHcyAqLwotKwotK2ludCBGSVBTX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0eCwgaW50IHR5 cGUsIHVuc2lnbmVkIGludCBmbGFncykKLSsJewotKwlpbnQgcnY7Ci0rCW1lbXNldChkY3R4LCAw LCBzaXplb2YoRFJCR19DVFgpKTsKLSsJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklU SUFMSVNFRDsKLSsJZGN0eC0+eGZsYWdzID0gZmxhZ3M7Ci0rCWRjdHgtPnR5cGUgPSB0eXBlOwot KwotKwlkY3R4LT5pZmxhZ3MgPSAwOwotKwlkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuID0gMDsKLSsJ ZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA9IDA7Ci0rCWRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZh bCA9IERSQkdfSEVBTFRIX0lOVEVSVkFMOwotKwotKwlydiA9IGZpcHNfZHJiZ19oYXNoX2luaXQo ZGN0eCk7Ci0rCi0rCWlmIChydiA9PSAtMikKLSsJCXJ2ID0gZmlwc19kcmJnX2N0cl9pbml0KGRj dHgpOwotKwlpZiAocnYgPT0gLTIpCi0rCQlydiA9IGZpcHNfZHJiZ19obWFjX2luaXQoZGN0eCk7 Ci0rCi0rCWlmIChydiA8PSAwKQotKwkJewotKwkJaWYgKHJ2ID09IC0yKQotKwkJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19JTklULCBGSVBTX1JfVU5TVVBQT1JURURfRFJCR19UWVBFKTsKLSsJ CWVsc2UKLSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX0VSUk9SX0lO SVRJQUxJU0lOR19EUkJHKTsKLSsJCX0KLSsKLSsJLyogSWYgbm90IGluIHRlc3QgbW9kZSBydW4g c2VsZnRlc3RzIG9uIERSQkcgb2YgdGhlIHNhbWUgdHlwZSAqLwotKwotKwlpZiAoIShkY3R4LT54 ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkpCi0rCQl7Ci0rCQlpZiAoIUZJUFNfZHJiZ19oZWFsdGhf Y2hlY2soZGN0eCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklULCBG SVBTX1JfU0VMRlRFU1RfRkFJTFVSRSk7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwot KwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStEUkJHX0NUWCAqRklQU19kcmJnX25ldyhpbnQgdHlwZSwg dW5zaWduZWQgaW50IGZsYWdzKQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4OwotKwlkY3R4ID0gT1BF TlNTTF9tYWxsb2Moc2l6ZW9mKERSQkdfQ1RYKSk7Ci0rCWlmICghZGN0eCkKLSsJCXsKLSsJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19ORVcsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLSsJCXJl dHVybiBOVUxMOwotKwkJfQotKwotKwlpZiAodHlwZSA9PSAwKQotKwkJewotKwkJbWVtc2V0KGRj dHgsIDAsIHNpemVvZihEUkJHX0NUWCkpOwotKwkJZGN0eC0+dHlwZSA9IDA7Ci0rCQlkY3R4LT5z dGF0dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOwotKwkJcmV0dXJuIGRjdHg7Ci0rCQl9 Ci0rCi0rCWlmIChGSVBTX2RyYmdfaW5pdChkY3R4LCB0eXBlLCBmbGFncykgPD0gMCkKLSsJCXsK LSsJCU9QRU5TU0xfZnJlZShkY3R4KTsKLSsJCXJldHVybiBOVUxMOwotKwkJfQotKwkJCi0rCXJl dHVybiBkY3R4OwotKwl9Ci0rCi0rdm9pZCBGSVBTX2RyYmdfZnJlZShEUkJHX0NUWCAqZGN0eCkK LSsJewotKwlpZiAoZGN0eC0+dW5pbnN0YW50aWF0ZSkKLSsJCWRjdHgtPnVuaW5zdGFudGlhdGUo ZGN0eCk7Ci0rCS8qIERvbid0IGZyZWUgdXAgZGVmYXVsdCBEUkJHICovCi0rCWlmIChkY3R4ID09 IEZJUFNfZ2V0X2RlZmF1bHRfZHJiZygpKQotKwkJewotKwkJbWVtc2V0KGRjdHgsIDAsIHNpemVv ZihEUkJHX0NUWCkpOwotKwkJZGN0eC0+dHlwZSA9IDA7Ci0rCQlkY3R4LT5zdGF0dXMgPSBEUkJH X1NUQVRVU19VTklOSVRJQUxJU0VEOwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlPUEVOU1NMX2Ns ZWFuc2UoJmRjdHgtPmQsIHNpemVvZihkY3R4LT5kKSk7Ci0rCQlPUEVOU1NMX2ZyZWUoZGN0eCk7 Ci0rCQl9Ci0rCX0KLSsKLStzdGF0aWMgc2l6ZV90IGZpcHNfZ2V0X2VudHJvcHkoRFJCR19DVFgg KmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1p bl9sZW4sIHNpemVfdCBtYXhfbGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgKnRvdXQsICpwOwot KwlzaXplX3QgYmwgPSBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuLCBydjsKLSsJaWYgKCFkY3R4LT5n ZXRfZW50cm9weSkKLSsJCXJldHVybiAwOwotKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFH X1RFU1QgfHwgIWJsKQotKwkJcmV0dXJuIGRjdHgtPmdldF9lbnRyb3B5KGRjdHgsIHBvdXQsIGVu dHJvcHksIG1pbl9sZW4sIG1heF9sZW4pOwotKwlydiA9IGRjdHgtPmdldF9lbnRyb3B5KGRjdHgs ICZ0b3V0LCBlbnRyb3B5ICsgYmwsCi0rCQkJCW1pbl9sZW4gKyBibCwgbWF4X2xlbiArIGJsKTsK LSsJaWYgKHRvdXQgPT0gTlVMTCkKLSsJCXJldHVybiAwOwotKwkqcG91dCA9IHRvdXQgKyBibDsK LSsJaWYgKHJ2IDwgKG1pbl9sZW4gKyBibCkgfHwgKHJ2ICUgYmwpKQotKwkJcmV0dXJuIDA7Ci0r CS8qIENvbXBhcmUgY29uc2VjdXRpdmUgYmxvY2tzIGZvciBjb250aW51b3VzIFBSTkcgdGVzdCAq LwotKwlmb3IgKHAgPSB0b3V0OyBwIDwgdG91dCArIHJ2IC0gYmw7IHAgKz0gYmwpCi0rCQl7Ci0r CQlpZiAoIW1lbWNtcChwLCBwICsgYmwsIGJsKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0Zf RklQU19HRVRfRU5UUk9QWSwgRklQU19SX0VOVFJPUFlfU09VUkNFX1NUVUNLKTsKLSsJCQlyZXR1 cm4gMDsKLSsJCQl9Ci0rCQl9Ci0rCXJ2IC09IGJsOwotKwlpZiAocnYgPiBtYXhfbGVuKQotKwkJ cmV0dXJuIG1heF9sZW47Ci0rCXJldHVybiBydjsKLSsJfQotKwotK3N0YXRpYyB2b2lkIGZpcHNf Y2xlYW51cF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LAotKwkJCQkJdW5zaWduZWQgY2hhciAqb3V0 LCBzaXplX3Qgb2xlbikKLSsJewotKwlzaXplX3QgYmw7Ci0rCWlmIChkY3R4LT54ZmxhZ3MgJiBE UkJHX0ZMQUdfVEVTVCkKLSsJCWJsID0gMDsKLSsJZWxzZQotKwkJYmwgPSBkY3R4LT5lbnRyb3B5 X2Jsb2NrbGVuOwotKwkvKiBDYWxsIGNsZWFudXAgd2l0aCBvcmlnaW5hbCBhcmd1bWVudHMgKi8K LSsJZGN0eC0+Y2xlYW51cF9lbnRyb3B5KGRjdHgsIG91dCAtIGJsLCBvbGVuICsgYmwpOwotKwl9 Ci0rCi0rCi0raW50IEZJUFNfZHJiZ19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pCi0rCXsKLSsJc2l6ZV90 IGVudGxlbiA9IDAsIG5vbmNlbGVuID0gMDsKLSsJdW5zaWduZWQgY2hhciAqbm9uY2UgPSBOVUxM LCAqZW50cm9weSA9IE5VTEw7Ci0rCi0rI2lmIDAKLSsJLyogUHV0IGhlcmUgc28gZXJyb3Igc2Ny aXB0IHBpY2tzIHRoZW0gdXAgKi8KLSsJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJ QVRFLAotKwkJCQlGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORyk7Ci0rCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0lOX0VSUk9SX1NUQVRF KTsKLSsJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfQUxSRUFE WV9JTlNUQU5USUFURUQpOwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUs IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFkpOwotKwlGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFKTsKLSsJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfSU5TVEFOVElBVEVfRVJS T1IpOwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9EUkJH X05PVF9JTklUSUFMSVNFRCk7Ci0rI2VuZGlmCi0rCi0rCWludCByID0gMDsKLSsKLSsJaWYgKHBl cnNsZW4gPiBkY3R4LT5tYXhfcGVycykKLSsJCXsKLSsJCXIgPSBGSVBTX1JfUEVSU09OQUxJU0FU SU9OX1NUUklOR19UT09fTE9ORzsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIWRjdHgt Pmluc3RhbnRpYXRlKQotKwkJewotKwkJciA9IEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRDsK LSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVT X1VOSU5JVElBTElTRUQpCi0rCQl7Ci0rCQlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVT X0VSUk9SKQotKwkJCXIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7Ci0rCQllbHNlCi0rCQkJciA9 IEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRDsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlk Y3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKLSsKLSsJZW50bGVuID0gZmlwc19nZXRf ZW50cm9weShkY3R4LCAmZW50cm9weSwgZGN0eC0+c3RyZW5ndGgsCi0rCQkJCWRjdHgtPm1pbl9l bnRyb3B5LCBkY3R4LT5tYXhfZW50cm9weSk7Ci0rCi0rCWlmIChlbnRsZW4gPCBkY3R4LT5taW5f ZW50cm9weSB8fCBlbnRsZW4gPiBkY3R4LT5tYXhfZW50cm9weSkKLSsJCXsKLSsJCXIgPSBGSVBT X1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlm IChkY3R4LT5tYXhfbm9uY2UgPiAwICYmIGRjdHgtPmdldF9ub25jZSkKLSsJCXsKLSsJCW5vbmNl bGVuID0gZGN0eC0+Z2V0X25vbmNlKGRjdHgsICZub25jZSwKLSsJCQkJCWRjdHgtPnN0cmVuZ3Ro IC8gMiwKLSsJCQkJCWRjdHgtPm1pbl9ub25jZSwgZGN0eC0+bWF4X25vbmNlKTsKLSsKLSsJCWlm IChub25jZWxlbiA8IGRjdHgtPm1pbl9ub25jZSB8fCBub25jZWxlbiA+IGRjdHgtPm1heF9ub25j ZSkKLSsJCQl7Ci0rCQkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFOwotKwkJCWdv dG8gZW5kOwotKwkJCX0KLSsKLSsJCX0KLSsKLSsJaWYgKCFkY3R4LT5pbnN0YW50aWF0ZShkY3R4 LCAKLSsJCQkJZW50cm9weSwgZW50bGVuLAotKwkJCQlub25jZSwgbm9uY2VsZW4sCi0rCQkJCXBl cnMsIHBlcnNsZW4pKQotKwkJewotKwkJciA9IEZJUFNfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RS Qkc7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsKLSsJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFU VVNfUkVBRFk7Ci0rCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCi0r CQlkY3R4LT5yZXNlZWRfY291bnRlciA9IDE7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKGVudHJvcHkg JiYgZGN0eC0+Y2xlYW51cF9lbnRyb3B5KQotKwkJZmlwc19jbGVhbnVwX2VudHJvcHkoZGN0eCwg ZW50cm9weSwgZW50bGVuKTsKLSsKLSsJaWYgKG5vbmNlICYmIGRjdHgtPmNsZWFudXBfbm9uY2Up Ci0rCQlkY3R4LT5jbGVhbnVwX25vbmNlKGRjdHgsIG5vbmNlLCBub25jZWxlbik7Ci0rCi0rCWlm IChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCi0rCQlyZXR1cm4gMTsKLSsKLSsJ aWYgKHIgJiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQotKwkJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCByKTsKLSsKLSsJcmV0dXJuIDA7Ci0rCi0rCX0K LSsKLStzdGF0aWMgaW50IGRyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAotKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuLCBpbnQgaGNoZWNrKQotKwl7Ci0rCXVu c2lnbmVkIGNoYXIgKmVudHJvcHkgPSBOVUxMOwotKwlzaXplX3QgZW50bGVuID0gMDsKLSsJaW50 IHIgPSAwOwotKwotKyNpZiAwCi0rCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBTX1Jf Tk9UX0lOU1RBTlRJQVRFRCk7Ci0rCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBTX1Jf QURESVRJT05BTF9JTlBVVF9UT09fTE9ORyk7Ci0rI2VuZGlmCi0rCWlmIChkY3R4LT5zdGF0dXMg IT0gRFJCR19TVEFUVVNfUkVBRFkKLSsJCSYmIGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19S RVNFRUQpCi0rCQl7Ci0rCQlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX0VSUk9SKQot KwkJCXIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7Ci0rCQllbHNlIGlmKGRjdHgtPnN0YXR1cyA9 PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQotKwkJCXIgPSBGSVBTX1JfTk9UX0lOU1RBTlRJ QVRFRDsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIWFkaW4pCi0rCQlhZGlubGVuID0g MDsKLSsJZWxzZSBpZiAoYWRpbmxlbiA+IGRjdHgtPm1heF9hZGluKQotKwkJewotKwkJciA9IEZJ UFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0r CWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOwotKwkvKiBQZWZvcm0gaGVhbHRoIGNo ZWNrIG9uIGFsbCByZXNlZWQgb3BlcmF0aW9ucyBpZiBub3QgYSBwcmVkaWN0aW9uCi0rCSAqIHJl c2lzdGFuY2UgcmVxdWVzdCBhbmQgbm90IGluIHRlc3QgbW9kZS4KLSsJICovCi0rCWlmIChoY2hl Y2sgJiYgIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkpCi0rCQl7Ci0rCQlpZiAoIUZJ UFNfZHJiZ19oZWFsdGhfY2hlY2soZGN0eCkpCi0rCQkJewotKwkJCXIgPSBGSVBTX1JfU0VMRlRF U1RfRkFJTFVSRTsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQl9Ci0rCi0rCWVudGxlbiA9IGZp cHNfZ2V0X2VudHJvcHkoZGN0eCwgJmVudHJvcHksIGRjdHgtPnN0cmVuZ3RoLAotKwkJCQlkY3R4 LT5taW5fZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOwotKwotKwlpZiAoZW50bGVuIDwgZGN0 eC0+bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4X2VudHJvcHkpCi0rCQl7Ci0rCQly ID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsKLSsJCWdvdG8gZW5kOwotKwkJfQot KwotKwlpZiAoIWRjdHgtPnJlc2VlZChkY3R4LCBlbnRyb3B5LCBlbnRsZW4sIGFkaW4sIGFkaW5s ZW4pKQotKwkJZ290byBlbmQ7Ci0rCi0rCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFQURZ OwotKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKQotKwkJZGN0eC0+ cmVzZWVkX2NvdW50ZXIgPSAxOwotKwllbmQ6Ci0rCi0rCWlmIChlbnRyb3B5ICYmIGRjdHgtPmNs ZWFudXBfZW50cm9weSkKLSsJCWZpcHNfY2xlYW51cF9lbnRyb3B5KGRjdHgsIGVudHJvcHksIGVu dGxlbik7Ci0rCi0rCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCi0rCQly ZXR1cm4gMTsKLSsKLSsJaWYgKHIgJiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIp KQotKwkJRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIHIpOwotKwotKwlyZXR1cm4gMDsKLSsJ fQotKwotK2ludCBGSVBTX2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAotKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotKwl7Ci0rCXJldHVybiBkcmJnX3Jl c2VlZChkY3R4LCBhZGluLCBhZGlubGVuLCAxKTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19k cmJnX2NoZWNrKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJH X0ZMQUdfVEVTVCkKLSsJCXJldHVybiAxOwotKwlkY3R4LT5oZWFsdGhfY2hlY2tfY250Kys7Ci0r CWlmIChkY3R4LT5oZWFsdGhfY2hlY2tfY250ID49IGRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZh bCkKLSsJCXsKLSsJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKLSsJCQl7Ci0r CQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NIRUNLLCBGSVBTX1JfU0VMRlRFU1RfRkFJTFVS RSk7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotK2lu dCBGSVBTX2RyYmdfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwg c2l6ZV90IG91dGxlbiwKLSsJCQlpbnQgcHJlZGljdGlvbl9yZXNpc3RhbmNlLAotKwkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotKwl7Ci0rCWludCByID0gMDsK LSsKLSsJaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfR0VORVJBVEUsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJu IDA7Ci0rCQl9Ci0rCi0rCWlmICghZmlwc19kcmJnX2NoZWNrKGRjdHgpKQotKwkJcmV0dXJuIDA7 Ci0rCi0rCWlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVBRFkKLSsJCSYmIGRjdHgt PnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRVNFRUQpCi0rCQl7Ci0rCQlpZiAoZGN0eC0+c3RhdHVz ID09IERSQkdfU1RBVFVTX0VSUk9SKQotKwkJCXIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7Ci0r CQllbHNlIGlmKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQotKwkJ CXIgPSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRDsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlp ZiAob3V0bGVuID4gZGN0eC0+bWF4X3JlcXVlc3QpCi0rCQl7Ci0rCQlyID0gRklQU19SX1JFUVVF U1RfVE9PX0xBUkdFX0ZPUl9EUkJHOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCWlmIChhZGlu bGVuID4gZGN0eC0+bWF4X2FkaW4pCi0rCQl7Ci0rCQlyID0gRklQU19SX0FERElUSU9OQUxfSU5Q VVRfVE9PX0xPTkc7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKGRjdHgtPmlmbGFncyAm IERSQkdfQ1VTVE9NX1JFU0VFRCkKLSsJCWRjdHgtPmdlbmVyYXRlKGRjdHgsIE5VTEwsIG91dGxl biwgTlVMTCwgMCk7Ci0rCWVsc2UgaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyID49IGRjdHgtPnJl c2VlZF9pbnRlcnZhbCkKLSsJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFU0VFRDsKLSsK LSsJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRVNFRUQgfHwgcHJlZGljdGlvbl9y ZXNpc3RhbmNlKQotKwkJewotKwkJLyogSWYgcHJlZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3Qg ZG9uJ3QgZG8gaGVhbHRoIGNoZWNrICovCi0rCQlpbnQgaGNoZWNrID0gcHJlZGljdGlvbl9yZXNp c3RhbmNlID8gMCA6IDE7Ci0rCQkKLSsJCWlmICghZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRp bmxlbiwgaGNoZWNrKSkKLSsJCQl7Ci0rCQkJciA9IEZJUFNfUl9SRVNFRURfRVJST1I7Ci0rCQkJ Z290byBlbmQ7Ci0rCQkJfQotKwkJYWRpbiA9IE5VTEw7Ci0rCQlhZGlubGVuID0gMDsKLSsJCX0K LSsKLSsJaWYgKCFkY3R4LT5nZW5lcmF0ZShkY3R4LCBvdXQsIG91dGxlbiwgYWRpbiwgYWRpbmxl bikpCi0rCQl7Ci0rCQlyID0gRklQU19SX0dFTkVSQVRFX0VSUk9SOwotKwkJZGN0eC0+c3RhdHVz ID0gRFJCR19TVEFUVVNfRVJST1I7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJaWYgKCEoZGN0eC0+ aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKSkKLSsJCXsKLSsJCWlmIChkY3R4LT5yZXNlZWRf Y291bnRlciA+PSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwpCi0rCQkJZGN0eC0+c3RhdHVzID0gRFJC R19TVEFUVVNfUkVTRUVEOwotKwkJZWxzZQotKwkJCWRjdHgtPnJlc2VlZF9jb3VudGVyKys7Ci0r CQl9Ci0rCi0rCWVuZDoKLSsJaWYgKHIpCi0rCQl7Ci0rCQlpZiAoIShkY3R4LT5pZmxhZ3MgJiBE UkJHX0ZMQUdfTk9FUlIpKQotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSwg cik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgRklQ U19kcmJnX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJaW50IHJ2OwotKwlp ZiAoIWRjdHgtPnVuaW5zdGFudGlhdGUpCi0rCQlydiA9IDE7Ci0rCWVsc2UKLSsJCXJ2ID0gZGN0 eC0+dW5pbnN0YW50aWF0ZShkY3R4KTsKLSsJLyogQWx0aG91Z2ggd2UnZCBsaWtlIHRvIGNsZWFu c2UgaGVyZSB3ZSBjYW4ndCBiZWNhdXNlIHdlIGhhdmUgdG8KLSsJICogdGVzdCB0aGUgdW5pbnN0 YW50aWF0ZSByZWFsbHkgemVyb2VzIHRoZSBkYXRhLgotKwkgKi8KLSsJbWVtc2V0KCZkY3R4LT5k LCAwLCBzaXplb2YoZGN0eC0+ZCkpOwotKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19VTklO SVRJQUxJU0VEOwotKwkvKiBJZiBtZXRob2QgaGFzIHByb2JsZW1zIHVuaW5zdGFudGlhdGluZywg cmV0dXJuIGVycm9yICovCi0rCXJldHVybiBydjsKLSsJfQotKwotK2ludCBGSVBTX2RyYmdfc2V0 X2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKLSsJc2l6ZV90ICgqZ2V0X2VudHJvcHkpKERSQkdf Q1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90 IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKSwKLSsJdm9pZCAoKmNsZWFudXBfZW50cm9weSkoRFJC R19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCi0rCXNpemVfdCBl bnRyb3B5X2Jsb2NrbGVuLAotKwlzaXplX3QgKCpnZXRfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVu c2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNp emVfdCBtYXhfbGVuKSwKLSsJdm9pZCAoKmNsZWFudXBfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVu c2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pKQotKwl7Ci0rCWlmIChkY3R4LT5zdGF0dXMg IT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKLSsJCXJldHVybiAwOwotKwlkY3R4LT5lbnRy b3B5X2Jsb2NrbGVuID0gZW50cm9weV9ibG9ja2xlbjsKLSsJZGN0eC0+Z2V0X2VudHJvcHkgPSBn ZXRfZW50cm9weTsKLSsJZGN0eC0+Y2xlYW51cF9lbnRyb3B5ID0gY2xlYW51cF9lbnRyb3B5Owot KwlkY3R4LT5nZXRfbm9uY2UgPSBnZXRfbm9uY2U7Ci0rCWRjdHgtPmNsZWFudXBfbm9uY2UgPSBj bGVhbnVwX25vbmNlOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBGSVBTX2RyYmdfc2V0X3Jh bmRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAotKwlzaXplX3QgKCpnZXRfYWRpbikoRFJCR19D VFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQpLAotKwl2b2lkICgqY2xlYW51cF9hZGluKShE UkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSwKLSsJaW50ICgq cmFuZF9zZWVkX2NiKShEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpidWYsIGludCBudW0pLAot KwlpbnQgKCpyYW5kX2FkZF9jYikoRFJCR19DVFggKmN0eCwKLSsJCQkJY29uc3Qgdm9pZCAqYnVm LCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSkpCi0rCXsKLSsJaWYgKGRjdHgtPnN0YXR1cyAhPSBE UkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQotKwkJcmV0dXJuIDA7Ci0rCWRjdHgtPmdldF9hZGlu ID0gZ2V0X2FkaW47Ci0rCWRjdHgtPmNsZWFudXBfYWRpbiA9IGNsZWFudXBfYWRpbjsKLSsJZGN0 eC0+cmFuZF9zZWVkX2NiID0gcmFuZF9zZWVkX2NiOwotKwlkY3R4LT5yYW5kX2FkZF9jYiA9IHJh bmRfYWRkX2NiOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3ZvaWQgKkZJUFNfZHJiZ19nZXRfYXBw X2RhdGEoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJcmV0dXJuIGRjdHgtPmFwcF9kYXRhOwotKwl9 Ci0rCi0rdm9pZCBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4LCB2b2lkICph cHBfZGF0YSkKLSsJewotKwlkY3R4LT5hcHBfZGF0YSA9IGFwcF9kYXRhOwotKwl9Ci0rCi0rc2l6 ZV90IEZJUFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJcmV0 dXJuIGRjdHgtPmJsb2NrbGVuZ3RoOwotKwl9Ci0rCi0raW50IEZJUFNfZHJiZ19nZXRfc3RyZW5n dGgoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJcmV0dXJuIGRjdHgtPnN0cmVuZ3RoOwotKwl9Ci0r Ci0rdm9pZCBGSVBTX2RyYmdfc2V0X2NoZWNrX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQg aW50ZXJ2YWwpCi0rCXsKLSsJZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsID0gaW50ZXJ2YWw7 Ci0rCX0KLSsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdfQ1RYICpk Y3R4LCBpbnQgaW50ZXJ2YWwpCi0rCXsKLSsJZGN0eC0+cmVzZWVkX2ludGVydmFsID0gaW50ZXJ2 YWw7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfc3RpY2sgPSAwOwotKwotK3ZvaWQgRklQU19k cmJnX3N0aWNrKGludCBvbm9mZikKLSsJewotKwlkcmJnX3N0aWNrID0gb25vZmY7Ci0rCX0KLSsK LSsvKiBDb250aW51b3VzIERSQkcgdXRpbGl0eSBmdW5jdGlvbiAqLwotK2ludCBmaXBzX2RyYmdf Y3BybmdfdGVzdChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqb3V0KQotKwl7 Ci0rCS8qIE5vIENQUk5HIGluIHRlc3QgbW9kZSAqLwotKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJC R19GTEFHX1RFU1QpCi0rCQlyZXR1cm4gMTsKLSsJLyogQ2hlY2sgYmxvY2sgaXMgdmFsaWQ6IHNo b3VsZCBuZXZlciBoYXBwZW4gKi8KLSsJaWYgKGRjdHgtPmxiX3ZhbGlkID09IDApCi0rCQl7Ci0r CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0lOVEVSTkFMX0VS Uk9SKTsKLSsJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJCXJldHVybiAwOwotKwkJfQot KwlpZiAoZHJiZ19zdGljaykKLSsJCW1lbWNweShkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xl bmd0aCk7Ci0rCS8qIENoZWNrIGFnYWluc3QgbGFzdCBibG9jazogZmFpbCBpZiBtYXRjaCAqLwot KwlpZiAoIW1lbWNtcChkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rCQl7Ci0r CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0RSQkdfU1RVQ0sp OwotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCS8q IFNhdmUgbGFzdCBibG9jayBmb3IgbmV4dCBjb21wYXJpc29uICovCi0rCW1lbWNweShkY3R4LT5s Yiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0rCXJldHVybiAxOwotKwl9Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jLmZpcHMgb3BlbnNzbC0x LjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMuZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2Mzc4 NTY3NyArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5k LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjM3ODU2NzcgKzAyMDAKLUBAIC0wLDAgKzEsMTcyIEBA Ci0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19yYW5kLmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0 ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBw cm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLSsv KiBNYXBwaW5nIG9mIFNQODAwLTkwIERSQkdzIHRvIE9wZW5TU0wgUkFORF9NRVRIT0QgKi8KLSsK LSsvKiBTaW5jZSB3ZSBvbmx5IGhhdmUgb25lIGdsb2JhbCBQUk5HIHVzZWQgYXQgYW55IHRpbWUg aW4gT3BlblNTTCB1c2UgYSBnbG9iYWwKLSsgKiB2YXJpYWJsZSB0byBzdG9yZSBjb250ZXh0Lgot KyAqLwotKwotK3N0YXRpYyBEUkJHX0NUWCBvc3NsX2RjdHg7Ci0rCi0rRFJCR19DVFggKkZJUFNf Z2V0X2RlZmF1bHRfZHJiZyh2b2lkKQotKwl7Ci0rCXJldHVybiAmb3NzbF9kY3R4OwotKwl9Ci0r Ci0rc3RhdGljIGludCBmaXBzX2RyYmdfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgY291 bnQpCi0rCXsKLSsJRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OwotKwlpbnQgcnYgPSAwOwot Kwl1bnNpZ25lZCBjaGFyICphZGluID0gTlVMTDsKLSsJc2l6ZV90IGFkaW5sZW4gPSAwOwotKwlD UllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlkbyAKLSsJCXsKLSsJCXNpemVfdCBy Y250OwotKwkJaWYgKGNvdW50ID4gKGludClkY3R4LT5tYXhfcmVxdWVzdCkKLSsJCQlyY250ID0g ZGN0eC0+bWF4X3JlcXVlc3Q7Ci0rCQllbHNlCi0rCQkJcmNudCA9IGNvdW50OwotKwkJaWYgKGRj dHgtPmdldF9hZGluKQotKwkJCXsKLSsJCQlhZGlubGVuID0gZGN0eC0+Z2V0X2FkaW4oZGN0eCwg JmFkaW4pOwotKwkJCWlmIChhZGlubGVuICYmICFhZGluKQotKwkJCQl7Ci0rCQkJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19CWVRFUywgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfQURESVRJT05B TF9JTlBVVCk7Ci0rCQkJCWdvdG8gZXJyOwotKwkJCQl9Ci0rCQkJfQotKwkJcnYgPSBGSVBTX2Ry YmdfZ2VuZXJhdGUoZGN0eCwgb3V0LCByY250LCAwLCBhZGluLCBhZGlubGVuKTsKLSsJCWlmIChh ZGluKQotKwkJCXsKLSsJCQlpZiAoZGN0eC0+Y2xlYW51cF9hZGluKQotKwkJCQlkY3R4LT5jbGVh bnVwX2FkaW4oZGN0eCwgYWRpbiwgYWRpbmxlbik7Ci0rCQkJYWRpbiA9IE5VTEw7Ci0rCQkJfQot KwkJaWYgKCFydikKLSsJCQlnb3RvIGVycjsKLSsJCW91dCArPSByY250OwotKwkJY291bnQgLT0g cmNudDsKLSsJCX0KLSsJd2hpbGUgKGNvdW50KTsKLSsJcnYgPSAxOwotKwllcnI6Ci0rCUNSWVBU T193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0rc3Rh dGljIGludCBmaXBzX2RyYmdfcHNldWRvKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50KQot Kwl7Ci0rCWlmIChmaXBzX2RyYmdfYnl0ZXMob3V0LCBjb3VudCkgPD0gMCkKLSsJCXJldHVybiAt MTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19zdGF0dXModm9p ZCkKLSsJewotKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0rCWludCBydjsKLSsJQ1JZ UFRPX3JfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcnYgPSBkY3R4LT5zdGF0dXMgPT0gRFJC R19TVEFUVVNfUkVBRFkgPyAxIDogMDsKLSsJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JB TkQpOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBmaXBzX2RyYmdfY2xlYW51 cCh2b2lkKQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsJQ1JZUFRPX3df bG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7 Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJfQotKwotK3N0YXRpYyBp bnQgZmlwc19kcmJnX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCi0rCXsKLSsJ RFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OwotKwlpZiAoZGN0eC0+cmFuZF9zZWVkX2NiKQot KwkJcmV0dXJuIGRjdHgtPnJhbmRfc2VlZF9jYihkY3R4LCBzZWVkLCBzZWVkbGVuKTsKLSsJcmV0 dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19hZGQoY29uc3Qgdm9pZCAqc2Vl ZCwgaW50IHNlZWRsZW4sCi0rCQkJCQlkb3VibGUgYWRkX2VudHJvcHkpCi0rCXsKLSsJRFJCR19D VFggKmRjdHggPSAmb3NzbF9kY3R4OwotKwlpZiAoZGN0eC0+cmFuZF9hZGRfY2IpCi0rCQlyZXR1 cm4gZGN0eC0+cmFuZF9hZGRfY2IoZGN0eCwgc2VlZCwgc2VlZGxlbiwgYWRkX2VudHJvcHkpOwot KwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX2RyYmdf bWV0aCA9Ci0rCXsKLSsJZmlwc19kcmJnX3NlZWQsCi0rCWZpcHNfZHJiZ19ieXRlcywKLSsJZmlw c19kcmJnX2NsZWFudXAsCi0rCWZpcHNfZHJiZ19hZGQsCi0rCWZpcHNfZHJiZ19wc2V1ZG8sCi0r CWZpcHNfZHJiZ19zdGF0dXMKLSsJfTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19kcmJn X21ldGhvZCh2b2lkKQotKwl7Ci0rCXJldHVybiAmcmFuZF9kcmJnX21ldGg7Ci0rCX0KLSsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jLmZp cHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMKLS0tLSBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYy5maXBzCTIwMTIt MDQtMjAgMDk6MDc6MDYuMjY0Nzg1Njk4ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjQ3ODU2OTgg KzAyMDAKLUBAIC0wLDAgKzEsODYyIEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19zZWxmdGVz dC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3Ns Lm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBt ZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9w ZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAg ICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0r ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsjaW5j bHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2luY2x1ZGUgImZpcHNfZHJiZ19zZWxmdGVzdC5oIgot KwotK3R5cGVkZWYgc3RydWN0IHsKLSsJaW50IHBvc3Q7Ci0rCWludCBuaWQ7Ci0rCXVuc2lnbmVk IGludCBmbGFnczsKLSsKLSsJLyogS0FUIGRhdGEgZm9yIG5vIFBSICovCi0rCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmVudDsKLSsJc2l6ZV90IGVudGxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAq bm9uY2U7Ci0rCXNpemVfdCBub25jZWxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqcGVyczsK LSsJc2l6ZV90IHBlcnNsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW47Ci0rCXNpemVf dCBhZGlubGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRyZXNlZWQ7Ci0rCXNpemVfdCBl bnRyZXNlZWRsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5yZXNlZWQ7Ci0rCXNpemVf dCBhZGlucmVzZWVkbGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluMjsKLSsJc2l6ZV90 IGFkaW4ybGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQ7Ci0rCXNpemVfdCBrYXRsZW47 Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdDI7Ci0rCXNpemVfdCBrYXQybGVuOwotKwotKwkv KiBLQVQgZGF0YSBmb3IgUFIgKi8KLSsJY29uc3QgdW5zaWduZWQgY2hhciAqZW50X3ByOwotKwlz aXplX3QgZW50bGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZV9wcjsKLSsJc2l6 ZV90IG5vbmNlbGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzX3ByOwotKwlzaXpl X3QgcGVyc2xlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbl9wcjsKLSsJc2l6ZV90 IGFkaW5sZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudHByX3ByOwotKwlzaXplX3Qg ZW50cHJsZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5nX3ByOwotKwlzaXplX3Qg YWRpbmdsZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudGdfcHI7Ci0rCXNpemVfdCBl bnRnbGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXRfcHI7Ci0rCXNpemVfdCBrYXRs ZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdDJfcHI7Ci0rCXNpemVfdCBrYXQybGVu X3ByOwotKwotKwl9IERSQkdfU0VMRlRFU1RfREFUQTsKLSsKLSsjZGVmaW5lIG1ha2VfZHJiZ190 ZXN0X2RhdGEobmlkLCBmbGFnLCBwciwgcCkge3AsIG5pZCwgZmxhZyB8IERSQkdfRkxBR19URVNU LCBcCi0rCXByIyNfZW50cm9weWlucHV0LCBzaXplb2YocHIjI19lbnRyb3B5aW5wdXQpLCBcCi0r CXByIyNfbm9uY2UsIHNpemVvZihwciMjX25vbmNlKSwgXAotKwlwciMjX3BlcnNvbmFsaXphdGlv bnN0cmluZywgc2l6ZW9mKHByIyNfcGVyc29uYWxpemF0aW9uc3RyaW5nKSwgXAotKwlwciMjX2Fk ZGl0aW9uYWxpbnB1dCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0KSwgXAotKwlwciMjX2Vu dHJvcHlpbnB1dHJlc2VlZCwgc2l6ZW9mKHByIyNfZW50cm9weWlucHV0cmVzZWVkKSwgXAotKwlw ciMjX2FkZGl0aW9uYWxpbnB1dHJlc2VlZCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0cmVz ZWVkKSwgXAotKwlwciMjX2FkZGl0aW9uYWxpbnB1dDIsIHNpemVvZihwciMjX2FkZGl0aW9uYWxp bnB1dDIpLCBcCi0rCXByIyNfaW50X3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfaW50X3JldHVy bmVkYml0cyksIFwKLSsJcHIjI19yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3JldHVybmVkYml0 cyksIFwKLSsJcHIjI19wcl9lbnRyb3B5aW5wdXQsIHNpemVvZihwciMjX3ByX2VudHJvcHlpbnB1 dCksIFwKLSsJcHIjI19wcl9ub25jZSwgc2l6ZW9mKHByIyNfcHJfbm9uY2UpLCBcCi0rCXByIyNf cHJfcGVyc29uYWxpemF0aW9uc3RyaW5nLCBzaXplb2YocHIjI19wcl9wZXJzb25hbGl6YXRpb25z dHJpbmcpLCBcCi0rCXByIyNfcHJfYWRkaXRpb25hbGlucHV0LCBzaXplb2YocHIjI19wcl9hZGRp dGlvbmFsaW5wdXQpLCBcCi0rCXByIyNfcHJfZW50cm9weWlucHV0cHIsIHNpemVvZihwciMjX3By X2VudHJvcHlpbnB1dHByKSwgXAotKwlwciMjX3ByX2FkZGl0aW9uYWxpbnB1dDIsIHNpemVvZihw ciMjX3ByX2FkZGl0aW9uYWxpbnB1dDIpLCBcCi0rCXByIyNfcHJfZW50cm9weWlucHV0cHIyLCBz aXplb2YocHIjI19wcl9lbnRyb3B5aW5wdXRwcjIpLCBcCi0rCXByIyNfcHJfaW50X3JldHVybmVk Yml0cywgc2l6ZW9mKHByIyNfcHJfaW50X3JldHVybmVkYml0cyksIFwKLSsJcHIjI19wcl9yZXR1 cm5lZGJpdHMsIHNpemVvZihwciMjX3ByX3JldHVybmVkYml0cyksIFwKLSsJfQotKwotKyNkZWZp bmUgbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihuaWQsIHByLCBwKSBcCi0rCW1ha2VfZHJiZ190ZXN0 X2RhdGEobmlkLCBEUkJHX0ZMQUdfQ1RSX1VTRV9ERiwgcHIsIHApCi0rCi0rI2RlZmluZSBtYWtl X2RyYmdfdGVzdF9kYXRhX2VjKGN1cnZlLCBtZCwgcHIsIHApIFwKLSsJbWFrZV9kcmJnX3Rlc3Rf ZGF0YSgoY3VydmUgPDwgMTYpIHwgbWQgLCAwLCBwciwgcCkKLSsKLStzdGF0aWMgRFJCR19TRUxG VEVTVF9EQVRBIGRyYmdfdGVzdFtdID0gewotKwltYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5JRF9h ZXNfMTI4X2N0ciwgYWVzXzEyOF91c2VfZGYsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhX2Rm KE5JRF9hZXNfMTkyX2N0ciwgYWVzXzE5Ml91c2VfZGYsIDApLAotKwltYWtlX2RyYmdfdGVzdF9k YXRhX2RmKE5JRF9hZXNfMjU2X2N0ciwgYWVzXzI1Nl91c2VfZGYsIDEpLAotKwltYWtlX2RyYmdf dGVzdF9kYXRhKE5JRF9hZXNfMTI4X2N0ciwgMCwgYWVzXzEyOF9ub19kZiwgMCksCi0rCW1ha2Vf ZHJiZ190ZXN0X2RhdGEoTklEX2Flc18xOTJfY3RyLCAwLCBhZXNfMTkyX25vX2RmLCAwKSwKLSsJ bWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzI1Nl9jdHIsIDAsIGFlc18yNTZfbm9fZGYsIDEp LAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGExLCAwLCBzaGExLCAwKSwKLSsJbWFrZV9k cmJnX3Rlc3RfZGF0YShOSURfc2hhMjI0LCAwLCBzaGEyMjQsIDApLAotKwltYWtlX2RyYmdfdGVz dF9kYXRhKE5JRF9zaGEyNTYsIDAsIHNoYTI1NiwgMSksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEo TklEX3NoYTM4NCwgMCwgc2hhMzg0LCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hh NTEyLCAwLCBzaGE1MTIsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNI QTEsIDAsIGhtYWNfc2hhMSwgMCksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRo U0hBMjI0LCAwLCBobWFjX3NoYTIyNCwgMCksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2ht YWNXaXRoU0hBMjU2LCAwLCBobWFjX3NoYTI1NiwgMSksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEo TklEX2htYWNXaXRoU0hBMzg0LCAwLCBobWFjX3NoYTM4NCwgMCksCi0rCW1ha2VfZHJiZ190ZXN0 X2RhdGEoTklEX2htYWNXaXRoU0hBNTEyLCAwLCBobWFjX3NoYTUxMiwgMCksCi0rCXswLDAsMH0K LSsJfTsKLSsKLSt0eXBlZGVmIHN0cnVjdCAKLSsJewotKwljb25zdCB1bnNpZ25lZCBjaGFyICpl bnQ7Ci0rCXNpemVfdCBlbnRsZW47Ci0rCWludCBlbnRjbnQ7Ci0rCWNvbnN0IHVuc2lnbmVkIGNo YXIgKm5vbmNlOwotKwlzaXplX3Qgbm9uY2VsZW47Ci0rCWludCBub25jZWNudDsKLSsJfSBURVNU X0VOVDsKLSsKLStzdGF0aWMgc2l6ZV90IHRlc3RfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5z aWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg ZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQotKwl7Ci0rCVRFU1RfRU5U ICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKLSsJKnBvdXQgPSAodW5zaWduZWQg Y2hhciAqKXQtPmVudDsKLSsJdC0+ZW50Y250Kys7Ci0rCXJldHVybiB0LT5lbnRsZW47Ci0rCX0K LSsKLStzdGF0aWMgc2l6ZV90IHRlc3Rfbm9uY2UoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNo YXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHks IHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKLSsJewotKwlURVNUX0VOVCAqdCA9IEZJ UFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7Ci0rCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0 LT5ub25jZTsKLSsJdC0+bm9uY2VjbnQrKzsKLSsJcmV0dXJuIHQtPm5vbmNlbGVuOwotKwl9Ci0r Ci0rc3RhdGljIGludCBmaXBzX2RyYmdfc2luZ2xlX2thdChEUkJHX0NUWCAqZGN0eCwgRFJCR19T RUxGVEVTVF9EQVRBICp0ZCwKLSsJCQkJCQkJCWludCBxdWljaykKLSsJewotKwlURVNUX0VOVCB0 OwotKwlpbnQgcnYgPSAwOwotKwlzaXplX3QgYWRpbmxlbjsKLSsJdW5zaWduZWQgY2hhciByYW5k b3V0WzEwMjRdOwotKwotKwkvKiBJbml0aWFsIHRlc3Qgd2l0aG91dCBQUiAqLwotKwotKwkvKiBJ bnN0YW50aWF0ZSBEUkJHIHdpdGggdGVzdCBlbnRyb3B5LCBub25jZSBhbmQgcGVyc29uYWxpc2F0 aW9uCi0rCSAqIHN0cmluZy4KLSsJICovCi0rCi0rCWlmICghRklQU19kcmJnX2luaXQoZGN0eCwg dGQtPm5pZCwgdGQtPmZsYWdzKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUZJUFNfZHJiZ19zZXRf Y2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCi0rCQly ZXR1cm4gMDsKLSsKLSsJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7Ci0rCi0rCXQu ZW50ID0gdGQtPmVudDsKLSsJdC5lbnRsZW4gPSB0ZC0+ZW50bGVuOwotKwl0Lm5vbmNlID0gdGQt Pm5vbmNlOwotKwl0Lm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuOwotKwl0LmVudGNudCA9IDA7Ci0r CXQubm9uY2VjbnQgPSAwOwotKwotKwlpZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0 ZC0+cGVycywgdGQtPnBlcnNsZW4pKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIE5vdGUgZm9yIENU UiB3aXRob3V0IERGIHNvbWUgYWRkaXRpb25hbCBpbnB1dCB2YWx1ZXMKLSsJICogaWdub3JlIGJ5 dGVzIGFmdGVyIHRoZSBrZXlsZW5ndGg6IHNvIHJlZHVjZSBhZGlubGVuCi0rCSAqIHRvIGhhbGYg dG8gZW5zdXJlIGludmFsaWQgZGF0YSBpcyBmZWQgaW4uCi0rCSAqLwotKwlpZiAoIWZpcHNfcG9z dF9jb3JydXB0KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+aWZsYWdzKSkKLSsJ CWFkaW5sZW4gPSB0ZC0+YWRpbmxlbiAvIDI7Ci0rCWVsc2UKLSsJCWFkaW5sZW4gPSB0ZC0+YWRp bmxlbjsKLSsKLSsJLyogR2VuZXJhdGUgd2l0aCBubyBQUiBhbmQgdmVyaWZ5IG91dHB1dCBtYXRj aGVzIGV4cGVjdGVkIGRhdGEgKi8KLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFu ZG91dCwgdGQtPmthdGxlbiwgMCwKLSsJCQkJdGQtPmFkaW4sIGFkaW5sZW4pKQotKwkJZ290byBl cnI7Ci0rCi0rCWlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdCwgdGQtPmthdGxlbikpCi0rCQl7 Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX05PUFJfVEVT VDFfRkFJTFVSRSk7Ci0rCQlnb3RvIGVycjI7Ci0rCQl9Ci0rCS8qIElmIGFiYnJldmlhdGVkIFBP U1QgZW5kIG9mIHRlc3QgKi8KLSsJaWYgKHF1aWNrKQotKwkJewotKwkJcnYgPSAxOwotKwkJZ290 byBlcnI7Ci0rCQl9Ci0rCS8qIFJlc2VlZCBEUkJHIHdpdGggdGVzdCBlbnRyb3B5IGFuZCBhZGRp dGlvbmFsIGlucHV0ICovCi0rCXQuZW50ID0gdGQtPmVudHJlc2VlZDsKLSsJdC5lbnRsZW4gPSB0 ZC0+ZW50cmVzZWVkbGVuOwotKwotKwlpZiAoIUZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFk aW5yZXNlZWQsIHRkLT5hZGlucmVzZWVkbGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBHZW5l cmF0ZSB3aXRoIG5vIFBSIGFuZCB2ZXJpZnkgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YSAq LwotKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0Mmxlbiwg MCwKLSsJCQkJdGQtPmFkaW4yLCB0ZC0+YWRpbjJsZW4pKQotKwkJZ290byBlcnI7Ci0rCi0rCWlm IChtZW1jbXAocmFuZG91dCwgdGQtPmthdDIsIHRkLT5rYXQybGVuKSkKLSsJCXsKLSsJCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfTk9QUl9URVNUMl9GQUlMVVJF KTsKLSsJCWdvdG8gZXJyMjsKLSsJCX0KLSsKLSsJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0 eCk7Ci0rCi0rCS8qIE5vdyB0ZXN0IHdpdGggUFIgKi8KLSsKLSsJLyogSW5zdGFudGlhdGUgRFJC RyB3aXRoIHRlc3QgZW50cm9weSwgbm9uY2UgYW5kIHBlcnNvbmFsaXNhdGlvbgotKwkgKiBzdHJp bmcuCi0rCSAqLwotKwlpZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFn cykpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0 ZXN0X2VudHJvcHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rCUZJ UFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOwotKwotKwl0LmVudCA9IHRkLT5lbnRfcHI7 Ci0rCXQuZW50bGVuID0gdGQtPmVudGxlbl9wcjsKLSsJdC5ub25jZSA9IHRkLT5ub25jZV9wcjsK LSsJdC5ub25jZWxlbiA9IHRkLT5ub25jZWxlbl9wcjsKLSsJdC5lbnRjbnQgPSAwOwotKwl0Lm5v bmNlY250ID0gMDsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBl cnNfcHIsIHRkLT5wZXJzbGVuX3ByKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBOb3cgZ2VuZXJh dGUgd2l0aCBQUjogd2UgbmVlZCB0byBzdXBwbHkgZW50cm9weSBhcyB0aGlzIHdpbGwKLSsJICog cGVyZm9ybSBhIHJlc2VlZCBvcGVyYXRpb24uIENoZWNrIG91dHB1dCBtYXRjaGVzIGV4cGVjdGVk IHZhbHVlLgotKwkgKi8KLSsKLSsJdC5lbnQgPSB0ZC0+ZW50cHJfcHI7Ci0rCXQuZW50bGVuID0g dGQtPmVudHBybGVuX3ByOwotKwotKwkvKiBOb3RlIGZvciBDVFIgd2l0aG91dCBERiBzb21lIGFk ZGl0aW9uYWwgaW5wdXQgdmFsdWVzCi0rCSAqIGlnbm9yZSBieXRlcyBhZnRlciB0aGUga2V5bGVu Z3RoOiBzbyByZWR1Y2UgYWRpbmxlbgotKwkgKiB0byBoYWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRh dGEgaXMgZmVkIGluLgotKwkgKi8KLSsJaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1Rf RFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPmlmbGFncykpCi0rCQlhZGlubGVuID0gdGQtPmFkaW5s ZW5fcHIgLyAyOwotKwllbHNlCi0rCQlhZGlubGVuID0gdGQtPmFkaW5sZW5fcHI7Ci0rCWlmICgh RklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW5fcHIsIDEsCi0rCQkJ CXRkLT5hZGluX3ByLCBhZGlubGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAobWVtY21wKHJh bmRvdXQsIHRkLT5rYXRfcHIsIHRkLT5rYXRsZW5fcHIpKQotKwkJewotKwkJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9QUl9URVNUMV9GQUlMVVJFKTsKLSsJCWdv dG8gZXJyMjsKLSsJCX0KLSsKLSsJLyogTm93IGdlbmVyYXRlIGFnYWluIHdpdGggUFI6IHN1cHBs eSBuZXcgZW50cm9weSBhZ2Fpbi4KLSsJICogQ2hlY2sgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQg dmFsdWUuCi0rCSAqLwotKwotKwl0LmVudCA9IHRkLT5lbnRnX3ByOwotKwl0LmVudGxlbiA9IHRk LT5lbnRnbGVuX3ByOwotKwotKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0 LCB0ZC0+a2F0Mmxlbl9wciwgMSwKLSsJCQkJdGQtPmFkaW5nX3ByLCB0ZC0+YWRpbmdsZW5fcHIp KQotKwkJZ290byBlcnI7Ci0rCi0rCWlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdDJfcHIsIHRk LT5rYXQybGVuX3ByKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVf S0FULCBGSVBTX1JfUFJfVEVTVDJfRkFJTFVSRSk7Ci0rCQlnb3RvIGVycjI7Ci0rCQl9Ci0rCS8q IEFsbCBPSywgdGVzdCBjb21wbGV0ZSAqLwotKwlydiA9IDE7Ci0rCi0rCWVycjoKLSsJaWYgKHJ2 ID09IDApCi0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCWVycjI6Ci0rCUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgp OwotKwkKLSsJcmV0dXJuIHJ2OwotKwotKwl9Ci0rCi0rLyogSW5pdGlhbGlzZSBhIERSQkcgYmFz ZWQgb24gc2VsZnRlc3QgZGF0YSAqLwotKwotK3N0YXRpYyBpbnQgZG9fZHJiZ19pbml0KERSQkdf Q1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkLCBURVNUX0VOVCAqdCkKLSsJewotKwot KwlpZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCi0rCQlyZXR1 cm4gMDsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJv cHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rCUZJUFNfZHJiZ19z ZXRfYXBwX2RhdGEoZGN0eCwgdCk7Ci0rCi0rCXQtPmVudCA9IHRkLT5lbnQ7Ci0rCXQtPmVudGxl biA9IHRkLT5lbnRsZW47Ci0rCXQtPm5vbmNlID0gdGQtPm5vbmNlOwotKwl0LT5ub25jZWxlbiA9 IHRkLT5ub25jZWxlbjsKLSsJdC0+ZW50Y250ID0gMDsKLSsJdC0+bm9uY2VjbnQgPSAwOwotKwly ZXR1cm4gMTsKLSsJfQotKwotKy8qIEluaXRpYWxpc2UgYW5kIGluc3RhbnRpYXRlIERSQkcgYmFz ZWQgb24gc2VsZnRlc3QgZGF0YSAqLwotK3N0YXRpYyBpbnQgZG9fZHJiZ19pbnN0YW50aWF0ZShE UkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCwKLSsJCQkJCQkJCVRFU1RfRU5U ICp0KQotKwl7Ci0rCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCB0KSkKLSsJCXJldHVybiAw OwotKwlpZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNs ZW4pKQotKwkJcmV0dXJuIDA7Ci0rCi0rCXJldHVybiAxOwotKwl9Ci0rCi0rLyogVGhpcyBmdW5j dGlvbiBwZXJmb3JtcyBleHRlbnNpdmUgZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQgYnkgU1A4 MDAtOTAuCi0rICogSW5kdWNlIHNldmVyYWwgZmFpbHVyZSBtb2RlcyBhbmQgY2hlY2sgYW4gZXJy b3IgY29uZGl0aW9uIGlzIHNldC4KLSsgKiBUaGlzIGZ1bmN0aW9uIGFsb25nIHdpdGggZmlwc19k cmJnX3NpbmdsZV9rYXQgcGVmb3JtcyB0aGUgaGVhbHRoIGNoZWNraW5nCi0rICogb3BlcmF0aW9u LgotKyAqLwotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2Vycm9yX2NoZWNrKERSQkdfQ1RYICpk Y3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgcmFuZG91 dFsxMDI0XTsKLSsJVEVTVF9FTlQgdDsKLSsJc2l6ZV90IGk7Ci0rCXVuc2lnbmVkIGludCByZXNl ZWRfY291bnRlcl90bXA7Ci0rCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKWRj dHg7Ci0rCi0rCS8qIEluaXRpYWxpc2UgRFJCRyAqLwotKwotKwlpZiAoIWRvX2RyYmdfaW5pdChk Y3R4LCB0ZCwgJnQpKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIERvbid0IHJlcG9ydCBpbmR1Y2Vk IGVycm9ycyAqLwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKwkvKiBQ ZXJzb25hbGlzYXRpb24gc3RyaW5nIHRlc3RzICovCi0rCi0rCS8qIFRlc3QgZGV0ZWN0aW9uIG9m IHRvbyBsYXJnZSBwZXJzb25saXNhdGlvbiBzdHJpbmcgKi8KLSsKLSsJaWYgKEZJUFNfZHJiZ19p bnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgZGN0eC0+bWF4X3BlcnMgKyAxKSA+IDApCi0rCQl7 Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9QRVJTT05B TElTQVRJT05fRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyog RW50cm9weSBzb3VyY2UgdGVzdHMgKi8KLSsKLSsJLyogVGVzdCBlbnRyb3B5IHNvdXJjZSBmYWls dXJlIGRldGVjaW9uOiBpLmUuIHJldHVybnMgbm8gZGF0YSAqLwotKwotKwl0LmVudGxlbiA9IDA7 Ci0rCi0rCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJz bGVuKSA+IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss IEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0r Ci0rCS8qIFRyeSB0byBnZW5lcmF0ZSBvdXRwdXQgZnJvbSB1bmluc3RhbnRpYXRlZCBEUkJHICov Ci0rCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwK LSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0dFTkVSQVRFX0VSUk9SX1VOREVURUNURUQpOwot KwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJS OwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJewotKwkJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJP Uik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQs ICZ0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJS OwotKwotKwkvKiBUZXN0IGluc3VmZmljaWVudCBlbnRyb3B5ICovCi0rCi0rCXQuZW50bGVuID0g ZGN0eC0+bWluX2VudHJvcHkgLSAxOwotKwotKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRj dHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsK LSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VS UjsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJS T1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIFRlc3QgdG9vIG11Y2ggZW50cm9weSAq LwotKwotKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJZ290byBlcnI7Ci0r Ci0rCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCXQuZW50bGVuID0gZGN0 eC0+bWF4X2VudHJvcHkgKyAxOwotKwotKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgs IHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJ CWdvdG8gZXJyOwotKwkJfQotKwotKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsK LSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1Ip OwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIE5vbmNlIHRlc3RzICovCi0rCi0rCS8qIFRl c3QgdG9vIHNtYWxsIG5vbmNlICovCi0rCi0rCWlmIChkY3R4LT5taW5fbm9uY2UpCi0rCQl7Ci0r Ci0rCQlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJCWdvdG8gZXJyOwotKwot KwkJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJCXQubm9uY2VsZW4gPSBk Y3R4LT5taW5fbm9uY2UgLSAxOwotKwotKwkJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4 LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRCk7Ci0r CQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9F UlI7Ci0rCQlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJCXsKLSsJCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRF X0VSUk9SKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCS8qIFRlc3QgdG9v IGxhcmdlIG5vbmNlICovCi0rCi0rCWlmIChkY3R4LT5tYXhfbm9uY2UpCi0rCQl7Ci0rCi0rCQlp ZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJCWdvdG8gZXJyOwotKwotKwkJZGN0 eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJCXQubm9uY2VsZW4gPSBkY3R4LT5t YXhfbm9uY2UgKyAxOwotKwotKwkJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+ cGVycywgdGQtPnBlcnNsZW4pID4gMCkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQkJZ290 byBlcnI7Ci0rCQkJfQotKwotKwkJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0r CQlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJCXsKLSsJCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9S KTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCS8qIEluc3RhbnRpYXRlIHdp dGggdmFsaWQgZGF0YS4gKi8KLSsJaWYgKCFkb19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLCAm dCkpCi0rCQkJZ290byBlcnI7Ci0rCi0rCS8qIENoZWNrIGdlbmVyYXRpb24gaXMgbm93IE9LICov Ci0rCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAs Ci0rCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+ aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJLyogUmVxdWVzdCB0b28gbXVjaCBkYXRh IGZvciBvbmUgcmVxdWVzdCAqLwotKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRv dXQsIGRjdHgtPm1heF9yZXF1ZXN0ICsgMSwgMCwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVu KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19S X1JFUVVFU1RfTEVOR1RIX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0r Ci0rCS8qIFRyeSB0b28gbGFyZ2UgYWRkaXRpb25hbCBpbnB1dCAqLwotKwlpZiAoRklQU19kcmJn X2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCi0rCQkJCXRkLT5hZGluLCBk Y3R4LT5tYXhfYWRpbiArIDEpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJ CWdvdG8gZXJyOwotKwkJfQotKwotKwkvKiBDaGVjayBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVx dWVzdCBmYWlscyBpZiBlbnRyb3B5IHNvdXJjZQotKwkgKiBmYWlsdXJlLgotKwkgKi8KLSsKLSsJ dC5lbnRsZW4gPSAwOwotKwotKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQs IHRkLT5rYXRsZW4sIDEsCi0rCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9S X1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCQkKLSsJZGN0eC0+aWZsYWdzICY9 IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkp Ci0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9V TklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwotKwkvKiBJbnN0 YW50aWF0ZSBhZ2FpbiB3aXRoIHZhbGlkIGRhdGEgKi8KLSsKLSsJaWYgKCFkb19kcmJnX2luc3Rh bnRpYXRlKGRjdHgsIHRkLCAmdCkpCi0rCQkJZ290byBlcnI7Ci0rCS8qIFRlc3QgcmVzZWVkIGNv dW50ZXIgd29ya3MgKi8KLSsJLyogU2F2ZSBpbml0aWFsIHJlc2VlZCBjb3VudGVyICovCi0rCXJl c2VlZF9jb3VudGVyX3RtcCA9IGRjdHgtPnJlc2VlZF9jb3VudGVyOwotKwkvKiBTZXQgcmVzZWVk IGNvdW50ZXIgdG8gYmV5b25kIGludGVydmFsICovCi0rCWRjdHgtPnJlc2VlZF9jb3VudGVyID0g ZGN0eC0+cmVzZWVkX2ludGVydmFsOwotKwotKwkvKiBHZW5lcmF0ZSBvdXRwdXQgYW5kIGNoZWNr IGVudHJvcHkgaGFzIGJlZW4gcmVxdWVzdGVkIGZvciByZXNlZWQgKi8KLSsJdC5lbnRjbnQgPSAw OwotKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAw LAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJZ290byBlcnI7Ci0rCWlmICh0LmVu dGNudCAhPSAxKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNL LCBGSVBTX1JfRU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQpOwotKwkJZ290byBlcnI7 Ci0rCQl9Ci0rCS8qIENoZWNrIHJlc2VlZCBjb3VudGVyIGhhcyBiZWVuIHJlc2V0ICovCi0rCWlm IChkY3R4LT5yZXNlZWRfY291bnRlciAhPSByZXNlZWRfY291bnRlcl90bXAgKyAxKQotKwkJewot KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUkVTRUVEX0NP VU5URVJfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmlmbGFncyAmPSB+ RFJCR19GTEFHX05PRVJSOwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQot KwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5J TlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogQ2hlY2sgcHJl ZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3QgZmFpbHMgaWYgZW50cm9weSBzb3VyY2UKLSsJICog ZmFpbHVyZS4KLSsJICovCi0rCi0rCXQuZW50bGVuID0gMDsKLSsKLSsJZGN0eC0+aWZsYWdzIHw9 IERSQkdfRkxBR19OT0VSUjsKLSsJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0 LCB0ZC0+a2F0bGVuLCAxLAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJewotKwkJ RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJP Ul9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwkJCi0rCWRjdHgtPmlmbGFncyAm PSB+RFJCR19GTEFHX05PRVJSOwotKwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRj dHgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBT X1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsKLSsJaWYg KCFkb19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLCAmdCkpCi0rCQkJZ290byBlcnI7Ci0rCS8q IFRlc3QgcmVzZWVkIGNvdW50ZXIgd29ya3MgKi8KLSsJLyogU2F2ZSBpbml0aWFsIHJlc2VlZCBj b3VudGVyICovCi0rCXJlc2VlZF9jb3VudGVyX3RtcCA9IGRjdHgtPnJlc2VlZF9jb3VudGVyOwot KwkvKiBTZXQgcmVzZWVkIGNvdW50ZXIgdG8gYmV5b25kIGludGVydmFsICovCi0rCWRjdHgtPnJl c2VlZF9jb3VudGVyID0gZGN0eC0+cmVzZWVkX2ludGVydmFsOwotKwotKwkvKiBHZW5lcmF0ZSBv dXRwdXQgYW5kIGNoZWNrIGVudHJvcHkgaGFzIGJlZW4gcmVxdWVzdGVkIGZvciByZXNlZWQgKi8K LSsJdC5lbnRjbnQgPSAwOwotKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0 LCB0ZC0+a2F0bGVuLCAwLAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJZ290byBl cnI7Ci0rCWlmICh0LmVudGNudCAhPSAxKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQp OwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCS8qIENoZWNrIHJlc2VlZCBjb3VudGVyIGhhcyBiZWVu IHJlc2V0ICovCi0rCWlmIChkY3R4LT5yZXNlZWRfY291bnRlciAhPSByZXNlZWRfY291bnRlcl90 bXAgKyAxKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBG SVBTX1JfUkVTRUVEX0NPVU5URVJfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWRj dHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3Rh bnRpYXRlKGRjdHgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsK LSsJLyogRXhwbGljaXQgcmVzZWVkIHRlc3RzICovCi0rCi0rCS8qIFRlc3QgZXhwbGljaXQgcmVz ZWVkIHdpdGggdG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5wdXQgKi8KLSsJaWYgKCFkb19kcmJnX2lu aXQoZGN0eCwgdGQsICZ0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJC R19GTEFHX05PRVJSOwotKwotKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwg ZGN0eC0+bWF4X2FkaW4gKyAxKSA+IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNURUQp OwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGgg ZW50cm9weSBzb3VyY2UgZmFpbHVyZSAqLwotKwotKwl0LmVudGxlbiA9IDA7Ci0rCi0rCWlmIChG SVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikgPiAwKQotKwkJewot KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9F UlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoIUZJUFNfZHJi Z191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsK LSsJCX0KLSsKLSsJLyogVGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbXVjaCBlbnRyb3B5 ICovCi0rCi0rCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rCQlnb3RvIGVycjsK LSsKLSsJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJdC5lbnRsZW4gPSBk Y3R4LT5tYXhfZW50cm9weSArIDE7Ci0rCi0rCWlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRk LT5hZGluLCB0ZC0+YWRpbmxlbikgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdv dG8gZXJyOwotKwkJfQotKwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQot KwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5J TlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogVGVzdCBleHBs aWNpdCByZXNlZWQgd2l0aCB0b28gbGl0dGxlIGVudHJvcHkgKi8KLSsKLSsJaWYgKCFkb19kcmJn X2luaXQoZGN0eCwgdGQsICZ0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0g RFJCR19GTEFHX05PRVJSOwotKwotKwl0LmVudGxlbiA9IGRjdHgtPm1pbl9lbnRyb3B5IC0gMTsK LSsKLSsJaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+ IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWlm ICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJ CWdvdG8gZXJyOwotKwkJfQotKwotKwlwID0gKHVuc2lnbmVkIGNoYXIgKikmZGN0eC0+ZDsKLSsJ LyogU3RhbmRhcmQgc2F5cyB3ZSBoYXZlIHRvIGNoZWNrIHVuaW5zdGFudGlhdGUgcmVhbGx5IHpl cm9lcwotKwkgKiB0aGUgZGF0YS4uLgotKwkgKi8KLSsJZm9yIChpID0gMDsgaSA8IHNpemVvZihk Y3R4LT5kKTsgaSsrKQotKwkJewotKwkJaWYgKCpwICE9IDApCi0rCQkJewotKwkJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfWkVST0lT RV9FUlJPUik7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwkJcCsrOwotKwkJfQotKwotKwlyZXR1 cm4gMTsKLSsKLSsJZXJyOgotKwkvKiBBIHJlYWwgZXJyb3IgYXMgb3Bwb3NlZCB0byBhbiBpbmR1 Y2VkIG9uZTogdW5kZXJseWluZyBmdW5jdGlvbiB3aWxsCi0rCSAqIGluZGljYXRlIHRoZSBlcnJv ci4KLSsJICovCi0rCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCi0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9GVU5DVElPTl9FUlJP Uik7Ci0rCUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOwotKwlyZXR1cm4gMDsKLSsKLSsJ fQotKwotK2ludCBmaXBzX2RyYmdfa2F0KERSQkdfQ1RYICpkY3R4LCBpbnQgbmlkLCB1bnNpZ25l ZCBpbnQgZmxhZ3MpCi0rCXsKLSsJRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKLSsJZmxhZ3MgfD0g RFJCR19GTEFHX1RFU1Q7Ci0rCWZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQr KykKLSsJCXsKLSsJCWlmICh0ZC0+bmlkID09IG5pZCAmJiB0ZC0+ZmxhZ3MgPT0gZmxhZ3MpCi0r CQkJewotKwkJCWlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDApKQotKwkJCQly ZXR1cm4gMDsKLSsJCQlyZXR1cm4gZmlwc19kcmJnX2Vycm9yX2NoZWNrKGRjdHgsIHRkKTsKLSsJ CQl9Ci0rCQl9Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0raW50IEZJUFNfZHJiZ19oZWFsdGhfY2hl Y2soRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJaW50IHJ2OwotKwlEUkJHX0NUWCAqdGN0eCA9IE5V TEw7Ci0rCXRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOwotKwlmaXBzX3Bvc3Rfc3RhcnRlZChG SVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7Ci0rCWlmICghdGN0eCkK LSsJCXJldHVybiAwOwotKwlydiA9IGZpcHNfZHJiZ19rYXQodGN0eCwgZGN0eC0+dHlwZSwgZGN0 eC0+eGZsYWdzKTsKLSsJaWYgKHRjdHgpCi0rCQlGSVBTX2RyYmdfZnJlZSh0Y3R4KTsKLSsJaWYg KHJ2KQotKwkJZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZk Y3R4LT54ZmxhZ3MpOwotKwllbHNlCi0rCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJH LCBkY3R4LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKLSsJaWYgKCFydikKLSsJCWRjdHgtPnN0YXR1 cyA9IERSQkdfU1RBVFVTX0VSUk9SOwotKwllbHNlCi0rCQlkY3R4LT5oZWFsdGhfY2hlY2tfY250 ID0gMDsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZHJiZyh2b2lk KQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4OwotKwlEUkJHX1NFTEZURVNUX0RBVEEgKnRkOwotKwlp bnQgcnYgPSAxOwotKwlkY3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKLSsJaWYgKCFkY3R4KQot KwkJcmV0dXJuIDA7Ci0rCWZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykK LSsJCXsKLSsJCWlmICh0ZC0+cG9zdCAhPSAxKQotKwkJCWNvbnRpbnVlOwotKwkJaWYgKCFmaXBz X3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncykpCi0rCQkJ cmV0dXJuIDE7Ci0rCQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAxKSkKLSsJ CQl7Ci0rCQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5m bGFncyk7Ci0rCQkJcnYgPSAwOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmICghZmlwc19w b3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQotKwkJCXJl dHVybiAwOwotKwkJfQotKwlGSVBTX2RyYmdfZnJlZShkY3R4KTsKLSsJcmV0dXJuIHJ2OwotKwl9 Ci0rCi0rCi0raW50IEZJUFNfc2VsZnRlc3RfZHJiZ19hbGwodm9pZCkKLSsJewotKwlEUkJHX0NU WCAqZGN0eDsKLSsJRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKLSsJaW50IHJ2ID0gMTsKLSsJZGN0 eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7Ci0rCWlmICghZGN0eCkKLSsJCXJldHVybiAwOwotKwlm b3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspCi0rCQl7Ci0rCQlpZiAoIWZp cHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKLSsJ CQlyZXR1cm4gMTsKLSsJCWlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDApKQot KwkJCXsKLSsJCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQt PmZsYWdzKTsKLSsJCQlydiA9IDA7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwkJaWYgKCFmaXBz X2RyYmdfZXJyb3JfY2hlY2soZGN0eCwgdGQpKQotKwkJCXsKLSsJCQlmaXBzX3Bvc3RfZmFpbGVk KEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKTsKLSsJCQlydiA9IDA7Ci0rCQkJ Y29udGludWU7Ci0rCQkJfQotKwkJaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJC RywgdGQtPm5pZCwgJnRkLT5mbGFncykpCi0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUZJUFNfZHJi Z19mcmVlKGRjdHgpOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oLmZpcHMgb3BlbnNzbC0xLjAuMWEv Y3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmgKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaC5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjY2 Nzg1NzQwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3Nl bGZ0ZXN0LmgJMjAxMi0wNC0yMCAwOTowNzowNi4yNjY3ODU3NDAgKzAyMDAKLUBAIC0wLDAgKzEs MjMzNSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0r ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAg IGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKLSsgKiAgICBvcGVuc3NsLWNvcmUub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0r ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsvKiBTZWxmdGVzdCBhbmQgaGVhbHRoIGNo ZWNrIGRhdGEgZm9yIHRoZSBTUDgwMC05MCBEUkJHICovCi0rCi0rI2RlZmluZSBfX2ZpcHNfY29u c3RzZWcKLSsKLSsvKiBBRVMtMTI4IHVzZSBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRb XSA9Ci0rCXsKLSsJMHg2MSwweDUyLDB4N2MsMHhlMywweDIzLDB4N2QsMHgwYSwweDA3LDB4MTAs MHgwYywweDUwLDB4MzMsCi0rCTB4YzgsMHhkYiwweGZmLDB4MTIKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9u b25jZVtdID0KLSsJewotKwkweDUxLDB4MGQsMHg4NSwweDc3LDB4ZWQsMHgyMiwweDk3LDB4MjgK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg1OSww eDlmLDB4YmIsMHhjZCwweGQ1LDB4MjUsMHg2OSwweGI1LDB4Y2IsMHhiNSwweDAzLDB4ZmUsCi0r CTB4ZDcsMHhkNywweDAxLDB4NjcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9 Ci0rCXsKLSsJMHhlZiwweDg4LDB4NzYsMHgwMSwweGFmLDB4M2MsMHhmZSwweDhiLDB4YWYsMHgy NiwweDA2LDB4OWUsCi0rCTB4OWEsMHg0NywweDA4LDB4NzYKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRy b3B5aW5wdXRwcltdID0KLSsJewotKwkweGUyLDB4NzYsMHhmOSwweGY2LDB4M2EsMHhiYSwweDEw LDB4OWYsMHhiZiwweDQ3LDB4MGUsMHg1MSwKLSsJMHgwOSwweGZiLDB4YTMsMHhiNgotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf dXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhkNCwweDk4LDB4OGEsMHg0 NiwweDgwLDB4NGMsMHhkYiwweGEzLDB4NTksMHgwMiwweDU3LDB4NTIsCi0rCTB4NjYsMHgxYyww eGVhLDB4NWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4 ODgsMHg4YywweDkxLDB4ZDYsMHhiZSwweDU2LDB4NmUsMHgwOCwweDlhLDB4NjIsMHgyYiwweDEx LAotKwkweDNmLDB4NWUsMHgzMSwweDA2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0cHIy W10gPQotKwl7Ci0rCTB4YzAsMHg1YywweDZiLDB4OTgsMHgwMSwweDBkLDB4NTgsMHgxOCwweDUx LDB4MTgsMHg5NiwweGFlLAotKwkweGE3LDB4ZTMsMHhhOCwweDY3Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJf cmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4Y2YsMHgwMSwweGFjLDB4MjIsMHgzMSwweDA2LDB4 OGUsMHhmYywweGNlLDB4NTYsMHhlYSwweDI0LAotKwkweDBmLDB4MzgsMHg0MywweGM2Ci0rCX07 Ci0rCi0rCi0rLyogQUVTLTEyOCB1c2UgZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfZW50cm9weWlucHV0W10g PQotKwl7Ci0rCTB4MWYsMHg4ZSwweDM0LDB4ODIsMHgwYywweGI3LDB4YmUsMHhjNSwweDAxLDB4 M2UsMHhkMCwweGEzLAotKwkweDlkLDB4N2QsMHgxYywweDliCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfbm9uY2Vb XSA9Ci0rCXsKLSsJMHhkNSwweDRkLDB4YmQsMHg0YSwweDkzLDB4N2YsMHhiOCwweDk2Ci0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF91c2VfZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4YWIsMHhkNiwweDNm LDB4MDQsMHhmZSwweDI3LDB4NmIsMHgyZCwweGQ3LDB4YzMsMHgxYywweGYzLAotKwkweDM4LDB4 NjYsMHhiYSwweDFiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4 ZmUsMHhmNCwweDA5LDB4YTgsMHhiNywweDczLDB4MjcsMHg5YywweDVmLDB4YTcsMHhlYSwweDQ2 LAotKwkweGI1LDB4ZTIsMHhiMiwweDQxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfaW50X3JldHVybmVkYml0c1td ID0KLSsJewotKwkweDQyLDB4ZTQsMHg0ZSwweDdiLDB4MjcsMHhkZCwweGNiLDB4YmMsMHgwYSww eGNmLDB4YTYsMHg2NywKLSsJMHhlNywweDU3LDB4MTEsMHhiNAotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2VudHJv cHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDE0LDB4MjYsMHg2OSwweGQ5LDB4ZjMsMHg2NSww eDAzLDB4ZDYsMHg2YiwweGI5LDB4NDQsMHgwYiwKLSsJMHhjNywweGM0LDB4OWUsMHgzOQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x MjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDU1LDB4MmUsMHg2 MCwweDlhLDB4MDUsMHg3MiwweDhhLDB4YTgsMHhlZiwweDIyLDB4ODEsMHg1YSwKLSsJMHhjOCww eDkzLDB4ZmEsMHg4NAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJ MHgzYywweDQwLDB4YzgsMHhjNCwweDE2LDB4MGMsMHgyMSwweGE0LDB4MzcsMHgyYywweDhmLDB4 YTUsCi0rCTB4MDYsMHgwYywweDE1LDB4MmMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9 Ci0rCXsKLSsJMHhlMSwweDNlLDB4OTksMHg5OCwweDg2LDB4NjcsMHgwYiwweDYzLDB4N2IsMHhi ZSwweDNmLDB4ODgsCi0rCTB4NDYsMHg4MSwweGM3LDB4MTkKLSsJfTsKLSsKLSsKLSsvKiBBRVMt MTkyIHVzZSBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgyYiww eDRlLDB4OGIsMHhlMSwweGYxLDB4MzQsMHg4MCwweDU2LDB4ODEsMHhmOSwweDc0LDB4ZWMsCi0r CTB4MTcsMHg0NCwweDJhLDB4ZjEsMHgxNCwweGIwLDB4YmYsMHg5NywweDM5LDB4YjcsMHgwNCww eDdkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml91c2VfZGZfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhkNiwweDlkLDB4ZWIsMHgx NCwweDRlLDB4NmMsMHgzMCwweDFlLDB4MzksMHg1NSwweDczLDB4ZDAsCi0rCTB4ZDEsMHg4MCww eDc4LDB4ZmEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsK LSsJMHhmYywweDQzLDB4NGEsMHhmOCwweDlhLDB4NTUsMHhiMywweDUzLDB4ODMsMHhlMiwweDE4 LDB4MTYsCi0rCTB4MGMsMHhkYywweGNkLDB4NWUsMHg0ZiwweGEwLDB4MDMsMHgwMSwweDJiLDB4 OWYsMHhlNCwweGQ1LAotKwkweDdkLDB4NDksMHhmMCwweDQxLDB4OWUsMHgzZCwweDk5LDB4MDQK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg1ZSwweDlmLDB4 NDksMHg2ZiwweDIxLDB4OGIsMHgxZCwweDMyLDB4ZDUsMHg4NCwweDVjLDB4YWMsCi0rCTB4YWYs MHhkZiwweGU0LDB4NzksMHg5ZSwweGFmLDB4YTksMHg4MiwweGQwLDB4ZjgsMHg0ZiwweGNiLAot KwkweDY5LDB4MTAsMHgwYSwweDdlLDB4ODEsMHg1NywweGI1LDB4MzYKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9w cl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweGQ0LDB4ODEsMHgwYywweGQ3LDB4NjYsMHgz OSwweGVjLDB4NDIsMHg1MywweDg3LDB4NDEsMHhhNSwKLSsJMHgxZSwweDdkLDB4ODAsMHg5MSww eDhlLDB4YmIsMHhlZCwweGFjLDB4MTQsMHgwMiwweDFhLDB4ZDUKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9p bnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZGYsMHgxZCwweDM5LDB4NDUsMHg3YywweDli LDB4YzYsMHgyYiwweDdkLDB4OGMsMHg5MywweGU5LAotKwkweDE5LDB4MzAsMHg2YiwweDY3Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDAwLDB4NzEsMHgy NywweDRlLDB4ZDMsMHgxNCwweGYxLDB4MjAsMHg3ZiwweDRhLDB4NDEsMHgzMiwKLSsJMHgyYSww eDk3LDB4MTEsMHg0MywweDhmLDB4NGEsMHgxNSwweDdiLDB4OWIsMHg1MSwweDc5LDB4ZGEsCi0r CTB4NDksMHgzZCwweGRlLDB4ZTgsMHhiYywweDkzLDB4OTEsMHg5OQotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3By X2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDkwLDB4ZWUsMHg3NiwweGExLDB4NDUsMHg4 ZCwweGI3LDB4NDAsMHhiMCwweDExLDB4YmYsMHhkMCwKLSsJMHg2NSwweGQ3LDB4M2MsMHg3Yyww eDRmLDB4MjAsMHgzZiwweDRlLDB4MTEsMHg5ZCwweGIzLDB4NWUKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9y ZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgyNCwweDNiLDB4MjAsMHhhNCwweDM3LDB4NjYsMHhi YSwweDcyLDB4MzksMHgzZiwweGNmLDB4M2MsCi0rCTB4N2UsMHgxYSwweDJiLDB4ODMKLSsJfTsK LSsKLSsKLSsvKiBBRVMtMTkyIHVzZSBkZiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9lbnRyb3B5aW5wdXRbXSA9 Ci0rCXsKLSsJMHg4ZCwweDc0LDB4YTQsMHg1MCwweDFhLDB4MDIsMHg2OCwweDBjLDB4MmEsMHg2 OSwweGM0LDB4ODIsCi0rCTB4M2IsMHhiYiwweGRhLDB4MGUsMHg3ZiwweDc3LDB4YTMsMHgxNyww eDc4LDB4NTcsMHhiMiwweDdiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfbm9uY2VbXSA9Ci0rCXsKLSsJMHg3NSww eGQ1LDB4MWYsMHhhYywweGE0LDB4OGQsMHg0MiwweDc4LDB4ZDcsMHg2OSwweDg2LDB4OWQsCi0r CTB4NzcsMHhkNywweDQxLDB4MGUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9Ci0rCXsKLSsJMHg0ZSwweDMzLDB4NDEsMHgzYywweDljLDB4YzIsMHhkMiwweDUzLDB4YWYs MHg5MCwweGVhLDB4Y2YsCi0rCTB4MTksMHg1MCwweDFlLDB4ZTYsMHg2ZiwweDYzLDB4YzgsMHgz MiwweDIyLDB4ZGMsMHgwNywweDY1LAotKwkweDljLDB4ZDMsMHhmOCwweDMwLDB4OWUsMHhlZCww eDM1LDB4NzAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg1ZCww eDhiLDB4OGMsMHhjMSwweGRmLDB4MGUsMHgwMiwweDc4LDB4ZmIsMHgxOSwweGI4LDB4NjksCi0r CTB4NzgsMHg0ZSwweDljLDB4NTIsMHhiYywweGM3LDB4MjAsMHhjOSwweGU2LDB4NWUsMHg3Nyww eDIyLAotKwkweDI4LDB4M2QsMHgwYywweDllLDB4NjgsMHhhOCwweDQ1LDB4ZDcKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3Vz ZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZDUsMHhlNywweDA4LDB4YzUsMHgx OSwweDk5LDB4ZDUsMHgzMSwweDAzLDB4MGEsMHg3NCwweGI2LAotKwkweGI3LDB4ZWQsMHhlOSww eGVhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4OWMsMHgy NiwweGRhLDB4ZjEsMHhhYywweGQ5LDB4NWEsMHhkNiwweGE4LDB4NjUsMHhmNSwweDAyLAotKwkw eDhmLDB4ZGMsMHhhMiwweDA5LDB4NTQsMHhhNiwweGUyLDB4YTQsMHhkZSwweDMyLDB4ZTAsMHgw MQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDliLDB4 OTAsMHhiMCwweDNhLDB4MGUsMHgzYSwweDgwLDB4MDcsMHg0YSwweGY0LDB4ZGEsMHg3NiwKLSsJ MHgyOCwweDMwLDB4M2MsMHhlZSwweDU0LDB4MWIsMHg5NCwweDU5LDB4NTEsMHg0MywweDU2LDB4 NzcsCi0rCTB4YWYsMHg4OCwweGRkLDB4NjMsMHg4OSwweDQ3LDB4MDYsMHg2NQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNl X2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgzYywweDExLDB4NjQsMHg3YSwweDk2 LDB4ZjUsMHhkOCwweGI4LDB4YWUsMHhkNiwweDcwLDB4NGUsCi0rCTB4MTYsMHg5NiwweGRlLDB4 ZTksMHg2MiwweGJjLDB4ZWUsMHgyOCwweDJmLDB4MjYsMHhhNiwweGYwLAotKwkweDU2LDB4ZWYs MHhhMywweGYxLDB4NmIsMHhhMSwweGIxLDB4NzcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9yZXR1cm5lZGJpdHNb XSA9Ci0rCXsKLSsJMHgwYiwweGUyLDB4NTYsMHgwMywweDFlLDB4ZGIsMHgyYywweDZkLDB4N2Ys MHgxYiwweDE1LDB4NTgsCi0rCTB4MWEsMHhmOSwweDEzLDB4MjgKLSsJfTsKLSsKLSsKLSsvKiBB RVMtMjU2IHVzZSBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg2 MSwweDY4LDB4ZmMsMHgxYSwweGYwLDB4YjUsMHg5NSwweDZiLDB4ODUsMHgwOSwweDliLDB4NzQs Ci0rCTB4M2YsMHgxMywweDc4LDB4NDksMHgzYiwweDg1LDB4ZWMsMHg5MywweDEzLDB4M2IsMHhh OSwweDRmLAotKwkweDk2LDB4YWIsMHgyYywweGU0LDB4YzgsMHg4ZiwweGRkLDB4NmEKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2 X3VzZV9kZl9wcl9ub25jZVtdID0KLSsJewotKwkweGFkLDB4ZDIsMHhiYiwweGJhLDB4YjcsMHg2 NSwweDg5LDB4YzMsMHgyMSwweDZjLDB4NTUsMHgzMywKLSsJMHgyYiwweDM2LDB4ZmYsMHhhNAot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDZlLDB4 Y2EsMHhlNywweDIwLDB4NzIsMHhkMywweDg0LDB4NWEsMHgzMiwweGQzLDB4NGIsMHgyNCwKLSsJ MHg3MiwweGM0LDB4NjMsMHgyYiwweDlkLDB4MTIsMHgyNCwweDBjLDB4MjMsMHgyNiwweDhlLDB4 ODMsCi0rCTB4MTYsMHgzNywweDBiLDB4ZDEsMHgwNiwweDRmLDB4NjgsMHg2ZAotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNl X2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDdlLDB4MDgsMHg0YSwweGJiLDB4 ZTMsMHgyMSwweDdjLDB4YzksMHgyMywweGQyLDB4ZjgsMHhiMCwKLSsJMHg3MywweDk4LDB4YmEs MHg4NCwweDc0LDB4MjMsMHhhYiwweDA2LDB4OGEsMHhlMiwweDIyLDB4ZDMsCi0rCTB4N2IsMHhj ZSwweDliLDB4ZDIsMHg0YSwweDc2LDB4YjgsMHhkZQotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlp bnB1dHByW10gPQotKwl7Ci0rCTB4MGIsMHgyMywweGFmLDB4ZGYsMHhmMSwweDYyLDB4ZDcsMHhk MywweDQzLDB4OTcsMHhmOCwweDc3LAotKwkweDA0LDB4YTgsMHg0MiwweDIwLDB4YmQsMHhmNiww eDBmLDB4YzEsMHgxNywweDJmLDB4OWYsMHg1NCwKLSsJMHhiYiwweDU2LDB4MTcsMHg4NiwweDY4 LDB4MGUsMHhiYSwweGE5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJ ewotKwkweDMxLDB4OGUsMHhhZCwweGFmLDB4NDAsMHhlYiwweDZiLDB4NzQsMHgzMSwweDQ2LDB4 ODAsMHhjNywKLSsJMHgxNywweGFiLDB4M2MsMHg3YQotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2FkZGl0aW9u YWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg5NCwweDZiLDB4YzksMHg5ZiwweGFiLDB4OGQsMHhjNSww eGVjLDB4NzEsMHg4OCwweDFkLDB4MDAsCi0rCTB4OGMsMHg4OSwweDY4LDB4ZTQsMHhjOCwweDA3 LDB4NzcsMHgzNiwweDE3LDB4NmQsMHg3OSwweDc4LAotKwkweGM3LDB4MDYsMHg0ZSwweDk5LDB4 MDQsMHgyOCwweDI5LDB4YzMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0r CXsKLSsJMHhiZiwweDZjLDB4NTksMHgyYSwweDBkLDB4NDQsMHgwZiwweGFlLDB4OWEsMHg1ZSww eDAzLDB4NzMsCi0rCTB4ZDgsMHhhNiwweGUxLDB4Y2YsMHgyNSwweDYxLDB4MzgsMHgyNCwweDg2 LDB4OWUsMHg1MywweGU4LAotKwkweGE0LDB4ZGYsMHg1NiwweGY0LDB4MDYsMHgwNywweDljLDB4 MGYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgyMiwweDRhLDB4 YjQsMHhiOCwweGI2LDB4ZWUsMHg3ZCwweGIxLDB4OWUsMHhjOSwweGY5LDB4YTAsCi0rCTB4ZDks MHhlMiwweDk3LDB4MDAKLSsJfTsKLSsKLSsKLSsvKiBBRVMtMjU2IHVzZSBkZiBObyBQUiAgKi8K LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3Vz ZV9kZl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhhNSwweDNlLDB4MzcsMHgxMCwweDE3LDB4 NDMsMHg5MSwweDkzLDB4NTksMHgxZSwweDQ3LDB4NTAsCi0rCTB4ODcsMHhhYSwweGRkLDB4ZDUs MHhjMSwweGMzLDB4ODYsMHhjZCwweGNhLDB4MGQsMHhkYiwweDY4LAotKwkweGUwLDB4MDIsMHhk OCwweDBmLDB4ZGMsMHg0MCwweDFhLDB4NDcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9ub25jZVtdID0KLSsJewot KwkweGE5LDB4NGQsMHhhNSwweDVhLDB4ZmQsMHhjNSwweDBjLDB4ZTUsMHgxYywweDlhLDB4M2Is MHg4YSwKLSsJMHg0YywweDQ0LDB4ODQsMHg0MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0KLSsJewotKwkweDhiLDB4NTIsMHhhMiwweDRhLDB4OTMsMHhjMywweDRlLDB4 YTcsMHgxZSwweDFjLDB4YTcsMHgwNSwKLSsJMHhlYiwweDgyLDB4OWIsMHhhNiwweDVkLDB4ZTQs MHhkNCwweGUwLDB4N2YsMHhhMywweGQ4LDB4NmIsCi0rCTB4MzcsMHg4NCwweDVmLDB4ZjEsMHhj NywweGQ1LDB4ZjYsMHhkMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewot KwkweDIwLDB4ZjQsMHgyMiwweGVkLDB4ZjgsMHg1YywweGExLDB4NmEsMHgwMSwweGNmLDB4YmUs MHg1ZiwKLSsJMHg4ZCwweDZjLDB4OTQsMHg3ZiwweGFlLDB4MTIsMHhhOCwweDU3LDB4ZGIsMHgy YSwweGE5LDB4YmYsCi0rCTB4YzcsMHhiMywweDY1LDB4ODEsMHg4MCwweDhkLDB4MGQsMHg0Ngot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfdXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0ZSwweDQ0LDB4ZmQs MHhmMywweDllLDB4MjksMHhhMiwweGI4LDB4MGYsMHg1ZCwweDZjLDB4ZTEsCi0rCTB4MjgsMHgw YywweDNiLDB4YzEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJ MHhkZCwweDQwLDB4ZTUsMHg5OCwweDdiLDB4MjcsMHgxNiwweDczLDB4MTUsMHg2OCwweGQyLDB4 NzYsCi0rCTB4YmYsMHgwYywweDY3LDB4MTUsMHg3NSwweDc5LDB4MDMsMHhkMywweGRlLDB4ZGUs MHg5MSwweDQ2LAotKwkweDQyLDB4ZGQsMHhkNCwweDY3LDB4YzgsMHg3OSwweGM4LDB4MWUKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg3ZiwweGQ4LDB4 MWYsMHhiZCwweDJhLDB4YjUsMHgxYywweDExLDB4NWQsMHg4MywweDRlLDB4OTksCi0rCTB4ZjYs MHg1YywweGE1LDB4NDAsMHgyMCwweGVkLDB4MzgsMHg4ZSwweGQ1LDB4OWUsMHhlMCwweDc1LAot KwkweDkzLDB4ZmUsMHgxMiwweDVlLDB4NWQsMHg3MywweGZiLDB4NzUKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9h ZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4Y2QsMHgyYywweGZmLDB4MTQsMHg2OSwweDNl LDB4NGMsMHg5ZSwweGZkLDB4ZmUsMHgyNiwweDBkLAotKwkweGU5LDB4ODYsMHgwMCwweDQ5LDB4 MzAsMHhiYSwweGIxLDB4YzYsMHg1MCwweDU3LDB4NzcsMHgyYSwKLSsJMHg2MiwweDM5LDB4MmMs MHgzYiwweDc0LDB4ZWIsMHhjOSwweDBkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcmV0dXJuZWRiaXRzW10gPQot Kwl7Ci0rCTB4NGYsMHg3OCwweGJlLDB4YjksMHg0ZCwweDk3LDB4OGMsMHhlOSwweGQwLDB4OTcs MHhmZSwweGFkLAotKwkweGZhLDB4ZmQsMHgzNSwweDVlCi0rCX07Ci0rCi0rCi0rLyogQUVTLTEy OCBubyBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDlhLDB4MjUs MHg2NSwweDEwLDB4NjcsMHhkNSwweGI2LDB4NmIsMHg3MCwweGExLDB4YjMsMHhhNCwKLSsJMHg0 MywweDk1LDB4ODAsMHhjMCwweDg0LDB4MGEsMHg3OSwweGIwLDB4ODgsMHg3NCwweGYyLDB4YmYs Ci0rCTB4MzEsMHg2YywweDMzLDB4MzgsMHgwYiwweDAwLDB4YjIsMHg1YQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZf cHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHg3OCwweDQ3LDB4NmIsMHhmNywweDkwLDB4OGUsMHg4Nyww eGYxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhm NywweDIyLDB4MWQsMHgzYSwweGJlLDB4MWQsMHhjYSwweDMyLDB4MWIsMHhiZCwweDg3LDB4MGMs Ci0rCTB4NTEsMHgyNCwweDE5LDB4ZWUsMHhhMywweDIzLDB4MDksMHg2MywweDMzLDB4M2QsMHhh OCwweDBjLAotKwkweDFjLDB4ZmEsMHg0MiwweDg5LDB4Y2MsMHg2ZiwweGEwLDB4YTgKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGM5LDB4ZTAsMHg4MCwweGJm LDB4OGMsMHg0NSwweDU4LDB4MzksMHhmZiwweDAwLDB4YWIsMHgwMiwKLSsJMHg0YywweDNlLDB4 M2EsMHg5NSwweDliLDB4ODAsMHhhOCwweDIxLDB4MmEsMHhlZSwweGJhLDB4NzMsCi0rCTB4YjEs MHhkOSwweGNmLDB4MjgsMHhmNiwweDhmLDB4OWIsMHgxMgotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9w eWlucHV0cHJbXSA9Ci0rCXsKLSsJMHg0YywweGE4LDB4YzUsMHhmMCwweDU5LDB4OWUsMHhhNiww eDhkLDB4MjYsMHg1MywweGQ3LDB4OGEsCi0rCTB4YTksMHhkOCwweGY3LDB4ZWQsMHhiMiwweGY5 LDB4MTIsMHg0MiwweGUxLDB4ZTUsMHhiZCwweGU3LAotKwkweGU3LDB4MWQsMHg3NCwweDk5LDB4 MDAsMHg5ZCwweDMxLDB4M2UKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0r CXsKLSsJMHhlMiwweGFjLDB4MjAsMHhmMCwweDgwLDB4ZTcsMHhiYywweDdlLDB4OWMsMHg3Yiww eDY1LDB4NzEsCi0rCTB4YWYsMHgxOSwweDMyLDB4MTYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2FkZGl0aW9u YWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgzMiwweDdmLDB4MzgsMHg4YiwweDczLDB4MGEsMHg3OCww eDgzLDB4ZGMsMHgzMCwweGJlLDB4OWYsCi0rCTB4MTAsMHgxZiwweGY1LDB4MWYsMHhjYSwweDAw LDB4YjUsMHgwZCwweGQ2LDB4OWQsMHg2MCwweDgzLAotKwkweDUxLDB4NTQsMHg3ZCwweDM4LDB4 MjMsMHgzYSwweDUyLDB4NTAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJ ewotKwkweDE4LDB4NjEsMHg1MywweDU2LDB4ZWQsMHhlZCwweGQ3LDB4MjAsMHhmYiwweDcxLDB4 MDQsMHg3YSwKLSsJMHhiMiwweGFjLDB4YzEsMHgyOCwweGNkLDB4ZjIsMHhjMiwweGZjLDB4YWEs MHhiMSwweDA2LDB4MDcsCi0rCTB4ZTksMHg0NiwweDk1LDB4MDIsMHg0OCwweDAxLDB4NzgsMHhm OQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MjksMHhjOCwweDFi LDB4MTUsMHhiMSwweGQxLDB4YzIsMHhmNiwweDcxLDB4ODYsMHg2OCwweDMzLAotKwkweDU3LDB4 ODIsMHgzMywweGFmCi0rCX07Ci0rCi0rCi0rLyogQUVTLTEyOCBubyBkZiBObyBQUiAgKi8KLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2Rm X2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGM5LDB4YzUsMHg3OSwweGJjLDB4ZTgsMHhjNSww eDE5LDB4ZDgsMHhiYywweDY2LDB4NzMsMHg2NywKLSsJMHhmNiwweGQzLDB4NzIsMHhhYSwweGE2 LDB4MTYsMHhiOCwweDUwLDB4YjcsMHg0NywweDNhLDB4NDIsCi0rCTB4YWIsMHhmNCwweDE2LDB4 YjIsMHg5NiwweGQyLDB4YjYsMHg2MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfbm9uY2VbXSA9Ci0rCXsKLSsJMHg1 ZiwweGJmLDB4OTcsMHgwYywweDRiLDB4YTQsMHg4NywweDEzCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhjZSwweGZiLDB4N2IsMHgzZiwweGQ0LDB4NmIs MHgyOSwweDBkLDB4NjksMHgwNiwweGZmLDB4YmIsCi0rCTB4ZjIsMHhlNSwweGM2LDB4NmMsMHgw YSwweDEwLDB4YTAsMHhjZiwweDFhLDB4NDgsMHhjNywweDhiLAotKwkweDNjLDB4MTYsMHg4OCww eGVkLDB4NTAsMHgxMywweDgxLDB4Y2UKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0K LSsJewotKwkweDRiLDB4MjIsMHg0NiwweDE4LDB4MDIsMHg3YiwweGQyLDB4MWIsMHgyMiwweDQy LDB4N2MsMHgzNywKLSsJMHhkOSwweGY2LDB4ZTgsMHg5YiwweDEyLDB4MzAsMHg1ZiwweGU5LDB4 OTAsMHhlOCwweDA4LDB4MjQsCi0rCTB4NGYsMHgwNiwweDY2LDB4ZGIsMHgxOSwweDJiLDB4MTMs MHg5NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDJlLDB4OTYs MHg3MCwweDY0LDB4ZmEsMHhkZiwweGRmLDB4NTcsMHhiNSwweDgyLDB4ZWUsMHhkNiwKLSsJMHhl ZCwweDNlLDB4NjUsMHhjMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7 Ci0rCTB4MjYsMHhjMCwweDcyLDB4MTYsMHgzYSwweDRiLDB4YjcsMHg5OSwweGQ0LDB4MDcsMHhh ZiwweDY2LAotKwkweDYyLDB4MzYsMHg5NiwweGE0LDB4NTEsMHgxNywweGZhLDB4MDcsMHg4Yiww eDE3LDB4NWUsMHhhMSwKLSsJMHgyZiwweDNjLDB4MTAsMHhlNywweDkwLDB4ZDAsMHg0NiwweDAw Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg4MywweDM5 LDB4MzcsMHg3YiwweDAyLDB4MDYsMHhkMiwweDEyLDB4MTMsMHg4ZCwweDhiLDB4ZjIsCi0rCTB4 ZjAsMHhmNiwweDI2LDB4ZWIsMHhhNCwweDIyLDB4N2IsMHhjMiwweGU3LDB4YmEsMHg3OSwweGU0 LAotKwkweDNiLDB4NzcsMHg1ZCwweDRkLDB4NDcsMHhiMiwweDJkLDB4YjQKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2Rm X2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgwYiwweGI5LDB4NjcsMHgzNywweGRiLDB4 ODMsMHhkZiwweGNhLDB4ODEsMHg4YiwweGY5LDB4M2YsCi0rCTB4ZjEsMHgxMSwweDFiLDB4MmYs MHhmMCwweDYxLDB4YTYsMHhkZiwweGJhLDB4YTMsMHhiMSwweGFjLAotKwkweGQzLDB4ZTYsMHgw OSwweGI4LDB4MmMsMHg2YSwweDY3LDB4ZDYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3JldHVybmVkYml0c1tdID0K LSsJewotKwkweDFlLDB4YTcsMHhhNCwweGU0LDB4ZTEsMHhhNiwweDdjLDB4NjksMHg5YSwweDQ0 LDB4NmMsMHgzNiwKLSsJMHg4MSwweDM3LDB4MTksMHhkNAotKwl9OwotKwotKwotKy8qIEFFUy0x OTIgbm8gZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg5ZCwweDJj LDB4ZDIsMHg1NSwweDY2LDB4ZWEsMHhlMCwweGJlLDB4MTgsMHhiNywweDc2LDB4ZTcsCi0rCTB4 NzMsMHgzNSwweGQ4LDB4MWYsMHhhZCwweDNhLDB4ZTMsMHg4MSwweDBlLDB4OTIsMHhkMCwweDYx LAotKwkweGM5LDB4MTIsMHgyNiwweGY2LDB4MWMsMHhkZiwweGZlLDB4NDcsMHhhYSwweGZlLDB4 N2QsMHg1YSwKLSsJMHgxNywweDFmLDB4OGQsMHg5YQotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfbm9uY2VbXSA9 Ci0rCXsKLSsJMHg0NCwweDgyLDB4ZWQsMHhlOCwweDRjLDB4MjgsMHg1YSwweDE0LDB4ZmYsMHg4 OCwweDhkLDB4MTksCi0rCTB4NjEsMHg1YywweGVlLDB4MGYKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDQ3LDB4ZDcsMHg5YiwweDk5LDB4YWEsMHhj YiwweGU3LDB4ZDIsMHg1NywweDY2LDB4MmMsMHhlMSwKLSsJMHg3OCwweGQ2LDB4MmMsMHhlYSww eGEzLDB4MjMsMHg1ZiwweDJhLDB4YzEsMHgzYSwweGYwLDB4YTQsCi0rCTB4MjAsMHgzYiwweGZh LDB4MDcsMHhkNSwweDA1LDB4MDIsMHhlNCwweDU3LDB4MDEsMHhiNiwweDEwLAotKwkweDU3LDB4 MmUsMHhlNywweDU1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJ MHg0YiwweDc0LDB4MGIsMHg0MCwweGNlLDB4NmIsMHhjMiwweDZhLDB4MjQsMHhiNCwweGYzLDB4 YWQsCi0rCTB4N2EsMHhhNSwweDdhLDB4YTIsMHgxNSwweGUyLDB4YzgsMHg2MSwweDE1LDB4YzYs MHhiNywweDg1LAotKwkweDY5LDB4MTEsMHhhZCwweDdiLDB4MTQsMHhkMiwweGY2LDB4MTIsMHhh MSwweDk1LDB4NWQsMHgzZiwKLSsJMHhlMiwweGQwLDB4MGMsMHgyZgotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJf ZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHgwYywweDljLDB4YWQsMHgwNSwweGVlLDB4YWUs MHg0OCwweDIzLDB4ODksMHg1OSwweGExLDB4OTQsCi0rCTB4ZDcsMHhkOCwweDc1LDB4ZDUsMHg1 NCwweDkzLDB4YzcsMHg0YSwweGQ5LDB4MjYsMHhkZSwweGViLAotKwkweGJhLDB4YjAsMHg3ZSww eDMwLDB4MWQsMHg1ZiwweDY5LDB4NDAsMHg5YywweDNiLDB4MTcsMHg1OCwKLSsJMHgxZCwweDMw LDB4YjMsMHg3OAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkw eGY3LDB4OTMsMHhiMCwweDZkLDB4NzcsMHg4MywweGQ1LDB4MzgsMHgwMSwweGUxLDB4NTIsMHg0 MCwKLSsJMHg3ZSwweDNlLDB4MGMsMHgyNgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0 MltdID0KLSsJewotKwkweGJjLDB4NGIsMHgzNywweDQ0LDB4MWMsMHhjNSwweDQ1LDB4NWYsMHg4 ZiwweDUxLDB4NjIsMHg4YSwKLSsJMHg4NSwweDMwLDB4MWQsMHg3YywweGU0LDB4Y2YsMHhmNyww eDQ0LDB4Y2UsMHgzMiwweDNlLDB4NTcsCi0rCTB4OTUsMHhhNCwweDJhLDB4ZGYsMHhmZCwweDll LDB4MzgsMHg0MSwweGIzLDB4ZjYsMHhjNSwweGVlLAotKwkweDBjLDB4NGIsMHhlZSwweDZlCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHhlYywweGFmLDB4ZjYs MHg0ZiwweGIxLDB4YTAsMHg1NCwweGI1LDB4NWIsMHhlMywweDQ2LDB4YjAsCi0rCTB4NzYsMHg1 YSwweDdjLDB4M2YsMHg3YiwweDk0LDB4NjksMHgyMSwweDUxLDB4MDIsMHhlNSwweDlmLAotKwkw eDA0LDB4NTksMHgwMiwweDk4LDB4YzYsMHg0MywweDJjLDB4Y2MsMHgyNiwweDRjLDB4ODcsMHg2 YiwKLSsJMHg4ZSwweDBhLDB4ODMsMHhkZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10g PQotKwl7Ci0rCTB4NzQsMHg0NSwweGZiLDB4NTMsMHg4NCwweDk2LDB4YmUsMHhmZiwweDE1LDB4 Y2MsMHg0MSwweDkxLAotKwkweGI5LDB4YTEsMHgyMSwweDY4Ci0rCX07Ci0rCi0rCi0rLyogQUVT LTE5MiBubyBkZiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDNjLDB4 N2QsMHhiNSwweGUwLDB4NTQsMHhkOSwweDZlLDB4OGMsMHhhOSwweDg2LDB4Y2UsMHg0ZSwKLSsJ MHg2YiwweGFmLDB4ZWIsMHgyZiwweGU3LDB4NzUsMHhlMCwweDhiLDB4YTQsMHgzYiwweDA3LDB4 ZmUsCi0rCTB4YmUsMHgzMywweDc1LDB4OTMsMHg4MCwweDI3LDB4YjUsMHgyOSwweDQ3LDB4OGIs MHhjNywweDI4LAotKwkweDk0LDB4YzMsMHg1OSwweDYzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9ub25jZVtdID0K LSsJewotKwkweDQzLDB4ZjEsMHg3ZCwweGI4LDB4YzMsMHhmZSwweGQwLDB4MjMsMHg2YiwweGI0 LDB4OTIsMHhkYiwKLSsJMHgyOSwweGZkLDB4NDUsMHg3MQotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4OWYsMHgyNCwweDI5LDB4OTksMHg5ZSwweDAxLDB4 YWIsMHhlOSwweDE5LDB4ZDgsMHgyMywweDA4LAotKwkweGI3LDB4ZDYsMHg3ZSwweDhjLDB4YzAs MHg5ZSwweDdmLDB4NmUsMHg1YiwweDMzLDB4MjAsMHg5NiwKLSsJMHgwYiwweDIzLDB4MmMsMHhh NSwweDZhLDB4ZjgsMHgxYiwweDA0LDB4MjYsMHhkYiwweDJlLDB4MmIsCi0rCTB4M2IsMHg4OCww eGNlLDB4MzUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDk0LDB4 ZTksMHg3YywweDNkLDB4YTcsMHhkYiwweDYwLDB4ODMsMHgxZiwweDk4LDB4M2YsMHgwYiwKLSsJ MHg4OCwweDU5LDB4NTcsMHg1MSwweDg4LDB4OWYsMHg3NiwweDQ5LDB4OWYsMHhhNiwweGRhLDB4 NzEsCi0rCTB4MWQsMHgwZCwweDQ3LDB4MTYsMHg2MywweGM1LDB4NjgsMHhlNCwweDVkLDB4Mzks MHg2OSwweGIzLAotKwkweDNlLDB4YmUsMHhkNCwweDhlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9pbnRfcmV0dXJu ZWRiaXRzW10gPQotKwl7Ci0rCTB4ZjksMHhkNywweGFkLDB4NjksMHhhYiwweDhmLDB4MjMsMHg1 NiwweDcwLDB4MTcsMHg0ZiwweDJhLAotKwkweDQ1LDB4ZTcsMHg0YSwweGM1Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19k Zl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhhNiwweDcxLDB4NmEsMHgzZCwweGJh LDB4ZDEsMHhlOCwweDY2LDB4YTYsMHhlZiwweGIyLDB4MGUsCi0rCTB4YTgsMHg5YywweGFhLDB4 NGUsMHhhZiwweDE3LDB4ODksMHg1MCwweDAwLDB4ZGEsMHhhMSwweGIxLAotKwkweDBiLDB4YTQs MHhkOSwweDM1LDB4ODksMHhjOCwweGU1LDB4YjAsMHhkOSwweGI3LDB4YzQsMHgzMywKLSsJMHg5 YiwweGNiLDB4N2UsMHg3NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQot Kwl7Ci0rCTB4MjcsMHgyMSwweGZjLDB4YzIsMHhiZCwweGYzLDB4M2MsMHhjZSwweGMzLDB4Y2Es MHhjMSwweDAxLAotKwkweGUwLDB4ZmYsMHg5MywweDEyLDB4N2QsMHg1NCwweDQyLDB4ZTMsMHg5 ZiwweDAzLDB4ZGYsMHgyNywKLSsJMHgwNCwweDA3LDB4M2MsMHg1MywweDdmLDB4YTgsMHg2Niww eGM4LDB4OTcsMHg0YiwweDYxLDB4NDAsCi0rCTB4NWQsMHg3YSwweDI1LDB4NzkKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25v X2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgyZCwweDhlLDB4MTYsMHg1ZCwweDBi LDB4OWYsMHhlYiwweGFhLDB4ZDYsMHhlYywweDI4LDB4NzEsCi0rCTB4N2MsMHgwYiwweGMxLDB4 MWQsMHhkNCwweDQ0LDB4MTksMHg0NywweGZkLDB4MWQsMHg3YywweGU1LAotKwkweGYzLDB4Mjcs MHhlMSwweGI2LDB4NzIsMHgwYSwweGUwLDB4ZWMsMHgwZSwweGNkLDB4ZWYsMHgxYSwKLSsJMHg5 MSwweDZhLDB4ZTMsMHg1ZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4 ZTUsMHhkYSwweGI4LDB4ZTAsMHg2MywweDU5LDB4NWEsMHhjYywweDNkLDB4ZGMsMHg5ZiwweGU4 LAotKwkweDY2LDB4NjcsMHgyYywweDkyCi0rCX07Ci0rCi0rCi0rLyogQUVTLTI1NiBubyBkZiBQ UiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDE1LDB4YzcsMHg1ZCwweGNi LDB4NDEsMHg0YiwweDE2LDB4MDEsMHgzYSwweGQxLDB4NDQsMHhlOCwKLSsJMHgyMiwweDMyLDB4 YzYsMHg5YywweDNmLDB4ZTcsMHg0MywweGY1LDB4OWEsMHhkMywweGVhLDB4ZjIsCi0rCTB4ZDcs MHg0ZSwweDZlLDB4NmEsMHg1NSwweDczLDB4NDAsMHhlZiwweDg5LDB4YWQsMHgwZCwweDAzLAot KwkweDk2LDB4N2UsMHg3OCwweDgxLDB4MmYsMHg5MSwweDFiLDB4NDQsMHhiMCwweDAyLDB4YmEs MHgxYwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfbm9fZGZfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhkYywweGU0LDB4ZDQsMHgy NywweDdhLDB4OTAsMHhkNywweDk5LDB4NDMsMHhhMSwweDNjLDB4MzAsCi0rCTB4Y2MsMHg0Yiww eGVlLDB4MmUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewot KwkweGUzLDB4ZTYsMHhiOSwweDExLDB4ZTQsMHg3YSwweGE0LDB4NDAsMHg2YiwweGY4LDB4NzMs MHhmNywKLSsJMHg3ZSwweGVjLDB4YzcsMHhiOSwweDk3LDB4YmYsMHhmOCwweDI1LDB4N2IsMHhi ZSwweDExLDB4OWIsCi0rCTB4NWIsMHg2YSwweDBjLDB4MmUsMHgyYiwweDAxLDB4NTEsMHhjZCww eDQxLDB4NGIsMHg2YiwweGFjLAotKwkweDMxLDB4YTgsMHgwYiwweGY3LDB4ZTYsMHg1OSwweDQy LDB4YjgsMHgwMywweDBjLDB4ZjgsMHgwNgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0 W10gPQotKwl7Ci0rCTB4NmEsMHg5ZiwweDAwLDB4OTEsMHhhZSwweGZlLDB4Y2YsMHg4NCwweDk5 LDB4Y2UsMHhiMSwweDQwLAotKwkweDZkLDB4NWQsMHgzMywweDI4LDB4ODQsMHhmNCwweDhjLDB4 NjMsMHg0YywweDdlLDB4YmQsMHgyYywKLSsJMHg4MCwweDc2LDB4ZWUsMHg1YSwweGFhLDB4MTUs MHgwNywweDMxLDB4ZDgsMHhiYiwweDhjLDB4NjksCi0rCTB4OWQsMHg5ZCwweGJjLDB4N2UsMHg0 OSwweGFlLDB4ZWMsMHgzOSwweDZiLDB4ZDEsMHgxZiwweDdlCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRy b3B5aW5wdXRwcltdID0KLSsJewotKwkweGYzLDB4YjksMHg3NSwweDljLDB4YmQsMHg4OCwweGVh LDB4YTIsMHg1MCwweGFkLDB4ZDYsMHgxNiwKLSsJMHgxYSwweDEyLDB4M2MsMHg4NiwweDY4LDB4 YWYsMHg2ZiwweGJlLDB4MTksMHhmMiwweGVlLDB4Y2MsCi0rCTB4YTUsMHg3MCwweDg0LDB4NTMs MHg1MCwweGNiLDB4OWYsMHgxNCwweGE5LDB4ZTUsMHhlZSwweGI5LAotKwkweDQ4LDB4NDUsMHg0 MCwweGUyLDB4YzcsMHhjOSwweDlhLDB4NzQsMHhmZiwweDhjLDB4OTksMHgxZgotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9f ZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDJlLDB4ZjIsMHg0NSwweDRjLDB4 NjIsMHgyZSwweDBhLDB4YjksMHg2YiwweGEyLDB4ZmQsMHg1NiwKLSsJMHg3OSwweDYwLDB4OTMs MHhjZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweGFmLDB4 NjksMHgyMCwweGU5LDB4M2IsMHgzNywweDlkLDB4M2YsMHhiNCwweDgwLDB4MDIsMHg3YSwKLSsJ MHgyNSwweDdkLDB4YjgsMHhkZSwweDcxLDB4YzUsMHgwNiwweDBjLDB4YjQsMHhlMiwweDhmLDB4 MzUsCi0rCTB4ZDgsMHgxNCwweDBkLDB4N2YsMHg3NiwweDYzLDB4NGUsMHhiNSwweGVlLDB4ZTks MHg2ZiwweDM0LAotKwkweGM3LDB4NWYsMHg1NiwweDE0LDB4NGEsMHhlOCwweDczLDB4OTUsMHg1 YiwweDFjLDB4YjksMHhjYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7 Ci0rCTB4ZTUsMHhiMCwweDJlLDB4N2UsMHg1MiwweDMwLDB4ZTMsMHg2MywweDgyLDB4YjYsMHg0 NCwweGQzLAotKwkweDI1LDB4MTksMHgwNSwweDI0LDB4OWEsMHg5ZiwweDVmLDB4MjcsMHg2YSww eDI5LDB4YWIsMHhmYSwKLSsJMHgwNywweGEyLDB4NDIsMHgwZiwweGM1LDB4YTgsMHg5NCwweDdj LDB4MTcsMHg3YiwweDg1LDB4ODMsCi0rCTB4MGMsMHgyNSwweDBlLDB4NjMsMHgwYiwweGU5LDB4 MTIsMHg2MCwweGNkLDB4ZWYsMHg4MCwweDBmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9yZXR1cm5lZGJpdHNb XSA9Ci0rCXsKLSsJMHg1ZSwweGYyLDB4MjYsMHhlZiwweDlmLDB4NTgsMHg1ZCwweGQ1LDB4NGEs MHgxMCwweGZlLDB4YTcsCi0rCTB4MmQsMHg1ZiwweDRhLDB4NDYKLSsJfTsKLSsKLSsKLSsvKiBB RVMtMjU2IG5vIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4ZmIs MHhjZiwweDFiLDB4NjEsMHgxNiwweDg5LDB4NzgsMHgyMywweGY1LDB4ZDgsMHg5NiwweGUzLAot KwkweDRlLDB4NjQsMHgwYiwweDI5LDB4OWEsMHgzZiwweGY4LDB4YTUsMHhlZCwweGYyLDB4ZmUs MHhkYiwKLSsJMHgxNiwweGNhLDB4N2YsMHgxMCwweGZhLDB4NWUsMHgxOCwweDc2LDB4MmMsMHg2 MywweDVlLDB4OTYsCi0rCTB4Y2YsMHhiMywweGQ2LDB4ZmMsMHhhZiwweDk5LDB4MzksMHgyOCww eDljLDB4NjEsMHhlOCwweGIzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9ub25jZVtdID0KLSsJewotKwkweDEyLDB4 OTYsMHhmMCwweDUyLDB4ZjMsMHg4ZCwweDgxLDB4Y2YsMHhkZSwweDg2LDB4ZjIsMHg5OSwKLSsJ MHg0MywweDk2LDB4YjksMHhmMAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PQotKwl7Ci0rCTB4NjMsMHgwZCwweDc4LDB4ZjUsMHg5MCwweDhlLDB4MzIsMHg0NywweGIwLDB4 NGQsMHgzNywweDYwLAotKwkweDA5LDB4OTYsMHhiYywweGJmLDB4OTcsMHg3YSwweDYyLDB4MTQs MHg0NSwweGJkLDB4OGQsMHhjYywKLSsJMHg2OSwweGZiLDB4MDMsMHhlMSwweDgwLDB4MWMsMHhj NywweGUyLDB4MmEsMHhmOSwweDM3LDB4M2YsCi0rCTB4NjYsMHg0ZCwweDYyLDB4ZDksMHgxMCww eGUwLDB4YWQsMHhjOCwweDlhLDB4ZjAsMHhhOCwweDZkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFs aW5wdXRbXSA9Ci0rCXsKLSsJMHgzNiwweGM2LDB4MTMsMHg2MCwweGJiLDB4MTQsMHhhZCwweDIy LDB4YjAsMHgzOCwweGFjLDB4YTYsCi0rCTB4MTgsMHgxNiwweDkzLDB4MjUsMHg4NiwweGI3LDB4 ZGMsMHhkYywweDM2LDB4OTgsMHgyYiwweGY5LAotKwkweDY4LDB4MzMsMHhkMywweGM2LDB4ZmYs MHhjZSwweDhkLDB4MTUsMHg1OSwweDgyLDB4NzYsMHhlZCwKLSsJMHg2ZiwweDhkLDB4NDksMHg3 NCwweDJmLDB4ZGEsMHhkYywweDFmLDB4MTcsMHhkMCwweGRlLDB4MTcKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2lu dF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgxNiwweDJmLDB4OGUsMHgzZiwweDIxLDB4N2Es MHgxYywweDIwLDB4NTYsMHhkMSwweDkyLDB4ZjYsCi0rCTB4ZDIsMHgyNSwweDc1LDB4MGUKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDkxLDB4NzksMHg3Niww eGVlLDB4ZTAsMHhjZiwweDllLDB4YzIsMHhkNSwweGQ0LDB4MjMsMHg5YiwKLSsJMHgxMiwweDhj LDB4N2UsMHgwYSwweGI3LDB4ZDIsMHg4YiwweGQ2LDB4N2MsMHhhMywweGM2LDB4ZTUsCi0rCTB4 MGUsMHhhYSwweGM3LDB4NmIsMHhhZSwweDBkLDB4ZmEsMHg1MywweDA2LDB4NzksMHhhMSwweGVk LAotKwkweDRkLDB4NmEsMHgwZSwweGQ4LDB4OWQsMHhiZSwweDFiLDB4MzEsMHg5MywweDdiLDB4 ZWMsMHhmYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4 ZDIsMHg0NiwweDUwLDB4MjIsMHgxMCwweDE0LDB4NjMsMHhmNywweGVhLDB4MGYsMHhiOSwweDdl LAotKwkweDBkLDB4ZTEsMHg5NCwweDA3LDB4YWYsMHgwOSwweDQ0LDB4MzEsMHhlYSwweDY0LDB4 YTQsMHgxOCwKLSsJMHg1YiwweGY5LDB4ZDgsMHhjMiwweGZhLDB4MDMsMHg0NywweGM1LDB4Mzks MHg0MywweGQ1LDB4M2IsCi0rCTB4NjIsMHg4NiwweDY0LDB4ZWEsMHgyYywweDczLDB4OGMsMHhh ZSwweDlkLDB4OTgsMHg5OCwweDI5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQot Kwl7Ci0rCTB4OGMsMHhhYiwweDE4LDB4ZjgsMHhjMywweGVjLDB4MTgsMHg1YywweGIzLDB4MWUs MHg5ZCwweGJlLAotKwkweDNmLDB4MDMsMHhiNCwweDAwLDB4OTgsMHg5ZCwweGFlLDB4ZWIsMHhm NCwweDk0LDB4ZjgsMHg0MiwKLSsJMHg4ZiwweGUzLDB4MzksMHgwNywweGUxLDB4YzksMHhhZCww eDBiLDB4MWYsMHhlZCwweGMwLDB4YmEsCi0rCTB4ZjYsMHhkMSwweGVjLDB4MjcsMHg4NiwweDdi LDB4ZDYsMHg1NSwweDliLDB4NjAsMHhhNSwweGM2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9yZXR1cm5lZGJpdHNb XSA9Ci0rCXsKLSsJMHhlZiwweGQyLDB4ZDgsMHg1YywweGRjLDB4NjIsMHgyNSwweDlmLDB4YWEs MHgxZSwweDJjLDB4NjcsCi0rCTB4ZjYsMHgwMiwweDMyLDB4ZTIKLSsJfTsKLSsKLSsKLSsvKiBT SEEtMSBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGExX3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGQyLDB4MzYsMHhhNSwweDI3LDB4 MzEsMHg3MywweGRkLDB4MTEsMHg0ZiwweDkzLDB4YmQsMHhlMiwKLSsJMHgzMSwweGE1LDB4OTEs MHgxMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTFfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhiNSwweGIzLDB4NjAsMHhlZiwweGY3LDB4 NjMsMHgzMSwweGYzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMV9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhk NCwweGJiLDB4MDIsMHgxMCwweGIyLDB4NzEsMHhkYiwweDgxLDB4ZDYsMHhmMCwweDQyLDB4NjAs Ci0rCTB4ZGEsMHhlYSwweDc3LDB4NTIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewot KwkweDRkLDB4ZDIsMHg2YywweDg3LDB4ZmIsMHgyYywweDRmLDB4YTYsMHg4ZCwweDE2LDB4NjMs MHgyMiwKLSsJMHg2YSwweDUxLDB4ZTMsMHhmOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0r CXsKLSsJMHhjOSwweDgzLDB4OWUsMHgxNiwweGY2LDB4MWMsMHgwZiwweGIyLDB4ZWMsMHg2MCww eDMxLDB4YTksCi0rCTB4Y2IsMHhhOSwweDM2LDB4N2EKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2ludF9yZXR1cm5lZGJpdHNb XSA9Ci0rCXsKLSsJMHhhOCwweDEzLDB4NGYsMHhmNCwweDMxLDB4MDIsMHg0NCwweGUzLDB4ZDMs MHgzZCwweDYxLDB4OWUsCi0rCTB4ZTUsMHhjNiwweDNlLDB4ODksMHhiNSwweDliLDB4MGYsMHgz NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTFfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweGY5LDB4ZTgsMHhkMiwweDcy LDB4MTMsMHgzNCwweDk1LDB4NmYsMHgxNSwweDQ5LDB4NDcsMHg5OSwKLSsJMHgxNiwweDAzLDB4 MTksMHg0NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4NGUsMHg4YywweDQ5 LDB4OWIsMHg0YSwweDVjLDB4OWIsMHg5YywweDNhLDB4ZWUsMHhmYiwweGQyLAotKwkweGFlLDB4 Y2QsMHg4YywweGM0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMV9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg1MCwweGI0LDB4 YjQsMHhjZCwweDY4LDB4NTcsMHhmYywweDJlLDB4YzEsMHg1MiwweGNjLDB4ZjYsCi0rCTB4Njgs MHhhNCwweDgxLDB4ZWQsMHg3ZSwweGU0LDB4MWQsMHg4NwotKwl9OwotKwotKwotKy8qIFNIQS0x IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTFfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YTksMHg0NywweDFiLDB4MjksMHgyZCww eDFjLDB4MDUsMHhkZiwweDc2LDB4ZDAsMHg2MiwweGY5LAotKwkweGUyLDB4N2YsMHg0YywweDdi Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMV9ub25jZVtdID0KLSsJewotKwkweDUzLDB4MjMsMHgyNCwweGUzLDB4ZWMsMHgwYywweDU0 LDB4MTQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGExX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDdhLDB4ODcsMHhh MSwweGFjLDB4MWMsMHhmZCwweGFiLDB4YWUsMHhmNywweGQ2LDB4ZmIsMHg3NiwKLSsJMHgyOCww eGVjLDB4NmQsMHhjYQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4ZmMsMHg5Miww eDM1LDB4ZDYsMHg3ZSwweGI3LDB4MjQsMHg2NSwweGZkLDB4MTIsMHgyNywweDM1LAotKwkweGMw LDB4NzIsMHhjYSwweDI4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMV9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NTcsMHg4 OCwweDgyLDB4ZTUsMHgyNSwweGE1LDB4MmMsMHg0YSwweDA2LDB4MjAsMHg2YywweDcyLAotKwkw eDU1LDB4NjEsMHhkZCwweDkwLDB4NzEsMHg5ZiwweDk1LDB4ZWEKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2VudHJvcHlpbnB1dHJl c2VlZFtdID0KLSsJewotKwkweDY5LDB4YTUsMHg0MCwweDYyLDB4OTgsMHg0NywweDU2LDB4NzMs MHg0YSwweDhmLDB4NjAsMHg5NiwKLSsJMHhkNiwweDk5LDB4MjcsMHhlZAotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25h bGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4ZTUsMHg0MCwweDRlLDB4YmQsMHg1MCwweDAwLDB4 ZjUsMHgxNSwweGE2LDB4ZWUsMHg0NSwweGRhLAotKwkweDg0LDB4M2QsMHhkNCwweGMwCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9h ZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MTEsMHg1MSwweDE0LDB4ZjAsMHgwOSwweDFi LDB4NGUsMHg1NiwweDBkLDB4ZTksMHhmNiwweDFlLAotKwkweDUyLDB4NjUsMHhjZCwweDk2Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MV9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhhMSwweDljLDB4OTQsMHg2ZSwweDI5LDB4ZTEs MHgzMywweDBkLDB4MzIsMHhkNiwweGFhLDB4Y2UsCi0rCTB4NzEsMHgzZiwweDUyLDB4NzIsMHg4 YiwweDQyLDB4YTgsMHhkNwotKwl9OwotKwotKwotKy8qIFNIQS0yMjQgUFIgICovCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJvcHlp bnB1dFtdID0KLSsJewotKwkweDEyLDB4NjksMHgzMiwweDRmLDB4ODMsMHhhNiwweGY1LDB4MTQs MHhlMywweDQ5LDB4M2UsMHg3NSwKLSsJMHgzZSwweGRlLDB4YWQsMHhhMSwweDI5LDB4YzMsMHhm MywweDE5LDB4MjAsMHhiNSwweDRjLDB4ZDkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHg2 YSwweDc4LDB4ZDAsMHhlYiwweGJiLDB4NWEsMHhmMCwweGVlLDB4ZTgsMHhjMywweGJhLDB4NzEK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyMjRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4ZDUsMHhiOCwweGI2 LDB4YmMsMHhjMSwweDViLDB4NjAsMHgzMSwweDNjLDB4ZjUsMHhlNSwweGMwLAotKwkweDhlLDB4 NTIsMHg3YSwweGJkLDB4ZWEsMHg0NywweGE5LDB4NWYsMHg4ZiwweGY5LDB4OGIsMHhhZQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIy NF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHgxZiwweDU1LDB4ZWMsMHhhZSwweDE2 LDB4MTIsMHg4NCwweGJhLDB4ODQsMHgxNiwweDE5LDB4ODgsCi0rCTB4OGUsMHhiOCwweDMzLDB4 MjUsMHg1NCwweGZmLDB4Y2EsMHg3OSwweGFmLDB4MDcsMHgyNSwweDUwCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJv cHlpbnB1dHByW10gPQotKwl7Ci0rCTB4OTIsMHhhMywweDMyLDB4YTgsMHg5YSwweDBhLDB4NTgs MHg3YywweDFkLDB4NWEsMHg3ZSwweGUxLAotKwkweGIyLDB4NzMsMHhhYiwweDBlLDB4MTYsMHg3 OSwweDIzLDB4ZDMsMHgyOSwweDg5LDB4ODEsMHhlMQotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPQotKwl7Ci0rCTB4ZjMsMHgzOCwweDkxLDB4NDAsMHgzNywweDdhLDB4NTEsMHg3MiwweDQy LDB4NzQsMHg3OCwweDBhLAotKwkweDY5LDB4ZmQsMHhhNiwweDQ0LDB4NDMsMHg0NSwweDZjLDB4 MGMsMHg1YSwweDE5LDB4ZmYsMHhmMSwKLSsJMHg1NCwweDYwLDB4ZWUsMHg2YQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9h ZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4NzUsMHhmMywweDA0LDB4MjUsMHhkZCwweDM2 LDB4YTgsMHgzNywweDQ2LDB4YWUsMHgwYywweDUyLAotKwkweDA1LDB4NzksMHg0YywweDI2LDB4 ZGIsMHhlOSwweDcxLDB4MTYsMHg0YywweDBhLDB4ZjIsMHg2MAotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5w dXRwcjJbXSA9Ci0rCXsKLSsJMHhlYSwweGM1LDB4MDMsMHgwYSwweDRmLDB4YjAsMHgzOCwweDhk LDB4MjMsMHhkNCwweGM4LDB4NzcsCi0rCTB4ZTIsMHg2ZCwweDljLDB4MGIsMHg0NCwweGY3LDB4 MmQsMHg1YiwweGJmLDB4NWQsMHgyYSwweDExCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX3JldHVybmVkYml0c1tdID0KLSsJ ewotKwkweDYwLDB4NTAsMHgyYiwweGU3LDB4ODYsMHhkOCwweDI2LDB4NzMsMHhlMywweDFkLDB4 OTUsMHgyMCwKLSsJMHhiMywweDJjLDB4MzIsMHgxYywweGY1LDB4Y2UsMHg1NywweGE2LDB4Njcs MHgyYiwweGRjLDB4NGUsCi0rCTB4ZGQsMHgxMSwweDRjLDB4YzQKLSsJfTsKLSsKLSsKLSsvKiBT SEEtMjI0IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTIyNF9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhiMiwweDFjLDB4NzcsMHg0 ZCwweGY2LDB4ZDMsMHhiNiwweDQwLDB4YjcsMHgzMCwweDNlLDB4MjksCi0rCTB4YjAsMHg4NSww eDFjLDB4YmUsMHg0YSwweGVhLDB4NmIsMHg1YSwweGI1LDB4OGEsMHg5NywweGViCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X25v bmNlW10gPQotKwl7Ci0rCTB4NDIsMHgwMiwweDBhLDB4MWMsMHg5OCwweDlhLDB4NzcsMHg5ZSww eDlmLDB4ODAsMHhiYSwweGUwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewot KwkweDk4LDB4YjgsMHgwNCwweDQxLDB4ZmMsMHhjMSwweDVkLDB4YzUsMHhlOSwweGI5LDB4MDgs MHhkYSwKLSsJMHhmOSwweGZhLDB4MGQsMHg5MCwweGNlLDB4ZGYsMHgxZCwweDEwLDB4YTksMHg4 ZCwweDUwLDB4MGMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyMjRfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4OWEsMHg4ZCww eDM5LDB4NDksMHg0MiwweGQ1LDB4MGIsMHhhZSwweGUxLDB4YWYsMHhiNywweDAwLAotKwkweDAy LDB4ZmEsMHg5NiwweGIxLDB4YTUsMHgxZCwweDJkLDB4MjUsMHg3OCwweGVlLDB4ODMsMHgzZgot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTIyNF9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZTQsMHhmNSwweDUzLDB4NzksMHg1 YSwweDk3LDB4NTgsMHgwNiwweDA4LDB4YmEsMHg3YiwweGZhLAotKwkweGYwLDB4ODMsMHgwNSww eDhjLDB4MjIsMHhjMCwweGM5LDB4ZGIsMHgxNSwweGU3LDB4ZGUsMHgyMCwKLSsJMHg1NSwweDIy LDB4OWEsMHhhZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTIyNF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg2NywweDA5 LDB4NDgsMHhhYSwweDA3LDB4MTYsMHg5OSwweDg5LDB4N2YsMHg2ZCwweGEwLDB4ZTUsCi0rCTB4 OGYsMHhkZiwweGJjLDB4ZGIsMHhmZSwweGU1LDB4NmMsMHg3YSwweDk1LDB4NGEsMHg2NiwweDE3 Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjI0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDBmLDB4NGIsMHgxYyww eDZmLDB4YjcsMHhlMywweDQ3LDB4ZTUsMHg1ZCwweDdkLDB4MzgsMHhkNiwKLSsJMHgyOCwweDli LDB4ZWIsMHg1NSwweDYzLDB4MDksMHgzZSwweDdjLDB4NTYsMHhlYSwweGY4LDB4MTkKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRf YWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDJkLDB4MjYsMHg3YywweDM3LDB4ZTQsMHg3 YSwweDI4LDB4NWUsMHg1YSwweDNjLDB4YWYsMHgzZCwKLSsJMHg1YSwweDhlLDB4NTUsMHhhMiww eDFhLDB4NmUsMHhjMCwweGU1LDB4ZjYsMHgyMSwweGQzLDB4ZjYKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcmV0dXJuZWRiaXRz W10gPQotKwl7Ci0rCTB4NGQsMHg4MywweDM1LDB4ZGYsMHg2NywweGE5LDB4ZmMsMHgxNywweGRh LDB4NzAsMHhjYywweDhiLAotKwkweDdmLDB4NzcsMHhhZSwweGEyLDB4NWYsMHhiOSwweDdlLDB4 NzQsMHg0YywweDI2LDB4YzEsMHg3YSwKLSsJMHgzYiwweGE3LDB4NWMsMHg5MwotKwl9OwotKwot KwotKy8qIFNIQS0yNTYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGNlLDB4NDks MHgwMCwweDdhLDB4NTYsMHhlMywweDY3LDB4OGYsMHhlMSwweGI2LDB4YTcsMHhkNCwKLSsJMHg0 ZiwweDA4LDB4N2EsMHgxYiwweDAxLDB4ZjQsMHhmYSwweDZiLDB4ZWYsMHhiNywweGU1LDB4ZWIs Ci0rCTB4MDcsMHgzZCwweDExLDB4MGQsMHhjOCwweGVhLDB4MmIsMHhmZQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9ub25j ZVtdID0KLSsJewotKwkweDczLDB4NDEsMHhjOCwweDkyLDB4OTQsMHhlMiwweGM1LDB4NWYsMHg5 MywweGZkLDB4MzksMHg1ZCwKLSsJMHgyYiwweDkxLDB4NGQsMHgzOAotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg1MCwweDZkLDB4MDEsMHgwMSwweDA3LDB4NWEs MHg4MCwweDM1LDB4N2EsMHg1NiwweDFhLDB4NTYsCi0rCTB4MmYsMHg5YSwweDBiLDB4MzUsMHhi MiwweGIxLDB4YzksMHhlNSwweGNhLDB4NjksMHg2MSwweDQ4LAotKwkweGZmLDB4ZmIsMHgwZiww eGQ5LDB4NGIsMHg3OSwweDFkLDB4YmEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7 Ci0rCTB4MjAsMHhiOCwweGRmLDB4NDQsMHg3NywweDVhLDB4YjgsMHhkMywweGJmLDB4ZjYsMHhj ZiwweGFjLAotKwkweDVlLDB4YTYsMHg5NiwweDYyLDB4NzMsMHg0NCwweDQwLDB4NGEsMHgzMCww eGZiLDB4MzgsMHhhNSwKLSsJMHg3YiwweDBkLDB4ZTQsMHgwZCwweGM2LDB4ZTQsMHg5YSwweDFm Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjU2X3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4MDQsMHhjNCwweDY1LDB4ZjQs MHhkMywweGJmLDB4ODMsMHg0YiwweGFiLDB4YzgsMHg0MSwweGE4LAotKwkweGMyLDB4ZTAsMHg0 NCwweDYzLDB4NzcsMHg0YywweDZmLDB4NmMsMHg0OSwweDQ2LDB4ZmYsMHg5NCwKLSsJMHgxNyww eGVhLDB4ZTYsMHgxYSwweDlkLDB4NWUsMHg2NiwweDc4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2ludF9yZXR1cm5lZGJp dHNbXSA9Ci0rCXsKLSsJMHgwNywweDRkLDB4YWMsMHg5YiwweDg2LDB4Y2EsMHg0YSwweGFhLDB4 NmUsMHg3YSwweDAzLDB4YTIsCi0rCTB4NWQsMHgxMCwweGVhLDB4MGIsMHhmOSwweDgzLDB4Y2Ms MHhkMSwweGZjLDB4ZTIsMHgwNywweGM3LAotKwkweDA2LDB4MzQsMHg2MCwweDZmLDB4ODMsMHg5 NCwweDk5LDB4NzYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDg5LDB4 NGUsMHg0NSwweDhjLDB4MTEsMHhmOSwweGJjLDB4NWIsMHhhYywweDc0LDB4OGIsMHg0YiwKLSsJ MHg1ZiwweGY3LDB4MTksMHhmMywweGY1LDB4MjQsMHg1NCwweDE0LDB4ZDEsMHgxNSwweGIxLDB4 NDMsCi0rCTB4MTIsMHhhNCwweDVmLDB4ZDQsMHhlYywweGZjLDB4Y2QsMHgwOQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9l bnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHgwZSwweGViLDB4MWYsMHhkNywweGZjLDB4ZDEs MHg5ZCwweGQ0LDB4MDUsMHgzNiwweDhiLDB4YjIsCi0rCTB4ZmIsMHhlNCwweGY0LDB4NTEsMHgw YywweDg3LDB4OWIsMHgwMiwweDQ0LDB4ZDUsMHg5MiwweDRkLAotKwkweDQ0LDB4ZmUsMHgxYSww eDAzLDB4NDMsMHg1NiwweGJkLDB4ODYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0r CTB4MDIsMHhhYSwweGI2LDB4MWQsMHg3ZSwweDJhLDB4NDAsMHgwMywweDY5LDB4MmQsMHg0OSww eGEzLAotKwkweDQxLDB4ZTcsMHg0NCwweDBiLDB4YWYsMHg3YiwweDg1LDB4ZTQsMHg1ZiwweDUz LDB4M2IsMHg2NCwKLSsJMHhiYywweDg5LDB4YzgsMHg4MiwweGQ0LDB4NzgsMHgzNywweGEyCi0r CX07Ci0rCi0rCi0rLyogU0hBLTI1NiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4 NWIsMHgxYiwweGVjLDB4NGQsMHhhOSwweDM4LDB4NzQsMHg1YSwweDM0LDB4MGIsMHg3YiwweGM1 LAotKwkweGU1LDB4ZDcsMHg2NiwweDdjLDB4YmMsMHg4MiwweGI5LDB4MGUsMHgyZCwweDFmLDB4 OTIsMHhkNywKLSsJMHhjMSwweGJjLDB4NjcsMHg2OSwweGVjLDB4NmIsMHgwMywweDNjCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2 X25vbmNlW10gPQotKwl7Ci0rCTB4YTQsMHgwYywweGQ4LDB4OWMsMHg2MSwweGQ4LDB4YzMsMHg1 NCwweGZlLDB4NTMsMHhjOSwweGU1LAotKwkweDVkLDB4NmYsMHg2ZCwweDM1Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDIyLDB4NWUsMHg2MiwweDkzLDB4NDIsMHg4 MywweDc4LDB4MjQsMHhkOCwweDQwLDB4OGMsMHhkZSwKLSsJMHg2ZiwweGY5LDB4YTQsMHg3YSww eGM1LDB4YTcsMHgzYiwweDg4LDB4YTMsMHhlZSwweDQyLDB4MjAsCi0rCTB4ZmQsMHg2MSwweDU2 LDB4YzYsMHg0YywweDEzLDB4NDEsMHg5YwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsK LSsJMHhiZiwweDc0LDB4NWIsMHhmNiwweGM1LDB4NjQsMHg1ZSwweDk5LDB4MzQsMHg4ZiwweGJj LDB4YTQsCi0rCTB4ZTIsMHhiZCwweGQ4LDB4ODUsMHgyNiwweDM3LDB4ZWEsMHhiYSwweDRmLDB4 ZjIsMHg5YSwweDlhLAotKwkweDY2LDB4ZmMsMHhkZiwweDYzLDB4MjYsMHgyNiwweDE5LDB4ODcK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyNTZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGIzLDB4YzYsMHgwNywweDA3LDB4 ZDYsMHg3NSwweGY2LDB4MmIsMHhkNiwweDIxLDB4OTYsMHhmMSwKLSsJMHhhZSwweGRiLDB4MmIs MHhhYywweDI1LDB4MmEsMHhhZSwweGFlLDB4NDEsMHg3MiwweDAzLDB4NWUsCi0rCTB4YmYsMHhk MywweDY0LDB4YmMsMHg1OSwweGY5LDB4YzAsMHg3NgotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9lbnRyb3B5aW5wdXRyZXNlZWRb XSA9Ci0rCXsKLSsJMHhiZiwweDIwLDB4MzMsMHg1NiwweDI5LDB4YTgsMHgzNywweDA0LDB4MWYs MHg3OCwweDM0LDB4M2QsCi0rCTB4ODEsMHgyYSwweGM5LDB4ODYsMHhjNiwweDdhLDB4MmYsMHg4 OCwweDVlLDB4ZDUsMHhiZSwweDM0LAotKwkweDQ2LDB4MjAsMHhhNCwweDM1LDB4ZWIsMHhjNyww eGUyLDB4OWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4OWIsMHhh ZSwweDJkLDB4MmQsMHg2MSwweGE0LDB4ODksMHhlYiwweDQzLDB4NDYsMHhhNywweGRhLAotKwkw eGVmLDB4NDAsMHhjYSwweDRhLDB4OTksMHgxMSwweDQxLDB4ZGMsMHg1YywweDk0LDB4ZTksMHhh YywKLSsJMHhkNCwweGQwLDB4ZTYsMHhiZCwweGZiLDB4MDMsMHg5YywweGE4Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0 aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgyMywweGFhLDB4MGMsMHhiZCwweDI4LDB4MzMsMHhl MiwweDUxLDB4ZmMsMHg3MSwweGQyLDB4MTUsCi0rCTB4MWYsMHg3NiwweGZkLDB4MGQsMHhlMCww eGI3LDB4YjUsMHg4NCwweDc1LDB4NWIsMHhiZSwweGYzLAotKwkweDVjLDB4Y2EsMHhjNSwweDMw LDB4ZjIsMHg3NSwweDFmLDB4ZGEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4OTAs MHgzYywweGMxLDB4MTAsMHg4YywweDEyLDB4MDEsMHhjNiwweGE2LDB4M2EsMHgwZiwweDRkLAot KwkweGI2LDB4M2EsMHg0ZiwweDQxLDB4OWMsMHg2MSwweDc1LDB4ODQsMHhlOSwweDc0LDB4NzUs MHhmZCwKLSsJMHhmZSwweGYyLDB4MWYsMHg0MywweGQ4LDB4NWUsMHgyNCwweGEzCi0rCX07Ci0r Ci0rCi0rLyogU0hBLTM4NCBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4NzEsMHg5 ZCwweGIyLDB4NWEsMHg3MSwweDZkLDB4MDQsMHhlOSwweDFlLDB4YzcsMHg5MiwweDI0LAotKwkw eDZlLDB4MTIsMHgzMywweGE5LDB4NTIsMHg2NCwweDMxLDB4ZWYsMHg3MSwweGViLDB4MjIsMHg1 NSwKLSsJMHgyOCwweDk3LDB4MDYsMHg2YSwweGMwLDB4MGMsMHhhMCwweDdlCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX25v bmNlW10gPQotKwl7Ci0rCTB4ZjUsMHgwZCwweGZhLDB4YjAsMHhlYywweDZhLDB4N2MsMHhkNiww eGJkLDB4OWIsMHgwNSwweGZkLAotKwkweDM4LDB4M2UsMHgyZSwweDU2Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDc0LDB4YWMsMHg3ZSwweDZkLDB4YjEsMHhh NCwweGU3LDB4MjEsMHhkMSwweDFlLDB4NmUsMHg5NiwKLSsJMHg2ZCwweDRkLDB4NTMsMHg0Niww eDgyLDB4OTYsMHg2ZSwweGNmLDB4YWEsMHg4MSwweDhkLDB4N2QsCi0rCTB4OWUsMHhlMSwweDBm LDB4MTUsMHhlYSwweDQxLDB4YmYsMHhlMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0r CXsKLSsJMHhkYSwweDk1LDB4ZDQsMHhkMCwweGI4LDB4MTEsMHhkMywweDQ5LDB4MjcsMHg1ZCww eGE5LDB4MzksCi0rCTB4NjgsMHhmMywweGE4LDB4ZTksMHg1ZCwweDE5LDB4OGEsMHgyYiwweDY2 LDB4ZTgsMHg2OSwweDA2LAotKwkweDdjLDB4OWUsMHgwMywweGExLDB4OGIsMHgyNiwweDJkLDB4 NmUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEzODRfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHg0OSwweGRmLDB4NDQsMHgw MCwweGU0LDB4MWMsMHg3NSwweDBiLDB4MjYsMHg1YSwweDU5LDB4NjQsCi0rCTB4MWYsMHg0ZSww eGIxLDB4YjIsMHgxMywweGYxLDB4MjIsMHg0ZSwweGI0LDB4NmQsMHg5YSwweGNjLAotKwkweGEw LDB4NDgsMHhlNiwweGNmLDB4MWQsMHhkMSwweDkyLDB4MGQKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfaW50X3JldHVybmVk Yml0c1tdID0KLSsJewotKwkweGM4LDB4NTIsMHhhZSwweGJmLDB4MDQsMHgzYywweDI3LDB4Yjcs MHg3OCwweDE4LDB4YWEsMHg4ZiwKLSsJMHhmZiwweGNmLDB4YTQsMHhmMSwweGNjLDB4ZTcsMHg2 OCwweGZhLDB4MjIsMHhhMiwweDEzLDB4NDUsCi0rCTB4ZTgsMHhkZCwweDg3LDB4ZTYsMHhmMiww eDZlLDB4ZGQsMHhjNywweDUyLDB4OTAsMHg5ZiwweDdiLAotKwkweGZhLDB4NjEsMHgyZCwweDlk LDB4OWUsMHhjZiwweDk4LDB4YWMsMHg1MiwweDQwLDB4Y2UsMHhhZgotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlv bmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4NjEsMHg3YywweDAzLDB4OWEsMHgzZSwweDUwLDB4NTcs MHg2MCwweGM1LDB4ODMsMHhjOSwweGIyLAotKwkweGQxLDB4ODcsMHg4NSwweDY2LDB4OTIsMHg1 ZCwweDg0LDB4MGUsMHg1MywweGZiLDB4NzAsMHgwMywKLSsJMHg3MiwweGZkLDB4YmEsMHhhZSww eDljLDB4OGYsMHhmOCwweDE4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkw eGY4LDB4ZWIsMHg4OSwweGIxLDB4OGQsMHg3OCwweGJlLDB4MjEsMHhlMCwweGJiLDB4OWQsMHhi NywKLSsJMHg5NSwweDBlLDB4ZDksMHg0NiwweDBjLDB4OGMsMHhlMiwweDYzLDB4YjcsMHg5ZCww eDY3LDB4OTAsCi0rCTB4YmQsMHhjNywweDBiLDB4YTUsMHhjZSwweGIyLDB4NjUsMHg4MQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4 NF9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlNiwweDlmLDB4ZmUsMHg2OCwweGQ2LDB4 YjUsMHg3OSwweGYxLDB4MDYsMHg1ZiwweGEzLDB4YmIsCi0rCTB4MjMsMHg4NSwweGQ4LDB4ZjAs MHgyOSwweDVhLDB4NjgsMHg5ZSwweGY1LDB4ZjQsMHhhNiwweDEyLAotKwkweGUwLDB4OWEsMHhl MiwweGFjLDB4MDAsMHgxZCwweDk4LDB4MjYsMHhmYywweDUzLDB4OTUsMHg1MywKLSsJMHhlNCww eDNlLDB4MTcsMHhkNSwweDA4LDB4MGIsMHg3MCwweDNkLDB4NjcsMHg5OSwweGFjLDB4NjYKLSsJ fTsKLSsKLSsKLSsvKiBTSEEtMzg0IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgw NywweDE1LDB4MjcsMHgyYSwweGFmLDB4NzQsMHgyNCwweDM3LDB4YmMsMHhkNSwweDE0LDB4Njks Ci0rCTB4Y2UsMHgxMSwweGZmLDB4YTIsMHg2YiwweGI4LDB4MDUsMHg2NywweDM0LDB4ZjgsMHhi ZCwweDZkLAotKwkweDZhLDB4Y2MsMHhjZCwweDYwLDB4YTMsMHg2OCwweGNhLDB4ZjQKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRf bm9uY2VbXSA9Ci0rCXsKLSsJMHg3MCwweDE3LDB4YzIsMHg1YiwweDVkLDB4MjIsMHgwYiwweDA2 LDB4MTUsMHg1NCwweDc4LDB4NzcsCi0rCTB4NDQsMHhhZiwweDJmLDB4MDkKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcGVyc29u YWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4ODksMHgzOSwweDI4LDB4YjAsMHg2MCwweGVi LDB4M2QsMHhkYywweDU1LDB4NzUsMHg4NiwweGViLAotKwkweGFlLDB4YTIsMHg4ZiwweGJjLDB4 MWIsMHg3NSwweGQ0LDB4ZTEsMHgwZiwweGFhLDB4MzgsMHhjYSwKLSsJMHg2MiwweDhiLDB4Y2Is MHgyYywweDI2LDB4ZjYsMHhiYywweGIxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewot KwkweDMwLDB4MmIsMHg0MiwweDM1LDB4ZWYsMHhkYSwweDQwLDB4NTUsMHgyOCwweGM2LDB4OTUs MHhmYiwKLSsJMHg1NCwweDAxLDB4NjIsMHhkNywweDg3LDB4MTQsMHg0OCwweDZkLDB4OTAsMHg0 YywweGE5LDB4MDIsCi0rCTB4NTQsMHg0MCwweDIyLDB4YzgsMHg2NiwweGE1LDB4NDgsMHg0OAot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTM4NF9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ODIsMHhjNCwweGExLDB4OWMsMHgy MSwweGQyLDB4ZTcsMHhhNSwweGE2LDB4ZjYsMHg1ZiwweDA0LAotKwkweDVjLDB4YzcsMHgzMSww eDlkLDB4OGQsMHg1OSwweDc0LDB4NTAsMHgxOSwweDg5LDB4MmYsMHg2MywKLSsJMHhkNSwweGI3 LDB4N2UsMHhlYiwweDE1LDB4ZTMsMHg3MCwweDgzLDB4YTEsMHgyNCwweDU5LDB4ZmEsCi0rCTB4 MmMsMHg1NiwweGY2LDB4ODgsMHgzYSwweDkyLDB4OTMsMHhhMSwweGZiLDB4NzksMHhjMSwweDdh Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMzg0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDM5LDB4YTYsMHhlOCwweDVj LDB4ODIsMHgxNywweDcxLDB4MjYsMHg1NywweDRmLDB4OWYsMHhjMiwKLSsJMHg1NSwweGZmLDB4 NWMsMHg5YiwweDUzLDB4MWEsMHhkMSwweDVmLDB4YmMsMHg2MiwweGU0LDB4MjcsCi0rCTB4MmQs MHgzMiwweGYwLDB4ZTQsMHg1MiwweDhjLDB4YzUsMHgwYwotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXRy ZXNlZWRbXSA9Ci0rCXsKLSsJMHg4ZCwweGNiLDB4OGQsMHhjZSwweDA4LDB4ZWEsMHg4MCwweGU4 LDB4OWIsMHg2MSwweGE4LDB4MGYsCi0rCTB4YWYsMHg0OSwweDIwLDB4OWUsMHg3NCwweGNiLDB4 NTcsMHg4MCwweDQyLDB4YjAsMHg4NCwweDVlLAotKwkweDMwLDB4MmEsMHg2NywweDA4LDB4ZjQs MHhlMywweDQwLDB4MjIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDdjLDB4 OGYsMHhjMiwweGFlLDB4MjIsMHg0YSwweGQ2LDB4ZjYsMHgwNSwweGE0LDB4N2EsMHhlYSwKLSsJ MHhiYiwweDI1LDB4ZDAsMHhiNywweDVhLDB4ZDYsMHhjZiwweDlkLDB4ZjMsMHg2YywweGUyLDB4 YjIsCi0rCTB4NGUsMHhiNCwweGJkLDB4ZjQsMHhlNSwweDQwLDB4ODAsMHg5NAotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9yZXR1 cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg5ZSwweDdlLDB4ZmIsMHg1OSwweGJiLDB4YWEsMHgzYyww eGY3LDB4ZTEsMHhmOCwweDc2LDB4ZGQsCi0rCTB4NjMsMHg1ZiwweGFmLDB4MjMsMHhkNiwweDY0 LDB4NjEsMHhjMCwweDlhLDB4MDksMHg0NywweGM5LAotKwkweDMzLDB4ZGYsMHg2ZCwweDU1LDB4 OTEsMHgzNCwweDc5LDB4NzAsMHhjNCwweDk5LDB4NmUsMHg1NCwKLSsJMHgwOSwweDY0LDB4MjEs MHgxYSwweGJkLDB4MWUsMHg4MCwweDQwLDB4MzQsMHhhZCwweGZhLDB4ZDcKLSsJfTsKLSsKLSsK LSsvKiBTSEEtNTEyIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgxMywweGY3LDB4 NjEsMHg3NSwweDY1LDB4MjgsMHhhMiwweDU5LDB4MTMsMHg1YSwweDRhLDB4NGYsCi0rCTB4NTYs MHg2MCwweDhjLDB4NTMsMHg3ZCwweGIwLDB4YmQsMHgwNiwweDRmLDB4ZWQsMHhjYywweGQyLAot KwkweGEyLDB4YjUsMHhmZCwweDViLDB4M2EsMHhhYiwweGVjLDB4MjgKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfbm9uY2Vb XSA9Ci0rCXsKLSsJMHhiZSwweGEzLDB4OTEsMHg5MywweDFkLDB4YzMsMHgzMSwweDNhLDB4MjMs MHgzMywweDUwLDB4NjcsCi0rCTB4ODgsMHhjNywweGEyLDB4YzQKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4MWYsMHg1OSwweDRkLDB4N2IsMHhlNiwweDQ2LDB4 OTEsMHg0OCwweGMxLDB4MjUsMHhmYSwweGZmLAotKwkweDg5LDB4MTIsMHg3NywweDM1LDB4ZGYs MHgzZSwweGY0LDB4ODAsMHg1ZiwweGQ5LDB4YjAsMHgwNywKLSsJMHgyMiwweDQxLDB4ZGQsMHg0 OCwweDc4LDB4NmIsMHg3NywweDJiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewot KwkweDMwLDB4ZmYsMHg2MywweDZmLDB4YWMsMHhkOSwweDg0LDB4MzksMHg2ZiwweGU0LDB4OTks MHhjZSwKLSsJMHg5MSwweDdkLDB4N2UsMHhjOCwweDU4LDB4ZjIsMHgxMiwweGMzLDB4YjYsMHhh ZCwweGRhLDB4MjIsCi0rCTB4MDQsMHhhMCwweGQyLDB4MjEsMHhmZSwweGYyLDB4OTUsMHgxZAot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTUxMl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDY0LDB4NTQsMHgxMywweGVjLDB4 NGYsMHg3NywweGRhLDB4YjIsMHg5MiwweDJlLDB4NTIsMHg4MCwKLSsJMHgxMSwweDEwLDB4YzIs MHhmOCwweGU2LDB4YTcsMHhjZCwweDRiLDB4ZmMsMHgzMiwweDJlLDB4OWUsCi0rCTB4ZWIsMHhi YiwweGIxLDB4YmYsMHgxNSwweDVjLDB4NzMsMHgwOAotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPQotKwl7Ci0rCTB4ZWYsMHgxZSwweGRjLDB4MGEsMHhhNCwweDM2LDB4OTEsMHg5YywweDNk LDB4MjcsMHg5NywweDUwLAotKwkweDhkLDB4MzYsMHgyOSwweDhkLDB4Y2UsMHg2YSwweDBjLDB4 ZjcsMHgyMSwweGMwLDB4OTEsMHhhZSwKLSsJMHgwYywweDk2LDB4NzIsMHhiZCwweDUyLDB4ODEs MHg1OCwweGZjLDB4NmQsMHhlNSwweGY3LDB4YTUsCi0rCTB4ZmQsMHg1ZCwweGE3LDB4NTgsMHg2 OCwweGM4LDB4OTksMHg1OCwweDhlLDB4YzgsMHhjZSwweDk1LAotKwkweDAxLDB4N2QsMHhmZiww eGE0LDB4YzgsMHhmNywweDYzLDB4ZmUsMHg1ZiwweDY5LDB4ODMsMHg1MywKLSsJMHhlMiwweGM2 LDB4OGIsMHhjMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4ZTYsMHg5 YiwweGM0LDB4ODgsMHgzNCwweGNhLDB4ZWEsMHgyOSwweDJmLDB4OTgsMHgwNSwweGE0LAotKwkw eGQzLDB4YzAsMHg3YiwweDExLDB4ZTgsMHhiYiwweDc1LDB4ZjIsMHhiZCwweDI5LDB4YjcsMHg0 MCwKLSsJMHgyNSwweDdmLDB4YzEsMHhiNywweGIxLDB4ZjEsMHgyNSwweDYxCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2Vu dHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDIzLDB4NmQsMHhmZiwweGRlLDB4ZmIsMHhkMSww eGJhLDB4MzMsMHgxOCwweGU2LDB4YmUsMHhiNSwKLSsJMHg0OCwweDc3LDB4NmQsMHg3ZiwweGE3 LDB4ZTEsMHg0ZCwweDQ4LDB4MWUsMHgzYywweGE3LDB4MzQsCi0rCTB4MWEsMHhjOCwweDYwLDB4 ZGIsMHg4ZiwweDk5LDB4MTUsMHg5OQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJ MHg3MCwweDI3LDB4MzEsMHhkYiwweDkyLDB4NzAsMHgyMSwweGZlLDB4MTYsMHhiNiwweGM4LDB4 NTEsCi0rCTB4MzQsMHg4NywweDY1LDB4ZDAsMHg0ZSwweGZkLDB4ZmUsMHg2OCwweGVjLDB4YWMs MHhkYywweDkzLAotKwkweDQxLDB4MzgsMHg5MiwweDkwLDB4YjQsMHg5NCwweGY5LDB4MGQsMHhh NCwweGY3LDB4NGUsMHg4MCwKLSsJMHg5MiwweDY3LDB4NDgsMHg0MCwweGE3LDB4MDgsMHhjNyww eGJjLDB4NjYsMHgwMCwweGZkLDB4ZjcsCi0rCTB4NGMsMHg4YiwweDE3LDB4NmUsMHhkMSwweDhm LDB4OWIsMHhmMywweDZmLDB4ZjYsMHgzNCwweGRkLAotKwkweDY3LDB4ZjcsMHg2OCwweGRkCi0r CX07Ci0rCi0rCi0rLyogU0hBLTUxMiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4 YjYsMHgwYiwweGI3LDB4YmMsMHg4NCwweDU2LDB4ZjYsMHgxMiwweGFmLDB4NDUsMHg2NywweDE3 LAotKwkweDdjLDB4ZDEsMHhiMiwweDc4LDB4MmIsMHhhMCwweGYyLDB4YmUsMHhiNiwweDZkLDB4 OGIsMHg1NiwKLSsJMHhjNiwweGJjLDB4NGQsMHhlMSwweGY3LDB4YmUsMHhjZSwweGJkCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEy X25vbmNlW10gPQotKwl7Ci0rCTB4OWQsMHhlZCwweGMwLDB4ZTUsMHg1YSwweDk4LDB4NmEsMHhj YiwweDUxLDB4N2QsMHg3NiwweDMxLAotKwkweDVhLDB4NjQsMHhmMCwweGY3Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweGMyLDB4NmQsMHhhMywweGMzLDB4MDYsMHg3 NCwweGU1LDB4MDEsMHg1YywweDEwLDB4MTcsMHhjNywKLSsJMHhhZiwweDgzLDB4OWQsMHg1OSww eDhkLDB4MmQsMHgyOSwweDM4LDB4YzUsMHg1OSwweDcwLDB4OGIsCi0rCTB4NDYsMHg0OCwweDJk LDB4Y2YsMHgzNiwweDdkLDB4NTksMHhjMAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsK LSsJMHhlYywweDhjLDB4ZDQsMHhmNywweDYxLDB4NmUsMHgwZCwweDk1LDB4NzksMHhiNywweDI4 LDB4YWQsCi0rCTB4NWYsMHg2OSwweDc0LDB4NWYsMHgyZCwweDM2LDB4MDYsMHg4YSwweDZiLDB4 YWMsMHg1NCwweDk3LAotKwkweGM0LDB4YTEsMHgxMiwweDg1LDB4MGEsMHhkZiwweDRiLDB4MzQK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGE1MTJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDg0LDB4MmYsMHgxZiwweDY4LDB4 NmEsMHhhMywweGFkLDB4MWUsMHhmYiwweGY0LDB4MTUsMHhiZCwKLSsJMHhkZSwweDM4LDB4ZDQs MHgzMCwweDgwLDB4NTEsMHhlOSwweGQzLDB4YzcsMHgyMCwweDg4LDB4ZTksCi0rCTB4ZjUsMHhj YywweGRmLDB4NTcsMHg1YywweDQ3LDB4MmYsMHg1NywweDNjLDB4NWYsMHgxMywweDU2LAotKwkw eGNjLDB4YzUsMHg0ZiwweDg0LDB4ZjgsMHgxMCwweDQxLDB4ZDUsMHg3ZSwweDU4LDB4NmUsMHgx OSwKLSsJMHgxOSwweDllLDB4YWYsMHhjMiwweDIyLDB4NTgsMHg0MSwweDUwLDB4NzksMHhjMiww eGQ4LDB4MDQsCi0rCTB4MjgsMHhkNCwweDM5LDB4OWEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfZW50cm9weWlucHV0cmVzZWVk W10gPQotKwl7Ci0rCTB4ZmEsMHg3ZiwweDQ2LDB4NTEsMHg4MywweDYyLDB4OTgsMHgxNiwweDlh LDB4MTksMHhhMiwweDQ5LAotKwkweGE5LDB4ZTYsMHg0YSwweGQ4LDB4ODUsMHhlNywweGQ0LDB4 M2IsMHgyYywweDgyLDB4YzUsMHg4MiwKLSsJMHhiZiwweDExLDB4ZjksMHg5ZSwweGJjLDB4ZDAs MHgwMSwweGVlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweGI5LDB4 MTIsMHhlMCwweDRmLDB4ZjcsMHhhNywweGM0LDB4ZDgsMHhkMCwweDhlLDB4OTksMHgyOSwKLSsJ MHg3YywweDlhLDB4ZTksMHhjZiwweGM0LDB4NmMsMHhmOCwweGMzLDB4YTcsMHg0MSwweDgzLDB4 ZDYsCi0rCTB4MmUsMHhmYSwweGI4LDB4NWUsMHg4ZSwweDZiLDB4NzgsMHgyMAotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRp dGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4ZDcsMHgwNywweDUyLDB4YjksMHg4MywweDJjLDB4 MDMsMHg3MSwweGVlLDB4YzksMHhjMCwweDg1LAotKwkweGUxLDB4NTcsMHhiMiwweGNkLDB4M2Es MHhmMCwweGM5LDB4MzQsMHgyNCwweDQxLDB4MWMsMHg0MiwKLSsJMHg5OSwweGIyLDB4ODQsMHhl OSwweDE3LDB4ZDIsMHg3NiwweDkyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDM2 LDB4MTcsMHg1ZCwweDk4LDB4MmIsMHg2NSwweDI1LDB4OGUsMHhjOCwweDI5LDB4ZGYsMHgyNywK LSsJMHgwNSwweDM2LDB4MjYsMHgxMiwweDhhLDB4NjgsMHg3NCwweDI3LDB4MzcsMHhkNCwweDdm LDB4MzIsCi0rCTB4YjEsMHgxMiwweGQ2LDB4ODUsMHg4MywweGViLDB4MmUsMHhhMCwweGVkLDB4 NGIsMHhiNSwweDdiLAotKwkweDZmLDB4MzksMHgzYywweDcxLDB4NzcsMHgwMiwweDEyLDB4Y2Ms MHgyYywweDNhLDB4OGUsMHg2MywKLSsJMHhkZiwweDRhLDB4YmQsMHg2ZiwweDZlLDB4MmUsMHhl ZCwweDBhLDB4ODUsMHhhNSwweDJmLDB4YTIsCi0rCTB4NjgsMHhkZSwweDQyLDB4YjUKLSsJfTsK LSsKLSsKLSsvKiBITUFDIFNIQS0xIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJ MHgyNiwweDVmLDB4MzYsMHgxNCwweGZmLDB4M2QsMHg4MywweGZhLDB4NzMsMHg1ZSwweDc1LDB4 ZGMsCi0rCTB4MmMsMHgxOCwweDE3LDB4MWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJ MHhjOCwweGUzLDB4NTcsMHhhNSwweDdiLDB4NzQsMHg4NiwweDZlCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDZlLDB4ZGIsMHgwZCwweGZlLDB4N2QsMHhh YywweDc5LDB4ZDAsMHhhNSwweDNhLDB4NDgsMHg4NSwKLSsJMHg4MCwweGUyLDB4N2YsMHgyYQot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHgzMSwweGNkLDB4NWUsMHg0 MywweGRjLDB4ZmIsMHg3YSwweDc5LDB4Y2EsMHg4OCwweGRlLDB4MWYsCi0rCTB4ZDcsMHhiYiww eDQyLDB4MDkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHg3YywweDIz LDB4OTUsMHgzOCwweDAwLDB4OTUsMHhjMSwweDc4LDB4MWYsMHg4ZiwweGQ3LDB4NjMsCi0rCTB4 MjMsMHg4NywweDJhLDB4ZWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewot KwkweGJiLDB4MzQsMHhlNywweDkzLDB4YTMsMHgwMiwweDJjLDB4NGEsMHhkMCwweDg5LDB4ZGEs MHg3ZiwKLSsJMHhlZCwweGY0LDB4NGMsMHhkZSwweDE3LDB4ZWMsMHhlNSwweDZjCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEx X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg0OSwweGJjLDB4MmQsMHgyYywweGI3 LDB4MzIsMHhjYiwweDIwLDB4ZGYsMHhmNSwweDc3LDB4NTgsCi0rCTB4YTAsMHg0YiwweDkzLDB4 NmUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4M2MsMHhhYSwweGIw LDB4MjEsMHg0MiwweGIwLDB4ZGQsMHgzNCwweGYwLDB4MTYsMHg3ZiwweDBjLAotKwkweDBmLDB4 ZmYsMHgyZSwweGFmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDhlLDB4 Y2IsMHhhMywweDY0LDB4YjIsMHhiOCwweDMzLDB4NmMsMHg2NCwweDNiLDB4NzgsMHgxNiwKLSsJ MHg5OSwweDM1LDB4YzgsMHgzMCwweGNiLDB4M2UsMHhhMCwweGQ4Ci0rCX07Ci0rCi0rCi0rLyog SE1BQyBTSEEtMSBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTFfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MzIsMHg5YSww eDJhLDB4ODcsMHg3YiwweDg5LDB4N2MsMHhmNiwweGNiLDB4OTUsMHhkNSwweDQwLAotKwkweDE3 LDB4ZmUsMHg0NywweDcwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX25vbmNlW10gPQotKwl7Ci0rCTB4MTYsMHhkOCwweGUw LDB4YzcsMHg1MiwweGNmLDB4NGEsMHgyNQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9Ci0rCXsKLSsJMHgzNSwweDM1LDB4YTksMHhhNSwweDQwLDB4YmUsMHg5YiwweGQxLDB4NTYs MHhkZCwweDQ0LDB4MDAsCi0rCTB4NzIsMHhmNywweGQzLDB4NWUKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25h bGlucHV0W10gPQotKwl7Ci0rCTB4MWIsMHgyYywweDg0LDB4MmQsMHg0YSwweDg5LDB4OGYsMHg2 OSwweDE5LDB4ZjEsMHhmMywweGRiLAotKwkweGJiLDB4ZTMsMHhhYSwweGVhCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2lu dF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhjZiwweGZhLDB4N2QsMHg3MiwweDBmLDB4ZTYs MHhjNywweDk2LDB4YTAsMHg2OSwweDMxLDB4MTEsCi0rCTB4OWIsMHgwYiwweDFhLDB4MjAsMHgx ZiwweDNmLDB4YWEsMHhkMQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJ MHg5MCwweDc1LDB4MTUsMHgwNCwweDk1LDB4ZjEsMHhiYSwweDgxLDB4MGMsMHgzNywweDk0LDB4 NmYsCi0rCTB4ODYsMHg1MiwweDZkLDB4OWMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25hbGlucHV0cmVzZWVk W10gPQotKwl7Ci0rCTB4NWIsMHg0MCwweGJhLDB4NWYsMHgxNywweDcwLDB4ZjAsMHg0YiwweGRm LDB4YzksMHg5NywweDkyLAotKwkweDc5LDB4YzUsMHg4MiwweDI4Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0aW9u YWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg5NywweGM4LDB4ODAsMHg5MCwweGIzLDB4YWEsMHg2ZSww eDYwLDB4ZWEsMHg4MywweDdhLDB4ZTMsCi0rCTB4OGEsMHhjYSwweGE0LDB4N2YKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFf cmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4OTAsMHhiZCwweDA1LDB4NTYsMHg2ZCwweGI1LDB4 MjIsMHhkNSwweGI5LDB4NWEsMHgyOSwweDJkLAotKwkweGU5LDB4MGIsMHhlMSwweGFjLDB4ZGUs MHgyNywweDBiLDB4YjAKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS0yMjQgUFIgICovCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJf ZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MTcsMHgzMiwweDJiLDB4MmUsMHg2ZiwweDFiLDB4 OWMsMHg2ZCwweDMxLDB4ZTAsMHgzNCwweDA3LAotKwkweGNmLDB4ZWQsMHhmNiwweGI2LDB4NWEs MHg3NiwweDRjLDB4YmMsMHg2MiwweDg1LDB4MDEsMHg5MAotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX25vbmNlW10g PQotKwl7Ci0rCTB4MzgsMHhiZiwweDVmLDB4MjAsMHhiMywweDY4LDB4MmYsMHg0MywweDYxLDB4 MDUsMHg4ZiwweDIzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7 Ci0rCTB4YzAsMHhjOSwweDQ1LDB4YWMsMHg4ZCwweDI3LDB4NzcsMHgwOCwweDBiLDB4MTcsMHg2 ZCwweGVkLAotKwkweGMxLDB4N2QsMHhkNSwweDA3LDB4OWQsMHg2ZSwweGY4LDB4MjMsMHgyYSww eDIyLDB4MTMsMHhiZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkw eGE0LDB4M2MsMHhlNywweDNiLDB4ZWEsMHgxOSwweDQ1LDB4MzIsMHhjMiwweDgzLDB4NmQsMHgy MSwKLSsJMHg4YSwweGMwLDB4ZWUsMHg2NywweDQ1LDB4ZGUsMHgxMywweDdkLDB4OWQsMHg2MSww eDAwLDB4M2IKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDE1LDB4 MDUsMHg3NCwweDRhLDB4N2YsMHg4ZCwweDVjLDB4NjAsMHgxNiwweGU1LDB4N2IsMHhhZCwKLSsJ MHhmNSwweDQxLDB4OGYsMHg1NSwweDYwLDB4YzQsMHgwOSwweGVlLDB4MWUsMHgxMSwweDgxLDB4 YWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTIyNF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NmYsMHhmNSww eDlhLDB4ZTIsMHg1NCwweDUzLDB4MzAsMHgzZCwweDVhLDB4MjcsMHgyOSwweDM4LAotKwkweDI3 LDB4ZjIsMHgwZCwweDA1LDB4ZTksMHgyNiwweGNiLDB4MTYsMHhjMywweDUxLDB4NWYsMHgxMywK LSsJMHg0MSwweGZlLDB4OTksMHhmMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9 Ci0rCXsKLSsJMHg3MywweDgxLDB4ODgsMHg4NCwweDhmLDB4ZWQsMHg2ZiwweDEwLDB4OWYsMHg5 MywweGJmLDB4MTcsCi0rCTB4MzUsMHg3YywweGVmLDB4ZDUsMHg4ZCwweDI2LDB4YTYsMHg3YSww eGU4LDB4MDksMHgzNiwweDRmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7 Ci0rCTB4ZTYsMHhjZiwweGNmLDB4N2UsMHgxMiwweGU1LDB4NDMsMHhkMiwweDM4LDB4ZDgsMHgy NCwweDZmLAotKwkweDVhLDB4MzcsMHg2OCwweGJmLDB4NGYsMHhhMCwweGZmLDB4ZDUsMHg2MSww eDhhLDB4OTMsMHhlMAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGFm LDB4ZjksMHhkOCwweDE5LDB4OTEsMHgzMCwweDgyLDB4NmYsMHhhOSwweDFlLDB4OWQsMHhkNywK LSsJMHhmMywweDUwLDB4ZTAsMHhjNywweGQ1LDB4NjQsMHg5NiwweDdkLDB4NGMsMHg0ZCwweDc4 LDB4MDMsCi0rCTB4NmQsMHhkOCwweDllLDB4NzIKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS0y MjQgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyMjRfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MTEsMHg4MiwweGZkLDB4 ZDksMHg0MiwweGY0LDB4ZmEsMHhjOCwweGYyLDB4NDEsMHhlNiwweDU0LAotKwkweDAxLDB4YWUs MHgyMiwweDZlLDB4YzYsMHhhZiwweGFmLDB4ZDAsMHhhNiwweGIyLDB4ZTIsMHg2ZAotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjI0X25vbmNlW10gPQotKwl7Ci0rCTB4YTksMHg0OCwweGQ3LDB4OTIsMHgzOSwweDdlLDB4MmEs MHhkYywweDMwLDB4MWYsMHgwZSwweDJiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcGVyc29uYWxpemF0aW9uc3RyaW5n W10gPQotKwl7Ci0rCTB4MTEsMHhkNSwweGY0LDB4YmQsMHg2NywweDhjLDB4MzEsMHhjZiwweGEz LDB4M2YsMHgxZSwweDZiLAotKwkweGE4LDB4MDcsMHgwMiwweDBiLDB4YzgsMHgyZSwweDZjLDB4 NjQsMHg0MSwweDViLDB4YzgsMHgzNwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJ ewotKwkweDY4LDB4MTgsMHhjMiwweDA2LDB4ZWIsMHgzZSwweDA0LDB4OTUsMHg0NCwweDVlLDB4 ZmIsMHhlNiwKLSsJMHg0MSwweGMxLDB4NWMsMHhjYywweDQwLDB4MmYsMHhiNywweGQyLDB4MGYs MHhmMywweDZiLDB4ZTcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4 N2YsMHg0NSwweGM3LDB4NWQsMHgzMiwweGU2LDB4MTcsMHg2MCwweGJhLDB4ZGMsMHhiOCwweDQy LAotKwkweDFiLDB4OWMsMHhmMSwweGZhLDB4M2IsMHg0ZCwweDI5LDB4NTQsMHhjNiwweDkwLDB4 ZmYsMHg1YywKLSsJMHhjZCwweGQ2LDB4YTksMHhjYwotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1dHJl c2VlZFtdID0KLSsJewotKwkweGM0LDB4OGUsMHgzNywweDk1LDB4NjksMHg1MywweDI4LDB4ZDcs MHgzNywweGJiLDB4NzAsMHg5NSwKLSsJMHgxYywweDA3LDB4MWQsMHhkOSwweGI3LDB4ZTYsMHgx YiwweGJiLDB4ZmUsMHg0MSwweGViLDB4YzkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXRyZXNl ZWRbXSA9Ci0rCXsKLSsJMHg1MywweDE3LDB4YTEsMHg2YSwweGZhLDB4NzcsMHg0NywweGIwLDB4 OTUsMHg1NiwweDlhLDB4MjAsCi0rCTB4NTcsMHhkZSwweDVjLDB4ODksMHg5ZiwweDdmLDB4ZTIs MHhkZSwweDE3LDB4M2EsMHg1MCwweDIzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRpb25hbGlucHV0MltdID0K LSsJewotKwkweDNhLDB4MzIsMHhmOSwweDg1LDB4MGMsMHhjMSwweGVkLDB4NzYsMHgyZCwweGRm LDB4NDAsMHhjMywKLSsJMHgwNiwweDIyLDB4NjYsMHhkNCwweDlhLDB4OWEsMHhmZiwweDVhLDB4 N2UsMHg3YSwweGYzLDB4OTYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0 MywweGI0LDB4NTcsMHg1YywweDM4LDB4MjUsMHg5ZCwweGFlLDB4ZWMsMHg5NiwweGQxLDB4ODUs Ci0rCTB4M2EsMHg4NCwweDhkLDB4ZmUsMHg2OCwweGQ1LDB4MGUsMHg1YywweDhmLDB4NjUsMHhh NSwweDRlLAotKwkweDQ1LDB4ODQsMHhhOCwweDk0Ci0rCX07Ci0rCi0rCi0rLyogSE1BQyBTSEEt MjU2IFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDRkLDB4YjAsMHg0Myww eGQ4LDB4MzQsMHg0YiwweDEwLDB4NzAsMHhiMSwweDhiLDB4ZWQsMHhlYSwKLSsJMHgwNywweDky LDB4OWYsMHg2YywweDc5LDB4MzEsMHhhZiwweDgxLDB4MjksMHhlYiwweDZlLDB4Y2EsCi0rCTB4 MzIsMHg0OCwweDI4LDB4ZTcsMHgwMiwweDVkLDB4YTYsMHhhNgotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX25vbmNl W10gPQotKwl7Ci0rCTB4M2EsMHhhZSwweDE1LDB4YTksMHg5OSwweGRjLDB4ZTQsMHg2NywweDM0 LDB4M2IsMHg3MCwweDE1LAotKwkweGFhLDB4ZDMsMHgzMCwweDlhCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfcGVy c29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4MTMsMHgxZCwweDI0LDB4MDQsMHhiMCww eDE4LDB4ODEsMHgxNSwweDIxLDB4NTEsMHgyYSwweDI0LAotKwkweDUyLDB4NjEsMHhiZSwweDY0 LDB4ODIsMHg2YiwweDU1LDB4MmYsMHhlMiwweGYxLDB4NDAsMHg3ZCwKLSsJMHg3MSwweGQ4LDB4 MDEsMHg4NiwweDE1LDB4YjcsMHg4YiwweGI1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0 W10gPQotKwl7Ci0rCTB4OGYsMHhhNiwweDU0LDB4NWYsMHhiMSwweGQwLDB4ZDgsMHhjMywweGU3 LDB4MGMsMHgxNSwweGE5LAotKwkweDIzLDB4NmUsMHhmZSwweGZiLDB4OTMsMHhmNywweDNhLDB4 YmQsMHg1OSwweDAxLDB4ZmEsMHgxOCwKLSsJMHg4ZSwweGU5LDB4MWEsMHhhOSwweDc4LDB4ZmMs MHg3OSwweDBiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHhjZiww eDI0LDB4YjksMHhlYiwweGIzLDB4ZDQsMHhjZCwweDE3LDB4MzcsMHgzOCwweDc1LDB4NzksCi0r CTB4MTUsMHhjYiwweDJkLDB4NzUsMHg1MSwweGYxLDB4Y2MsMHhhYSwweDMyLDB4YTQsMHhhNyww eDM2LAotKwkweDdjLDB4NWMsMHhlNCwweDQ3LDB4ZjEsMHgzZSwweDFkLDB4ZTUKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1 Nl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NTIsMHg0MiwweGZhLDB4ZWIsMHg4 NSwweGUwLDB4MzAsMHgyMiwweDc5LDB4MDAsMHgxNiwweGIyLAotKwkweDg4LDB4MmYsMHgxNCww eDZhLDB4YjcsMHhmYywweGI3LDB4NTMsMHhkYywweDRhLDB4MTIsMHhlZiwKLSsJMHg1NCwweGQ2 LDB4MzMsMHhlOSwweDIwLDB4ZDYsMHhmZCwweDU2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRkaXRpb25hbGlu cHV0MltdID0KLSsJewotKwkweGY0LDB4ZjYsMHg0OSwweGExLDB4MmQsMHg2NCwweDJiLDB4MzAs MHg1OCwweGY4LDB4YmQsMHhiOCwKLSsJMHg3NSwweGViLDB4YmIsMHg1ZSwweDFjLDB4OWIsMHg4 MSwweDZhLDB4ZGEsMHgxNCwweDg2LDB4NmUsCi0rCTB4ZDAsMHhkYSwweDE4LDB4YjcsMHg4OCww eGZiLDB4NTksMHhmMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkw eDIxLDB4Y2QsMHg2ZSwweDQ2LDB4YWQsMHg5OSwweDA3LDB4MTcsMHhiNCwweDNkLDB4NzYsMHgw YSwKLSsJMHhmZiwweDViLDB4NTIsMHg1MCwweDc4LDB4ZGYsMHgxZiwweDI0LDB4MDYsMHgwZCww eDNmLDB4NzQsCi0rCTB4YTksMHhjOSwweDM3LDB4Y2YsMHhkOCwweDI2LDB4MjUsMHg5MQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGE3LDB4YWYsMHgyZiwweDI5LDB4 ZTAsMHgzYSwweDcyLDB4OTUsMHg5NiwweDFjLDB4YTksMHhmMCwKLSsJMHg0YSwweDE3LDB4NGQs MHg2NiwweDA2LDB4MTAsMHhiZiwweDM5LDB4ODksMHg4OCwweGI4LDB4OTEsCi0rCTB4MzcsMHgx OCwweDk5LDB4Y2YsMHg4YywweDUzLDB4M2IsMHg3ZQotKwl9OwotKwotKwotKy8qIEhNQUMgU0hB LTI1NiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTI1Nl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg5NiwweGI3LDB4NTMs MHgyMiwweDFlLDB4NTIsMHgyYSwweDk2LDB4YjEsMHgxNSwweDNjLDB4MzUsCi0rCTB4NWEsMHg4 YiwweGQzLDB4NGEsMHhhNiwweDZjLDB4ODMsMHgwYSwweDdkLDB4YTMsMHgyMywweDNkLAotKwkw eDQzLDB4YTEsMHgwNywweDJjLDB4MmQsMHhlMywweDgxLDB4Y2MKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9ub25jZVtd ID0KLSsJewotKwkweGYxLDB4YWMsMHg5NywweGNiLDB4NWUsMHgwNiwweDQ4LDB4ZDIsMHg5NCww eGJlLDB4MTUsMHgyZSwKLSsJMHhjNywweGZjLDB4YzIsMHgwMQotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDk4LDB4YzUsMHgxZSwweDM1LDB4NWUsMHg4OSww eDBkLDB4Y2UsMHg2NCwweDZkLDB4MTgsMHhhNywKLSsJMHg1YSwweGM2LDB4ZjMsMHhlNywweGQ2 LDB4OWUsMHhjMCwweGVhLDB4YjcsMHgzYSwweDhkLDB4NjUsCi0rCTB4YjgsMHhlYiwweDEwLDB4 ZDcsMHg1NywweDE4LDB4YTAsMHgzMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJ ewotKwkweDFiLDB4MTAsMHhhZiwweGFjLDB4ZDAsMHg2NSwweDk1LDB4YWQsMHgwNCwweGFkLDB4 MDMsMHgxYywKLSsJMHhlMCwweDQwLDB4ZDYsMHgzZSwweDFjLDB4NDYsMHg1MywweDM5LDB4N2Ms MHhlMiwweGJjLDB4ZGEsCi0rCTB4OGMsMHhhMiwweDMzLDB4YTcsMHg5YSwweDI2LDB4ZDMsMHgy NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjU2X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhiYSwweDYxLDB4MGUs MHg1NSwweGZlLDB4MTEsMHg4YSwweDllLDB4MGYsMHg4MCwweGRmLDB4MWQsCi0rCTB4MDMsMHgw YSwweGZlLDB4MTUsMHg5NCwweDI4LDB4NGIsMHhiYSwweGY0LDB4OWYsMHg1MSwweDI1LAotKwkw eDg4LDB4ZTUsMHg0ZSwweGZiLDB4YWYsMHhjZSwweDY5LDB4OTAKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9lbnRyb3B5 aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg2MiwweDdmLDB4MWUsMHg2YiwweGU4LDB4OGUsMHhl MSwweDM1LDB4N2QsMHg5YiwweDRmLDB4YzcsCi0rCTB4ZWMsMHhjOCwweGFjLDB4ZWYsMHg2Yiww eDEzLDB4OWUsMHgwNSwweDU2LDB4YzEsMHgwOCwweGY5LAotKwkweDJmLDB4MGYsMHgyNywweDlj LDB4ZDQsMHgxNSwweGVkLDB4MmQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9 Ci0rCXsKLSsJMHhjNywweDc2LDB4NmUsMHhhOSwweGQyLDB4YjIsMHg3NiwweDQwLDB4ODIsMHgy NSwweDJjLDB4YjMsCi0rCTB4NmYsMHhhYywweGU5LDB4NzQsMHhlZiwweDhmLDB4M2MsMHg4ZSww eGNkLDB4ZjEsMHhiZiwweGIzLAotKwkweDQ5LDB4NzcsMHgzNCwweDg4LDB4NTIsMHgzNiwweGU2 LDB4MmUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4OGQsMHhiOCww eDBjLDB4ZDEsMHhiZiwweDcwLDB4ZjYsMHgxOSwweGMzLDB4NDEsMHg4MCwweDlmLAotKwkweGUx LDB4YTUsMHhhNCwweDFmLDB4MmMsMHgyNiwweGIxLDB4ZTUsMHhkOCwweGViLDB4YmUsMHhmOCwK LSsJMHhkZiwweDg4LDB4NmEsMHg4OSwweGQ2LDB4MDUsMHhkOCwweDlkCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcmV0 dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NDMsMHgxMiwweDJhLDB4MmMsMHg0MCwweDUzLDB4MmUs MHg3YywweDY2LDB4MzQsMHhhYywweGMzLAotKwkweDQzLDB4ZTMsMHhlMCwweDZhLDB4ZmMsMHhm YSwweGVhLDB4ODcsMHgyMSwweDFmLDB4ZTIsMHgyNiwKLSsJMHhjNCwweGY5LDB4MDksMHg5YSww eDBkLDB4NmUsMHg3ZiwweGUwCi0rCX07Ci0rCi0rCi0rLyogSE1BQyBTSEEtMzg0IFBSICAqLwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0 X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDY5LDB4ODEsMHg5OCwweDg4LDB4NDQsMHhm NSwweGQ2LDB4MmUsMHgwMCwweDA4LDB4M2IsMHhjNSwKLSsJMHhmYiwweGQ3LDB4OGUsMHg2Ziww eDIzLDB4ZjgsMHg2ZCwweDA5LDB4ZDYsMHg4NSwweDQ5LDB4ZDEsCi0rCTB4ZjgsMHg2ZCwweGE0 LDB4NTgsMHg1NCwweGZkLDB4ODgsMHhhOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX25vbmNlW10gPQotKwl7Ci0r CTB4NmUsMHgzOCwweDgxLDB4Y2EsMHhiNywweGU4LDB4NmUsMHg2NiwweDQ5LDB4OGEsMHhiMiww eDU5LAotKwkweGVlLDB4MTYsMHhjOSwweGRlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPQotKwl7Ci0rCTB4ZmUsMHg0YywweGQ5LDB4ZjQsMHg3OCwweDNiLDB4MDgsMHg0 MSwweDhkLDB4OGYsMHg1NSwweGM0LAotKwkweDQzLDB4NTYsMHhiNiwweDEyLDB4MzYsMHg2Yiww eDMwLDB4YjcsMHg1ZSwweGUxLDB4YjksMHg0NywKLSsJMHgwNCwweGIxLDB4NGUsMHhhOSwweDAw LDB4YTEsMHg1MiwweGExCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0r CTB4ODksMHhlOSwweGNjLDB4OGYsMHgyNywweDNjLDB4MjYsMHhkMSwweDk1LDB4YzgsMHg3ZCww eDBmLAotKwkweDViLDB4MWEsMHhmMCwweDc4LDB4MzksMHg1NiwweDZmLDB4YTQsMHgyMywweGU3 LDB4ZDEsMHhkYSwKLSsJMHg3YywweDY2LDB4MzMsMHhhMCwweDkwLDB4YzksMHg5MiwweDg4Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEzODRfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHhiZSwweDNkLDB4N2MsMHgw ZCwweGNhLDB4ZGEsMHg3YywweDQ5LDB4YjgsMHgxMiwweDM2LDB4YzAsCi0rCTB4ZGIsMHhhZCww eDM1LDB4YTgsMHhjNywweDBiLDB4MmEsMHgyYywweDY5LDB4NmQsMHgyNSwweDU2LAotKwkweDYz LDB4ODIsMHgxMSwweDNlLDB4YTcsMHgzMywweDcwLDB4NzIKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9pbnRfcmV0 dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ODIsMHgzZCwweGU2LDB4NTQsMHg4MCwweDQyLDB4Zjgs MHhiYSwweDkwLDB4NGYsMHgwNiwweGE2LAotKwkweGQyLDB4N2YsMHhiZiwweDc5LDB4N2MsMHgx MiwweDdkLDB4YTYsMHhhMiwweDY2LDB4ZTgsMHhhNiwKLSsJMHhjMCwweGQ2LDB4NGEsMHg1NSww eGJmLDB4ZDgsMHgwYSwweGM1LDB4ZjgsMHgwMywweDg4LDB4ZGQsCi0rCTB4OGUsMHg4NywweGQx LDB4NWEsMHg0OCwweDI2LDB4NzIsMHgyYSwweDhlLDB4Y2YsMHhlZSwweGJhCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf cHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDhmLDB4ZmYsMHhkOSwweDg0LDB4YmIs MHg4NSwweDNhLDB4NjYsMHhhMSwweDIxLDB4Y2UsMHhiMiwKLSsJMHgzYSwweDNhLDB4MTcsMHgy MiwweDE5LDB4YWUsMHhjNywweGI2LDB4NjMsMHg4MSwweGQ1LDB4ZmYsCi0rCTB4MGQsMHhjOCww eGUxLDB4YWYsMHg1NywweGQyLDB4Y2IsMHg2MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dHBy MltdID0KLSsJewotKwkweGQ3LDB4ZmIsMHhjOSwweGU4LDB4ZTIsMHhmMiwweGFhLDB4NGMsMHhi OCwweDUxLDB4MmYsMHhlMSwKLSsJMHgyMiwweGJhLDB4ZjMsMHhkYSwweDBhLDB4MTksMHg3Niww eDcxLDB4NTcsMHhiMiwweDFkLDB4OTQsCi0rCTB4MDksMHg2OSwweDZjLDB4ZDMsMHg5NywweDUx LDB4ODEsMHg4NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGU2LDB4 MTksMHgyOCwweGE4LDB4MjEsMHhjZSwweDVlLDB4ZGIsMHgyNCwweDc5LDB4OGMsMHg3NiwKLSsJ MHg1ZCwweDczLDB4YjIsMHhkZiwweGFjLDB4ZWYsMHg4NSwweGE3LDB4M2IsMHgxOSwweDA5LDB4 OGIsCi0rCTB4N2YsMHg5OCwweDI4LDB4YTksMHg5MywweGQ4LDB4N2EsMHhhZCwweDU1LDB4OGIs MHgyNCwweDlkLAotKwkweGU2LDB4OTgsMHhmZSwweDQ3LDB4ZDUsMHg0OCwweGMxLDB4MjMsMHhk OCwweDFkLDB4NjIsMHg3NQotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTM4NCBObyBQUiAgKi8K LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4 NF9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhjMywweDU2LDB4MmIsMHgxZCwweGMyLDB4YmIs MHhhOCwweGYwLDB4YWUsMHgxYiwweDBkLDB4ZDMsCi0rCTB4NWEsMHg2YywweGRhLDB4NTcsMHg4 ZSwweGE1LDB4OGEsMHgwZCwweDZjLDB4NGIsMHgxOCwweGIxLAotKwkweDA0LDB4M2UsMHhiNCww eDk5LDB4MzUsMHhjNCwweGMwLDB4NWYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9ub25jZVtdID0KLSsJewotKwkweGM1 LDB4NDksMHgxZSwweDY2LDB4MjcsMHg5MiwweGJlLDB4ZWMsMHhiNSwweDFlLDB4NGIsMHhiMSwK LSsJMHgzOCwweGUzLDB4ZWIsMHg2MgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0KLSsJewotKwkweGJlLDB4ZTcsMHg2YiwweDU3LDB4ZGUsMHg4OCwweDExLDB4OTYsMHg5Yiww eDZlLDB4ZWEsMHhlNSwKLSsJMHg2MywweDgzLDB4NGMsMHhiNiwweDhkLDB4NjYsMHhhYSwweDFm LDB4OGIsMHg1NCwweGU3LDB4NjIsCi0rCTB4NmQsMHg1YSwweGZjLDB4YmYsMHg5NywweGJhLDB4 Y2QsMHg3NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGU1LDB4Mjgs MHg1ZiwweDQzLDB4ZjUsMHg4MywweDZlLDB4MGEsMHg4MywweDVjLDB4ZTMsMHg4MSwKLSsJMHgw MywweGYyLDB4ZjgsMHg3OCwweDAwLDB4N2MsMHg5NSwweDg3LDB4MTYsMHhkNiwweDZjLDB4NTgs Ci0rCTB4MzMsMHg2YywweDUzLDB4MzUsMHgwZCwweDY2LDB4ZTMsMHhjZQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2lu dF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlMiwweDFmLDB4ZjMsMHhkYSwweDBkLDB4MTks MHg5OSwweDg3LDB4YzQsMHg5MCwweGEyLDB4MzEsCi0rCTB4Y2EsMHgyYSwweDg5LDB4NTgsMHg0 MywweDQ0LDB4YjgsMHhkZSwweGNmLDB4YTQsMHhiZSwweDNiLAotKwkweDUzLDB4MjYsMHgyMiww eDMxLDB4NzYsMHg0MSwweDIyLDB4YjUsMHhhOCwweDcwLDB4MmYsMHg0YiwKLSsJMHg2NCwweDk1 LDB4NGQsMHg0OCwweDk2LDB4MzUsMHhlNiwweGJkLDB4M2MsMHgzNCwweGRiLDB4MWIKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTM4NF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg3NywweDYxLDB4YmEsMHhiYyww eGYyLDB4YzEsMHhmMywweDRiLDB4ODYsMHg2NSwweGZkLDB4NDgsCi0rCTB4MGUsMHgzYywweDAy LDB4NWUsMHhhMiwweDdhLDB4NmIsMHg3YywweGVkLDB4MjEsMHg1ZSwweGY5LAotKwkweGNkLDB4 Y2QsMHg3NywweDA3LDB4MmIsMHhiZSwweGM1LDB4NWMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5w dXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHgxOCwweDI0LDB4NWYsMHhjNiwweDg0LDB4ZDEsMHg2Nyww eGMzLDB4OWEsMHgxMSwweGE1LDB4OGMsCi0rCTB4MDcsMHgzOSwweDIxLDB4ODMsMHg0ZCwweDA0 LDB4YzQsMHg2YSwweDI4LDB4MTksMHhjZiwweDkyLAotKwkweDIxLDB4ZDksMHg5ZSwweDQxLDB4 NzIsMHg2YywweDllLDB4NjMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0r CTB4OTYsMHg2NywweDQxLDB4MjgsMHg5YiwweGI3LDB4OTIsMHg4ZCwweDY0LDB4M2IsMHhlNCww eGNmLAotKwkweDdlLDB4YWEsMHgxZSwweGIxLDB4NGIsMHgxZCwweDA5LDB4NTYsMHg2NywweDlj LDB4YzYsMHg2ZCwKLSsJMHgzYiwweGU4LDB4OTEsMHg5ZCwweGUxLDB4OGEsMHhiNywweDMyCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEzODRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZTMsMHg1OSwweDYxLDB4MzgsMHg5 MiwweGVjLDB4ZTIsMHgzYywweGZmLDB4YjcsMHhkYiwweDE5LAotKwkweDBmLDB4NWIsMHg5Myww eDY4LDB4MGQsMHhhNCwweDk0LDB4NDAsMHg3MiwweDBiLDB4ZTAsMHhlZCwKLSsJMHg0ZCwweGNk LDB4NjgsMHhhMCwweDFlLDB4ZmUsMHg2NywweGIyLDB4ZmEsMHgyMSwweDU2LDB4NzQsCi0rCTB4 YTQsMHhhZCwweGNmLDB4YjcsMHg2MCwweDY2LDB4MmUsMHg0MCwweGRlLDB4ODIsMHhjYSwweGZi Ci0rCX07Ci0rCi0rCi0rLyogSE1BQyBTSEEtNTEyIFBSICAqLwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dFtd ID0KLSsJewotKwkweGFhLDB4OWUsMHg0NSwweDY3LDB4MGUsMHgwMCwweDJhLDB4NjcsMHg5OCww eGQ2LDB4ZGEsMHgwYiwKLSsJMHgwZiwweDE3LDB4N2UsMHhhYywweGZkLDB4MjcsMHhjNCwweGNh LDB4ODQsMHhkZiwweGRlLDB4YmEsCi0rCTB4ODUsMHhkOSwweGJlLDB4OGYsMHhmMywweGZmLDB4 OTEsMHg0ZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhNTEyX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4OGMsMHg0OSwweDJmLDB4 NTgsMHgxZSwweDdhLDB4ZGEsMHg0YiwweDdlLDB4OGEsMHgzMCwweDdiLAotKwkweDg2LDB4ZWEs MHhhZiwweGEyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0r CTB4NzEsMHhlMSwweGJiLDB4YWQsMHhhNywweDRiLDB4MmUsMHgzMSwweDNiLDB4MGIsMHhlYyww eDI0LAotKwkweDk5LDB4MzgsMHhiYywweGFhLDB4MDUsMHg0YywweDQ2LDB4NDQsMHhmYSwweGFk LDB4OGUsMHgwMiwKLSsJMHhjMSwweDdlLDB4YWQsMHhlYywweDU0LDB4YTYsMHhkMCwweGFkCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4M2QsMHg2ZSwweGE2LDB4 YTgsMHgyOSwweDJhLDB4YjIsMHhmNSwweDk4LDB4NDIsMHhlNCwweDkyLAotKwkweDc4LDB4MjIs MHg2NywweGZkLDB4MWIsMHgxNSwweDFlLDB4MjksMHhhYSwweDcxLDB4M2MsMHgzYywKLSsJMHhl NywweDA1LDB4MjAsMHhhOSwweDI5LDB4YzYsMHg3NSwweDcxCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9w eWlucHV0cHJbXSA9Ci0rCXsKLSsJMHhhYiwweGI5LDB4MTYsMHhkOCwweDU1LDB4MzUsMHg1NCww eGI3LDB4OTcsMHgzZiwweDk0LDB4YmMsCi0rCTB4MmYsMHg3YywweDcwLDB4YzcsMHhkMCwweGVk LDB4YjcsMHg0YiwweGY3LDB4ZjYsMHg2YywweDAzLAotKwkweDBjLDB4YjAsMHgwMywweGQ4LDB4 YmIsMHg3MSwweGQ5LDB4MTAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7 Ci0rCTB4OGUsMHhkMywweGZkLDB4NTIsMHg5ZSwweDgzLDB4MDgsMHg0OSwweDE4LDB4NmUsMHgy MywweDU2LAotKwkweDVjLDB4NDUsMHg5MywweDM0LDB4MDUsMHhlMiwweDk4LDB4OGYsMHgwYyww eGQ0LDB4MzIsMHgwYywKLSsJMHhmZCwweGRhLDB4NWYsMHg5MiwweDNhLDB4OGMsMHg4MSwweGJk LDB4ZjYsMHg2YywweDU1LDB4ZmQsCi0rCTB4YjgsMHgyMCwweGNlLDB4OGQsMHg5NywweDI3LDB4 ZTgsMHhlOCwweGUwLDB4YjMsMHg4NSwweDUwLAotKwkweGEyLDB4YzIsMHhiMiwweDk1LDB4MWQs MHg0OCwweGQzLDB4N2IsMHg0YiwweDc4LDB4MTMsMHgzNSwKLSsJMHgwNSwweDE3LDB4YmUsMHgw ZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhjMywweGZjLDB4 OTUsMHhhYSwweDY5LDB4MDYsMHhhZSwweDU5LDB4NDEsMHhjZSwweDI2LDB4MDgsCi0rCTB4Mjks MHg2ZCwweDQ1LDB4ZGEsMHhlOCwweGIzLDB4NmMsMHg5NSwweDYwLDB4MGYsMHg3MCwweDJjLAot KwkweDEwLDB4YmEsMHgzOCwweDhjLDB4Y2YsMHgyOSwweDk5LDB4YWEKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9l bnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHgzYiwweDlhLDB4MjUsMHhjZSwweGQ3LDB4Zjks MHg1YywweGQxLDB4M2EsMHgzZSwweGFhLDB4NzEsCi0rCTB4MTQsMHgzZSwweDE5LDB4ZTgsMHhj ZSwweGU2LDB4ZmUsMHg1MSwweDg0LDB4ZTksMHgxYiwweGZlLAotKwkweDNmLDB4YTcsMHhmMiww eGZkLDB4NzYsMHg1ZiwweDZhLDB4ZTcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0r CXsKLSsJMHhiNywweDgyLDB4YTksMHg1NywweDgxLDB4NjcsMHg1MywweGI1LDB4YTEsMHhlOSww eDNkLDB4MzUsCi0rCTB4ZjksMHhlNCwweDk3LDB4YmUsMHhhNiwweGNhLDB4ZjEsMHgwMSwweDEz LDB4MDksMHhlNywweDIxLAotKwkweGMwLDB4ZWQsMHg5MywweDVkLDB4NGIsMHhmNCwweGViLDB4 OGQsMHg1MywweDI1LDB4OGEsMHhjNCwKLSsJMHhiMSwweDZmLDB4NmUsMHgzNywweGNkLDB4MmUs MHhhYywweDM5LDB4YjIsMHhiNiwweDk5LDB4YTMsCi0rCTB4ODIsMHgwMCwweGIwLDB4MjEsMHhm MCwweGM3LDB4MmYsMHg0YywweDczLDB4OTIsMHhmZCwweDAwLAotKwkweGI2LDB4YWYsMHhiYyww eGQzCi0rCX07Ci0rCi0rCi0rLyogSE1BQyBTSEEtNTEyIE5vIFBSICAqLwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2VudHJvcHlpbnB1 dFtdID0KLSsJewotKwkweDZlLDB4ODUsMHhlNiwweDI1LDB4OTYsMHgyOSwweGE3LDB4NTIsMHg1 YiwweDYwLDB4YmEsMHhhYSwKLSsJMHhkZSwweGRiLDB4MzYsMHgwYSwweDUxLDB4OWEsMHgxNSww eGFlLDB4NmUsMHgxOCwweGQzLDB4ZmUsCi0rCTB4MzksMHhiOSwweDRhLDB4OTYsMHhmOCwweDc3 LDB4Y2IsMHg5NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhNTEyX25vbmNlW10gPQotKwl7Ci0rCTB4ZTAsMHhhNiwweDVkLDB4 MDgsMHhjMywweDdjLDB4YWUsMHgyNSwweDJlLDB4ODAsMHhkMSwweDNlLAotKwkweGQ5LDB4YWYs MHg0MywweDNjCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGE1MTJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4 NTMsMHg5OSwweDUyLDB4NWYsMHgxMSwweGE5LDB4NjQsMHg2NiwweDIwLDB4NWUsMHgxYiwweDVm LAotKwkweDQyLDB4YjMsMHhmNCwweGRhLDB4ZWQsMHhiYiwweDYzLDB4YzEsMHgyMywweGFmLDB4 ZDAsMHgwMSwKLSsJMHg5MCwweDNiLDB4ZDAsMHg3OCwweGU0LDB4MGIsMHhhNywweDIwCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGE1MTJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4ODUsMHg5MCwweDgwLDB4ZDMsMHg5 OCwweGYxLDB4NTMsMHg2ZCwweDY4LDB4MTUsMHg4ZiwweGU1LAotKwkweDYwLDB4M2YsMHgxNyww eDI5LDB4NTUsMHg4ZCwweDMzLDB4YjEsMHg0NSwweDY0LDB4NjQsMHg4ZCwKLSsJMHg1MCwweDIx LDB4ODksMHhhZSwweGY2LDB4ZmQsMHgzMiwweDczCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfaW50X3JldHVybmVkYml0 c1tdID0KLSsJewotKwkweDI4LDB4NTYsMHgzMCwweDZmLDB4ZjQsMHhhMSwweDQ4LDB4ZTAsMHhj OSwweGY1LDB4NzUsMHg5MCwKLSsJMHhjYywweGZiLDB4ZGYsMHhkZiwweDcxLDB4M2QsMHgwYSww eDlhLDB4MDMsMHg2NSwweDNiLDB4MTgsCi0rCTB4NjEsMHhlMywweGQxLDB4ZGEsMHhjYywweDRh LDB4ZmUsMHg1NSwweDM4LDB4ZjgsMHgyMSwweDZiLAotKwkweGZhLDB4MTgsMHgwMSwweDQyLDB4 MzksMHgyZiwweDk5LDB4NTMsMHgzOCwweDE1LDB4ODIsMHgzNCwKLSsJMHhjNSwweDkzLDB4OTIs MHhiYywweDRkLDB4NzUsMHgxYSwweDVmLDB4MjEsMHgyNywweGNjLDB4YTEsCi0rCTB4YjEsMHg1 NywweDY5LDB4ZTgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTUxMl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg4 YywweDUyLDB4N2UsMHg3NywweDcyLDB4M2YsMHhhMywweDA0LDB4OTcsMHgxMCwweDliLDB4NDEs Ci0rCTB4YmQsMHhlOCwweGZmLDB4ODksMHhlZCwweDgwLDB4ZTMsMHhiZCwweGFhLDB4MTIsMHgy ZCwweGNhLAotKwkweDc1LDB4ODIsMHgzNiwweDc3LDB4ODgsMHhjZCwweGE2LDB4NzMKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg3ZSwweDMyLDB4ZTMsMHg2 OSwweDY5LDB4MDcsMHgzNCwweGEyLDB4MTYsMHhhMiwweDVkLDB4MWEsCi0rCTB4MTAsMHg5MSww eGQzLDB4ZTIsMHgyMSwweGEyLDB4YTMsMHhkZCwweGNkLDB4MGMsMHgwOSwweDg2LAotKwkweDEx LDB4ZTEsMHg1MCwweGZmLDB4NWMsMHhiNywweGViLDB4NWMKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFs aW5wdXQyW10gPQotKwl7Ci0rCTB4N2YsMHg3OCwweDY2LDB4ZDgsMHhmYiwweDY3LDB4Y2YsMHg4 ZCwweDhjLDB4MDgsMHgzMCwweGE1LAotKwkweGY4LDB4N2QsMHhjZiwweDQ0LDB4NTksMHhjZSww eGY4LDB4ZGYsMHg1OCwweGQzLDB4NjAsMHhjYiwKLSsJMHhhOCwweDYwLDB4YjksMHgwNywweGM0 LDB4YjEsMHg5NSwweDQ4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZGYs MHhhNywweDM2LDB4ZDQsMHhkYywweDVkLDB4NGQsMHgzMSwweGFkLDB4NjksMHg0NiwweDlmLAot KwkweGYxLDB4N2MsMHhkNywweDNiLDB4NGYsMHg1NSwweGYyLDB4ZDcsMHhiOSwweDlkLDB4YWQs MHg3YSwKLSsJMHg3OSwweDA4LDB4NTksMHhhNSwweGRjLDB4NzQsMHhmNSwweDliLDB4NzMsMHhk MiwweDEzLDB4MjUsCi0rCTB4MGIsMHg4MSwweDA4LDB4MDgsMHgyNSwweGZiLDB4MzksMHhmMiww eGYwLDB4YTMsMHhhNCwweDhkLAotKwkweGVmLDB4MDUsMHg5ZSwweGI4LDB4YzcsMHg1MiwweGU0 LDB4MGUsMHg0MiwweGFhLDB4N2MsMHg3OSwKLSsJMHhjMiwweGQ2LDB4ZmQsMHhhNQotKwl9Owot KwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMKLS0t LSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMJMjAx Mi0wNC0yMCAwOTowNzowNi4yNjc3ODU3NjIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjY3Nzg1NzYy ICswMjAwCi1AQCAtMCwwICsxLDE5MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0 IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAq Ci0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu Ci0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0r ICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcFtd ID0gewotKwkweGE4LDB4NTMsMHg3OCwweGQ4LDB4ZmQsMHgzZiwweDhkLDB4NzIsMHhlYywweDc0 LDB4MTgsMHgwOCwKLSsJMHgwZCwweGEyLDB4MTMsMHgxNywweGU0LDB4M2UsMHhjNCwweGI2LDB4 MmIsMHhhOCwweGM4LDB4NjIsCi0rCTB4M2IsMHg3ZSwweDRkLDB4MDQsMHg0NCwweDFkLDB4ZDEs MHhhMCwweDY1LDB4ODYsMHg2MiwweDU5LAotKwkweDY0LDB4OTMsMHhjYSwweDhlLDB4OWUsMHg4 ZiwweGJiLDB4N2UsMHgzNCwweGFhLDB4ZGQsMHhiNiwKLSsJMHgyZSwweDVkLDB4NjcsMHhiNiww eGQwLDB4OWEsMHg2ZSwweDYxLDB4YjcsMHg2OSwweGU3LDB4YzMsCi0rCTB4NTIsMHhhYSwweDJi LDB4MTAsMHhlMiwweDBjLDB4YTAsMHg2MywweDY5LDB4NjMsMHhiNSwweDUyLAotKwkweDNlLDB4 ODYsMHg0NywweDBkLDB4ZWMsMHhiYiwweGVkLDB4YTAsMHgyNywweGU3LDB4OTcsMHhlNywKLSsJ MHhiNiwweDc2LDB4MzUsMHhkNCwweGQ0LDB4OWMsMHgzMCwweDcwLDB4MGUsMHg3NCwweGFmLDB4 OGEsCi0rCTB4MGYsMHhmMSwweDU2LDB4YTgsMHgwMSwweGFmLDB4NTcsMHhhMiwweDZlLDB4NzAs MHg3OCwweGYxLAotKwkweGQ4LDB4MmYsMHg3NCwweDkwLDB4OGUsMHhjYiwweDZkLDB4MDcsMHhl NywweDBiLDB4MzUsMHgwMywKLSsJMHhlZSwweGQ5LDB4NGYsMHhhMywweDJjLDB4ZjEsMHg3YSww eDdmLDB4YzMsMHhkNiwweGNmLDB4NDAsCi0rCTB4ZGMsMHg3YiwweDAwLDB4ODMsMHgwZSwweDZh LDB4MjUsMHg2NiwweGRjLDB4MDcsMHgzZSwweDM0LAotKwkweDMzLDB4MTIsMHg1MSwweDdjLDB4 NmEsMHhhNSwweDE1LDB4MmIsMHg0YiwweGZlLDB4Y2QsMHgyZSwKLSsJMHg1NSwweDFmLDB4ZWUs MHgzNCwweDYzLDB4MTgsMHhhMSwweDUzLDB4NDIsMHgzYywweDk5LDB4NmIsCi0rCTB4MGQsMHg1 ZCwweGNiLDB4OTEsMHgwMiwweGFlLDB4ZGQsMHgzOCwweDc5LDB4ODYsMHgxNiwweGYxLAotKwkw eGYxLDB4ZTAsMHhkNiwweGM0LDB4MDMsMHg1MiwweDViLDB4MWYsMHg5YiwweDNkLDB4NGQsMHhj NywKLSsJMHg2NiwweGRlLDB4MmQsMHhmYywweDRhLDB4NTYsMHhkNywweGI4LDB4YmEsMHg1OSww eDYzLDB4ZDYsCi0rCTB4MGYsMHgzZSwweDE2LDB4MzEsMHg4OCwweDcwLDB4YWQsMHg0MywweDY5 LDB4NTIsMHhlNSwweDU3LAotKwkweDY1LDB4MzcsMHg0ZSwweGFiLDB4ODUsMHhlOCwweGVjLDB4 MTcsMHhkNiwweGI5LDB4YTQsMHg1NCwKLSsJMHg3YiwweDliLDB4NWYsMHgyNywweDUyLDB4ZjMs MHgxMCwweDViLDB4ZTgsMHgwOSwweGIyLDB4M2EsCi0rCTB4MmMsMHg4ZCwweDc0LDB4NjksMHhk YiwweDAyLDB4ZTIsMHg0ZCwweDU5LDB4MjMsMHg5NCwweGE3LAotKwkweGRiLDB4YTAsMHg2OSww eGU5Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3Fb XSA9IHsKLSsJMHhkMiwweDc3LDB4MDQsMHg0ZSwweDUwLDB4ZjUsMHhhNCwweGUzLDB4ZjUsMHgx MCwweGE1LDB4MGEsCi0rCTB4MGIsMHg4NCwweGZkLDB4ZmYsMHhiYywweGEwLDB4NDcsMHhlZCww eDI3LDB4NjAsMHgyMCwweDU2LAotKwkweDc0LDB4NDEsMHhhMCwweGE1Ci0rfTsKLSsKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X2dbXSA9IHsKLSsJMHgxMywweGQ3 LDB4NTQsMHhlMiwweDFmLDB4ZDIsMHg0MSwweDY1LDB4NWQsMHhhOCwweDkxLDB4YzUsCi0rCTB4 MjIsMHhhNiwweDVhLDB4NzIsMHhhOCwweDliLDB4ZGMsMHg2NCwweGVjLDB4OWIsMHg1NCwweGE4 LAotKwkweDIxLDB4ZWQsMHg0YSwweDg5LDB4OGIsMHg0OSwweDBlLDB4MGMsMHg0ZiwweGNiLDB4 NzIsMHgxOSwKLSsJMHgyYSwweDRhLDB4MjAsMHhmNSwweDQxLDB4ZjMsMHhmMiwweDkyLDB4NTMs MHg5OSwweGYwLDB4YmEsCi0rCTB4ZWMsMHhmOSwweDI5LDB4YWEsMHhmYiwweGY3LDB4OWQsMHhm ZSwweDQzLDB4MzIsMHgzOSwweDNiLAotKwkweDMyLDB4Y2QsMHgyZSwweDJmLDB4Y2YsMHgyNyww eDJmLDB4MzIsMHhhNiwweDI3LDB4NDMsMHg0YSwKLSsJMHgwZCwweGYyLDB4NDIsMHhiNywweDVi LDB4NDEsMHg0ZCwweGYzLDB4NzIsMHgxMiwweDFlLDB4NTMsCi0rCTB4YTUsMHg1MywweGYyLDB4 MjIsMHhmOCwweDM2LDB4YjAsMHgwMCwweGYwLDB4MTYsMHg0OCwweDViLAotKwkweDZiLDB4ZDAs MHg4OSwweDg0LDB4NTEsMHg4MCwweDFkLDB4Y2QsMHg4ZCwweGU2LDB4NGMsMHhkNSwKLSsJMHgz NiwweDU2LDB4OTYsMHhmZiwweGM1LDB4MzIsMHhkNSwweDI4LDB4YzUsMHgwNiwweDYyLDB4MGEs Ci0rCTB4OTQsMHgyYSwweDAzLDB4MDUsMHgwNCwweDZkLDB4OGYsMHgxOCwweDc2LDB4MzQsMHgx ZiwweDFlLAotKwkweDU3LDB4MGIsMHhjMywweDk3LDB4NGIsMHhhNiwweGI5LDB4YTQsMHgzOCww eGU5LDB4NzAsMHgyMywKLSsJMHgwMiwweGEyLDB4ZTYsMHhlNiwweDdiLDB4ZmQsMHgwNiwweGQz LDB4MmIsMHhjNiwweDc5LDB4OTYsCi0rCTB4MjIsMHg3MSwweGQ3LDB4YjQsMHgwYywweGQ3LDB4 MmYsMHgzOCwweDZlLDB4NjQsMHhlMCwweGQ3LAotKwkweGVmLDB4ODYsMHhjYSwweDhjLDB4YTUs MHhkMSwweDQyLDB4MjgsMHhkYywweDJhLDB4NGYsMHgxNiwKLSsJMHhlMywweDE4LDB4OTgsMHg4 NiwweGI1LDB4OTksMHgwNiwweDc0LDB4ZjQsMHgyMCwweDBmLDB4M2EsCi0rCTB4NGMsMHhmNiww eDVhLDB4M2YsMHgwZCwweGRiLDB4YTEsMHhmYSwweDY3LDB4MmQsMHhmZiwweDJmLAotKwkweDVl LDB4MTQsMHgzZCwweDEwLDB4ZTQsMHhlOSwweDdhLDB4ZTgsMHg0ZiwweDZkLDB4YTAsMHg5NSwK LSsJMHgzNSwweGQ1LDB4YjksMHhkZiwweDI1LDB4OTEsMHg4MSwweGE3LDB4OWIsMHg2MywweGIw LDB4NjksCi0rCTB4ZTksMHg0OSwweDk3LDB4MmIsMHgwMiwweGJhLDB4MzYsMHhiMywweDU4LDB4 NmEsMHhhYiwweDdlLAotKwkweDQ1LDB4ZjMsMHgyMiwweGY4LDB4MmUsMHg0ZSwweDg1LDB4Y2Es MHgzYSwweGI4LDB4NTUsMHg5MSwKLSsJMHhiMywweGMyLDB4YTksMHg2NgotK307Ci0rCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wdWJfa2V5W10gPSB7Ci0rCTB4 MjQsMHg1MiwweGYzLDB4Y2MsMHhiZSwweDllLDB4ZDUsMHhjYSwweDdkLDB4YzcsMHg0YywweDYw LAotKwkweDJiLDB4OTksMHgyMiwweDZlLDB4OGYsMHgyZiwweGFiLDB4MzgsMHhlNywweGQ3LDB4 ZGQsMHhmYiwKLSsJMHg3NSwweDUzLDB4OWIsMHgxNywweDE1LDB4NWUsMHg5ZiwweGNmLDB4ZDEs MHhhYiwweGE1LDB4NjQsCi0rCTB4ZWIsMHg4NSwweDM1LDB4ZDgsMHgxMiwweGM5LDB4YzIsMHhk YywweGY5LDB4NzIsMHg4NCwweDQ0LAotKwkweDFiLDB4YzQsMHg4MiwweDI0LDB4MzYsMHgyNCww eGM3LDB4ZjQsMHg1NywweDU4LDB4MGMsMHgxYywKLSsJMHgzOCwweGE1LDB4N2MsMHg0NiwweGM0 LDB4NTcsMHgzOSwweDI0LDB4NzAsMHhlZCwweGI1LDB4MmMsCi0rCTB4YjUsMHhhNiwweGUwLDB4 M2YsMHhlNiwweDI4LDB4N2IsMHhiNiwweGY0LDB4OWEsMHg0MiwweGEyLAotKwkweDA2LDB4NWEs MHgwNSwweDRmLDB4MDMsMHgwOCwweDM5LDB4ZGYsMHgxZiwweGQzLDB4MTQsMHg5YywKLSsJMHg0 YywweGEwLDB4NTMsMHgxZCwweGQ4LDB4Y2EsMHg4YSwweGFhLDB4OWMsMHhjNywweDMzLDB4NzEs Ci0rCTB4OTMsMHgzOCwweDczLDB4NDgsMHgzMywweDYxLDB4MTgsMHgyMiwweDQ1LDB4NDUsMHhl OCwweDhjLAotKwkweDgwLDB4ZmYsMHhkOCwweDc2LDB4NWQsMHg3NCwweDM2LDB4MDMsMHgzMyww eGNjLDB4YWIsMHg5OSwKLSsJMHg3MiwweDc3LDB4OWIsMHg2NSwweDI1LDB4YTYsMHg1YiwweGRk LDB4MGQsMHgxMCwweGM2LDB4NzUsCi0rCTB4YzEsMHgwOSwweGJiLDB4ZDMsMHhlNSwweGJlLDB4 NGQsMHg3MiwweGVmLDB4NmUsMHhiYSwweDZlLAotKwkweDQzLDB4OGQsMHg1MiwweDI2LDB4MjMs MHg3ZCwweGI4LDB4ODgsMHgzNywweDljLDB4NWYsMHhjYywKLSsJMHg0NywweGEzLDB4ODQsMHg3 ZiwweGY2LDB4MzcsMHgxMSwweGJhLDB4ZWQsMHg2ZCwweDAzLDB4YWYsCi0rCTB4ZTgsMHgxZSww eDY5LDB4NGEsMHg0MSwweDNiLDB4NjgsMHgwYiwweGQzLDB4OGEsMHhiNCwweDkwLAotKwkweDNm LDB4ODMsMHg3MCwweGE3LDB4MDcsMHhlZiwweDU1LDB4MWQsMHg0OSwweDQxLDB4MDIsMHg2ZCwK LSsJMHg5NSwweDc5LDB4ZDYsMHg5MSwweGRlLDB4OGUsMHhkYSwweGExLDB4NjEsMHgwNSwweGVi LDB4OWQsCi0rCTB4YmEsMHgzYywweDJmLDB4NGMsMHgxYiwweGVjLDB4NTAsMHg4MiwweDc1LDB4 YWEsMHgwMiwweDA3LAotKwkweGUyLDB4NTEsMHhiNSwweGVjLDB4Y2IsMHgyOCwweDZhLDB4NGIs MHgwMSwweGQ0LDB4NDksMHhkMywKLSsJMHgwYSwweGNiLDB4NjcsMHgzNywweDE3LDB4YTAsMHhk MiwweGZiLDB4M2IsMHg1MCwweGM4LDB4OTMsCi0rCTB4ZjcsMHhkYSwweGIxLDB4NGYKLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcHJpdl9rZXlbXSA9 IHsKLSsJMHgwYywweDRiLDB4MzAsMHg4OSwweGQxLDB4YjgsMHg2MiwweGNiLDB4M2MsMHg0Myww eDY0LDB4OTEsCi0rCTB4ZjAsMHg5MSwweDU0LDB4NzAsMHhjNSwweDI3LDB4OTYsMHhlMywweGFj LDB4YmUsMHhlOCwweDAwLAotKwkweGVjLDB4NTUsMHhmNiwweGNjCi0rfTsKLSsKLStzdGF0aWMg aW50IGNvcnJ1cHRfZHNhOwotKwotK3ZvaWQgRklQU19jb3JydXB0X2RzYSgpCi0rICAgIHsKLSsg ICAgY29ycnVwdF9kc2EgPSAxOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZHNhKCkK LSsJewotKwlEU0EgKmRzYSA9IE5VTEw7Ci0rCUVWUF9QS0VZICpwayA9IE5VTEw7Ci0rCWludCBy ZXQgPSAwOwotKwotKwlkc2EgPSBEU0FfbmV3KCk7Ci0rCi0rCWlmKGRzYSA9PSBOVUxMKQotKwkJ Z290byBlcnI7Ci0rCi0rCWZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcCwgZHNhX3Rlc3Rf MjA0OCk7Ci0rCWZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcSwgZHNhX3Rlc3RfMjA0OCk7 Ci0rCWZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgZywgZHNhX3Rlc3RfMjA0OCk7Ci0rCWZp cHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcHViX2tleSwgZHNhX3Rlc3RfMjA0OCk7Ci0rCWZp cHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcHJpdl9rZXksIGRzYV90ZXN0XzIwNDgpOwotKwot KwlpZiAoY29ycnVwdF9kc2EpCi0rCQlCTl9zZXRfYml0KGRzYS0+cHViX2tleSwgMjA0Nyk7Ci0r Ci0rCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJ RVZQX1BLRVlfYXNzaWduX0RTQShwaywgZHNhKTsKLSsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0 dXJlX3Rlc3QocGssIE5VTEwsIDAsCi0rCQkJCQlOVUxMLCAwLCBFVlBfc2hhMjU2KCksIDAsCi0r CQkJCQkiRFNBIFNIQTI1NiIpKQotKwkJZ290byBlcnI7Ci0rCXJldCA9IDE7Ci0rCi0rCWVycjoK LSsJaWYgKHBrKQotKwkJRVZQX1BLRVlfZnJlZShwayk7Ci0rCWVsc2UgaWYgKGRzYSkKLSsJCURT QV9mcmVlKGRzYSk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vZmlwcy9maXBzX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19l bmMuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjY3Nzg1NzYyICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2Nzc4 NTc2MiArMDIwMAotQEAgLTAsMCArMSwxOTEgQEAKLSsvKiBmaXBlL2V2cC9maXBzX2VuYy5jICov Ci0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5j b20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBh biBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlw dHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8g Y29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZy ZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICog dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRp b24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3Qg anVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3 aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRl cm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRz b2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQg YXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRv IGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBF cmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Ig b2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhl IGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4g ZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2th Z2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsg KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlv dW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMn IGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAg YmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYg eW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRo ZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2Rl KSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29m dC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VO RyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK LSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O VFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H IElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0r ICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkg YXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3Qg YmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQg YW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGlu ZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4K LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK2NvbnN0 IEVWUF9DSVBIRVIgKkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpCi0rCXsKLSsJc3dpdGNo IChuaWQpCi0rCQl7Ci0rCQljYXNlIE5JRF9hZXNfMTI4X2NiYzoKLSsJCXJldHVybiBFVlBfYWVz XzEyOF9jYmMoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY2NtOgotKwkJcmV0dXJuIEVWUF9h ZXNfMTI4X2NjbSgpOwotKwotKwkJY2FzZSBOSURfYWVzXzEyOF9jZmIxOgotKwkJcmV0dXJuIEVW UF9hZXNfMTI4X2NmYjEoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY2ZiMTI4OgotKwkJcmV0 dXJuIEVWUF9hZXNfMTI4X2NmYjEyOCgpOwotKwotKwkJY2FzZSBOSURfYWVzXzEyOF9jZmI4Ogot KwkJcmV0dXJuIEVWUF9hZXNfMTI4X2NmYjgoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY3Ry OgotKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2N0cigpOwotKwotKwkJY2FzZSBOSURfYWVzXzEyOF9l Y2I6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfZWNiKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4 X2djbToKLSsJCXJldHVybiBFVlBfYWVzXzEyOF9nY20oKTsKLSsKLSsJCWNhc2UgTklEX2Flc18x Mjhfb2ZiMTI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMTI4X29mYigpOwotKwotKwkJY2FzZSBOSURf YWVzXzEyOF94dHM6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfeHRzKCk7Ci0rCi0rCQljYXNlIE5J RF9hZXNfMTkyX2NiYzoKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9jYmMoKTsKLSsKLSsJCWNhc2Ug TklEX2Flc18xOTJfY2NtOgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NjbSgpOwotKwotKwkJY2Fz ZSBOSURfYWVzXzE5Ml9jZmIxOgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjEoKTsKLSsKLSsJ CWNhc2UgTklEX2Flc18xOTJfY2ZiMTI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjEyOCgp OwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9jZmI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2Nm YjgoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfY3RyOgotKwkJcmV0dXJuIEVWUF9hZXNfMTky X2N0cigpOwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9lY2I6Ci0rCQlyZXR1cm4gRVZQX2Flc18x OTJfZWNiKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2djbToKLSsJCXJldHVybiBFVlBfYWVz XzE5Ml9nY20oKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfb2ZiMTI4OgotKwkJcmV0dXJuIEVW UF9hZXNfMTkyX29mYigpOwotKwotKwkJY2FzZSBOSURfYWVzXzI1Nl9jYmM6Ci0rCQlyZXR1cm4g RVZQX2Flc18yNTZfY2JjKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2NjbToKLSsJCXJldHVy biBFVlBfYWVzXzI1Nl9jY20oKTsKLSsKLSsJCWNhc2UgTklEX2Flc18yNTZfY2ZiMToKLSsJCXJl dHVybiBFVlBfYWVzXzI1Nl9jZmIxKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2NmYjEyODoK LSsJCXJldHVybiBFVlBfYWVzXzI1Nl9jZmIxMjgoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18yNTZf Y2ZiODoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9jZmI4KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNf MjU2X2N0cjoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9jdHIoKTsKLSsKLSsJCWNhc2UgTklEX2Fl c18yNTZfZWNiOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2VjYigpOwotKwotKwkJY2FzZSBOSURf YWVzXzI1Nl9nY206Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfZ2NtKCk7Ci0rCi0rCQljYXNlIE5J RF9hZXNfMjU2X29mYjEyODoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9vZmIoKTsKLSsKLSsJCWNh c2UgTklEX2Flc18yNTZfeHRzOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X3h0cygpOwotKwotKwkJ Y2FzZSBOSURfZGVzX2VkZV9lY2I6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGUoKTsKLSsKLSsJCWNh c2UgTklEX2Rlc19lZGUzX2VjYjoKLSsJCXJldHVybiBFVlBfZGVzX2VkZTMoKTsKLSsKLSsJCWNh c2UgTklEX2Rlc19lZGUzX2NiYzoKLSsJCXJldHVybiBFVlBfZGVzX2VkZTNfY2JjKCk7Ci0rCi0r CQljYXNlIE5JRF9kZXNfZWRlM19jZmIxOgotKwkJcmV0dXJuIEVWUF9kZXNfZWRlM19jZmIxKCk7 Ci0rCi0rCQljYXNlIE5JRF9kZXNfZWRlM19jZmI2NDoKLSsJCXJldHVybiBFVlBfZGVzX2VkZTNf Y2ZiNjQoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGUzX2NmYjg6Ci0rCQlyZXR1cm4gRVZQX2Rl c19lZGUzX2NmYjgoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGUzX29mYjY0OgotKwkJcmV0dXJu IEVWUF9kZXNfZWRlM19vZmIoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGVfY2JjOgotKwkJcmV0 dXJuIEVWUF9kZXNfZWRlX2NiYygpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZV9jZmI2NDoKLSsJ CXJldHVybiBFVlBfZGVzX2VkZV9jZmI2NCgpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZV9vZmI2 NDoKLSsJCXJldHVybiBFVlBfZGVzX2VkZV9vZmIoKTsKLSsKLSsJCWRlZmF1bHQ6Ci0rCQlyZXR1 cm4gTlVMTDsKLSsKLSsJCX0KLSsJfQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2ZpcHMvZmlwcy5oLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwcy5oCi0tLS0g b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwcy5oLmZpcHMJMjAxMi0wNC0yMCAwOTowNzow Ni4yNjg3ODU3ODQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzLmgJ MjAxMi0wNC0yMCAwOTowNzowNi4yNjg3ODU3ODQgKzAyMDAKLUBAIC0wLDAgKzEsMjc5IEBACi0r LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0r ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0 aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgot KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAg IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNv bmYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8c3RkYXJnLmg+ Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjZXJyb3IgRklQUyBpcyBkaXNhYmxlZC4KLSsj ZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwot K2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotK3N0cnVjdCBkc2Ffc3Q7Ci0rc3RydWN0IHJzYV9z dDsKLStzdHJ1Y3QgZXZwX3BrZXlfc3Q7Ci0rc3RydWN0IGVudl9tZF9zdDsKLStzdHJ1Y3QgZW52 X21kX2N0eF9zdDsKLStzdHJ1Y3QgZXZwX2NpcGhlcl9zdDsKLStzdHJ1Y3QgZXZwX2NpcGhlcl9j dHhfc3Q7Ci0rc3RydWN0IGRoX21ldGhvZDsKLStzdHJ1Y3QgQ01BQ19DVFhfc3Q7Ci0rc3RydWN0 IGhtYWNfY3R4X3N0OwotKwotK2ludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYsIGNv bnN0IGNoYXIgKmF1dGgpOwotK2ludCBGSVBTX21vZHVsZV9tb2RlKHZvaWQpOwotK2NvbnN0IHZv aWQgKkZJUFNfcmFuZF9jaGVjayh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdCh2b2lkKTsKLStp bnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSh2 b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9zaGExKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0 X3NoYTIodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKHZvaWQpOwotK2ludCBGSVBTX3Nl bGZ0ZXN0X2Flc19jY20odm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfYWVzX2djbSh2b2lkKTsK LStpbnQgRklQU19zZWxmdGVzdF9hZXNfeHRzKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Fl cyh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9kZXModm9pZCk7Ci0raW50IEZJUFNfc2VsZnRl c3RfZGVzKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3JzYSh2b2lkKTsKLSt2b2lkIEZJUFNf Y29ycnVwdF9yc2Ffa2V5Z2VuKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSh2b2lkKTsK LSt2b2lkIEZJUFNfY29ycnVwdF9kc2Eodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfZHNhX2tl eWdlbih2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9kc2Eodm9pZCk7Ci0rdm9pZCBGSVBTX2Nv cnJ1cHRfcm5nKHZvaWQpOwotK3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCk7Ci0rdm9pZCBGSVBT X3g5MzFfc3RpY2soaW50IG9ub2ZmKTsKLSt2b2lkIEZJUFNfZHJiZ19zdGljayhpbnQgb25vZmYp OwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF94OTMx KHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWModm9pZCk7Ci0raW50IEZJUFNfc2VsZnRl c3RfZHJiZyh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2b2lkKTsKLStpbnQg RklQU19zZWxmdGVzdF9jbWFjKHZvaWQpOwotKwotK3ZvaWQgRklQU19nZXRfdGltZXZlYyh1bnNp Z25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgKnBjdHIpOwotKwotKyNkZWZpbmUgRklQU19F UlJPUl9JR05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKLSsJCWFs ZyAiIHByZXZpb3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBlcnJvciBpZ25vcmVkIik7Ci0r Ci0raW50IGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChzdHJ1Y3QgZXZwX3BrZXlfc3QgKnBrZXks Ci0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAotKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKLSsJCQljb25zdCBzdHJ1Y3Qg ZW52X21kX3N0ICpkaWdlc3QsIHVuc2lnbmVkIGludCBtZF9mbGFncywKLSsJCQljb25zdCBjaGFy ICpmYWlsX3N0cik7Ci0rCi0raW50IGZpcHNfY2lwaGVyX3Rlc3Qoc3RydWN0IGV2cF9jaXBoZXJf Y3R4X3N0ICpjdHgsCi0rCQkJY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKmNpcGhlciwKLSsJ CQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYs Ci0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAotKwkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmNpcGhlcnRleHQsCi0rCQkJaW50IGxlbik7Ci0rCi0rdm9pZCBmaXBzX3NldF9zZWxm dGVzdF9mYWlsKHZvaWQpOwotKwotK2NvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKkZJUFNfZ2V0X2Rp Z2VzdGJ5bmlkKGludCBuaWQpOwotKwotK2NvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpGSVBT X2dldF9jaXBoZXJieW5pZChpbnQgbmlkKTsKLSsKLSsKLSsvKiBCRUdJTiBFUlJPUiBDT0RFUyAq LwotKy8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3Jp cHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCi0rICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBi ZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCi0rICovCi0rdm9pZCBF UlJfbG9hZF9GSVBTX3N0cmluZ3Modm9pZCk7Ci0rCi0rLyogRXJyb3IgY29kZXMgZm9yIHRoZSBG SVBTIGZ1bmN0aW9ucy4gKi8KLSsKLSsvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLSsjZGVmaW5lIEZJ UFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUwkJCSAxMDAKLSsjZGVmaW5lIEZJUFNfRl9ESF9JTklU CQkJCQkgMTQ4Ci0rI2RlZmluZSBGSVBTX0ZfRFJCR19SRVNFRUQJCQkJIDE2MgotKyNkZWZpbmUg RklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEwMQotKyNkZWZpbmUgRklQU19GX0RTQV9C VUlMVElOX1BBUkFNR0VOMgkJCSAxMDcKLSsjZGVmaW5lIEZJUFNfRl9EU0FfRE9fU0lHTgkJCQkg MTAyCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTAzCi0rI2RlZmluZSBGSVBT X0ZfRUNESF9DT01QVVRFX0tFWQkJCQkgMTYzCi0rI2RlZmluZSBGSVBTX0ZfRUNEU0FfRE9fU0lH TgkJCQkgMTY0Ci0rI2RlZmluZSBGSVBTX0ZfRUNEU0FfRE9fVkVSSUZZCQkJCSAxNjUKLSsjZGVm aW5lIEZJUFNfRl9FQ19LRVlfR0VORVJBVEVfS0VZCQkJIDE2NgotKyNkZWZpbmUgRklQU19GX0VW UF9DSVBIRVJJTklUX0VYCQkJIDEyNAotKyNkZWZpbmUgRklQU19GX0VWUF9ESUdFU1RJTklUX0VY CQkJIDEyNQotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBCQkJCSAxMDQKLSsjZGVmaW5l IEZJUFNfRl9GSVBTX0NIRUNLX0RTQV9QUk5HCQkJIDE1MQotKyNkZWZpbmUgRklQU19GX0ZJUFNf Q0hFQ0tfRUMJCQkJIDE0MgotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRUNfUFJORwkJCSAx NTIKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVAkJIDEwNQot KyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBCQkJCSAxMDYKLSsjZGVmaW5lIEZJUFNfRl9G SVBTX0NIRUNLX1JTQV9QUk5HCQkJIDE1MAotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0lQSEVSCQkJ CSAxNjAKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhFUklOSVQJCQkJIDE0MwotKyNkZWZpbmUg RklQU19GX0ZJUFNfQ0lQSEVSX0NUWF9DVFJMCQkJIDE2MQotKyNkZWZpbmUgRklQU19GX0ZJUFNf RElHRVNURklOQUwJCQkJIDE1OAotKyNkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNUSU5JVAkJCQkg MTI4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19ESUdFU1RVUERBVEUJCQkgMTU5Ci0rI2RlZmluZSBG SVBTX0ZfRklQU19EUkJHX0JZVEVTCQkJCSAxMzEKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdf Q0hFQ0sJCQkJIDE0NgotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNUCQkJIDEz MgotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSwkJCSAxMzYKLSsjZGVmaW5l IEZJUFNfRl9GSVBTX0RSQkdfR0VORVJBVEUJCQkgMTM0Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19E UkJHX0lOSVQJCQkJIDEzNQotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURQkJ CSAxMzgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfTkVXCQkJCSAxMzkKLSsjZGVmaW5lIEZJ UFNfRl9GSVBTX0RSQkdfUkVTRUVECQkJCSAxNDAKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdf U0lOR0xFX0tBVAkJCSAxNDEKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9DSEVDSwkJLyogdW51 c2VkICovCSAxMDcKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9TSUdOX0RJR0VTVAkJCSAxNTQK LSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9WRVJJRllfRElHRVNUCQkJIDE1NQotKyNkZWZpbmUg RklQU19GX0ZJUFNfR0VUX0VOVFJPUFkJCQkJIDE0NwotKyNkZWZpbmUgRklQU19GX0ZJUFNfTU9E RV9TRVQJCS8qIHVudXNlZCAqLwkgMTA4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19NT0RVTEVfTU9E RV9TRVQJCQkgMTA4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNUCQkJ IDEwOQotKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9BREQJCQkJIDEzNwotKyNkZWZpbmUgRklQ U19GX0ZJUFNfUkFORF9CWVRFUwkJCQkgMTIyCi0rI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX1BT RVVET19CWVRFUwkJCSAxNjcKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU0VFRAkJCQkgMTY4 Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0QJCQkgMTI2Ci0rI2RlZmluZSBG SVBTX0ZfRklQU19SQU5EX1NUQVRVUwkJCQkgMTI3Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SU0Ff U0lHTl9ESUdFU1QJCQkgMTU2Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SU0FfVkVSSUZZX0RJR0VT VAkJCSAxNTcKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUwkJCSAxMTAKLSsjZGVm aW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19DQ00JCQkgMTQ1Ci0rI2RlZmluZSBGSVBTX0Zf RklQU19TRUxGVEVTVF9BRVNfR0NNCQkJIDEyOQotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRF U1RfQUVTX1hUUwkJCSAxNDQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0NNQUMJCQkg MTMwCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMJCQkgMTExCi0rI2RlZmluZSBG SVBTX0ZfRklQU19TRUxGVEVTVF9EU0EJCQkgMTEyCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxG VEVTVF9FQ0RTQQkJCSAxMzMKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMJCQkg MTEzCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcJLyogdW51c2VkICovCSAxMTQK LSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEJCQkgMTE1Ci0rI2RlZmluZSBGSVBT X0ZfRklQU19TRUxGVEVTVF9YOTMxCQkJIDExNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VUX1BS TkdfS0VZCQkJIDE1MwotKyNkZWZpbmUgRklQU19GX0hBU0hfRklOQUwJCQkJIDEyMwotKyNkZWZp bmUgRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTgkJCSAxMTYKLSsjZGVmaW5lIEZJUFNfRl9SU0Ff RUFZX0lOSVQJCQkJIDE0OQotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBU CQkJIDExNwotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBUCQkJIDExOAot KyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQJCQkgMTE5Ci0rI2RlZmluZSBG SVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVAkJCSAxMjAKLSsjZGVmaW5lIEZJUFNfRl9SU0Ff WDkzMV9HRU5FUkFURV9LRVlfRVgJCQkgMTIxCi0rI2RlZmluZSBGSVBTX0ZfU1NMRUFZX1JBTkRf QllURVMJLyogdW51c2VkICovCSAxMjIKLSsKLSsvKiBSZWFzb24gY29kZXMuICovCi0rI2RlZmlu ZSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVECSAxNTAKLSsjZGVmaW5l IEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HCQkgMTI1Ci0rI2RlZmluZSBGSVBTX1Jf QUxSRUFEWV9JTlNUQU5USUFURUQJCQkgMTM0Ci0rI2RlZmluZSBGSVBTX1JfQVVUSEVOVElDQVRJ T05fRkFJTFVSRQkJCSAxNTEKLSsjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUJCS8qIHVu dXNlZCAqLwkgMTAzCi0rI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJR0VTVAkvKiB1 bnVzZWQgKi8JIDEwNAotKyNkZWZpbmUgRklQU19SX0NPTlRSQURJQ1RJTkdfRVZJREVOQ0UJCQkg MTE0Ci0rI2RlZmluZSBGSVBTX1JfRFJCR19OT1RfSU5JVElBTElTRUQJCQkgMTUyCi0rI2RlZmlu ZSBGSVBTX1JfRFJCR19TVFVDSwkJCQkgMTAzCi0rI2RlZmluZSBGSVBTX1JfRU5UUk9QWV9FUlJP Ul9VTkRFVEVDVEVECQkJIDEwNAotKyNkZWZpbmUgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RF RF9GT1JfUkVTRUVECQkgMTA1Ci0rI2RlZmluZSBGSVBTX1JfRU5UUk9QWV9TT1VSQ0VfU1RVQ0sJ CQkgMTQyCi0rI2RlZmluZSBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcJCQkgMTE1Ci0r I2RlZmluZSBGSVBTX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDEyNwotKyNkZWZpbmUg RklQU19SX0VSUk9SX1JFVFJJRVZJTkdfQURESVRJT05BTF9JTlBVVAkgMTI0Ci0rI2RlZmluZSBG SVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZCQkJIDEyMgotKyNkZWZpbmUgRklQU19SX0VS Uk9SX1JFVFJJRVZJTkdfTk9OQ0UJCQkgMTQwCi0rI2RlZmluZSBGSVBTX1JfRVhFX0RJR0VTVF9E T0VTX05PVF9NQVRDSCAgIC8qIHVudXNlZCAqLwkgMTA1Ci0rI2RlZmluZSBGSVBTX1JfRklOR0VS UFJJTlRfRE9FU19OT1RfTUFUQ0gJCSAxMTAKLSsjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9E T0VTX05PVF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEIDExMQotKyNkZWZpbmUgRklQU19SX0ZJTkdF UlBSSU5UX0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcgMTEyCi0rI2RlZmluZSBGSVBT X1JfRklQU19NT0RFX0FMUkVBRFlfU0VUCQkJIDEwMgotKyNkZWZpbmUgRklQU19SX0ZJUFNfU0VM RlRFU1RfRkFJTEVECQkJIDEwNgotKyNkZWZpbmUgRklQU19SX0ZVTkNUSU9OX0VSUk9SCQkJCSAx MTYKLSsjZGVmaW5lIEZJUFNfUl9HRU5FUkFURV9FUlJPUgkJCQkgMTM3Ci0rI2RlZmluZSBGSVBT X1JfR0VORVJBVEVfRVJST1JfVU5ERVRFQ1RFRAkJIDExOAotKyNkZWZpbmUgRklQU19SX0lOU1RB TlRJQVRFX0VSUk9SCQkJIDExOQotKyNkZWZpbmUgRklQU19SX0lOU1VGRklDSUVOVF9TRUNVUklU WV9TVFJFTkdUSAkJIDEyMAotKyNkZWZpbmUgRklQU19SX0lOVEVSTkFMX0VSUk9SCQkJCSAxMjEK LSsjZGVmaW5lIEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgJCQkgMTA5Ci0rI2RlZmluZSBGSVBT X1JfSU5WQUxJRF9QQVJBTUVURVJTCQkJIDE0NAotKyNkZWZpbmUgRklQU19SX0lOX0VSUk9SX1NU QVRFCQkJCSAxMjMKLSsjZGVmaW5lIEZJUFNfUl9LRVlfVE9PX1NIT1JUCQkJCSAxMDgKLSsjZGVm aW5lIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRFVEVDVEVECQkJIDE0OQotKyNkZWZpbmUgRklQU19S X05PTl9GSVBTX01FVEhPRAkJCQkgMTAwCi0rI2RlZmluZSBGSVBTX1JfTk9QUl9URVNUMV9GQUlM VVJFCQkJIDE0NQotKyNkZWZpbmUgRklQU19SX05PUFJfVEVTVDJfRkFJTFVSRQkJCSAxNDYKLSsj ZGVmaW5lIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVECQkJCSAxMjYKLSsjZGVmaW5lIEZJUFNfUl9Q QUlSV0lTRV9URVNUX0ZBSUxFRAkJCSAxMDcKLSsjZGVmaW5lIEZJUFNfUl9QRVJTT05BTElTQVRJ T05fRVJST1JfVU5ERVRFQ1RFRAkJIDEyOAotKyNkZWZpbmUgRklQU19SX1BFUlNPTkFMSVNBVElP Tl9TVFJJTkdfVE9PX0xPTkcJCSAxMjkKLSsjZGVmaW5lIEZJUFNfUl9QUk5HX1NUUkVOR1RIX1RP T19MT1cJCQkgMTQzCi0rI2RlZmluZSBGSVBTX1JfUFJfVEVTVDFfRkFJTFVSRQkJCQkgMTQ3Ci0r I2RlZmluZSBGSVBTX1JfUFJfVEVTVDJfRkFJTFVSRQkJCQkgMTQ4Ci0rI2RlZmluZSBGSVBTX1Jf UkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRAkJIDEzMAotKyNkZWZpbmUgRklQU19SX1JF UVVFU1RfVE9PX0xBUkdFX0ZPUl9EUkJHCQkgMTMxCi0rI2RlZmluZSBGSVBTX1JfUkVTRUVEX0NP VU5URVJfRVJST1IJCQkgMTMyCi0rI2RlZmluZSBGSVBTX1JfUkVTRUVEX0VSUk9SCQkJCSAxMzMK LSsjZGVmaW5lIEZJUFNfUl9SU0FfREVDUllQVF9FUlJPUgkvKiB1bnVzZWQgKi8JIDExNQotKyNk ZWZpbmUgRklQU19SX1JTQV9FTkNSWVBUX0VSUk9SCS8qIHVudXNlZCAqLwkgMTE2Ci0rI2RlZmlu ZSBGSVBTX1JfU0VMRlRFU1RfRkFJTEVECQkJCSAxMDEKLSsjZGVmaW5lIEZJUFNfUl9TRUxGVEVT VF9GQUlMVVJFCQkJCSAxMzUKLSsjZGVmaW5lIEZJUFNfUl9TVFJFTkdUSF9FUlJPUl9VTkRFVEVD VEVECQkgMTM2Ci0rI2RlZmluZSBGSVBTX1JfVEVTVF9GQUlMVVJFCQkJCSAxMTcKLSsjZGVmaW5l IEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SCQkJIDE0MQotKyNkZWZpbmUgRklQU19SX1VOSU5T VEFOVElBVEVfWkVST0lTRV9FUlJPUgkJIDEzOAotKyNkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVE X0RSQkdfVFlQRQkJCSAxMzkKLSsjZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STQkJ CSAxMTMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgotKyNlbmRpZgotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jLmZpcHMJMjAxMi0w NC0yMCAwOTowNzowNi4yNjg3ODU3ODQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8v Zmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2ODc4NTc4NCAr MDIwMAotQEAgLTAsMCArMSwxMzcgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAo YykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVk ZSA8b3BlbnNzbC9obWFjLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3R5cGVkZWYgc3Ry dWN0IHsKLSsJY29uc3QgRVZQX01EICooKmFsZykodm9pZCk7Ci0rCWNvbnN0IGNoYXIgKmtleSwg Kml2OwotKwl1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV07Ci0rfSBITUFDX0tB VDsKLSsKLStzdGF0aWMgY29uc3QgSE1BQ19LQVQgdmVjdG9yW10gPSB7Ci0rICAgIHsJRVZQX3No YTEsCi0rCS8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlw czE5OC9maXBzLTE5OGEucGRmICovCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1w bGUgIzIiLAotKwl7IDB4MDksMHgyMiwweGQzLDB4NDAsMHg1ZiwweGFhLDB4M2QsMHgxOSwKLSsJ ICAweDRmLDB4ODIsMHhhNCwweDU4LDB4MzAsMHg3MywweDdkLDB4NWMsCi0rCSAgMHhjNiwweGM3 LDB4NWQsMHgyNCB9Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTIyNCwKLSsJLyoganVzdCBrZWVw IGV4dGVuZGluZyB0aGUgYWJvdmUuLi4gKi8KLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJ IlNhbXBsZSAjMiIsCi0rCXsgMHhkZCwweGVmLDB4MGEsMHg0MCwweGNiLDB4N2QsMHg1MCwweGZi LAotKwkgIDB4NmUsMHhlNiwweGNlLDB4YTEsMHgyMCwweGJhLDB4MjYsMHhhYSwKLSsJICAweDA4 LDB4ZjMsMHgwNywweDc1LDB4ODcsMHhiOCwweGFkLDB4MWIsCi0rCSAgMHg4YywweDhkLDB4MTIs MHhjNyB9Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTI1NiwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9A QUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHhiOCwweGYyLDB4MGQsMHhiNSwweDQxLDB4ZWEs MHg0MywweDA5LAotKwkgIDB4Y2EsMHg0ZSwweGE5LDB4MzgsMHgwYywweGQwLDB4ZTgsMHgzNCwK LSsJICAweGY3LDB4MWYsMHhiZSwweDkxLDB4NzQsMHhhMiwweDYxLDB4MzgsCi0rCSAgMHgwZCww eGMxLDB4N2UsMHhhZSwweDZhLDB4MzQsMHg1MSwweGQ5IH0KLSsgICAgfSwKLSsgICAgewlFVlBf c2hhMzg0LAotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAw eDA4LDB4YmMsMHhiMCwweGRhLDB4NDksMHgxZSwweDg3LDB4YWQsCi0rCSAgMHg5YSwweDFkLDB4 NmEsMHhjZSwweDIzLDB4YzUsMHgwYiwweGY2LAotKwkgIDB4YjcsMHgxOCwweDA2LDB4YTUsMHg3 NywweGNkLDB4NDksMHgwNCwKLSsJICAweDg5LDB4ZjEsMHhlNiwweDIzLDB4NDQsMHg1MSwweDUx LDB4OWYsCi0rCSAgMHg4NSwweDU2LDB4ODAsMHg3OSwweDBjLDB4YmQsMHg0ZCwweDUwLAotKwkg IDB4YTQsMHg1ZiwweDI5LDB4ZTMsMHg5MywweGYwLDB4ZTgsMHg3ZiB9Ci0rICAgIH0sCi0rICAg IHsJRVZQX3NoYTUxMiwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIs Ci0rCXsgMHg4MCwweDlkLDB4NDQsMHgwNSwweDdjLDB4NWIsMHg5NSwweDQxLAotKwkgIDB4MDUs MHhiZCwweDA0LDB4MTMsMHgxNiwweGRiLDB4MGYsMHhhYywKLSsJICAweDQ0LDB4ZDUsMHhhNCww eGQ1LDB4ZDAsMHg4OSwweDJiLDB4ZDAsCi0rCSAgMHg0ZSwweDg2LDB4NjQsMHgxMiwweGMwLDB4 OTAsMHg3NywweDY4LAotKwkgIDB4ZjEsMHg4NywweGI3LDB4N2MsMHg0ZiwweGFlLDB4MmMsMHgy ZiwKLSsJICAweDIxLDB4YTUsMHhiNSwweDY1LDB4OWEsMHg0ZiwweDRiLDB4YTcsCi0rCSAgMHg0 NywweDAyLDB4YTMsMHhkZSwweDliLDB4NTEsMHhmMSwweDQ1LAotKwkgIDB4YmQsMHg0ZiwweDI1 LDB4MjcsMHg0MiwweDk4LDB4OTksMHgwNSB9Ci0rICAgIH0sCi0rfTsKLSsKLStpbnQgRklQU19z ZWxmdGVzdF9obWFjKCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsgICAgdW5zaWduZWQgaW50ICAg IG91dGxlbjsKLSsgICAgdW5zaWduZWQgY2hhciAgIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAg ICBjb25zdCBFVlBfTUQgICAqbWQ7Ci0rICAgIGNvbnN0IEhNQUNfS0FUICp0OwotKwotKyAgICBm b3Iobj0wLHQ9dmVjdG9yOyBuPHNpemVvZih2ZWN0b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyss dCsrKQotKwl7Ci0rCW1kID0gKCp0LT5hbGcpKCk7Ci0rCUhNQUMobWQsdC0+a2V5LHN0cmxlbih0 LT5rZXkpLAotKwkJKGNvbnN0IHVuc2lnbmVkIGNoYXIgKil0LT5pdixzdHJsZW4odC0+aXYpLAot KwkJb3V0LCZvdXRsZW4pOwotKwotKwlpZihtZW1jbXAob3V0LHQtPmthdmFsLG91dGxlbikpCi0r CSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMsRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJfQotKyAgICByZXR1 cm4gMTsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Zp cHMvZmlwc19sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2xvY2wu aAotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oLmZpcHMJMjAxMi0w NC0yMCAwOTowNzowNi4yNjg3ODU3ODQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8v Zmlwcy9maXBzX2xvY2wuaAkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2ODc4NTc4NCArMDIwMAotQEAg LTAsMCArMSw3MSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlm Ci0rCi0rI2RlZmluZSBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFCTMyCi0rI2RlZmluZSBmaXBz X2xvYWRfa2V5X2NvbXBvbmVudChrZXksIGNvbXAsIHByZSkgXAotKwlrZXktPmNvbXAgPSBCTl9i aW4yYm4ocHJlIyNfIyNjb21wLCBzaXplb2YocHJlIyNfIyNjb21wKSwga2V5LT5jb21wKTsgXAot KwlpZiAoIWtleS0+Y29tcCkgXAotKwkJZ290byBlcnIKLSsKLSsjZGVmaW5lIGZpcHNfcG9zdF9z dGFydGVkKGlkLCBzdWJpZCwgZXgpIDEKLSsjZGVmaW5lIGZpcHNfcG9zdF9zdWNjZXNzKGlkLCBz dWJpZCwgZXgpIDEKLSsjZGVmaW5lIGZpcHNfcG9zdF9mYWlsZWQoaWQsIHN1YmlkLCBleCkgMQot KyNkZWZpbmUgZmlwc19wb3N0X2NvcnJ1cHQoaWQsIHN1YmlkLCBleCkgMQotKyNkZWZpbmUgZmlw c19wb3N0X3N0YXR1cygpIDEKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgot KyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19tZC5jLmZp cHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19tZC5jCi0tLS0gb3BlbnNzbC0xLjAu MWEvY3J5cHRvL2ZpcHMvZmlwc19tZC5jLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjg3ODU3 ODQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX21kLmMJMjAxMi0w NC0yMCAwOTowNzowNi4yNjg3ODU3ODQgKzAyMDAKLUBAIC0wLDAgKzEsMTQ1IEBACi0rLyogZmlw cy9ldnAvZmlwc19tZC5jICovCi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3Vu ZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVy aWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2Fz IHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICog VGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVz ZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRv LiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQg aW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVT LCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRp b24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhl IHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0g SHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMg RXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0 aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVz ZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgot KyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICog VGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBz dGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3Zp ZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQot KyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBi eQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdv cmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRo ZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRl ZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAo b3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5 IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1 ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs IFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VD SCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBm b3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9m IHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1w bHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNl bmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgot KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1 dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoK LSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAg ICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICog KGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0 dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0rICovCi0r Ci0rLyogTWluaW1hbCBzdGFuZGFsb25lIEZJUFMgdmVyc2lvbnMgb2YgRGlnZXN0IG9wZXJhdGlv bnMgKi8KLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKwotKyNpbmNsdWRlIDxzdGRpby5o PgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK2NvbnN0IEVWUF9NRCAqRklQU19nZXRfZGlnZXN0 YnluaWQoaW50IG5pZCkKLSsJewotKwlzd2l0Y2ggKG5pZCkKLSsJCXsKLSsJCWNhc2UgTklEX3No YTE6Ci0rCQlyZXR1cm4gRVZQX3NoYTEoKTsKLSsKLSsJCWNhc2UgTklEX3NoYTIyNDoKLSsJCXJl dHVybiBFVlBfc2hhMjI0KCk7Ci0rCi0rCQljYXNlIE5JRF9zaGEyNTY6Ci0rCQlyZXR1cm4gRVZQ X3NoYTI1NigpOwotKwotKwkJY2FzZSBOSURfc2hhMzg0OgotKwkJcmV0dXJuIEVWUF9zaGEzODQo KTsKLSsKLSsJCWNhc2UgTklEX3NoYTUxMjoKLSsJCXJldHVybiBFVlBfc2hhNTEyKCk7Ci0rCi0r CQlkZWZhdWx0OgotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2ZpcHMvZmlwc19wb3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3Bv c3QuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjY5Nzg1ODA2ICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjk3 ODU4MDYgKzAyMDAKLUBAIC0wLDAgKzEsMjA1IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0r ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICov Ci0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlw dG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw c19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv YmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3Jz YS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8bGltaXRzLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKy8qIFBvd2Vy IG9uIHNlbGYgdGVzdCAoUE9TVCkgc3VwcG9ydCBmdW5jdGlvbnMgKi8KLSsKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKy8qIFJ1biBhbGwg c2VsZnRlc3RzICovCi0raW50IEZJUFNfc2VsZnRlc3Qodm9pZCkKLSsJewotKwlpbnQgcnYgPSAx OwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfZHJiZygpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNf c2VsZnRlc3RfeDkzMSgpKQotKwkJcnYgPSAwOwotKyAgICAJaWYgKCFGSVBTX3NlbGZ0ZXN0X3No YTEoKSkKLSsJCXJ2ID0gMDsKLSsgICAgCWlmICghRklQU19zZWxmdGVzdF9zaGEyKCkpCi0rCQly diA9IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF9obWFjKCkpCi0rCQlydiA9IDA7Ci0rCWlmICgh RklQU19zZWxmdGVzdF9jbWFjKCkpCi0rCQlydiA9IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF9h ZXMoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2Flc19jY20oKSkKLSsJCXJ2 ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2Flc19nY20oKSkKLSsJCXJ2ID0gMDsKLSsJaWYg KCFGSVBTX3NlbGZ0ZXN0X2Flc194dHMoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0 ZXN0X2RlcygpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfcnNhKCkpCi0rCQly diA9IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF9kc2EoKSkKLSsJCXJ2ID0gMDsKLSsJcmV0dXJu IHJ2OwotKwl9Ci0rCi0rLyogR2VuZXJhbGl6ZWQgcHVibGljIGtleSB0ZXN0IHJvdXRpbmUuIFNp Z25zIGFuZCB2ZXJpZmllcyB0aGUgZGF0YQotKyAqIHN1cHBsaWVkIGluIHRicyB1c2luZyBtZXNh Z2UgZGlnZXN0IG1kIGFuZCBzZXR0aW5nIG9wdGlvbiBkaWdlc3QKLSsgKiBmbGFncyBtZF9mbGFn cy4gSWYgdGhlICdrYXQnIHBhcmFtZXRlciBpcyBub3QgTlVMTCBpdCB3aWxsCi0rICogYWRkaXRp b25hbGx5IGNoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyBpdDogYSBrbm93biBhbnN3ZXIgdGVz dAotKyAqIFRoZSBzdHJpbmcgImZhaWxfc3RyIiBpcyB1c2VkIGZvciBpZGVudGlmaWNhdGlvbiBw dXJwb3NlcyBpbiBjYXNlCi0rICogb2YgZmFpbHVyZS4gSWYgInBrZXkiIGlzIE5VTEwganVzdCBw ZXJmb3JtIGEgbWVzc2FnZSBkaWdlc3QgY2hlY2suCi0rICovCi0rCi0raW50IGZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChFVlBfUEtFWSAqcGtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0 YnMsIGludCB0YnNsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBp bnQga2F0bGVuLAotKwkJCWNvbnN0IEVWUF9NRCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxh Z3MsCi0rCQkJY29uc3QgY2hhciAqZmFpbF9zdHIpCi0rCXsJCi0rCWludCByZXQgPSAwOwotKwl1 bnNpZ25lZCBjaGFyIHNpZ3RtcFsyNTZdLCAqc2lnID0gc2lndG1wOwotKwl1bnNpZ25lZCBpbnQg c2lnbGVuOwotKwlFVlBfTURfQ1RYIG1jdHg7Ci0rCUVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0r Ci0rCWlmIChkaWdlc3QgPT0gTlVMTCkKLSsJCWRpZ2VzdCA9IEVWUF9zaGEyNTYoKTsKLSsKLSsJ aWYgKChwa2V5LT50eXBlID09IEVWUF9QS0VZX1JTQSkKLSsJCSYmIChSU0Ffc2l6ZShwa2V5LT5w a2V5LnJzYSkgPiBzaXplb2Yoc2lndG1wKSkpCi0rCQl7Ci0rCQlzaWcgPSBPUEVOU1NMX21hbGxv YyhSU0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkpOwotKwkJaWYgKCFzaWcpCi0rCQkJewotKwkJCUZJ UFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxFUlJfUl9NQUxMT0NfRkFJTFVS RSk7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwotKwlpZiAodGJzbGVuID09IC0xKQot KwkJdGJzbGVuID0gc3RybGVuKChjaGFyICopdGJzKTsKLSsKLSsJaWYgKG1kX2ZsYWdzKQotKwkJ RVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1jdHgsIG1kX2ZsYWdzKTsKLSsKLSsJaWYgKCFFVlBfU2ln bkluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVW UF9TaWduVXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAo IUVWUF9TaWduRmluYWwoJm1jdHgsIHNpZywgJnNpZ2xlbiwgcGtleSkpCi0rCQlnb3RvIGVycm9y OwotKwotKwlpZiAoa2F0ICYmICgoc2lnbGVuICE9IGthdGxlbikgfHwgbWVtY21wKGthdCwgc2ln LCBrYXRsZW4pKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghRVZQX1ZlcmlmeUluaXRfZXgo Jm1jdHgsIGRpZ2VzdCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9WZXJpZnlV cGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCXJldCA9IEVWUF9W ZXJpZnlGaW5hbCgmbWN0eCwgc2lnLCBzaWdsZW4sIHBrZXkpOwotKwotKwllcnJvcjoKLSsJaWYg KHNpZyAhPSBzaWd0bXApCi0rCQlPUEVOU1NMX2ZyZWUoc2lnKTsKLSsJRVZQX01EX0NUWF9jbGVh bnVwKCZtY3R4KTsKLSsJaWYgKHJldCAhPSAxKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQ U19QS0VZX1NJR05BVFVSRV9URVNULEZJUFNfUl9URVNUX0ZBSUxVUkUpOwotKwkJaWYgKGZhaWxf c3RyKQotKwkJCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiVHlwZT0iLCBmYWlsX3N0cik7Ci0rCQly ZXR1cm4gMDsKLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBHZW5lcmFsaXplZCBzeW1t ZXRyaWMgY2lwaGVyIHRlc3Qgcm91dGluZS4gRW5jcnlwdCBkYXRhLCB2ZXJpZnkgcmVzdWx0Ci0r ICogYWdhaW5zdCBrbm93biBhbnN3ZXIsIGRlY3J5cHQgYW5kIGNvbXBhcmUgd2l0aCBvcmlnaW5h bCBwbGFpbnRleHQuCi0rICovCi0rCi0raW50IGZpcHNfY2lwaGVyX3Rlc3QoRVZQX0NJUEhFUl9D VFggKmN0eCwgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwKLSsJCQljb25zdCB1bnNpZ25l ZCBjaGFyICpwbGFpbnRleHQsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwK LSsJCQlpbnQgbGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgcGx0bXBbRklQU19NQVhfQ0lQSEVS X1RFU1RfU0laRV07Ci0rCXVuc2lnbmVkIGNoYXIgY2l0bXBbRklQU19NQVhfQ0lQSEVSX1RFU1Rf U0laRV07Ci0rCi0rCU9QRU5TU0xfYXNzZXJ0KGxlbiA8PSBGSVBTX01BWF9DSVBIRVJfVEVTVF9T SVpFKTsKLSsJbWVtc2V0KHBsdG1wLCAwLCBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFKTsKLSsJ bWVtc2V0KGNpdG1wLCAwLCBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFKTsKLSsKLSsJaWYgKEVW UF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2LCAxKSA8PSAwKQotKwkJ cmV0dXJuIDA7Ci0rCWlmIChFVlBfQ2lwaGVyKGN0eCwgY2l0bXAsIHBsYWludGV4dCwgbGVuKSA8 PSAwKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChtZW1jbXAoY2l0bXAsIGNpcGhlcnRleHQsIGxlbikp Ci0rCQlyZXR1cm4gMDsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxM LCBrZXksIGl2LCAwKSA8PSAwKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChFVlBfQ2lwaGVyKGN0eCwg cGx0bXAsIGNpdG1wLCBsZW4pIDw9IDApCi0rCQlyZXR1cm4gMDsKLSsJaWYgKG1lbWNtcChwbHRt cCwgcGxhaW50ZXh0LCBsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCXJldHVybiAxOwotKwl9Ci0rI2Vu ZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBz IG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCi0tLS0gb3BlbnNzbC0xLjAu MWEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMuZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2OTc4 NTgwNiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCTIw MTItMDQtMjAgMDk6MDc6MDYuMjY5Nzg1ODA2ICswMjAwCi1AQCAtMCwwICsxLDQ1NyBAQAotKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlv bi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBv cGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3Ig bWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVu Ci0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4g UmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZv bGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK LSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVD VCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJP SkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKy8qCi0rICogVGhpcyBpcyBhIEZJUFMgYXBwcm92 ZWQgQUVTIFBSTkcgYmFzZWQgb24gQU5TSSBYOS4zMSBBLjIuNC4KLSsgKi8KLSsjaW5jbHVkZSA8 b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKy8qIElmIHdlIGRvbid0 IGRlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVELCBzdHJ1Y3QgdGltZXZhbCB3b24ndAotKyAg IGJlIGRlZmluZWQgYW5kIGdldHRpbWVvZmRheSgpIHdvbid0IGJlIGRlY2xhcmVkIHdpdGggc3Ry aWN0IGNvbXBpbGVycwotKyAgIGxpa2UgREVDIEMgaW4gQU5TSSBDIG1vZGUuICAqLwotKyNpZm5k ZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAotKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRF RCAxCi0rI2VuZGlmCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHNfcmFuZC5oPgotKyNpZiAhKGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpIHx8IGRl ZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykpCi0rIyBpbmNsdWRlIDxzeXMvdGltZS5oPgotKyNl bmRpZgotKyNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCi0rIyBpbmNsdWRlIDx0aW1l Lmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpZm5kZWYgT1BFTlNTTF9TWVNf V0lOMzIKLSsjIGlmZGVmIE9QRU5TU0xfVU5JU1RECi0rIyAgaW5jbHVkZSBPUEVOU1NMX1VOSVNU RAotKyMgZWxzZQotKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgotKyMgZW5kaWYKLSsjZW5kaWYKLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRl ICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rdm9pZCAqT1BFTlNT TF9zdGRlcnIodm9pZCk7Ci0rCi0rI2RlZmluZSBBRVNfQkxPQ0tfTEVOR1RICTE2Ci0rCi0rCi0r LyogQUVTIEZJUFMgUFJORyBpbXBsZW1lbnRhdGlvbiAqLwotKwotK3R5cGVkZWYgc3RydWN0IAot Kwl7Ci0rCWludCBzZWVkZWQ7Ci0rCWludCBrZXllZDsKLSsJaW50IHRlc3RfbW9kZTsKLSsJaW50 IHNlY29uZDsKLSsJaW50IGVycm9yOwotKwl1bnNpZ25lZCBsb25nIGNvdW50ZXI7Ci0rCUFFU19L RVkga3M7Ci0rCWludCB2cG9zOwotKwkvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3Iga2V5IGlmIGl0 IGVxdWFscyBzZWVkIGxlbmd0aCAqLwotKwl1bnNpZ25lZCBjaGFyIHRtcF9rZXlbQUVTX0JMT0NL X0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgVltBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5zaWdu ZWQgY2hhciBEVFtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5zaWduZWQgY2hhciBsYXN0W0FFU19C TE9DS19MRU5HVEhdOwotKwl9IEZJUFNfUFJOR19DVFg7Ci0rCi0rc3RhdGljIEZJUFNfUFJOR19D VFggc2N0eDsKLSsKLStzdGF0aWMgaW50IGZpcHNfcHJuZ19mYWlsID0gMDsKLSsKLSt2b2lkIEZJ UFNfeDkzMV9zdGljayhpbnQgb25vZmYpCi0rCXsKLSsJZmlwc19wcm5nX2ZhaWwgPSBvbm9mZjsK LSsJfQotKwotK3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCkKLSsJewotKwlGSVBTX3g5MzFfc3Rp Y2soMSk7Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBmaXBzX3JhbmRfcHJuZ19yZXNldChGSVBTX1BS TkdfQ1RYICpjdHgpCi0rCXsKLSsJY3R4LT5zZWVkZWQgPSAwOwotKwljdHgtPmtleWVkID0gMDsK LSsJY3R4LT50ZXN0X21vZGUgPSAwOwotKwljdHgtPmNvdW50ZXIgPSAwOwotKwljdHgtPnNlY29u ZCA9IDA7Ci0rCWN0eC0+ZXJyb3IgPSAwOwotKwljdHgtPnZwb3MgPSAwOwotKwlPUEVOU1NMX2Ns ZWFuc2UoY3R4LT5WLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJT1BFTlNTTF9jbGVhbnNlKCZjdHgt PmtzLCBzaXplb2YoQUVTX0tFWSkpOwotKwl9Ci0rCQotKwotK3N0YXRpYyBpbnQgZmlwc19zZXRf cHJuZ19rZXkoRklQU19QUk5HX0NUWCAqY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtl eSwgdW5zaWduZWQgaW50IGtleWxlbikKLSsJewotKwlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQo KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VUX1BSTkdfS0VZLCBGSVBTX1JfU0VM RlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoa2V5bGVuICE9IDE2ICYm IGtleWxlbiAhPSAyNCAmJiBrZXlsZW4gIT0gMzIpCi0rCQl7Ci0rCQkvKiBlcnJvcjogaW52YWxp ZCBrZXkgc2l6ZSAqLwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUFFU19zZXRfZW5jcnlwdF9rZXko a2V5LCBrZXlsZW4gPDwgMywgJmN0eC0+a3MpOwotKwlpZiAoa2V5bGVuID09IDE2KQotKwkJewot KwkJbWVtY3B5KGN0eC0+dG1wX2tleSwga2V5LCAxNik7Ci0rCQljdHgtPmtleWVkID0gMjsKLSsJ CX0KLSsJZWxzZQotKwkJY3R4LT5rZXllZCA9IDE7Ci0rCWN0eC0+c2VlZGVkID0gMDsKLSsJY3R4 LT5zZWNvbmQgPSAwOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19zZXRf cHJuZ19zZWVkKEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpz ZWVkLCB1bnNpZ25lZCBpbnQgc2VlZGxlbikKLSsJewotKwl1bnNpZ25lZCBpbnQgaTsKLSsJaWYg KCFjdHgtPmtleWVkKQotKwkJcmV0dXJuIDA7Ci0rCS8qIEluIHRlc3QgbW9kZSBzZWVkIGlzIGp1 c3Qgc3VwcGxpZWQgZGF0YSAqLwotKwlpZiAoY3R4LT50ZXN0X21vZGUpCi0rCQl7Ci0rCQlpZiAo c2VlZGxlbiAhPSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXJldHVybiAwOwotKwkJbWVtY3B5KGN0 eC0+Viwgc2VlZCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQljdHgtPnNlZWRlZCA9IDE7Ci0rCQly ZXR1cm4gMTsKLSsJCX0KLSsJLyogT3V0c2lkZSB0ZXN0IG1vZGUgWE9SIHN1cHBsaWVkIGRhdGEg d2l0aCBleGlzdGluZyBzZWVkICovCi0rCWZvciAoaSA9IDA7IGkgPCBzZWVkbGVuOyBpKyspCi0r CQl7Ci0rCQljdHgtPlZbY3R4LT52cG9zKytdIF49IHNlZWRbaV07Ci0rCQlpZiAoY3R4LT52cG9z ID09IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJewotKwkJCWN0eC0+dnBvcyA9IDA7Ci0rCQkJLyog U3BlY2lhbCBjYXNlIGlmIGZpcnN0IHNlZWQgYW5kIGtleSBsZW5ndGggZXF1YWxzCi0rIAkJCSAq IGJsb2NrIHNpemUgY2hlY2sga2V5IGFuZCBzZWVkIGRvIG5vdCBtYXRjaC4KLSsgCQkJICovIAot KwkJCWlmIChjdHgtPmtleWVkID09IDIpCi0rCQkJCXsKLSsJCQkJaWYgKCFtZW1jbXAoY3R4LT50 bXBfa2V5LCBjdHgtPlYsIDE2KSkKLSsJCQkJCXsKLSsJCQkJCVJBTkRlcnIoUkFORF9GX0ZJUFNf U0VUX1BSTkdfU0VFRCwKLSsJCQkJCQlSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tF WSk7Ci0rCQkJCQlyZXR1cm4gMDsKLSsJCQkJCX0KLSsJCQkJT1BFTlNTTF9jbGVhbnNlKGN0eC0+ dG1wX2tleSwgMTYpOwotKwkJCQljdHgtPmtleWVkID0gMTsKLSsJCQkJfQotKwkJCWN0eC0+c2Vl ZGVkID0gMTsKLSsJCQl9Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBm aXBzX3NldF90ZXN0X21vZGUoRklQU19QUk5HX0NUWCAqY3R4KQotKwl7Ci0rCWlmIChjdHgtPmtl eWVkKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFLFJBTkRfUl9Q Uk5HX0tFWUVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwljdHgtPnRlc3RfbW9kZSA9IDE7Ci0r CXJldHVybiAxOwotKwl9Ci0rCi0raW50IEZJUFNfeDkzMV90ZXN0X21vZGUodm9pZCkKLSsJewot KwlyZXR1cm4gZmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKLSsJfQotKwotK2ludCBGSVBTX3Jh bmRfdGVzdF9tb2RlKHZvaWQpCi0rCXsKLSsJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0 eCk7Ci0rCX0KLSsKLSsKLStpbnQgRklQU194OTMxX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkK LSsJewotKwlpZiAoIXNjdHgudGVzdF9tb2RlKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQ U19YOTMxX1NFVF9EVCxSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJ CX0KLSsJbWVtY3B5KHNjdHguRFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJcmV0dXJuIDE7 Ci0rCX0KLSsKLStpbnQgRklQU19yYW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkKLSsJewot KwlpZiAoIXNjdHgudGVzdF9tb2RlKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5E X1NFVF9EVCxSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJ bWVtY3B5KHNjdHguRFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJcmV0dXJuIDE7Ci0rCX0K LSsKLSt2b2lkIEZJUFNfZ2V0X3RpbWV2ZWModW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBs b25nICpwY3RyKQotKwl7Ci0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCUZJTEVUSU1FIGZ0 OwotKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKLSsgICAgICAgIHN0cnVjdCB0 aW1lc3BlYyB0czsKLSsjZWxzZQotKwlzdHJ1Y3QgdGltZXZhbCB0djsKLSsjZW5kaWYKLSsKLSsj aWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUwotKwl1bnNpZ25lZCBsb25nIHBpZDsKLSsjZW5k aWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJR2V0U3lzdGVtVGltZUFzRmlsZVRp bWUoJmZ0KTsKLSsJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpIChmdC5kd0hpZ2hEYXRlVGltZSAm IDB4ZmYpOwotKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+ PiA4KSAmIDB4ZmYpOwotKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRl VGltZSA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdI aWdoRGF0ZVRpbWUgPj4gMjQpICYgMHhmZik7Ci0rCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAo ZnQuZHdMb3dEYXRlVGltZSAmIDB4ZmYpOwotKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKChm dC5kd0xvd0RhdGVUaW1lID4+IDgpICYgMHhmZik7Ci0rCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFy KSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1bnNpZ25l ZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gMjQpICYgMHhmZik7Ci0rI2VsaWYgZGVmaW5l ZChPUEVOU1NMX1NZU19WWFdPUktTKQotKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAm dHMpOwotKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKHRzLnR2X3NlYyAmIDB4ZmYpOwotKwli dWZbMV0gPSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9zZWMgPj4gOCkgJiAweGZmKTsKLSsJYnVm WzJdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+IDE2KSAmIDB4ZmYpOwotKwlidWZb M10gPSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9zZWMgPj4gMjQpICYgMHhmZik7Ci0rCWJ1Zls0 XSA9ICh1bnNpZ25lZCBjaGFyKSAodHMudHZfbnNlYyAmIDB4ZmYpOwotKwlidWZbNV0gPSAodW5z aWduZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDgpICYgMHhmZik7Ci0rCWJ1Zls2XSA9ICh1bnNp Z25lZCBjaGFyKSAoKHRzLnR2X25zZWMgPj4gMTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1bnNp Z25lZCBjaGFyKSAoKHRzLnR2X25zZWMgPj4gMjQpICYgMHhmZik7Ci0rI2Vsc2UKLSsJZ2V0dGlt ZW9mZGF5KCZ0dixOVUxMKTsKLSsJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl9zZWMg JiAweGZmKTsKLSsJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDgpICYg MHhmZik7Ci0rCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAxNikgJiAw eGZmKTsKLSsJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDI0KSAmIDB4 ZmYpOwotKwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKHR2LnR2X3VzZWMgJiAweGZmKTsKLSsJ YnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiA4KSAmIDB4ZmYpOwotKwli dWZbNl0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDE2KSAmIDB4ZmYpOwotKwli dWZbN10gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDI0KSAmIDB4ZmYpOwotKyNl bmRpZgotKwlidWZbOF0gPSAodW5zaWduZWQgY2hhcikgKCpwY3RyICYgMHhmZik7Ci0rCWJ1Zls5 XSA9ICh1bnNpZ25lZCBjaGFyKSAoKCpwY3RyID4+IDgpICYgMHhmZik7Ci0rCWJ1ZlsxMF0gPSAo dW5zaWduZWQgY2hhcikgKCgqcGN0ciA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzExXSA9ICh1bnNp Z25lZCBjaGFyKSAoKCpwY3RyID4+IDI0KSAmIDB4ZmYpOwotKwotKwkoKnBjdHIpKys7Ci0rCi0r Ci0rI2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKLSsJcGlkPSh1bnNpZ25lZCBsb25nKWdl dHBpZCgpOwotKwlidWZbMTJdID0gKHVuc2lnbmVkIGNoYXIpIChwaWQgJiAweGZmKTsKLSsJYnVm WzEzXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiA4KSAmIDB4ZmYpOwotKwlidWZbMTRdID0g KHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbMTVdID0gKHVuc2ln bmVkIGNoYXIpICgocGlkID4+IDI0KSAmIDB4ZmYpOwotKyNlbmRpZgotKyAgICB9Ci0rCi0rc3Rh dGljIGludCBmaXBzX3JhbmQoRklQU19QUk5HX0NUWCAqY3R4LAotKwkJCXVuc2lnbmVkIGNoYXIg Km91dCwgdW5zaWduZWQgaW50IG91dGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIFJbQUVTX0JM T0NLX0xFTkdUSF0sIElbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgdG1wW0FF U19CTE9DS19MRU5HVEhdOwotKwlpbnQgaTsKLSsJaWYgKGN0eC0+ZXJyb3IpCi0rCQl7Ci0rCQlS QU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfRVJST1IpOwotKwkJcmV0dXJuIDA7 Ci0rCQl9Ci0rCWlmICghY3R4LT5rZXllZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNf UkFORCxSQU5EX1JfTk9fS0VZX1NFVCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFjdHgt PnNlZWRlZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19O T1RfU0VFREVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlmb3IgKDs7KQotKwkJewotKwkJaWYg KCFjdHgtPnRlc3RfbW9kZSkKLSsJCQlGSVBTX2dldF90aW1ldmVjKGN0eC0+RFQsICZjdHgtPmNv dW50ZXIpOwotKwkJQUVTX2VuY3J5cHQoY3R4LT5EVCwgSSwgJmN0eC0+a3MpOwotKwkJZm9yIChp ID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKLSsJCQl0bXBbaV0gPSBJW2ldIF4gY3R4 LT5WW2ldOwotKwkJQUVTX2VuY3J5cHQodG1wLCBSLCAmY3R4LT5rcyk7Ci0rCQlmb3IgKGkgPSAw OyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQotKwkJCXRtcFtpXSA9IFJbaV0gXiBJW2ldOwot KwkJQUVTX2VuY3J5cHQodG1wLCBjdHgtPlYsICZjdHgtPmtzKTsKLSsJCS8qIENvbnRpbnVvdXMg UFJORyB0ZXN0ICovCi0rCQlpZiAoY3R4LT5zZWNvbmQpCi0rCQkJewotKwkJCWlmIChmaXBzX3By bmdfZmFpbCkKLSsJCQkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0r CQkJaWYgKCFtZW1jbXAoUiwgY3R4LT5sYXN0LCBBRVNfQkxPQ0tfTEVOR1RIKSkKLSsJCQkJewot KwkgICAgCQkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX1NUVUNLKTsKLSsJ CQkJY3R4LT5lcnJvciA9IDE7Ci0rCQkJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJCQkJ cmV0dXJuIDA7Ci0rCQkJCX0KLSsJCQl9Ci0rCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxP Q0tfTEVOR1RIKTsKLSsJCWlmICghY3R4LT5zZWNvbmQpCi0rCQkJewotKwkJCWN0eC0+c2Vjb25k ID0gMTsKLSsJCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQotKwkJCQljb250aW51ZTsKLSsJCQl9Ci0r Ci0rCQlpZiAob3V0bGVuIDw9IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJewotKwkJCW1lbWNweShv dXQsIFIsIG91dGxlbik7Ci0rCQkJYnJlYWs7Ci0rCQkJfQotKwotKwkJbWVtY3B5KG91dCwgUiwg QUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQlvdXQgKz0gQUVTX0JMT0NLX0xFTkdUSDsKLSsJCW91dGxl biAtPSBBRVNfQkxPQ0tfTEVOR1RIOwotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotKwotK2lu dCBGSVBTX3g5MzFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4p Ci0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJ cmV0ID0gZmlwc19zZXRfcHJuZ19rZXkoJnNjdHgsIGtleSwga2V5bGVuKTsKLSsJQ1JZUFRPX3df dW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IEZJ UFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVf VCBrZXlsZW4pCi0rCXsKLSsJcmV0dXJuIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsK LSsJfQotKwotK2ludCBGSVBTX3g5MzFfc2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxl bikKLSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwot KwlyZXQgPSBmaXBzX3NldF9wcm5nX3NlZWQoJnNjdHgsIHNlZWQsIHNlZWRsZW4pOwotKwlDUllQ VE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsK LStpbnQgRklQU194OTMxX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50KQotKwl7 Ci0rCWludCByZXQ7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldCA9 IGZpcHNfcmFuZCgmc2N0eCwgb3V0LCBjb3VudCk7Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9f TE9DS19SQU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBGSVBTX3g5MzFfc3RhdHVz KHZvaWQpCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19SQU5E KTsKLSsJcmV0ID0gc2N0eC5zZWVkZWQ7Ci0rCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19S QU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3ZvaWQgRklQU194OTMxX3Jlc2V0KHZvaWQp Ci0rCXsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJZmlwc19yYW5kX3By bmdfcmVzZXQoJnNjdHgpOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0r CX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZG9fcmFuZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIGlu dCBzZWVkbGVuKQotKwl7Ci0rCUZJUFNfeDkzMV9zZWVkKHNlZWQsIHNlZWRsZW4pOwotKwlyZXR1 cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19kb19yYW5kX2FkZChjb25zdCB2b2lkICpz ZWVkLCBpbnQgc2VlZGxlbiwKLSsJCQkJCWRvdWJsZSBhZGRfZW50cm9weSkKLSsJewotKwlGSVBT X3g5MzFfc2VlZChzZWVkLCBzZWVkbGVuKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMg Y29uc3QgUkFORF9NRVRIT0QgcmFuZF94OTMxX21ldGg9Ci0rICAgIHsKLSsgICAgZmlwc19kb19y YW5kX3NlZWQsCi0rICAgIEZJUFNfeDkzMV9ieXRlcywKLSsgICAgRklQU194OTMxX3Jlc2V0LAot KyAgICBmaXBzX2RvX3JhbmRfYWRkLAotKyAgICBGSVBTX3g5MzFfYnl0ZXMsCi0rICAgIEZJUFNf eDkzMV9zdGF0dXMKLSsgICAgfTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU194OTMxX21l dGhvZCh2b2lkKQotK3sKLSsgIHJldHVybiAmcmFuZF94OTMxX21ldGg7Ci0rfQotKwotKyNlbmRp ZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmguZmlwcyBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAotLS0tIG9wZW5zc2wtMS4wLjFh L2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjk3ODU4 MDYgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAkyMDEy LTA0LTIwIDA5OjA3OjA2LjI2OTc4NTgwNiArMDIwMAotQEAgLTAsMCArMSwxNDUgQEAKLSsvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot KyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24u Ci0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaWZuZGVmIEhFQURFUl9GSVBTX1JBTkRfSAotKyNk ZWZpbmUgSEVBREVSX0ZJUFNfUkFORF9ICi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2lm ZGVmICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotK2ludCBGSVBTX3g5 MzFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4pOwotK2ludCBG SVBTX3g5MzFfc2VlZChjb25zdCB2b2lkICpidWYsIGludCBudW0pOwotK2ludCBGSVBTX3g5MzFf Ynl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgb3V0bGVuKTsKLSsKLStpbnQgRklQU194OTMx X3Rlc3RfbW9kZSh2b2lkKTsKLSt2b2lkIEZJUFNfeDkzMV9yZXNldCh2b2lkKTsKLStpbnQgRklQ U194OTMxX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCk7Ci0rCi0raW50IEZJUFNfeDkzMV9zdGF0 dXModm9pZCk7Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfeDkzMV9tZXRob2Qodm9pZCk7 Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QgZHJiZ19jdHhfc3QgRFJCR19DVFg7Ci0rLyogRFJCRyBleHRl cm5hbCBmbGFncyAqLwotKy8qIEZsYWcgZm9yIENUUiBtb2RlIG9ubHk6IHVzZSBkZXJpdmF0aW9u IGZ1bmN0aW9uIGN0cl9kZiAqLwotKyNkZWZpbmUJRFJCR19GTEFHX0NUUl9VU0VfREYJCTB4MQot Ky8qIFBSTkcgaXMgaW4gdGVzdCBzdGF0ZSAqLwotKyNkZWZpbmUJRFJCR19GTEFHX1RFU1QJCQkw eDIKLSsKLStEUkJHX0NUWCAqRklQU19kcmJnX25ldyhpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZs YWdzKTsKLStpbnQgRklQU19kcmJnX2luaXQoRFJCR19DVFggKmRjdHgsIGludCB0eXBlLCB1bnNp Z25lZCBpbnQgZmxhZ3MpOwotK2ludCBGSVBTX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRj dHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKTsKLStp bnQgRklQU19kcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAq YWRpbiwgc2l6ZV90IGFkaW5sZW4pOwotK2ludCBGSVBTX2RyYmdfZ2VuZXJhdGUoRFJCR19DVFgg KmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsJCQlpbnQgcHJlZGlj dGlvbl9yZXNpc3RhbmNlLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBh ZGlubGVuKTsKLSsKLStpbnQgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgp OwotK3ZvaWQgRklQU19kcmJnX2ZyZWUoRFJCR19DVFggKmRjdHgpOwotKwotK2ludCBGSVBTX2Ry Ymdfc2V0X2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKLSsJc2l6ZV90ICgqZ2V0X2VudHJvcHkp KERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50cm9weSwg c2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKSwKLSsJdm9pZCAoKmNsZWFudXBfZW50cm9w eSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCi0rCXNp emVfdCBlbnRyb3B5X2Jsb2NrbGVuLAotKwlzaXplX3QgKCpnZXRfbm9uY2UpKERSQkdfQ1RYICpj dHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9s ZW4sIHNpemVfdCBtYXhfbGVuKSwKLSsJdm9pZCAoKmNsZWFudXBfbm9uY2UpKERSQkdfQ1RYICpj dHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pKTsKLSsKLStpbnQgRklQU19kcmJn X3NldF9yYW5kX2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKLSsJc2l6ZV90ICgqZ2V0X2FkaW4p KERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KSwKLSsJdm9pZCAoKmNsZWFudXBf YWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCi0r CWludCAoKnJhbmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQg bnVtKSwKLSsJaW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpjdHgsCi0rCQkJCWNvbnN0IHZv aWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpKTsKLSsKLSt2b2lkICpGSVBTX2RyYmdf Z2V0X2FwcF9kYXRhKERSQkdfQ1RYICpjdHgpOwotK3ZvaWQgRklQU19kcmJnX3NldF9hcHBfZGF0 YShEUkJHX0NUWCAqY3R4LCB2b2lkICphcHBfZGF0YSk7Ci0rc2l6ZV90IEZJUFNfZHJiZ19nZXRf YmxvY2tsZW5ndGgoRFJCR19DVFggKmRjdHgpOwotK2ludCBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3Ro KERSQkdfQ1RYICpkY3R4KTsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfY2hlY2tfaW50ZXJ2YWwoRFJC R19DVFggKmRjdHgsIGludCBpbnRlcnZhbCk7Ci0rdm9pZCBGSVBTX2RyYmdfc2V0X3Jlc2VlZF9p bnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKTsKLSsKLStpbnQgRklQU19kcmJn X2hlYWx0aF9jaGVjayhEUkJHX0NUWCAqZGN0eCk7Ci0rCi0rRFJCR19DVFggKkZJUFNfZ2V0X2Rl ZmF1bHRfZHJiZyh2b2lkKTsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19kcmJnX21ldGhvZCh2 b2lkKTsKLSsKLSsKLStpbnQgRklQU19yYW5kX3NldF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0Qg Km1ldGgpOwotK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfZ2V0X21ldGhvZCh2b2lkKTsK LSsKLSt2b2lkIEZJUFNfcmFuZF9zZXRfYml0cyhpbnQgbmJpdHMpOwotKwotK2ludCBGSVBTX3Jh bmRfc3RyZW5ndGgodm9pZCk7Ci0rCi0rLyogMS4wLjAgY29tcGF0IGZ1bmN0aW9ucyAqLwotK2lu dCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9T SVpFX1Qga2V5bGVuKTsKLStpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBGSVBT X1JBTkRfU0laRV9UIG51bSk7Ci0raW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpv dXQsIEZJUFNfUkFORF9TSVpFX1Qgb3V0bGVuKTsKLStpbnQgRklQU19yYW5kX3Rlc3RfbW9kZSh2 b2lkKTsKLSt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKTsKLStpbnQgRklQU19yYW5kX3NldF9k dCh1bnNpZ25lZCBjaGFyICpkdCk7Ci0raW50IEZJUFNfcmFuZF9zdGF0dXModm9pZCk7Ci0rY29u c3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9pZCk7Ci0rCi0rI2lmZGVmICBfX2Nw bHVzcGx1cwotK30KLSsjZW5kaWYKLSsjZW5kaWYKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaAotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBz L2ZpcHNfcmFuZF9sY2wuaC5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjY5Nzg1ODA2ICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oCTIwMTItMDQt MjAgMDk6MDc6MDYuMjY5Nzg1ODA2ICswMjAwCi1AQCAtMCwwICsxLDIxOSBAQAotKy8qIGZpcHMv cmFuZC9maXBzX3JhbmRfbGNsLmggKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5z b24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAq LwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsg KgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3Ry aWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0r ICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsg KiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcv KSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotK3R5cGVkZWYgc3RydWN0 IGRyYmdfaGFzaF9jdHhfc3QgRFJCR19IQVNIX0NUWDsKLSt0eXBlZGVmIHN0cnVjdCBkcmJnX2ht YWNfY3R4X3N0IERSQkdfSE1BQ19DVFg7Ci0rdHlwZWRlZiBzdHJ1Y3QgZHJiZ19jdHJfY3R4X3N0 IERSQkdfQ1RSX0NUWDsKLSsKLSsvKiA4ODggYml0cyBmcm9tIDEwLjEgdGFibGUgMiAqLwotKyNk ZWZpbmUgSEFTSF9QUk5HX01BWF9TRUVETEVOCTExMQotKwotK3N0cnVjdCBkcmJnX2hhc2hfY3R4 X3N0Ci0rCXsKLSsJY29uc3QgRVZQX01EICptZDsKLSsJRVZQX01EX0NUWCBtY3R4OwotKwl1bnNp Z25lZCBjaGFyIFZbSEFTSF9QUk5HX01BWF9TRUVETEVOXTsKLSsJdW5zaWduZWQgY2hhciBDW0hB U0hfUFJOR19NQVhfU0VFRExFTl07Ci0rCS8qIFRlbXBvcmFyeSB2YWx1ZSBzdG9yYWdlOiBzaG91 bGQgYWx3YXlzIGV4Y2VlZCBtYXggZGlnZXN0IGxlbmd0aCAqLwotKwl1bnNpZ25lZCBjaGFyIHZ0 bXBbSEFTSF9QUk5HX01BWF9TRUVETEVOXTsKLSsJfTsKLSsKLStzdHJ1Y3QgZHJiZ19obWFjX2N0 eF9zdAotKwl7Ci0rCWNvbnN0IEVWUF9NRCAqbWQ7Ci0rCUhNQUNfQ1RYIGhjdHg7Ci0rCXVuc2ln bmVkIGNoYXIgS1tFVlBfTUFYX01EX1NJWkVdOwotKwl1bnNpZ25lZCBjaGFyIFZbRVZQX01BWF9N RF9TSVpFXTsKLSsJfTsKLSsKLStzdHJ1Y3QgZHJiZ19jdHJfY3R4X3N0Ci0rCXsKLSsJQUVTX0tF WSBrczsKLSsJc2l6ZV90IGtleWxlbjsKLSsJdW5zaWduZWQgY2hhciBLWzMyXTsKLSsJdW5zaWdu ZWQgY2hhciBWWzE2XTsKLSsJLyogVGVtcCB2YXJpYWJsZXMgdXNlZCBieSBkZXJpdmF0aW9uIGZ1 bmN0aW9uICovCi0rCUFFU19LRVkgZGZfa3M7Ci0rCUFFU19LRVkgZGZfa3hrczsKLSsJLyogVGVt cG9yYXJ5IGJsb2NrIHN0b3JhZ2UgdXNlZCBieSBjdHJfZGYgKi8KLSsJdW5zaWduZWQgY2hhciBi bHRtcFsxNl07Ci0rCXNpemVfdCBibHRtcF9wb3M7Ci0rCXVuc2lnbmVkIGNoYXIgS1hbNDhdOwot Kwl9OwotKwotKy8qIERSQkcgaW50ZXJuYWwgZmxhZ3MgKi8KLSsKLSsvKiBGdW5jdGlvbnMgc2hv dWxkbid0IGNhbGwgZXJyIGxpYnJhcnkgKi8KLSsjZGVmaW5lCURSQkdfRkxBR19OT0VSUgkJCTB4 MQotKy8qIEN1c3RvbSByZXNlZWQgY2hlY2tpbmcgKi8KLSsjZGVmaW5lCURSQkdfQ1VTVE9NX1JF U0VFRAkJMHgyCi0rCi0rLyogRFJCRyBzdGF0dXMgdmFsdWVzICovCi0rLyogbm90IGluaXRpYWxp c2VkICovCi0rI2RlZmluZSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VECTAKLSsvKiBvayBhbmQg cmVhZHkgdG8gZ2VuZXJhdGUgcmFuZG9tIGJpdHMgKi8KLSsjZGVmaW5lIERSQkdfU1RBVFVTX1JF QURZCQkxCi0rLyogcmVzZWVkIHJlcXVpcmVkICovCi0rI2RlZmluZSBEUkJHX1NUQVRVU19SRVNF RUQJCTIKLSsvKiBmYXRhbCBlcnJvciBjb25kaXRpb24gKi8KLSsjZGVmaW5lIERSQkdfU1RBVFVT X0VSUk9SCQkzCi0rCi0rLyogQSBkZWZhdWx0IG1heGltdW0gbGVuZ3RoOiBsYXJnZXIgdGhhbiBh bnkgcmVhc29uYWJsZSB2YWx1ZSB1c2VkIGluIHByYXRpY2UgKi8KLSsKLSsjZGVmaW5lIERSQkdf TUFYX0xFTkdUSAkJCTB4N2ZmZmZmZjAKLSsvKiBNYXhpbXVtIERSQkcgYmxvY2sgbGVuZ3RoOiBh bGwgbWQgc2l6ZXMgYXJlIGJpZ2dlciB0aGFuIGNpcGhlciBibG9ja3Mgc2l6ZXMKLSsgKiBzbyB1 c2UgbWF4IGRpZ2VzdCBsZW5ndGguCi0rICovCi0rI2RlZmluZSBEUkJHX01BWF9CTE9DSwkJCUVW UF9NQVhfTURfU0laRQotKwotKyNkZWZpbmUgRFJCR19IRUFMVEhfSU5URVJWQUwJCSgxIDw8IDI0 KQotKwotKy8qIERSQkcgY29udGV4dCBzdHJ1Y3R1cmUgKi8KLSsKLStzdHJ1Y3QgZHJiZ19jdHhf c3QKLSsJewotKwkvKiBGaXJzdCB0eXBlcyBjb21tb24gdG8gYWxsIGltcGxlbWVudGF0aW9ucyAq LwotKwkvKiBEUkJHIHR5cGU6IGEgTklEIGZvciB0aGUgdW5kZXJseWluZyBhbGdvcml0aG0gKi8K LSsJaW50IHR5cGU7Ci0rCS8qIFZhcmlvdXMgZXh0ZXJuYWwgZmxhZ3MgKi8KLSsJdW5zaWduZWQg aW50IHhmbGFnczsKLSsJLyogVmFyaW91cyBpbnRlcm5hbCB1c2Ugb25seSBmbGFncyAqLwotKwl1 bnNpZ25lZCBpbnQgaWZsYWdzOwotKwkvKiBVc2VkIGZvciBwZXJpb2RpYyBoZWFsdGggY2hlY2tz ICovCi0rCWludCBoZWFsdGhfY2hlY2tfY250LCBoZWFsdGhfY2hlY2tfaW50ZXJ2YWw7Ci0rCi0r CS8qIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgc2V0dXAgYnkgbWVjaGFuaXNtIGRyYmdf aW5pdCgpIGNhbGwgKi8KLSsJaW50IHN0cmVuZ3RoOwotKwlzaXplX3QgYmxvY2tsZW5ndGg7Ci0r CXNpemVfdCBtYXhfcmVxdWVzdDsKLSsKLSsJc2l6ZV90IG1pbl9lbnRyb3B5LCBtYXhfZW50cm9w eTsKLSsJc2l6ZV90IG1pbl9ub25jZSwgbWF4X25vbmNlOwotKwlzaXplX3QgbWF4X3BlcnMsIG1h eF9hZGluOwotKwl1bnNpZ25lZCBpbnQgcmVzZWVkX2NvdW50ZXI7Ci0rCXVuc2lnbmVkIGludCBy ZXNlZWRfaW50ZXJ2YWw7Ci0rCXNpemVfdCBzZWVkbGVuOwotKwlpbnQgc3RhdHVzOwotKwkvKiBB cHBsaWNhdGlvbiBkYXRhOiB0eXBpY2FsbHkgdXNlZCBieSB0ZXN0IGdldF9lbnRyb3B5ICovCi0r CXZvaWQgKmFwcF9kYXRhOwotKwkvKiBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBzdHJ1Y3R1cmVz ICovCi0rCXVuaW9uIAotKwkJewotKwkJRFJCR19IQVNIX0NUWCBoYXNoOwotKwkJRFJCR19ITUFD X0NUWCBobWFjOwotKwkJRFJCR19DVFJfQ1RYICBjdHI7Ci0rCQl9IGQ7Ci0rCS8qIEluaXRpYWxp YXNlIFBSTkcgYW5kIHNldHVwIGNhbGxiYWNrcyBiZWxvdyAqLwotKwlpbnQgKCppbml0KShEUkJH X0NUWCAqY3R4LCBpbnQgbmlkLCBpbnQgc2VjdXJpdHksIHVuc2lnbmVkIGludCBmbGFncyk7Ci0r CS8qIEludGFudGlhdGUgUFJORyAqLwotKwlpbnQgKCppbnN0YW50aWF0ZSkoRFJCR19DVFggKmN0 eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAotKwkJCQlj b25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuLAotKwkJCQljb25zdCB1 bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbik7Ci0rCS8qIHJlc2VlZCAqLwotKwlp bnQgKCpyZXNlZWQpKERSQkdfQ1RYICpjdHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVu dCwgc2l6ZV90IGVudGxlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90 IGFkaW5sZW4pOwotKwkvKiBnZW5lcmF0IG91dHB1dCAqLwotKwlpbnQgKCpnZW5lcmF0ZSkoRFJC R19DVFggKmN0eCwKLSsJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAotKwkJ CQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7Ci0rCS8qIHVuaW5z dGFudGlhdGUgKi8KLSsJaW50ICgqdW5pbnN0YW50aWF0ZSkoRFJCR19DVFggKmN0eCk7Ci0rCi0r CS8qIEVudHJvcHkgc291cmNlIGJsb2NrIGxlbmd0aCAqLwotKwlzaXplX3QgZW50cm9weV9ibG9j a2xlbjsKLSsKLSsJLyogZW50cm9weSBnYXRoZXJpbmcgZnVuY3Rpb24gKi8KLSsJc2l6ZV90ICgq Z2V0X2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlp bnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKTsKLSsJLyogSW5kaWNh dGVzIHdlIGhhdmUgZmluaXNoZWQgd2l0aCBlbnRyb3B5IGJ1ZmZlciAqLwotKwl2b2lkICgqY2xl YW51cF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBv bGVuKTsKLSsKLSsJLyogbm9uY2UgZ2F0aGVyaW5nIGZ1bmN0aW9uICovCi0rCXNpemVfdCAoKmdl dF9ub25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWludCBl bnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pOwotKwkvKiBJbmRpY2F0ZXMg d2UgaGF2ZSBmaW5pc2hlZCB3aXRoIG5vbmNlIGJ1ZmZlciAqLwotKwl2b2lkICgqY2xlYW51cF9u b25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7Ci0r Ci0rCS8qIENvbnRpbnVvdXMgcmFuZG9tIG51bWJlciB0ZXN0IHRlbXBvcmFyeSBhcmVhICovCi0r CS8qIExhc3QgYmxvY2sgKi8JCi0rCXVuc2lnbmVkIGNoYXIgbGJbRVZQX01BWF9NRF9TSVpFXTsK LSsJLyogc2V0IGlmIGxiIGlzIHZhbGlkICovCi0rCWludCBsYl92YWxpZDsKLSsKLSsJLyogQ2Fs bGJhY2tzIHVzZWQgd2hlbiBjYWxsZWQgdGhyb3VnaCBSQU5EIGludGVyZmFjZSAqLwotKwkvKiBH ZXQgYW55IGFkZGl0aW9uYWwgaW5wdXQgZm9yIGdlbmVyYXRlICovCi0rCXNpemVfdCAoKmdldF9h ZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCk7Ci0rCXZvaWQgKCpjbGVh bnVwX2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4p OwotKwkvKiBDYWxsYmFjayBmb3IgUkFORF9zZWVkKCksIFJBTkRfYWRkKCkgKi8KLSsJaW50ICgq cmFuZF9zZWVkX2NiKShEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpidWYsIGludCBudW0pOwot KwlpbnQgKCpyYW5kX2FkZF9jYikoRFJCR19DVFggKmN0eCwKLSsJCQkJY29uc3Qgdm9pZCAqYnVm LCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSk7Ci0rCX07Ci0rCi0rCi0raW50IGZpcHNfZHJiZ19j dHJfaW5pdChEUkJHX0NUWCAqZGN0eCk7Ci0raW50IGZpcHNfZHJiZ19oYXNoX2luaXQoRFJCR19D VFggKmRjdHgpOwotK2ludCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KTsKLStp bnQgZmlwc19kcmJnX2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwgdW5zaWduZWQgaW50IGZs YWdzKTsKLStpbnQgZmlwc19kcmJnX2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVu c2lnbmVkIGNoYXIgKm91dCk7Ci0rCi0rY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqRklQU19nZXRf ZGlnZXN0YnluaWQoaW50IG5pZCk7Ci0rCi0rY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKkZJ UFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpOwotKwotKyNkZWZpbmUgRklQU19kaWdlc3Rpbml0 IEVWUF9EaWdlc3RJbml0Ci0rI2RlZmluZSBGSVBTX2RpZ2VzdHVwZGF0ZSBFVlBfRGlnZXN0VXBk YXRlCi0rI2RlZmluZSBGSVBTX2RpZ2VzdGZpbmFsIEVWUF9EaWdlc3RGaW5hbAotKyNkZWZpbmUg TV9FVlBfTURfc2l6ZSBFVlBfTURfc2l6ZQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2ZpcHMvZmlwc19yYW5kX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlw c19yYW5kX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xp Yi5jLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNzA3ODU4MjggKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMJMjAxMi0wNC0yMCAwOTowNzowNi4y NzA3ODU4MjggKzAyMDAKLUBAIC0wLDAgKzEsMTkxIEBACi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3Ns Lm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z Ci0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0r ICovCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZV9vcy5o IgotKwotKy8qIEZJUFMgQVBJIGZvciBQUk5HIHVzZS4gU2ltaWxhciB0byBSQU5EIGZ1bmN0aW9u YWxpdHkgYnV0IHdpdGhvdXQKLSsgKiBFTkdJTkUgYW5kIGFkZGl0aW9uYWwgY2hlY2tpbmcgZm9y IG5vbi1GSVBTIHJhbmQgbWV0aG9kcy4KLSsgKi8KLSsKLStzdGF0aWMgY29uc3QgUkFORF9NRVRI T0QgKmZpcHNfcmFuZF9tZXRoID0gTlVMTDsKLStzdGF0aWMgaW50IGZpcHNfYXBwcm92ZWRfcmFu ZF9tZXRoID0gMDsKLStzdGF0aWMgaW50IGZpcHNfcmFuZF9iaXRzID0gMDsKLSsKLSsvKiBBbGxv d3MgYXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgbnVtYmVyIG9mIGJpdHMgYW5kIHVzZXMgbm9uLUZJ UFMgbWV0aG9kcyAqLwotK3ZvaWQgRklQU19yYW5kX3NldF9iaXRzKGludCBuYml0cykKLSsJewot KwlmaXBzX3JhbmRfYml0cyA9IG5iaXRzOwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zZXRfbWV0 aG9kKGNvbnN0IFJBTkRfTUVUSE9EICptZXRoKQotKwl7Ci0rCWlmICghZmlwc19yYW5kX2JpdHMp Ci0rCQl7Ci0rCQlpZiAobWV0aCA9PSBGSVBTX2RyYmdfbWV0aG9kKCkpCi0rCQkJZmlwc19hcHBy b3ZlZF9yYW5kX21ldGggPSAxOwotKwkJZWxzZSBpZiAobWV0aCA9PSBGSVBTX3g5MzFfbWV0aG9k KCkpCi0rCQkJZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAyOwotKwkJZWxzZQotKwkJCXsKLSsJ CQlmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDA7Ci0rCQkJaWYgKEZJUFNfbW9kdWxlX21vZGUo KSkKLSsJCQkJewotKwkJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU0VUX01FVEhPRCwKLSsJ CQkJCQlGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJ CQl9Ci0rCQl9Ci0rCWZpcHNfcmFuZF9tZXRoID0gbWV0aDsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsK LStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX2dldF9tZXRob2Qodm9pZCkKLSsJewotKwly ZXR1cm4gZmlwc19yYW5kX21ldGg7Ci0rCX0KLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19y YW5kX21ldGhvZCh2b2lkKQotKwl7Ci0rCXJldHVybiBGSVBTX3JhbmRfZ2V0X21ldGhvZCgpOwot Kwl9Ci0rCi0rdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCkKLSsJewotKwlpZiAoZmlwc19yYW5k X21ldGggJiYgZmlwc19yYW5kX21ldGgtPmNsZWFudXApCi0rCQlmaXBzX3JhbmRfbWV0aC0+Y2xl YW51cCgpOwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgRklQ U19SQU5EX1NJWkVfVCBudW0pCi0rCXsKLSsJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAm JiBGSVBTX21vZHVsZV9tb2RlKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRf U0VFRCwgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYg KGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5zZWVkKQotKwkJZmlwc19yYW5kX21l dGgtPnNlZWQoYnVmLG51bSk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rdm9pZCBGSVBTX3JhbmRf YWRkKGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpCi0rCXsKLSsJaWYg KCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpCi0rCQl7Ci0r CQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfQURELCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsK LSsJCXJldHVybjsKLSsJCX0KLSsJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRo LT5hZGQpCi0rCQlmaXBzX3JhbmRfbWV0aC0+YWRkKGJ1ZixudW0sZW50cm9weSk7Ci0rCX0KLSsK LStpbnQgRklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgRklQU19SQU5EX1NJWkVf VCBudW0pCi0rCXsKLSsJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVs ZV9tb2RlKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfQllURVMsIEZJUFNf Ul9OT05fRklQU19NRVRIT0QpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmIChmaXBzX3JhbmRf bWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+Ynl0ZXMpCi0rCQlyZXR1cm4gZmlwc19yYW5kX21ldGgt PmJ5dGVzKGJ1ZixudW0pOwotKwlyZXR1cm4gMDsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfcHNl dWRvX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IG51bSkKLSsJewotKwlpZiAoIWZpcHNf YXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJCXsKLSsJCUZJUFNl cnIoRklQU19GX0ZJUFNfUkFORF9QU0VVRE9fQllURVMsIEZJUFNfUl9OT05fRklQU19NRVRIT0Qp OwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRf bWV0aC0+cHNldWRvcmFuZCkKLSsJCXJldHVybiBmaXBzX3JhbmRfbWV0aC0+cHNldWRvcmFuZChi dWYsbnVtKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zdGF0dXModm9p ZCkKLSsJewotKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21v ZGUoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9TVEFUVVMsIEZJUFNfUl9O T05fRklQU19NRVRIT0QpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmIChmaXBzX3JhbmRfbWV0 aCAmJiBmaXBzX3JhbmRfbWV0aC0+c3RhdHVzKQotKwkJcmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5z dGF0dXMoKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsKLSsvKiBSZXR1cm4gaW5zdGFudGlhdGVkIHN0 cmVuZ3RoIG9mIFBSTkcuIEZvciBEUkJHIHRoaXMgaXMgYW4gaW50ZXJuYWwKLSsgKiBwYXJhbWV0 ZXIuIEZvciBYOS4zMSBQUk5HIGl0IGlzIDgwIGJpdHMgKGZyb20gU1A4MDAtMTMxKS4gQW55IG90 aGVyCi0rICogdHlwZSBvZiBQUk5HIGlzIG5vdCBhcHByb3ZlZCBhbmQgcmV0dXJucyAwIGluIEZJ UFMgbW9kZSBhbmQgbWF4aW11bQotKyAqIDI1NiBvdXRzaWRlIEZJUFMgbW9kZS4KLSsgKi8KLSsK LStpbnQgRklQU19yYW5kX3N0cmVuZ3RoKHZvaWQpCi0rCXsKLSsJaWYgKGZpcHNfcmFuZF9iaXRz KQotKwkJcmV0dXJuIGZpcHNfcmFuZF9iaXRzOwotKwlpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21l dGggPT0gMSkKLSsJCXJldHVybiBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKEZJUFNfZ2V0X2RlZmF1 bHRfZHJiZygpKTsKLSsJZWxzZSBpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPT0gMikKLSsJ CXJldHVybiA4MDsKLSsJZWxzZSBpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPT0gMCkKLSsJ CXsKLSsJCWlmIChGSVBTX21vZHVsZV9tb2RlKCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQllbHNlCi0r CQkJcmV0dXJuIDI1NjsKLSsJCX0KLSsJcmV0dXJuIDA7Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MWEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYu MjcwNzg1ODI4ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19yYW5k X3NlbGZ0ZXN0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNzA3ODU4MjggKzAyMDAKLUBAIC0wLDAg KzEsMTgzIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICog ICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu Ci0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19y YW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsKLSsKLSsKLSt0eXBlZGVmIHN0cnVjdAotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgRFRbMTZdOwot Kwl1bnNpZ25lZCBjaGFyIFZbMTZdOwotKwl1bnNpZ25lZCBjaGFyIFJbMTZdOwotKwl9IEFFU19Q Uk5HX1RWOwotKwotKy8qIFRoZSBmb2xsb3dpbmcgdGVzdCB2ZWN0b3JzIGFyZSB0YWtlbiBkaXJl Y3RseSBmcm9tIHRoZSBSR05WUyBzcGVjICovCi0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVz XzEyOF9rZXlbMTZdID0KLSsJCXsweGYzLDB4YjEsMHg2NiwweDZkLDB4MTMsMHg2MCwweDcyLDB4 NDIsCi0rCQkgMHhlZCwweDA2LDB4MWMsMHhhYiwweGI4LDB4ZDQsMHg2MiwweDAyfTsKLSsKLStz dGF0aWMgQUVTX1BSTkdfVFYgYWVzXzEyOF90diA9IAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7 MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAotKwkJIDB4ZDcsMHgxZCww eDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmOX0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweDgwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4NTksMHg1MywweDFl LDB4ZDEsMHgzYiwweGIwLDB4YzAsMHg1NSwKLSsJCSAweDg0LDB4NzksMHg2NiwweDg1LDB4YzEs MHgyZiwweDc2LDB4NDF9Ci0rCX07Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9r ZXlbMjRdID0KLSsJCXsweDE1LDB4ZDgsMHg3OCwweDBkLDB4NjIsMHhkMywweDI1LDB4NmUsCi0r CQkgMHg0NCwweDY0LDB4MTAsMHgxMywweDYwLDB4MmIsMHhhOSwweGJjLAotKwkJIDB4NGEsMHhm YiwweGNhLDB4ZWIsMHg0YywweDhiLDB4OTksMHgzYn07Ci0rCi0rc3RhdGljIEFFU19QUk5HX1RW IGFlc18xOTJfdHYgPSAKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZmLDB4 ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3 OCwweGYzLDB4NGJ9LAotKwkJCQkvKiBWICovCi0rCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDE3LDB4MDcsMHhkNSwweDI4LDB4MTksMHg3OSww eDFlLDB4ZWYsCi0rCQkgMHhhNSwweDBjLDB4YmYsMHgyNSwweGU1LDB4NTYsMHhiNCwweDkzfQot Kwl9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfa2V5WzMyXSA9Ci0rCQl7MHg2 ZCwweDE0LDB4MDYsMHg2YywweGI2LDB4ZDgsMHgyMSwweDJkLAotKwkJIDB4ODIsMHg4ZCwweGZh LDB4ZjIsMHg3YSwweDAzLDB4YjcsMHg5ZiwKLSsJCSAweDBjLDB4YzcsMHgzZSwweGNkLDB4NzYs MHhlYiwweGVlLDB4YjUsCi0rCQkgMHgyMSwweDA1LDB4OGMsMHg0ZiwweDMxLDB4N2EsMHg4MCww eGJifTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzI1Nl90diA9Ci0rCXsKLSsJCQkJLyog RFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkg MHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDg4fSwKLSsJCQkJLyogViAqLwot KwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHgz NSwweGM3LDB4ZWYsMHhhNywweDc4LDB4NGQsMHgyOSwweGJjLAotKwkJIDB4ODIsMHg3OSwweDk5 LDB4ZmIsMHhkMCwweGIzLDB4M2IsMHg3Mn0KLSsJfTsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9y bmcoKQotKyAgICB7Ci0rICAgIGFlc18xOTJfdHYuVlswXSsrOwotKyAgICB9Ci0rCi0rI2RlZmlu ZSBmaXBzX3g5MzFfdGVzdChrZXksIHR2KSBcCi0rCWRvX3g5MzFfdGVzdChrZXksIHNpemVvZiBr ZXksICZ0dikKLSsKLStzdGF0aWMgaW50IGRvX3g5MzFfdGVzdCh1bnNpZ25lZCBjaGFyICprZXks IGludCBrZXlsZW4sCi0rCQkJQUVTX1BSTkdfVFYgKnR2KQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIg UlsxNl0sIFZbMTZdOwotKwlpbnQgcnYgPSAxOwotKwltZW1jcHkoViwgdHYtPlYsIHNpemVvZihW KSk7Ci0rCWlmICghRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pKQotKwkJcmV0dXJuIDA7 Ci0rCWlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCkp Ci0rCQlyZXR1cm4gMTsKLSsJaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1RfWDkzMSwg a2V5bGVuLCBOVUxMKSkKLSsJCVZbMF0rKzsKLSsJRklQU194OTMxX3NlZWQoViwgMTYpOwotKwlG SVBTX3g5MzFfc2V0X2R0KHR2LT5EVCk7Ci0rCUZJUFNfeDkzMV9ieXRlcyhSLCAxNik7Ci0rCWlm IChtZW1jbXAoUiwgdHYtPlIsIDE2KSkKLSsJCXsKLSsJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19U RVNUX1g5MzEsIGtleWxlbiwgTlVMTCk7Ci0rCQlydiA9IDA7Ci0rCQl9Ci0rCWVsc2UgaWYgKCFm aXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKSkKLSsJCXJldHVy biAwOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStpbnQgRklQU19zZWxmdGVzdF94OTMxKCkKLSsJ ewotKwlpbnQgcnYgPSAxOwotKwlGSVBTX3g5MzFfcmVzZXQoKTsKLSsJaWYgKCFGSVBTX3g5MzFf dGVzdF9tb2RlKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5MzEs RklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFmaXBz X3g5MzFfdGVzdChhZXNfMTI4X2tleSxhZXNfMTI4X3R2KSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFm aXBzX3g5MzFfdGVzdChhZXNfMTkyX2tleSwgYWVzXzE5Ml90dikpCi0rCQlydiA9IDA7Ci0rCWlm ICghZmlwc194OTMxX3Rlc3QoYWVzXzI1Nl9rZXksIGFlc18yNTZfdHYpKQotKwkJcnYgPSAwOwot KwlGSVBTX3g5MzFfcmVzZXQoKTsKLSsJaWYgKCFydikKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNf U0VMRlRFU1RfWDkzMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJcmV0dXJuIHJ2OwotKwl9 Ci0rCi0raW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQpCi0rCXsKLSsJcmV0dXJuIEZJUFNfc2Vs ZnRlc3RfeDkzMSgpOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlw cy9maXBzX3JhbmR0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3Jh bmR0ZXN0LmMuZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3MDc4NTgyOCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYwkyMDEyLTA0LTIwIDA5OjA3 OjA2LjI3MDc4NTgyOCArMDIwMAotQEAgLTAsMCArMSwyNTAgQEAKLSsvKiBDb3B5cmlnaHQgKEMp IDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlv biB3cml0dGVuCi0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRo ZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2Nh cGVzIFNTTC4KLSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBh bmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBs eSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwg UlNBLAotKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4g IFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRp b24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhh dCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsg KiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmln aHQgbm90aWNlcyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJ ZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJl IGdpdmVuIGF0dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhl IGxpYnJhcnkgdXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwg bWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxp bmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0r ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzIHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhp YyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQu Y29tKSIKLSsgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlm IHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3Qg Y3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2lu ZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAg ICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUg YW4gYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsg KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF Ci0rICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQg ZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBv cgotKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0 aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3Ro ZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExp Y2VuY2UuXQotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxz dGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2lu Y2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsjaWZuZGVmIE9QRU5T U0xfRklQUwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmlu dGYoIk5vIEZJUFMgUkFORCBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsj ZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsKLSt0eXBlZGVmIHN0cnVjdAotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgRFRbMTZdOwotKwl1 bnNpZ25lZCBjaGFyIFZbMTZdOwotKwl1bnNpZ25lZCBjaGFyIFJbMTZdOwotKwl9IEFFU19QUk5H X01DVDsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X21jdF9rZXlbMTZd ID0KLSsJezB4OWYsMHg1YiwweDUxLDB4MjAsMHgwYiwweGYzLDB4MzQsMHhiNSwKLSsJIDB4ZDgs MHgyYiwweGU4LDB4YzMsMHg3MiwweDU1LDB4YzgsMHg0OH07Ci0rCi0rc3RhdGljIGNvbnN0IEFF U19QUk5HX01DVCBhZXNfMTI4X21jdF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7MHg2MywweDc2 LDB4YmIsMHhlNSwweDI5LDB4MDIsMHhiYSwweDNiLAotKwkgMHg2NywweGM5LDB4MjUsMHhmYSww eDcwLDB4MWYsMHgxMSwweGFjfSwKLSsJCQkvKiBWICovCi0rCXsweDU3LDB4MmMsMHg4ZSwweDc2 LDB4ODcsMHgyNiwweDQ3LDB4OTcsCi0rCSAweDdlLDB4NzQsMHhmYiwweGRkLDB4YzQsMHg5NSww eDAxLDB4ZDF9LAotKwkJCS8qIFIgKi8KLSsJezB4NDgsMHhlOSwweGJkLDB4MGQsMHgwNiwweGVl LDB4MTgsMHhmYiwKLSsJIDB4ZTQsMHg1NywweDkwLDB4ZDUsMHhjMywweGZjLDB4OWIsMHg3M30K LSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbWN0X2tleVsyNF0g PQotKwl7MHhiNywweDZjLDB4MzQsMHhkMSwweDA5LDB4NjcsMHhhYiwweDczLAotKwkgMHg0ZCww eDVhLDB4ZDUsMHgzNCwweDk4LDB4MTYsMHgwYiwweDkxLAotKwkgMHhiYywweDM1LDB4NTEsMHgx NiwweDZiLDB4YWUsMHg5MywweDhhfTsKLSsKLStzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFl c18xOTJfbWN0X3R2ID0gewotKwkJCS8qIERUICovCi0rCXsweDg0LDB4Y2UsMHgyMiwweDdkLDB4 OTEsMHg1YSwweGEzLDB4YzksCi0rCSAweDg0LDB4M2MsMHgwYSwweGIzLDB4YTksMHg2MywweDE1 LDB4NTJ9LAotKwkJCS8qIFYgKi8KLSsJezB4YjYsMHhhZiwweGU2LDB4OGYsMHg5OSwweDllLDB4 OTAsMHg2NCwKLSsJIDB4ZGQsMHhjNywweDdhLDB4YzEsMHhiYiwweDkwLDB4M2EsMHg2ZH0sCi0r CQkJLyogUiAqLwotKwl7MHhmYywweDg1LDB4NjAsMHg5YSwweDI5LDB4NmYsMHhlZiwweDIxLAot KwkgMHhkZCwweDg2LDB4MjAsMHgzMiwweDhhLDB4MjksMHg2ZiwweDQ3fQotK307Ci0rCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9tY3Rfa2V5WzMyXSA9Ci0rCXsweDliLDB4 MDUsMHhjOCwweDY4LDB4ZmYsMHg0NywweGY4LDB4M2EsCi0rCSAweGE2LDB4M2EsMHhhOCwweGNi LDB4NGUsMHg3MSwweGIyLDB4ZTAsCi0rCSAweGI4LDB4N2UsMHhmMSwweDM3LDB4YjYsMHhiNCww eGY2LDB4NmQsCi0rCSAweDg2LDB4MzIsMHhmYywweDFmLDB4NWUsMHgxZCwweDFlLDB4NTB9Owot KwotK3N0YXRpYyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYgPSB7Ci0rCQkJLyog RFQgKi8KLSsJezB4MzEsMHg2ZSwweDM1LDB4OWEsMHhiMSwweDQ0LDB4ZjAsMHhlZSwKLSsJIDB4 NjIsMHg2ZCwweDA0LDB4NDYsMHhlMCwweGEzLDB4OTIsMHg0Y30sCi0rCQkJLyogViAqLwotKwl7 MHg0ZiwweGNkLDB4YzEsMHg4NywweDgyLDB4MWYsMHg0ZCwweGExLAotKwkgMHgzZSwweDBlLDB4 NTYsMHg0NCwweDU5LDB4ZTgsMHg4MywweGNhfSwKLSsJCQkvKiBSICovCi0rCXsweGM4LDB4ODcs MHhjMiwweDYxLDB4NWIsMHhkMCwweGI5LDB4ZTEsCi0rCSAweGU3LDB4ZjMsMHg4YiwweGQ3LDB4 NWIsMHhkNSwweGYxLDB4OGR9Ci0rfTsKLSsKLStzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IHVuc2ln bmVkIGNoYXIgKmIsaW50IG4pCi0rICAgIHsKLSsgICAgd2hpbGUobi0tID4gMCkKLSsJewotKwlw cmludGYoIiAlMDJ4IiwqYisrKTsKLSsJfQotKyAgICB9Ci0rCi0rc3RhdGljIHZvaWQgY29tcGFy ZShjb25zdCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsY29uc3QgdW5zaWduZWQgY2hhciAqZXhwZWN0 ZWQsCi0rCQkgICAgaW50IG4pCi0rICAgIHsKLSsgICAgaW50IGk7Ci0rCi0rICAgIGZvcihpPTAg OyBpIDwgbiA7ICsraSkKLSsJaWYocmVzdWx0W2ldICE9IGV4cGVjdGVkW2ldKQotKwkgICAgewot KwkgICAgcHV0cygiUmFuZG9tIHRlc3QgZmFpbGVkLCBnb3Q6Iik7Ci0rCSAgICBkdW1wKHJlc3Vs dCxuKTsKLSsJICAgIHB1dHMoIlxuICAgICAgICAgICAgICAgZXhwZWN0ZWQ6Iik7Ci0rCSAgICBk dW1wKGV4cGVjdGVkLG4pOwotKwkgICAgcHV0Y2hhcignXG4nKTsKLSsJICAgIEVYSVQoMSk7Ci0r CSAgICB9Ci0rICAgIH0KLSsKLSsKLStzdGF0aWMgdm9pZCBydW5fdGVzdChjb25zdCB1bnNpZ25l ZCBjaGFyICprZXksIGludCBrZXlsZW4sCi0rCQkJCQkJCWNvbnN0IEFFU19QUk5HX01DVCAqdHYp Ci0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbMTZdLCBkdFsxNl07Ci0rICAgIGludCBp LCBqOwotKyAgICBGSVBTX3g5MzFfcmVzZXQoKTsKLSsgICAgRklQU194OTMxX3Rlc3RfbW9kZSgp OwotKyAgICBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7Ci0rICAgIEZJUFNfeDkzMV9z ZWVkKHR2LT5WLCAxNik7Ci0rICAgIG1lbWNweShkdCwgdHYtPkRULCAxNik7Ci0rICAgIGZvciAo aSA9IDA7IGkgPCAxMDAwMDsgaSsrKQotKwl7Ci0rICAgIAlGSVBTX3g5MzFfc2V0X2R0KGR0KTsK LSsJRklQU194OTMxX2J5dGVzKGJ1ZiwgMTYpOwotKwkvKiBJbmNyZW1lbnQgRFQgKi8KLSsJZm9y IChqID0gMTU7IGogPj0gMDsgai0tKQotKwkJewotKwkJZHRbal0rKzsKLSsJCWlmIChkdFtqXSkK LSsJCQlicmVhazsKLSsJCX0KLSsJfQotKwotKyAgICBjb21wYXJlKGJ1Zix0di0+UiwgMTYpOwot KyAgICB9Ci0rCi0raW50IG1haW4oKQotKwl7Ci0rCXJ1bl90ZXN0KGFlc18xMjhfbWN0X2tleSwg MTYsICZhZXNfMTI4X21jdF90dik7Ci0rCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMSBkb25lXG4i KTsKLSsJcnVuX3Rlc3QoYWVzXzE5Ml9tY3Rfa2V5LCAyNCwgJmFlc18xOTJfbWN0X3R2KTsKLSsJ cHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAyIGRvbmVcbiIpOwotKwlydW5fdGVzdChhZXNfMjU2X21j dF9rZXksIDMyLCAmYWVzXzI1Nl9tY3RfdHYpOwotKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDMg ZG9uZVxuIik7Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MWEvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3 MDc4NTgyOCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcnNhX3Nl bGZ0ZXN0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNzA3ODU4MjggKzAyMDAKLUBAIC0wLDAgKzEs NDQ0IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsg KiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0r ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG5bXSA9Ci0rIlx4MDBceEJCXHhG OFx4MkZceDA5XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4XHhBQ1x4MkJceDlEXHhBOFx4NzEiCi0r Ilx4RjdceDM2XHg4RFx4MDdceEVFXHhENFx4MTBceDQzXHhBNFx4NDBceEQ2XHhCNlx4RjBceDc0 XHg1NFx4RjUiCi0rIlx4MUZceEI4XHhERlx4QkFceEFGXHgwM1x4NUNceDAyXHhBQlx4NjFceEVB XHg0OFx4Q0VceEVCXHg2Rlx4Q0QiCi0rIlx4NDhceDc2XHhFRFx4NTJceDBEXHg2MFx4RTFceEVD XHg0Nlx4MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCi0rIlx4N0ZceEFGXHhCOFx4RTBceEEz XHhERlx4QzdceDM3XHg3Mlx4M0VceEU2XHhCNFx4QjdceEQ5XHgzQVx4MjUiCi0rIlx4ODRceEVF XHg2QVx4NjRceDlEXHgwNlx4MDlceDUzXHg3NFx4ODhceDM0XHhCMlx4NDVceDQ1XHg5OFx4Mzki Ci0rIlx4NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgxRlx4NTJceDdBXHg5QVx4NDFc eEY2XHhDMVx4NjgiCi0rIlx4N0ZceEUyXHg1M1x4NzJceDk4XHhDQVx4MkFceDhGXHg1OVx4NDZc eEY4XHhFNVx4RkRceDA5XHgxRFx4QkQiCi0rIlx4Q0IiOwotKwotK3N0YXRpYyBpbnQgY29ycnVw dF9yc2E7Ci0rCi0rc3RhdGljIGludCBzZXRyc2FrZXkoUlNBICprZXkpCi0rICAgIHsKLSsgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZVtdID0gIlx4MTEiOwotKwotKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBkW10gPQotKyJceDAwXHhBNVx4REFceEZDXHg1M1x4NDFceEZB XHhGMlx4ODlceEM0XHhCOVx4ODhceERCXHgzMFx4QzFceENEIgotKyJceEY4XHgzRlx4MzFceDI1 XHgxRVx4MDZceDY4XHhCNFx4MjdceDg0XHg4MVx4MzhceDAxXHg1N1x4OTZceDQxIgotKyJceEIy XHg5NFx4MTBceEIzXHhDN1x4OTlceDhEXHg2Qlx4QzRceDY1XHg3NFx4NUVceDVDXHgzOVx4MjZc eDY5IgotKyJceEQ2XHg4N1x4MERceEEyXHhDMFx4ODJceEE5XHgzOVx4RTNceDdGXHhEQ1x4Qjhc eDJFXHhDOVx4M0VceERBIgotKyJceEM5XHg3Rlx4RjNceEFEXHg1OVx4NTBceEFDXHhDRlx4QkNc eDExXHgxQ1x4NzZceEYxXHhBOVx4NTJceDk0IgotKyJceDQ0XHhFNVx4NkFceEFGXHg2OFx4QzVc eDZDXHgwOVx4MkNceEQzXHg4RFx4QzNceEJFXHhGNVx4RDJceDBBIgotKyJceDkzXHg5OVx4MjZc eEVEXHg0Rlx4NzRceEExXHgzRVx4RERceEZCXHhFMVx4QTFceENFXHhDQ1x4NDhceDk0IgotKyJc eEFGXHg5NFx4MjhceEMyXHhCN1x4QjhceDg4XHgzRlx4RTRceDQ2XHgzQVx4NEJceEM4XHg1Qlx4 MUNceEIzIgotKyJceEMxIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcFtd ID0KLSsiXHgwMFx4RUVceENGXHhBRVx4ODFceEIxXHhCOVx4QjNceEM5XHgwOFx4ODFceDBCXHgx MFx4QTFceEI1XHg2MCIKLSsiXHgwMVx4OTlceEVCXHg5Rlx4NDRceEFFXHhGNFx4RkRceEE0XHg5 M1x4QjhceDFBXHg5RVx4M0RceDg0XHhGNiIKLSsiXHgzMlx4MTJceDRFXHhGMFx4MjNceDZFXHg1 RFx4MUVceDNCXHg3RVx4MjhceEZBXHhFN1x4QUFceDA0XHgwQSIKLSsiXHgyRFx4NUJceDI1XHgy MVx4NzZceDQ1XHg5RFx4MUZceDM5XHg3NVx4NDFceEJBXHgyQVx4NThceEZCXHg2NSIKLSsiXHg5 OSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHFbXSA9Ci0rIlx4MDBceEM5 XHg3Rlx4QjFceEYwXHgyN1x4RjRceDUzXHhGNlx4MzRceDEyXHgzM1x4RUFceEFBXHhEMVx4RDki Ci0rIlx4MzVceDNGXHg2Q1x4NDJceEQwXHg4OFx4NjZceEIxXHhEMFx4NUFceDBGXHgyMFx4MzVc eDAyXHg4Qlx4OUQiCi0rIlx4ODZceDk4XHg0MFx4QjRceDE2XHg2Nlx4QjRceDJFXHg5Mlx4RUFc eDBEXHhBM1x4QjRceDMyXHgwNFx4QjUiCi0rIlx4Q0ZceENFXHgzM1x4NTJceDUyXHg0RFx4MDRc eDE2XHhBNVx4QTRceDQxXHhFN1x4MDBceEFGXHg0Nlx4MTUiCi0rIlx4MDMiOwotKwotKyAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXAxW10gPQotKyJceDU0XHg0OVx4NENceEE2XHgz RVx4QkFceDAzXHgzN1x4RTRceEUyXHg0MFx4MjNceEZDXHhENlx4OUFceDVBIgotKyJceEVCXHgw N1x4RERceERDXHgwMVx4ODNceEE0XHhEMFx4QUNceDlCXHg1NFx4QjBceDUxXHhGMlx4QjFceDNF IgotKyJceEQ5XHg0OVx4MDlceDc1XHhFQVx4QjdceDc0XHgxNFx4RkZceDU5XHhDMVx4RjdceDY5 XHgyRVx4OUFceDJFIgotKyJceDIwXHgyQlx4MzhceEZDXHg5MVx4MEFceDQ3XHg0MVx4NzRceEFE XHhDOVx4M0NceDFGXHg2N1x4QzlceDgxIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgZG1xMVtdID0KLSsiXHg0N1x4MUVceDAyXHg5MFx4RkZceDBBXHhGMFx4NzVceDAzXHg1 MVx4QjdceEY4XHg3OFx4ODZceDRDXHhBOSIKLSsiXHg2MVx4QURceEJEXHgzQVx4OEFceDdFXHg5 OVx4MUNceDVDXHgwNVx4NTZceEE5XHg0Q1x4MzFceDQ2XHhBNyIKLSsiXHhGOVx4ODBceDNGXHg4 Rlx4NkZceDhBXHhFM1x4NDJceEU5XHgzMVx4RkRceDhBXHhFNFx4N0FceDIyXHgwRCIKLSsiXHgx Qlx4OTlceEE0XHg5NVx4ODRceDk4XHgwN1x4RkVceDM5XHhGOVx4MjRceDVBXHg5OFx4MzZceERB XHgzRCI7Ci0rICAgIAotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpcW1wW10gPQot KyJceDAwXHhCMFx4NkNceDRGXHhEQVx4QkJceDYzXHgwMVx4MTlceDhEXHgyNlx4NUJceERCXHhB RVx4OTRceDIzIgotKyJceEIzXHg4MFx4RjJceDcxXHhGN1x4MzRceDUzXHg4OFx4NTBceDkzXHgw N1x4N0ZceENEXHgzOVx4RTJceDExIgotKyJceDlGXHhDOVx4ODZceDMyXHgxNVx4NEZceDU4XHg4 M1x4QjFceDY3XHhBOVx4NjdceEJGXHg0MFx4MkJceDRFIgotKyJceDlFXHgyRVx4MEZceDk2XHg1 Nlx4RTZceDk4XHhFQVx4MzZceDY2XHhFRFx4RkJceDI1XHg3OVx4ODBceDM5IgotKyJceEY3IjsK LSsKLSsgICAga2V5LT5uID0gQk5fYmluMmJuKG4sIHNpemVvZihuKS0xLCBrZXktPm4pOwotKyAg ICBpZiAoY29ycnVwdF9yc2EpCi0rCUJOX3NldF9iaXQoa2V5LT5uLCAxMDI0KTsKLSsgICAga2V5 LT5lID0gQk5fYmluMmJuKGUsIHNpemVvZihlKS0xLCBrZXktPmUpOwotKyAgICBrZXktPmQgPSBC Tl9iaW4yYm4oZCwgc2l6ZW9mKGQpLTEsIGtleS0+ZCk7Ci0rICAgIGtleS0+cCA9IEJOX2JpbjJi bihwLCBzaXplb2YocCktMSwga2V5LT5wKTsKLSsgICAga2V5LT5xID0gQk5fYmluMmJuKHEsIHNp emVvZihxKS0xLCBrZXktPnEpOwotKyAgICBrZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwgc2l6 ZW9mKGRtcDEpLTEsIGtleS0+ZG1wMSk7Ci0rICAgIGtleS0+ZG1xMSA9IEJOX2JpbjJibihkbXEx LCBzaXplb2YoZG1xMSktMSwga2V5LT5kbXExKTsKLSsgICAga2V5LT5pcW1wID0gQk5fYmluMmJu KGlxbXAsIHNpemVvZihpcW1wKS0xLCBrZXktPmlxbXApOwotKyAgICByZXR1cm4gMTsKLSsgICAg fQotKwotK3ZvaWQgRklQU19jb3JydXB0X3JzYSgpCi0rICAgIHsKLSsgICAgY29ycnVwdF9yc2Eg PSAxOwotKyAgICB9Ci0rCi0rLyogS25vd24gQW5zd2VyIFRlc3QgKEtBVCkgZGF0YSBmb3IgdGhl IGFib3ZlIFJTQSBwcml2YXRlIGtleSBzaWduaW5nCi0rICoga2F0X3Ricy4KLSsgKi8KLSsKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfdGJzW10gPSAiT3BlblNTTCBGSVBTIDE0MC0y IFB1YmxpYyBLZXkgUlNBIEtBVCI7Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X1JTQV9QU1NfU0hBMVtdID0gewotKyAgMHgyRCwgMHhBRiwgMHg2RSwgMHhDMiwgMHg5OCwgMHhG QiwgMHg4QSwgMHhBMSwgMHhCOSwgMHg0NiwgMHhEQSwgMHgwRiwKLSsgIDB4MDEsIDB4MUUsIDB4 MzcsIDB4OTMsIDB4QzIsIDB4NTUsIDB4MjcsIDB4RTQsIDB4MUQsIDB4RDIsIDB4OTAsIDB4QkIs Ci0rICAweEY0LCAweEJGLCAweDRBLCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAweEU4LCAweDBD LCAweEI3LCAweEY4LCAweEQzLAotKyAgMHhEMSwgMHhERiwgMHhFNywgMHhCRSwgMHg4MCwgMHgw NSwgMHhDMywgMHhCNSwgMHhDNywgMHg4MywgMHhENSwgMHg0QywKLSsgIDB4N0YsIDB4NDksIDB4 RkIsIDB4M0YsIDB4MjksIDB4OUIsIDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAsIDB4RDAsIDB4QTcs Ci0rICAweDBELCAweEE5LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAweEUzLCAweDVF LCAweDNGLCAweDlCLCAweEY1LAotKyAgMHhCNiwgMHhGMywgMHhGMiwgMHg1RSwgMHg3NCwgMHhD OSwgMHg4MywgMHg4MSwgMHg0NywgMHhGMCwgMHhDNSwgMHg0NSwKLSsgIDB4MEEsIDB4RTksIDB4 OEUsIDB4MzgsIDB4RDcsIDB4MTgsIDB4QzYsIDB4MkEsIDB4MEYsIDB4RjgsIDB4QjcsIDB4MzEs Ci0rICAweEQ2LCAweDU1LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAweEU2LCAweERC LCAweDlGLCAweEJBLCAweEU4LAotKyAgMHgyMywgMHhCNSwgMHg3RiwgMHhEQywgMHgwOCwgMHhF QSwgMHhENSwgMHgyNiwgMHgxRSwgMHgyMCwgMHgyNSwgMHg4NCwKLSsgIDB4MjYsIDB4QzYsIDB4 NzksIDB4QzksIDB4OUIsIDB4M0QsIDB4N0UsIDB4QTkKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTIyNFtdID0gewotKyAgMHgzOSwgMHg0QSwgMHg2 QSwgMHgyMCwgMHhCQywgMHhFOSwgMHgzMywgMHhFRCwgMHhFRiwgMHhDNSwgMHg1OCwgMHhBNywK LSsgIDB4RkUsIDB4ODEsIDB4QzQsIDB4MzYsIDB4NTAsIDB4OUEsIDB4MkMsIDB4ODIsIDB4OTgs IDB4MDgsIDB4OTUsIDB4RkEsCi0rICAweEIxLCAweDlFLCAweEQyLCAweDU1LCAweDYxLCAweDg3 LCAweDIxLCAweDU5LCAweDg3LCAweDdCLCAweDFGLCAweDU3LAotKyAgMHgzMCwgMHg5RCwgMHgw RCwgMHg0QSwgMHgwNiwgMHhFQiwgMHg1MiwgMHgzNywgMHg1NSwgMHg1NCwgMHgxQywgMHg4OSwK LSsgIDB4ODMsIDB4NzUsIDB4NTksIDB4NjUsIDB4NjQsIDB4OTAsIDB4MkUsIDB4MTYsIDB4Q0Ms IDB4ODYsIDB4MDUsIDB4RUUsCi0rICAweEIxLCAweEU2LCAweDdCLCAweEJBLCAweDE2LCAweDc1 LCAweDBELCAweDBDLCAweDY0LCAweDBCLCAweEFCLCAweDIyLAotKyAgMHgxNSwgMHg3OCwgMHg2 QiwgMHg2RiwgMHhBNCwgMHhGQiwgMHg3NywgMHg0MCwgMHg2NCwgMHg2MiwgMHhEMSwgMHhCNSwK LSsgIDB4MzcsIDB4MUUsIDB4RTAsIDB4M0QsIDB4QTgsIDB4RjksIDB4RDIsIDB4QkQsIDB4QUEs IDB4MzgsIDB4MjQsIDB4NDksCi0rICAweDU4LCAweEQyLCAweDc0LCAweDg1LCAweEY0LCAweEI1 LCAweDkzLCAweDhFLCAweEY1LCAweDAzLCAweEVBLCAweDJELAotKyAgMHhDOCwgMHg1MiwgMHhG QSwgMHhDRiwgMHg3RSwgMHgzNSwgMHhCMCwgMHg2QSwgMHhBRiwgMHg5NSwgMHhDMCwgMHgwMCwK LSsgIDB4NTQsIDB4NzYsIDB4M0QsIDB4MEMsIDB4OUMsIDB4QjIsIDB4RUUsIDB4QzAKLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTI1NltdID0gewot KyAgMHg2RCwgMHgzRCwgMHhCRSwgMHg4RiwgMHg2MCwgMHg2RCwgMHgyNSwgMHgxNCwgMHhGMCwg MHgzMSwgMHhFMywgMHg4OSwKLSsgIDB4MDAsIDB4OTcsIDB4RkEsIDB4OTksIDB4NzEsIDB4Mjgs IDB4RTUsIDB4MTAsIDB4MjUsIDB4OUEsIDB4RjMsIDB4OEYsCi0rICAweDdCLCAweEM1LCAweEE4 LCAweDRBLCAweDc0LCAweDUxLCAweDM2LCAweEUyLCAweDhELCAweDdELCAweDczLCAweDI4LAot KyAgMHhDMSwgMHg3NywgMHhDNiwgMHgyNywgMHg5NywgMHgwMCwgMHg4QiwgMHgwMCwgMHhBMywg MHg5NiwgMHg3MywgMHg0RSwKLSsgIDB4N0QsIDB4MkUsIDB4MkMsIDB4MzQsIDB4NjgsIDB4OEMs IDB4OEUsIDB4REYsIDB4OUQsIDB4NDksIDB4NDcsIDB4MDUsCi0rICAweEFCLCAweEY1LCAweDAx LCAweEQ2LCAweDgxLCAweDQ3LCAweDcwLCAweEY1LCAweDFELCAweDZELCAweDI2LCAweEJBLAot KyAgMHgyRiwgMHg3QSwgMHg1NCwgMHg1MywgMHg0RSwgMHhFRCwgMHg3MSwgMHhEOSwgMHg1QSwg MHhGMywgMHhEQSwgMHhCNiwKLSsgIDB4MEIsIDB4NDcsIDB4MzQsIDB4QUYsIDB4OTAsIDB4REMs IDB4QzgsIDB4RDksIDB4NkYsIDB4NTYsIDB4Q0QsIDB4OUYsCi0rICAweDIxLCAweEI3LCAweDdF LCAweEFELCAweDdDLCAweDJGLCAweDc1LCAweDUwLCAweDQ3LCAweDEyLCAweEU0LCAweDZELAot KyAgMHg1RiwgMHhCNywgMHgwMSwgMHhERiwgMHhDMywgMHgxMSwgMHg2QywgMHhBOSwgMHg5RSwg MHg0OSwgMHhCOSwgMHhGNiwKLSsgIDB4NzIsIDB4RjQsIDB4RjYsIDB4RUYsIDB4ODgsIDB4MUUs IDB4MkQsIDB4MUMKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff UFNTX1NIQTM4NFtdID0gewotKyAgMHg0MCwgMHhGQiwgMHhBMSwgMHgyMSwgMHhGNCwgMHhCMiwg MHg0MCwgMHg5QSwgMHhCNCwgMHgzMSwgMHhBOCwgMHhGMiwKLSsgIDB4RUMsIDB4MUMsIDB4QzQs IDB4QzgsIDB4N0MsIDB4MjIsIDB4NjUsIDB4OUMsIDB4NTcsIDB4NDUsIDB4Q0QsIDB4NUUsCi0r ICAweDg2LCAweDAwLCAweEY3LCAweDI1LCAweDc4LCAweERFLCAweERDLCAweDdBLCAweDcxLCAw eDQ0LCAweDlBLCAweENELAotKyAgMHhBQSwgMHgyNSwgMHhGNCwgMHhCMiwgMHhGQywgMHhGMCwg MHg3NSwgMHhEOSwgMHgyRiwgMHg3OCwgMHgyMywgMHg3RiwKLSsgIDB4NkYsIDB4MDIsIDB4RUYs IDB4QzEsIDB4QUYsIDB4QTYsIDB4MjgsIDB4MTYsIDB4MzEsIDB4REMsIDB4NDIsIDB4NkMsCi0r ICAweEIyLCAweDQ0LCAweEU1LCAweDRELCAweDY2LCAweEEyLCAweEU2LCAweDcxLCAweEYzLCAw eEFDLCAweDRGLCAweEZCLAotKyAgMHg5MSwgMHhDQSwgMHhGNSwgMHg3MCwgMHhFRiwgMHg2Qiwg MHg5RCwgMHhBNCwgMHhFRiwgMHhEOSwgMHgzRCwgMHgyRiwKLSsgIDB4M0EsIDB4QkUsIDB4ODks IDB4MzgsIDB4NTksIDB4MDEsIDB4QkEsIDB4REEsIDB4MzIsIDB4QUQsIDB4NDIsIDB4ODksCi0r ICAweDk4LCAweDhCLCAweDM5LCAweDQ0LCAweEYwLCAweEZDLCAweDM4LCAweEFDLCAweDg3LCAw eDFGLCAweENBLCAweDZGLAotKyAgMHg0OCwgMHhGNiwgMHhBRSwgMHhENywgMHg0NSwgMHhFRSwg MHhBRSwgMHg4OCwgMHgwRSwgMHg2MCwgMHhGNCwgMHg1NSwKLSsgIDB4NDgsIDB4NDQsIDB4RUUs IDB4MUYsIDB4OTAsIDB4MTgsIDB4NEIsIDB4RjEKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTUxMltdID0gewotKyAgMHgwNywgMHgxRSwgMHhEOCwg MHhENSwgMHgwNSwgMHhFOCwgMHhFNiwgMHhFNiwgMHg1NywgMHhBRSwgMHg2MywgMHg4QywKLSsg IDB4QzYsIDB4ODMsIDB4QjcsIDB4QTAsIDB4NTksIDB4QkIsIDB4RjIsIDB4QzYsIDB4OEYsIDB4 MTIsIDB4NTMsIDB4OUEsCi0rICAweDlCLCAweDU0LCAweDlFLCAweEIzLCAweEMxLCAweDFELCAw eDIzLCAweDRELCAweDUxLCAweEVELCAweDlFLCAweERELAotKyAgMHg0QiwgMHhGMywgMHg0Niwg MHg5QiwgMHg2QiwgMHhGNiwgMHg3QywgMHgyNCwgMHg2MCwgMHg3OSwgMHgyMywgMHgzOSwKLSsg IDB4MDEsIDB4MUMsIDB4NTEsIDB4Q0IsIDB4RDgsIDB4RTksIDB4OUEsIDB4MDEsIDB4NjcsIDB4 NUYsIDB4RkUsIDB4RDcsCi0rICAweDdDLCAweEUzLCAweDdGLCAweEVELCAweERCLCAweDg3LCAw eEJCLCAweEYwLCAweDNELCAweDc4LCAweDU1LCAweDYxLAotKyAgMHg1NywgMHhFMywgMHgwRiwg MHhFMywgMHhEMiwgMHg5RCwgMHgwQywgMHgyQSwgMHgyMCwgMHhCMCwgMHg4NSwgMHgxMywKLSsg IDB4QzUsIDB4NDcsIDB4MzQsIDB4MEQsIDB4MzIsIDB4MTUsIDB4QzgsIDB4QUUsIDB4OUEsIDB4 NkEsIDB4MzksIDB4NjMsCi0rICAweDJELCAweDYwLCAweEY1LCAweDRDLCAweERGLCAweDhBLCAw eDQ4LCAweDRCLCAweEJGLCAweEY0LCAweEE4LCAweEZFLAotKyAgMHg3NiwgMHhGMiwgMHgzMiwg MHgxQiwgMHg5QywgMHg3QywgMHhDQSwgMHhGRSwgMHg3RiwgMHg4MCwgMHhDMiwgMHg4OCwKLSsg IDB4NUMsIDB4OTcsIDB4NzAsIDB4QjQsIDB4MjYsIDB4QzksIDB4MTQsIDB4OEIKLSt9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMVtdID0gewotKyAgMHg3MSwg MHhFRSwgMHgxQSwgMHhDMCwgMHhGRSwgMHgwMSwgMHg5MywgMHg1NCwgMHg3OSwgMHg1QywgMHhG MiwgMHg0QywKLSsgIDB4NEEsIDB4RkQsIDB4MUEsIDB4MDUsIDB4OEYsIDB4NjQsIDB4QjEsIDB4 NkQsIDB4NjEsIDB4MzMsIDB4OEQsIDB4OUIsCi0rICAweEU3LCAweEZELCAweDYwLCAweEEzLCAw eDgzLCAweEI1LCAweEEzLCAweDUxLCAweDU1LCAweDc3LCAweDkwLCAweENGLAotKyAgMHhEQywg MHgyMiwgMHgzNywgMHg4RSwgMHhEMCwgMHhFMSwgMHhBRSwgMHgwOSwgMHhFMywgMHgzRCwgMHgx RSwgMHhGOCwKLSsgIDB4ODAsIDB4RDEsIDB4OEIsIDB4QzIsIDB4RUMsIDB4MEEsIDB4RDcsIDB4 NkIsIDB4ODgsIDB4OEIsIDB4OEIsIDB4QTEsCi0rICAweDIwLCAweDIyLCAweEJFLCAweDU5LCAw eDVCLCAweEUwLCAweDIzLCAweDI0LCAweEExLCAweDQ5LCAweDMwLCAweEJBLAotKyAgMHhBOSwg MHg5RSwgMHhFOCwgMHhCMSwgMHg4QSwgMHg2MiwgMHgxNiwgMHhCRiwgMHg0RSwgMHhDQSwgMHgy RSwgMHg0RSwKLSsgIDB4QkMsIDB4MjksIDB4QTgsIDB4NjcsIDB4MTMsIDB4QjcsIDB4OUYsIDB4 MUQsIDB4MDQsIDB4NDQsIDB4RTUsIDB4NUYsCi0rICAweDM1LCAweDA3LCAweDExLCAweEJDLCAw eEVELCAweDE5LCAweDM3LCAweDIxLCAweENGLCAweDIzLCAweDQ4LCAweDFGLAotKyAgMHg3Miwg MHgwNSwgMHhERSwgMHhFNiwgMHhFOCwgMHg3RiwgMHgzMywgMHg4QSwgMHg3NiwgMHg0QiwgMHgy RiwgMHg5NSwKLSsgIDB4REYsIDB4RjEsIDB4NUYsIDB4ODQsIDB4ODAsIDB4RDksIDB4NDYsIDB4 QjQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjI0W10g PSB7Ci0rICAweDYyLCAweEFBLCAweDc5LCAweEE5LCAweDE4LCAweDBFLCAweDVGLCAweDhDLCAw eEJCLCAweEI3LCAweDE1LCAweEY5LAotKyAgMHgyNSwgMHhCQiwgMHhGQSwgMHhENCwgMHgzQSwg MHgzNCwgMHhFRCwgMHg5RSwgMHhBMCwgMHhBOSwgMHgxOCwgMHg4RCwKLSsgIDB4NUIsIDB4NTUs IDB4OUEsIDB4N0UsIDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUsIDB4MUEsIDB4QzUsIDB4 ODksCi0rICAweDA4LCAweEUyLCAweDFCLCAweEJELCAweDYyLCAweDUwLCAweDE3LCAweDc2LCAw eDMwLCAweDJDLCAweDlFLCAweENELAotKyAgMHhBNCwgMHgwMiwgMHhBRCwgMHhCMSwgMHg2RCwg MHg0NCwgMHg2RCwgMHhENSwgMHhDNiwgMHg0NSwgMHg0MSwgMHhFNSwKLSsgIDB4RUUsIDB4MUYs IDB4OEQsIDB4N0UsIDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEsIDB4NUUsIDB4MEIsIDB4QTksIDB4 Q0MsCi0rICAweERCLCAweDU5LCAweDU1LCAweDg3LCAweDA5LCAweDI1LCAweDcwLCAweDg2LCAw eDg0LCAweDAyLCAweEM2LCAweDNCLAotKyAgMHgwQiwgMHg0NCwgMHg0QywgMHg0NiwgMHg5NSwg MHhGNCwgMHhGOCwgMHg1QSwgMHg5MSwgMHgyOCwgMHgzRSwgMHhCMiwKLSsgIDB4NTgsIDB4MkUs IDB4MDYsIDB4NDUsIDB4NDksIDB4RTAsIDB4OTIsIDB4RTIsIDB4QzAsIDB4NjYsIDB4RTYsIDB4 MzUsCi0rICAweEQ5LCAweDc5LCAweDdGLCAweDE3LCAweDVFLCAweDAyLCAweDczLCAweDA0LCAw eDc3LCAweDgyLCAweEU2LCAweERDLAotKyAgMHg0MCwgMHgyMSwgMHg4OSwgMHg4QiwgMHgzNywg MHgzRSwgMHgxRSwgMHg4RAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X1JTQV9TSEEyNTZbXSA9IHsKLSsgIDB4MEQsIDB4NTUsIDB4RTIsIDB4QUEsIDB4ODEsIDB4REIs IDB4OEUsIDB4ODIsIDB4MDUsIDB4MTcsIDB4QTUsIDB4MjMsCi0rICAweEU3LCAweDNCLCAweDFE LCAweEFGLCAweEZCLCAweDhDLCAweEQwLCAweDgxLCAweDIwLCAweDdCLCAweEFBLCAweDIzLAot KyAgMHg5MiwgMHg4NywgMHg4QywgMHhEMSwgMHg1MywgMHg4NSwgMHgxNiwgMHhEQywgMHhCRSwg MHhBRCwgMHg2RiwgMHgzNSwKLSsgIDB4OTgsIDB4MkQsIDB4NjksIDB4ODQsIDB4QkYsIDB4RDks IDB4OEEsIDB4MDEsIDB4MTcsIDB4NTgsIDB4QjIsIDB4NkUsCi0rICAweDJDLCAweDQ0LCAweDlC LCAweDkwLCAweEYxLCAweEZCLCAweDUxLCAweEU4LCAweDZBLCAweDkwLCAweDJELCAweDE4LAot KyAgMHgwRSwgMHhDMCwgMHg5MCwgMHgxMCwgMHgyNCwgMHhBOSwgMHgxRCwgMHhCMywgMHg1OCwg MHg3QSwgMHg5MSwgMHgzMCwKLSsgIDB4QkUsIDB4MjIsIDB4QzcsIDB4RDMsIDB4RUMsIDB4QzMs IDB4MDksIDB4NUQsIDB4QkYsIDB4RTIsIDB4ODAsIDB4M0EsCi0rICAweDdDLCAweDg1LCAweEI0 LCAweEJDLCAweEQxLCAweEU5LCAweEYwLCAweDVDLCAweERFLCAweDgxLCAweEE2LCAweDM4LAot KyAgMHhCOCwgMHg0MiwgMHhCQiwgMHg4NiwgMHhDNSwgMHg5RCwgMHhDRSwgMHg3QywgMHgyQywg MHhFRSwgMHhEMSwgMHhEQSwKLSsgIDB4MjcsIDB4NDgsIDB4MkIsIDB4RjUsIDB4QUIsIDB4Qjks IDB4RjcsIDB4ODAsIDB4RDEsIDB4OTAsIDB4MjcsIDB4OTAsCi0rICAweEJELCAweDQ0LCAweDk3 LCAweDYwLCAweENELCAweDU3LCAweEMwLCAweDdBCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBrYXRfUlNBX1NIQTM4NFtdID0gewotKyAgMHgxRCwgMHhFMywgMHg2QSwgMHhE RCwgMHgyNywgMHg0QywgMHhDMCwgMHhBNSwgMHgyNywgMHhFRiwgMHhFNiwgMHgxRiwKLSsgIDB4 RDIsIDB4OTEsIDB4NjgsIDB4NTksIDB4MDQsIDB4QUUsIDB4QkQsIDB4OTksIDB4NjMsIDB4NTYs IDB4NDcsIDB4QzcsCi0rICAweDZGLCAweDIyLCAweDE2LCAweDQ4LCAweEQwLCAweEY5LCAweDE4 LCAweEE5LCAweENBLCAweEZBLCAweDVELCAweDVDLAotKyAgMHhBNywgMHg2NSwgMHg1MiwgMHg4 QSwgMHhDOCwgMHg0NCwgMHg3RSwgMHg4NiwgMHg1RCwgMHhBOSwgMHhBNiwgMHg1NSwKLSsgIDB4 NjUsIDB4M0UsIDB4RDksIDB4MkQsIDB4MDIsIDB4MzgsIDB4QTgsIDB4NzksIDB4MjgsIDB4N0Ys IDB4QjYsIDB4Q0YsCi0rICAweDgyLCAweERELCAweDdFLCAweDU1LCAweEUxLCAweEIxLCAweEJD LCAweEUyLCAweDE5LCAweDJCLCAweDMwLCAweEMyLAotKyAgMHgxQiwgMHgyQiwgMHhCMCwgMHg4 MiwgMHg0NiwgMHhBQywgMHg0QiwgMHhEMSwgMHhFMiwgMHg3RCwgMHhFQiwgMHg4QywKLSsgIDB4 RkYsIDB4OTUsIDB4RTksIDB4NkEsIDB4MUMsIDB4M0QsIDB4NEQsIDB4QkYsIDB4OEYsIDB4OEIs IDB4OUMsIDB4Q0QsCi0rICAweEVBLCAweDg1LCAweEVFLCAweDAwLCAweERDLCAweDFDLCAweEE3 LCAweEVCLCAweEQwLCAweDhGLCAweDk5LCAweEYxLAotKyAgMHgxNiwgMHgyOCwgMHgyNCwgMHg2 NCwgMHgwNCwgMHgzOSwgMHgyRCwgMHg1OCwgMHgxRSwgMHgzNywgMHhEQywgMHgwNCwKLSsgIDB4 QkQsIDB4MzEsIDB4QTIsIDB4MkYsIDB4QjMsIDB4MzUsIDB4NTYsIDB4QkYKLSt9OwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBNTEyW10gPSB7Ci0rICAweDY5LCAw eDUyLCAweDFCLCAweDUxLCAweDVFLCAweDA2LCAweENBLCAweDlCLCAweDE2LCAweDUxLCAweDVE LCAweENGLAotKyAgMHg0OSwgMHgyNSwgMHg0QSwgMHhBMSwgMHg2QSwgMHg3NywgMHg0QywgMHgz NiwgMHg0MCwgMHhGOCwgMHhCMiwgMHg5QSwKLSsgIDB4MTUsIDB4RUEsIDB4NUMsIDB4RTUsIDB4 RTYsIDB4ODIsIDB4RTAsIDB4ODYsIDB4ODIsIDB4NkIsIDB4MzIsIDB4RjEsCi0rICAweDA0LCAw eEMxLCAweDVBLCAweDFBLCAweEVELCAweDFFLCAweDlBLCAweEI2LCAweDRDLCAweDU0LCAweDlG LCAweEQ4LAotKyAgMHg4RCwgMHhDQywgMHhBQywgMHg4QSwgMHhCQiwgMHg5QywgMHg4MiwgMHgz RiwgMHhBNiwgMHg1MywgMHg2MiwgMHhCNSwKLSsgIDB4ODAsIDB4RTIsIDB4QkMsIDB4REQsIDB4 NjcsIDB4MkIsIDB4RDksIDB4M0YsIDB4RTQsIDB4NzUsIDB4OTIsIDB4NkIsCi0rICAweEFGLCAw eDYyLCAweDdDLCAweDUyLCAweEYwLCAweEVFLCAweDMzLCAweERGLCAweDFCLCAweDFELCAweDQ3 LCAweEU2LAotKyAgMHg1OSwgMHg1NiwgMHhBNSwgMHhCOSwgMHg1QywgMHhFNiwgMHg3NywgMHg3 OCwgMHgxNiwgMHg2MywgMHg4NCwgMHgwNSwKLSsgIDB4NkYsIDB4MEUsIDB4MkIsIDB4MzEsIDB4 OUQsIDB4RjcsIDB4N0YsIDB4QjIsIDB4NjQsIDB4NzEsIDB4RTAsIDB4MkQsCi0rICAweDNFLCAw eDYyLCAweENFLCAweEI1LCAweDNGLCAweDg4LCAweERGLCAweDJELCAweEFCLCAweDk4LCAweDY1 LCAweDkxLAotKyAgMHhERiwgMHg3MCwgMHgxNCwgMHhBNSwgMHgzRiwgMHgzNiwgMHhBQiwgMHg4 NAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTFb XSA9IHsKLSsgIDB4ODYsIDB4QjQsIDB4MTgsIDB4QkEsIDB4RDEsIDB4ODAsIDB4QjYsIDB4N0Ms IDB4NDIsIDB4NDUsIDB4NEQsIDB4REYsCi0rICAweEU5LCAweDJELCAweEUxLCAweDgzLCAweDVG LCAweEI1LCAweDJGLCAweEM5LCAweENELCAweEM0LCAweEIyLCAweDc1LAotKyAgMHg4MCwgMHhB NCwgMHhGMSwgMHg0QSwgMHhFNywgMHg4MywgMHgxMiwgMHgxRSwgMHgxRSwgMHgxNCwgMHhCOCwg MHhBQywKLSsgIDB4MzUsIDB4RTIsIDB4QUEsIDB4MEIsIDB4NUMsIDB4RjgsIDB4MzgsIDB4NEQs IDB4MDQsIDB4RUUsIDB4QTksIDB4OTcsCi0rICAweDcwLCAweEZCLCAweDVFLCAweEU3LCAweEI3 LCAweEUzLCAweDYyLCAweDIzLCAweDRCLCAweDM4LCAweEJFLCAweEQ2LAotKyAgMHg1MywgMHgx NSwgMHhGNywgMHhERiwgMHg4NywgMHhCNCwgMHgwRSwgMHhDQywgMHhCMSwgMHgxQSwgMHgxMSwg MHgxOSwKLSsgIDB4RUUsIDB4NTEsIDB4Q0MsIDB4OTIsIDB4REQsIDB4QkMsIDB4NjMsIDB4Mjks IDB4NjMsIDB4MEMsIDB4NTksIDB4RDcsCi0rICAweDZGLCAweDRDLCAweDNDLCAweDM3LCAweDVC LCAweDM3LCAweDAzLCAweDYxLCAweDdELCAweDI0LCAweDFDLCAweDk5LAotKyAgMHg0OCwgMHhB RiwgMHg4MiwgMHhGRSwgMHgzMiwgMHg0MSwgMHg5QiwgMHhCMiwgMHhEQiwgMHhFQSwgMHhFRCwg MHg3NiwKLSsgIDB4OEUsIDB4NkUsIDB4Q0EsIDB4N0UsIDB4NEUsIDB4MTQsIDB4QkEsIDB4MzAs IDB4ODQsIDB4MUMsIDB4QjMsIDB4NjcsCi0rICAweEEzLCAweDI5LCAweDgwLCAweDcwLCAweDU0 LCAweDY4LCAweDdELCAweDQ5Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBr YXRfUlNBX1g5MzFfU0hBMjU2W10gPSB7Ci0rICAweDdFLCAweEEyLCAweDc3LCAweEZFLCAweEI4 LCAweDU0LCAweDhBLCAweEM3LCAweDdGLCAweDY0LCAweDU0LCAweDg5LAotKyAgMHhFNSwgMHg1 MiwgMHgxNSwgMHg4RSwgMHg1MiwgMHg5NiwgMHg0RSwgMHhBNiwgMHg1OCwgMHg5MiwgMHgxQywg MHhERCwKLSsgIDB4RUEsIDB4QTIsIDB4MkQsIDB4NUMsIDB4RDEsIDB4NjIsIDB4MDAsIDB4NDks IDB4MDUsIDB4OTUsIDB4NzMsIDB4Q0YsCi0rICAweDE2LCAweDc2LCAweDY4LCAweEY2LCAweEM2 LCAweDVFLCAweDgwLCAweEI4LCAweEI4LCAweDdCLCAweEM4LCAweDlCLAotKyAgMHhDNiwgMHg1 MywgMHg4OCwgMHgyNiwgMHgyMCwgMHg4OCwgMHg3MywgMHhCNiwgMHgxMywgMHhCOCwgMHhGMCwg MHg0QiwKLSsgIDB4MDAsIDB4ODUsIDB4RjMsIDB4REQsIDB4MDcsIDB4NTAsIDB4RUIsIDB4MjAs IDB4QzQsIDB4MzgsIDB4MEUsIDB4OTgsCi0rICAweEFELCAweDRFLCAweDQ5LCAweDJDLCAweEQ3 LCAweDY1LCAweEE1LCAweDE5LCAweDBFLCAweDU5LCAweDAxLCAweEVDLAotKyAgMHg3RSwgMHg3 NSwgMHg4OSwgMHg2OSwgMHgyRSwgMHg2MywgMHg3NiwgMHg4NSwgMHg0NiwgMHg4RCwgMHhBMCwg MHg4QywKLSsgIDB4MzMsIDB4MUQsIDB4ODIsIDB4OEMsIDB4MDMsIDB4RUEsIDB4NjksIDB4ODgs IDB4MzUsIDB4QTEsIDB4NDIsIDB4QkQsCi0rICAweDIxLCAweEVELCAweDhELCAweEJDLCAweEJD LCAweERCLCAweDMwLCAweEZGLCAweDg2LCAweEYwLCAweDVCLCAweERDLAotKyAgMHhFMywgMHhF MiwgMHhFOCwgMHgwQSwgMHgwQSwgMHgyOSwgMHg5NCwgMHg4MAotK307Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTM4NFtdID0gewotKyAgMHg1QywgMHg3 RCwgMHg5NiwgMHgzNSwgMHhFQywgMHg3RSwgMHgxMSwgMHgzOCwgMHhCQiwgMHg3QiwgMHhFQywg MHg3QiwKLSsgIDB4RjIsIDB4ODIsIDB4OEUsIDB4OTksIDB4QkQsIDB4RUYsIDB4RDgsIDB4QUUs IDB4RDcsIDB4MzksIDB4MzcsIDB4Q0IsCi0rICAweEU2LCAweDRGLCAweDVFLCAweDBBLCAweDEz LCAweEU0LCAweDJFLCAweDQwLCAweEI5LCAweEJFLCAweDJFLCAweEUzLAotKyAgMHhFRiwgMHg3 OCwgMHg4MywgMHgxOCwgMHg0NCwgMHgzNSwgMHg5QywgMHg4RSwgMHhENywgMHg0QSwgMHg2Mywg MHhGNiwKLSsgIDB4NTcsIDB4QzIsIDB4QjAsIDB4MDgsIDB4NTEsIDB4NzMsIDB4Q0YsIDB4Q0Es IDB4OTksIDB4NjYsIDB4RUUsIDB4MzEsCi0rICAweEQ4LCAweDY5LCAweEU5LCAweEFCLCAweDEz LCAweDI3LCAweDdCLCAweDQxLCAweDFFLCAweDZELCAweDhELCAweEYxLAotKyAgMHgzRSwgMHg5 QywgMHgzNSwgMHg5NSwgMHg1OCwgMHhERCwgMHgyQiwgMHhENSwgMHhBMCwgMHg2MCwgMHg0MSwg MHg3OSwKLSsgIDB4MjQsIDB4MjIsIDB4RTQsIDB4QjcsIDB4QkYsIDB4NDcsIDB4NTMsIDB4RjYs IDB4MzQsIDB4RDUsIDB4N0MsIDB4RkYsCi0rICAweDBFLCAweDA5LCAweEVFLCAweDJFLCAweEUy LCAweDM3LCAweEI5LCAweERFLCAweEM1LCAweDEyLCAweDQ0LCAweDM1LAotKyAgMHhFRiwgMHgw MSwgMHhFNiwgMHg1RSwgMHgzOSwgMHgzMSwgMHgyRCwgMHg3MSwgMHhBNSwgMHhEQywgMHhDNiwg MHg2RCwKLSsgIDB4RTIsIDB4Q0QsIDB4ODUsIDB4REIsIDB4NzMsIDB4ODIsIDB4NjUsIDB4MjgK LSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEE1MTJb XSA9IHsKLSsgIDB4QTYsIDB4NjUsIDB4QTIsIDB4NzcsIDB4NEYsIDB4QjMsIDB4ODYsIDB4Q0Is IDB4NjQsIDB4M0EsIDB4QzEsIDB4NjMsCi0rICAweEZDLCAweEExLCAweEFBLCAweENCLCAweDlC LCAweDc5LCAweERELCAweDRCLCAweEUxLCAweEQ5LCAweERBLCAweEFDLAotKyAgMHhFNywgMHg0 NywgMHgwOSwgMHhCMiwgMHgxMSwgMHg0QiwgMHg4QSwgMHhBQSwgMHgwNSwgMHg5RSwgMHg3Nywg MHhENywKLSsgIDB4M0EsIDB4QkQsIDB4NUUsIDB4NTMsIDB4MDksIDB4NEEsIDB4RTYsIDB4MEYs IDB4NUUsIDB4RjksIDB4MTQsIDB4MjgsCi0rICAweEEwLCAweDk5LCAweDc0LCAweDY0LCAweDcw LCAweDRFLCAweEYyLCAweEUzLCAweEZBLCAweEM3LCAweEY4LCAweEM1LAotKyAgMHg2RSwgMHgy QiwgMHg3OSwgMHg5NiwgMHgwRCwgMHgwQywgMHhDOCwgMHgxMCwgMHgzNCwgMHg1MywgMHhEMiwg MHhBRiwKLSsgIDB4MTcsIDB4MEUsIDB4RTAsIDB4QkYsIDB4NzksIDB4RjYsIDB4MDQsIDB4NzIs IDB4MTAsIDB4RTAsIDB4RjYsIDB4RDAsCi0rICAweENFLCAweDhBLCAweDZGLCAweEExLCAweDk1 LCAweDg5LCAweEJGLCAweDU4LCAweDhGLCAweDQ2LCAweDVGLCAweDA5LAotKyAgMHg5RiwgMHgw OSwgMHhDQSwgMHg4NCwgMHgxNSwgMHg4NSwgMHhFMCwgMHhFRCwgMHgwNCwgMHgyRCwgMHhGQiwg MHg3QywKLSsgIDB4MzYsIDB4MzUsIDB4MjEsIDB4MzEsIDB4QzMsIDB4RkQsIDB4OTIsIDB4NDIs IDB4MTEsIDB4MzAsIDB4NzEsIDB4MUIsCi0rICAweDYwLCAweDgzLCAweDE4LCAweDg4LCAweEEz LCAweEY1LCAweDU5LCAweEMzCi0rfTsKLSsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9yc2EoKQot Kwl7Ci0rCWludCByZXQgPSAwOwotKwlSU0EgKmtleTsKLSsJRVZQX1BLRVkgKnBrID0gTlVMTDsK LSsKLSsJaWYgKChrZXk9UlNBX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCXNldHJz YWtleShrZXkpOwotKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBl cnI7Ci0rCi0rCUVWUF9QS0VZX2Fzc2lnbl9SU0EocGssIGtleSk7Ci0rCi0rCWlmICghZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJ CQlrYXRfUlNBX1NIQTEsIHNpemVvZihrYXRfUlNBX1NIQTEpLAotKwkJCQlFVlBfc2hhMSgpLCBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTEgUEtDUyMxIikpCi0rCQln b3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9T SEEyMjQpLAotKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0r CQkJCSJSU0EgU0hBMjI0IFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlr YXRfUlNBX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfU0hBMjU2KSwKLSsJCQkJRVZQX3NoYTI1Nigp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTI1NiBQS0NTIzEiKSkK LSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ri cywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEEzODQsIHNpemVvZihrYXRf UlNBX1NIQTM4NCksCi0rCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NT MSwKLSsJCQkJIlJTQSBTSEEzODQgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBz X3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0r CQkJCWthdF9SU0FfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9TSEE1MTIpLAotKwkJCQlFVlBfc2hh NTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBNTEyIFBLQ1Mj MSIpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBr LCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEExLCBz aXplb2Yoa2F0X1JTQV9QU1NfU0hBMSksCi0rCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxB R19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTEgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFm aXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEs Ci0rCQkJCWthdF9SU0FfUFNTX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTIyNCksCi0r CQkJCUVWUF9zaGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hB MjI0IFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0 KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEy NTYsIHNpemVvZihrYXRfUlNBX1BTU19TSEEyNTYpLAotKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9N RF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTI1NiBQU1MiKSkKLSsJCWdvdG8gZXJy OwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGth dF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9QU1NfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9QU1Nf U0hBMzg0KSwKLSsJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJ CQkJIlJTQSBTSEEzODQgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9S U0FfUFNTX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTUxMiksCi0rCQkJCUVWUF9zaGE1 MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBNTEyIFBTUyIpKQot KwkJZ290byBlcnI7Ci0rCi0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBr YXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEExLCBzaXpl b2Yoa2F0X1JTQV9YOTMxX1NIQTEpLAotKwkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19Q QURfWDkzMSwKLSsJCQkiUlNBIFNIQTEgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCS8qIE5COiBT SEEyMjQgbm90IHN1cHBvcnRlZCBpbiBYOS4zMSAqLwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5 MzFfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTI1NiksCi0rCQkJRVZQX3NoYTI1Nigp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEEyNTYgWDkzMSIpKQotKwkJ Z290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBz aXplb2Yoa2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEEzODQsIHNpemVvZihrYXRf UlNBX1g5MzFfU0hBMzg0KSwKLSsJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURf WDkzMSwKLSsJCQkiUlNBIFNIQTM4NCBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBz X3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0r CQkJa2F0X1JTQV9YOTMxX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEE1MTIpLAotKwkJ CUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBNTEy IFg5MzEiKSkKLSsJCWdvdG8gZXJyOwotKwotKwotKwlyZXQgPSAxOwotKwotKwllcnI6Ci0rCWlm IChwaykKLSsJCUVWUF9QS0VZX2ZyZWUocGspOwotKwllbHNlIGlmIChrZXkpCi0rCQlSU0FfZnJl ZShrZXkpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmIC8qIGRlZiBPUEVOU1NMX0ZJ UFMgKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFn LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCi0tLS0g b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzCTIwMTItMDQt MjAgMDk6MDc6MDYuMjcxNzg1ODQ5ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Zp cHMvZmlwc19yc2FfeDkzMWcuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3MTc4NTg0OSArMDIwMAot QEAgLTAsMCArMSwyODIgQEAKLSsvKiBjcnlwdG8vcnNhL3JzYV9nZW4uYyAqLwotKy8qIENvcHly aWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxl bWVudGF0aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSku Ci0rICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0 aCBOZXRzY2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21t ZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot KyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0 aGUgUkM0LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNT TCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRp c3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4 Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgot KyAqIAotKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55 IENvcHlyaWdodCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVk LgotKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBz aG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0 cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEg dGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRp b24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4KLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlw dG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNy eXB0c29mdC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVm dCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQg YXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRl IGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9t IAotKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3Qg aW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsg KiAKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycn IEFORAotKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICog T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ Ci0rICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNl bmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2 ZXJzaW9uIG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQu ICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5k ZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQ dWJsaWMgTGljZW5jZS5dCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUg PHN0cmluZy5oPgotKyNpbmNsdWRlIDx0aW1lLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK2V4dGVy biBpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpOwotKyNlbmRpZgotKwotKy8qIFg5LjMxIFJT QSBrZXkgZGVyaXZhdGlvbiBhbmQgZ2VuZXJhdGlvbiAqLwotKwotK2ludCBSU0FfWDkzMV9kZXJp dmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsIEJJR05V TSAqcTIsCi0rCQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLCBjb25zdCBC SUdOVU0gKlhwLAotKwkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0gKlhxMiwgY29u c3QgQklHTlVNICpYcSwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKLSsJewot KwlCSUdOVU0gKnIwPU5VTEwsKnIxPU5VTEwsKnIyPU5VTEwsKnIzPU5VTEw7Ci0rCUJOX0NUWCAq Y3R4PU5VTEwsKmN0eDI9TlVMTDsKLSsKLSsJaWYgKCFyc2EpIAotKwkJZ290byBlcnI7Ci0rCi0r CWN0eCA9IEJOX0NUWF9uZXcoKTsKLSsJaWYgKCFjdHgpIAotKwkJZ290byBlcnI7Ci0rCUJOX0NU WF9zdGFydChjdHgpOwotKwotKwlyMCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjEgPSBCTl9DVFhf Z2V0KGN0eCk7Ci0rCXIyID0gQk5fQ1RYX2dldChjdHgpOwotKwlyMyA9IEJOX0NUWF9nZXQoY3R4 KTsKLSsKLSsJaWYgKHIzID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFyc2EtPmUpCi0r CQl7Ci0rCQlyc2EtPmUgPSBCTl9kdXAoZSk7Ci0rCQlpZiAoIXJzYS0+ZSkKLSsJCQlnb3RvIGVy cjsKLSsJCX0KLSsJZWxzZQotKwkJZSA9IHJzYS0+ZTsKLSsKLSsJLyogSWYgbm90IGFsbCBwYXJh bWV0ZXJzIHByZXNlbnQgb25seSBjYWxjdWxhdGUgd2hhdCB3ZSBjYW4uCi0rCSAqIFRoaXMgYWxs b3dzIHRlc3QgcHJvZ3JhbXMgdG8gb3V0cHV0IHNlbGVjdGl2ZSBwYXJhbWV0ZXJzLgotKwkgKi8K LSsKLSsJaWYgKFhwICYmICFyc2EtPnApCi0rCQl7Ci0rCQlyc2EtPnAgPSBCTl9uZXcoKTsKLSsJ CWlmICghcnNhLT5wKQotKwkJCWdvdG8gZXJyOwotKwotKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9w cmltZV9leChyc2EtPnAsIHAxLCBwMiwKLSsJCQkJCVhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikp Ci0rCQkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWlmIChYcSAmJiAhcnNhLT5xKQotKwkJewotKwkJ cnNhLT5xID0gQk5fbmV3KCk7Ci0rCQlpZiAoIXJzYS0+cSkKLSsJCQlnb3RvIGVycjsKLSsJCWlm ICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocnNhLT5xLCBxMSwgcTIsCi0rCQkJCQlYcSwgWHEx LCBYcTIsIGUsIGN0eCwgY2IpKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoIXJzYS0+ cCB8fCAhcnNhLT5xKQotKwkJewotKwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJQk5fQ1RYX2ZyZWUo Y3R4KTsKLSsJCXJldHVybiAyOwotKwkJfQotKwotKwkvKiBTaW5jZSBib3RoIHByaW1lcyBhcmUg c2V0IHdlIGNhbiBub3cgY2FsY3VsYXRlIGFsbCByZW1haW5pbmcgCi0rCSAqIGNvbXBvbmVudHMu Ci0rCSAqLwotKwotKwkvKiBjYWxjdWxhdGUgbiAqLwotKwlyc2EtPm49Qk5fbmV3KCk7Ci0rCWlm IChyc2EtPm4gPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUJOX211bChyc2EtPm4scnNh LT5wLHJzYS0+cSxjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIGNhbGN1bGF0ZSBkICovCi0r CWlmICghQk5fc3ViKHIxLHJzYS0+cCxCTl92YWx1ZV9vbmUoKSkpCi0rCQlnb3RvIGVycjsJLyog cC0xICovCi0rCWlmICghQk5fc3ViKHIyLHJzYS0+cSxCTl92YWx1ZV9vbmUoKSkpCi0rCQlnb3Rv IGVycjsJLyogcS0xICovCi0rCWlmICghQk5fbXVsKHIwLHIxLHIyLGN0eCkpCi0rCQlnb3RvIGVy cjsJLyogKHAtMSkocS0xKSAqLwotKwotKwlpZiAoIUJOX2djZChyMywgcjEsIHIyLCBjdHgpKQot KwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fZGl2KHIwLCBOVUxMLCByMCwgcjMsIGN0eCkpCi0r CQlnb3RvIGVycjsJLyogTENNKChwLTEpKHEtMSkpICovCi0rCi0rCWN0eDIgPSBCTl9DVFhfbmV3 KCk7Ci0rCWlmICghY3R4MikKLSsJCWdvdG8gZXJyOwotKwotKwlyc2EtPmQ9Qk5fbW9kX2ludmVy c2UoTlVMTCxyc2EtPmUscjAsY3R4Mik7CS8qIGQgKi8KLSsJaWYgKHJzYS0+ZCA9PSBOVUxMKQot KwkJZ290byBlcnI7Ci0rCi0rCS8qIGNhbGN1bGF0ZSBkIG1vZCAocC0xKSAqLwotKwlyc2EtPmRt cDE9Qk5fbmV3KCk7Ci0rCWlmIChyc2EtPmRtcDEgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlp ZiAoIUJOX21vZChyc2EtPmRtcDEscnNhLT5kLHIxLGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJ LyogY2FsY3VsYXRlIGQgbW9kIChxLTEpICovCi0rCXJzYS0+ZG1xMT1CTl9uZXcoKTsKLSsJaWYg KHJzYS0+ZG1xMSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICghQk5fbW9kKHJzYS0+ZG1x MSxyc2EtPmQscjIsY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgaW52ZXJz ZSBvZiBxIG1vZCBwICovCi0rCXJzYS0+aXFtcD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+cSxy c2EtPnAsY3R4Mik7Ci0rCi0rCWVycjoKLSsJaWYgKGN0eCkKLSsJCXsKLSsJCUJOX0NUWF9lbmQo Y3R4KTsKLSsJCUJOX0NUWF9mcmVlKGN0eCk7Ci0rCQl9Ci0rCWlmIChjdHgyKQotKwkJQk5fQ1RY X2ZyZWUoY3R4Mik7Ci0rCS8qIElmIHRoaXMgaXMgc2V0IGFsbCBjYWxscyBzdWNjZXNzZnVsICov Ci0rCWlmIChyc2EgJiYgcnNhLT5pcW1wICE9IE5VTEwpCi0rCQlyZXR1cm4gMTsKLSsKLSsJcmV0 dXJuIDA7Ci0rCi0rCX0KLSsKLStpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNh LCBpbnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpCi0rCXsKLSsJaW50IG9r ID0gMDsKLSsJQklHTlVNICpYcCA9IE5VTEwsICpYcSA9IE5VTEw7Ci0rCUJOX0NUWCAqY3R4ID0g TlVMTDsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKHJz YS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykgJiYgCi0rCQkoYml0cyA8IE9QRU5T U0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJ UFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0tFWV9UT09fU0hPUlQpOwotKwkg ICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCi0rCWlmIChiaXRzICYgMHhmZikKLSsJICAgIHsKLSsJ ICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfSU5WQUxJ RF9LRVlfTEVOR1RIKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwotKwlpZihGSVBTX3Nl bGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFf R0VORVJBVEVfS0VZX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1 cm4gMDsKLSsJICAgIH0KLSsjZW5kaWYKLSsKLSsJY3R4ID0gQk5fQ1RYX25ldygpOwotKwlpZiAo IWN0eCkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwotKwlYcCA9IEJO X0NUWF9nZXQoY3R4KTsKLSsJWHEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCWlmICghQk5fWDkzMV9n ZW5lcmF0ZV9YcHEoWHAsIFhxLCBiaXRzLCBjdHgpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJcnNh LT5wID0gQk5fbmV3KCk7Ci0rCXJzYS0+cSA9IEJOX25ldygpOwotKwlpZiAoIXJzYS0+cCB8fCAh cnNhLT5xKQotKwkJZ290byBlcnJvcjsKLSsKLSsJLyogR2VuZXJhdGUgdHdvIHByaW1lcyBmcm9t IFhwLCBYcSAqLwotKwotKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5wLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBYcCwKLSsJCQkJCWUsIGN0eCwgY2IpKQotKwkJZ290byBl cnJvcjsKLSsKLSsJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cSwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgWHEsCi0rCQkJCQllLCBjdHgsIGNiKSkKLSsJCWdvdG8gZXJyb3I7 Ci0rCi0rCS8qIFNpbmNlIHJzYS0+cCBhbmQgcnNhLT5xIGFyZSB2YWxpZCB0aGlzIGNhbGwgd2ls bCBqdXN0IGRlcml2ZQotKwkgKiByZW1haW5pbmcgUlNBIGNvbXBvbmVudHMuCi0rCSAqLwotKwot KwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0r CQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGUsIGNiKSkKLSsJCWdvdG8g ZXJyb3I7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZighZmlwc19jaGVja19yc2EocnNh KSkKLSsJICAgIGdvdG8gZXJyb3I7Ci0rI2VuZGlmCi0rCi0rCW9rID0gMTsKLSsKLSsJZXJyb3I6 Ci0rCWlmIChjdHgpCi0rCQl7Ci0rCQlCTl9DVFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShj dHgpOwotKwkJfQotKwotKwlpZiAob2spCi0rCQlyZXR1cm4gMTsKLSsKLSsJcmV0dXJuIDA7Ci0r Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0 ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5j Ci0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYy5maXBz CTIwMTItMDQtMjAgMDk6MDc6MDYuMjcxNzg1ODQ5ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEv Y3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3MTc4 NTg0OSArMDIwMAotQEAgLTAsMCArMSwxNDAgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHly aWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3Jn LgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0r ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8K LSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rc3RhdGljIGNvbnN0IGNoYXIgdGVzdFtdWzYwXT0KLSsgICAg ewotKyAgICAiIiwKLSsgICAgImFiYyIsCi0rICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGln aGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIKLSsgICAgfTsKLSsKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciByZXRbXVtTSEFfRElHRVNUX0xFTkdUSF09Ci0rICAgIHsKLSsgICAg eyAweGRhLDB4MzksMHhhMywweGVlLDB4NWUsMHg2YiwweDRiLDB4MGQsMHgzMiwweDU1LAotKyAg ICAgIDB4YmYsMHhlZiwweDk1LDB4NjAsMHgxOCwweDkwLDB4YWYsMHhkOCwweDA3LDB4MDkgfSwK LSsgICAgeyAweGE5LDB4OTksMHgzZSwweDM2LDB4NDcsMHgwNiwweDgxLDB4NmEsMHhiYSwweDNl LAotKyAgICAgIDB4MjUsMHg3MSwweDc4LDB4NTAsMHhjMiwweDZjLDB4OWMsMHhkMCwweGQ4LDB4 OWQgfSwKLSsgICAgeyAweDg0LDB4OTgsMHgzZSwweDQ0LDB4MWMsMHgzYiwweGQyLDB4NmUsMHhi YSwweGFlLAotKyAgICAgIDB4NGEsMHhhMSwweGY5LDB4NTEsMHgyOSwweGU1LDB4ZTUsMHg0Niww eDcwLDB4ZjEgfSwKLSsgICAgfTsKLSsKLStzdGF0aWMgaW50IGNvcnJ1cHRfc2hhOwotKwotK3Zv aWQgRklQU19jb3JydXB0X3NoYTEoKQotKyAgICB7Ci0rICAgIGNvcnJ1cHRfc2hhID0gMTsKLSsg ICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQotKyAgICB7Ci0rICAgIGludCBuOwot KwotKyAgICBmb3Iobj0wIDsgbjxzaXplb2YodGVzdCkvc2l6ZW9mKHRlc3RbMF0pIDsgKytuKQot Kwl7Ci0rCXVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOwotKwotKwlFVlBfRGln ZXN0KHRlc3Rbbl0sc3RybGVuKHRlc3Rbbl0pK2NvcnJ1cHRfc2hhLG1kLCBOVUxMLCBFVlBfc2hh MSgpLCBOVUxMKTsKLSsJaWYobWVtY21wKG1kLHJldFtuXSxzaXplb2YgbWQpKQotKwkgICAgewot KwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExLEZJUFNfUl9TRUxGVEVTVF9G QUlMRUQpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCX0KLSsgICAgcmV0dXJuIDE7Ci0r ICAgIH0KLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtc2dfc2hhMjU2W10gPSB7IDB4 ZmEsIDB4NDgsIDB4NTksIDB4MmEsIDB4ZTEsIDB4YWUsIDB4MWYsIDB4MzAsCi0rCQkJCQkgICAg MHhmYyB9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ19zaGEyNTZbXSA9IHsgMHhm NywgMHgyNiwgMHhkOCwgMHg5OCwgMHg0NywgMHg5MSwgMHg2OCwgMHg1YiwKLSsJCQkJCSAgICAw eDllLCAweDM5LCAweGIyLCAweDU4LCAweGJiLCAweDc1LCAweGJmLCAweDAxLAotKwkJCQkJICAg IDB4MTcsIDB4MGMsIDB4ODQsIDB4MDAsIDB4MDEsIDB4N2EsIDB4OTQsIDB4ODMsCi0rCQkJCQkg ICAgMHhmMywgMHgwYiwgMHgxNSwgMHg4NCwgMHg0YiwgMHg2OSwgMHg4OCwgMHg4YSB9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1zZ19zaGE1MTJbXSA9IHsgMHgzNywgMHhkMSwg MHgzNSwgMHg5ZCwgMHgxOCwgMHg0MSwgMHhlOSwgMHhiNywKLSsJCQkJCSAgICAweDZkLCAweDlh LCAweDEzLCAweGRhLCAweDVmLCAweGYzLCAweGJkIH07Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgZGlnX3NoYTUxMltdID0geyAweDExLCAweDEzLCAweGM0LCAweDE5LCAweGVkLCAweDJi LCAweDFkLCAweDE2LAotKwkJCQkJICAgIDB4MTEsIDB4ZWIsIDB4OWIsIDB4YmUsIDB4ZjAsIDB4 N2YsIDB4Y2YsIDB4NDQsCi0rCQkJCQkgICAgMHg4YiwgMHhkNywgMHg1NywgMHhiZCwgMHg4ZCwg MHhhOSwgMHgyNSwgMHhiMCwKLSsJCQkJCSAgICAweDQ3LCAweDI1LCAweGQ2LCAweDZjLCAweDlh LCAweDU0LCAweDdmLCAweDhmLAotKwkJCQkJICAgIDB4MGIsIDB4NTMsIDB4MWEsIDB4MTAsIDB4 NjgsIDB4MzIsIDB4MDMsIDB4MzgsCi0rCQkJCQkgICAgMHg4MiwgMHhjNCwgMHg4NywgMHhjNCwg MHhlYSwgMHgwZSwgMHhkMSwgMHgwNCwKLSsJCQkJCSAgICAweGE5LCAweDk4LCAweGMxLCAweDA1 LCAweGEzLCAweGYzLCAweGY4LCAweGIxLAotKwkJCQkJICAgIDB4YWYsIDB4YmMsIDB4ZDksIDB4 NzgsIDB4N2UsIDB4ZWUsIDB4M2QsIDB4NDMgfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9zaGEy KHZvaWQpCi0rCXsKLSsJdW5zaWduZWQgY2hhciBtZFtTSEE1MTJfRElHRVNUX0xFTkdUSF07Ci0r Ci0rCUVWUF9EaWdlc3QobXNnX3NoYTI1Niwgc2l6ZW9mKG1zZ19zaGEyNTYpLCBtZCwgTlVMTCwg RVZQX3NoYTI1NigpLCBOVUxMKTsKLSsJaWYobWVtY21wKGRpZ19zaGEyNTYsIG1kLCBzaXplb2Yo ZGlnX3NoYTI1NikpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCwgRklQ U19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJRVZQX0RpZ2Vz dChtc2dfc2hhNTEyLCBzaXplb2YobXNnX3NoYTUxMiksIG1kLCBOVUxMLCBFVlBfc2hhNTEyKCks IE5VTEwpOwotKwlpZihtZW1jbXAoZGlnX3NoYTUxMiwgbWQsIHNpemVvZihkaWdfc2hhNTEyKSkp Ci0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULCBGSVBTX1JfU0VMRlRFU1Rf RkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwotKwlyZXR1cm4gMTsKLSsJfQotKwotKyNl bmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25l X2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9o bWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1h Yy5jLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNzE3ODU4NDkgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jCTIwMTItMDQtMjAgMDk6 MDc6MDYuMjcxNzg1ODQ5ICswMjAwCi1AQCAtMCwwICsxLDE4MCBAQAotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVA b3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAq ICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up Ci0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K LSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4K LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0r Ci0rI2lmbmRlZiBGSVBTQ0FOSVNURVJfTwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpIHsg cmV0dXJuIDA7IH0KLSt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2soKSB7fQotK3ZvaWQgT1BFTlNT TF9jbGVhbnNlKHZvaWQgKnAsc2l6ZV90IGxlbikge30KLSsjZW5kaWYKLSsKLSsjaWYJZGVmaW5l ZChfX2kzODYpICAgfHwgZGVmaW5lZChfX2kzODZfXykgICB8fCBkZWZpbmVkKF9NX0lYODYpIHx8 IFwKLSsJZGVmaW5lZChfX0lOVEVMX18pIHx8IFwKLSsJZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVm aW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9NX0FNRDY0KSB8fCBkZWZpbmVkKF9NX1g2NCkK LSsKLSt1bnNpZ25lZCBpbnQgIE9QRU5TU0xfaWEzMmNhcF9QWzJdOwotKyNlbmRpZgotKwotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgdm9pZCBobWFjX2luaXQoU0hBMjU2X0NUWCAq bWRfY3R4LFNIQTI1Nl9DVFggKm9fY3R4LAotKwkJICAgICAgY29uc3QgY2hhciAqa2V5KQotKyAg ICB7Ci0rICAgIHNpemVfdCBsZW49c3RybGVuKGtleSk7Ci0rICAgIGludCBpOwotKyAgICB1bnNp Z25lZCBjaGFyIGtleW1kW0hNQUNfTUFYX01EX0NCTE9DS107Ci0rICAgIHVuc2lnbmVkIGNoYXIg cGFkW0hNQUNfTUFYX01EX0NCTE9DS107Ci0rCi0rICAgIGlmIChsZW4gPiBTSEFfQ0JMT0NLKQot Kwl7Ci0rCVNIQTI1Nl9Jbml0KG1kX2N0eCk7Ci0rCVNIQTI1Nl9VcGRhdGUobWRfY3R4LGtleSxs ZW4pOwotKwlTSEEyNTZfRmluYWwoa2V5bWQsbWRfY3R4KTsKLSsJbGVuPVNIQTI1Nl9ESUdFU1Rf TEVOR1RIOwotKwl9Ci0rICAgIGVsc2UKLSsJbWVtY3B5KGtleW1kLGtleSxsZW4pOwotKyAgICBt ZW1zZXQoJmtleW1kW2xlbl0sJ1wwJyxITUFDX01BWF9NRF9DQkxPQ0stbGVuKTsKLSsKLSsgICAg Zm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCi0rCXBhZFtpXT0weDM2Xmtl eW1kW2ldOwotKyAgICBTSEEyNTZfSW5pdChtZF9jdHgpOwotKyAgICBTSEEyNTZfVXBkYXRlKG1k X2N0eCxwYWQsU0hBMjU2X0NCTE9DSyk7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhf TURfQ0JMT0NLIDsgaSsrKQotKwlwYWRbaV09MHg1Y15rZXltZFtpXTsKLSsgICAgU0hBMjU2X0lu aXQob19jdHgpOwotKyAgICBTSEEyNTZfVXBkYXRlKG9fY3R4LHBhZCxTSEEyNTZfQ0JMT0NLKTsK LSsgICAgfQotKwotK3N0YXRpYyB2b2lkIGhtYWNfZmluYWwodW5zaWduZWQgY2hhciAqbWQsU0hB MjU2X0NUWCAqbWRfY3R4LFNIQTI1Nl9DVFggKm9fY3R4KQotKyAgICB7Ci0rICAgIHVuc2lnbmVk IGNoYXIgYnVmW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAgU0hBMjU2X0ZpbmFsKGJ1 ZixtZF9jdHgpOwotKyAgICBTSEEyNTZfVXBkYXRlKG9fY3R4LGJ1ZixzaXplb2YgYnVmKTsKLSsg ICAgU0hBMjU2X0ZpbmFsKG1kLG9fY3R4KTsKLSsgICAgfQotKwotKyNlbmRpZgotKwotK2ludCBt YWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyAgICB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwot KyAgICBzdGF0aWMgY2hhciBrZXlbXT0ib3Jib0RlSklUSVRlanNpcnBBRE9OaXZpcnBVa3ZhclAi OwotKyAgICBpbnQgbixiaW5hcnk9MDsKLSsKLSsgICAgaWYoYXJnYyA8IDIpCi0rCXsKLSsJZnBy aW50ZihzdGRlcnIsIiVzIFs8ZmlsZT5dK1xuIixhcmd2WzBdKTsKLSsJZXhpdCgxKTsKLSsJfQot KwotKyAgICBuPTE7Ci0rICAgIGlmICghc3RyY21wKGFyZ3Zbbl0sIi1iaW5hcnkiKSkKLSsJewot KwluKys7Ci0rCWJpbmFyeT0xOwkvKiBlbWl0IGJpbmFyeSBmaW5nZXJwcmludC4uLiAqLwotKwl9 Ci0rCi0rICAgIGZvcig7IG4gPCBhcmdjIDsgKytuKQotKwl7Ci0rCUZJTEUgKmY9Zm9wZW4oYXJn dltuXSwicmIiKTsKLSsJU0hBMjU2X0NUWCBtZF9jdHgsb19jdHg7Ci0rCXVuc2lnbmVkIGNoYXIg bWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwlpbnQgaTsKLSsKLSsJaWYoIWYpCi0rCSAgICB7 Ci0rCSAgICBwZXJyb3IoYXJndltuXSk7Ci0rCSAgICBleGl0KDIpOwotKwkgICAgfQotKwotKwlo bWFjX2luaXQoJm1kX2N0eCwmb19jdHgsa2V5KTsKLSsJZm9yKCA7IDsgKQotKwkgICAgewotKwkg ICAgY2hhciBidWZbMTAyNF07Ci0rCSAgICBzaXplX3QgbD1mcmVhZChidWYsMSxzaXplb2YgYnVm LGYpOwotKwotKwkgICAgaWYobCA9PSAwKQotKwkJewotKwkJaWYoZmVycm9yKGYpKQotKwkJICAg IHsKLSsJCSAgICBwZXJyb3IoYXJndltuXSk7Ci0rCQkgICAgZXhpdCgzKTsKLSsJCSAgICB9Ci0r CQllbHNlCi0rCQkgICAgYnJlYWs7Ci0rCQl9Ci0rCSAgICBTSEEyNTZfVXBkYXRlKCZtZF9jdHgs YnVmLGwpOwotKwkgICAgfQotKwlobWFjX2ZpbmFsKG1kLCZtZF9jdHgsJm9fY3R4KTsKLSsKLSsJ aWYgKGJpbmFyeSkKLSsJICAgIHsKLSsJICAgIGZ3cml0ZShtZCxTSEEyNTZfRElHRVNUX0xFTkdU SCwxLHN0ZG91dCk7Ci0rCSAgICBicmVhazsJLyogLi4uIGZvciBzaW5nbGUoISkgZmlsZSAqLwot KwkgICAgfQotKwotKy8qCXByaW50ZigiSE1BQy1TSEExKCVzKT0gIixhcmd2W25dKTsgKi8KLSsJ Zm9yKGk9MCA7IGkgPCBTSEEyNTZfRElHRVNUX0xFTkdUSCA7ICsraSkKLSsJICAgIHByaW50Zigi JTAyeCIsbWRbaV0pOwotKwlwcmludGYoIlxuIik7Ci0rCX0KLSsjZW5kaWYKLSsgICAgcmV0dXJu IDA7Ci0rICAgIH0KLSsKLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2Zp cHNfdGVzdF9zdWl0ZS5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc190ZXN0 X3N1aXRlLmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUu Yy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjcyNzg1ODcwICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMWEvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMJMjAxMi0wNC0yMCAwOTowNzowNi4y NzI3ODU4NzAgKzAyMDAKLUBAIC0wLDAgKzEsNTg4IEBACi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKgotKyAqIFRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBhcyBhIHRlc3QgZHJp dmVyIGZvciB0aGUgRklQUy0xNDAgdGVzdGluZwotKyAqIGxhYiBwZXJmb3JtaW5nIEZJUFMtMTQw IHZhbGlkYXRpb24uICBJdCBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUKLSsgKiBPcGVuU1NM IGxpYnJhcnkgaXRvIHBlcmZvcm0gYSB2YXJpZXR5IG9mIGNvbW1vbiBjcnlwdG9ncmFwaGljCi0r ICogZnVuY3Rpb25zLiAgQSBwb3dlci11cCBzZWxmIHRlc3QgaXMgZGVtb25zdHJhdGVkIGJ5IGRl bGliZXJhdGVseQotKyAqIHBvaW50aW5nIHRvIGFuIGludmFsaWQgZXhlY3V0YWJsZSBoYXNoCi0r ICoKLSsgKiBDb250cmlidXRlZCBieSBTdGV2ZSBNYXJxdWVzcy4KLSsgKgotKyAqLwotKyNpbmNs dWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4K LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2RoLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFu ZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotKwotKwotKyNpZm5kZWYgT1BFTlNTTF9G SVBTCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSsgICAgewotKyAgICBwcmlu dGYoIk5vIEZJUFMgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSsgICAgfQotKyNlbHNl Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgot KwotKy8qIEFFUzogZW5jcnlwdCBhbmQgZGVjcnlwdCBrbm93biBwbGFpbnRleHQsIHZlcmlmeSBy ZXN1bHQgbWF0Y2hlcyBvcmlnaW5hbCBwbGFpbnRleHQKLSsqLwotK3N0YXRpYyBpbnQgRklQU19h ZXNfdGVzdCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyIHBsdG1w WzE2XTsKLSsJdW5zaWduZWQgY2hhciBjaXRtcFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIga2V5WzE2 XSA9IHsgMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTZ9OwotKwl1bnNpZ25l ZCBjaGFyIHBsYWludGV4dFsxNl0gPSAiZXRhb25yaXNoZGxjdSI7Ci0rCUVWUF9DSVBIRVJfQ1RY IGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0 X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkKLSsJ CWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDE2KTsKLSsJ aWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtleSwg TlVMTCwgMCkgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBj aXRtcCwgMTYpOwotKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDE2KSkKLSsJCWdvdG8g ZXJyOwotKwlyZXQgPSAxOwotKwllcnI6Ci0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7 Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStzdGF0aWMgaW50IEZJUFNfZGVzM190ZXN0KHZvaWQp Ci0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgcGx0bXBbOF07Ci0rCXVuc2ln bmVkIGNoYXIgY2l0bXBbOF07Ci0rICAgIAl1bnNpZ25lZCBjaGFyIGtleVtdID0geyAxLDIsMyw0 LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwKLSsJCSAgICAgICAgICAgICAg MTksMjAsMjEsMjIsMjMsMjR9OwotKyAgICAJdW5zaWduZWQgY2hhciBwbGFpbnRleHRbXSA9IHsg J2UnLCAndCcsICdhJywgJ28nLCAnbicsICdyJywgJ2knLCAncycgfTsKLSsJRVZQX0NJUEhFUl9D VFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwlpZiAoRVZQX0NpcGhlcklu aXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkK LSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDgpOwot KwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEwsIGtl eSwgTlVMTCwgMCkgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1w LCBjaXRtcCwgOCk7Ci0rCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgOCkpCi0rCQlnb3Rv IGVycjsKLSsJcmV0ID0gMTsKLSsJZXJyOgotKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgp OwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rLyoKLSsgKiBEU0E6IGdlbmVyYXRlIGtleXMgYW5k IHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCi0rICovCi0rc3RhdGljIGludCBGSVBTX2Rz YV90ZXN0KGludCBiYWQpCi0rICAgIHsKLSsgICAgRFNBICpkc2EgPSBOVUxMOwotKyAgICBFVlBf UEtFWSBwazsKLSsgICAgdW5zaWduZWQgY2hhciBkZ3N0W10gPSAiZXRhb25yaXNoZGxjIjsKLSsg ICAgdW5zaWduZWQgY2hhciBidWZbNjBdOwotKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAg aW50IHIgPSAwOwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJv cigpOwotKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKyAgICBkc2EgPSBEU0FfbmV3KCk7 Ci0rICAgIGlmICghZHNhKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFy YW1ldGVyc19leChkc2EsIDEwMjQsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKLSsJZ290byBlbmQ7 Ci0rICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYg KGJhZCkKLSsJICAgIEJOX2FkZF93b3JkKGRzYS0+cHViX2tleSwgMSk7Ci0rCi0rICAgIHBrLnR5 cGUgPSBFVlBfUEtFWV9EU0E7Ci0rICAgIHBrLnBrZXkuZHNhID0gZHNhOwotKwotKyAgICBpZiAo IUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwot KyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkK LSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwg JnBrKSkKLSsJZ290byBlbmQ7Ci0rCi0rICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgs IEVWUF9kc3MxKCksIE5VTEwpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5VXBk YXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKLSsJZ290byBlbmQ7Ci0rICAgIHIg PSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgJnBrKTsKLSsgICAgZW5kOgotKyAg ICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKyAgICBpZiAoZHNhKQotKyAgCSAgRFNBX2Zy ZWUoZHNhKTsKLSsgICAgaWYgKHIgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwot KyAgICB9Ci0rCi0rLyoKLSsgKiBSU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBp bnB1dCBwbGFpbnRleHQuCi0rICovCi0rc3RhdGljIGludCBGSVBTX3JzYV90ZXN0KGludCBiYWQp Ci0rICAgIHsKLSsgICAgUlNBICprZXk7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRfcHRleHRb XSA9ICJldGFvbnJpc2hkbGMiOwotKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOwotKyAgICB1 bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgQklHTlVNICpibjsKLSsgICAgRVZQX01EX0NUWCBtY3R4 OwotKyAgICBFVlBfUEtFWSBwazsKLSsgICAgaW50IHIgPSAwOwotKwotKyAgICBFUlJfY2xlYXJf ZXJyb3IoKTsKLSsgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsgICAga2V5ID0gUlNBX25l dygpOwotKyAgICBibiA9IEJOX25ldygpOwotKyAgICBpZiAoIWtleSB8fCAhYm4pCi0rCXJldHVy biAwOwotKyAgICBCTl9zZXRfd29yZChibiwgNjU1MzcpOwotKyAgICBpZiAoIVJTQV9nZW5lcmF0 ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQotKwlyZXR1cm4gMDsKLSsgICAgQk5fZnJlZShi bik7Ci0rICAgIGlmIChiYWQpCi0rCSAgICBCTl9hZGRfd29yZChrZXktPm4sIDEpOwotKwotKyAg ICBway50eXBlID0gRVZQX1BLRVlfUlNBOwotKyAgICBway5wa2V5LnJzYSA9IGtleTsKLSsKLSsg ICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQotKwlnb3Rv IGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVv ZihpbnB1dF9wdGV4dCkgLSAxKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25GaW5h bCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKLSsJZ290byBlbmQ7Ci0rCi0rICAgIGlmICghRVZQ X1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQotKwlnb3RvIGVuZDsKLSsg ICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0 X3B0ZXh0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0 eCwgYnVmLCBzbGVuLCAmcGspOwotKyAgICBlbmQ6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgm bWN0eCk7Ci0rICAgIGlmIChrZXkpCi0rICAJICAgIFJTQV9mcmVlKGtleSk7Ci0rICAgIGlmIChy ICE9IDEpCi0rCXJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFNIQTE6 IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3du Ci0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfc2hh MV90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEFfRElHRVNUX0xF TkdUSF0gPQotKyAgICAgICAgeyAweDExLCAweGYxLCAweDlhLCAweDNhLCAweGVjLCAweDFhLCAw eDFlLCAweDhlLCAweDY1LCAweGQ0LCAweDlhLCAweDM4LCAweDBjLCAweDhiLCAweDFlLCAweDJj LCAweGU4LCAweGIzLCAweGM1LCAweDE4IH07Ci0rICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAi ZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhd OwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixz aXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpKSByZXR1cm4gMDsKLSsg ICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCi0rICAgICAgICByZXR1cm4gMDsK LSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBTSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yg a25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQg Y29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfc2hhMjU2X3Rlc3QoKQotKyAgICB7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXSA9Ci0rCXsw eGY1LCAweDUzLCAweGNkLCAweGI4LCAweGNmLCAweDEsIDB4ZWUsIDB4MTcsIDB4OWIsIDB4OTMs IDB4YzksIDB4NjgsIDB4YzAsIDB4ZWEsIDB4NDAsIDB4OTEsCi0rCSAweDYsIDB4ZWMsIDB4OGUs IDB4MTEsIDB4OTYsIDB4YzgsIDB4NWQsIDB4MWMsIDB4YWYsIDB4NjQsIDB4MjIsIDB4ZTYsIDB4 NTAsIDB4NGYsIDB4NDcsIDB4NTd9OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9u cmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsK LSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6 ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5VTEwpKSByZXR1cm4gMDsKLSsg ICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCi0rICAgICAgICByZXR1cm4gMDsK LSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBTSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yg a25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQg Y29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfc2hhNTEyX3Rlc3QoKQotKyAgICB7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTUxMl9ESUdFU1RfTEVOR1RIXSA9Ci0rCXsw eDk5LCAweGM5LCAweGU5LCAweDViLCAweDg4LCAweGQ0LCAweDc4LCAweDg4LCAweGRmLCAweDg4 LCAweDVmLCAweDk0LCAweDcxLCAweDY0LCAweDI4LCAweGNhLAotKwkgMHgxNiwgMHgxZiwgMHgz ZCwgMHhmNCwgMHgxZiwgMHhmMywgMHgwZiwgMHhjNSwgMHgwMywgMHg5OSwgMHhiMiwgMHhkMCwg MHhlNywgMHgwYiwgMHg5NCwgMHg0YSwKLSsJIDB4NDUsIDB4ZDIsIDB4NmMsIDB4NGYsIDB4MjAs IDB4MDYsIDB4ZWYsIDB4NzEsIDB4YTksIDB4MjUsIDB4N2YsIDB4MjQsIDB4YjEsIDB4ZDksIDB4 NDAsIDB4MjIsCi0rCSAweDQ5LCAweDU0LCAweDEwLCAweGMyLCAweDIyLCAweDlkLCAweDI3LCAw eGZlLCAweGJkLCAweGQ2LCAweGQ2LCAweGViLCAweDJkLCAweDQyLCAweDFkLCAweGEzfTsKLSsg ICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKLSsKLSsgICAgdW5zaWduZWQg Y2hhciBtZFtTSEE1MTJfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigp OwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQ X3NoYTUxMigpLCBOVUxMKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNp emVvZihtZCkpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0r Ci0rLyogSE1BQy1TSEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQg Y29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3Rh dGljIGludCBGSVBTX2htYWNfc2hhMV90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFy IGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxl IHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7 MHg3MywgMHhmNywgMHhhMCwgMHg0OCwgMHhmOCwgMHg5NCwgMHhlZCwgMHhkZCwgMHgwYSwgMHhl YSwgMHhlYSwgMHg1NiwgMHgxYiwgMHg2MSwgMHgyZSwgMHg3MCwKLSsJIDB4YjIsIDB4ZmIsIDB4 ZWMsIDB4YzZ9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwot KyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsg ICAgaWYgKCFITUFDKEVWUF9zaGExKCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0x LG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxl bikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBI TUFDLVNIQTIyNDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBh cmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBp bnQgRklQU19obWFjX3NoYTIyNF90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtl eVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRl eHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHg3 NSwgMHg1OCwgMHhkNSwgMHhiZCwgMHg1NSwgMHg2ZCwgMHg4NywgMHgwZiwgMHg3NSwgMHhmZiwg MHhiZSwgMHgxYywgMHhiMiwgMHhmMCwgMHgyMCwgMHgzNSwKLSsJIDB4ZTUsIDB4NjIsIDB4NDks IDB4YjYsIDB4OTQsIDB4YjksIDB4ZmMsIDB4NjUsIDB4MzQsIDB4MzMsIDB4M2EsIDB4MTl9Owot KwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNpZ25l ZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFITUFD KEVWUF9zaGEyMjQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRs ZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIEhNQUMtU0hBMjU2 OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93 bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX2ht YWNfc2hhMjU2X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRh b25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAg IHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweGU5LCAweDE3LCAw eGMxLCAweDdiLCAweDRjLCAweDZiLCAweDc3LCAweGRhLCAweGQyLCAweDMwLCAweDM2LCAweDAy LCAweGY1LCAweDcyLCAweDMzLCAweDg3LAotKwkgMHg5ZiwgMHhjNiwgMHg2ZSwgMHg3YiwgMHg3 ZSwgMHhhOCwgMHhlYSwgMHhhYSwgMHg5ZiwgMHhiYSwgMHhlZSwgMHg1MSwgMHhmZiwgMHhkYSwg MHgyNCwgMHhmNH07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07 Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwot KyAgICBpZiAoIUhNQUMoRVZQX3NoYTI1NigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihp diktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxv dXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0r LyogSE1BQy1TSEEzODQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBj b21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0 aWMgaW50IEZJUFNfaG1hY19zaGEzODRfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hh ciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBs ZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsJ ezB4YjIsIDB4OWQsIDB4NDAsIDB4NTgsIDB4MzIsIDB4YzQsIDB4ZTMsIDB4MzEsIDB4YjYsIDB4 NjMsIDB4MDgsIDB4MjYsIDB4OTksIDB4ZWYsIDB4M2IsIDB4MTAsCi0rCSAweGUyLCAweGRmLCAw eGY4LCAweGZmLCAweGM2LCAweGUxLCAweDAzLCAweDI5LCAweDgxLCAweDJhLCAweDFiLCAweGFj LCAweGIwLCAweDA3LCAweDM5LCAweDA4LAotKwkgMHhmMywgMHg5MSwgMHgzNSwgMHgxMSwgMHg3 NiwgMHhkNiwgMHg0YywgMHgyMCwgMHhmYiwgMHg0ZCwgMHhjMywgMHhmMywgMHhiOCwgMHg5Yiwg MHg4OCwgMHgxY307Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07 Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwot KyAgICBpZiAoIUhNQUMoRVZQX3NoYTM4NCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihp diktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxv dXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0r LyogSE1BQy1TSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBj b21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0 aWMgaW50IEZJUFNfaG1hY19zaGE1MTJfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hh ciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBs ZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsJ ezB4Y2QsIDB4M2UsIDB4YjksIDB4NTEsIDB4YjgsIDB4YmMsIDB4N2YsIDB4OWEsIDB4MjMsIDB4 YWYsIDB4ZjMsIDB4NzcsIDB4NTksIDB4ODUsIDB4YTksIDB4ZTYsCi0rCSAweGY3LCAweGQxLCAw eDUxLCAweDk2LCAweDE3LCAweGUwLCAweDkyLCAweGQ4LCAweGE2LCAweDNiLCAweGMxLCAweGFk LCAweDdlLCAweDI0LCAweGNhLCAweGIxLAotKwkgMHhkNywgMHg3OSwgMHgwYSwgMHhhNSwgMHhl YSwgMHgyYywgMHgwMiwgMHg1OCwgMHgwYiwgMHhhNiwgMHg1MiwgMHg2YiwgMHg2MSwgMHg3Ziwg MHhlYiwgMHg5YywKLSsJIDB4NDcsIDB4ODYsIDB4NWQsIDB4NzQsIDB4MmIsIDB4ODgsIDB4ZGYs IDB4ZWUsIDB4NDYsIDB4NjksIDB4OTYsIDB4M2QsIDB4YTYsIDB4ZDksIDB4MmEsIDB4NTN9Owot KwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNpZ25l ZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFITUFD KEVWUF9zaGE1MTIoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRs ZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKwotKy8qIERIOiBnZW5l cmF0ZSBzaGFyZWQgcGFyYW1ldGVycwotKyovCi0rc3RhdGljIGludCBkaF90ZXN0KCkKLSsgICAg ewotKyAgICBESCAqZGg7Ci0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBkaCA9IEZJUFNf ZGhfbmV3KCk7Ci0rICAgIGlmICghZGgpCi0rCXJldHVybiAwOwotKyAgICBpZiAoIURIX2dlbmVy YXRlX3BhcmFtZXRlcnNfZXgoZGgsIDEwMjQsIDIsIE5VTEwpKQotKwlyZXR1cm4gMDsKLSsgICAg RklQU19kaF9mcmVlKGRoKTsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBaZXJvaXpl Ci0rKi8KLStzdGF0aWMgaW50IFplcm9pemUoKQotKyAgICB7Ci0rICAgIFJTQSAqa2V5OwotKyAg ICBCSUdOVU0gKmJuOwotKyAgICB1bnNpZ25lZCBjaGFyIHVzZXJrZXlbMTZdID0gCi0rCXsgMHg0 OCwgMHg1MCwgMHhmMCwgMHhhMywgMHgzYSwgMHhlZCwgMHhkMywgMHhhZiwgMHg2ZSwgMHg0Nywg MHg3ZiwgMHg4MywgMHgwMiwgMHhiMSwgMHgwOSwgMHg2OCB9OwotKyAgICBpbnQgaSwgbjsKLSsK LSsgICAga2V5ID0gRklQU19yc2FfbmV3KCk7Ci0rICAgIGJuID0gQk5fbmV3KCk7Ci0rICAgIGlm ICgha2V5IHx8ICFibikKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7 Ci0rICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVMTCkpCi0rCXJl dHVybiAwOwotKyAgICBCTl9mcmVlKGJuKTsKLSsgICAgCi0rICAgIG4gPSBCTl9udW1fYnl0ZXMo a2V5LT5kKTsKLSsgICAgcHJpbnRmKCIgR2VuZXJhdGVkICVkIGJ5dGUgUlNBIHByaXZhdGUga2V5 XG4iLCBuKTsKLSsgICAgcHJpbnRmKCJcdEJOIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6XG4iKTsK LSsgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOwotKyAgICBCTl9yYW5kKGtleS0+ZCxu KjgsLTEsMCk7Ci0rICAgIHByaW50ZigiXHRCTiBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6XG4iKTsK LSsgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOwotKwotKyAgICBwcmludGYoIlx0Y2hh ciBidWZmZXIga2V5IGJlZm9yZSBvdmVyd3JpdGluZzogXG5cdFx0Iik7Ci0rICAgIGZvcihpID0g MDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsK LSsgICAgICAgIHByaW50ZigiXG4iKTsKLSsgICAgUkFORF9ieXRlcyh1c2Vya2V5LCBzaXplb2Yg dXNlcmtleSk7Ci0rICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYWZ0ZXIgb3ZlcndyaXRp bmc6IFxuXHRcdCIpOwotKyAgICBmb3IoaSA9IDA7IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykg cHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7Ci0rICAgICAgICBwcmludGYoIlxuIik7Ci0rCi0r ICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rc3RhdGljIGludCBFcnJvcjsKLStjb25zdCBjaGFy ICogRmFpbChjb25zdCBjaGFyICptc2cpCi0rICAgIHsKLSsgICAgZG9fcHJpbnRfZXJyb3JzKCk7 Ci0rICAgIEVycm9yKys7Ci0rICAgIHJldHVybiBtc2c7IAotKyAgICB9Ci0rCi0raW50IG1haW4o aW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsKLSsgICAgaW50IGRvX2NvcnJ1cHRfcnNh X2tleWdlbiA9IDAsIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDA7Ci0rICAgIGludCBiYWRfcnNh ID0gMCwgYmFkX2RzYSA9IDA7Ci0rICAgIGludCBkb19ybmdfc3RpY2sgPSAwOwotKyAgICBpbnQg bm9fZXhpdCA9IDA7Ci0rCi0rICAgIHByaW50ZigiXHRGSVBTLW1vZGUgdGVzdCBhcHBsaWNhdGlv blxuXG4iKTsKLSsKLSsgICAgLyogTG9hZCBlbnRyb3B5IGZyb20gZXh0ZXJuYWwgZmlsZSwgaWYg YW55ICovCi0rICAgIFJBTkRfbG9hZF9maWxlKCIucm5kIiwgMTAyNCk7Ci0rCi0rICAgIGlmIChh cmd2WzFdKSB7Ci0rICAgICAgICAvKiBDb3JydXB0ZWQgS0FUIHRlc3RzICovCi0rICAgICAgICBp ZiAoIXN0cmNtcChhcmd2WzFdLCAiYWVzIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRf YWVzKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdp dGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJn dlsxXSwgImRlcyIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X2RlcygpOwotKyAgICAg ICAgICAgIHByaW50ZigiREVTMy1FQ0IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGggY29ycnVw dGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRz YSIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X2RzYSgpOwotKyAgICAgICAgICAgIHBy aW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNv cnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0s ICJyc2EiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9yc2EoKTsKLSsgICAgICAgICAg ICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0 aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2 WzFdLCAicnNha2V5IikpIHsKLSsgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlv biBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKLSsJ ICAgIGJhZF9yc2EgPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICB9IGVsc2UgaWYg KCFzdHJjbXAoYXJndlsxXSwgInJzYWtleWdlbiIpKSB7Ci0rCSAgICBkb19jb3JydXB0X3JzYV9r ZXlnZW4gPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICAgICAgcHJpbnRmKCJSU0Eg a2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtl eWdlbi4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtl eSIpKSB7Ci0rICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25h dHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7Ci0rCSAgICBiYWRfZHNh ID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFy Z3ZbMV0sICJkc2FrZXlnZW4iKSkgewotKwkgICAgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMTsK LSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0 aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5cbiIp OwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJzaGExIikpIHsKLSsgICAg ICAgICAgICBGSVBTX2NvcnJ1cHRfc2hhMSgpOwotKyAgICAgICAgICAgIHByaW50ZigiU0hBLTEg aGFzaCB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJn dlsxXSwgInJuZyIpKSB7Ci0rCSAgICBGSVBTX2NvcnJ1cHRfcm5nKCk7Ci0rCX0gZWxzZSBpZiAo IXN0cmNtcChhcmd2WzFdLCAicm5nc3RpY2siKSkgewotKwkgICAgZG9fcm5nX3N0aWNrID0gMTsK LSsJICAgIG5vX2V4aXQgPSAxOwotKwkgICAgcHJpbnRmKCJSTkcgdGVzdCB3aXRoIHN0dWNrIGNv bnRpbnVvdXMgdGVzdC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIHBy aW50ZigiQmFkIGFyZ3VtZW50IFwiJXNcIlxuIiwgYXJndlsxXSk7Ci0rICAgICAgICAgICAgZXhp dCgxKTsKLSsgICAgICAgIH0KLSsJaWYgKCFub19leGl0KSB7Ci0rICAgICAgICAJaWYgKCFGSVBT X21vZGVfc2V0KDEpKSB7Ci0rIAkJICAgIGRvX3ByaW50X2Vycm9ycygpOwotKyAgICAgICAgCSAg ICBwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBmYWlsZWRcbiIpOwotKwkJICAgIGV4aXQoMSk7 Ci0rCQl9Ci0rICAgICAgICAJcHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3Qgc3VjY2Vzc2Z1bFxu Iik7Ci0rICAgICAgICAJZXhpdCgwKTsKLSsJfQotKyAgICB9Ci0rCi0rICAgIC8qIE5vbi1BcHBy b3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjEuIE5v bi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKLSsgICAgcHJp bnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOwotKyAgICBwcmludGYoIGRo X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAg IC8qIFBvd2VyLXVwIHNlbGYgdGVzdAotKyAgICAqLwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsK LSsgICAgcHJpbnRmKCIyLiBBdXRvbWF0aWMgcG93ZXItdXAgc2VsZiB0ZXN0Li4uIik7Ci0rICAg IGlmICghRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsgICAg ICAgIHByaW50ZihGYWlsKCJGQUlMRUQhXG4iKSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgcHJp bnRmKCJzdWNjZXNzZnVsXG4iKTsKLSsgICAgaWYgKGRvX2NvcnJ1cHRfZHNhX2tleWdlbikKLSsg ICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbigpOwotKyAgICBpZiAoZG9fY29ycnVw dF9yc2Ffa2V5Z2VuKQotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKCk7Ci0r ICAgIGlmIChkb19ybmdfc3RpY2spCi0rICAgICAgICAgICAgRklQU19ybmdfc3RpY2soKTsKLSsK LSsgICAgLyogQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbgotKyAgICAqLwotKyAgICBwcmludGYo IjMuIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2Fl c190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAg ICAvKiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVjcnlwdGlvbgotKyAgICAq LwotKyAgICBwcmludGYoIjQuIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNy eXB0aW9uLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19yc2FfdGVzdChiYWRfcnNhKSA/ICJzdWNj ZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIERFUy1DQkMgZW5j cnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiNS4gREVTLUVDQiBlbmNy eXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2RlczNfdGVzdCgpID8g InN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogRFNBIGtl eSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbgotKyAgICAqLwotKyAgICBwcmlu dGYoIjYuIERTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24uLi4iKTsK LSsgICAgcHJpbnRmKCBGSVBTX2RzYV90ZXN0KGJhZF9kc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAg RmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogU0hBLTEgaGFzaAotKyAgICAqLwotKyAg ICBwcmludGYoIjdhLiBTSEEtMSBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19zaGExX3Rl c3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8q IFNIQS0yNTYgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdiLiBTSEEtMjU2IGhhc2guLi4i KTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBG YWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBTSEEtNTEyIGhhc2gKLSsgICAgKi8KLSsg ICAgcHJpbnRmKCI3Yy4gU0hBLTUxMiBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19zaGE1 MTJfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsg ICAgLyogSE1BQy1TSEEtMSBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2QuIEhNQUMtU0hB LTEgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGExX3Rlc3QoKSA/ICJzdWNj ZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTIy NCBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2UuIEhNQUMtU0hBLTIyNCBoYXNoLi4uIik7 Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTIyNF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6 ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0yNTYgaGFzaAotKyAg ICAqLwotKyAgICBwcmludGYoIjdmLiBITUFDLVNIQS0yNTYgaGFzaC4uLiIpOwotKyAgICBwcmlu dGYoIEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJ TEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMzg0IGhhc2gKLSsgICAgKi8KLSsgICAg cHJpbnRmKCI3Zy4gSE1BQy1TSEEtMzg0IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2ht YWNfc2hhMzg0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7 Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTUxMiBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2gu IEhNQUMtU0hBLTUxMiBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTUxMl90 ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAv KiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KLSsgICAgKi8KLSsgICAgcHJp bnRmKCI4LiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7 Ci0rICAgIHByaW50ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKLSsgICAg cHJpbnRmKCBkaF90ZXN0KCkgPyAic3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgotKwkgICAgOiBG YWlsKCJmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSApOwotKwotKyAgICAvKiBaZXJvaXphdGlvbgot KyAgICAqLwotKyAgICBwcmludGYoIjkuIFplcm8taXphdGlvbi4uLlxuIik7Ci0rICAgIHByaW50 ZiggWmVyb2l6ZSgpID8gIlx0c3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgotKwkgICAgOiBGYWls KCJcdGZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7Ci0rCi0rICAgIHByaW50ZigiXG5BbGwgdGVz dHMgY29tcGxldGVkIHdpdGggJWQgZXJyb3JzXG4iLCBFcnJvcik7Ci0rICAgIHJldHVybiBFcnJv ciA/IDEgOiAwOwotKyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZmlwcy9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL01ha2Vm aWxlCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcwkyMDEyLTA0 LTIwIDA5OjA3OjA2LjI3Mjc4NTg3MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9m aXBzL01ha2VmaWxlCTIwMTItMDQtMjAgMDk6MDc6MDYuMjcyNzg1ODcwICswMjAwCi1AQCAtMCww ICsxLDM0MCBAQAotKyMKLSsjIE9wZW5TU0wvY3J5cHRvL2ZpcHMvTWFrZWZpbGUKLSsjCi0rCi0r RElSPQlmaXBzCi0rVE9QPQkuLi8uLgotK0NDPQljYwotK0lOQ0xVREVTPQotK0NGTEFHPS1nCi0r TUFLRUZJTEU9CU1ha2VmaWxlCi0rQVI9CQlhciByCi0rCi0rQ0ZMQUdTPSAkKElOQ0xVREVTKSAk KENGTEFHKQotKwotK0dFTkVSQUw9TWFrZWZpbGUKLStURVNUPWZpcHNfdGVzdF9zdWl0ZS5jIGZp cHNfcmFuZHRlc3QuYwotK0FQUFM9Ci0rCi0rUFJPR1JBTT0gZmlwc19zdGFuZGFsb25lX2htYWMK LStFWEU9ICQoUFJPR1JBTSkkKEVYRV9FWFQpCi0rCi0rTElCPSQoVE9QKS9saWJjcnlwdG8uYQot K0xJQlNSQz1maXBzX2Flc19zZWxmdGVzdC5jIGZpcHNfZGVzX3NlbGZ0ZXN0LmMgZmlwc19obWFj X3NlbGZ0ZXN0LmMgZmlwc19yYW5kX3NlbGZ0ZXN0LmMgXAotKyAgICBmaXBzX3JzYV9zZWxmdGVz dC5jIGZpcHNfc2hhX3NlbGZ0ZXN0LmMgZmlwcy5jIGZpcHNfZHNhX3NlbGZ0ZXN0LmMgIGZpcHNf cmFuZC5jIFwKLSsgICAgZmlwc19yc2FfeDkzMWcuYyBmaXBzX3Bvc3QuYyBmaXBzX2RyYmdfY3Ry LmMgZmlwc19kcmJnX2hhc2guYyBmaXBzX2RyYmdfaG1hYy5jIFwKLSsgICAgZmlwc19kcmJnX2xp Yi5jIGZpcHNfZHJiZ19yYW5kLmMgZmlwc19kcmJnX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX2xpYi5j IFwKLSsgICAgZmlwc19jbWFjX3NlbGZ0ZXN0LmMgZmlwc19lbmMuYyBmaXBzX21kLmMKLSsKLStM SUJPQko9Zmlwc19hZXNfc2VsZnRlc3QubyBmaXBzX2Rlc19zZWxmdGVzdC5vIGZpcHNfaG1hY19z ZWxmdGVzdC5vIGZpcHNfcmFuZF9zZWxmdGVzdC5vIFwKLSsgICAgZmlwc19yc2Ffc2VsZnRlc3Qu byBmaXBzX3NoYV9zZWxmdGVzdC5vIGZpcHMubyBmaXBzX2RzYV9zZWxmdGVzdC5vICBmaXBzX3Jh bmQubyBcCi0rICAgIGZpcHNfcnNhX3g5MzFnLm8gZmlwc19wb3N0Lm8gZmlwc19kcmJnX2N0ci5v IGZpcHNfZHJiZ19oYXNoLm8gZmlwc19kcmJnX2htYWMubyBcCi0rICAgIGZpcHNfZHJiZ19saWIu byBmaXBzX2RyYmdfcmFuZC5vIGZpcHNfZHJiZ19zZWxmdGVzdC5vIGZpcHNfcmFuZF9saWIubyBc Ci0rICAgIGZpcHNfY21hY19zZWxmdGVzdC5vIGZpcHNfZW5jLm8gZmlwc19tZC5vCi0rCi0rTElC Q1JZUFRPPS1MLi4gLWxjcnlwdG8KLSsKLStTUkM9ICQoTElCU1JDKSBmaXBzX3N0YW5kYWxvbmVf aG1hYy5jCi0rCi0rRVhIRUFERVI9IGZpcHMuaCBmaXBzX3JhbmQuaAotK0hFQURFUj0JJChFWEhF QURFUikKLSsKLStBTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotKwotK3RvcDoK LSsJKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQot KwotK2FsbDoJbGliIGV4ZQotKwotK2xpYjoJJChMSUJPQkopCi0rCSQoQVIpICQoTElCKSAkKExJ Qk9CSikKLSsJJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0rCUB0b3VjaCBs aWIKLSsKLStleGU6CSQoRVhFKQotKwotK2ZpbGVzOgotKwkkKFBFUkwpICQoVE9QKS91dGlsL2Zp bGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotKwotK2xpbmtzOgotKwlAJChQRVJMKSAk KFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCi0r CUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKLSsJQCQo UEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotKwotK2luc3Rh bGw6Ci0rCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFr ZWZpbGUuLi4KLSsJQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJs aXN0IDsgXAotKwlkbyAgXAotKwkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9Q KS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0rCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQo SU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0rCWRvbmU7Ci0rCi0rdGFnczoK LSsJY3RhZ3MgJChTUkMpCi0rCi0rdGVzdHM6Ci0rCi0rbGludDoKLSsJbGludCAtRExJTlQgJChJ TkNMVURFUykgJChTUkMpPmZsdWZmCi0rCi0rZGVwZW5kOgotKwlAWyAtbiAiJChNQUtFREVQRU5E KSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLSsJJChNQUtFREVQRU5E KSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JD KQotKwotK2RjbGVhbjoKLSsJJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElT IExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwotKwlt diAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLSsKLStjbGVhbjoKLSsJcm0gLWYgKi5vICou b2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLSsKLSskKEVY RSk6ICQoUFJPR1JBTSkubwotKwlGSVBTX1NIQV9BU009IiI7IGZvciBpIGluICQoU0hBMV9BU01f T0JKKSBzaGEyNTYubzsgZG8gRklQU19TSEFfQVNNPSIkJEZJUFNfU0hBX0FTTSAuLi9zaGEvJCRp IiA7IGRvbmU7IFwKLSsJJChDQykgLW8gJEAgJChDRkxBR1MpICQoUFJPR1JBTSkubyAkJEZJUFNf U0hBX0FTTQotKwotKyMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVw ZW5kcyBvbiBpdC4KLSsKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwcy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o Ci0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2htYWMuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2Zp cHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHMuYyBmaXBzX2xvY2wuaAotK2ZpcHNfYWVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Jpby5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19hZXNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgK LStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2Zp cHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBz X2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19h ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBz X2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNf YWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19h ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19h ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2Flc19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2Flc19zZWxm dGVzdC5jCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBz X2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9saGFzaC5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29ial9tYWMuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmplY3RzLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2Fm ZXN0YWNrLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3Rh Y2suaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oIGZpcHNfZGVzX3NlbGZ0ZXN0LmMKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX2N0 ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ny eXB0by5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlw c19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotK2ZpcHNf ZHJiZ19jdHIubzogZmlwc19kcmJnX2N0ci5jIGZpcHNfcmFuZF9sY2wuaAotK2ZpcHNfZHJiZ19o YXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YXNuMS5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNf ZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2RyYmdfaGFz aC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX2RyYmdfaGFzaC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o Ci0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgK LStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2Zp cHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3RhY2suaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1o YWNrcy5oIGZpcHNfZHJiZ19oYXNoLmMKLStmaXBzX2RyYmdfaGFzaC5vOiBmaXBzX3JhbmRfbGNs LmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RyYmdf aG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o Ci0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0r Zmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJnX2htYWMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX2htYWMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfaG1hYy5jCi0rZmlwc19kcmJnX2htYWMu bzogZmlwc19yYW5kX2xjbC5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19saWIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfZHJiZ19saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9obWFjLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX2xpYi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuaAotK2ZpcHNfZHJiZ19saWIubzogZmlwc19kcmJnX2xpYi5jIGZpcHNfbG9jbC5oIGZp cHNfcmFuZF9sY2wuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h ZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAot K2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19kcmJnX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19kcmJnX3JhbmQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStm aXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19k cmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2Ry YmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZHJiZ19y YW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9yYW5kLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2Fm ZXN0YWNrLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2su aAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZp cHNfZHJiZ19yYW5kLmMKLStmaXBzX2RyYmdfcmFuZC5vOiBmaXBzX3JhbmRfbGNsLmgKLStmaXBz X2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Jpby5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9jcnlwdG8uaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX2RyYmdfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz LmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFu ZC5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgK LStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStm aXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2Zp cHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlw c19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0r Zmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0r Zmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0r Zmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBz X2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlw c19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19k cmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJi Z19zZWxmdGVzdC5jCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IGZpcHNfZHJiZ19zZWxmdGVzdC5o IGZpcHNfbG9jbC5oIGZpcHNfcmFuZF9sY2wuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlw c19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0rZmlwc19kc2Ffc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kc2Ffc2VsZnRlc3QuYwotK2ZpcHNfZHNhX3Nl bGZ0ZXN0Lm86IGZpcHNfbG9jbC5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19obWFj X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfaG1hY19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2htYWNfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfaG1hY19zZWxmdGVzdC5jCi0rZmlwc19w b3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YXNuMS5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0rZmlwc19wb3N0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStm aXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ht YWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgK LStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBz X3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Jh bmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0r Zmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfbG9jbC5o IGZpcHNfcG9zdC5jCi0rZmlwc19yYW5kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYWVzLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0rZmlwc19yYW5k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcmFuZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpl Y3RzLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgK LStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmgKLStmaXBzX3JhbmQubzogZmlwc19sb2NsLmggZmlwc19yYW5kLmMKLStmaXBzX3Jh bmRfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgKLStmaXBz X3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Jpby5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLStmaXBzX3JhbmRfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStm aXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19yYW5kX2xp Yi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19yYW5kX2xpYi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBzX3Jh bmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfcmFuZF9s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N5bWhhY2tzLmgKLStmaXBzX3JhbmRfbGliLm86IGZpcHNfcmFuZF9saWIuYwotK2ZpcHNfcmFu ZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2FzbjEuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ny eXB0by5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAot K2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgK LStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAotK2Zp cHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNf cmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19y YW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3Jh bmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBz X3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBz X3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBz X3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfcmFu ZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX3Jh bmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX3JhbmRf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19sb2NsLmgK LStmaXBzX3JhbmRfc2VsZnRlc3QubzogZmlwc19yYW5kX3NlbGZ0ZXN0LmMKLStmaXBzX3JzYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i bi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9yc2EuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z YWZlc3RhY2suaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhh Y2tzLmggZmlwc19yc2Ffc2VsZnRlc3QuYwotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19yc2Ff eDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2Zp cHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlw c19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX3Jz YV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvcnNhLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3Rh Y2suaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5o IGZpcHNfcnNhX3g5MzFnLmMKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfc2hhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfc2hhX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfc2hhX3NlbGZ0 ZXN0LmMKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9obWFjL2htYWMuYy5maXBzIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9obWFjL2htYWMuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9obWFjL2htYWMuYy5maXBzCTIwMTEtMDYtMTIgMTc6MDc6MjYuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2htYWMvaG1hYy5jCTIwMTItMDQtMjAgMDk6MDc6MDYu MjczNzg1ODkxICswMjAwCi1AQCAtODEsMTEgKzgxLDYgQEAgaW50IEhNQUNfSW5pdF9leChITUFD X0NUWCAqY3R4LCBjb25zdCB2bwotIAkJCUVWUGVycihFVlBfRl9ITUFDX0lOSVRfRVgsIEVWUF9S X0RJU0FCTEVEX0ZPUl9GSVBTKTsKLSAJCQlyZXR1cm4gMDsKLSAJCQl9Ci0tCQkvKiBPdGhlciBh bGdvcml0aG0gYmxvY2tpbmcgd2lsbCBiZSBkb25lIGluIEZJUFNfY21hY19pbml0LAotLQkJICog dmlhIEZJUFNfaG1hY19pbml0X2V4KCkuCi0tCQkgKi8KLS0JCWlmICghaW1wbCAmJiAhY3R4LT5p X2N0eC5lbmdpbmUpCi0tCQkJcmV0dXJuIEZJUFNfaG1hY19pbml0X2V4KGN0eCwga2V5LCBsZW4s IG1kLCBOVUxMKTsKLSAJCX0KLSAjZW5kaWYKLSAKLUBAIC05OSw2ICs5NCwxMyBAQCBpbnQgSE1B Q19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvCi0gCi0gCWlmIChrZXkgIT0gTlVMTCkK LSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkgJiYgIShtZC0+ ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKQotKwkJJiYgKCEoY3R4LT5tZF9jdHguZmxhZ3MgJiBF VlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkgfHwgIShjdHgtPmlfY3R4LmZsYWdz ICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJIHx8ICEoY3R4LT5vX2N0eC5m bGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpKQotKwkJCWdvdG8gZXJyOwot KyNlbmRpZgotIAkJcmVzZXQ9MTsKLSAJCWo9RVZQX01EX2Jsb2NrX3NpemUobWQpOwotIAkJT1BF TlNTTF9hc3NlcnQoaiA8PSAoaW50KXNpemVvZihjdHgtPmtleSkpOwotQEAgLTE1NSwxMCArMTU3 LDYgQEAgaW50IEhNQUNfSW5pdChITUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkCi0gCi0gaW50IEhN QUNfVXBkYXRlKEhNQUNfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVf dCBsZW4pCi0gCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSAmJiAh Y3R4LT5pX2N0eC5lbmdpbmUpCi0tCQlyZXR1cm4gRklQU19obWFjX3VwZGF0ZShjdHgsIGRhdGEs IGxlbik7Ci0tI2VuZGlmCi0gCXJldHVybiBFVlBfRGlnZXN0VXBkYXRlKCZjdHgtPm1kX2N0eCxk YXRhLGxlbik7Ci0gCX0KLSAKLUBAIC0xNjYsMTAgKzE2NCw2IEBAIGludCBITUFDX0ZpbmFsKEhN QUNfQ1RYICpjdHgsIHVuc2lnbmVkIGMKLSAJewotIAl1bnNpZ25lZCBpbnQgaTsKLSAJdW5zaWdu ZWQgY2hhciBidWZbRVZQX01BWF9NRF9TSVpFXTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlm IChGSVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCi0tCQlyZXR1cm4gRklQU19obWFj X2ZpbmFsKGN0eCwgbWQsIGxlbik7Ci0tI2VuZGlmCi0gCi0gCWlmICghRVZQX0RpZ2VzdEZpbmFs X2V4KCZjdHgtPm1kX2N0eCxidWYsJmkpKQotIAkJZ290byBlcnI7Ci1AQCAtMjA5LDEzICsyMDMs NiBAQCBpbnQgSE1BQ19DVFhfY29weShITUFDX0NUWCAqZGN0eCwgSE1BQ19DCi0gCi0gdm9pZCBI TUFDX0NUWF9jbGVhbnVwKEhNQUNfQ1RYICpjdHgpCi0gCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBT Ci0tCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCi0tCQl7Ci0tCQlGSVBT X2htYWNfY3R4X2NsZWFudXAoY3R4KTsKLS0JCXJldHVybjsKLS0JCX0KLS0jZW5kaWYKLSAJRVZQ X01EX0NUWF9jbGVhbnVwKCZjdHgtPmlfY3R4KTsKLSAJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgt Pm9fY3R4KTsKLSAJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgtPm1kX2N0eCk7Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vbWQyL21kMl9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vbWQyL21kMl9k Z3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9tZDIvbWQyX2Rnc3QuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3NDc4 NTkxMiArMDIwMAotQEAgLTYyLDYgKzYyLDExIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvbWQyLmg+ Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlw dG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgot KyNlbmRpZgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotIAotIGNvbnN0IGNoYXIgTUQy X3ZlcnNpb25bXT0iTUQyIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi1AQCAtMTE2LDcgKzEy MSw3IEBAIGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQpCi0gCQlyZXR1cm4oIm1kMihpbnQp Iik7Ci0gCX0KLSAKLS1maXBzX21kX2luaXQoTUQyKQotK25vbmZpcHNfbWRfaW5pdChNRDIpCi0g CXsKLSAJYy0+bnVtPTA7Ci0gCW1lbXNldChjLT5zdGF0ZSwwLHNpemVvZiBjLT5zdGF0ZSk7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMuZmlwcyBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8v bWQ0L21kNF9kZ3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQzLjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYwkyMDEyLTA0LTIwIDA5OjA3 OjA2LjI3NDc4NTkxMiArMDIwMAotQEAgLTcxLDcgKzcxLDcgQEAgY29uc3QgY2hhciBNRDRfdmVy c2lvbltdPSJNRDQiIE9QRU5TU0xfVgotICNkZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxv bmcpMHg5OGJhZGNmZUwKLSAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAz MjU0NzZMCi0gCi0tZmlwc19tZF9pbml0KE1ENCkKLStub25maXBzX21kX2luaXQoTUQ0KQotIAl7 Ci0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwotIAljLT5BPUlOSVRfREFUQV9BOwotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MWEvY3J5cHRvL21kNS9tZDVfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL21kNS9t ZDVfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0My4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4y NzQ3ODU5MTIgKzAyMDAKLUBAIC03MSw3ICs3MSw3IEBAIGNvbnN0IGNoYXIgTUQ1X3ZlcnNpb25b XT0iTUQ1IiBPUEVOU1NMX1YKLSAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4 OThiYWRjZmVMCi0gI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2 TAotIAotLWZpcHNfbWRfaW5pdChNRDUpCi0rbm9uZmlwc19tZF9pbml0KE1ENSkKLSAJewotIAlt ZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+QT1JTklUX0RBVEFfQTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vbWRjMi9tZGMyZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL21kYzIvbWRj MmRnc3QuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDQuMDAwMDAwMDAwICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMWEvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3 NTc4NTkzNCArMDIwMAotQEAgLTc2LDcgKzc2LDcgQEAKLSAJCQkqKChjKSsrKT0odW5zaWduZWQg Y2hhcikoKChsKT4+MjRMKSYweGZmKSkKLSAKLSBzdGF0aWMgdm9pZCBtZGMyX2JvZHkoTURDMl9D VFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgbGVuKTsKLS1maXBzX21kX2lu aXQoTURDMikKLStub25maXBzX21kX2luaXQoTURDMikKLSAJewotIAljLT5udW09MDsKLSAJYy0+ cGFkX3R5cGU9MTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9vX2luaXQuYy5maXBz IG9wZW5zc2wtMS4wLjFhL2NyeXB0by9vX2luaXQuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9vX2luaXQuYy5maXBzCTIwMTEtMDUtMjYgMTY6MTk6MTkuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMWEvY3J5cHRvL29faW5pdC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjc1Nzg1 OTM0ICswMjAwCi1AQCAtNTUsMjggKzU1LDYzIEBACi0gI2luY2x1ZGUgPGVfb3MuaD4KLSAjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgotKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgotKyNpbmNsdWRlIDxmY250bC5oPgot KyNpbmNsdWRlIDx1bmlzdGQuaD4KLSsjaW5jbHVkZSA8ZXJybm8uaD4KLSsjaW5jbHVkZSA8c3Rk bGliLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KLSsKLSsjZGVmaW5lIEZJUFNfTU9ERV9TV0lUQ0hfRklMRSAiL3Byb2Mvc3lzL2NyeXB0 by9maXBzX2VuYWJsZWQiCi0rCi0rc3RhdGljIHZvaWQgaW5pdF9maXBzX21vZGUodm9pZCkKLSsJ ewotKwljaGFyIGJ1ZlsyXSA9ICIwIjsKLSsJaW50IGZkOwotKwkKLSsJaWYgKGdldGVudigiT1BF TlNTTF9GT1JDRV9GSVBTX01PREUiKSAhPSBOVUxMKQotKwkJewotKwkJYnVmWzBdID0gJzEnOwot KwkJfQotKwllbHNlIGlmICgoZmQgPSBvcGVuKEZJUFNfTU9ERV9TV0lUQ0hfRklMRSwgT19SRE9O TFkpKSA+PSAwKQotKwkJewotKwkJd2hpbGUgKHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwg MCAmJiBlcnJubyA9PSBFSU5UUik7Ci0rCQljbG9zZShmZCk7Ci0rCQl9Ci0rCS8qIEZhaWx1cmUg cmVhZGluZyB0aGUgZmlwcyBtb2RlIHN3aXRjaCBmaWxlIG1lYW5zIGp1c3Qgbm90Ci0rCSAqIHN3 aXRjaGluZyBpbnRvIEZJUFMgbW9kZS4gV2Ugd291bGQgYnJlYWsgdG9vIG1hbnkgdGhpbmdzCi0r CSAqIG90aGVyd2lzZS4gCi0rCSAqLwotKwkKLSsJaWYgKGJ1ZlswXSA9PSAnMScpCi0rCQl7Ci0r CQlGSVBTX21vZGVfc2V0KDEpOwotKwkJfQotKwl9Ci0gI2VuZGlmCi0gCi0gLyogUGVyZm9ybSBh bnkgZXNzZW50aWFsIE9wZW5TU0wgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucy4KLSAgKiBDdXJy ZW50bHkgb25seSBzZXRzIEZJUFMgY2FsbGJhY2tzCi0gICovCi0gCi0tdm9pZCBPUEVOU1NMX2lu aXQodm9pZCkKLSt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpCi0gCXsKLSAJc3RhdGlj IGludCBkb25lID0gMDsKLSAJaWYgKGRvbmUpCi0gCQlyZXR1cm47Ci0gCWRvbmUgPSAxOwotICNp ZmRlZiBPUEVOU1NMX0ZJUFMKLS0JRklQU19zZXRfbG9ja2luZ19jYWxsYmFja3MoQ1JZUFRPX2xv Y2ssIENSWVBUT19hZGRfbG9jayk7Ci0tCUZJUFNfc2V0X2Vycm9yX2NhbGxiYWNrcyhFUlJfcHV0 X2Vycm9yLCBFUlJfYWRkX2Vycm9yX3ZkYXRhKTsKLS0JRklQU19zZXRfbWFsbG9jX2NhbGxiYWNr cyhDUllQVE9fbWFsbG9jLCBDUllQVE9fZnJlZSk7Ci0gCVJBTkRfaW5pdF9maXBzKCk7Ci0rCWlu aXRfZmlwc19tb2RlKCk7Ci0gI2VuZGlmCi0gI2lmIDAKLSAJZnByaW50ZihzdGRlcnIsICJDYWxs ZWQgT1BFTlNTTF9pbml0XG4iKTsKLSAjZW5kaWYKLSAJfQotIAotK3ZvaWQgT1BFTlNTTF9pbml0 KHZvaWQpCi0rCXsKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsJfQotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWEvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcyBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vb3BlbnNzbGNvbmYuaC5pbgotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9vcGVuc3Ns Y29uZi5oLmluLmZpcHMJMjAwNS0xMi0xNiAxMTozNzoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgkyMDEyLTA0LTIwIDA5OjA3OjA2 LjI3Njc4NTk1NiArMDIwMAotQEAgLTEsNSArMSwyMCBAQAotIC8qIGNyeXB0by9vcGVuc3NsY29u Zi5oLmluICovCi0gCi0rI2lmZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORAotKwotKy8qIElu Y2x1ZGUgYW55IHN5bWJvbHMgaGVyZSB0aGF0IGhhdmUgdG8gYmUgZXhwbGljaXRseSBzZXQgdG8g ZW5hYmxlIGEgZmVhdHVyZQotKyAqIHRoYXQgc2hvdWxkIGJlIHZpc2libGUgdG8gbWFrZWRlcGVu ZC4KLSsgKgotKyAqIFtPdXIgIm1ha2UgZGVwZW5kIiBkb2Vzbid0IGFjdHVhbGx5IGxvb2sgYXQg dGhpcywgd2UgdXNlIGFjdHVhbCBidWlsZCBzZXR0aW5ncwotKyAqIGluc3RlYWQ7IHdlIHdhbnQg dG8gbWFrZSBpdCBlYXN5IHRvIHJlbW92ZSBzdWJkaXJlY3RvcmllcyB3aXRoIGRpc2FibGVkIGFs Z29yaXRobXMuXQotKyAqLwotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2RlZmluZSBPUEVO U1NMX0ZJUFMKLSsjZW5kaWYKLSsKLSsjZW5kaWYKLSsKLSAvKiBHZW5lcmF0ZSA4MDM4NiBjb2Rl PyAqLwotICN1bmRlZiBJMzg2X09OTFkKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9wa2NzMTIvcDEyX2NydC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3BrY3MxMi9wMTJf Y3J0LmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYy5maXBzCTIw MDktMDMtMDkgMTQ6MDg6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5 cHRvL3BrY3MxMi9wMTJfY3J0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNzc3ODU5NzggKzAyMDAK LUBAIC01OSw2ICs1OSwxMCBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlICJjcnlw dGxpYi5oIgotICNpbmNsdWRlIDxvcGVuc3NsL3BrY3MxMi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gCi0gc3RhdGlj IGludCBwa2NzMTJfYWRkX2JhZyhTVEFDS19PRihQS0NTMTJfU0FGRUJBRykgKipwYmFncywgUEtD UzEyX1NBRkVCQUcgKmJhZyk7Ci1AQCAtOTAsNyArOTQsMTQgQEAgUEtDUzEyICpQS0NTMTJfY3Jl YXRlKGNoYXIgKnBhc3MsIGNoYXIgKgotIAotIAkvKiBTZXQgZGVmYXVsdHMgKi8KLSAJaWYgKCFu aWRfY2VydCkKLSsJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkp Ci0rCQkJbmlkX2NlcnQgPSBOSURfcGJlX1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsK LSsJCWVsc2UKLSsjZW5kaWYKLSAJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0 UkMyX0NCQzsKLSsJCX0KLSAJaWYgKCFuaWRfa2V5KQotIAkJbmlkX2tleSA9IE5JRF9wYmVfV2l0 aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOwotIAlpZiAoIWl0ZXIpCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xYS9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vcmFuZC9tZF9yYW5kLmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcmFuZC9tZF9yYW5k LmMuZmlwcwkyMDExLTAxLTI2IDE1OjU1OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9yYW5kL21kX3JhbmQuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3Nzc4NTk3 OCArMDIwMAotQEAgLTM4OSw3ICszODksMTAgQEAgc3RhdGljIGludCBzc2xlYXlfcmFuZF9ieXRl cyh1bnNpZ25lZCBjaAotIAlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORDIpOwotIAlj cnlwdG9fbG9ja19yYW5kID0gMTsKLSAKLS0JaWYgKCFpbml0aWFsaXplZCkKLSsJLyogYWx3YXlz IHBvbGwgZm9yIGV4dGVybmFsIGVudHJvcHkgaW4gRklQUyBtb2RlLCBkcmJnIHByb3ZpZGVzIHRo ZSAKLSsJICogZXhwYW5zaW9uCi0rCSAqLwotKwlpZiAoIWluaXRpYWxpemVkIHx8IEZJUFNfbW9k dWxlX21vZGUoKSkgCi0gCQl7Ci0gCQlSQU5EX3BvbGwoKTsKLSAJCWluaXRpYWxpemVkID0gMTsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yYW5kL3JhbmQuaC5maXBzIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9yYW5kL3JhbmQuaAotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yYW5k L3JhbmQuaC5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDUuNjgxNzczMTk4ICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMWEvY3J5cHRvL3JhbmQvcmFuZC5oCTIwMTItMDQtMjAgMDk6MDc6MDYuMjc4Nzg1 OTk5ICswMjAwCi1AQCAtMTMzLDE1ICsxMzMsMzMgQEAgdm9pZCBFUlJfbG9hZF9SQU5EX3N0cmlu Z3Modm9pZCk7Ci0gLyogRXJyb3IgY29kZXMgZm9yIHRoZSBSQU5EIGZ1bmN0aW9ucy4gKi8KLSAK LSAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLSsjZGVmaW5lIFJBTkRfRl9FTkdfUkFORF9HRVRfUkFO RF9NRVRIT0QJCQkgMTA4Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19SQU5ECQkJCSAxMDMKLSsjZGVm aW5lIFJBTkRfRl9GSVBTX1JBTkRfQllURVMJCQkJIDEwMgotKyNkZWZpbmUgUkFORF9GX0ZJUFNf UkFORF9TRVRfRFQJCQkJIDEwNgotKyNkZWZpbmUgUkFORF9GX0ZJUFNfWDkzMV9TRVRfRFQJCQkJ IDEwNgotKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX0RUCQkJCSAxMDQKLSsjZGVmaW5lIFJBTkRf Rl9GSVBTX1NFVF9QUk5HX1NFRUQJCQkgMTA3Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfVEVT VF9NT0RFCQkJIDEwNQotICNkZWZpbmUgUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9ECQkJIDEw MQotLSNkZWZpbmUgUkFORF9GX1JBTkRfSU5JVF9GSVBTCQkJCSAxMDIKLSsjZGVmaW5lIFJBTkRf Rl9SQU5EX0lOSVRfRklQUwkJCQkgMTA5Ci0gI2RlZmluZSBSQU5EX0ZfU1NMRUFZX1JBTkRfQllU RVMJCQkgMTAwCi0gCi0gLyogUmVhc29uIGNvZGVzLiAqLwotLSNkZWZpbmUgUkFORF9SX0VSUk9S X0lOSVRJQUxJU0lOR19EUkJHCQkJIDEwMgotLSNkZWZpbmUgUkFORF9SX0VSUk9SX0lOU1RBTlRJ QVRJTkdfRFJCRwkJCSAxMDMKLS0jZGVmaW5lIFJBTkRfUl9OT19GSVBTX1JBTkRPTV9NRVRIT0Rf U0VUCQkgMTAxCi0rI2RlZmluZSBSQU5EX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcJCQkgMTEy Ci0rI2RlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDExMwotKyNkZWZp bmUgUkFORF9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTA1Ci0rI2RlZmluZSBSQU5EX1JfTk9UX0lO X1RFU1RfTU9ERQkJCQkgMTA2Ci0rI2RlZmluZSBSQU5EX1JfTk9fRklQU19SQU5ET01fTUVUSE9E X1NFVAkJIDExMQotKyNkZWZpbmUgUkFORF9SX05PX0tFWV9TRVQJCQkJIDEwNwotKyNkZWZpbmUg UkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9UT09fTVVDSAkJCSAxMDEKLSsjZGVmaW5lIFJBTkRfUl9Q Uk5HX0VSUk9SCQkJCSAxMDgKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX0tFWUVECQkJCSAxMDkKLSsj ZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRUtFWUVECQkJCSAxMDIKLSsjZGVmaW5lIFJBTkRfUl9Q Uk5HX05PVF9SRVNFRURFRAkJCSAxMDMKLSAjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9TRUVERUQJ CQkJIDEwMAotKyNkZWZpbmUgUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkJCSAx MTAKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX1NUVUNLCQkJCSAxMDQKLSAKLSAjaWZkZWYgIF9fY3Bs dXNwbHVzCi0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JpcGVtZC9ybWRfZGdz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jCi0tLS0gb3Bl bnNzbC0xLjAuMWEvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNToz OTo0NC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcmlwZW1kL3Jt ZF9kZ3N0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNzg3ODU5OTkgKzAyMDAKLUBAIC03MCw3ICs3 MCw3IEBAIGNvbnN0IGNoYXIgUk1EMTYwX3ZlcnNpb25bXT0iUklQRS1NRDE2MCIKLSAgICAgIHZv aWQgcmlwZW1kMTYwX2Jsb2NrKFJJUEVNRDE2MF9DVFggKmMsIHVuc2lnbmVkIGxvbmcgKnAsc2l6 ZV90IG51bSk7Ci0gIyAgZW5kaWYKLSAKLS1maXBzX21kX2luaXQoUklQRU1EMTYwKQotK25vbmZp cHNfbWRfaW5pdChSSVBFTUQxNjApCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0g CWMtPkE9UklQRU1EMTYwX0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3Jz YV9jcnB0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9jcnB0LmMKLS0tLSBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9jcnB0LmMuZmlwcwkyMDExLTA2LTAyIDIwOjIy OjQyLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yc2EvcnNhX2Ny cHQuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3OTc4NjAyMCArMDIwMAotQEAgLTkwLDEwICs5MCw5 IEBAIGludCBSU0FfcHJpdmF0ZV9lbmNyeXB0KGludCBmbGVuLCBjb25zdAotIAkgICAgIFJTQSAq cnNhLCBpbnQgcGFkZGluZykKLSAJewotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNf bW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQotLQkJ CSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJaWYoRklQU19t b2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotIAkJewot LQkJUlNBZXJyKFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX05PTl9GSVBTX1JTQV9N RVRIT0QpOwotKwkJUlNBZXJyKFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX09QRVJB VElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotIAkJcmV0dXJuIC0xOwotIAkJfQotICNl bmRpZgotQEAgLTExOCwxMCArMTE3LDkgQEAgaW50IFJTQV9wdWJsaWNfZGVjcnlwdChpbnQgZmxl biwgY29uc3QgdQotIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKLSAJewotICNpZmRlZiBP UEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJT QV9GTEFHX0ZJUFNfTUVUSE9EKQotLQkJCSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9G SVBTX0FMTE9XKSkKLSsJaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cpKQotIAkJewotLQkJUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQ VCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJ Q19ERUNSWVBULCBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLSAJ CXJldHVybiAtMTsKLSAJCX0KLSAjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9yc2EvcnNhX2VheS5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9yc2FfZWF5LmMK LS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzCTIwMTEtMTAtMTkg MTY6NTg6NTkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9y c2FfZWF5LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNzk3ODYwMjAgKzAyMDAKLUBAIC0xMTQsNiAr MTE0LDEwIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj ZW5kaWYKLSAKLSAjaWZuZGVmIFJTQV9OVUxMCi0gCi1AQCAtMTM4LDcgKzE0Miw3IEBAIHN0YXRp YyBSU0FfTUVUSE9EIHJzYV9wa2NzMV9lYXlfbWV0aD17Ci0gCUJOX21vZF9leHBfbW9udCwgLyog WFhYIHByb2JhYmx5IHdlIHNob3VsZCBub3QgdXNlIE1vbnRnb21lcnkgaWYgIGUgPT0gMyAqLwot IAlSU0FfZWF5X2luaXQsCi0gCVJTQV9lYXlfZmluaXNoLAotLQkwLCAvKiBmbGFncyAqLwotKwlS U0FfRkxBR19GSVBTX01FVEhPRCwgLyogZmxhZ3MgKi8KLSAJTlVMTCwKLSAJMCwgLyogcnNhX3Np Z24gKi8KLSAJMCwgLyogcnNhX3ZlcmlmeSAqLwotQEAgLTE1OCw2ICsxNjIsMjQgQEAgc3RhdGlj IGludCBSU0FfZWF5X3B1YmxpY19lbmNyeXB0KGludCBmbAotIAl1bnNpZ25lZCBjaGFyICpidWY9 TlVMTDsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlm KEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQkJ ewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsRklQU19SX0ZJUFNf U0VMRlRFU1RfRkFJTEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlpZiAoIShyc2Et PmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkJJiYgKEJOX251bV9iaXRzKHJz YS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJCXsKLSsJCQlS U0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NN QUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5f bnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0g CQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09f TEFSR0UpOwotQEAgLTM2MSw2ICszODMsMjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVf ZW5jcnlwdChpbnQgZgotIAlCSUdOVU0gKnVuYmxpbmQgPSBOVUxMOwotIAlCTl9CTElORElORyAq YmxpbmRpbmcgPSBOVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9k ZSgpKQotKwkJewotKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQ U2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVEKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwotKwkJaWYgKCEocnNhLT5mbGFncyAm IFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJCSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwg T1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCQl7Ci0rCQkJUlNBZXJyKFJT QV9GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwot KwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmICgoY3R4PUJOX0NU WF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotIAlmICAg PSBCTl9DVFhfZ2V0KGN0eCk7Ci1AQCAtNTA0LDYgKzU0NCwyNCBAQCBzdGF0aWMgaW50IFJTQV9l YXlfcHJpdmF0ZV9kZWNyeXB0KGludCBmCi0gCUJJR05VTSAqdW5ibGluZCA9IE5VTEw7Ci0gCUJO X0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlp ZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJ CXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCxGSVBTX1JfRklQ U19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCi0rCQlpZiAoIShy c2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkJJiYgKEJOX251bV9iaXRz KHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJCXsKLSsJ CQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RP T19TTUFMTCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYo KGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChj dHgpOwotIAlmICAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci1AQCAtNjM5LDYgKzY5NywyNCBAQCBzdGF0 aWMgaW50IFJTQV9lYXlfcHVibGljX2RlY3J5cHQoaW50IGZsCi0gCXVuc2lnbmVkIGNoYXIgKmJ1 Zj1OVUxMOwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJ aWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJ CQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCxGSVBTX1JfRklQ U19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWlmICghKHJz YS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKLSsJCQkmJiAoQk5fbnVtX2JpdHMo cnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQkJewotKwkJ CVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09f U01BTEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChC Tl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKLSAJCXsK LSAJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9NT0RVTFVTX1RP T19MQVJHRSk7Ci1AQCAtODQ3LDEyICs5MjMsMTIgQEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9l eHAoQklHTlVNICpyMCwgYwotIAlpZiAoIUJOX21vZChyMCxwcjEscnNhLT5wLGN0eCkpIGdvdG8g ZXJyOwotIAotIAkvKiBJZiBwIDwgcSBpdCBpcyBvY2Nhc2lvbmFsbHkgcG9zc2libGUgZm9yIHRo ZSBjb3JyZWN0aW9uIG9mCi0tICAgICAgICAgKiBhZGRpbmcgJ3AnIGlmIHIwIGlzIG5lZ2F0aXZl IGFib3ZlIHRvIGxlYXZlIHRoZSByZXN1bHQgc3RpbGwKLSsJICogYWRkaW5nICdwJyBpZiByMCBp cyBuZWdhdGl2ZSBhYm92ZSB0byBsZWF2ZSB0aGUgcmVzdWx0IHN0aWxsCi0gCSAqIG5lZ2F0aXZl LiBUaGlzIGNhbiBicmVhayB0aGUgcHJpdmF0ZSBrZXkgb3BlcmF0aW9uczogdGhlIGZvbGxvd2lu ZwotIAkgKiBzZWNvbmQgY29ycmVjdGlvbiBzaG91bGQgKmFsd2F5cyogY29ycmVjdCB0aGlzIHJh cmUgb2NjdXJyZW5jZS4KLSAJICogVGhpcyB3aWxsICpuZXZlciogaGFwcGVuIHdpdGggT3BlblNT TCBnZW5lcmF0ZWQga2V5cyBiZWNhdXNlCi0tICAgICAgICAgKiB0aGV5IGVuc3VyZSBwID4gcSBb c3RldmVdCi0tICAgICAgICAgKi8KLSsJICogdGhleSBlbnN1cmUgcCA+IHEgW3N0ZXZlXQotKwkg Ki8KLSAJaWYgKEJOX2lzX25lZ2F0aXZlKHIwKSkKLSAJCWlmICghQk5fYWRkKHIwLHIwLHJzYS0+ cCkpIGdvdG8gZXJyOwotIAlpZiAoIUJOX211bChyMSxyMCxyc2EtPnEsY3R4KSkgZ290byBlcnI7 Ci1AQCAtODk3LDYgKzk3Myw5IEBAIGVycjoKLSAKLSBzdGF0aWMgaW50IFJTQV9lYXlfaW5pdChS U0EgKnJzYSkKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVj aygpOwotKyNlbmRpZgotIAlyc2EtPmZsYWdzfD1SU0FfRkxBR19DQUNIRV9QVUJMSUN8UlNBX0ZM QUdfQ0FDSEVfUFJJVkFURTsKLSAJcmV0dXJuKDEpOwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yc2Ev cnNhX2Vyci5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcwky MDExLTEwLTEwIDAxOjEzOjUwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9yc2EvcnNhX2Vyci5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjgwNzg2MDQxICswMjAwCi1A QCAtMTIxLDYgKzEyMSw4IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9mdW5jdHNb XT0KLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQkxJQ19FTkNSWVBUKSwJIlJTQV9wdWJsaWNfZW5j cnlwdCJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFVCX0RFQ09ERSksCSJSU0FfUFVCX0RFQ09E RSJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2Js aW5kaW5nIn0sCi0re0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QpLAkiUlNB X3NldF9kZWZhdWx0X21ldGhvZCJ9LAotK3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX01FVEhPRCks CSJSU0Ffc2V0X21ldGhvZCJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksCSJSU0Ffc2ln biJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORyksCSJSU0Ff c2lnbl9BU04xX09DVEVUX1NUUklORyJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfVkVSSUZZKSwJ IlJTQV92ZXJpZnkifSwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yc2EvcnNhX2dl bi5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9yc2FfZ2VuLmMKLS0tLSBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9nZW4uYy5maXBzCTIwMTEtMDYtMDkgMTU6MTg6MDcuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9yc2FfZ2VuLmMJMjAx Mi0wNC0yMCAwOTowNzowNi4yODE3ODYwNjIgKzAyMDAKLUBAIC02OSw2ICs2OSw3OCBAQAotICNp bmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSAjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXZwLmg+Ci0rCi0rc3RhdGljIGludCBmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsK LSsKLSt2b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKHZvaWQpCi0rCXsKLSsJZmlwc19yc2Ff cGFpcndpc2VfZmFpbCA9IDE7Ci0rCX0KLSsKLStpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2Ep Ci0rCXsKLSsJY29uc3QgdW5zaWduZWQgY2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sg RGF0YSI7Ci0rCXVuc2lnbmVkIGNoYXIgKmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKLSsJ aW50IGxlbiwgcmV0ID0gMDsKLSsJRVZQX1BLRVkgKnBrOwotKwotKwlpZiAoKHBrPUVWUF9QS0VZ X25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVWUF9QS0VZX3NldDFfUlNBKHBr LCByc2EpOwotKwotKwkvKiBQZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0 ZXN0ICovCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKwkJ CU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCi0r CQl8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKwkJCU5VTEwsIDAs IEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwgTlVMTCkKLSsJCXx8ICFmaXBz X3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJTlVMTCwgMCwgRVZQX3NoYTEo KSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsIE5VTEwpKQotKwkJZ290byBlcnI7Ci0rCS8qIE5v dyBwZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCi0r CWN0YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7Ci0rCWlmICghY3RidWYpCi0r CQlnb3RvIGVycjsKLSsKLSsJbGVuID0gUlNBX3B1YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0g MSwgdGJzLCBjdGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7Ci0rCWlmIChsZW4gPD0gMCkK LSsJCWdvdG8gZXJyOwotKwkvKiBDaGVjayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50 ZXh0ICovCi0rCWlmICgobGVuID09IChzaXplb2YodGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywg Y3RidWYsIGxlbikpCi0rCQlnb3RvIGVycjsKLSsJcHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ff c2l6ZShyc2EpKTsKLSsKLSsJaWYgKCFwdGJ1ZikKLSsJCWdvdG8gZXJyOwotKwlsZW4gPSBSU0Ff cHJpdmF0ZV9kZWNyeXB0KGxlbiwgY3RidWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5H KTsKLSsJaWYgKGxlbiAhPSAoc2l6ZW9mKHRicykgLSAxKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAo bWVtY21wKHB0YnVmLCB0YnMsIGxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJcmV0ID0gMTsKLSsK LSsJaWYgKCFwdGJ1ZikKLSsJCWdvdG8gZXJyOwotKwkKLSsJZXJyOgotKwlpZiAocmV0ID09IDAp Ci0rCQl7Ci0rCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0NIRUNLX1JTQSxGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOwotKwkJfQotKwotKwlp ZiAoY3RidWYpCi0rCQlPUEVOU1NMX2ZyZWUoY3RidWYpOwotKwlpZiAocHRidWYpCi0rCQlPUEVO U1NMX2ZyZWUocHRidWYpOwotKwlpZiAocGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsKLSsJ cmV0dXJuIHJldDsKLSsJfQotICNlbmRpZgotIAotIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5 Z2VuKFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOwot QEAgLTgxLDcgKzE1Myw3IEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNh LAotIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICpl X3ZhbHVlLCBCTl9HRU5DQiAqY2IpCi0gCXsKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChG SVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkK LSsJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxB R19GSVBTX01FVEhPRCkKLSAJCQkmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19B TExPVykpCi0gCQl7Ci0gCQlSU0FlcnIoUlNBX0ZfUlNBX0dFTkVSQVRFX0tFWV9FWCwgUlNBX1Jf Tk9OX0ZJUFNfUlNBX01FVEhPRCk7Ci1AQCAtOTAsMTAgKzE2Miw2IEBAIGludCBSU0FfZ2VuZXJh dGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYmkKLSAjZW5kaWYKLSAJaWYocnNhLT5tZXRoLT5yc2Ff a2V5Z2VuKQotIAkJcmV0dXJuIHJzYS0+bWV0aC0+cnNhX2tleWdlbihyc2EsIGJpdHMsIGVfdmFs dWUsIGNiKTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSkKLS0JCXJl dHVybiBGSVBTX3JzYV9nZW5lcmF0ZV9rZXlfZXgocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7Ci0t I2VuZGlmCi0gCXJldHVybiByc2FfYnVpbHRpbl9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBj Yik7Ci0gCX0KLSAKLUBAIC0xMDUsNiArMTczLDIzIEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5f a2V5Z2VuKFJTQSAqcnNhLAotIAlpbnQgYml0c3AsYml0c3Esb2s9IC0xLG49MDsKLSAJQk5fQ1RY ICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZHVsZV9t b2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgCXsKLSsJ CSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0ZJUFNfU0VMRlRF U1RfRkFJTEVEKTsKLSsJICAgIAlyZXR1cm4gMDsKLSsJICAgIAl9Ci0rCi0rCQlpZiAoYml0cyA8 IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKLSsJCSAgICB7Ci0rCQkgICAgRklQ U2VycihGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOLEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKLSsJ CSAgICByZXR1cm4gMDsKLSsJCSAgICB9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWN0eD1CTl9DVFhf bmV3KCk7Ci0gCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgp OwotQEAgLTIxNiw2ICszMDEsMTcgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNB ICpyc2EsCi0gCQlwID0gcnNhLT5wOwotIAlpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+aXFtcCxy c2EtPnEscCxjdHgpKSBnb3RvIGVycjsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChG SVBTX21vZHVsZV9tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoZmlwc19yc2FfcGFpcndpc2VfZmFpbCkK LSsJCQlCTl9hZGRfd29yZChyc2EtPm4sIDEpOwotKwotKwkJaWYoIWZpcHNfY2hlY2tfcnNhKHJz YSkpCi0rCQkgICAgZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCW9rPTE7Ci0gZXJyOgot IAlpZiAob2sgPT0gLTEpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYS5o LmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9yc2EuaAotLS0tIG9wZW5zc2wtMS4wLjFh L2NyeXB0by9yc2EvcnNhLmguZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjAwMDc4MDAzOCArMDIw MAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yc2EvcnNhLmgJMjAxMi0wNC0yMCAwOTowNzow Ni4yODE3ODYwNjIgKzAyMDAKLUBAIC0xNjQsNiArMTY0LDggQEAgc3RydWN0IHJzYV9zdAotICMg ZGVmaW5lIE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMJMTYzODQKLSAjZW5kaWYKLSAKLSsj ZGVmaW5lIE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0rCi0gI2lmbmRl ZiBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMKLSAjIGRlZmluZSBPUEVOU1NMX1JTQV9T TUFMTF9NT0RVTFVTX0JJVFMJMzA3MgotICNlbmRpZgotQEAgLTI5MCw2ICsyOTIsMTEgQEAgUlNB ICoJUlNBX2dlbmVyYXRlX2tleShpbnQgYml0cywgdW5zaWduZQotIAotIC8qIE5ldyB2ZXJzaW9u ICovCi0gaW50CVJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0g KmUsIEJOX0dFTkNCICpjYik7Ci0raW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklH TlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKLSsJCQljb25zdCBC SUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCi0rCQkJY29u c3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAotKwkJ CWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKLStpbnQgUlNBX1g5MzFfZ2VuZXJhdGVf a2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2Ip OwotIAotIGludAlSU0FfY2hlY2tfa2V5KGNvbnN0IFJTQSAqKTsKLSAJLyogbmV4dCA0IHJldHVy biAtMSBvbiBlcnJvciAqLwotQEAgLTQ4Nyw3ICs0OTQsNyBAQCB2b2lkIEVSUl9sb2FkX1JTQV9z dHJpbmdzKHZvaWQpOwotICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX05PTkUJCQkgMTA3 Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfT0FFUAkJIDEyMQotICNkZWZp bmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTUwkJCSAxMjUKLS0jZGVmaW5lIFJTQV9G X1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1NfTUdGMQkJIDE0OAotKyNkZWZpbmUgUlNBX0ZfUlNB X1BBRERJTkdfQUREX1BLQ1MxX1BTU19NR0YxCQkgMTU4Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFE RElOR19BRERfUEtDUzFfVFlQRV8xCQkgMTA4Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19B RERfUEtDUzFfVFlQRV8yCQkgMTA5Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfU1NM VjIzCQkJIDExMAotQEAgLTUwMCwyMCArNTA3LDIyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmlu Z3Modm9pZCk7Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19DSEVDS19YOTMxCQkJIDEyOAot ICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UCQkJCQkgMTE1Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFJJ TlRfRlAJCQkJIDExNgotLSNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVAkJCSAxNTAK LS0jZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQJCQkgMTUxCi0rI2RlZmluZSBSU0Ff Rl9SU0FfUFJJVkFURV9ERUNSWVBUCQkJIDE1NwotKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVf RU5DUllQVAkJCSAxNDgKLSAjZGVmaW5lIFJTQV9GX1JTQV9QUklWX0RFQ09ERQkJCQkgMTM3Ci0g I2RlZmluZSBSU0FfRl9SU0FfUFJJVl9FTkNPREUJCQkJIDEzOAotLSNkZWZpbmUgUlNBX0ZfUlNB X1BVQkxJQ19ERUNSWVBUCQkJIDE1MgotKyNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBU CQkJIDE0OQotICNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19FTkNSWVBUCQkJIDE1MwotICNkZWZp bmUgUlNBX0ZfUlNBX1BVQl9ERUNPREUJCQkJIDEzOQotICNkZWZpbmUgUlNBX0ZfUlNBX1NFVFVQ X0JMSU5ESU5HCQkJIDEzNgotKyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRAkJ CSAxNTAKLSsjZGVmaW5lIFJTQV9GX1JTQV9TRVRfTUVUSE9ECQkJCSAxNTEKLSAjZGVmaW5lIFJT QV9GX1JTQV9TSUdOCQkJCQkgMTE3Ci0gI2RlZmluZSBSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVU X1NUUklORwkJIDExOAotICNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWQkJCQkgMTE5Ci0gI2RlZmlu ZSBSU0FfRl9SU0FfVkVSSUZZX0FTTjFfT0NURVRfU1RSSU5HCQkgMTIwCi0gI2RlZmluZSBSU0Ff Rl9SU0FfVkVSSUZZX1BLQ1MxX1BTUwkJCSAxMjYKLS0jZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllf UEtDUzFfUFNTX01HRjEJCQkgMTQ5Ci0rI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BT U19NR0YxCQkJIDE1MgotIAotIC8qIFJlYXNvbiBjb2Rlcy4gKi8KLSAjZGVmaW5lIFJTQV9SX0FM R09SSVRITV9NSVNNQVRDSAkJCSAxMDAKLUBAIC01NDIsMjEgKzU1MSwyMiBAQCB2b2lkIEVSUl9s b2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9NR0YxX01ECQkJ CSAxNTYKLSAjZGVmaW5lIFJTQV9SX0lOVkFMSURfUEFERElORwkJCQkgMTM4Ci0gI2RlZmluZSBS U0FfUl9JTlZBTElEX1BBRERJTkdfTU9ERQkJCSAxNDEKLS0jZGVmaW5lIFJTQV9SX0lOVkFMSURf UFNTX1BBUkFNRVRFUlMJCQkgMTQ5Ci0rI2RlZmluZSBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVU RVJTCQkJIDE1NwotICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QU1NfU0FMVExFTgkJCSAxNDYKLS0j ZGVmaW5lIFJTQV9SX0lOVkFMSURfU0FMVF9MRU5HVEgJCQkgMTUwCi0rI2RlZmluZSBSU0FfUl9J TlZBTElEX1NBTFRfTEVOR1RICQkJIDE1OAotICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9UUkFJTEVS CQkJCSAxMzkKLSAjZGVmaW5lIFJTQV9SX0lOVkFMSURfWDkzMV9ESUdFU1QJCQkgMTQyCi0gI2Rl ZmluZSBSU0FfUl9JUU1QX05PVF9JTlZFUlNFX09GX1EJCQkgMTI2Ci0gI2RlZmluZSBSU0FfUl9L RVlfU0laRV9UT09fU01BTEwJCQkgMTIwCi0gI2RlZmluZSBSU0FfUl9MQVNUX09DVEVUX0lOVkFM SUQJCQkgMTM0Ci0gI2RlZmluZSBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRQkJCQkgMTA1Ci0tI2Rl ZmluZSBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9ECQkJIDE1NwotKyNkZWZpbmUgUlNBX1JfTk9O X0ZJUFNfUlNBX01FVEhPRAkJCSAxNDkKLSsjZGVmaW5lIFJTQV9SX05PTl9GSVBTX01FVEhPRAkJ CQkgMTQ5Ci0gI2RlZmluZSBSU0FfUl9OT19QVUJMSUNfRVhQT05FTlQJCQkgMTQwCi0gI2RlZmlu ZSBSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HCQkJIDExMwotICNkZWZpbmUgUlNBX1Jf Tl9ET0VTX05PVF9FUVVBTF9QX1EJCQkgMTI3Ci0gI2RlZmluZSBSU0FfUl9PQUVQX0RFQ09ESU5H X0VSUk9SCQkJIDEyMQotLSNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJ UFNfTU9ERQkgMTU4Ci0rI2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQ U19NT0RFCSAxNTAKLSAjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9U SElTX0tFWVRZUEUJIDE0OAotICNkZWZpbmUgUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQJCQkg MTE0Ci0gI2RlZmluZSBSU0FfUl9QX05PVF9QUklNRQkJCQkgMTI4Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9y c2EvcnNhX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlw cwkyMDExLTA2LTIwIDIxOjQxOjEzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFh L2NyeXB0by9yc2EvcnNhX2xpYi5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjgyNzg2MDgzICswMjAw Ci1AQCAtODQsNiArODQsMTMgQEAgUlNBICpSU0FfbmV3KHZvaWQpCi0gCi0gdm9pZCBSU0Ffc2V0 X2RlZmF1bHRfbWV0aG9kKGNvbnN0IFJTQV9NRVRIT0QgKm1ldGgpCi0gCXsKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdf RklQU19NRVRIT0QpKQotKwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRI T0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rI2VuZGlmCi0g CWRlZmF1bHRfUlNBX21ldGggPSBtZXRoOwotIAl9Ci0gCi1AQCAtOTEsMTggKzk4LDExIEBAIGNv bnN0IFJTQV9NRVRIT0QgKlJTQV9nZXRfZGVmYXVsdF9tZXRob2QKLSAJewotIAlpZiAoZGVmYXVs dF9SU0FfbWV0aCA9PSBOVUxMKQotIAkJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChG SVBTX21vZGUoKSkKLS0JCQlyZXR1cm4gRklQU19yc2FfcGtjczFfc3NsZWF5KCk7Ci0tCQllbHNl Ci0tCQkJcmV0dXJuIFJTQV9QS0NTMV9TU0xlYXkoKTsKLS0jZWxzZQotICNpZmRlZiBSU0FfTlVM TAotIAkJZGVmYXVsdF9SU0FfbWV0aD1SU0FfbnVsbF9tZXRob2QoKTsKLSAjZWxzZQotIAkJZGVm YXVsdF9SU0FfbWV0aD1SU0FfUEtDUzFfU1NMZWF5KCk7Ci0gI2VuZGlmCi0tI2VuZGlmCi0gCQl9 Ci0gCi0gCXJldHVybiBkZWZhdWx0X1JTQV9tZXRoOwotQEAgLTExOCw2ICsxMTgsMTMgQEAgaW50 IFJTQV9zZXRfbWV0aG9kKFJTQSAqcnNhLCBjb25zdCBSU0FfTQotIAkvKiBOQjogVGhlIGNhbGxl ciBpcyBzcGVjaWZpY2FsbHkgc2V0dGluZyBhIG1ldGhvZCwgc28gaXQncyBub3QgdXAgdG8gdXMK LSAJICogdG8gZGVhbCB3aXRoIHdoaWNoIEVOR0lORSBpdCBjb21lcyBmcm9tLiAqLwotIAljb25z dCBSU0FfTUVUSE9EICptdG1wOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9k ZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCi0rCQl7Ci0rCQlS U0FlcnIoUlNBX0ZfUlNBX1NFVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQly ZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAJbXRtcCA9IHJzYS0+bWV0aDsKLSAJaWYgKG10bXAt PmZpbmlzaCkgbXRtcC0+ZmluaXNoKHJzYSk7Ci0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQot QEAgLTE3MCw2ICsxNzcsMTggQEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkK LSAJCQl9Ci0gCQl9Ci0gI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19t b2RlKCkgJiYgIShyZXQtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQotKwkJ ewotKwkJUlNBZXJyKFJTQV9GX1JTQV9ORVdfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0Qp OwotKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSsJCWlmIChyZXQtPmVuZ2luZSkKLSsJCQlF TkdJTkVfZmluaXNoKHJldC0+ZW5naW5lKTsKLSsjZW5kaWYKLSsJCU9QRU5TU0xfZnJlZShyZXQp OwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rI2VuZGlmCi0gCi0gCXJldC0+cGFkPTA7Ci0gCXJl dC0+dmVyc2lvbj0wOwotQEAgLTE4OCw3ICsyMDcsNyBAQCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVO R0lORSAqZW5naW5lKQotIAlyZXQtPmJsaW5kaW5nPU5VTEw7Ci0gCXJldC0+bXRfYmxpbmRpbmc9 TlVMTDsKLSAJcmV0LT5iaWdudW1fZGF0YT1OVUxMOwotLQlyZXQtPmZsYWdzPXJldC0+bWV0aC0+ ZmxhZ3MgJiB+UlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1c7Ci0rCXJldC0+ZmxhZ3M9cmV0LT5tZXRo LT5mbGFnczsKLSAJaWYgKCFDUllQVE9fbmV3X2V4X2RhdGEoQ1JZUFRPX0VYX0lOREVYX1JTQSwg cmV0LCAmcmV0LT5leF9kYXRhKSkKLSAJCXsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jLmZpcHMgb3BlbnNz bC0xLjAuMWEvY3J5cHRvL3JzYS9yc2FfcG1ldGguYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9yc2EvcnNhX3BtZXRoLmMuZmlwcwkyMDEyLTAyLTE1IDE1OjE0OjAxLjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMJMjAxMi0wNC0yMCAw OTowNzowNi4yODI3ODYwODMgKzAyMDAKLUBAIC0yMDYsMjIgKzIwNiw2IEBAIHN0YXRpYyBpbnQg cGtleV9yc2Ffc2lnbihFVlBfUEtFWV9DVFggKmMKLSAJCQkJCVJTQV9SX0lOVkFMSURfRElHRVNU X0xFTkdUSCk7Ci0gCQkJcmV0dXJuIC0xOwotIAkJCX0KLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0t CQlpZiAocmV0ID4gMCkKLS0JCQl7Ci0tCQkJdW5zaWduZWQgaW50IHNsZW47Ci0tCQkJcmV0ID0g RklQU19yc2Ffc2lnbl9kaWdlc3QocnNhLCB0YnMsIHRic2xlbiwgcmN0eC0+bWQsCi0tCQkJCQkJ CXJjdHgtPnBhZF9tb2RlLAotLQkJCQkJCQlyY3R4LT5zYWx0bGVuLAotLQkJCQkJCQlyY3R4LT5t Z2YxbWQsCi0tCQkJCQkJCXNpZywgJnNsZW4pOwotLQkJCWlmIChyZXQgPiAwKQotLQkJCQkqc2ln bGVuID0gc2xlbjsKLS0JCQllbHNlCi0tCQkJCSpzaWdsZW4gPSAwOwotLQkJCXJldHVybiByZXQ7 Ci0tCQkJfQotLSNlbmRpZgotIAotIAkJaWYgKEVWUF9NRF90eXBlKHJjdHgtPm1kKSA9PSBOSURf bWRjMikKLSAJCQl7Ci1AQCAtMzU0LDE5ICszMzgsNiBAQCBzdGF0aWMgaW50IHBrZXlfcnNhX3Zl cmlmeShFVlBfUEtFWV9DVFgKLSAjZW5kaWYKLSAJaWYgKHJjdHgtPm1kKQotIAkJewotLSNpZmRl ZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChydiA+IDApCi0tCQkJewotLQkJCXJldHVybiBGSVBTX3Jz YV92ZXJpZnlfZGlnZXN0KHJzYSwKLS0JCQkJCQkJdGJzLCB0YnNsZW4sCi0tCQkJCQkJCXJjdHgt Pm1kLAotLQkJCQkJCQlyY3R4LT5wYWRfbW9kZSwKLS0JCQkJCQkJcmN0eC0+c2FsdGxlbiwKLS0J CQkJCQkJcmN0eC0+bWdmMW1kLAotLQkJCQkJCQlzaWcsIHNpZ2xlbik7Ci0tCQkJCQkJCQotLQkJ CX0KLS0jZW5kaWYKLSAJCWlmIChyY3R4LT5wYWRfbW9kZSA9PSBSU0FfUEtDUzFfUEFERElORykK LSAJCQlyZXR1cm4gUlNBX3ZlcmlmeShFVlBfTURfdHlwZShyY3R4LT5tZCksIHRicywgdGJzbGVu LAotIAkJCQkJc2lnLCBzaWdsZW4sIHJzYSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vcnNhL3JzYV9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9zaWdu LmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDEyLTAy LTE1IDE1OjAwOjA5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9y c2EvcnNhX3NpZ24uYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI4Mzc4NjEwNSArMDIwMAotQEAgLTEz OCw3ICsxMzgsOCBAQCBpbnQgUlNBX3NpZ24oaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoCi0g CQlpMmRfWDUwOV9TSUcoJnNpZywmcCk7Ci0gCQlzPXRtcHM7Ci0gCX0KLS0JaT1SU0FfcHJpdmF0 ZV9lbmNyeXB0KGkscyxzaWdyZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKLSsJLyogTkI6IGNh bGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLwot KwlpID0gcnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMgPyByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhp LHMsc2lncmV0LHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAwOwotIAlpZiAoaSA8PSAwKQotIAkJ cmV0PTA7Ci0gCWVsc2UKLUBAIC0xNzgsOCArMTc5LDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGlu dCBkdHlwZSwgY29uc3QgdW5zaQotIAotIAlpZigoZHR5cGUgPT0gTklEX21kNV9zaGExKSAmJiBy bSkKLSAJCXsKLS0JCWkgPSBSU0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sCi0tCQkJCQlz aWdidWYscm0scnNhLFJTQV9QS0NTMV9QQURESU5HKTsKLSsJCWkgPSByc2EtPm1ldGgtPnJzYV9w dWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbiwKLSsJCQkJCXNpZ2J1 ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKLSAJCWlmIChpIDw9IDApCi0gCQkJcmV0 dXJuIDA7Ci0gCQkqcHJtX2xlbiA9IGk7Ci1AQCAtMTk2LDcgKzE5Nyw4IEBAIGludCBpbnRfcnNh X3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2kKLSAJCQlSU0FlcnIoUlNBX0ZfSU5UX1JTQV9W RVJJRlksUlNBX1JfSU5WQUxJRF9NRVNTQUdFX0xFTkdUSCk7Ci0gCQkJZ290byBlcnI7Ci0gCX0K LS0JaT1SU0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NT MV9QQURESU5HKTsKLSsJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8g YXZvaWQgRklQUyBibG9ja2luZyAqLwotKwlpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJz YS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9Q QURESU5HKSA6IDA7Ci0gCi0gCWlmIChpIDw9IDApIGdvdG8gZXJyOwotIAkvKiBPZGRiYWxsIE1E QzIgY2FzZTogc2lnbmF0dXJlIGNhbiBiZSBPQ1RFVCBTVFJJTkcuCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3No YS9zaGEyNTYuYwotLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcwky MDExLTA2LTAxIDE1OjM5OjQ0LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9zaGEvc2hhMjU2LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yODM3ODYxMDUgKzAyMDAKLUBA IC0xMiwxMiArMTIsMTkgQEAKLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSAjaW5j bHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+ Ci0gCi0gY29uc3QgY2hhciBTSEEyNTZfdmVyc2lvbltdPSJTSEEtMjU2IiBPUEVOU1NMX1ZFUlNJ T05fUFRFWFQ7Ci0gCi0gZmlwc19tZF9pbml0X2N0eChTSEEyMjQsIFNIQTI1NikKLSAJewotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlt ZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+aFswXT0weGMxMDU5ZWQ4VUw7CWMtPmhbMV09 MHgzNjdjZDUwN1VMOwotIAljLT5oWzJdPTB4MzA3MGRkMTdVTDsJYy0+aFszXT0weGY3MGU1OTM5 VUw7Ci1AQCAtMjksNiArMzYsOSBAQCBmaXBzX21kX2luaXRfY3R4KFNIQTIyNCwgU0hBMjU2KQot IAotIGZpcHNfbWRfaW5pdChTSEEyNTYpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJ UFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7 Ci0gCWMtPmhbMF09MHg2YTA5ZTY2N1VMOwljLT5oWzFdPTB4YmI2N2FlODVVTDsKLSAJYy0+aFsy XT0weDNjNmVmMzcyVUw7CWMtPmhbM109MHhhNTRmZjUzYVVMOwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWEvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9zaGEv c2hhNTEyLmMKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMJMjAx MS0xMS0xNCAyMTo1ODowMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vc2hhL3NoYTUxMi5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjg0Nzg2MTI3ICswMjAwCi1AQCAt NSw2ICs1LDEwIEBACi0gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgKi8KLSAjaW5jbHVkZSA8b3BlbnNzbC9v cGVuc3NsY29uZi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVm aW5lZChPUEVOU1NMX05PX1NIQTUxMikKLSAvKgotICAqIElNUExFTUVOVEFUSU9OIE5PVEVTLgot QEAgLTYxLDYgKzY1LDkgQEAgY29uc3QgY2hhciBTSEE1MTJfdmVyc2lvbltdPSJTSEEtNTEyIiBP UAotIAotIGZpcHNfbWRfaW5pdF9jdHgoU0hBMzg0LCBTSEE1MTIpCi0gCXsKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJYy0+aFswXT1V NjQoMHhjYmJiOWQ1ZGMxMDU5ZWQ4KTsKLSAJYy0+aFsxXT1VNjQoMHg2MjlhMjkyYTM2N2NkNTA3 KTsKLSAJYy0+aFsyXT1VNjQoMHg5MTU5MDE1YTMwNzBkZDE3KTsKLUBAIC03Nyw2ICs4NCw5IEBA IGZpcHNfbWRfaW5pdF9jdHgoU0hBMzg0LCBTSEE1MTIpCi0gCi0gZmlwc19tZF9pbml0KFNIQTUx MikKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwot KyNlbmRpZgotIAljLT5oWzBdPVU2NCgweDZhMDllNjY3ZjNiY2M5MDgpOwotIAljLT5oWzFdPVU2 NCgweGJiNjdhZTg1ODRjYWE3M2IpOwotIAljLT5oWzJdPVU2NCgweDNjNmVmMzcyZmU5NGY4MmIp OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3NoYS9zaGEuaC5maXBzIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9zaGEvc2hhLmgKLS0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vc2hhL3No YS5oLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNS40OTM3NjkxNjggKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vc2hhL3NoYS5oCTIwMTItMDQtMjAgMDk6MDc6MDYuMjg1Nzg2MTQ5ICsw MjAwCi1AQCAtMTE2LDkgKzExNiw2IEBAIHVuc2lnbmVkIGNoYXIgKlNIQShjb25zdCB1bnNpZ25l ZCBjaGFyICoKLSB2b2lkIFNIQV9UcmFuc2Zvcm0oU0hBX0NUWCAqYywgY29uc3QgdW5zaWduZWQg Y2hhciAqZGF0YSk7Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NIQTEKLS0jaWZkZWYg T1BFTlNTTF9GSVBTCi0taW50IHByaXZhdGVfU0hBMV9Jbml0KFNIQV9DVFggKmMpOwotLSNlbmRp ZgotIGludCBTSEExX0luaXQoU0hBX0NUWCAqYyk7Ci0gaW50IFNIQTFfVXBkYXRlKFNIQV9DVFgg KmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwotIGludCBTSEExX0ZpbmFsKHVuc2ln bmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKLUBAIC0xNDEsMTAgKzEzOCw2IEBAIHR5cGVkZWYg c3RydWN0IFNIQTI1NnN0YXRlX3N0Ci0gCX0gU0hBMjU2X0NUWDsKLSAKLSAjaWZuZGVmIE9QRU5T U0xfTk9fU0hBMjU2Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLWludCBwcml2YXRlX1NIQTIyNF9J bml0KFNIQTI1Nl9DVFggKmMpOwotLWludCBwcml2YXRlX1NIQTI1Nl9Jbml0KFNIQTI1Nl9DVFgg KmMpOwotLSNlbmRpZgotIGludCBTSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKLSBpbnQgU0hB MjI0X1VwZGF0ZShTSEEyNTZfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsK LSBpbnQgU0hBMjI0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEEyNTZfQ1RYICpjKTsKLUBA IC0xOTIsMTAgKzE4NSw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQTUxMnN0YXRlX3N0Ci0gI2VuZGlm Ci0gCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS1p bnQgcHJpdmF0ZV9TSEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKLS1pbnQgcHJpdmF0ZV9TSEE1 MTJfSW5pdChTSEE1MTJfQ1RYICpjKTsKLS0jZW5kaWYKLSBpbnQgU0hBMzg0X0luaXQoU0hBNTEy X0NUWCAqYyk7Ci0gaW50IFNIQTM4NF9VcGRhdGUoU0hBNTEyX0NUWCAqYywgY29uc3Qgdm9pZCAq ZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IFNIQTM4NF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwg U0hBNTEyX0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vc2hhL3NoYV9s b2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vc2hhL3NoYV9sb2NsLmgKLS0tLSBvcGVu c3NsLTEuMC4xYS9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA1 LjQ5OTc2OTI5NiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9zaGEvc2hhX2xvY2wu aAkyMDEyLTA0LTIwIDA5OjA3OjA2LjI4NTc4NjE0OSArMDIwMAotQEAgLTEyMywxMSArMTIzLDE0 IEBAIHZvaWQgc2hhMV9ibG9ja19kYXRhX29yZGVyIChTSEFfQ1RYICpjLAotICNkZWZpbmUgSU5J VF9EQVRBX2g0IDB4YzNkMmUxZjBVTAotIAotICNpZmRlZiBTSEFfMAotLWZpcHNfbWRfaW5pdChT SEEpCi0rbm9uZmlwc19tZF9pbml0KFNIQSkKLSAjZWxzZQotIGZpcHNfbWRfaW5pdF9jdHgoU0hB MSwgU0hBKQotICNlbmRpZgotIAl7Ci0rI2lmIGRlZmluZWQoU0hBXzEpICYmIGRlZmluZWQoT1BF TlNTTF9GSVBTKQotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldCAo YywwLHNpemVvZigqYykpOwotIAljLT5oMD1JTklUX0RBVEFfaDA7Ci0gCWMtPmgxPUlOSVRfREFU QV9oMTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jCi0tLS0gb3BlbnNz bC0xLjAuMWEvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6 NDUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3docmxwb29sL3dw X2Rnc3QuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI4Njc4NjE3MSArMDIwMAotQEAgLTU1LDcgKzU1 LDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+ Ci0gCi0tZmlwc19tZF9pbml0KFdISVJMUE9PTCkKLStub25maXBzX21kX2luaXQoV0hJUkxQT09M KQotIAl7Ci0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwotIAlyZXR1cm4oMSk7Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xYS9NYWtlZmlsZS5vcmcuZmlwcyBvcGVuc3NsLTEuMC4xYS9NYWtlZmls ZS5vcmcKLS0tLSBvcGVuc3NsLTEuMC4xYS9NYWtlZmlsZS5vcmcuZmlwcwkyMDEyLTA0LTIwIDA5 OjA3OjA2LjE5OTc4NDMwNCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFhL01ha2VmaWxlLm9yZwky MDEyLTA0LTIwIDA5OjA3OjA2LjI4Njc4NjE3MSArMDIwMAotQEAgLTEzNiw2ICsxMzYsOSBAQCBG SVBTQ0FOTElCPQotIAotIEJBU0VBRERSPQotIAotKyMgTm9uLWVtcHR5IGlmIEZJUFMgZW5hYmxl ZAotK0ZJUFM9Ci0rCi0gRElSUz0gICBjcnlwdG8gc3NsIGVuZ2luZXMgYXBwcyB0ZXN0IHRvb2xz Ci0gRU5HRElSUz0gY2Nnb3N0Ci0gU0hMSUJESVJTPSBjcnlwdG8gc3NsCi1AQCAtMTQ4LDcgKzE1 MSw3IEBAIFNESVJTPSAgXAotIAlibiBlYyByc2EgZHNhIGVjZHNhIGRoIGVjZGggZHNvIGVuZ2lu ZSBcCi0gCWJ1ZmZlciBiaW8gc3RhY2sgbGhhc2ggcmFuZCBlcnIgXAotIAlldnAgYXNuMSBwZW0g eDUwOSB4NTA5djMgY29uZiB0eHRfZGIgcGtjczcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1IFwK LS0JY21zIHBxdWV1ZSB0cyBqcGFrZSBzcnAgc3RvcmUgY21hYwotKwljbXMgcHF1ZXVlIHRzIGpw YWtlIHNycCBzdG9yZSBjbWFjIGZpcHMKLSAjIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBhYm92ZSBs aXN0IGlzIGFkanVzdGVkIGJ5IC4vQ29uZmlndXJlCi0gIyBhY2NvcmRpbmcgdG8gbm8teHh4IGFy Z3VtZW50cy4uLgotIAotQEAgLTIzNyw2ICsyNDAsNyBAQCBCVUlMREVOVj0JUExBVEZPUk09JyQo UExBVEZPUk0pJyBQUk9DRVNTCi0gCQlGSVBTTElCRElSPScke0ZJUFNMSUJESVJ9JwkJCVwKLSAJ CUZJUFNESVI9JyR7RklQU0RJUn0nCQkJCVwKLSAJCUZJUFNDQU5MSUI9IiQke0ZJUFNDQU5MSUI6 LSQoRklQU0NBTkxJQil9IglcCi0rCQlGSVBTPSIkJHtGSVBTOi0kKEZJUFMpfSIJXAotIAkJVEhJ Uz0kJHtUSElTOi0kQH0gTUFLRUZJTEU9TWFrZWZpbGUgTUFLRU9WRVJSSURFUz0KLSAjIE1BS0VP VkVSUklERVM9IGVmZmVjdGl2ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2ggYW5kIFN5c1YtaXNoIG1h a2UgZmxhdm9ycywKLSAjIHdoaWNoIGluIHR1cm4gZWxpbWluYXRlcyBhbWJpZ3VpdGllcyBpbiB2 YXJpYWJsZSB0cmVhdG1lbnQgd2l0aCAtZS4KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL3NzbC9z c2xfYWxncy5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvc3NsL3NzbF9hbGdzLmMKLS0tLSBvcGVuc3Ns LTEuMC4xYS9zc2wvc3NsX2FsZ3MuYy5maXBzCTIwMTItMDEtMTUgMTQ6NDI6NTAuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMWEvc3NsL3NzbF9hbGdzLmMJMjAxMi0wNC0yMCAwOTow NzowNi4yODc3ODYxOTIgKzAyMDAKLUBAIC02NCw2ICs2NCwxMiBAQAotIGludCBTU0xfbGlicmFy eV9pbml0KHZvaWQpCi0gCXsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCU9QRU5TU0xfaW5p dF9saWJyYXJ5KCk7Ci0rCWlmICghRklQU19tb2RlKCkpCi0rCQl7Ci0rI2VuZGlmCi0rCi0gI2lm bmRlZiBPUEVOU1NMX05PX0RFUwotIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NiYygpKTsKLSAJ RVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKLUBAIC0xMzYsNiArMTQyLDUwIEBA IGludCBTU0xfbGlicmFyeV9pbml0KHZvaWQpCi0gCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEoKSk7 Ci0gCUVWUF9hZGRfZGlnZXN0KEVWUF9kc3MoKSk7Ci0gI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwkJfQotKwllbHNlCi0rCQl7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0RFUwotKwlFVlBf YWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2JjKCkpOwotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNT TF9OT19BRVMKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwotKwlFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzE5Ml9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2 X2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2NtKCkpOwotKwlFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05P X01ENQotKwkvKiBuZWVkZWQgZXZlbiBpbiB0aGUgRklQUyBtb2RlIGZvciBUTFMgTUFDICovCi0r CUVWUF9hZGRfZGlnZXN0KEVWUF9tZDUoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21k NSwic3NsMi1tZDUiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wzLW1kNSIp OwotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEKLSsJRVZQX2FkZF9kaWdlc3QoRVZQ X3NoYTEoKSk7IC8qIFJTQSB3aXRoIHNoYTEgKi8KLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05f c2hhMSwic3NsMy1zaGExIik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNB RW5jcnlwdGlvbixTTl9zaGExV2l0aFJTQSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05P X1NIQTI1NgotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOwotKwlFVlBfYWRkX2RpZ2Vz dChFVlBfc2hhMjU2KCkpOwotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKLSsJ RVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUx MigpKTsKLSsjZW5kaWYKLSsjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVk KE9QRU5TU0xfTk9fRFNBKQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsgLyogRFNBIHdp dGggc2hhMSAqLwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSxTTl9kc2FX aXRoU0hBMV8yKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIkRTUzEi KTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsImRzczEiKTsKLSsjZW5k aWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNh KCkpOwotKyNlbmRpZgotKwkJfQotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCi0g CS8qIFRoaXMgd2lsbCBpbml0aWFsaXNlIHRoZSBidWlsdC1pbiBjb21wcmVzc2lvbiBhbGdvcml0 aG1zLgotIAkgICBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgYSBTVEFDS19PRihTU0xfQ09NUCksIGJ1 dCB0aGF0IGNhbgoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjFiLWZpcHMucGF0Y2ggYi9vcGVu c3NsLTEuMC4xYi1maXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu Ljk2MDM3YTcKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4xYi1maXBzLnBhdGNoCkBA IC0wLDAgKzEsMjAzMzQgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2FwcHMvcGtjczEyLmMu ZmlwcyBvcGVuc3NsLTEuMC4xYi9hcHBzL3BrY3MxMi5jCistLS0gb3BlbnNzbC0xLjAuMWIvYXBw cy9wa2NzMTIuYy5maXBzCTIwMTEtMDMtMTMgMTk6MjA6MjMuMDAwMDAwMDAwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMWIvYXBwcy9wa2NzMTIuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM3OTc2ODg0 MCArMDIwMAorQEAgLTY3LDYgKzY3LDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAj aW5jbHVkZSA8b3BlbnNzbC9wZW0uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgor IAorICNkZWZpbmUgUFJPRyBwa2NzMTJfbWFpbgorIAorQEAgLTEzMCw2ICsxMzMsMTEgQEAgaW50 IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorICAgICBhcHBzX3N0YXJ0dXAoKTsKKyAK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX21vZGUoKSkKKysJY2VydF9wYmUg PSBrZXlfcGJlOyAvKiBjYW5ub3QgdXNlIFJDMiBpbiB0aGUgRklQUyBtb2RlICovCisrI2VuZGlm CisrCisgICAgIGVuYyA9IEVWUF9kZXNfZWRlM19jYmMoKTsKKyAgICAgaWYgKGJpb19lcnIgPT0g TlVMTCApIGJpb19lcnIgPSBCSU9fbmV3X2ZwIChzdGRlcnIsIEJJT19OT0NMT1NFKTsKKyAKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2FwcHMvc3BlZWQuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2Fw cHMvc3BlZWQuYworLS0tIG9wZW5zc2wtMS4wLjFiL2FwcHMvc3BlZWQuYy5maXBzCTIwMTItMDEt MTEgMjI6NDk6MTYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWIvYXBwcy9zcGVl ZC5jCTIwMTItMDQtMjYgMTg6MDA6NTEuMzgwNzY4ODYxICswMjAwCitAQCAtMTk1LDcgKzE5NSw2 IEBACisgI2lmZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORAorICN1bmRlZiBBRVNfc2V0X2Vu Y3J5cHRfa2V5CisgI3VuZGVmIEFFU19zZXRfZGVjcnlwdF9rZXkKKy0jdW5kZWYgREVTX3NldF9r ZXlfdW5jaGVja2VkCisgI2VuZGlmCisgI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0 X2tleQorICNkZWZpbmUgQ0FTVF9zZXRfa2V5CXByaXZhdGVfQ0FTVF9zZXRfa2V5CitAQCAtMjAz LDcgKzIwMiw2IEBACisgI2RlZmluZSBTRUVEX3NldF9rZXkJcHJpdmF0ZV9TRUVEX3NldF9rZXkK KyAjZGVmaW5lIFJDMl9zZXRfa2V5CXByaXZhdGVfUkMyX3NldF9rZXkKKyAjZGVmaW5lIFJDNF9z ZXRfa2V5CXByaXZhdGVfUkM0X3NldF9rZXkKKy0jZGVmaW5lIERFU19zZXRfa2V5X3VuY2hlY2tl ZAlwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZAorICNkZWZpbmUgQUVTX3NldF9lbmNyeXB0 X2tleQlwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXkKKyAjZGVmaW5lIEFFU19zZXRfZGVjcnlw dF9rZXkJcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5CisgI2RlZmluZSBDYW1lbGxpYV9zZXRf a2V5CXByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleQorQEAgLTk0MSw3ICs5MzksMTIgQEAgaW50IE1B SU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKKyAJCQlp ZiAoc3RyY21wKCphcmd2LCJyc2EiKSA9PSAwKQorIAkJCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCQkJCWlmICghRklQU19tb2RlKCkpCisrI2VuZGlmCisrCQkJCXsKKyAJCQlyc2FfZG9pdFtS X1JTQV81MTJdPTE7CisrCQkJCX0KKyAJCQlyc2FfZG9pdFtSX1JTQV8xMDI0XT0xOworIAkJCXJz YV9kb2l0W1JfUlNBXzIwNDhdPTE7CisgCQkJcnNhX2RvaXRbUl9SU0FfNDA5Nl09MTsKK0BAIC05 NTEsNyArOTU0LDEyIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAjaWZuZGVm IE9QRU5TU0xfTk9fRFNBCisgCQkJaWYgKHN0cmNtcCgqYXJndiwiZHNhIikgPT0gMCkKKyAJCQl7 CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJCQlpZiAoIUZJUFNfbW9kZSgpKQorKyNlbmRpZgor KwkJCQl7CisgCQkJZHNhX2RvaXRbUl9EU0FfNTEyXT0xOworKwkJCQl9CisgCQkJZHNhX2RvaXRb Ul9EU0FfMTAyNF09MTsKKyAJCQlkc2FfZG9pdFtSX0RTQV8yMDQ4XT0xOworIAkJCX0KK0BAIC0x MjI2LDMwICsxMjM0LDU0IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJQUVT X3NldF9lbmNyeXB0X2tleShrZXkzMiwyNTYsJmFlc19rczMpOworICNlbmRpZgorICNpZm5kZWYg T1BFTlNTTF9OT19DQU1FTExJQQorKwlpZiAoZG9pdFtEX0NCQ18xMjhfQ01MXSB8fCBkb2l0W0Rf Q0JDXzE5Ml9DTUxdIHx8IGRvaXRbRF9DQkNfMjU2X0NNTF0pCisrCSAgICB7CisgCUNhbWVsbGlh X3NldF9rZXkoa2V5MTYsMTI4LCZjYW1lbGxpYV9rczEpOworIAlDYW1lbGxpYV9zZXRfa2V5KGNr ZXkyNCwxOTIsJmNhbWVsbGlhX2tzMik7CisgCUNhbWVsbGlhX3NldF9rZXkoY2tleTMyLDI1Niwm Y2FtZWxsaWFfa3MzKTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fSURF QQorKwlpZiAoZG9pdFtEX0NCQ19JREVBXSkKKysJICAgIHsKKyAJaWRlYV9zZXRfZW5jcnlwdF9r ZXkoa2V5MTYsJmlkZWFfa3MpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9O T19TRUVECisrCWlmIChkb2l0W0RfQ0JDX1NFRURdKQorKwkgICAgeworIAlTRUVEX3NldF9rZXko a2V5MTYsJnNlZWRfa3MpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19S QzQKKysJaWYgKGRvaXRbRF9SQzRdKQorKwkgICAgeworIAlSQzRfc2V0X2tleSgmcmM0X2tzLDE2 LGtleTE2KTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fUkMyCisrCWlm IChkb2l0W0RfQ0JDX1JDMl0pCisrCSAgICB7CisgCVJDMl9zZXRfa2V5KCZyYzJfa3MsMTYsa2V5 MTYsMTI4KTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fUkM1CisrCWlm IChkb2l0W0RfQ0JDX1JDNV0pCisrCSAgICB7CisgCVJDNV8zMl9zZXRfa2V5KCZyYzVfa3MsMTYs a2V5MTYsMTIpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19CRgorKwlp ZiAoZG9pdFtEX0NCQ19CRl0pCisrCSAgICB7CisgCUJGX3NldF9rZXkoJmJmX2tzLDE2LGtleTE2 KTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fQ0FTVAorKwlpZiAoZG9p dFtEX0NCQ19DQVNUXSkKKysJICAgIHsKKyAJQ0FTVF9zZXRfa2V5KCZjYXN0X2tzLDE2LGtleTE2 KTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisgCW1lbXNldChy c2FfYywwLHNpemVvZihyc2FfYykpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvQ29uZmlndXJl LmZpcHMgb3BlbnNzbC0xLjAuMWIvQ29uZmlndXJlCistLS0gb3BlbnNzbC0xLjAuMWIvQ29uZmln dXJlLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS4zNDE3NjgwMDkgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4xYi9Db25maWd1cmUJMjAxMi0wNC0yNiAxODowMDo1MS4zODE3Njg4ODMgKzAyMDAKK0BA IC05OTMsMTEgKzk5Myw2IEBAIGlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmlu ZWQKKyAJJGRpc2FibGVkeyJzc2wyIn0gPSAiZm9yY2VkIjsKKyAJfQorIAorLWlmICgkZmlwcyAm JiAkZmlwc2xpYmRpciBlcSAiIikKKy0JeworLQkkZmlwc2xpYmRpciA9ICRmaXBzZGlyIC4gIi9s aWIvIjsKKy0JfQorLQorICMgUlNBWCBFTkdJTkUgc2V0cyBkZWZhdWx0IG5vbi1GSVBTIFJTQSBt ZXRob2QuCisgaWYgKCRmaXBzKQorIAl7CitAQCAtMTQ3Miw3ICsxNDY3LDYgQEAgJGNmbGFncy49 IiAtRE9QRU5TU0xfQk5fQVNNX0dGMm0iIGlmICgkYgorIGlmICgkZmlwcykKKyAJeworIAkkb3Bl bnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7CistCSRjZmxhZ3Mg Lj0gIiAtSVwkKEZJUFNESVIpL2luY2x1ZGUiOworIAl9CisgCisgJGNwdWlkX29iaj0ibWVtX2Ns ci5vIgl1bmxlc3MgKCRjcHVpZF9vYmogPX4gL1wubyQvKTsKK0BAIC0xNjU5LDkgKzE2NTMsMTIg QEAgd2hpbGUgKDxJTj4pCisgCisgCXMvXkZJUFNESVI9LiovRklQU0RJUj0kZmlwc2Rpci87Cisg CXMvXkZJUFNMSUJESVI9LiovRklQU0xJQkRJUj0kZmlwc2xpYmRpci87CistCXMvXkZJUFNDQU5M SUI9LiovRklQU0NBTkxJQj1saWJjcnlwdG8vIGlmICRmaXBzOworIAlzL15CQVNFQUREUj0uKi9C QVNFQUREUj0kYmFzZWFkZHIvOworIAorKwlpZiAoJGZpcHMpCisrCQl7CisrCQlzL15GSVBTPS4q L0ZJUFM9eWVzLzsKKysJCX0KKyAJcy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hh cmVkX3RhcmdldC87CisgCXMvXlNITElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsv OworIAlzL15TSEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChT SEFSRURfU1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9hZXMvYWVzX21pc2MuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9hZXMvYWVzX21p c2MuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9hZXMvYWVzX21pc2MuYy5maXBzCTIwMTEt MDYtMDUgMTk6MzY6MzMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRv L2Flcy9hZXNfbWlzYy5jCTIwMTItMDQtMjYgMTg6MDA6NTEuMzgyNzY4OTA2ICswMjAwCitAQCAt NjksMTcgKzY5LDExIEBAIGNvbnN0IGNoYXIgKkFFU19vcHRpb25zKHZvaWQpIHsKKyBpbnQgQUVT X3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQg Yml0cywKKyAJCQlBRVNfS0VZICprZXkpCisgCXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWZp cHNfY2lwaGVyX2Fib3J0KEFFUyk7CistI2VuZGlmCisgCXJldHVybiBwcml2YXRlX0FFU19zZXRf ZW5jcnlwdF9rZXkodXNlcktleSwgYml0cywga2V5KTsKKyAJfQorIAorIGludCBBRVNfc2V0X2Rl Y3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAor IAkJCUFFU19LRVkgKmtleSkKKyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JZmlwc19jaXBo ZXJfYWJvcnQoQUVTKTsKKy0jZW5kaWYKKyAJcmV0dXJuIHByaXZhdGVfQUVTX3NldF9kZWNyeXB0 X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vY21hYy9jbWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vY21hYy9jbWFjLmMK Ky0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vY21hYy9jbWFjLmMuZmlwcwkyMDEyLTA0LTExIDE3 OjExOjE2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9jbWFjL2Nt YWMuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM4Mjc2ODkwNiArMDIwMAorQEAgLTEwNywxMyArMTA3 LDYgQEAgQ01BQ19DVFggKkNNQUNfQ1RYX25ldyh2b2lkKQorIAorIHZvaWQgQ01BQ19DVFhfY2xl YW51cChDTUFDX0NUWCAqY3R4KQorIAl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQ U19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCistCQl7CistCQlGSVBTX2NtYWNfY3R4X2Ns ZWFudXAoY3R4KTsKKy0JCXJldHVybjsKKy0JCX0KKy0jZW5kaWYKKyAJRVZQX0NJUEhFUl9DVFhf Y2xlYW51cCgmY3R4LT5jY3R4KTsKKyAJT1BFTlNTTF9jbGVhbnNlKGN0eC0+dGJsLCBFVlBfTUFY X0JMT0NLX0xFTkdUSCk7CisgCU9QRU5TU0xfY2xlYW5zZShjdHgtPmsxLCBFVlBfTUFYX0JMT0NL X0xFTkdUSCk7CitAQCAtMTY0LDExICsxNTcsNiBAQCBpbnQgQ01BQ19Jbml0KENNQUNfQ1RYICpj dHgsIGNvbnN0IHZvaWQKKyAJCQlFVlBlcnIoRVZQX0ZfQ01BQ19JTklULCBFVlBfUl9ESVNBQkxF RF9GT1JfRklQUyk7CisgCQkJcmV0dXJuIDA7CisgCQkJfQorLQkJLyogT3RoZXIgYWxnb3JpdGht IGJsb2NraW5nIHdpbGwgYmUgZG9uZSBpbiBGSVBTX2NtYWNfaW5pdCwKKy0JCSAqIHZpYSBGSVBT X2NpcGhlcmluaXQoKS4KKy0JCSAqLworLQkJaWYgKCFpbXBsICYmICFjdHgtPmNjdHguZW5naW5l KQorLQkJCXJldHVybiBGSVBTX2NtYWNfaW5pdChjdHgsIGtleSwga2V5bGVuLCBjaXBoZXIsIE5V TEwpOworIAkJfQorICNlbmRpZgorIAkvKiBBbGwgemVyb3MgbWVhbnMgcmVzdGFydCAqLworQEAg LTIxNiwxMCArMjA0LDYgQEAgaW50IENNQUNfVXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZv aQorIAl7CisgCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBpbjsKKyAJc2l6ZV90IGJsOwor LSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5n aW5lKQorLQkJcmV0dXJuIEZJUFNfY21hY191cGRhdGUoY3R4LCBpbiwgZGxlbik7CistI2VuZGlm CisgCWlmIChjdHgtPm5sYXN0X2Jsb2NrID09IC0xKQorIAkJcmV0dXJuIDA7CisgCWlmIChkbGVu ID09IDApCitAQCAtMjYxLDEwICsyNDUsNiBAQCBpbnQgQ01BQ19VcGRhdGUoQ01BQ19DVFggKmN0 eCwgY29uc3Qgdm9pCisgaW50IENNQUNfRmluYWwoQ01BQ19DVFggKmN0eCwgdW5zaWduZWQgY2hh ciAqb3V0LCBzaXplX3QgKnBvdXRsZW4pCisgCXsKKyAJaW50IGksIGJsLCBsYjsKKy0jaWZkZWYg T1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKKy0J CXJldHVybiBGSVBTX2NtYWNfZmluYWwoY3R4LCBvdXQsIHBvdXRsZW4pOworLSNlbmRpZgorIAlp ZiAoY3R4LT5ubGFzdF9ibG9jayA9PSAtMSkKKyAJCXJldHVybiAwOworIAlibCA9IEVWUF9DSVBI RVJfQ1RYX2Jsb2NrX3NpemUoJmN0eC0+Y2N0eCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vY3J5cHRvLmguZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vY3J5cHRvLmgKKy0tLSBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vY3J5cHRvLmguZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjA5 NDc2MjYxMyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9jcnlwdG8uaAkyMDEyLTA0 LTI2IDE4OjAwOjUxLjM4Mjc2ODkwNiArMDIwMAorQEAgLTU1MywyNCArNTUzLDI5IEBAIGludCBG SVBTX21vZGVfc2V0KGludCByKTsKKyB2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKTsKKyAKKyAjZGVm aW5lIGZpcHNfbWRfaW5pdChhbGcpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcpCisrI2RlZmlu ZSBub25maXBzX21kX2luaXQoYWxnKSBub25maXBzX21kX2luaXRfY3R4KGFsZywgYWxnKQorKyNk ZWZpbmUgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCisrCWludCBhbGcjI19Jbml0KGN4IyNf Q1RYICpjKQorIAorICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0jZGVmaW5lIGZpcHNfbWRfaW5pdF9j dHgoYWxnLCBjeCkgXAorKyNkZWZpbmUgbm9uZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCisg CWludCBhbGcjI19Jbml0KGN4IyNfQ1RYICpjKSBcCisgCXsgXAorIAlpZiAoRklQU19tb2RlKCkp IE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCistCQkiTG93IGxldmVsIEFQSSBjYWxs IHRvIGRpZ2VzdCAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpOyBcCisrCQkiRGln ZXN0ICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIik7IFwKKyAJcmV0dXJuIHByaXZh dGVfIyNhbGcjI19Jbml0KGMpOyBcCisgCX0gXAorIAlpbnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQo Y3gjI19DVFggKmMpCisgCisgI2RlZmluZSBmaXBzX2NpcGhlcl9hYm9ydChhbGcpIFwKKyAJaWYg KEZJUFNfbW9kZSgpKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAorLQkJIkxvdyBs ZXZlbCBBUEkgY2FsbCB0byBjaXBoZXIgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEi KQorKwkJIkNpcGhlciAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCisrCisrLyog ZGllIGlmIEZJUFMgc2VsZnRlc3QgZmFpbGVkICovCisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNr KHZvaWQpOworIAorICNlbHNlCistI2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwK Ky0JaW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpCisrI2RlZmluZSBub25maXBzX21kX2luaXRf Y3R4KGFsZywgY3gpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkKKyAjZGVmaW5lIGZpcHNfY2lw aGVyX2Fib3J0KGFsZykgd2hpbGUoMCkKKyAjZW5kaWYKKyAKK0BAIC01ODAsNiArNTg1LDkgQEAg dm9pZCBPUEVOU1NMX2luaXQodm9pZCk7CisgICovCisgdm9pZCBFUlJfbG9hZF9DUllQVE9fc3Ry aW5ncyh2b2lkKTsKKyAKKysjZGVmaW5lIE9QRU5TU0xfSEFWRV9JTklUCTEKKyt2b2lkIE9QRU5T U0xfaW5pdF9saWJyYXJ5KHZvaWQpOworKworIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgQ1JZUFRP IGZ1bmN0aW9ucy4gKi8KKyAKKyAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9kZXMvZGVzLmguZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZGVz L2Rlcy5oCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Rlcy9kZXMuaC5maXBzCTIwMTItMDQt MjYgMTg6MDA6NTEuMTczNzY0MzQwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Rl cy9kZXMuaAkyMDEyLTA0LTI2IDE4OjAwOjUxLjM4Mzc2ODkyOCArMDIwMAorQEAgLTIyNCw5ICsy MjQsNiBAQCBpbnQgREVTX3NldF9rZXkoY29uc3RfREVTX2NibG9jayAqa2V5LERFCisgaW50IERF U19rZXlfc2NoZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVk dWxlKTsKKyBpbnQgREVTX3NldF9rZXlfY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVT X2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOworIHZvaWQgREVTX3NldF9rZXlfdW5jaGVja2VkKGNv bnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7CistI2lmZGVm IE9QRU5TU0xfRklQUworLXZvaWQgcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3Rf REVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKy0jZW5kaWYKKyB2 b2lkIERFU19zdHJpbmdfdG9fa2V5KGNvbnN0IGNoYXIgKnN0cixERVNfY2Jsb2NrICprZXkpOwor IHZvaWQgREVTX3N0cmluZ190b18ya2V5cyhjb25zdCBjaGFyICpzdHIsREVTX2NibG9jayAqa2V5 MSxERVNfY2Jsb2NrICprZXkyKTsKKyB2b2lkIERFU19jZmI2NF9lbmNyeXB0KGNvbnN0IHVuc2ln bmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCxsb25nIGxlbmd0aCwKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9kZXMvc2V0X2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5 cHRvL2Rlcy9zZXRfa2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZGVzL3NldF9rZXku Yy5maXBzCTIwMTEtMDYtMDEgMTg6NTQ6MDQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMWIvY3J5cHRvL2Rlcy9zZXRfa2V5LmMJMjAxMi0wNC0yNiAxODowMDo1MS4zODM3Njg5Mjgg KzAyMDAKK0BAIC0zMzcsMTMgKzMzNyw2IEBAIGludCBERVNfc2V0X2tleV9jaGVja2VkKGNvbnN0 X0RFU19jYmxvY2sKKyAJfQorIAorIHZvaWQgREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RF U19jYmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpCistI2lmZGVmIE9QRU5T U0xfRklQUworLQl7CistCWZpcHNfY2lwaGVyX2Fib3J0KERFUyk7CistCXByaXZhdGVfREVTX3Nl dF9rZXlfdW5jaGVja2VkKGtleSwgc2NoZWR1bGUpOworLQl9Cistdm9pZCBwcml2YXRlX0RFU19z ZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUg KnNjaGVkdWxlKQorLSNlbmRpZgorIAl7CisgCXN0YXRpYyBjb25zdCBpbnQgc2hpZnRzMlsxNl09 ezAsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDB9OworIAlyZWdpc3RlciBERVNfTE9ORyBj LGQsdCxzLHQyOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RoL2RoX2dlbi5jLmZp cHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RoL2RoX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJMjAxMS0wNi0wOSAxNzoyMTo0Ni4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZGgvZGhfZ2VuLmMJMjAxMi0wNC0yNiAxODow MDo1MS4zODM3Njg5MjggKzAyMDAKK0BAIC04NCwxMSArODQsNiBAQCBpbnQgREhfZ2VuZXJhdGVf cGFyYW1ldGVyc19leChESCAqcmV0LCBpCisgI2VuZGlmCisgCWlmKHJldC0+bWV0aC0+Z2VuZXJh dGVfcGFyYW1zKQorIAkJcmV0dXJuIHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKHJldCwgcHJp bWVfbGVuLCBnZW5lcmF0b3IsIGNiKTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBT X21vZGUoKSkKKy0JCXJldHVybiBGSVBTX2RoX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgocmV0LCBw cmltZV9sZW4sCistCQkJCQkJCWdlbmVyYXRvciwgY2IpOworLSNlbmRpZgorIAlyZXR1cm4gZGhf YnVpbHRpbl9nZW5wYXJhbXMocmV0LCBwcmltZV9sZW4sIGdlbmVyYXRvciwgY2IpOworIAl9Cisg CitAQCAtMTIzLDYgKzExOCwyMCBAQCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERI ICpyZXQsCisgCWludCBnLG9rPSAtMTsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBT ZXJyKEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVf bGVuIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIo REhfRl9ESF9CVUlMVElOX0dFTlBBUkFNUywgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJ Z290byBlcnI7CisrCQl9CisrI2VuZGlmCisrCisgCWN0eD1CTl9DVFhfbmV3KCk7CisgCWlmIChj dHggPT0gTlVMTCkgZ290byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2RoL2RoLmguZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZGgv ZGguaAorLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9kaC9kaC5oLmZpcHMJMjAxMi0wNC0yNiAx ODowMDo1MS4wMzM3NjEyODEgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZGgvZGgu aAkyMDEyLTA0LTI2IDE4OjAwOjUxLjM4NDc2ODk1MCArMDIwMAorQEAgLTc3LDYgKzc3LDggQEAK KyAjIGRlZmluZSBPUEVOU1NMX0RIX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKKyAjZW5kaWYKKyAK KysjZGVmaW5lIE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAjZGVm aW5lIERIX0ZMQUdfQ0FDSEVfTU9OVF9QICAgICAweDAxCisgI2RlZmluZSBESF9GTEFHX05PX0VY UF9DT05TVFRJTUUgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBESAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93 IHVzZXMgY29uc3RhbnQgdGltZQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RoL2Ro X2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RoL2RoX2tleS5jCistLS0gb3BlbnNz bC0xLjAuMWIvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMJMjAxMS0xMS0xNCAxNToxNjowOS4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZGgvZGhfa2V5LmMJMjAxMi0w NC0yNiAxODowMDo1MS4zODQ3Njg5NTAgKzAyMDAKK0BAIC02MSw2ICs2MSw5IEBACisgI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisgI2luY2x1ZGUg PG9wZW5zc2wvZGguaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKyNlbmRpZgorIAorIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpkaCk7Cisg c3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IEJJR05VTSAq cHViX2tleSwgREggKmRoKTsKK0BAIC0xMDQsNyArMTA3LDcgQEAgY29tcHV0ZV9rZXksCisgZGhf Ym5fbW9kX2V4cCwKKyBkaF9pbml0LAorIGRoX2ZpbmlzaCwKKy0wLAorK0RIX0ZMQUdfRklQU19N RVRIT0QsCisgTlVMTCwKKyBOVUxMCisgfTsKK0BAIC0xMjMsNiArMTI2LDE0IEBAIHN0YXRpYyBp bnQgZ2VuZXJhdGVfa2V5KERIICpkaCkKKyAJQk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKKyAJQklH TlVNICpwdWJfa2V5PU5VTEwsKnByaXZfa2V5PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQ UworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhf RklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURIZXJyKERIX0ZfR0VORVJBVEVfS0VZ LCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYK KysKKyAJY3R4ID0gQk5fQ1RYX25ldygpOworIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwor IAorQEAgLTIxMyw2ICsyMjQsMTMgQEAgc3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBj aGFyICprZQorIAkJREhlcnIoREhfRl9DT01QVVRFX0tFWSxESF9SX01PRFVMVVNfVE9PX0xBUkdF KTsKKyAJCWdvdG8gZXJyOworIAkJfQorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNf bW9kZSgpICYmIChCTl9udW1fYml0cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVM VVNfQklUUykpCisrCQl7CisrCQlESGVycihESF9GX0NPTVBVVEVfS0VZLCBESF9SX0tFWV9TSVpF X1RPT19TTUFMTCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKyAKKyAJY3R4ID0gQk5f Q1RYX25ldygpOworIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOworQEAgLTI4MCw2ICsyOTgs OSBAQCBzdGF0aWMgaW50IGRoX2JuX21vZF9leHAoY29uc3QgREggKmRoLCBCCisgCisgc3RhdGlj IGludCBkaF9pbml0KERIICpkaCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19z ZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlkaC0+ZmxhZ3MgfD0gREhfRkxBR19DQUNIRV9N T05UX1A7CisgCXJldHVybigxKTsKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRv L2RoL2RoX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RoL2RoX2xpYi5jCistLS0g b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RoL2RoX2xpYi5jLmZpcHMJMjAxMS0wNi0yMCAyMTo0MTox MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZGgvZGhfbGliLmMJ MjAxMi0wNC0yNiAxODowMDo1MS4zODQ3Njg5NTAgKzAyMDAKK0BAIC04MSwxNCArODEsNyBAQCBj b25zdCBESF9NRVRIT0QgKkRIX2dldF9kZWZhdWx0X21ldGhvZCh2CisgCXsKKyAJaWYoIWRlZmF1 bHRfREhfbWV0aG9kKQorIAkJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBTX21v ZGUoKSkKKy0JCQlyZXR1cm4gRklQU19kaF9vcGVuc3NsKCk7CistCQllbHNlCistCQkJcmV0dXJu IERIX09wZW5TU0woKTsKKy0jZWxzZQorIAkJZGVmYXVsdF9ESF9tZXRob2QgPSBESF9PcGVuU1NM KCk7CistI2VuZGlmCisgCQl9CisgCXJldHVybiBkZWZhdWx0X0RIX21ldGhvZDsKKyAJfQorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEu MC4xYi9jcnlwdG8vZHNhL2RzYV9lcnIuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9kc2Ev ZHNhX2Vyci5jLmZpcHMJMjAxMS0xMC0xMCAwMToxMzo0OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYV9lcnIuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM4 NTc2ODk3MiArMDIwMAorQEAgLTc0LDYgKzc0LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBE U0Ffc3RyX2Z1bmN0c1tdPQorIHtFUlJfRlVOQyhEU0FfRl9ET19EU0FfUFJJTlQpLAkiRE9fRFNB X1BSSU5UIn0sCisge0VSUl9GVU5DKERTQV9GX0RTQVBBUkFNU19QUklOVCksCSJEU0FwYXJhbXNf cHJpbnQifSwKKyB7RVJSX0ZVTkMoRFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQKSwJIkRTQXBhcmFt c19wcmludF9mcCJ9LAorK3tFUlJfRlVOQyhEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4pLAkiZHNh X2J1aWx0aW5fa2V5Z2VuIn0sCisre0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VO KSwJImRzYV9idWlsdGluX3BhcmFtZ2VuIn0sCisge0VSUl9GVU5DKERTQV9GX0RTQV9ET19TSUdO KSwJIkRTQV9kb19zaWduIn0sCisge0VSUl9GVU5DKERTQV9GX0RTQV9ET19WRVJJRlkpLAkiRFNB X2RvX3ZlcmlmeSJ9LAorIHtFUlJfRlVOQyhEU0FfRl9EU0FfR0VORVJBVEVfS0VZKSwJIkRTQV9n ZW5lcmF0ZV9rZXkifSwKK0BAIC0xMDYsNiArMTA4LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFU QSBEU0Ffc3RyX3JlYXNvbnNbXQorIHtFUlJfUkVBU09OKERTQV9SX0RBVEFfVE9PX0xBUkdFX0ZP Ul9LRVlfU0laRSksImRhdGEgdG9vIGxhcmdlIGZvciBrZXkgc2l6ZSJ9LAorIHtFUlJfUkVBU09O KERTQV9SX0RFQ09ERV9FUlJPUikgICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKKyB7RVJSX1JF QVNPTihEU0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFKSAgICwiaW52YWxpZCBkaWdlc3QgdHlwZSJ9 LAorK3tFUlJfUkVBU09OKERTQV9SX0tFWV9TSVpFX0lOVkFMSUQpICAgICAgLCJrZXkgc2l6ZSBp bnZhbGlkIn0sCisre0VSUl9SRUFTT04oRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAsImtl eSBzaXplIHRvbyBzbWFsbCJ9LAorIHtFUlJfUkVBU09OKERTQV9SX01JU1NJTkdfUEFSQU1FVEVS UykgICAgLCJtaXNzaW5nIHBhcmFtZXRlcnMifSwKKyB7RVJSX1JFQVNPTihEU0FfUl9NT0RVTFVT X1RPT19MQVJHRSkgICAgICwibW9kdWx1cyB0b28gbGFyZ2UifSwKKyB7RVJSX1JFQVNPTihEU0Ff Ul9ORUVEX05FV19TRVRVUF9WQUxVRVMpICwibmVlZCBuZXcgc2V0dXAgdmFsdWVzIn0sCitkaWZm IC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4w LjFiL2NyeXB0by9kc2EvZHNhX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9k c2FfZ2VuLmMuZmlwcwkyMDExLTA2LTA5IDE3OjIxOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhX2dlbi5jCTIwMTItMDQtMjYgMTg6MDA6NTEuMzg1 NzY4OTcyICswMjAwCitAQCAtODUsNiArODUsMTQgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisgI2VuZGlmCisgCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMgaW50IEZJUFNf ZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAor KwkJY29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVu LAorKwkJQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBC Tl9HRU5DQiAqY2IpOworK3N0YXRpYyBpbnQgRklQU19kc2FfZ2VuZXJhdGVfZyhCTl9DVFggKmN0 eCwgQklHTlVNICpwLCBCSUdOVU0gKnEsCisrCQlCSUdOVU0gKipnX3JldCwgdW5zaWduZWQgbG9u ZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CisrI2VuZGlmCisrCisgaW50IERTQV9nZW5lcmF0ZV9w YXJhbWV0ZXJzX2V4KERTQSAqcmV0LCBpbnQgYml0cywKKyAJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KnNlZWRfaW4sIGludCBzZWVkX2xlbiwKKyAJCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxv bmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCitAQCAtMTAwLDE0ICsxMDgsNiBAQCBpbnQgRFNBX2dl bmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsCisgCWlmKHJldC0+bWV0aC0+ZHNhX3BhcmFt Z2VuKQorIAkJcmV0dXJuIHJldC0+bWV0aC0+ZHNhX3BhcmFtZ2VuKHJldCwgYml0cywgc2VlZF9p biwgc2VlZF9sZW4sCisgCQkJCWNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOworLSNpZmRlZiBPUEVO U1NMX0ZJUFMKKy0JZWxzZSBpZiAoRklQU19tb2RlKCkpCistCQl7CistCQlyZXR1cm4gRklQU19k c2FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChyZXQsIGJpdHMsIAorLQkJCQkJCQlzZWVkX2luLCBz ZWVkX2xlbiwKKy0JCQkJCQkJY291bnRlcl9yZXQsIGhfcmV0LCBjYik7CistCQl9CistI2VuZGlm CisgCWVsc2UKKyAJCXsKKyAJCWNvbnN0IEVWUF9NRCAqZXZwbWQ7CitAQCAtMTI1LDI3ICsxMjUs MTE5IEBAIGludCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwKKyAJCQl9Cisg CisgCQlyZXR1cm4gZHNhX2J1aWx0aW5fcGFyYW1nZW4ocmV0LCBiaXRzLCBxYml0cywgZXZwbWQs CistCQkJc2VlZF9pbiwgc2VlZF9sZW4sIE5VTEwsIGNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwor KwkJCQlzZWVkX2luLCBzZWVkX2xlbiwgY291bnRlcl9yZXQsIGhfcmV0LCBjYik7CisgCQl9Cisg CX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IEZJUFNfZHNhX2J1aWx0aW5fcGFyYW1n ZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisrCWNvbnN0IEVWUF9NRCAq ZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKKysJ aW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikKKysJ eworKwlyZXR1cm4gZHNhX2J1aWx0aW5fcGFyYW1nZW4ocmV0LCBiaXRzLCBxYml0cywKKysJCWV2 cG1kLCBzZWVkX2luLCBzZWVkX2xlbiwKKysJCWNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOworKwl9 CisrI2VuZGlmCisrCisgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3Qg Yml0cywgc2l6ZV90IHFiaXRzLAorIAljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25l ZCBjaGFyICpzZWVkX2luLCBzaXplX3Qgc2VlZF9sZW4sCistCXVuc2lnbmVkIGNoYXIgKnNlZWRf b3V0LAorIAlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0Ig KmNiKQorIAl7CisgCWludCBvaz0wOworIAl1bnNpZ25lZCBjaGFyIHNlZWRbU0hBMjU2X0RJR0VT VF9MRU5HVEhdOworKwlCSUdOVU0gKmc9TlVMTCwqcT1OVUxMLCpwPU5VTEw7CisrCXNpemVfdCBx c2l6ZSA9IHFiaXRzID4+IDM7CisrCUJOX0NUWCAqY3R4PU5VTEw7CisrCisrI2lmZGVmIE9QRU5T U0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgeworKwkgICAgRklQ U2VycihGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sCisrCQkgICAgRklQU19SX0ZJUFNfU0VM RlRFU1RfRkFJTEVEKTsKKysJICAgIGdvdG8gZXJyOworKwkgICAgfQorKworKwlpZiAoRklQU19t b2R1bGVfbW9kZSgpICYmCisrCSAgICAoYml0cyAhPSAxMDI0IHx8IHFiaXRzICE9IDE2MCkgJiYK KysJICAgIChiaXRzICE9IDIwNDggfHwgcWJpdHMgIT0gMjI0KSAmJgorKwkgICAgKGJpdHMgIT0g MjA0OCB8fCBxYml0cyAhPSAyNTYpICYmCisrCSAgICAoYml0cyAhPSAzMDcyIHx8IHFiaXRzICE9 IDI1NikpCisrCQl7CisrCQlEU0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sIERTQV9S X0tFWV9TSVpFX0lOVkFMSUQpOworKwkJZ290byBlcnI7CisrCQl9CisrI2VuZGlmCisrCWlmIChz ZWVkX2xlbiAmJiAoc2VlZF9sZW4gPCAoc2l6ZV90KXFzaXplKSkKKysJCXNlZWRfaW4gPSBOVUxM OwkJLyogc2VlZCBidWZmZXIgdG9vIHNtYWxsIC0tIGlnbm9yZSAqLworKwlpZiAoc2VlZF9sZW4g PiBzaXplb2Yoc2VlZCkpIAorKwkJc2VlZF9sZW4gPSBzaXplb2Yoc2VlZCk7CS8qIEFwcC4gMi4y IG9mIEZJUFMgUFVCIDE4NiBhbGxvd3MgbGFyZ2VyIFNFRUQsCisrCQkJCQkJICogYnV0IG91ciBp bnRlcm5hbCBidWZmZXJzIGFyZSByZXN0cmljdGVkIHRvIDI1NiBiaXRzKi8KKysJaWYgKHNlZWRf aW4gIT0gTlVMTCkKKysJCW1lbWNweShzZWVkLCBzZWVkX2luLCBzZWVkX2xlbik7CisrCWVsc2UK KysJCXNlZWRfbGVuID0gMDsKKysKKysJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKQor KwkJZ290byBlcnI7CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKworKwlpZiAoIUZJUFNfZHNh X2dlbmVyYXRlX3BxKGN0eCwgYml0cywgcWJpdHMsIGV2cG1kLAorKwkJc2VlZCwgc2VlZF9sZW4s ICZwLCAmcSwgY291bnRlcl9yZXQsIGNiKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUZJUFNf ZHNhX2dlbmVyYXRlX2coY3R4LCBwLCBxLCAmZywgaF9yZXQsIGNiKSkKKysJCWdvdG8gZXJyOwor KworKwlvaz0xOworK2VycjoKKysJaWYgKG9rKQorKwkJeworKwkJaWYocmV0LT5wKQorKwkJCXsK KysJCQlCTl9mcmVlKHJldC0+cCk7CisrCQkJcmV0LT5wID0gTlVMTDsKKysJCQl9CisrCQlpZihy ZXQtPnEpCisrCQkJeworKwkJCUJOX2ZyZWUocmV0LT5xKTsKKysJCQlyZXQtPnEgPSBOVUxMOwor KwkJCX0KKysJCWlmKHJldC0+ZykKKysJCQl7CisrCQkJQk5fZnJlZShyZXQtPmcpOworKwkJCXJl dC0+ZyA9IE5VTEw7CisrCQkJfQorKwkJcmV0LT5wPUJOX2R1cChwKTsKKysJCXJldC0+cT1CTl9k dXAocSk7CisrCQlyZXQtPmc9Qk5fZHVwKGcpOworKwkJaWYgKHJldC0+cCA9PSBOVUxMIHx8IHJl dC0+cSA9PSBOVUxMIHx8IHJldC0+ZyA9PSBOVUxMKQorKwkJCW9rPTA7CisrCQl9CisrCWlmKGN0 eCkKKysJCXsKKysJCUJOX0NUWF9lbmQoY3R4KTsKKysJCUJOX0NUWF9mcmVlKGN0eCk7CisrCQl9 CisrCXJldHVybiBvazsKKysJfQorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljCisr I2VuZGlmCisraW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0 cywgc2l6ZV90IHFiaXRzLAorKwkJY29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAq c2VlZCwgaW50IHNlZWRfbGVuLAorKwkJQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LCBp bnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50IG9rPTA7CisgCXVuc2ln bmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworLQl1bnNpZ25lZCBjaGFyIGJ1ZltT SEEyNTZfRElHRVNUX0xFTkdUSF0sYnVmMltTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrCXVuc2ln bmVkIGNoYXIgYnVmW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKyAJQklHTlVNICpyMCwqVywqWCwq YywqdGVzdDsKKy0JQklHTlVNICpnPU5VTEwsKnE9TlVMTCwqcD1OVUxMOworLQlCTl9NT05UX0NU WCAqbW9udD1OVUxMOworLQlpbnQgaSwgaywgbj0wLCBtPTAsIHFzaXplID0gcWJpdHMgPj4gMzsK KysJQklHTlVNICpxPU5VTEwsKnA9TlVMTDsKKysJaW50IGksIGssIGIsIG49MCwgbT0wLCBxc2l6 ZSA9IHFiaXRzID4+IDM7CisgCWludCBjb3VudGVyPTA7CisgCWludCByPTA7CistCUJOX0NUWCAq Y3R4PU5VTEw7CistCXVuc2lnbmVkIGludCBoPTI7CisgCisgCWlmIChxc2l6ZSAhPSBTSEFfRElH RVNUX0xFTkdUSCAmJiBxc2l6ZSAhPSBTSEEyMjRfRElHRVNUX0xFTkdUSCAmJgorIAkgICAgcXNp emUgIT0gU0hBMjU2X0RJR0VTVF9MRU5HVEgpCitAQCAtMTUzLDUxICsyNDUsNDMgQEAgaW50IGRz YV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXworIAkJcmV0dXJuIDA7CisgCisgCWlm IChldnBtZCA9PSBOVUxMKQorLQkJLyogdXNlIFNIQTEgYXMgZGVmYXVsdCAqLworLQkJZXZwbWQg PSBFVlBfc2hhMSgpOworKwkgICAgeworKwkJaWYgKHFiaXRzIDw9IDE2MCkKKysJCQlldnBtZCA9 IEVWUF9zaGExKCk7CisrCQllbHNlIGlmIChxYml0cyA8PSAyMjQpCisrCQkJZXZwbWQgPSBFVlBf c2hhMjI0KCk7CisrCQllbHNlCisrCQkJZXZwbWQgPSBFVlBfc2hhMjU2KCk7CisrCSAgICB9Cisg CisgCWlmIChiaXRzIDwgNTEyKQorIAkJYml0cyA9IDUxMjsKKyAKKyAJYml0cyA9IChiaXRzKzYz KS82NCo2NDsKKyAKKy0JLyogTkI6IHNlZWRfbGVuID09IDAgaXMgc3BlY2lhbCBjYXNlOiBjb3B5 IGdlbmVyYXRlZCBzZWVkIHRvCistIAkgKiBzZWVkX2luIGlmIGl0IGlzIG5vdCBOVUxMLgorLSAJ ICovCistCWlmIChzZWVkX2xlbiAmJiAoc2VlZF9sZW4gPCAoc2l6ZV90KXFzaXplKSkKKy0JCXNl ZWRfaW4gPSBOVUxMOwkJLyogc2VlZCBidWZmZXIgdG9vIHNtYWxsIC0tIGlnbm9yZSAqLworLQlp ZiAoc2VlZF9sZW4gPiAoc2l6ZV90KXFzaXplKSAKKy0JCXNlZWRfbGVuID0gcXNpemU7CS8qIEFw cC4gMi4yIG9mIEZJUFMgUFVCIDE4NiBhbGxvd3MgbGFyZ2VyIFNFRUQsCistCQkJCQkgKiBidXQg b3VyIGludGVybmFsIGJ1ZmZlcnMgYXJlIHJlc3RyaWN0ZWQgdG8gMTYwIGJpdHMqLworLQlpZiAo c2VlZF9pbiAhPSBOVUxMKQorLQkJbWVtY3B5KHNlZWQsIHNlZWRfaW4sIHNlZWRfbGVuKTsKKy0K Ky0JaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKQorLQkJZ290byBlcnI7CistCistCWlm ICgobW9udD1CTl9NT05UX0NUWF9uZXcoKSkgPT0gTlVMTCkKKy0JCWdvdG8gZXJyOworLQorLQlC Tl9DVFhfc3RhcnQoY3R4KTsKKyAJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7CistCWcgPSBCTl9DVFhf Z2V0KGN0eCk7CisgCVcgPSBCTl9DVFhfZ2V0KGN0eCk7CistCXEgPSBCTl9DVFhfZ2V0KGN0eCk7 CisrCSpxX3JldCA9IHEgPSBCTl9DVFhfZ2V0KGN0eCk7CisgCVggPSBCTl9DVFhfZ2V0KGN0eCk7 CisgCWMgPSBCTl9DVFhfZ2V0KGN0eCk7CistCXAgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCSpwX3Jl dCA9IHAgPSBCTl9DVFhfZ2V0KGN0eCk7CisgCXRlc3QgPSBCTl9DVFhfZ2V0KGN0eCk7CisgCisg CWlmICghQk5fbHNoaWZ0KHRlc3QsQk5fdmFsdWVfb25lKCksYml0cy0xKSkKKyAJCWdvdG8gZXJy OworIAorKwkvKiBzdGVwIDMgbiA9IFxsY2VpbCBiaXRzIC8gcWJpdHMgXHJjZWlsIC0gMSAqLwor KwluID0gKGJpdHMrcWJpdHMtMSkvcWJpdHMgLSAxOworKwkvKiBzdGVwIDQgYiA9IGJpdHMgLSAx IC0gbiAqIHFiaXRzICovCisrCWIgPSBiaXRzIC0gMSAtIG4qcWJpdHM7CisrCisgCWZvciAoOzsp CisgCQl7CisgCQlmb3IgKDs7KSAvKiBmaW5kIHEgKi8KKyAJCQl7CisgCQkJaW50IHNlZWRfaXNf cmFuZG9tOworIAorLQkJCS8qIHN0ZXAgMSAqLworKwkJCS8qIHN0ZXAgNSBnZW5lcmF0ZSBzZWVk ICovCisgCQkJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDAsIG0rKykpCisgCQkJCWdvdG8gZXJyOwor IAorQEAgLTIxMiwzMCArMjk2LDE4IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJl dCwgc2l6ZV8KKyAJCQkJc2VlZF9sZW49MDsgLyogdXNlIHJhbmRvbSBzZWVkIGlmICdzZWVkX2lu JyB0dXJucyBvdXQgdG8gYmUgYmFkKi8KKyAJCQkJfQorIAkJCW1lbWNweShidWYgLCBzZWVkLCBx c2l6ZSk7CistCQkJbWVtY3B5KGJ1ZjIsIHNlZWQsIHFzaXplKTsKKy0JCQkvKiBwcmVjb21wdXRl ICJTRUVEICsgMSIgZm9yIHN0ZXAgNzogKi8KKy0JCQlmb3IgKGkgPSBxc2l6ZS0xOyBpID49IDA7 IGktLSkKKy0JCQkJeworLQkJCQlidWZbaV0rKzsKKy0JCQkJaWYgKGJ1ZltpXSAhPSAwKQorLQkJ CQkJYnJlYWs7CistCQkJCX0KKyAKKy0JCQkvKiBzdGVwIDIgKi8KKysJCQkvKiBzdGVwIDYgVSA9 IGhhc2goc2VlZCkgKi8KKyAJCQlpZiAoIUVWUF9EaWdlc3Qoc2VlZCwgcXNpemUsIG1kLCAgIE5V TEwsIGV2cG1kLCBOVUxMKSkKKyAJCQkJZ290byBlcnI7CistCQkJaWYgKCFFVlBfRGlnZXN0KGJ1 ZiwgIHFzaXplLCBidWYyLCBOVUxMLCBldnBtZCwgTlVMTCkpCistCQkJCWdvdG8gZXJyOworLQkJ CWZvciAoaSA9IDA7IGkgPCBxc2l6ZTsgaSsrKQorLQkJCQltZFtpXV49YnVmMltpXTsKKyAKKy0J CQkvKiBzdGVwIDMgKi8KKysJCQkvKiBzdGVwIDcgcSA9IDJeKHFiaXRzLTEpICsgVSArIDEgLSAo VSBtb2QgMikgKi8KKyAJCQltZFswXSB8PSAweDgwOworIAkJCW1kW3FzaXplLTFdIHw9IDB4MDE7 CisgCQkJaWYgKCFCTl9iaW4yYm4obWQsIHFzaXplLCBxKSkKKyAJCQkJZ290byBlcnI7CisgCist CQkJLyogc3RlcCA0ICovCisrCQkJLyogc3RlcCA4IHRlc3QgZm9yIHByaW1lICg2NCByb3VuZCBv ZiBSYWJpbi1NaWxsZXIpICovCisgCQkJciA9IEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHEsIERT U19wcmltZV9jaGVja3MsIGN0eCwKKyAJCQkJCXNlZWRfaXNfcmFuZG9tLCBjYik7CisgCQkJaWYg KHIgPiAwKQorQEAgLTI0MywyNyArMzE1LDIyIEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihE U0EgKnJldCwgc2l6ZV8KKyAJCQlpZiAociAhPSAwKQorIAkJCQlnb3RvIGVycjsKKyAKKy0JCQkv KiBkbyBhIGNhbGxiYWNrIGNhbGwgKi8KKy0JCQkvKiBzdGVwIDUgKi8KKyAJCQl9CisgCisgCQlp ZighQk5fR0VOQ0JfY2FsbChjYiwgMiwgMCkpIGdvdG8gZXJyOworIAkJaWYoIUJOX0dFTkNCX2Nh bGwoY2IsIDMsIDApKSBnb3RvIGVycjsKKyAKKy0JCS8qIHN0ZXAgNiAqLworKwkJLyogc3RlcCAx MSAqLworIAkJY291bnRlcj0wOworLQkJLyogIm9mZnNldCA9IDIiICovCistCistCQluPShiaXRz LTEpLzE2MDsKKysJCS8qICJvZmZzZXQgPSAxIiAqLworIAorIAkJZm9yICg7OykKKyAJCQl7Cisg CQkJaWYgKChjb3VudGVyICE9IDApICYmICFCTl9HRU5DQl9jYWxsKGNiLCAwLCBjb3VudGVyKSkK KyAJCQkJZ290byBlcnI7CisgCistCQkJLyogc3RlcCA3ICovCisrCQkJLyogc3RlcCAxMS4xLCAx MS4yIG9idGFpbiBXICovCisgCQkJQk5femVybyhXKTsKKy0JCQkvKiBub3cgJ2J1ZicgY29udGFp bnMgIlNFRUQgKyBvZmZzZXQgLSAxIiAqLworIAkJCWZvciAoaz0wOyBrPD1uOyBrKyspCisgCQkJ CXsKKyAJCQkJLyogb2J0YWluICJTRUVEICsgb2Zmc2V0ICsgayIgYnkgaW5jcmVtZW50aW5nOiAq LworQEAgLTI3OCwyOCArMzQ1LDMwIEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJl dCwgc2l6ZV8KKyAJCQkJCQkJCQlOVUxMKSkKKyAJCQkJCWdvdG8gZXJyOworIAorLQkJCQkvKiBz dGVwIDggKi8KKyAJCQkJaWYgKCFCTl9iaW4yYm4obWQsIHFzaXplLCByMCkpCisgCQkJCQlnb3Rv IGVycjsKKy0JCQkJaWYgKCFCTl9sc2hpZnQocjAscjAsKHFzaXplIDw8IDMpKmspKSBnb3RvIGVy cjsKKysJCQkJaWYgKGsgPT0gbikKKysJCQkJCUJOX21hc2tfYml0cyhyMCxiKTsKKysJCQkJaWYg KCFCTl9sc2hpZnQocjAscjAscWJpdHMqaykpIGdvdG8gZXJyOworIAkJCQlpZiAoIUJOX2FkZChX LFcscjApKSBnb3RvIGVycjsKKyAJCQkJfQorIAorLQkJCS8qIG1vcmUgb2Ygc3RlcCA4ICovCist CQkJaWYgKCFCTl9tYXNrX2JpdHMoVyxiaXRzLTEpKSBnb3RvIGVycjsKKysJCQkvKiBzdGVwIDEx LjMgWCA9IFcgKyAyXihMLTEpICovCisgCQkJaWYgKCFCTl9jb3B5KFgsVykpIGdvdG8gZXJyOwor IAkJCWlmICghQk5fYWRkKFgsWCx0ZXN0KSkgZ290byBlcnI7CisgCistCQkJLyogc3RlcCA5ICov CisrCQkJLyogc3RlcCAxMS40IGMgPSBYIG1vZCAyKnEgKi8KKyAJCQlpZiAoIUJOX2xzaGlmdDEo cjAscSkpIGdvdG8gZXJyOworIAkJCWlmICghQk5fbW9kKGMsWCxyMCxjdHgpKSBnb3RvIGVycjsK KysKKysJCQkvKiBzdGVwIDExLjUgcCA9IFggLSAoYyAtIDEpICovCisgCQkJaWYgKCFCTl9zdWIo cjAsYyxCTl92YWx1ZV9vbmUoKSkpIGdvdG8gZXJyOworIAkJCWlmICghQk5fc3ViKHAsWCxyMCkp IGdvdG8gZXJyOworIAorLQkJCS8qIHN0ZXAgMTAgKi8KKysJCQkvKiBzdGVwIDExLjYgKi8KKyAJ CQlpZiAoQk5fY21wKHAsdGVzdCkgPj0gMCkKKyAJCQkJeworLQkJCQkvKiBzdGVwIDExICovCisr CQkJCS8qIHN0ZXAgMTEuNyAqLworIAkJCQlyID0gQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocCwg RFNTX3ByaW1lX2NoZWNrcywKKyAJCQkJCQljdHgsIDEsIGNiKTsKKyAJCQkJaWYgKHIgPiAwKQor QEAgLTMwOCwxOSArMzc3LDQ1IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwg c2l6ZV8KKyAJCQkJCWdvdG8gZXJyOworIAkJCQl9CisgCistCQkJLyogc3RlcCAxMyAqLworKwkJ CS8qIHN0ZXAgMTEuOSAqLworIAkJCWNvdW50ZXIrKzsKKyAJCQkvKiAib2Zmc2V0ID0gb2Zmc2V0 ICsgbiArIDEiICovCisgCistCQkJLyogc3RlcCAxNCAqLworLQkJCWlmIChjb3VudGVyID49IDQw OTYpIGJyZWFrOworKwkJCS8qIHN0ZXAgMTIgKi8KKysJCQlpZiAoY291bnRlciA+PSA0KmJpdHMp IGJyZWFrOworIAkJCX0KKyAJCX0KKyBlbmQ6CisgCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCAx KSkKKyAJCWdvdG8gZXJyOworIAorLQkvKiBXZSBub3cgbmVlZCB0byBnZW5lcmF0ZSBnICovCisr CW9rPTE7CisrZXJyOgorKwlpZiAob2spCisrCQl7CisrCQlpZiAoY291bnRlcl9yZXQgIT0gTlVM TCkgKmNvdW50ZXJfcmV0PWNvdW50ZXI7CisrCQl9CisrCXJldHVybiBvazsKKysJfQorKworKyNp Zm5kZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljCisrI2VuZGlmCisraW50IEZJUFNfZHNhX2dlbmVy YXRlX2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpxLAorKwkJQklHTlVNICoqZ19y ZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50IG9rPTA7 CisrCUJJR05VTSAqcjAsICp0ZXN0LCAqZyA9IE5VTEw7CisrCUJOX01PTlRfQ1RYICptb250Owor Kwl1bnNpZ25lZCBpbnQgaD0yOworKworKwlpZiAoKG1vbnQ9Qk5fTU9OVF9DVFhfbmV3KCkpID09 IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCSpnX3Jl dCA9IGcgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCXRlc3QgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisg CS8qIFNldCByMD0ocC0xKS9xICovCisgCWlmICghQk5fc3ViKHRlc3QscCxCTl92YWx1ZV9vbmUo KSkpIGdvdG8gZXJyOworIAlpZiAoIUJOX2RpdihyMCxOVUxMLHRlc3QscSxjdHgpKSBnb3RvIGVy cjsKK0BAIC0zNDQsMjYgKzQzOSw3IEBAIGVuZDoKKyBlcnI6CisgCWlmIChvaykKKyAJCXsKKy0J CWlmKHJldC0+cCkgQk5fZnJlZShyZXQtPnApOworLQkJaWYocmV0LT5xKSBCTl9mcmVlKHJldC0+ cSk7CistCQlpZihyZXQtPmcpIEJOX2ZyZWUocmV0LT5nKTsKKy0JCXJldC0+cD1CTl9kdXAocCk7 CistCQlyZXQtPnE9Qk5fZHVwKHEpOworLQkJcmV0LT5nPUJOX2R1cChnKTsKKy0JCWlmIChyZXQt PnAgPT0gTlVMTCB8fCByZXQtPnEgPT0gTlVMTCB8fCByZXQtPmcgPT0gTlVMTCkKKy0JCQl7Cist CQkJb2s9MDsKKy0JCQlnb3RvIGVycjsKKy0JCQl9CistCQlpZiAoY291bnRlcl9yZXQgIT0gTlVM TCkgKmNvdW50ZXJfcmV0PWNvdW50ZXI7CisgCQlpZiAoaF9yZXQgIT0gTlVMTCkgKmhfcmV0PWg7 CistCQlpZiAoc2VlZF9vdXQpCistCQkJbWVtY3B5KHNlZWRfb3V0LCBzZWVkLCBxc2l6ZSk7Cist CQl9CistCWlmKGN0eCkKKy0JCXsKKy0JCUJOX0NUWF9lbmQoY3R4KTsKKy0JCUJOX0NUWF9mcmVl KGN0eCk7CisgCQl9CisgCWlmIChtb250ICE9IE5VTEwpIEJOX01PTlRfQ1RYX2ZyZWUobW9udCk7 CisgCXJldHVybiBvazsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhLmgu ZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYS5oCistLS0gb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2RzYS9kc2EuaC5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTAuODQwNzU3MDY1ICswMjAw CisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2EuaAkyMDEyLTA0LTI2IDE4OjAwOjUx LjM4Njc2ODk5MyArMDIwMAorQEAgLTg4LDYgKzg4LDggQEAKKyAjIGRlZmluZSBPUEVOU1NMX0RT QV9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCisgI2VuZGlmCisgCisrI2RlZmluZSBPUEVOU1NMX0RT QV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAorKworICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVf TU9OVF9QCTB4MDEKKyAjZGVmaW5lIERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgw MiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBEU0EKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBj b25zdGFudCB0aW1lCitAQCAtMjY0LDYgKzI2NiwxNyBAQCBpbnQJRFNBX3ByaW50X2ZwKEZJTEUg KmJwLCBjb25zdCBEU0EgKngsCisgREggKkRTQV9kdXBfREgoY29uc3QgRFNBICpyKTsKKyAjZW5k aWYKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IEZJUFNfZHNhX2J1aWx0aW5fcGFyYW1n ZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisrCWNvbnN0IEVWUF9NRCAq ZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKKysJ aW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7Cisr aW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90 IHFiaXRzLAorKwkJY29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50 IHNlZWRfbGVuLAorKwkJQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50 ZXJfcmV0LCBCTl9HRU5DQiAqY2IpOworK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAq Y3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKKysJCUJJR05VTSAqKmdfcmV0LCB1bnNpZ25lZCBs b25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKKysjZW5kaWYKKysKKyAjZGVmaW5lIEVWUF9QS0VZ X0NUWF9zZXRfZHNhX3BhcmFtZ2VuX2JpdHMoY3R4LCBuYml0cykgXAorIAlFVlBfUEtFWV9DVFhf Y3RybChjdHgsIEVWUF9QS0VZX0RTQSwgRVZQX1BLRVlfT1BfUEFSQU1HRU4sIFwKKyAJCQkJRVZQ X1BLRVlfQ1RSTF9EU0FfUEFSQU1HRU5fQklUUywgbmJpdHMsIE5VTEwpCitAQCAtMjg1LDEwICsy OTgsMTMgQEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIERTQV9G X0RPX0RTQV9QUklOVAkJCQkgMTA0CisgI2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlQJCQkJ IDEwMAorICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQCQkJIDEwMQorKyNkZWZpbmUg RFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOCQkJIDEyNAorKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxU SU5fUEFSQU1HRU4JCQkgMTIzCisgI2RlZmluZSBEU0FfRl9EU0FfRE9fU0lHTgkJCQkgMTEyCisg I2RlZmluZSBEU0FfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMTMKKy0jZGVmaW5lIERTQV9GX0RTQV9H RU5FUkFURV9LRVkJCQkJIDEyNAorLSNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRF UlNfRVgJCSAxMjMKKysjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9LRVkJCQkJIDEyNgorKyNk ZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVgJCSAxMjcKKysjZGVmaW5lIERT QV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTCS8qIHVudXNlZCAqLwkgMTI1CisgI2RlZmluZSBE U0FfRl9EU0FfTkVXX01FVEhPRAkJCQkgMTAzCisgI2RlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVD T0RFCQkJCSAxMTkKKyAjZGVmaW5lIERTQV9GX0RTQV9QUklOVF9GUAkJCQkgMTA1CitAQCAtMzE0 LDExICszMzAsMTUgQEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5l IERTQV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRQkJIDEwMAorICNkZWZpbmUgRFNBX1Jf REVDT0RFX0VSUk9SCQkJCSAxMDQKKyAjZGVmaW5lIERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUJ CQkgMTA2CisrI2RlZmluZSBEU0FfUl9LRVlfU0laRV9JTlZBTElECQkJCSAxMTMKKysjZGVmaW5l IERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMTAKKyAjZGVmaW5lIERTQV9SX01JU1NJTkdf UEFSQU1FVEVSUwkJCSAxMDEKKyAjZGVmaW5lIERTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAx MDMKKy0jZGVmaW5lIERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUwkJCSAxMTAKKysjZGVmaW5l IERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUwkJCSAxMTIKKyAjZGVmaW5lIERTQV9SX05PTl9G SVBTX0RTQV9NRVRIT0QJCQkgMTExCisrI2RlZmluZSBEU0FfUl9OT05fRklQU19NRVRIT0QJCQkJ IDExMQorICNkZWZpbmUgRFNBX1JfTk9fUEFSQU1FVEVSU19TRVQJCQkJIDEwNworKyNkZWZpbmUg RFNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSAvKiB1bnVzZWQgKi8gMTEy CisgI2RlZmluZSBEU0FfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IJCQkgMTA1CisgCisgI2lm ZGVmICBfX2NwbHVzcGx1cworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2Ff a2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYV9rZXkuYworLS0tIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMJMjAxMS0wNi0wOSAxNzoyMTo0Ni4w MDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYV9rZXkuYwky MDEyLTA0LTI2IDE4OjAwOjUxLjM4Njc2ODk5MyArMDIwMAorQEAgLTY2LDYgKzY2LDI0IEBACisg CisgI2lmZGVmIE9QRU5TU0xfRklQUworICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKytzdGF0aWMgaW50IGZpcHNfY2hlY2tfZHNhKERTQSAq ZHNhKQorKwl7CisrCUVWUF9QS0VZIHBrOworKwl1bnNpZ25lZCBjaGFyIHRic1tdID0gIkRTQSBQ YWlyd2lzZSBDaGVjayBEYXRhIjsKKysgICAgCXBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7CisrICAg IAlway5wa2V5LmRzYSA9IGRzYTsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo JnBrLCB0YnMsIDAsIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwpKQorKwkJeworKwkJRklQU2VycihG SVBTX0ZfRklQU19DSEVDS19EU0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKKysJCWZp cHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJCXJldHVybiAwOworKwkJfQorKwlyZXR1cm4gMTsK KysJfQorKworICNlbmRpZgorIAorIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAq ZHNhKTsKK0BAIC04MiwxMCArMTAwLDYgQEAgaW50IERTQV9nZW5lcmF0ZV9rZXkoRFNBICpkc2Ep CisgI2VuZGlmCisgCWlmKGRzYS0+bWV0aC0+ZHNhX2tleWdlbikKKyAJCXJldHVybiBkc2EtPm1l dGgtPmRzYV9rZXlnZW4oZHNhKTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21v ZGUoKSkKKy0JCXJldHVybiBGSVBTX2RzYV9nZW5lcmF0ZV9rZXkoZHNhKTsKKy0jZW5kaWYKKyAJ cmV0dXJuIGRzYV9idWlsdGluX2tleWdlbihkc2EpOworIAl9CisgCitAQCAtOTUsNiArMTA5LDE1 IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQorIAlCTl9DVFggKmN0 eD1OVUxMOworIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKKyAKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0Ff RkxBR19OT05fRklQU19BTExPVykKKysJCSYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNT TF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURTQWVycihEU0FfRl9EU0Ff QlVJTFRJTl9LRVlHRU4sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlnb3RvIGVycjsK KysJCX0KKysjZW5kaWYKKysKKyAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3Rv IGVycjsKKyAKKyAJaWYgKGRzYS0+cHJpdl9rZXkgPT0gTlVMTCkKK0BAIC0xMzMsNiArMTU2LDE0 IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQorIAorIAlkc2EtPnBy aXZfa2V5PXByaXZfa2V5OworIAlkc2EtPnB1Yl9rZXk9cHViX2tleTsKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCWlmKEZJUFNfbW9kZSgpICYmICFmaXBzX2NoZWNrX2RzYShkc2EpKQorKwkJewor KwkJZHNhLT5wdWJfa2V5ID0gTlVMTDsKKysJCWRzYS0+cHJpdl9rZXkgPSBOVUxMOworKwkgICAg CWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorIAlvaz0xOworIAorIGVycjoKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5 cHRvL2RzYS9kc2FfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYV9saWIu Yy5maXBzCTIwMTEtMTEtMTQgMTU6MTY6MDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMWIvY3J5cHRvL2RzYS9kc2FfbGliLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zODc3NjkwMTQg KzAyMDAKK0BAIC04NywxNCArODcsNyBAQCBjb25zdCBEU0FfTUVUSE9EICpEU0FfZ2V0X2RlZmF1 bHRfbWV0aG9kCisgCXsKKyAJaWYoIWRlZmF1bHRfRFNBX21ldGhvZCkKKyAJCXsKKy0jaWZkZWYg T1BFTlNTTF9GSVBTCistCQlpZiAoRklQU19tb2RlKCkpCistCQkJcmV0dXJuIEZJUFNfZHNhX29w ZW5zc2woKTsKKy0JCWVsc2UKKy0JCQlyZXR1cm4gRFNBX09wZW5TU0woKTsKKy0jZWxzZQorIAkJ ZGVmYXVsdF9EU0FfbWV0aG9kID0gRFNBX09wZW5TU0woKTsKKy0jZW5kaWYKKyAJCX0KKyAJcmV0 dXJuIGRlZmF1bHRfRFNBX21ldGhvZDsKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5 cHRvL2RzYS9kc2FfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2FfbG9j bC5oCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2FfbG9jbC5oLmZpcHMJMjAxMi0w NC0yNiAxODowMDo1MC44NDQ3NTcxNTIgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v ZHNhL2RzYV9sb2NsLmgJMjAxMi0wNC0yNiAxODowMDo1MS4zODc3NjkwMTQgKzAyMDAKK0BAIC01 Niw1ICs1Niw0IEBACisgCisgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXpl X3QgYml0cywgc2l6ZV90IHFiaXRzLAorIAljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNp Z25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qgc2VlZF9sZW4sCistCXVuc2lnbmVkIGNoYXIgKnNl ZWRfb3V0LAorIAlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VO Q0IgKmNiKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhX29zc2wuYy5m aXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhX29zc2wuYworLS0tIG9wZW5zc2wtMS4w LjFiL2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzCTIwMTEtMDItMDEgMTM6NTM6NDcuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCTIwMTIt MDQtMjYgMTg6MDA6NTEuMzg4NzY5MDM1ICswMjAwCitAQCAtNjUsNiArNjUsOSBAQAorICNpbmNs dWRlIDxvcGVuc3NsL2RzYS5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAjaW5jbHVk ZSA8b3BlbnNzbC9hc24xLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24oY29u c3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRsZW4sIERTQSAqZHNhKTsKKyBzdGF0aWMgaW50 IGRzYV9zaWduX3NldHVwKERTQSAqZHNhLCBCTl9DVFggKmN0eF9pbiwgQklHTlVNICoqa2ludnAs IEJJR05VTSAqKnJwKTsKK0BAIC04Miw3ICs4NSw3IEBAIE5VTEwsIC8qIGRzYV9tb2RfZXhwLCAq LworIE5VTEwsIC8qIGRzYV9ibl9tb2RfZXhwLCAqLworIGRzYV9pbml0LAorIGRzYV9maW5pc2gs CistMCwKKytEU0FfRkxBR19GSVBTX01FVEhPRCwKKyBOVUxMLAorIE5VTEwsCisgTlVMTAorQEAg LTEzOCw2ICsxNDEsMjEgQEAgc3RhdGljIERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2ln bgorIAlEU0FfU0lHICpyZXQ9TlVMTDsKKyAJaW50IG5vcmVkbyA9IDA7CisgCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgeworKwkgICAg RklQU2VycihGSVBTX0ZfRFNBX0RPX1NJR04sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsK KysJICAgIHJldHVybiBOVUxMOworKwkgICAgfQorKworKwlpZiAoRklQU19tb2RlKCkgJiYgIShk c2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpIAorKwkJJiYgKEJOX251bV9iaXRz KGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJ RFNBZXJyKERTQV9GX0RTQV9ET19TSUdOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJ cmV0dXJuIE5VTEw7CisrCQl9CisrI2VuZGlmCisrCisgCUJOX2luaXQoJm0pOworIAlCTl9pbml0 KCZ4cik7CisgCitAQCAtMzI1LDYgKzM0MywyMSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnko Y29uc3QgdW5zaWduZWQKKyAJCXJldHVybiAtMTsKKyAJCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJy KEZJUFNfRl9EU0FfRE9fVkVSSUZZLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAg ICByZXR1cm4gLTE7CisrCSAgICB9CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+Zmxh Z3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykgCisrCQkmJiAoQk5fbnVtX2JpdHMoZHNhLT5w KSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlEU0FlcnIo RFNBX0ZfRFNBX0RPX1ZFUklGWSwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVy biAtMTsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKEJOX251bV9iaXRzKGRzYS0+cCkgPiBPUEVO U1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTKQorIAkJeworIAkJRFNBZXJyKERTQV9GX0RTQV9ET19W RVJJRlksRFNBX1JfTU9EVUxVU19UT09fTEFSR0UpOworQEAgLTM5OSw2ICs0MzIsOSBAQCBzdGF0 aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQKKyAKKyBzdGF0aWMgaW50IGRzYV9p bml0KERTQSAqZHNhKQorIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3Rf Y2hlY2soKTsKKysjZW5kaWYKKyAJZHNhLT5mbGFnc3w9RFNBX0ZMQUdfQ0FDSEVfTU9OVF9QOwor IAlyZXR1cm4oMSk7CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2RzYS9kc2Ff cG1ldGguYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMKKy0tLSBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jLmZpcHMJMjAxMS0wNi0yMCAyMjow NToxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNhL2RzYV9w bWV0aC5jCTIwMTItMDQtMjYgMTg6MDA6NTEuMzg4NzY5MDM1ICswMjAwCitAQCAtMjU1LDcgKzI1 NSw3IEBAIHN0YXRpYyBpbnQgcGtleV9kc2FfcGFyYW1nZW4oRVZQX1BLRVlfQ1QKKyAJaWYgKCFk c2EpCisgCQlyZXR1cm4gMDsKKyAJcmV0ID0gZHNhX2J1aWx0aW5fcGFyYW1nZW4oZHNhLCBkY3R4 LT5uYml0cywgZGN0eC0+cWJpdHMsIGRjdHgtPnBtZCwKKy0JICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgcGNiKTsKKysJICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgcGNiKTsKKyAJaWYgKHJldCkKKyAJCUVW UF9QS0VZX2Fzc2lnbl9EU0EocGtleSwgZHNhKTsKKyAJZWxzZQorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWIvY3J5cHRvL2RzYS9kc2F0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZHNh L2RzYXRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9kc2EvZHNhdGVzdC5jLmZpcHMJ MjAwOC0wOC0wNiAxNzo1NDoxMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vZHNhL2RzYXRlc3QuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM4OTc2OTA1OCArMDIwMAor QEAgLTk2LDM2ICs5Niw0MSBAQCBzdGF0aWMgaW50IE1TX0NBTExCQUNLIGRzYV9jYihpbnQgcCwg aW50CisgLyogc2VlZCwgb3V0X3AsIG91dF9xLCBvdXRfZyBhcmUgdGFrZW4gZnJvbSB0aGUgdXBk YXRlZCBBcHBlbmRpeCA1IHRvCisgICogRklQUyBQVUIgMTg2IGFuZCBhbHNvIGFwcGVhciBpbiBB cHBlbmRpeCA1IHRvIEZJUFMgUElCIDE4Ni0xICovCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2Vl ZFsyMF09eworLQkweGQ1LDB4MDEsMHg0ZSwweDRiLDB4NjAsMHhlZiwweDJiLDB4YTgsMHhiNiww eDIxLDB4MWIsMHg0MCwKKy0JMHg2MiwweGJhLDB4MzIsMHgyNCwweGUwLDB4NDIsMHg3ZCwweGQz LAorKwkweDAyLDB4NDcsMHgxMSwweDkyLDB4MTEsMHg4OCwweEM4LDB4RkIsMHhBRiwweDQ4LDB4 NEMsMHg2MiwKKysJMHhERiwweEE1LDB4QkUsMHhBMCwweEE0LDB4M0MsMHg1NiwweEUzLAorIAl9 OworIAorIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9wW109eworLQkweDhkLDB4ZjIsMHhhNCww eDk0LDB4NDksMHgyMiwweDc2LDB4YWEsCistCTB4M2QsMHgyNSwweDc1LDB4OWIsMHhiMCwweDY4 LDB4NjksMHhjYiwKKy0JMHhlYSwweGMwLDB4ZDgsMHgzYSwweGZiLDB4OGQsMHgwYywweGY3LAor LQkweGNiLDB4YjgsMHgzMiwweDRmLDB4MGQsMHg3OCwweDgyLDB4ZTUsCistCTB4ZDAsMHg3Niww eDJmLDB4YzUsMHhiNywweDIxLDB4MGUsMHhhZiwKKy0JMHhjMiwweGU5LDB4YWQsMHhhYywweDMy LDB4YWIsMHg3YSwweGFjLAorLQkweDQ5LDB4NjksMHgzZCwweGZiLDB4ZjgsMHgzNywweDI0LDB4 YzIsCistCTB4ZWMsMHgwNywweDM2LDB4ZWUsMHgzMSwweGM4LDB4MDIsMHg5MSwKKysJMHhBQyww eENCLDB4MUUsMHg2MywweDYwLDB4NjksMHgwQywweEZCLDB4MDYsMHgxOSwweDY4LDB4M0UsCisr CTB4QTUsMHgwMSwweDVBLDB4QTIsMHgxNSwweDVDLDB4RTIsMHg5OSwweDJELDB4RDUsMHgzMCww eDk5LAorKwkweDdFLDB4NUYsMHg4RCwweEUyLDB4RjcsMHhDNiwweDJFLDB4OEQsMHhBMywweDlG LDB4NTgsMHhBRCwKKysJMHhENiwweEE5LDB4N0QsMHgwRSwweDBELDB4OTUsMHg1MywweEE2LDB4 NzEsMHgzQSwweERFLDB4QUIsCisrCTB4QUMsMHhFOSwweEY0LDB4MzYsMHg1NSwweDlFLDB4Qjks MHhENiwweDkzLDB4QkYsMHhGMywweDE4LAorKwkweDFDLDB4MTQsMHg3QiwweEE1LDB4NDIsMHgy RSwweENELDB4MDAsMHhFQiwweDM1LDB4M0IsMHgxQiwKKysJMHhBOCwweDUxLDB4QkIsMHhFMSww eDU4LDB4NDIsMHg4NSwweDg0LDB4MjIsMHhBNywweDk3LDB4NUUsCisrCTB4OTksMHg2RiwweDM4 LDB4MjAsMHhCRCwweDlELDB4QjYsMHhEOSwweDMzLDB4MzcsMHgyQSwweEZELAorKwkweEJCLDB4 RDQsMHhCQywweDBDLDB4MkEsMHg2NywweENCLDB4OUYsMHhCQiwweERGLDB4RjksMHg5MywKKysJ MHhBQSwweEQ2LDB4RjAsMHhENiwweDk1LDB4MEIsMHg1RCwweDY1LDB4MTQsMHhEMCwweDE4LDB4 OUQsCisrCTB4QzYsMHhBRiwweEYwLDB4QzYsMHgzNywweDdDLDB4RjMsMHg1RiwKKyAJfTsKKyAK KyBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcVtdPXsKKy0JMHhjNywweDczLDB4MjEsMHg4Yyww eDczLDB4N2UsMHhjOCwweGVlLAorLQkweDk5LDB4M2IsMHg0ZiwweDJkLDB4ZWQsMHgzMCwweGY0 LDB4OGUsCistCTB4ZGEsMHhjZSwweDkxLDB4NWYsCisrCTB4RTMsMHg4RSwweDVFLDB4NkQsMHhC RiwweDJCLDB4NzksMHhGOCwweEM1LDB4NEIsMHg4OSwweDhCLAorKwkweEJBLDB4MkQsMHg5MSww eEMzLDB4NkMsMHg4MCwweEFDLDB4ODcsCisgCX07CisgCisgc3RhdGljIHVuc2lnbmVkIGNoYXIg b3V0X2dbXT17CistCTB4NjIsMHg2ZCwweDAyLDB4NzgsMHgzOSwweGVhLDB4MGEsMHgxMywKKy0J MHg0MSwweDMxLDB4NjMsMHhhNSwweDViLDB4NGMsMHhiNSwweDAwLAorLQkweDI5LDB4OWQsMHg1 NSwweDIyLDB4OTUsMHg2YywweGVmLDB4Y2IsCistCTB4M2IsMHhmZiwweDEwLDB4ZjMsMHg5OSww eGNlLDB4MmMsMHgyZSwKKy0JMHg3MSwweGNiLDB4OWQsMHhlNSwweGZhLDB4MjQsMHhiYSwweGJm LAorLQkweDU4LDB4ZTUsMHhiNywweDk1LDB4MjEsMHg5MiwweDVjLDB4OWMsCistCTB4YzQsMHgy ZSwweDlmLDB4NmYsMHg0NiwweDRiLDB4MDgsMHg4YywKKy0JMHhjNSwweDcyLDB4YWYsMHg1Myww eGU2LDB4ZDcsMHg4OCwweDAyLAorKwkweDQyLDB4NEEsMHgwNCwweDRFLDB4NzksMHhCNCwweDk5 LDB4N0YsMHhGRCwweDU4LDB4MzYsMHgyQywKKysJMHgxQiwweDVGLDB4MTgsMHg3RSwweDBELDB4 Q0MsMHhBQiwweDgxLDB4QzksMHg1RCwweDEwLDB4Q0UsCisrCTB4NEUsMHg4MCwweDdFLDB4NTgs MHhCNCwweDM0LDB4M0YsMHhBNywweDQ1LDB4QzcsMHhBQSwweDM2LAorKwkweDI0LDB4NDIsMHhB OSwweDNCLDB4RTgsMHgwRSwweDA0LDB4MDIsMHgyRCwweEZCLDB4QTYsMHgxMywKKysJMHhCOSww eEI1LDB4MTUsMHhBNSwweDU2LDB4MDcsMHgzNSwweEU0LDB4MDMsMHhCNiwweDc5LDB4N0MsCisr CTB4NjIsMHhERCwweERGLDB4M0YsMHg3MSwweDNBLDB4OUQsMHg4QiwweEM0LDB4RjYsMHhFNyww eDFELAorKwkweDUyLDB4QTgsMHhBOSwweDQzLDB4MUQsMHgzMywweDUxLDB4ODgsMHgzOSwweEJE LDB4NzMsMHhFOSwKKysJMHg1RiwweEJFLDB4ODIsMHg0OSwweDI3LDB4RTYsMHhCNSwweDUzLDB4 QzEsMHgzOCwweEFDLDB4MkYsCisrCTB4NkQsMHg5NywweDZDLDB4RUIsMHg2NywweEMxLDB4NUYs MHg2NywweEY4LDB4MzUsMHgwNSwweDVFLAorKwkweEQ1LDB4NjgsMHg4MCwweEFBLDB4OTYsMHhD QSwweDBCLDB4OEEsMHhFNiwweEYxLDB4QjEsMHg0MSwKKysJMHhDNiwweDc1LDB4OTQsMHgwQSww eDBBLDB4MkEsMHhGQSwweDI5LAorIAl9OworIAorIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHN0cjFbXT0iMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOworQEAgLTE1Nyw3ICsxNjIsNyBAQCBpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCUJJT19wcmludGYoYmlvX2VyciwidGVzdCBn ZW5lcmF0aW9uIG9mIERTQSBwYXJhbWV0ZXJzXG4iKTsKKyAKKyAJQk5fR0VOQ0Jfc2V0KCZjYiwg ZHNhX2NiLCBiaW9fZXJyKTsKKy0JaWYoKChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFE U0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDUxMiwKKysJaWYoKChkc2EgPSBEU0FfbmV3 KCkpID09IE5VTEwpIHx8ICFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsCisg CQkJCXNlZWQsIDIwLCAmY291bnRlciwgJmgsICZjYikpCisgCQlnb3RvIGVuZDsKKyAKK0BAIC0x NzAsOSArMTc1LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlCSU9fcHJp bnRmKGJpb19lcnIsIlxuY291bnRlcj0lZCBoPSVsZFxuIixjb3VudGVyLGgpOworIAkJCisgCURT QV9wcmludChiaW9fZXJyLGRzYSwwKTsKKy0JaWYgKGNvdW50ZXIgIT0gMTA1KSAKKysJaWYgKGNv dW50ZXIgIT0gMjM5KSAKKyAJCXsKKy0JCUJJT19wcmludGYoYmlvX2VyciwiY291bnRlciBzaG91 bGQgYmUgMTA1XG4iKTsKKysJCUJJT19wcmludGYoYmlvX2VyciwiY291bnRlciBzaG91bGQgYmUg MjM5XG4iKTsKKyAJCWdvdG8gZW5kOworIAkJfQorIAlpZiAoaCAhPSAyKQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vZW5naW5lL2VuZ19hbGwuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9lbmdpbmUv ZW5nX2FsbC5jLmZpcHMJMjAxMS0wOC0xMCAyMDo1MzoxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYwkyMDEyLTA0LTI2IDE4OjAwOjUx LjM4OTc2OTA1OCArMDIwMAorQEAgLTU4LDExICs1OCwyNSBAQAorIAorICNpbmNsdWRlICJjcnlw dGxpYi5oIgorICNpbmNsdWRlICJlbmdfaW50LmgiCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyB2b2lkIEVOR0lORV9sb2FkX2J1 aWx0aW5fZW5naW5lcyh2b2lkKQorIAl7CisgCS8qIFNvbWUgRU5HSU5FcyBuZWVkIHRoaXMgKi8K KyAJT1BFTlNTTF9jcHVpZF9zZXR1cCgpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNT TF9pbml0X2xpYnJhcnkoKTsKKysJaWYgKEZJUFNfbW9kZSgpKSB7CisrCQkvKiBXZSBhbGxvdyBs b2FkaW5nIGR5bmFtaWMgZW5naW5lIGFzIGEgdGhpcmQgcGFydHkKKysJCSAgIGVuZ2luZSBtaWdo dCBiZSBGSVBTIHZhbGlkYXRlZC4KKysJCSAgIFVzZXIgaXMgZGlzYWxsb3dlZCB0byBsb2FkIG5v bi12YWxpZGF0ZWQgZW5naW5lcworKwkJICAgYnkgc2VjdXJpdHkgcG9saWN5LiAqLworKwkJRU5H SU5FX2xvYWRfZHluYW1pYygpOworKwkJcmV0dXJuOworKwl9CisrI2VuZGlmCisgI2lmIDAKKyAJ LyogVGhlcmUncyBubyBsb25nZXIgYW55IG5lZWQgZm9yIGFuICJvcGVuc3NsIiBFTkdJTkUgdW5s ZXNzLCBvbmUgZGF5LAorIAkgKiBpdCBpcyB0aGUgKm9ubHkqIHdheSBmb3Igc3RhbmRhcmQgYnVp bHRpbiBpbXBsZW1lbnRhdGlvbnMgdG8gYmUgYmUKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9lcnIvZXJyX2FsbC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Vyci9lcnJfYWxs LmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXJyL2Vycl9hbGwuYy5maXBzCTIwMTEtMDYt MjEgMTg6NTg6MTAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Vy ci9lcnJfYWxsLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTA3NjkwODEgKzAyMDAKK0BAIC05Niw2 ICs5Niw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvb2NzcC5oPgorICNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3RzLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9f Q01TCisgI2luY2x1ZGUgPG9wZW5zc2wvY21zLmg+CisgI2VuZGlmCitAQCAtMTUzLDYgKzE1Niw5 IEBAIHZvaWQgRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3Modm9pZCkKKyAjZW5kaWYKKyAJRVJSX2xv YWRfT0NTUF9zdHJpbmdzKCk7CisgCUVSUl9sb2FkX1VJX3N0cmluZ3MoKTsKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCUVSUl9sb2FkX0ZJUFNfc3RyaW5ncygpOworKyNlbmRpZgorICNpZm5kZWYg T1BFTlNTTF9OT19DTVMKKyAJRVJSX2xvYWRfQ01TX3N0cmluZ3MoKTsKKyAjZW5kaWYKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvY19hbGxjLmMuZmlwcyBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZXZwL2NfYWxsYy5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9jX2Fs bGMuYy5maXBzCTIwMTEtMTEtMTQgMjI6MTM6MzUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMWIvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM5MDc2OTA4 MSArMDIwMAorQEAgLTY1LDYgKzY1LDExIEBACisgdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVy cyh2b2lkKQorIAl7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlPUEVOU1NMX2luaXRfbGli cmFyeSgpOworKwlpZighRklQU19tb2RlKCkpIAorKwkJeworKyNlbmRpZgorICNpZm5kZWYgT1BF TlNTTF9OT19ERVMKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIoKSk7CisgCUVWUF9hZGRf Y2lwaGVyKEVWUF9kZXNfY2ZiMSgpKTsKK0BAIC0yMjcsNCArMjMyLDYwIEBAIHZvaWQgT3BlblNT TF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxs aWFfMjU2X2NiYywiQ0FNRUxMSUEyNTYiKTsKKyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2Ft ZWxsaWFfMjU2X2NiYywiY2FtZWxsaWEyNTYiKTsKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCQl9CisrCWVsc2UKKysJCXsKKysjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisrCUVWUF9h ZGRfY2lwaGVyKEVWUF9kZXNfZWRlX2NmYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19l ZGUzX2NmYigpKTsKKysKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfb2ZiKCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfb2ZiKCkpOworKworKwlFVlBfYWRkX2NpcGhlcihF VlBfZGVzX2VkZV9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7 CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2NiYywiREVTMyIpOworKwlFVlBf YWRkX2NpcGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMsImRlczMiKTsKKysKKysJRVZQX2FkZF9j aXBoZXIoRVZQX2Rlc19lZGUoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlMygpKTsK KysjZW5kaWYKKysKKysjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCisrCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X2VjYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwor KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X2NmYjEoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjgoKSk7 CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X29mYigpKTsKKysJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xMjhfY3RyKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7 CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3h0cygpKTsKKysJRVZQX2FkZF9jaXBoZXJf YWxpYXMoU05fYWVzXzEyOF9jYmMsIkFFUzEyOCIpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhT Tl9hZXNfMTI4X2NiYywiYWVzMTI4Iik7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2Vj YigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOworKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzE5Ml9jZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2Nm YjEoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYjgoKSk7CisrCUVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMTkyX29mYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJf Y3RyKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9nY20oKSk7CisrCUVWUF9hZGRf Y2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCJBRVMxOTIiKTsKKysJRVZQX2FkZF9jaXBoZXJf YWxpYXMoU05fYWVzXzE5Ml9jYmMsImFlczE5MiIpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9lY2IoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKKysJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9jZmIxKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmI4KCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9vZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMjU2X2N0cigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl94dHMoKSk7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFz KFNOX2Flc18yNTZfY2JjLCJBRVMyNTYiKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVz XzI1Nl9jYmMsImFlczI1NiIpOworKyNlbmRpZgorKwkJfQorKyNlbmRpZgorIAl9CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL2NfYWxsZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2V2cC9jX2FsbGQuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvY19hbGxk LmMuZmlwcwkyMDA5LTA3LTA4IDEwOjUwOjUzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjFiL2NyeXB0by9ldnAvY19hbGxkLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTA3NjkwODEg KzAyMDAKK0BAIC02NCw2ICs2NCwxMSBAQAorIAorIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2Vz dHModm9pZCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJh cnkoKTsKKysJaWYgKCFGSVBTX21vZGUoKSkKKysJCXsKKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5T U0xfTk9fTUQ0CisgCUVWUF9hZGRfZGlnZXN0KEVWUF9tZDQoKSk7CisgI2VuZGlmCitAQCAtMTEx LDQgKzExNiwzMiBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzKHZvaWQpCisgI2lmbmRl ZiBPUEVOU1NMX05PX1dISVJMUE9PTAorIAlFVlBfYWRkX2RpZ2VzdChFVlBfd2hpcmxwb29sKCkp OworICNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCX0KKysJZWxzZQorKwkJeworKyNp ZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEExKQor KwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05f c2hhMSwic3NsMy1zaGExIik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNB RW5jcnlwdGlvbixTTl9zaGExV2l0aFJTQSk7CisrI2lmbmRlZiBPUEVOU1NMX05PX0RTQQorKwlF VlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNh V2l0aFNIQTEsU05fZHNhV2l0aFNIQTFfMik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2Rz YVdpdGhTSEExLCJEU1MxIik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEEx LCJkc3MxIik7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCisrCUVWUF9hZGRf ZGlnZXN0KEVWUF9lY2RzYSgpKTsKKysjZW5kaWYKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xf Tk9fU0hBMjU2CisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7CisrCUVWUF9hZGRfZGln ZXN0KEVWUF9zaGEyNTYoKSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgor KwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOworKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hh NTEyKCkpOworKyNlbmRpZgorKwkJfQorKyNlbmRpZgorIAl9CitkaWZmIC11cCBvcGVuc3NsLTEu MC4xYi9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9k aWdlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcwkyMDEx LTA1LTI5IDE3OjU1OjEzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0 by9ldnAvZGlnZXN0LmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTE3NjkxMDMgKzAyMDAKK0BAIC0x NDIsOSArMTQyLDUwIEBAIGludCBFVlBfRGlnZXN0SW5pdChFVlBfTURfQ1RYICpjdHgsIGNvbnMK KyAJcmV0dXJuIEVWUF9EaWdlc3RJbml0X2V4KGN0eCwgdHlwZSwgTlVMTCk7CisgCX0KKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJh cCBwcm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCisrICogYWxnb3JpdGhtcyBp biBGSVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgorKyAqLworKworK3N0YXRpYyBpbnQg YmFkX2luaXQoRVZQX01EX0NUWCAqY3R4KQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0 IGluaXQiKTsgcmV0dXJuIDA7fQorKworK3N0YXRpYyBpbnQgYmFkX3VwZGF0ZShFVlBfTURfQ1RY ICpjdHgsY29uc3Qgdm9pZCAqZGF0YSxzaXplX3QgY291bnQpCisrCXsgRklQU19FUlJPUl9JR05P UkVEKCJEaWdlc3QgdXBkYXRlIik7IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50IGJhZF9maW5h bChFVlBfTURfQ1RYICpjdHgsdW5zaWduZWQgY2hhciAqbWQpCisrCXsgRklQU19FUlJPUl9JR05P UkVEKCJEaWdlc3QgRmluYWwiKTsgcmV0dXJuIDA7fQorKworK3N0YXRpYyBjb25zdCBFVlBfTUQg YmFkX21kID0KKysJeworKwkwLAorKwkwLAorKwkwLAorKwkwLAorKwliYWRfaW5pdCwKKysJYmFk X3VwZGF0ZSwKKysJYmFkX2ZpbmFsLAorKwlOVUxMLAorKwlOVUxMLAorKwlOVUxMLAorKwkwLAor Kwl7MCwwLDAsMH0sCisrCX07CisrCisrI2VuZGlmCisrCisgaW50IEVWUF9EaWdlc3RJbml0X2V4 KEVWUF9NRF9DVFggKmN0eCwgY29uc3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmltcGwpCisgCXsK KyAJRVZQX01EX0NUWF9jbGVhcl9mbGFncyhjdHgsRVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOwor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsK KysJCUZJUFNlcnIoRklQU19GX0VWUF9ESUdFU1RJTklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNU X0ZBSUxFRCk7CisrCQljdHgtPmRpZ2VzdCA9ICZiYWRfbWQ7CisrCQlyZXR1cm4gMDsKKysJCX0K KysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgCS8qIFdoZXRoZXIgaXQncyBu aWNlIG9yIG5vdCwgIkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKKyAJ ICogc28gdGhpcyBjb250ZXh0IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZv aWQgcmVsZWFzaW5nCitAQCAtMjAxLDYgKzI0MiwxOCBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgo RVZQX01EX0NUWCAqY3R4LCBjCisgI2VuZGlmCisgCWlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKQor IAkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSkKKysJCQl7Cisr CQkJaWYgKCEodHlwZS0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKSAKKysJCQkgJiYgIShjdHgt PmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJCQkJeworKwkJCQlF VlBlcnIoRVZQX0ZfRVZQX0RJR0VTVElOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsK KysJCQkJY3R4LT5kaWdlc3QgPSAmYmFkX21kOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJ CX0KKysjZW5kaWYKKyAJCWlmIChjdHgtPmRpZ2VzdCAmJiBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUp CisgCQkJT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7CisgCQljdHgtPmRpZ2VzdD10eXBlOwor QEAgLTIyOSwyNiArMjgyLDE1IEBAIHNraXBfdG9faW5pdDoKKyAJCX0KKyAJaWYgKGN0eC0+Zmxh Z3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVCkKKyAJCXJldHVybiAxOworLSNpZmRlZiBPUEVO U1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpKQorLQkJeworLQkJaWYgKEZJUFNfZGlnZXN0aW5p dChjdHgsIHR5cGUpKQorLQkJCXJldHVybiAxOworLQkJT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0 YSk7CistCQljdHgtPm1kX2RhdGEgPSBOVUxMOworLQkJcmV0dXJuIDA7CistCQl9CistI2VuZGlm CisgCXJldHVybiBjdHgtPmRpZ2VzdC0+aW5pdChjdHgpOworIAl9CisgCisgaW50IEVWUF9EaWdl c3RVcGRhdGUoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQp CisgCXsKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCistCXJldHVybiBGSVBTX2RpZ2VzdHVwZGF0ZShj dHgsIGRhdGEsIGNvdW50KTsKKy0jZWxzZQorLQlyZXR1cm4gY3R4LT51cGRhdGUoY3R4LGRhdGEs Y291bnQpOworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisgI2VuZGlmCisrCXJldHVybiBjdHgt PnVwZGF0ZShjdHgsZGF0YSxjb3VudCk7CisgCX0KKyAKKyAvKiBUaGUgY2FsbGVyIGNhbiBhc3N1 bWUgdGhhdCB0aGlzIHJlbW92ZXMgYW55IHNlY3JldCBkYXRhIGZyb20gdGhlIGNvbnRleHQgKi8K K0BAIC0yNjMsMTAgKzMwNSwxMSBAQCBpbnQgRVZQX0RpZ2VzdEZpbmFsKEVWUF9NRF9DVFggKmN0 eCwgdW5zCisgLyogVGhlIGNhbGxlciBjYW4gYXNzdW1lIHRoYXQgdGhpcyByZW1vdmVzIGFueSBz ZWNyZXQgZGF0YSBmcm9tIHRoZSBjb250ZXh0ICovCisgaW50IEVWUF9EaWdlc3RGaW5hbF9leChF VlBfTURfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKnNpemUpCisg CXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCXJldHVybiBGSVBTX2RpZ2VzdGZpbmFsKGN0eCwg bWQsIHNpemUpOworLSNlbHNlCisgCWludCByZXQ7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisrCisgCU9QRU5TU0xfYXNzZXJ0KGN0eC0+ ZGlnZXN0LT5tZF9zaXplIDw9IEVWUF9NQVhfTURfU0laRSk7CisgCXJldD1jdHgtPmRpZ2VzdC0+ ZmluYWwoY3R4LG1kKTsKKyAJaWYgKHNpemUgIT0gTlVMTCkKK0BAIC0yNzgsNyArMzIxLDYgQEAg aW50IEVWUF9EaWdlc3RGaW5hbF9leChFVlBfTURfQ1RYICpjdHgsCisgCQl9CisgCW1lbXNldChj dHgtPm1kX2RhdGEsMCxjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpOworIAlyZXR1cm4gcmV0OworLSNl bmRpZgorIAl9CisgCisgaW50IEVWUF9NRF9DVFhfY29weShFVlBfTURfQ1RYICpvdXQsIGNvbnN0 IEVWUF9NRF9DVFggKmluKQorQEAgLTM3Miw3ICs0MTQsNiBAQCB2b2lkIEVWUF9NRF9DVFhfZGVz dHJveShFVlBfTURfQ1RYICpjdHgpCisgLyogVGhpcyBjYWxsIGZyZWVzIHJlc291cmNlcyBhc3Nv Y2lhdGVkIHdpdGggdGhlIGNvbnRleHQgKi8KKyBpbnQgRVZQX01EX0NUWF9jbGVhbnVwKEVWUF9N RF9DVFggKmN0eCkKKyAJeworLSNpZm5kZWYgT1BFTlNTTF9GSVBTCisgCS8qIERvbid0IGFzc3Vt ZSBjdHgtPm1kX2RhdGEgd2FzIGNsZWFuZWQgaW4gRVZQX0RpZ2VzdF9GaW5hbCwKKyAJICogYmVj YXVzZSBzb21ldGltZXMgb25seSBjb3BpZXMgb2YgdGhlIGNvbnRleHQgYXJlIGV2ZXIgZmluYWxp c2VkLgorIAkgKi8KK0BAIC0zODUsNyArNDI2LDYgQEAgaW50IEVWUF9NRF9DVFhfY2xlYW51cChF VlBfTURfQ1RYICpjdHgpCisgCQlPUEVOU1NMX2NsZWFuc2UoY3R4LT5tZF9kYXRhLGN0eC0+ZGln ZXN0LT5jdHhfc2l6ZSk7CisgCQlPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKKyAJCX0KKy0j ZW5kaWYKKyAJaWYgKGN0eC0+cGN0eCkKKyAJCUVWUF9QS0VZX0NUWF9mcmVlKGN0eC0+cGN0eCk7 CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorQEAgLTM5NCw5ICs0MzQsNiBAQCBpbnQgRVZQ X01EX0NUWF9jbGVhbnVwKEVWUF9NRF9DVFggKmN0eCkKKyAJCSAqIGZ1bmN0aW9uYWwgcmVmZXJl bmNlIHdlIGhlbGQgZm9yIHRoaXMgcmVhc29uLiAqLworIAkJRU5HSU5FX2ZpbmlzaChjdHgtPmVu Z2luZSk7CisgI2VuZGlmCistI2lmZGVmIE9QRU5TU0xfRklQUworLQlGSVBTX21kX2N0eF9jbGVh bnVwKGN0eCk7CistI2VuZGlmCisgCW1lbXNldChjdHgsJ1wwJyxzaXplb2YgKmN0eCk7CisgCisg CXJldHVybiAxOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9lX2Flcy5jLmZp cHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9lX2Flcy5jCistLS0gb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMJMjAxMS0xMS0xNSAxMzoxOTo1Ni4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL2VfYWVzLmMJMjAxMi0wNC0yNiAxODow MDo1MS4zOTE3NjkxMDMgKzAyMDAKK0BAIC01Niw3ICs1Niw2IEBACisgI2luY2x1ZGUgPGFzc2Vy dC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorICNpbmNsdWRlICJldnBfbG9jbC5oIgor LSNpZm5kZWYgT1BFTlNTTF9GSVBTCisgI2luY2x1ZGUgIm1vZGVzX2xjbC5oIgorICNpbmNsdWRl IDxvcGVuc3NsL3JhbmQuaD4KKyAKK0BAIC03MTYsNyArNzE1LDcgQEAgc3RhdGljIGludCBhZXNf Z2NtX2N0cmwoRVZQX0NJUEhFUl9DVFggKgorIAkJaWYgKGFyZyA8PSAwKQorIAkJCXJldHVybiAw OworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYgIShj LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQlpZiAoRklQU19tb2Rl KCkgJiYgIShjLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisgCQkJCQkJ ICYmIGFyZyA8IDEyKQorIAkJCXJldHVybiAwOworICNlbmRpZgorQEAgLTExMjgsNyArMTEyNyw3 IEBAIHN0YXRpYyBpbnQgYWVzX3h0c19jaXBoZXIoRVZQX0NJUEhFUl9DVFgKKyAJCXJldHVybiAw OworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKyAJLyogUmVxdWlyZW1lbnQgb2YgU1A4MDAtMzhFICov CistCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxB R19OT05fRklQU19BTExPVykgJiYKKysJaWYgKEZJUFNfbW9kZSgpICYmICEoY3R4LT5mbGFncyAm IEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmCisgCQkJKGxlbiA+ICgxVUw8PDIwKSox NikpCisgCQl7CisgCQlFVlBlcnIoRVZQX0ZfQUVTX1hUU19DSVBIRVIsIEVWUF9SX1RPT19MQVJH RSk7CitAQCAtMTMxMCw0ICsxMzA5LDMgQEAgQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLDE5 MiwxLDEyLGNjbQorIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywyNTYsMSwxMixjY20sQ0NN LEVWUF9DSVBIX0ZMQUdfRklQU3xDVVNUT01fRkxBR1MpCisgCisgI2VuZGlmCistI2VuZGlmCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMgb3BlbnNzbC0x LjAuMWIvY3J5cHRvL2V2cC9lX2RlczMuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAv ZV9kZXMzLmMuZmlwcwkyMDExLTA1LTI5IDAxOjAxOjI2LjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZV9kZXMzLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTI3 NjkxMjUgKzAyMDAKK0BAIC02NSw4ICs2NSw2IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+ CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorIAorLSNpZm5kZWYgT1BFTlNTTF9GSVBTCist Cisgc3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsaW50 IGVuYyk7CisgCitAQCAtMjA4LDkgKzIwNiw5IEBAIHN0YXRpYyBpbnQgZGVzX2VkZTNfY2ZiOF9j aXBoZXIoRVZQX0NJUEgKKyAgICAgfQorIAorIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUsIERF U19FREVfS0VZLCBOSURfZGVzX2VkZSwgOCwgMTYsIDgsIDY0LAorLQkJCUVWUF9DSVBIX1JBTkRf S0VZLCBkZXNfZWRlX2luaXRfa2V5LCBOVUxMLCAKKy0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2 LAorLQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBf Q0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkJZGVzX2VkZV9p bml0X2tleSwKKysJCQlOVUxMLCBOVUxMLCBOVUxMLAorIAkJCWRlczNfY3RybCkKKyAKKyAjZGVm aW5lIGRlc19lZGUzX2NmYjY0X2NpcGhlciBkZXNfZWRlX2NmYjY0X2NpcGhlcgorQEAgLTIxOSwy MSArMjE3LDIxIEBAIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUsIERFU19FREVfS0VZLAorICNk ZWZpbmUgZGVzX2VkZTNfZWNiX2NpcGhlciBkZXNfZWRlX2VjYl9jaXBoZXIKKyAKKyBCTE9DS19D SVBIRVJfZGVmcyhkZXNfZWRlMywgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlMywgOCwgMjQsIDgs IDY0LAorLQkJCUVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSwgTlVMTCwgCist CQkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAor KwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVG QVVMVF9BU04xLAorKwkJCWRlc19lZGUzX2luaXRfa2V5LAorKwkJCU5VTEwsIE5VTEwsIE5VTEws CisgCQkJZGVzM19jdHJsKQorIAorIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19F REVfS0VZLE5JRF9kZXNfZWRlMywyNCw4LDEsCistCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBk ZXNfZWRlM19pbml0X2tleSxOVUxMLAorLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAor LQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQ X0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJICAgICBkZXNf ZWRlM19pbml0X2tleSwKKysJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKKyAJCSAgICAgZGVzM19j dHJsKQorIAorIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9k ZXNfZWRlMywyNCw4LDgsCistCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0 X2tleSxOVUxMLAorLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJICAgICBFVlBf Q0lQSEVSX2dldF9hc24xX2l2LAorKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19G SVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJICAgICBkZXNfZWRlM19pbml0X2tl eSwKKysJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKKyAJCSAgICAgZGVzM19jdHJsKQorIAorIHN0 YXRpYyBpbnQgZGVzX2VkZV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNp Z25lZCBjaGFyICprZXksCitAQCAtMzEzLDQgKzMxMSwzIEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVW UF9kZXNfZWRlMyh2b2lkKQorIAlyZXR1cm4gJmRlc19lZGUzX2VjYjsKKyB9CisgI2VuZGlmCist I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL2VfbnVsbC5jLmZpcHMg b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9lX251bGwuYworLS0tIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9ldnAvZV9udWxsLmMuZmlwcwkyMDExLTA2LTIwIDIyOjAwOjEwLjAwMDAwMDAwMCArMDIw MAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZV9udWxsLmMJMjAxMi0wNC0yNiAxODow MDo1MS4zOTI3NjkxMjUgKzAyMDAKK0BAIC02MSw4ICs2MSw2IEBACisgI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorIAorLSNpZm5kZWYgT1BF TlNTTF9GSVBTCistCisgc3RhdGljIGludCBudWxsX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpj dHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAJY29uc3QgdW5zaWduZWQgY2hhciAqaXYs aW50IGVuYyk7Cisgc3RhdGljIGludCBudWxsX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1 bnNpZ25lZCBjaGFyICpvdXQsCitAQCAtNzEsNyArNjksNyBAQCBzdGF0aWMgY29uc3QgRVZQX0NJ UEhFUiBuX2NpcGhlcj0KKyAJeworIAlOSURfdW5kZWYsCisgCTEsMCwwLAorLQkwLAorKwlFVlBf Q0lQSF9GTEFHX0ZJUFMsCisgCW51bGxfaW5pdF9rZXksCisgCW51bGxfY2lwaGVyLAorIAlOVUxM LAorQEAgLTEwMSw0ICs5OSwzIEBAIHN0YXRpYyBpbnQgbnVsbF9jaXBoZXIoRVZQX0NJUEhFUl9D VFggKmMKKyAJCW1lbWNweSgoY2hhciAqKW91dCwoY29uc3QgY2hhciAqKWluLGlubCk7CisgCXJl dHVybiAxOworIAl9CistI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZw L2V2cF9lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZXZwX2VuYy5jCistLS0g b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcwkyMDEyLTA0LTIwIDAyOjA3 OjQ4LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZXZwX2Vu Yy5jCTIwMTItMDQtMjYgMTg6MDI6MjUuNDE5ODIzMjc2ICswMjAwCitAQCAtNjksMTcgKzY5LDU4 IEBACisgI2VuZGlmCisgI2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCistI2lmZGVmIE9QRU5TU0xf RklQUworLSNkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpIEZJUFNfY2lwaGVy KGN0eCwgb3V0LCBpbiwgaW5sKQorLSNlbHNlCisgI2RlZmluZSBNX2RvX2NpcGhlcihjdHgsIG91 dCwgaW4sIGlubCkgY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkKKy0j ZW5kaWYKKyAKKyAKKyBjb25zdCBjaGFyIEVWUF92ZXJzaW9uW109IkVWUCIgT1BFTlNTTF9WRVJT SU9OX1BURVhUOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysvKiBUaGUgcHVycG9zZSBv ZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMK KysgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCisrICov CisrCisrc3RhdGljIGludCBiYWRfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNp Z25lZCBjaGFyICprZXksCisrCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMp CisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgaW5pdCIpOyByZXR1cm4gMDt9CisrCisr c3RhdGljIGludCBiYWRfZG9fY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNo YXIgKm91dCwKKysJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwp CisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgdXBkYXRlIik7IHJldHVybiAwO30KKysK KysvKiBOQjogbm8gY2xlYW51cCBiZWNhdXNlIGl0IGlzIGFsbG93ZWQgYWZ0ZXIgZmFpbGVkIGlu aXQgKi8KKysKKytzdGF0aWMgaW50IGJhZF9zZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBB U04xX1RZUEUgKnR5cCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBzZXRfYXNuMSIp OyByZXR1cm4gMDt9Cisrc3RhdGljIGludCBiYWRfZ2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0 eCwgQVNOMV9UWVBFICp0eXApCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgZ2V0X2Fz bjEiKTsgcmV0dXJuIDA7fQorK3N0YXRpYyBpbnQgYmFkX2N0cmwoRVZQX0NJUEhFUl9DVFggKmN0 eCwgaW50IHR5cGUsIGludCBhcmcsIHZvaWQgKnB0cikKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQo IkNpcGhlciBjdHJsIik7IHJldHVybiAwO30KKysKKytzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBi YWRfY2lwaGVyID0KKysJeworKwkwLAorKwkwLAorKwkwLAorKwkwLAorKwkwLAorKwliYWRfaW5p dCwKKysJYmFkX2RvX2NpcGhlciwKKysJTlVMTCwKKysJMCwKKysJYmFkX3NldF9hc24xLAorKwli YWRfZ2V0X2FzbjEsCisrCWJhZF9jdHJsLAorKwlOVUxMCisrCX07CisrCisrI2VuZGlmCisrCisg dm9pZCBFVlBfQ0lQSEVSX0NUWF9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgpCisgCXsKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVt c2V0KGN0eCwwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOworIAkvKiBjdHgtPmNpcGhlcj1OVUxM OyAqLworIAl9CitAQCAtMTExLDYgKzE1MiwxNCBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQ X0NJUEhFUl9DVFggKmN0CisgCQkJZW5jID0gMTsKKyAJCWN0eC0+ZW5jcnlwdCA9IGVuYzsKKyAJ CX0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisr CQl7CisrCQlGSVBTZXJyKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCxGSVBTX1JfRklQU19TRUxG VEVTVF9GQUlMRUQpOworKwkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKKysJCXJldHVybiAw OworKwkJfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAJLyogV2hldGhl ciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250 ZXh0cworIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRy eSB0byBhdm9pZCByZWxlYXNpbmcKK0BAIC0xNjksMTAgKzIxOCw2IEBAIGludCBFVlBfQ2lwaGVy SW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAJCQljdHgtPmVuZ2luZSA9IE5VTEw7CisgI2Vu ZGlmCisgCistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYgKEZJUFNfbW9kZSgpKQorLQkJCXJl dHVybiBGSVBTX2NpcGhlcmluaXQoY3R4LCBjaXBoZXIsIGtleSwgaXYsIGVuYyk7CistI2VuZGlm CisgCQljdHgtPmNpcGhlcj1jaXBoZXI7CisgCQlpZiAoY3R4LT5jaXBoZXItPmN0eF9zaXplKQor IAkJCXsKK0BAIC0yMDYsMTAgKzI1MSw2IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQ SEVSX0NUWCAqY3QKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgc2tpcF90b19pbml0Ogor ICNlbmRpZgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpKQorLQkJcmV0 dXJuIEZJUFNfY2lwaGVyaW5pdChjdHgsIGNpcGhlciwga2V5LCBpdiwgZW5jKTsKKy0jZW5kaWYK KyAJLyogd2UgYXNzdW1lIGJsb2NrIHNpemUgaXMgYSBwb3dlciBvZiAyIGluICpjcnlwdFVwZGF0 ZSAqLworIAlPUEVOU1NMX2Fzc2VydChjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZSA9PSAxCisgCSAg ICB8fCBjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZSA9PSA4CitAQCAtMjQ5LDYgKzI5MCwyMiBAQCBz a2lwX3RvX2luaXQ6CisgCQl9CisgCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCS8qIEFm dGVyICdrZXknIGlzIHNldCBubyBmdXJ0aGVyIHBhcmFtZXRlcnMgY2hhbmdlcyBhcmUgcGVybWlz c2libGUuCisrCSAqIFNvIG9ubHkgY2hlY2sgZm9yIG5vbiBGSVBTIGVuYWJsaW5nIGF0IHRoaXMg cG9pbnQuCisrCSAqLworKwlpZiAoa2V5ICYmIEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYgKCEo Y3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19GSVBTKQorKwkJCSYgIShjdHgtPmZs YWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykpCisrCQkJeworKwkJCUVWUGVycihF VlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOworKwkJCWN0 eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7CisrCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKyNl bmRpZgorKworIAlpZihrZXkgfHwgKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0FMV0FZ U19DQUxMX0lOSVQpKSB7CisgCQlpZighY3R4LT5jaXBoZXItPmluaXQoY3R4LGtleSxpdixlbmMp KSByZXR1cm4gMDsKKyAJfQorQEAgLTU2OCw3ICs2MjUsNiBAQCB2b2lkIEVWUF9DSVBIRVJfQ1RY X2ZyZWUoRVZQX0NJUEhFUl9DVFgKKyAKKyBpbnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51cChFVlBf Q0lQSEVSX0NUWCAqYykKKyAJeworLSNpZm5kZWYgT1BFTlNTTF9GSVBTCisgCWlmIChjLT5jaXBo ZXIgIT0gTlVMTCkKKyAJCXsKKyAJCWlmKGMtPmNpcGhlci0+Y2xlYW51cCAmJiAhYy0+Y2lwaGVy LT5jbGVhbnVwKGMpKQorQEAgLTU3OSwxNiArNjM1LDEyIEBAIGludCBFVlBfQ0lQSEVSX0NUWF9j bGVhbnVwKEVWUF9DSVBIRVJfQ1QKKyAJCX0KKyAJaWYgKGMtPmNpcGhlcl9kYXRhKQorIAkJT1BF TlNTTF9mcmVlKGMtPmNpcGhlcl9kYXRhKTsKKy0jZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9f RU5HSU5FCisgCWlmIChjLT5lbmdpbmUpCisgCQkvKiBUaGUgRVZQX0NJUEhFUiB3ZSB1c2VkIGJl bG9uZ3MgdG8gYW4gRU5HSU5FLCByZWxlYXNlIHRoZQorIAkJICogZnVuY3Rpb25hbCByZWZlcmVu Y2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFzb24uICovCisgCQlFTkdJTkVfZmluaXNoKGMtPmVuZ2lu ZSk7CisgI2VuZGlmCistI2lmZGVmIE9QRU5TU0xfRklQUworLQlGSVBTX2NpcGhlcl9jdHhfY2xl YW51cChjKTsKKy0jZW5kaWYKKyAJbWVtc2V0KGMsMCxzaXplb2YoRVZQX0NJUEhFUl9DVFgpKTsK KyAJcmV0dXJuIDE7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZXZw LmguZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL2V2cC5oCistLS0gb3BlbnNzbC0xLjAu MWIvY3J5cHRvL2V2cC9ldnAuaC5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuMTI4NzYzMzU3ICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9ldnAuaAkyMDEyLTA0LTI2IDE4OjAw OjUxLjM5NDc2OTE2OCArMDIwMAorQEAgLTc1LDYgKzc1LDEwIEBACisgI2luY2x1ZGUgPG9wZW5z c2wvYmlvLmg+CisgI2VuZGlmCisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAvKgorICNkZWZpbmUgRVZQX1JDMl9LRVlfU0la RQkJMTYKKyAjZGVmaW5lIEVWUF9SQzRfS0VZX1NJWkUJCTE2CitAQCAtMjcyLDEwICsyNzYsNiBA QCBzdHJ1Y3QgZW52X21kX2N0eF9zdAorIAkJCQkJCSogY2xlYW5lZCAqLworICNkZWZpbmUgRVZQ X01EX0NUWF9GTEFHX1JFVVNFCQkweDAwMDQgLyogRG9uJ3QgZnJlZSB1cCBjdHgtPm1kX2RhdGEK KyAJCQkJCQkqIGluIEVWUF9NRF9DVFhfY2xlYW51cCAqLworLS8qIEZJUFMgYW5kIHBhZCBvcHRp b25zIGFyZSBpZ25vcmVkIGluIDEuMC4wLCBkZWZpbml0aW9ucyBhcmUgaGVyZQorLSAqIHNvIHdl IGRvbid0IGFjY2lkZW50YWxseSByZXVzZSB0aGUgdmFsdWVzIGZvciBvdGhlciBwdXJwb3Nlcy4K Ky0gKi8KKy0KKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVwkweDAwMDgJ LyogQWxsb3cgdXNlIG9mIG5vbiBGSVBTIGRpZ2VzdAorIAkJCQkJCSAqIGluIEZJUFMgbW9kZSAq LworIAorQEAgLTI4Nyw2ICsyODcsMTAgQEAgc3RydWN0IGVudl9tZF9jdHhfc3QKKyAjZGVmaW5l IEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEJMHgwMAkvKiBQS0NTIzEgdjEuNSBtb2RlICovCisg I2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEJMHgxMAkvKiBYOS4zMSBtb2RlICovCisg I2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUwkJMHgyMAkvKiBQU1MgbW9kZSAqLworKyNk ZWZpbmUgTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KSBcCisrCQkoKGN0eC0+ZmxhZ3M+ PjE2KSAmMHhGRkZGKSAvKiBzZWVkIGxlbmd0aCAqLworKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFH X1BTU19NRExFTgkweEZGRkYJLyogc2FsdCBsZW4gc2FtZSBhcyBkaWdlc3QgKi8KKysjZGVmaW5l IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQwkweEZGRkUJLyogc2FsdCBtYXggb3IgYXV0byByZWNv dmVyZWQgKi8KKyAKKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT19JTklUCQkweDAxMDAgLyog RG9uJ3QgaW5pdGlhbGl6ZSBtZF9kYXRhICovCisgCitAQCAtMzM4LDE1ICszNDIsMTUgQEAgc3Ry dWN0IGV2cF9jaXBoZXJfc3QKKyAvKiBjaXBoZXIgaGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRp b24gKi8KKyAjZGVmaW5lIAlFVlBfQ0lQSF9SQU5EX0tFWQkJMHgyMDAKKyAvKiBjaXBoZXIgaGFz IGl0cyBvd24gYWRkaXRpb25hbCBjb3B5aW5nIGxvZ2ljICovCistI2RlZmluZSAJRVZQX0NJUEhf Q1VTVE9NX0NPUFkJCTB4NDAwCisrI2RlZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAw MAorIC8qIEFsbG93IHVzZSBkZWZhdWx0IEFTTjEgZ2V0L3NldCBpdiAqLworICNkZWZpbmUJCUVW UF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xCTB4MTAwMAorIC8qIEJ1ZmZlciBsZW5ndGggaW4gYml0 cyBub3QgYnl0ZXM6IENGQjEgbW9kZSBvbmx5ICovCisgI2RlZmluZQkJRVZQX0NJUEhfRkxBR19M RU5HVEhfQklUUwkweDIwMDAKKyAvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBt b2RlICovCistI2RlZmluZQkJRVZQX0NJUEhfRkxBR19GSVBTCQkweDQwMDAKKysjZGVmaW5lCQlF VlBfQ0lQSF9GTEFHX0ZJUFMJCTB4NDAwCisgLyogQWxsb3cgbm9uIEZJUFMgY2lwaGVyIGluIEZJ UFMgbW9kZSAqLworLSNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHg4MDAw CisrI2RlZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgwMAorIC8qIENpcGhl ciBoYW5kbGVzIGFueSBhbmQgYWxsIHBhZGRpbmcgbG9naWMgYXMgd2VsbAorICAqIGFzIGZpbmFs aXNhdGlvbi4KKyAgKi8KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvZXZwX2xp Yi5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9ldnBfbGliLmMKKy0tLSBvcGVuc3Ns LTEuMC4xYi9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBzCTIwMTEtMDUtMjkgMDQ6MzI6MDUuMDAw MDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9ldnBfbGliLmMJMjAx Mi0wNC0yNiAxODowMDo1MS4zOTQ3NjkxNjggKzAyMDAKK0BAIC0xOTAsNiArMTkwLDkgQEAgaW50 IEVWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemUoY29uc3QgRVZQXworIAorIGludCBFVlBfQ2lwaGVy KEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQg Y2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJcmV0dXJuIGN0eC0+Y2lwaGVyLT5k b19jaXBoZXIoY3R4LG91dCxpbixpbmwpOworIAl9CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL2V2 cF9sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcwky MDEyLTA0LTI2IDE4OjAwOjUxLjExODc2MzEzOCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9ldnAvZXZwX2xvY2wuaAkyMDEyLTA0LTI2IDE4OjAwOjUxLjM5NTc2OTE5MCArMDIwMAor QEAgLTI1OCwxMCArMjU4LDkgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQXyMjY25hbWUjI19lY2Io dm9pZAorIAlCTE9DS19DSVBIRVJfZnVuY19jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGNwcmVmaXgs Y2JpdHMsa3N0cnVjdCxrc2NoZWQpIFwKKyAJQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNf IyNrZXlzaXplLGtzdHJ1Y3QsIFwKKyAJCQkgICAgIE5JRF8jI2NpcGhlciMjXyMja2V5c2l6ZSwg a2V5c2l6ZS84LCBpdl9sZW4sIGNiaXRzLCBcCistCQkJICAgICAwLCBjaXBoZXIjI19pbml0X2tl eSwgTlVMTCwgXAorLQkJCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAorLQkJCSAgICAg RVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwgXAorLQkJCSAgICAgTlVMTCkKKysJCQkgICAgIEVWUF9D SVBIX0ZMQUdfREVGQVVMVF9BU04xLCBcCisrCQkJICAgICBjaXBoZXIjI19pbml0X2tleSwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCkKKysKKyAKKyBzdHJ1Y3QgZXZwX3BrZXlfY3R4X3N0CisgCXsK K0BAIC0zNjcsMTEgKzM2Niw2IEBAIGludCBQS0NTNV92Ml9QQktERjJfa2V5aXZnZW4oRVZQX0NJ UEhFUl8KKyAjZGVmaW5lIE1EMl9Jbml0CXByaXZhdGVfTUQyX0luaXQKKyAjZGVmaW5lIE1EQzJf SW5pdAlwcml2YXRlX01EQzJfSW5pdAorICNkZWZpbmUgU0hBX0luaXQJcHJpdmF0ZV9TSEFfSW5p dAorLSNkZWZpbmUgU0hBMV9Jbml0CXByaXZhdGVfU0hBMV9Jbml0CistI2RlZmluZSBTSEEyMjRf SW5pdAlwcml2YXRlX1NIQTIyNF9Jbml0CistI2RlZmluZSBTSEEyNTZfSW5pdAlwcml2YXRlX1NI QTI1Nl9Jbml0CistI2RlZmluZSBTSEEzODRfSW5pdAlwcml2YXRlX1NIQTM4NF9Jbml0CistI2Rl ZmluZSBTSEE1MTJfSW5pdAlwcml2YXRlX1NIQTUxMl9Jbml0CisgCisgI2RlZmluZSBCRl9zZXRf a2V5CXByaXZhdGVfQkZfc2V0X2tleQorICNkZWZpbmUgQ0FTVF9zZXRfa2V5CXByaXZhdGVfQ0FT VF9zZXRfa2V5CitAQCAtMzc5LDcgKzM3Myw2IEBAIGludCBQS0NTNV92Ml9QQktERjJfa2V5aXZn ZW4oRVZQX0NJUEhFUl8KKyAjZGVmaW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0X2tl eQorICNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQorICNkZWZpbmUgUkM0 X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tleQorLSNkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVj a2VkCXByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkCisgI2RlZmluZSBDYW1lbGxpYV9zZXRf a2V5CXByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleQorIAorICNlbmRpZgorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWIvY3J5cHRvL2V2cC9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9l dnAvTWFrZWZpbGUKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL01ha2VmaWxlLmZpcHMJ MjAxMi0wNC0yNiAxMjo0MjoxOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vZXZwL01ha2VmaWxlCTIwMTItMDQtMjYgMTg6MDA6NTEuMzk1NzY5MTkwICswMjAwCitA QCAtMjgsNyArMjgsNyBAQCBMSUJTUkM9IGVuY29kZS5jIGRpZ2VzdC5jIGV2cF9lbmMuYyBldnBf CisgCWJpb19tZC5jIGJpb19iNjQuYyBiaW9fZW5jLmMgZXZwX2Vyci5jIGVfbnVsbC5jIFwKKyAJ Y19hbGwuYyBjX2FsbGMuYyBjX2FsbGQuYyBldnBfbGliLmMgYmlvX29rLmMgXAorIAlldnBfcGtl eS5jIGV2cF9wYmUuYyBwNV9jcnB0LmMgcDVfY3JwdDIuYyBcCistCWVfb2xkLmMgcG1ldGhfbGli LmMgcG1ldGhfZm4uYyBwbWV0aF9nbi5jIG1fc2lndmVyLmMgZXZwX2ZpcHMuYwlcCisrCWVfb2xk LmMgcG1ldGhfbGliLmMgcG1ldGhfZm4uYyBwbWV0aF9nbi5jIG1fc2lndmVyLmMgXAorIAllX2Fl c19jYmNfaG1hY19zaGExLmMgZV9yYzRfaG1hY19tZDUuYworIAorIExJQk9CSj0JZW5jb2RlLm8g ZGlnZXN0Lm8gZXZwX2VuYy5vIGV2cF9rZXkubyBldnBfYWNuZi5vIFwKK0BAIC00MSw3ICs0MSw3 IEBAIExJQk9CSj0JZW5jb2RlLm8gZGlnZXN0Lm8gZXZwX2VuYy5vIGV2cF8KKyAJYmlvX21kLm8g YmlvX2I2NC5vIGJpb19lbmMubyBldnBfZXJyLm8gZV9udWxsLm8gXAorIAljX2FsbC5vIGNfYWxs Yy5vIGNfYWxsZC5vIGV2cF9saWIubyBiaW9fb2subyBcCisgCWV2cF9wa2V5Lm8gZXZwX3BiZS5v IHA1X2NycHQubyBwNV9jcnB0Mi5vIFwKKy0JZV9vbGQubyBwbWV0aF9saWIubyBwbWV0aF9mbi5v IHBtZXRoX2duLm8gbV9zaWd2ZXIubyBldnBfZmlwcy5vIFwKKysJZV9vbGQubyBwbWV0aF9saWIu byBwbWV0aF9mbi5vIHBtZXRoX2duLm8gbV9zaWd2ZXIubyBcCisgCWVfYWVzX2NiY19obWFjX3No YTEubyBlX3JjNF9obWFjX21kNS5vCisgCisgU1JDPSAkKExJQlNSQykKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9ldnAvbV9kc3MxLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v ZXZwL21fZHNzMS5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBz CTIwMTEtMDYtMDEgMTc6MTE6MDAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2V2cC9tX2RzczEuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM5Njc2OTIxMiArMDIwMAor QEAgLTY4LDggKzY4LDYgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKyAjZW5kaWYKKyAK Ky0jaWZuZGVmIE9QRU5TU0xfRklQUyAKKy0KKyBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAq Y3R4KQorIAl7IHJldHVybiBTSEExX0luaXQoY3R4LT5tZF9kYXRhKTsgfQorIAorQEAgLTg0LDcg KzgyLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc3MxX21kPQorIAlOSURfZHNhLAorIAlOSURf ZHNhV2l0aFNIQTEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX0RJ R0VTVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01EX0ZMQUdfRklQUywKKyAJaW5p dCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK0BAIC0xMDAsNCArOTgsMyBAQCBjb25zdCBFVlBfTUQg KkVWUF9kc3MxKHZvaWQpCisgCXJldHVybigmZHNzMV9tZCk7CisgCX0KKyAjZW5kaWYKKy0jZW5k aWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9ldnAvbV9kc3MuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9l dnAvbV9kc3MuYy5maXBzCTIwMTEtMDYtMDEgMTc6MTE6MDAuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9tX2Rzcy5jCTIwMTItMDQtMjYgMTg6MDA6NTEuMzk2 NzY5MjEyICswMjAwCitAQCAtNjYsNyArNjYsNiBAQAorICNlbmRpZgorIAorICNpZm5kZWYgT1BF TlNTTF9OT19TSEEKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworIAorIHN0YXRpYyBpbnQgaW5pdChF VlBfTURfQ1RYICpjdHgpCisgCXsgcmV0dXJuIFNIQTFfSW5pdChjdHgtPm1kX2RhdGEpOyB9CitA QCAtODIsNyArODEsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIGRzYV9tZD0KKyAJTklEX2RzYVdp dGhTSEEsCisgCU5JRF9kc2FXaXRoU0hBLAorIAlTSEFfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01E X0ZMQUdfUEtFWV9ESUdFU1QsCisrCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFH X0ZJUFMsCisgCWluaXQsCisgCXVwZGF0ZSwKKyAJZmluYWwsCitAQCAtOTgsNCArOTcsMyBAQCBj b25zdCBFVlBfTUQgKkVWUF9kc3Modm9pZCkKKyAJcmV0dXJuKCZkc2FfbWQpOworIAl9CisgI2Vu ZGlmCistI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL21fbWQyLmMu ZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL21fbWQyLmMKKy0tLSBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcwkyMDA1LTA3LTE2IDE0OjM3OjMyLjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvbV9tZDIuYwkyMDEyLTA0LTI2IDE4 OjAwOjUxLjM5Njc2OTIxMiArMDIwMAorQEAgLTY4LDYgKzY4LDcgQEAKKyAjaWZuZGVmIE9QRU5T U0xfTk9fUlNBCisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2VuZGlmCisrI2luY2x1ZGUg ImV2cF9sb2NsLmgiCisgCisgc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKKyAJeyBy ZXR1cm4gTUQyX0luaXQoY3R4LT5tZF9kYXRhKTsgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2V2cC9tX3NoYTEuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvbV9zaGEx LmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAxMS0wNS0y OSAwMTowMToyNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZw L21fc2hhMS5jCTIwMTItMDQtMjYgMTg6MDA6NTEuMzk2NzY5MjEyICswMjAwCitAQCAtNTksOCAr NTksNiBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlICJjcnlwdGxpYi5oIgorIAor LSNpZm5kZWYgT1BFTlNTTF9GSVBTCistCisgI2lmbmRlZiBPUEVOU1NMX05PX1NIQQorIAorICNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorQEAgLTg1LDcgKzgzLDggQEAgc3RhdGljIGNvbnN0IEVW UF9NRCBzaGExX21kPQorIAlOSURfc2hhMSwKKyAJTklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwK KyAJU0hBX0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVS RXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9E X1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19G SVBTLAorIAlpbml0LAorIAl1cGRhdGUsCisgCWZpbmFsLAorQEAgLTEyMiw3ICsxMjEsOCBAQCBz dGF0aWMgY29uc3QgRVZQX01EIHNoYTIyNF9tZD0KKyAJTklEX3NoYTIyNCwKKyAJTklEX3NoYTIy NFdpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEEyMjRfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZM QUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJ RVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FC U0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQyMjQsCisgCXVwZGF0ZTI1NiwKKyAJ ZmluYWwyNTYsCitAQCAtMTQxLDcgKzE0MSw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjU2 X21kPQorIAlOSURfc2hhMjU2LAorIAlOSURfc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24sCisgCVNI QTI1Nl9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8 RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9T SUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQ UywKKyAJaW5pdDI1NiwKKyAJdXBkYXRlMjU2LAorIAlmaW5hbDI1NiwKK0BAIC0xNzIsNyArMTcz LDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEzODRfbWQ9CisgCU5JRF9zaGEzODQsCisgCU5J RF9zaGEzODRXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBMzg0X0RJR0VTVF9MRU5HVEgsCistCUVW UF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNF TlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdB TEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0Mzg0LAorIAl1cGRhdGU1 MTIsCisgCWZpbmFsNTEyLAorQEAgLTE5MSw3ICsxOTMsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01E IHNoYTUxMl9tZD0KKyAJTklEX3NoYTUxMiwKKyAJTklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9u LAorIAlTSEE1MTJfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lH TkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9N RVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9G TEFHX0ZJUFMsCisgCWluaXQ1MTIsCisgCXVwZGF0ZTUxMiwKKyAJZmluYWw1MTIsCitAQCAtMjA2 LDQgKzIwOSwzIEBAIGNvbnN0IEVWUF9NRCAqRVZQX3NoYTUxMih2b2lkKQorIAl7IHJldHVybigm c2hhNTEyX21kKTsgfQorICNlbmRpZgkvKiBpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIgKi8KKyAK Ky0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvcF9zaWduLmMuZmlw cyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZXZwL3Bfc2lnbi5jCistLS0gb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzCTIwMTEtMDYtMDkgMTg6MDI6MzkuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9wX3NpZ24uYwkyMDEyLTA0LTI2IDE4 OjAwOjUxLjM5Njc2OTIxMiArMDIwMAorQEAgLTYxLDYgKzYxLDcgQEAKKyAjaW5jbHVkZSA8b3Bl bnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisgI2luY2x1ZGUgPG9w ZW5zc2wveDUwOS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorIAorICNpZmRlZiB1bmRl ZgorIHZvaWQgRVZQX1NpZ25Jbml0KEVWUF9NRF9DVFggKmN0eCwgRVZQX01EICp0eXBlKQorQEAg LTEwMyw2ICsxMDQsMjIgQEAgaW50IEVWUF9TaWduRmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnNp ZworIAkJCWdvdG8gZXJyOworIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBr Y3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKKyAJCQlnb3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdz ICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQorKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3Jz YV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsK KysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCisrCQkJeworKwkJ CWludCBzYWx0bGVuOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4 LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJCXNhbHRs ZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOworKwkJCWlmIChzYWx0bGVuID09 IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCisrCQkJCXNhbHRsZW4gPSAtMTsKKysJCQllbHNl IGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKKysJCQkJc2FsdGxlbiA9 IC0yOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2Fs dGxlbikgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJfQorIAkJaWYgKEVWUF9QS0VZX3NpZ24o cGtjdHgsIHNpZ3JldCwgJnNsdG1wLCBtLCBtX2xlbikgPD0gMCkKKyAJCQlnb3RvIGVycjsKKyAJ CSpzaWdsZW4gPSBzbHRtcDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvcF92 ZXJpZnkuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvcF92ZXJpZnkuYworLS0tIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzCTIwMTEtMDYtMDkgMTg6MDI6 MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2V2cC9wX3Zlcmlm eS5jCTIwMTItMDQtMjYgMTg6MDA6NTEuMzk2NzY5MjEyICswMjAwCitAQCAtNjEsNiArNjEsNyBA QAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMu aD4KKyAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ CisgCisgaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKnNpZ2J1ZiwKKyAJICAgICB1bnNpZ25lZCBpbnQgc2lnbGVuLCBFVlBfUEtFWSAqcGtl eSkKK0BAIC04OCw2ICs4OSwyMiBAQCBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0 eCwgY29uCisgCQkJZ290byBlcnI7CisgCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVf bWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQorIAkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCisrCQkJaWYgKEVWUF9QS0VZX0NUWF9z ZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8g ZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKKysJCQl7 CisrCQkJaW50IHNhbHRsZW47CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmco cGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJ c2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7CisrCQkJaWYgKHNhbHRs ZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKKysJCQkJc2FsdGxlbiA9IC0xOworKwkJ CWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQorKwkJCQlzYWx0 bGVuID0gLTI7CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4 LCBzYWx0bGVuKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCQl9CisgCQlpID0gRVZQX1BLRVlf dmVyaWZ5KHBrY3R4LCBzaWdidWYsIHNpZ2xlbiwgbSwgbV9sZW4pOworIAkJZXJyOgorIAkJRVZQ X1BLRVlfQ1RYX2ZyZWUocGtjdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2Flc2F2cy5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2Flc2F2cy5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTc3NjkyMzQgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMJMjAxMi0wNC0yNiAx ODowMDo1MS4zOTc3NjkyMzQgKzAyMDAKK0BAIC0wLDAgKzEsOTM5IEBACisrLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUg bWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisr ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29y ZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisr ICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisr ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorKyAqCisrICovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKysgIE5JU1QgQUVTIEFsZ29yaXRobSBWYWxpZGF0aW9uIFN1aXRlCisrICBUZXN0IFBy b2dyYW0KKysKKysgIERvbmF0ZWQgdG8gT3BlblNTTCBieToKKysgIFYtT05FIENvcnBvcmF0aW9u CisrICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMwMAorKyAgR2VybWFudG93biwgTUQgMjA4 NzQKKysgIFUuUy5BLgorKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8YXNz ZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYg T1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7Cisr ICAgIHByaW50ZigiTm8gRklQUyBBRVMgc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9 CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZp cHNfdXRsLmgiCisrCisrI2RlZmluZSBBRVNfQkxPQ0tfU0laRSAxNgorKworKyNkZWZpbmUgVkVS Qk9TRSAwCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovCisrCisraW50IEFFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKKysJICAgIGNoYXIg KmFtb2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKKysJICAgIHVuc2lnbmVk IGNoYXIgKmlWZWMsIAorKwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLworKwkgICAgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LCB1bnNpZ25lZCBjaGFyICpjaXBo ZXJ0ZXh0LCBpbnQgbGVuKQorKyAgICB7CisrICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9 IE5VTEw7CisrCisrICAgIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0JDIikgPT0gMCkKKysJewor Kwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Fl c18xMjhfY2JjKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQ X2Flc18xOTJfY2JjKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0g RVZQX2Flc18yNTZfY2JjKCk7CisrCQlicmVhazsKKysJCX0KKysKKysJfQorKyAgICBlbHNlIGlm IChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikK KysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfZWNiKCk7CisrCQli cmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfZWNiKCk7Cisr CQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfZWNiKCk7 CisrCQlicmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAi Q0ZCMTI4IikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4 OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMTI4KCk7CisrCQlicmVhazsKKysKKysJCWNh c2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiMTI4KCk7CisrCQlicmVhazsKKysK KysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiMTI4KCk7CisrCQlicmVh azsKKysJCX0KKysKKysJfQorKyAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChhbW9kZSwgIk9GQiIs IDMpID09IDApCisrCXsKKysJc3dpdGNoIChha2V5c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJ CWNpcGhlciA9IEVWUF9hZXNfMTI4X29mYigpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoK KysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX29mYigpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1 NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X29mYigpOworKwkJYnJlYWs7CisrCQl9CisrCX0K KysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwl7CisrCXN3aXRjaCAo YWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIx KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJf Y2ZiMSgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNf MjU2X2NmYjEoKTsKKysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UgaWYoIXN0cmNhc2Vj bXAoYW1vZGUsIkNGQjgiKSkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2Ug MTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiOCgpOworKwkJYnJlYWs7CisrCisrCQlj YXNlIDE5MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjgoKTsKKysJCWJyZWFrOworKwor KwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmI4KCk7CisrCQlicmVhazsK KysJCX0KKysJfQorKyAgICBlbHNlCisrCXsKKysJcHJpbnRmKCJVbmtub3duIG1vZGU6ICVzXG4i LCBhbW9kZSk7CisrCXJldHVybiAwOworKwl9CisrICAgIGlmICghY2lwaGVyKQorKwl7CisrCXBy aW50ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlzeik7CisrCXJldHVybiAwOyAKKysJ fQorKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlW ZWMsIGRpcikgPD0gMCkKKysJcmV0dXJuIDA7CisrICAgIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJD RkIxIikpCisrCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwgRVZQX0NJUEhfRkxBR19M RU5HVEhfQklUUyk7CisrICAgIGlmIChkaXIpCisrCQlFVlBfQ2lwaGVyKGN0eCwgY2lwaGVydGV4 dCwgcGxhaW50ZXh0LCBsZW4pOworKwllbHNlCisrCQlFVlBfQ2lwaGVyKGN0eCwgcGxhaW50ZXh0 LCBjaXBoZXJ0ZXh0LCBsZW4pOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2NoYXIgKnRfdGFn WzJdID0geyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9OworK2NoYXIgKnRfbW9kZVs2XSA9IHsi Q0JDIiwiRUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkIxMjgifTsKKytlbnVtIE1vZGUge0NC QywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENGQjEyOH07CisrZW51bSBYQ3J5cHQge1hERUNSWVBU LCBYRU5DUllQVH07CisrCisrLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisrLyog IE1vbnRlIENhcmxvIFRlc3RzICAgICAgICAgICovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCisrCisrLyojZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIpLzhdID4+ICgoYiklOCkp JjEpKi8KKysvKiNkZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8 PCAoKGIpJTgpKSl8KCEhKHYpIDw8ICgoYiklOCkpKSovCisrCisrI2RlZmluZSBnYihhLGIpICgo KGEpWyhiKS84XSA+PiAoNy0oYiklOCkpJjEpCisrI2RlZmluZSBzYihhLGIsdikgKChhKVsoYikv OF09KChhKVsoYikvOF0mfigxIDw8ICg3LShiKSU4KSkpfCghISh2KSA8PCAoNy0oYiklOCkpKQor KworK2ludCBkb19tY3QoY2hhciAqYW1vZGUsIAorKwkgICBpbnQgYWtleXN6LCB1bnNpZ25lZCBj aGFyICphS2V5LHVuc2lnbmVkIGNoYXIgKmlWZWMsCisrCSAgIGludCBkaXIsIHVuc2lnbmVkIGNo YXIgKnRleHQsIGludCBsZW4sCisrCSAgIEZJTEUgKnJmcCkKKysgICAgeworKyAgICBpbnQgcmV0 ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbMTAxXVszMl07CisrICAgIHVuc2lnbmVkIGNo YXIgaXZbMTAxXVtBRVNfQkxPQ0tfU0laRV07CisrICAgIHVuc2lnbmVkIGNoYXIgcHRleHRbMTAw MV1bMzJdOworKyAgICB1bnNpZ25lZCBjaGFyIGN0ZXh0WzEwMDFdWzMyXTsKKysgICAgdW5zaWdu ZWQgY2hhciBjaXBoZXJ0ZXh0WzY0KzRdOworKyAgICBpbnQgaSwgaiwgbiwgbjEsIG4yOworKyAg ICBpbnQgaW1vZGUgPSAwLCBua2V5c3ogPSBha2V5c3ovODsKKysgICAgRVZQX0NJUEhFUl9DVFgg Y3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAobGVuID4g MzIpCisrCXsKKysJcHJpbnRmKCJcbj4+Pj4gTGVuZ3RoIGV4Y2VlZHMgMzIgZm9yICVzICVkIDw8 PDxcblxuIiwgCisrCSAgICAgICBhbW9kZSwgYWtleXN6KTsKKysJcmV0dXJuIC0xOworKwl9Cisr ICAgIGZvciAoaW1vZGUgPSAwOyBpbW9kZSA8IDY7ICsraW1vZGUpCisrCWlmIChzdHJjbXAoYW1v ZGUsIHRfbW9kZVtpbW9kZV0pID09IDApCisrCSAgICBicmVhazsKKysgICAgaWYgKGltb2RlID09 IDYpCisrCXsgCisrCXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7Cisr CXJldHVybiAtMTsKKysJfQorKworKyAgICBtZW1jcHkoa2V5WzBdLCBhS2V5LCBua2V5c3opOwor KyAgICBpZiAoaVZlYykKKysJbWVtY3B5KGl2WzBdLCBpVmVjLCBBRVNfQkxPQ0tfU0laRSk7Cisr ICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCW1lbWNweShwdGV4dFswXSwgdGV4dCwgbGVuKTsK KysgICAgZWxzZQorKwltZW1jcHkoY3RleHRbMF0sIHRleHQsIGxlbik7CisrICAgIGZvciAoaSA9 IDA7IGkgPCAxMDA7ICsraSkKKysJeworKwkvKiBwcmludGYoIkl0ZXJhdGlvbiAlZFxuIiwgaSk7 ICovCisrCWlmIChpID4gMCkKKysJICAgIHsKKysJICAgIGZwcmludGYocmZwLCJDT1VOVCA9ICVk XG4iLGkpOworKwkgICAgT3V0cHV0VmFsdWUoIktFWSIsa2V5W2ldLG5rZXlzeixyZnAsMCk7Cisr CSAgICBpZiAoaW1vZGUgIT0gRUNCKSAgLyogRUNCICovCisrCQlPdXRwdXRWYWx1ZSgiSVYiLGl2 W2ldLEFFU19CTE9DS19TSVpFLHJmcCwwKTsKKysJICAgIC8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwg UGxhaW50ZXh0ICovCisrCSAgICBPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sZGlyID8gcHRleHRb MF0gOiBjdGV4dFswXSxsZW4scmZwLAorKwkJCWltb2RlID09IENGQjEpOworKwkgICAgfQorKwlm b3IgKGogPSAwOyBqIDwgMTAwMDsgKytqKQorKwkgICAgeworKwkgICAgc3dpdGNoIChpbW9kZSkK KysJCXsKKysJICAgIGNhc2UgRUNCOgorKwkJaWYgKGogPT0gMCkKKysJCSAgICB7IC8qIHNldCB1 cCBlbmNyeXB0aW9uICovCisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6 LCBrZXlbaV0sIE5VTEwsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLworKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICBpZiAoZGlyID09 IFhFTkNSWVBUKQorKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAg ICBlbHNlCisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0K KysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQl7Cisr CQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkJbWVtY3B5 KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOworKwkJCX0KKysJCSAgICBlbHNlCisrCQkJewor KwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNw eShjdGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsKKysJCQl9CisrCQkgICAgfQorKwkJYnJlYWs7 CisrCisrCSAgICBjYXNlIENCQzoKKysJICAgIGNhc2UgT0ZCOiAgCisrCSAgICBjYXNlIENGQjEy ODoKKysJCWlmIChqID09IDApCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwg YW1vZGUsIGFrZXlzeiwga2V5W2ldLCBpdltpXSwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5 cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJ ICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGl2W2ldLCBs ZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgaXZbaV0sIGxlbik7Cisr CQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQor KwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJ CQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbai0xXSwgbGVuKTsKKysJCQl9CisrCQkgICAgZWxz ZQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsK KysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0xXSwgbGVuKTsKKysJCQl9CisrCQkgICAg fQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENGQjg6CisrCQlpZiAoaiA9PSAwKQorKwkJICAg IHsKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZb aV0sIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkg IHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgewor KwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtq XSwgcHRleHRbal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRl eHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWlmIChkaXIgPT0gWEVOQ1JZUFQp CisrCQkgICAgeworKwkJICAgIGlmIChqIDwgMTYpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sICZp dltpXVtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0 W2otMTZdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGog PCAxNikKKysJCQltZW1jcHkoY3RleHRbaisxXSwgJml2W2ldW2pdLCBsZW4pOworKwkJICAgIGVs c2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0xNl0sIGxlbik7CisrCQkgICAgfQor KwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENGQjE6CisrCQlpZihqID09IDApCisrCQkgICAgewor KyNpZiAwCisrCQkgICAgLyogY29tcGVuc2F0ZSBmb3Igd3JvbmcgZW5kaWFubmVzcyBvZiBpbnB1 dCBmaWxlICovCisrCQkgICAgaWYoaSA9PSAwKQorKwkJCXB0ZXh0WzBdWzBdPDw9NzsKKysjZW5k aWYKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsYW1vZGUsYWtleXN6LGtleVtpXSxpdltpXSxk aXIsCisrCQkJCXB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisr CQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJRVZQX0NpcGhlcigmY3R4 LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCUVWUF9DaXBoZXIo JmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKworKwkJICAgIH0KKysJCWlmKGRpciA9 PSBYRU5DUllQVCkKKysJCSAgICB7CisrCQkgICAgaWYoaiA8IDEyOCkKKysJCQlzYihwdGV4dFtq KzFdLDAsZ2IoaXZbaV0saikpOworKwkJICAgIGVsc2UKKysJCQlzYihwdGV4dFtqKzFdLDAsZ2Io Y3RleHRbai0xMjhdLDApKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlm KGogPCAxMjgpCisrCQkJc2IoY3RleHRbaisxXSwwLGdiKGl2W2ldLGopKTsKKysJCSAgICBlbHNl CisrCQkJc2IoY3RleHRbaisxXSwwLGdiKHB0ZXh0W2otMTI4XSwwKSk7CisrCQkgICAgfQorKwkJ YnJlYWs7CisrCQl9CisrCSAgICB9CisrCS0tajsgLyogcmVzZXQgdG8gbGFzdCBvZiByYW5nZSAq LworKwkvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLworKwlPdXRwdXRWYWx1ZSh0 X3RhZ1tkaXJdLGRpciA/IGN0ZXh0W2pdIDogcHRleHRbal0sbGVuLHJmcCwKKysJCSAgICBpbW9k ZSA9PSBDRkIxKTsKKysJZnByaW50ZihyZnAsICJcbiIpOyAgLyogYWRkIHNlcGFyYXRvciAqLwor KworKwkvKiBDb21wdXRlIG5leHQgS0VZICovCisrCWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCSAg ICB7CisrCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKKysJCXsgLyogY3QgPSBDVFtqLTE1XSB8fCBD VFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KKysJCWZvciAobjEgPSAwLCBuMiA9IG5rZXlzei0x OyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKKysJCSAgICBjaXBoZXJ0ZXh0W24xXSA9IGN0ZXh0 W2otbjJdWzBdOworKwkJfQorKwkgICAgZWxzZSBpZihpbW9kZSA9PSBDRkIxKQorKwkJeworKwkJ Zm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1uMikKKysJCSAgICBz YihjaXBoZXJ0ZXh0LG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKKysJCX0KKysJICAgIGVsc2UKKysJ CXN3aXRjaCAoYWtleXN6KQorKwkJICAgIHsKKysJCWNhc2UgMTI4OgorKwkJICAgIG1lbWNweShj aXBoZXJ0ZXh0LCBjdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAxOTI6Cisr CQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0rOCwgOCk7CisrCQkgICAgbWVtY3B5 KGNpcGhlcnRleHQrOCwgY3RleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCWNhc2UgMjU2 OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqLTFdLCAxNik7CisrCQkgICAgbWVt Y3B5KGNpcGhlcnRleHQrMTYsIGN0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQkgICAg fQorKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKKysJ CXsgLyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KKysJCWZv ciAobjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKKysJCSAg ICBjaXBoZXJ0ZXh0W24xXSA9IHB0ZXh0W2otbjJdWzBdOworKwkJfQorKwkgICAgZWxzZSBpZihp bW9kZSA9PSBDRkIxKQorKwkJeworKwkJZm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlz eiA7ICsrbjEsLS1uMikKKysJCSAgICBzYihjaXBoZXJ0ZXh0LG4xLGdiKHB0ZXh0W2otbjJdLDAp KTsKKysJCX0KKysJICAgIGVsc2UKKysJCXN3aXRjaCAoYWtleXN6KQorKwkJICAgIHsKKysJCWNh c2UgMTI4OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqXSwgMTYpOworKwkJICAg IGJyZWFrOworKwkJY2FzZSAxOTI6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2ot MV0rOCwgOCk7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrOCwgcHRleHRbal0sIDE2KTsKKysJ CSAgICBicmVhazsKKysJCWNhc2UgMjU2OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4 dFtqLTFdLCAxNik7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrMTYsIHB0ZXh0W2pdLCAxNik7 CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkgICAgfQorKwkvKiBDb21wdXRlIG5leHQga2V5 OiBLZXlbaSsxXSA9IEtleVtpXSB4b3IgY3QgKi8KKysJZm9yIChuID0gMDsgbiA8IG5rZXlzejsg KytuKQorKwkgICAga2V5W2krMV1bbl0gPSBrZXlbaV1bbl0gXiBjaXBoZXJ0ZXh0W25dOworKwkK KysJLyogQ29tcHV0ZSBuZXh0IElWIGFuZCB0ZXh0ICovCisrCWlmIChkaXIgPT0gWEVOQ1JZUFQp CisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAgY2FzZSBFQ0I6Cisr CQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsK KysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6CisrCSAgICBjYXNlIENGQjEyODoKKysJ CW1lbWNweShpdltpKzFdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJbWVtY3B5KHB0 ZXh0WzBdLCBjdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNh c2UgQ0ZCODoKKysJCS8qIElWW2krMV0gPSBjdCAqLworKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7 IG4xIDwgMTY7ICsrbjEsIC0tbjIpCisrCQkgICAgaXZbaSsxXVtuMV0gPSBjdGV4dFtqLW4yXVsw XTsKKysJCXB0ZXh0WzBdWzBdID0gY3RleHRbai0xNl1bMF07CisrCQlicmVhazsKKysJICAgIGNh c2UgQ0ZCMToKKysJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQorKwkJ ICAgIHNiKGl2W2krMV0sbjEsZ2IoY3RleHRbai1uMl0sMCkpOworKwkJcHRleHRbMF1bMF09Y3Rl eHRbai0xMjhdWzBdJjB4ODA7CisrCQlicmVhazsKKysJCX0KKysJICAgIH0KKysJZWxzZQorKwkg ICAgeworKwkgICAgc3dpdGNoIChpbW9kZSkKKysJCXsKKysJICAgIGNhc2UgRUNCOgorKwkJbWVt Y3B5KGN0ZXh0WzBdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJYnJlYWs7CisrCSAg ICBjYXNlIENCQzoKKysJICAgIGNhc2UgT0ZCOgorKwkgICAgY2FzZSBDRkIxMjg6CisrCQltZW1j cHkoaXZbaSsxXSwgcHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsKKysJCW1lbWNweShjdGV4dFsw XSwgcHRleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENG Qjg6CisrCQlmb3IgKG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikKKysJCSAg ICBpdltpKzFdW24xXSA9IHB0ZXh0W2otbjJdWzBdOworKwkJY3RleHRbMF1bMF0gPSBwdGV4dFtq LTE2XVswXTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDRkIxOgorKwkJZm9yKG4xPTAsbjI9MTI3 IDsgbjEgPCAxMjggOyArK24xLC0tbjIpCisrCQkgICAgc2IoaXZbaSsxXSxuMSxnYihwdGV4dFtq LW4yXSwwKSk7CisrCQljdGV4dFswXVswXT1wdGV4dFtqLTEyOF1bMF0mMHg4MDsKKysJCWJyZWFr OworKwkJfQorKwkgICAgfQorKwl9CisrICAgIAorKyAgICByZXR1cm4gcmV0OworKyAgICB9Cisr CisrLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwor Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgIyBDb25maWcgaW5mbyBmb3Igdi1v bmUKKysgICMgQUVTVlMgTU1UIHRlc3QgZGF0YSBmb3IgRUNCCisrICAjIFN0YXRlIDogRW5jcnlw dCBhbmQgRGVjcnlwdAorKyAgIyBLZXkgTGVuZ3RoIDogMjU2CisrICAjIEZyaSBBdWcgMzAgMDQ6 MDc6MjIgUE0KKysgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK2ludCBwcm9j X2ZpbGUoY2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQorKyAgICB7CisrICAgIGNoYXIgYWZu WzI1Nl0sIHJmblsyNTZdOworKyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKKysg ICAgY2hhciBpYnVmWzIwNDhdOworKyAgICBjaGFyIHRidWZbMjA0OF07CisrICAgIGludCBpbGVu LCBsZW4sIHJldCA9IDA7CisrICAgIGNoYXIgYWxnb1s4XSA9ICIiOworKyAgICBjaGFyIGFtb2Rl WzhdID0gIiI7CisrICAgIGNoYXIgYXRlc3RbOF0gPSAiIjsKKysgICAgaW50IGFrZXlzeiA9IDA7 CisrICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOworKyAgICBpbnQgZGlyID0g LTEsIGVyciA9IDAsIHN0ZXAgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsyMDQ4 XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOworKyAgICBjaGFyICpycDsK KysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgp OworKworKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUpKQorKwl7CisrCXByaW50ZigiTm8g cmVxIGZpbGVcbiIpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgc3RyY3B5KGFmbiwgcnFmaWxl KTsKKysKKysgICAgaWYgKChhZnAgPSBmb3BlbihhZm4sICJyIikpID09IE5VTEwpCisrCXsKKysJ cHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgYWZuLCBzdHJl cnJvcihlcnJubykpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgaWYgKCFyc3BmaWxlKQorKwl7 CisrCXN0cmNweShyZm4sYWZuKTsKKysJcnA9c3Ryc3RyKHJmbiwicmVxLyIpOworKyNpZmRlZiBP UEVOU1NMX1NZU19XSU4zMgorKwlpZiAoIXJwKQorKwkgICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwi KTsKKysjZW5kaWYKKysJYXNzZXJ0KHJwKTsKKysJbWVtY3B5KHJwLCJyc3AiLDMpOworKwlycCA9 IHN0cnN0cihyZm4sICIucmVxIik7CisrCW1lbWNweShycCwgIi5yc3AiLCA0KTsKKysJcnNwZmls ZSA9IHJmbjsKKysJfQorKyAgICBpZiAoKHJmcCA9IGZvcGVuKHJzcGZpbGUsICJ3IikpID09IE5V TEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAg ICAgcmZuLCBzdHJlcnJvcihlcnJubykpOworKwlmY2xvc2UoYWZwKTsKKysJYWZwID0gTlVMTDsK KysJcmV0dXJuIC0xOworKwl9CisrICAgIHdoaWxlICghZXJyICYmIChmZ2V0cyhpYnVmLCBzaXpl b2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwpCisrCXsKKysJdGlkeV9saW5lKHRidWYsIGlidWYpOwor KwlpbGVuID0gc3RybGVuKGlidWYpOworKwkvKiAgICAgIHByaW50Zigic3RlcD0lZCBpYnVmPSVz IixzdGVwLGlidWYpOyAqLworKwlzd2l0Y2ggKHN0ZXApCisrCSAgICB7CisrCWNhc2UgMDogIC8q IHJlYWQgcHJlYW1ibGUgKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdcbicpCisrCQl7IC8qIGVu ZCBvZiBwcmVhbWJsZSAqLworKwkJaWYgKCgqYWxnbyA9PSAnXDAnKSB8fAorKwkJICAgICgqYW1v ZGUgPT0gJ1wwJykgfHwKKysJCSAgICAoYWtleXN6ID09IDApKQorKwkJICAgIHsKKysJCSAgICBw cmludGYoIk1pc3NpbmcgQWxnb3JpdGhtLCBNb2RlIG9yIEtleVNpemUgKCVzLyVzLyVkKVxuIiwK KysJCQkgICBhbGdvLGFtb2RlLGFrZXlzeik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9Cisr CQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgKysgc3Rl cDsKKysJCSAgICB9CisrCQl9CisrCSAgICBlbHNlIGlmIChpYnVmWzBdICE9ICcjJykKKysJCXsK KysJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7CisrCQllcnIg PSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeyAvKiBwcm9jZXNzIHByZWFtYmxlICovCisrCQlj aGFyICp4cCwgKnBwID0gaWJ1ZisyOworKwkJaW50IG47CisrCQlpZiAoYWtleXN6KQorKwkJICAg IHsgLyogaW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8KKysJCSAgICB0aW1lX3QgcnRpbSA9 IHRpbWUoMCk7CisrCQkgICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKKysJ CSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkg ICAgaWYgKHN0cm5jbXAocHAsICJBRVNWUyAiLCA2KSA9PSAwKQorKwkJCXsKKysJCQlzdHJjcHko YWxnbywgIkFFUyIpOworKwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KKysJCQlwcCArPSA2OworKwkJ CXhwID0gc3RyY2hyKHBwLCAnICcpOworKwkJCW4gPSB4cC1wcDsKKysJCQlzdHJuY3B5KGF0ZXN0 LCBwcCwgbik7CisrCQkJYXRlc3Rbbl0gPSAnXDAnOworKwkJCS8qIGdldCBtb2RlICovCisrCQkJ eHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KKysJCQluID0gc3RybGVuKHhw KzEpLTE7CisrCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7CisrCQkJYW1vZGVbbl0gPSAnXDAn OworKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KKysJCQlpZiAoVkVSQk9TRSkKKysJCQkJcHJp bnRmKCJUZXN0ID0gJXMsIE1vZGUgPSAlc1xuIiwgYXRlc3QsIGFtb2RlKTsKKysJCQl9CisrCQkg ICAgZWxzZSBpZiAoc3RybmNhc2VjbXAocHAsICJLZXkgTGVuZ3RoIDogIiwgMTMpID09IDApCisr CQkJeworKwkJCWFrZXlzeiA9IGF0b2kocHArMTMpOworKwkJCWlmIChWRVJCT1NFKQorKwkJCQlw cmludGYoIktleSBzaXplID0gJWRcbiIsIGFrZXlzeik7CisrCQkJfQorKwkJICAgIH0KKysJCX0K KysJICAgIGJyZWFrOworKworKwljYXNlIDE6ICAvKiBbRU5DUllQVF0gfCBbREVDUllQVF0gKi8K KysJICAgIGlmIChpYnVmWzBdID09ICdbJykKKysJCXsKKysJCWZwdXRzKGlidWYsIHJmcCk7Cisr CQkrK3N0ZXA7CisrCQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDAp CisrCQkgICAgZGlyID0gMTsKKysJCWVsc2UgaWYgKHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQ VF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDA7CisrCQllbHNlCisrCQkgICAgeworKwkJICAg IHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7CisrCQkgICAgZXJyID0gMTsK KysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKKysJ CXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdv cmRcbiIpOworKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNlIAorKwkJc3RlcCA9IDI7CisrCisr CWNhc2UgMjogLyogS0VZID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAg IGlmKCppYnVmID09ICdcbicpCisrCQlicmVhazsKKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVm LCJDT1VOVCA9ICIsOCkpCisrCQlicmVhazsKKysKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVm LCAiS0VZID0gIiwgNikgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwor KwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWxlbiA9IGhleDJiaW4oKGNo YXIqKWlidWYrNiwgYUtleSk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJp bnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJ ICAgIH0KKysJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxlbik7CisrCQlpZiAoc3RyY21wKGFt b2RlLCAiRUNCIikgPT0gMCkKKysJCSAgICB7CisrCQkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVv ZihpVmVjKSk7CisrCQkgICAgc3RlcCA9IChkaXIpPyA0OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNC ICovCisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgICsrc3RlcDsKKysJCX0KKysJICAgIGJyZWFr OworKworKwljYXNlIDM6IC8qIElWID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK KysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAhPSAwKQorKwkJeworKwkJ cHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisr CQl7CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMpOworKwkJaWYgKGxlbiA8 IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxuIik7CisrCQkgICAgZXJy ID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIklWIiwgaVZlYywg bGVuKTsKKysJCXN0ZXAgPSAoZGlyKT8gNDogNTsKKysJCX0KKysJICAgIGJyZWFrOworKworKwlj YXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7Cisr CSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIsIDEyKSAhPSAwKQorKwkJ eworKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7CisrCQllcnIgPSAxOworKwkJfQor KwkgICAgZWxzZQorKwkJeworKwkJaW50IG5uID0gc3RybGVuKGlidWYrMTIpOworKwkJaWYoIXN0 cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEyLG5uLTEscGxh aW50ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW49aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRleHQp OworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBQTEFJ TlRFWFQ6ICVzIiwgaWJ1ZisxMik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJ ICAgIH0KKysJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCisrCQkgICAgeworKwkJICAg IHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJQ TEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNt cChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgewor KwkJICAgIGlmKGRvX21jdChhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkgICAgICBk aXIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbiwgCisrCQkJICAgICAgcmZwKSA8IDAp CisrCQkJRVhJVCgxKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHJldCA9 IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAg LyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0 ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZhbHVlKCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxl bixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9 IDY7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4 eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVm LCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIEtF WVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJaWYoIXN0cmNt cChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVm KzEzKS0xLGNpcGhlcnRleHQpOworKwkJZWxzZQorKwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1Zisx MyxjaXBoZXJ0ZXh0KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYo IkludmFsaWQgQ0lQSEVSVEVYVFxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOwor KwkJICAgIH0KKysKKysJCVByaW50VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4p OworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0 ICovCisrCQkgICAgeworKwkJICAgIGRvX21jdChhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAK KysJCQkgICBkaXIsIGNpcGhlcnRleHQsIGxlbiwgcmZwKTsKKysJCSAgICB9CisrCQllbHNlCisr CQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwg aVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJ CSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZhbHVlKCJQTEFJ TlRFWFQiLCh1bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxlbixyZnAsCisrCQkJCSFzdHJjbXAo YW1vZGUsIkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9IDY7CisrCQl9CisrCSAgICBicmVh azsKKysKKysJY2FzZSA2OgorKwkgICAgaWYgKGlidWZbMF0gIT0gJ1xuJykKKysJCXsKKysJCWVy ciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRvclxuIik7CisrCQl9CisrCSAgICBl bHNlIGlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQorKwkJeyAvKiBNQ1QgYWxyZWFkeSBh ZGRlZCB0ZXJtaW5hdGluZyBubCAqLworKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCX0KKysJICAg IHN0ZXAgPSAxOworKwkgICAgYnJlYWs7CisrCSAgICB9CisrCX0KKysgICAgaWYgKHJmcCkKKysJ ZmNsb3NlKHJmcCk7CisrICAgIGlmIChhZnApCisrCWZjbG9zZShhZnApOworKyAgICByZXR1cm4g ZXJyOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorKyAgUHJvY2Vzc2VzIGVpdGhlciBhIHNpbmdsZSBmaWxlIG9yIAorKyAg YSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3NlZCBpbiBhIGZpbGUuCisrICBBIHNp bmdsZSBmaWxlIGlzIHNwZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3QgLWYgeHh4LnJlcQorKyAg QSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVzdCAtZCB4eHh4eC54 eHgKKysgIFRoZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKKysgICAgeworKyAgICBjaGFyICpycWxpc3QgPSAicmVxLnR4dCIsICpyc3BmaWxl ID0gTlVMTDsKKysgICAgRklMRSAqZnAgPSBOVUxMOworKyAgICBjaGFyIGZuWzI1MF0gPSAiIiwg cmZuWzI1Nl0gPSAiIjsKKysgICAgaW50IGZfb3B0ID0gMCwgZF9vcHQgPSAxOworKworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJp bnRfZXJyb3JzKCk7CisrCUVYSVQoMSk7CisrCX0KKysjZW5kaWYKKysgICAgaWYgKGFyZ2MgPiAx KQorKwl7CisrCWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZCIpID09IDApCisrCSAgICB7Cisr CSAgICBkX29wdCA9IDE7CisrCSAgICB9CisrCWVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwg Ii1mIikgPT0gMCkKKysJICAgIHsKKysJICAgIGZfb3B0ID0gMTsKKysJICAgIGRfb3B0ID0gMDsK KysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkgICAgcHJpbnRmKCJJbnZhbGlkIHBhcmFtZXRl cjogJXNcbiIsIGFyZ3ZbMV0pOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCWlmIChhcmdj IDwgMykKKysJICAgIHsKKysJICAgIHByaW50ZigiTWlzc2luZyBwYXJhbWV0ZXJcbiIpOworKwkg ICAgcmV0dXJuIDA7CisrCSAgICB9CisrCWlmIChkX29wdCkKKysJICAgIHJxbGlzdCA9IGFyZ3Zb Ml07CisrCWVsc2UKKysJICAgIHsKKysJICAgIHN0cmNweShmbiwgYXJndlsyXSk7CisrCSAgICBy c3BmaWxlID0gYXJndlszXTsKKysJICAgIH0KKysJfQorKyAgICBpZiAoZF9vcHQpCisrCXsgLyog bGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5KSAqLworKwlpZiAoIShmcCA9IGZvcGVuKHJxbGlzdCwg InIiKSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIkNhbm5vdCBvcGVuIHJlcSBsaXN0IGZpbGVc biIpOworKwkgICAgcmV0dXJuIC0xOworKwkgICAgfQorKwl3aGlsZSAoZmdldHMoZm4sIHNpemVv ZihmbiksIGZwKSkKKysJICAgIHsKKysJICAgIHN0cnRvayhmbiwgIlxyXG4iKTsKKysJICAgIHN0 cmNweShyZm4sIGZuKTsKKysJICAgIGlmIChWRVJCT1NFKQorKwkJcHJpbnRmKCJQcm9jZXNzaW5n OiAlc1xuIiwgcmZuKTsKKysJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKKysJCXsK KysJCXByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOwor KwkJRVhJVCgxKTsKKysJCX0KKysJICAgIH0KKysJZmNsb3NlKGZwKTsKKysJfQorKyAgICBlbHNl IC8qIHNpbmdsZSBmaWxlICovCisrCXsKKysJaWYgKFZFUkJPU0UpCisrCSAgICBwcmludGYoIlBy b2Nlc3Npbmc6ICVzXG4iLCBmbik7CisrCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQorKwkg ICAgeworKwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIs IGZuKTsKKysJICAgIH0KKysJfQorKyAgICBFWElUKDApOworKyAgICByZXR1cm4gMDsKKysgICAg fQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX2NtYWN0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf Y21hY3Rlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19jbWFj dGVzdC5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTc3NjkyMzQgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3QuYwkyMDEyLTA0LTI2IDE4 OjAwOjUxLjM5Nzc2OTIzNCArMDIwMAorQEAgLTAsMCArMSw1MTcgQEAKKysvKiBmaXBzX2NtYWN0 ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5z c2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vu c2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n CisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisr ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S CisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5 cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0 c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGlt CisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjZGVmaW5l IE9QRU5TU0xfRklQU0FQSQorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxjdHlw ZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jbWFjLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysjaWZu ZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisr eworKyAgICBwcmludGYoIk5vIEZJUFMgQ01BQyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDAp OworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVk ZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMgaW50IGNtYWNfdGVzdChjb25zdCBFVlBfQ0lQSEVS ICpjaXBoZXIsIEZJTEUgKm91dCwgRklMRSAqaW4sCisrCWludCBtb2RlLCBpbnQgS2xlbl9jb3Vu dHNfa2V5cywgaW50IGtub3duX2tleWxlbik7Cisrc3RhdGljIGludCBwcmludF9jbWFjX2dlbihj b25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKktl eSwgaW50IEtsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2dsZW4sCisrCQlpbnQg VGxlbik7Cisrc3RhdGljIGludCBwcmludF9jbWFjX3Zlcihjb25zdCBFVlBfQ0lQSEVSICpjaXBo ZXIsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKktleSwgaW50IEtsZW4sCisrCQl1bnNp Z25lZCBjaGFyICpNc2csIGludCBNc2dsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpNYWMsIGludCBN YWNsZW4sCisrCQlpbnQgVGxlbik7CisrCisrI2lmZGVmIEZJUFNfQUxHVlMKKytpbnQgZmlwc19j bWFjdGVzdF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysjZWxzZQorK2ludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKKysjZW5kaWYKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpv dXQgPSBOVUxMOworKwlpbnQgbW9kZSA9IDA7CQkvKiAwID0+IEdlbmVyYXRlLCAxID0+IFZlcmlm eSAqLworKwlpbnQgS2xlbl9jb3VudHNfa2V5cyA9IDA7IC8qIDAgPT4gS2xlbiBpcyBzaXplIG9m IG9uZSBrZXkKKysJCQkJICAgICAxID0+IEtsZW4gaXMgYW1vdW50IG9mIGtleXMKKysJCQkJICAq LworKwlpbnQga25vd25fa2V5bGVuID0gMDsJLyogT25seSBzZXQgd2hlbiBLbGVuX2NvdW50c19r ZXlzID0gMSAqLworKwljb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSAwOworKwlpbnQgcmV0ID0g MTsKKysJZmlwc19hbGd0ZXN0X2luaXQoKTsKKysKKysJd2hpbGUgKGFyZ2MgPiAxICYmIGFyZ3Zb MV1bMF0gPT0gJy0nKQorKwkJeworKwkJc3dpdGNoIChhcmd2WzFdWzFdKQorKwkJCXsKKysJCWNh c2UgJ2EnOgorKwkJCXsKKysJCQljaGFyICpwID0gJmFyZ3ZbMV1bMl07CisrCQkJaWYgKCpwID09 ICdcMCcpCisrCQkJCXsKKysJCQkJaWYgKGFyZ2MgPD0gMikKKysJCQkJCXsKKysJCQkJCWZwcmlu dGYoc3RkZXJyLCAiT3B0aW9uICVzIG5lZWRzIGEgdmFsdWVcbiIsIGFyZ3ZbMV0pOworKwkJCQkJ Z290byBlbmQ7CisrCQkJCQl9CisrCQkJCWFyZ3YrKzsKKysJCQkJYXJnYy0tOworKwkJCQlwID0g JmFyZ3ZbMV1bMF07CisrCQkJCX0KKysJCQlpZiAoIXN0cmNtcChwLCAiYWVzMTI4IikpCisrCQkJ CWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAocCwgImFl czE5MiIpKQorKwkJCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jYmMoKTsKKysJCQllbHNlIGlmICgh c3RyY21wKHAsICJhZXMyNTYiKSkKKysJCQkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2JjKCk7Cisr CQkJZWxzZSBpZiAoIXN0cmNtcChwLCAidGRlYTMiKSB8fCAhc3RyY21wKHAsICJ0ZGVzMyIpKQor KwkJCQl7CisrCQkJCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsKKysJCQkJS2xlbl9jb3Vu dHNfa2V5cyA9IDE7CisrCQkJCWtub3duX2tleWxlbiA9IDg7CisrCQkJCX0KKysJCQllbHNlCisr CQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIGFsZ29yaXRobSAlc1xuIiwgcCk7 CisrCQkJCWdvdG8gZW5kOworKwkJCQl9CisrCQkJfQorKwkJCWJyZWFrOworKwkJY2FzZSAnZyc6 CisrCQkJbW9kZSA9IDA7CisrCQkJYnJlYWs7CisrCQljYXNlICd2JzoKKysJCQltb2RlID0gMTsK KysJCQlicmVhazsKKysJCWRlZmF1bHQ6CisrCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9w dGlvbiAlc1xuIiwgYXJndlsxXSk7CisrCQkJZ290byBlbmQ7CisrCQkJfQorKwkJYXJndisrOwor KwkJYXJnYy0tOworKwkJfQorKwlpZiAoYXJnYyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJZWxz ZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOworKworKwlpZiAoYXJnYyA8IDIpCisrCQlv dXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisr CWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxp emF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIW91dCkKKysJ CXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9y XG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIWNtYWNfdGVzdChjaXBoZXIsIG91 dCwgaW4sIG1vZGUsCisrCQkJS2xlbl9jb3VudHNfa2V5cywga25vd25fa2V5bGVuKSkKKysJCXsK KysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgY21hYyBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIp OworKwkJZ290byBlbmQ7CisrCQl9CisrCWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysK KysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYm IChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKwor Kwl9CisrCisrI2RlZmluZSBDTUFDX1RFU1RfTUFYTElORUxFTgkxNTAwMDAKKysKKytpbnQgY21h Y190ZXN0KGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LCBGSUxFICppbiwKKysJ aW50IG1vZGUsIGludCBLbGVuX2NvdW50c19rZXlzLCBpbnQga25vd25fa2V5bGVuKQorKwl7Cisr CWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3b3JkLCAqdmFs dWU7CisrCXVuc2lnbmVkIGNoYXIgKipLZXlzID0gTlVMTCwgKk1zZyA9IE5VTEwsICpNYWMgPSBO VUxMOworKwl1bnNpZ25lZCBjaGFyICpLZXkgPSBOVUxMOworKwlpbnQgQ291bnQsIEtsZW4sIE1s ZW4sIFRsZW47CisrCWxvbmcgS2V5bGVuLCBNc2dsZW4sIE1hY2xlbjsKKysJaW50IHJldCA9IDA7 CisrCWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhDTUFDX1RF U1RfTUFYTElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhDTUFDX1RFU1RfTUFY TElORUxFTik7CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9y OworKworKwlDb3VudCA9IC0xOworKwlLbGVuID0gLTE7CisrCU1sZW4gPSAtMTsKKysJVGxlbiA9 IC0xOworKworKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIENNQUNfVEVTVF9NQVhMSU5FTEVOLCBp bikpCisrCQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJ a2V5d29yZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisr CQkvKiBTa2lwIGNvbW1lbnRzICovCisrCQlpZiAoa2V5d29yZFswXSA9PSAnIycpCisrCQkJewor KwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJ Y29udGludWU7CisrCQkJfQorKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0gc3Ry Y2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZv ciBbTD0yMF0gbGluZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXApCisrCQkJeworKwkJCWlmIChm cHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGludWU7 CisrCQkJfQorKworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNl ICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7 CisrCisrCQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRp bmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KnZhbHVlKSkKKysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZy b20gdmFsdWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJd2hp bGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9 IDA7CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiQ291bnQiKSkKKysJCQl7CisrCQkJaWYg KENvdW50ICE9IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCUNvdW50ID0gYXRvaSh2 YWx1ZSk7CisrCQkJaWYgKENvdW50IDwgMCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9 CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJLbGVuIikpCisrCQkJeworKwkJCWlmIChL bGVuICE9IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCUtsZW4gPSBhdG9pKHZhbHVl KTsKKysJCQlpZiAoS2xlbiA8IDApCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKEts ZW5fY291bnRzX2tleXMpCisrCQkJCXsKKysJCQkJS2V5cyA9IE9QRU5TU0xfbWFsbG9jKHNpemVv ZigqS2V5cykgKiBLbGVuKTsKKysJCQkJbWVtc2V0KEtleXMsICdcMCcsIHNpemVvZigqS2V5cykg KiBLbGVuKTsKKysJCQkJfQorKwkJCWVsc2UKKysJCQkJeworKwkJCQlLZXlzID0gT1BFTlNTTF9t YWxsb2Moc2l6ZW9mKCpLZXlzKSk7CisrCQkJCW1lbXNldChLZXlzLCAnXDAnLCBzaXplb2YoKktl eXMpKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1sZW4i KSkKKysJCQl7CisrCQkJaWYgKE1sZW4gIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJTWxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChNbGVuIDwgMCkKKysJCQkJZ290byBwYXJz ZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJUbGVuIikpCisr CQkJeworKwkJCWlmIChUbGVuICE9IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCVRs ZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoVGxlbiA8IDApCisrCQkJCWdvdG8gcGFyc2VfZXJy b3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiS2V5IikgJiYgIUtsZW5f Y291bnRzX2tleXMpCisrCQkJeworKwkJCWlmIChLZXlzWzBdKQorKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOworKwkJCUtleXNbMF0gPSBoZXgyYmluX20odmFsdWUsICZLZXlsZW4pOworKwkJCWlmICgh S2V5c1swXSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3Ry bmNtcChrZXl3b3JkLCAiS2V5IiwgMykgJiYgS2xlbl9jb3VudHNfa2V5cykKKysJCQl7CisrCQkJ aW50IGtleW51bSA9IGF0b2koa2V5d29yZCArIDMpOworKwkJCWlmICgha2V5bnVtIHx8IGtleW51 bSA+IEtsZW4gfHwgS2V5c1trZXludW0tMV0pCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJ S2V5c1trZXludW0tMV0gPSBoZXgyYmluX20odmFsdWUsICZLZXlsZW4pOworKwkJCWlmICghS2V5 c1trZXludW0tMV0pCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCisrCQkJeworKwkJCWlmIChNc2cpCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKKysJCQlp ZiAoIU1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJNYWMiKSkKKysJCQl7CisrCQkJaWYgKG1vZGUgPT0gMCkKKysJCQkJY29u dGludWU7CisrCQkJaWYgKE1hYykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlNYWMgPSBo ZXgyYmluX20odmFsdWUsICZNYWNsZW4pOworKwkJCWlmICghTWFjKQorKwkJCQlnb3RvIHBhcnNl X2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlJlc3VsdCIpKQor KwkJCXsKKysJCQlpZiAobW9kZSA9PSAxKQorKwkJCQljb250aW51ZTsKKysJCQlnb3RvIHBhcnNl X2Vycm9yOworKwkJCX0KKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vycm9yOworKworKwkJZnB1 dHMob2xpbmVidWYsIG91dCk7CisrCisrCQlpZiAoS2V5cyAmJiBNc2cgJiYgKCFtb2RlIHx8IE1h YykgJiYgKFRsZW4gPiAwKSAmJiAoS2xlbiA+IDApKQorKwkJCXsKKysJCQlpZiAoS2xlbl9jb3Vu dHNfa2V5cykKKysJCQkJeworKwkJCQlpbnQgeDsKKysJCQkJS2V5ID0gT1BFTlNTTF9tYWxsb2Mo S2xlbiAqIGtub3duX2tleWxlbik7CisrCQkJCWZvciAoeCA9IDA7IHggPCBLbGVuOyB4KyspCisr CQkJCQl7CisrCQkJCQltZW1jcHkoS2V5ICsgeCAqIGtub3duX2tleWxlbiwKKysJCQkJCQlLZXlz W3hdLCBrbm93bl9rZXlsZW4pOworKwkJCQkJT1BFTlNTTF9mcmVlKEtleXNbeF0pOworKwkJCQkJ fQorKwkJCQlLbGVuICo9IGtub3duX2tleWxlbjsKKysJCQkJfQorKwkJCWVsc2UKKysJCQkJewor KwkJCQlLZXkgPSBPUEVOU1NMX21hbGxvYyhLbGVuKTsKKysJCQkJbWVtY3B5KEtleSwgS2V5c1sw XSwgS2xlbik7CisrCQkJCU9QRU5TU0xfZnJlZShLZXlzWzBdKTsKKysJCQkJfQorKwkJCU9QRU5T U0xfZnJlZShLZXlzKTsKKysKKysJCQlzd2l0Y2gobW9kZSkKKysJCQkJeworKwkJCWNhc2UgMDoK KysJCQkJaWYgKCFwcmludF9jbWFjX2dlbihjaXBoZXIsIG91dCwKKysJCQkJCQlLZXksIEtsZW4s CisrCQkJCQkJTXNnLCBNbGVuLAorKwkJCQkJCVRsZW4pKQorKwkJCQkJZ290byBlcnJvcjsKKysJ CQkJYnJlYWs7CisrCQkJY2FzZSAxOgorKwkJCQlpZiAoIXByaW50X2NtYWNfdmVyKGNpcGhlciwg b3V0LAorKwkJCQkJCUtleSwgS2xlbiwKKysJCQkJCQlNc2csIE1sZW4sCisrCQkJCQkJTWFjLCBN YWNsZW4sCisrCQkJCQkJVGxlbikpCisrCQkJCQlnb3RvIGVycm9yOworKwkJCQlicmVhazsKKysJ CQkJfQorKworKwkJCU9QRU5TU0xfZnJlZShLZXkpOworKwkJCUtleSA9IE5VTEw7CisrCQkJT1BF TlNTTF9mcmVlKE1zZyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQlPUEVOU1NMX2ZyZWUoTWFjKTsK KysJCQlNYWMgPSBOVUxMOworKwkJCUtsZW4gPSAtMTsKKysJCQlNbGVuID0gLTE7CisrCQkJVGxl biA9IC0xOworKwkJCUNvdW50ID0gLTE7CisrCQkJfQorKwkJfQorKworKworKwlyZXQgPSAxOwor KworKworKwllcnJvcjoKKysKKysJaWYgKG9saW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5l YnVmKTsKKysJaWYgKGxpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChL ZXkpCisrCQlPUEVOU1NMX2ZyZWUoS2V5KTsKKysJaWYgKE1zZykKKysJCU9QRU5TU0xfZnJlZShN c2cpOworKwlpZiAoTWFjKQorKwkJT1BFTlNTTF9mcmVlKE1hYyk7CisrCisrCXJldHVybiByZXQ7 CisrCisrCXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVy cm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisr CX0KKysKKytzdGF0aWMgaW50IHByaW50X2NtYWNfZ2VuKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhl ciwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqS2V5LCBpbnQgS2xlbiwKKysJCXVuc2ln bmVkIGNoYXIgKk1zZywgaW50IE1sZW4sCisrCQlpbnQgVGxlbikKKysJeworKwlpbnQgcmMsIGk7 CisrCXNpemVfdCByZXNsZW47CisrCXVuc2lnbmVkIGNoYXIgcmVzWzEyOF07CisrCUNNQUNfQ1RY ICpjbWFjX2N0eCA9IENNQUNfQ1RYX25ldygpOworKworKwlDTUFDX0luaXQoY21hY19jdHgsIEtl eSwgS2xlbiwgY2lwaGVyLCAwKTsKKysJQ01BQ19VcGRhdGUoY21hY19jdHgsIE1zZywgTWxlbik7 CisrCWlmICghQ01BQ19GaW5hbChjbWFjX2N0eCwgcmVzLCAmcmVzbGVuKSkKKysJCXsKKysJCWZw dXRzKCJFcnJvciBjYWxjdWxhdGluZyBDTUFDXG4iLCBzdGRlcnIpOworKwkJcmMgPSAwOworKwkJ fQorKwllbHNlIGlmIChUbGVuID4gKGludClyZXNsZW4pCisrCQl7CisrCQlmcHV0cygiUGFyYW1l dGVyIGVycm9yLCBUbGVuID4gQ01BQyBsZW5ndGhcbiIsIHN0ZGVycik7CisrCQlyYyA9IDA7Cisr CQl9CisrCWVsc2UKKysJCXsKKysJCWZwdXRzKCJNYWMgPSAiLCBvdXQpOworKwkJZm9yIChpID0g MDsgaSA8IFRsZW47IGkrKykKKysJCQlmcHJpbnRmKG91dCwgIiUwMngiLCByZXNbaV0pOworKwkJ ZnB1dHMoUkVTUF9FT0wsIG91dCk7CisrCQlyYyA9IDE7CisrCQl9CisrCUNNQUNfQ1RYX2ZyZWUo Y21hY19jdHgpOworKwlyZXR1cm4gcmM7CisrCX0KKysKKytzdGF0aWMgaW50IHByaW50X2NtYWNf dmVyKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hh ciAqS2V5LCBpbnQgS2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1sZW4sCisrCQl1 bnNpZ25lZCBjaGFyICpNYWMsIGludCBNYWNsZW4sCisrCQlpbnQgVGxlbikKKysJeworKwlpbnQg cmMgPSAxOworKwlzaXplX3QgcmVzbGVuOworKwl1bnNpZ25lZCBjaGFyIHJlc1sxMjhdOworKwlD TUFDX0NUWCAqY21hY19jdHggPSBDTUFDX0NUWF9uZXcoKTsKKysKKysJQ01BQ19Jbml0KGNtYWNf Y3R4LCBLZXksIEtsZW4sIGNpcGhlciwgMCk7CisrCUNNQUNfVXBkYXRlKGNtYWNfY3R4LCBNc2cs IE1sZW4pOworKwlpZiAoIUNNQUNfRmluYWwoY21hY19jdHgsIHJlcywgJnJlc2xlbikpCisrCQl7 CisrCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgQ01BQ1xuIiwgc3RkZXJyKTsKKysJCXJjID0g MDsKKysJCX0KKysJZWxzZSBpZiAoVGxlbiA+IChpbnQpcmVzbGVuKQorKwkJeworKwkJZnB1dHMo IlBhcmFtZXRlciBlcnJvciwgVGxlbiA+IENNQUMgbGVuZ3RoXG4iLCBzdGRlcnIpOworKwkJcmMg PSAwOworKwkJfQorKwllbHNlIGlmIChUbGVuICE9IE1hY2xlbikKKysJCXsKKysJCWZwdXRzKCJQ YXJhbWV0ZXIgZXJyb3IsIFRsZW4gIT0gcmVzdWx0aW5nIE1hYyBsZW5ndGhcbiIsIHN0ZGVycik7 CisrCQlyYyA9IDA7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWlmICghbWVtY21wKE1hYywgcmVz LCBNYWNsZW4pKQorKwkJCWZwdXRzKCJSZXN1bHQgPSBQIiBSRVNQX0VPTCwgb3V0KTsKKysJCWVs c2UKKysJCQlmcHV0cygiUmVzdWx0ID0gRiIgUkVTUF9FT0wsIG91dCk7CisrCQl9CisrCUNNQUNf Q1RYX2ZyZWUoY21hY19jdHgpOworKwlyZXR1cm4gcmM7CisrCX0KKysKKysjZW5kaWYKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMuZmlwcyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCistLS0gb3BlbnNz bC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5maXBzCTIwMTItMDQtMjYg MTg6MDA6NTEuMzk4NzY5MjU1ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2Rlc21vdnMuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM5ODc2OTI1NSArMDIwMAor QEAgLTAsMCArMSw3MDIgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAw NCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgTklTVCBERVMgTW9kZXMg b2YgT3BlcmF0aW9uIFZhbGlkYXRpb24gU3lzdGVtCisrICBUZXN0IFByb2dyYW0KKysKKysgIEJh c2VkIG9uIHRoZSBBRVMgVmFsaWRhdGlvbiBTdWl0ZSwgd2hpY2ggd2FzOgorKyAgRG9uYXRlZCB0 byBPcGVuU1NMIGJ5OgorKyAgVi1PTkUgQ29ycG9yYXRpb24KKysgIDIwMjUwIENlbnR1cnkgQmx2 ZCwgU3VpdGUgMzAwCisrICBHZXJtYW50b3duLCBNRCAyMDg3NAorKyAgVS5TLkEuCisrICAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysjaW5jbHVk ZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgor KyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5 cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorKyNpbmNsdWRlICJlX29zLmgiCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIERF UyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKysjZGVmaW5l IERFU19CTE9DS19TSVpFIDgKKysKKysjZGVmaW5lIFZFUkJPU0UgMAorKworK2ludCBERVNUZXN0 KEVWUF9DSVBIRVJfQ1RYICpjdHgsCisrCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5z aWduZWQgY2hhciAqYUtleSwgCisrCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKKysJICAgIGlu dCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJICAgIHVuc2lnbmVkIGNo YXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBsZW4pCisrICAgIHsKKysgICAgY29uc3Qg RVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKKysKKysgICAgaWYgKGFrZXlzeiAhPSAxOTIpCisr CXsKKysJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKKysJRVhJVCgx KTsKKysJfQorKworKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCisrCWNp cGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsKKysgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9k ZSwgIkVDQiIpID09IDApCisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19lY2IoKTsKKysgICAgZWxz ZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjY0IikgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rl c19lZGUzX2NmYjY0KCk7CisrICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZCIiwg MykgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX29mYigpOworKyAgICBlbHNlIGlmKCFz dHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI4KCk7 CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKKysJY2lwaGVyID0gRVZQ X2Rlc19lZGUzX2NmYjEoKTsKKysgICAgZWxzZQorKwl7CisrCXByaW50ZigiVW5rbm93biBtb2Rl OiAlc1xuIiwgYW1vZGUpOworKwlFWElUKDEpOworKwl9CisrCisrICAgIGlmIChFVlBfQ2lwaGVy SW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQorKwlyZXR1 cm4gMDsKKysgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKKysJTV9FVlBfQ0lQSEVS X0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKKysgICAgRVZQ X0NpcGhlcihjdHgsIG91dCwgaW4sIGxlbik7CisrCisrICAgIHJldHVybiAxOworKyAgICB9Cisr Cisrdm9pZCBEZWJ1Z1ZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVu KQorKyAgICB7CisrICAgIGNoYXIgb2J1ZlsyMDQ4XTsKKysgICAgaW50IG9sZW47CisrICAgIG9s ZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsKKysgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIs IHRhZywgb2xlbiwgb2J1Zik7CisrICAgIH0KKysKKyt2b2lkIHNoaWZ0aW4odW5zaWduZWQgY2hh ciAqZHN0LHVuc2lnbmVkIGNoYXIgKnNyYyxpbnQgbmJpdHMpCisrICAgIHsKKysgICAgaW50IG47 CisrCisrICAgIC8qIG1vdmUgdGhlIGJ5dGVzLi4uICovCisrICAgIG1lbW1vdmUoZHN0LGRzdCtu Yml0cy84LDMqOC1uYml0cy84KTsKKysgICAgLyogYXBwZW5kIG5ldyBkYXRhICovCisrICAgIG1l bWNweShkc3QrMyo4LW5iaXRzLzgsc3JjLChuYml0cys3KS84KTsKKysgICAgLyogbGVmdCBzaGlm dCB0aGUgYml0cyAqLworKyAgICBpZihuYml0cyU4KQorKwlmb3Iobj0wIDsgbiA8IDMqOCA7ICsr bikKKysJICAgIGRzdFtuXT0oZHN0W25dIDw8IChuYml0cyU4KSl8KGRzdFtuKzFdID4+ICg4LW5i aXRzJTgpKTsKKysgICAgfQkKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KKytjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhF UlRFWFQifTsKKytjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJD RkI4IiwiQ0ZCNjQifTsKKytlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENG QjY0fTsKKytpbnQgU2l6ZXNbNl09ezY0LDY0LDY0LDEsOCw2NH07CisrCisrdm9pZCBkb19tY3Qo Y2hhciAqYW1vZGUsIAorKwkgICAgaW50IGFrZXlzeiwgaW50IG51bWtleXMsIHVuc2lnbmVkIGNo YXIgKmFrZXksdW5zaWduZWQgY2hhciAqaXZlYywKKysJICAgIGludCBkaXIsIHVuc2lnbmVkIGNo YXIgKnRleHQsIGludCBsZW4sCisrCSAgICBGSUxFICpyZnApCisrICAgIHsKKysgICAgaW50IGks aW1vZGU7CisrICAgIHVuc2lnbmVkIGNoYXIgbmtbNCo4XTsgLyogbG9uZ2VzdCBrZXkrOCAqLwor KyAgICB1bnNpZ25lZCBjaGFyIHRleHQwWzhdOworKworKyAgICBmb3IgKGltb2RlPTAgOyBpbW9k ZSA8IDYgOyArK2ltb2RlKQorKwlpZighc3RyY21wKGFtb2RlLHRfbW9kZVtpbW9kZV0pKQorKwkg ICAgYnJlYWs7CisrICAgIGlmIChpbW9kZSA9PSA2KQorKwl7IAorKwlwcmludGYoIlVucmVjb2du aXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOworKwlFWElUKDEpOworKwl9CisrCisrICAgIGZvcihp PTAgOyBpIDwgNDAwIDsgKytpKQorKwl7CisrCWludCBqOworKwlpbnQgbjsKKysJaW50IGtwPWFr ZXlzei82NDsKKysJdW5zaWduZWQgY2hhciBvbGRfaXZbOF07CisrCUVWUF9DSVBIRVJfQ1RYIGN0 eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysJZnByaW50ZihyZnAsIlxuQ09V TlQgPSAlZFxuIixpKTsKKysJaWYoa3AgPT0gMSkKKysJICAgIE91dHB1dFZhbHVlKCJLRVkiLGFr ZXksOCxyZnAsMCk7CisrCWVsc2UKKysJICAgIGZvcihuPTAgOyBuIDwga3AgOyArK24pCisrCQl7 CisrCQlmcHJpbnRmKHJmcCwiS0VZJWQiLG4rMSk7CisrCQlPdXRwdXRWYWx1ZSgiIixha2V5K24q OCw4LHJmcCwwKTsKKysJCX0KKysKKysJaWYoaW1vZGUgIT0gRUNCKQorKwkgICAgT3V0cHV0VmFs dWUoIklWIixpdmVjLDgscmZwLDApOworKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sdGV4dCxs ZW4scmZwLGltb2RlID09IENGQjEpOworKyNpZiAwCisrCS8qIGNvbXBlbnNhdGUgZm9yIGVuZGlh bm5lc3MgKi8KKysJaWYoaW1vZGUgPT0gQ0ZCMSkKKysJICAgIHRleHRbMF08PD03OworKyNlbmRp ZgorKwltZW1jcHkodGV4dDAsdGV4dCw4KTsKKysKKysJZm9yKGo9MCA7IGogPCAxMDAwMCA7ICsr aikKKysJICAgIHsKKysJICAgIHVuc2lnbmVkIGNoYXIgb2xkX3RleHRbOF07CisrCisrCSAgICBt ZW1jcHkob2xkX3RleHQsdGV4dCw4KTsKKysJICAgIGlmKGogPT0gMCkKKysJCXsKKysJCW1lbWNw eShvbGRfaXYsaXZlYyw4KTsKKysJCURFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osYWtleSxpdmVj LGRpcix0ZXh0LHRleHQsbGVuKTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCW1lbWNweShv bGRfaXYsY3R4Lml2LDgpOworKwkJRVZQX0NpcGhlcigmY3R4LHRleHQsdGV4dCxsZW4pOworKwkJ fQorKwkgICAgaWYoaiA9PSA5OTk5KQorKwkJeworKwkJT3V0cHV0VmFsdWUodF90YWdbZGlyXSx0 ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7CisrCQkvKgkJbWVtY3B5KGl2ZWMsdGV4dCw4KTsg Ki8KKysJCX0KKysJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJpdiIsY3R4Lml2LDgpOyAqLworKwkg ICAgLyogYWNjdW11bGF0ZSBtYXRlcmlhbCBmb3IgdGhlIG5leHQga2V5ICovCisrCSAgICBzaGlm dGluKG5rLHRleHQsU2l6ZXNbaW1vZGVdKTsKKysJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJuayIs bmssMjQpOyovCisrCSAgICBpZigoZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENG QjggfHwgaW1vZGUgPT0gQ0ZCNjQKKysJCQl8fCBpbW9kZSA9PSBDQkMpKSB8fCBpbW9kZSA9PSBP RkIpCisrCQltZW1jcHkodGV4dCxvbGRfaXYsOCk7CisrCisrCSAgICBpZighZGlyICYmIChpbW9k ZSA9PSBDRkIxIHx8IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQpKQorKwkJeworKwkJ LyogdGhlIHRlc3Qgc3BlY2lmaWVzIHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHJhdyBERVMgb3Bl cmF0aW9uCisrCQkgICB3aGljaCB3ZSBkb24ndCBoYXZlLCBzbyByZWNvbnN0cnVjdCBpdC4uLiAq LworKwkJZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkJICAgIHRleHRbbl1ePW9sZF90ZXh0W25d OworKwkJfQorKwkgICAgfQorKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCSAgICBha2V5W25d Xj1ua1sxNituXTsKKysJZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkgICAgYWtleVs4K25dXj1u a1s4K25dOworKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCSAgICBha2V5WzE2K25dXj1ua1tu XTsKKysJaWYobnVta2V5cyA8IDMpCisrCSAgICBtZW1jcHkoJmFrZXlbMio4XSxha2V5LDgpOwor KwlpZihudW1rZXlzIDwgMikKKysJICAgIG1lbWNweSgmYWtleVs4XSxha2V5LDgpOworKwlERVNf c2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKilha2V5KTsKKysJREVTX3NldF9vZGRfcGFyaXR5 KChERVNfY2Jsb2NrICopKGFrZXkrOCkpOworKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxv Y2sgKikoYWtleSsxNikpOworKwltZW1jcHkoaXZlYyxjdHguaXYsOCk7CisrCisrCS8qIHBvaW50 bGVzcyBleGVyY2lzZSAtIHRoZSBmaW5hbCB0ZXh0IGRvZXNuJ3QgZGVwZW5kIG9uIHRoZQorKwkg ICBpbml0aWFsIHRleHQgaW4gT0ZCIG1vZGUsIHNvIHdobyBjYXJlcyB3aGF0IGl0IGlzPyAoV2hv CisrCSAgIGRlc2lnbmVkIHRoZXNlIHRlc3RzPykgKi8KKysJaWYoaW1vZGUgPT0gT0ZCKQorKwkg ICAgZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkJdGV4dFtuXT10ZXh0MFtuXV5vbGRfaXZbbl07 CisrCX0KKysgICAgfQorKyAgICAKKytpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAq cnNwZmlsZSkKKysgICAgeworKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKKysgICAgRklM RSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7CisrICAgIGNoYXIgaWJ1ZlsyMDQ4XSwgdGJ1Zlsy MDQ4XTsKKysgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKKysgICAgY2hhciBhbW9kZVs4XSA9 ICIiOworKyAgICBjaGFyIGF0ZXN0WzEwMF0gPSAiIjsKKysgICAgaW50IGFrZXlzej0wOworKyAg ICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKKysgICAgaW50IGRpciA9IC0xLCBl cnIgPSAwLCBzdGVwID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07Cisr ICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKKysgICAgY2hhciAqcnA7CisrICAg IEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgaW50IG51bWtleXM9MTsKKysgICAgRVZQX0NJUEhF Ul9DVFhfaW5pdCgmY3R4KTsKKysKKysgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkKKysJ eworKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIHN0 cmNweShhZm4sIHJxZmlsZSk7CisrCisrICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9 PSBOVUxMKQorKwl7CisrCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKKysJ ICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIGlm ICghcnNwZmlsZSkKKysJeworKwlzdHJjcHkocmZuLGFmbik7CisrCXJwPXN0cnN0cihyZm4sInJl cS8iKTsKKysjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysJaWYgKCFycCkKKysJICAgIHJwPXN0 cnN0cihyZm4sInJlcVxcIik7CisrI2VuZGlmCisrCWFzc2VydChycCk7CisrCW1lbWNweShycCwi cnNwIiwzKTsKKysJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOworKwltZW1jcHkocnAsICIucnNw IiwgNCk7CisrCXJzcGZpbGUgPSByZm47CisrCX0KKysgICAgaWYgKChyZnAgPSBmb3Blbihyc3Bm aWxlLCAidyIpKSA9PSBOVUxMKQorKwl7CisrCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMs ICVzXG4iLCAKKysJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKKysJZmNsb3NlKGFmcCk7 CisrCWFmcCA9IE5VTEw7CisrCXJldHVybiAtMTsKKysJfQorKyAgICB3aGlsZSAoIWVyciAmJiAo ZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQorKwl7CisrCXRpZHlfbGlu ZSh0YnVmLCBpYnVmKTsKKysJaWxlbiA9IHN0cmxlbihpYnVmKTsKKysJLyoJcHJpbnRmKCJzdGVw PSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7Ki8KKysJaWYoc3RlcCA9PSAzICYmICFzdHJjbXAoYW1v ZGUsIkVDQiIpKQorKwkgICAgeworKwkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7 CisrCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KKysJICAg IH0KKysJc3dpdGNoIChzdGVwKQorKwkgICAgeworKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxl ICovCisrCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQorKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUg Ki8KKysJCWlmICgqYW1vZGUgPT0gJ1wwJykKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJNaXNz aW5nIE1vZGVcbiIpOworKwkJICAgIGVyciA9IDE7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAg IHsKKysJCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkJICAgICsrIHN0ZXA7CisrCQkgICAgfQor KwkJfQorKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCisrCQl7CisrCQlwcmludGYoIklu dmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOworKwkJZXJyID0gMTsKKysJCX0KKysJ ICAgIGVsc2UKKysJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLworKwkJY2hhciAqeHAsICpwcCA9 IGlidWYrMjsKKysJCWludCBuOworKwkJaWYoKmFtb2RlKQorKwkJICAgIHsgLyogaW5zZXJ0IGN1 cnJlbnQgdGltZSAmIGRhdGUgKi8KKysJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7CisrCQkg ICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKKysJCSAgICB9CisrCQllbHNl CisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgaWYoIXN0cm5jbXAo cHAsIklOVkVSU0UgIiw4KSB8fCAhc3RybmNtcChwcCwiREVTICIsNCkKKysJCSAgICAgICB8fCAh c3RybmNtcChwcCwiVERFUyAiLDUpCisrCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlBFUk1VVEFU SU9OICIsMTIpCisrCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlNVQlNUSVRVVElPTiAiLDEzKQor KwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJWQVJJQUJMRSAiLDkpKQorKwkJCXsKKysJCQkvKiBn ZXQgdGVzdCB0eXBlICovCisrCQkJaWYoIXN0cm5jbXAocHAsIkRFUyAiLDQpKQorKwkJCSAgICBw cCs9NDsKKysJCQllbHNlIGlmKCFzdHJuY21wKHBwLCJUREVTICIsNSkpCisrCQkJICAgIHBwKz01 OworKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOworKwkJCW4gPSB4cC1wcDsKKysJCQlzdHJuY3B5 KGF0ZXN0LCBwcCwgbik7CisrCQkJYXRlc3Rbbl0gPSAnXDAnOworKwkJCS8qIGdldCBtb2RlICov CisrCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KKysJCQluID0gc3Ry bGVuKHhwKzEpLTE7CisrCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7CisrCQkJYW1vZGVbbl0g PSAnXDAnOworKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KKysJCQlpZiAoVkVSQk9TRSkKKysJ CQkJcHJpbnRmKCJUZXN0PSVzLCBNb2RlPSVzXG4iLGF0ZXN0LGFtb2RlKTsKKysJCQl9CisrCQkg ICAgfQorKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8IFtE RUNSWVBUXSAqLworKwkgICAgaWYoaWJ1ZlswXSA9PSAnXG4nKQorKwkJYnJlYWs7CisrCSAgICBp ZiAoaWJ1ZlswXSA9PSAnWycpCisrCQl7CisrCQlmcHV0cyhpYnVmLCByZnApOworKwkJKytzdGVw OworKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQorKwkJICAg IGRpciA9IDE7CisrCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkg PT0gMCkKKysJCSAgICBkaXIgPSAwOworKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBwcmludGYo IkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYpOworKwkJICAgIGVyciA9IDE7CisrCQkgICAg fQorKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCisrCQl7CisrCQll cnIgPSAxOworKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsK KysJCWJyZWFrOworKwkJfQorKwkgICAgZWxzZSAKKysJCXN0ZXAgPSAyOworKworKwljYXNlIDI6 IC8qIEtFWSA9IHh4eHggKi8KKysJICAgIGlmKCppYnVmID09ICdcbicpCisrCQl7CisrCSAgICAg ICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCWJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrCSAg ICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQorKwkJeworKwkgICAgICAgIGZw dXRzKGlidWYsIHJmcCk7CisrCQlicmVhazsKKysgICAgICAgICAgICAgICAgfQorKwkgICAgaWYo IXN0cm5jYXNlY21wKGlidWYsIkNPVU5UPSIsNikpCisrCQl7CisrCSAgICAgICAgZnB1dHMoaWJ1 ZiwgcmZwKTsKKysJCWJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrCSAgICBpZighc3RybmNh c2VjbXAoaWJ1ZiwiTnVtS2V5cyA9ICIsMTApKQorKwkJeworKwkJbnVta2V5cz1hdG9pKGlidWYr MTApOworKwkJYnJlYWs7CisrCQl9CisrCSAgCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkg ICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSA9ICIsNikpCisrCQl7CisrCQlha2V5c3o9NjQ7 CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOworKwkJaWYgKGxlbiA8IDAp CisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOworKwkJICAgIGVycj0x OworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxl bik7CisrCQkrK3N0ZXA7CisrCQl9CisrCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJL RVlzID0gIiw3KSkKKysJCXsKKysJCWFrZXlzej02NCozOworKwkJbGVuPWhleDJiaW4oaWJ1Zis3 LGFLZXkpOworKwkJaWYobGVuICE9IDgpCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxp ZCBLRVlcbiIpOworKwkJICAgIGVycj0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCW1l bWNweShhS2V5KzgsYUtleSw4KTsKKysJCW1lbWNweShhS2V5KzE2LGFLZXksOCk7CisrCQlpYnVm WzRdPSdcMCc7CisrCQlQcmludFZhbHVlKCJLRVlzIixhS2V5LGxlbik7CisrCQkrK3N0ZXA7Cisr CQl9CisrCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkiLDMpKQorKwkJeworKwkJ aW50IG49aWJ1ZlszXS0nMSc7CisrCisrCQlha2V5c3o9NjQqMzsKKysJCWxlbj1oZXgyYmluKGli dWYrNyxhS2V5K24qOCk7CisrCQlpZihsZW4gIT0gOCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRm KCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAg fQorKwkJaWJ1Zls0XT0nXDAnOworKwkJUHJpbnRWYWx1ZShpYnVmLGFLZXksbGVuKTsKKysJCWlm KG4gPT0gMikKKysJCSAgICArK3N0ZXA7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlwcmlu dGYoIk1pc3NpbmcgS0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBicmVhazsKKysK KysJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAg ICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKKysJCXsKKysJCXByaW50 ZigiTWlzc2luZyBJVlxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJewor KwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKKysJCWlmIChsZW4gPCAwKQor KwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOworKwkJICAgIGVyciA9MTsK KysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7 CisrCQlzdGVwID0gKGRpcik/IDQ6IDU7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA0 OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAg aWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKKysJCXsKKysJ CXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAg IGVsc2UKKysJCXsKKysJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKKysJCWlmKCFzdHJjbXAo YW1vZGUsIkNGQjEiKSkKKysJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4 dCk7CisrCQllbHNlCisrCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKKysJ CWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhU OiAlcyIsIGlidWYrMTIpOworKwkJICAgIGVyciA9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9 CisrCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQorKwkJICAgIHsKKysJCSAgICBwcmlu dGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiUExBSU5U RVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKKysJCWlmIChzdHJjbXAoYXRl c3QsICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJ ICAgIGRvX21jdChhbW9kZSxha2V5c3osbnVta2V5cyxhS2V5LGlWZWMsZGlyLHBsYWludGV4dCxs ZW4scmZwKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGFzc2VydChkaXIg PT0gMSk7CisrCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBp VmVjLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJ ICBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhF UlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsK KysJCSAgICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDU6 IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAg aWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCisrCQl7Cisr CQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNl CisrCQl7CisrCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmlu KGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7CisrCQllbHNlCisrCQkgICAg bGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkg ICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKKysJCSAgICBlcnIg PTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJCisrCQlQcmludFZhbHVlKCJDSVBIRVJU RVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKKysJCWlmIChzdHJjbXAoYXRlc3QsICJNb250ZSIpID09 IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJICAgIGRvX21jdChhbW9k ZSwgYWtleXN6LCBudW1rZXlzLCBhS2V5LCBpVmVjLCAKKysJCQkgICBkaXIsIGNpcGhlcnRleHQs IGxlbiwgcmZwKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGFzc2VydChk aXIgPT0gMCk7CisrCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5 LCBpVmVjLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJ CQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIlBM QUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNt cChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJy ZWFrOworKworKwljYXNlIDY6CisrCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQorKwkJeworKwkJ ZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKKysJCX0KKysJICAg IGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCisrCQl7IC8qIE1DVCBhbHJlYWR5 IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCisrCQlmcHV0cyhpYnVmLCByZnApOworKwkJfQorKwkg ICAgc3RlcCA9IDE7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJfQorKyAgICBpZiAocmZwKQor KwlmY2xvc2UocmZwKTsKKysgICAgaWYgKGFmcCkKKysJZmNsb3NlKGFmcCk7CisrICAgIHJldHVy biBlcnI7CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisrICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3IgCisr ICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KKysgIEEg c2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVzdCAtZiB4eHgucmVxCisr ICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1kIHh4eHh4 Lnh4eAorKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKKystLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisraW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQorKyAgICB7CisrICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJzcGZp bGUgPSBOVUxMOworKyAgICBGSUxFICpmcCA9IE5VTEw7CisrICAgIGNoYXIgZm5bMjUwXSA9ICIi LCByZm5bMjU2XSA9ICIiOworKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7CisrCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19w cmludF9lcnJvcnMoKTsKKysJRVhJVCgxKTsKKysJfQorKyNlbmRpZgorKyAgICBpZiAoYXJnYyA+ IDEpCisrCXsKKysJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKKysJICAgIHsK KysJICAgIGRfb3B0ID0gMTsKKysJICAgIH0KKysJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzFd LCAiLWYiKSA9PSAwKQorKwkgICAgeworKwkgICAgZl9vcHQgPSAxOworKwkgICAgZF9vcHQgPSAw OworKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBwcmludGYoIkludmFsaWQgcGFyYW1l dGVyOiAlc1xuIiwgYXJndlsxXSk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGFy Z2MgPCAzKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7Cisr CSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGRfb3B0KQorKwkgICAgcnFsaXN0ID0gYXJn dlsyXTsKKysJZWxzZQorKwkgICAgeworKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKKysJICAg IHJzcGZpbGUgPSBhcmd2WzNdOworKwkgICAgfQorKwl9CisrICAgIGlmIChkX29wdCkKKysJeyAv KiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCisrCWlmICghKGZwID0gZm9wZW4ocnFsaXN0 LCAiciIpKSkKKysJICAgIHsKKysJICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3QgZmls ZVxuIik7CisrCSAgICByZXR1cm4gLTE7CisrCSAgICB9CisrCXdoaWxlIChmZ2V0cyhmbiwgc2l6 ZW9mKGZuKSwgZnApKQorKwkgICAgeworKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOworKwkgICAg c3RyY3B5KHJmbiwgZm4pOworKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsK KysJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKKysJCXsKKysJCXByaW50ZigiPj4+ IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOworKwkJRVhJVCgxKTsKKysJ CX0KKysJICAgIH0KKysJZmNsb3NlKGZwKTsKKysJfQorKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxl ICovCisrCXsKKysJaWYgKFZFUkJPU0UpCisrCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBm bik7CisrCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQorKwkgICAgeworKwkgICAgcHJpbnRm KCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKKysJICAgIH0KKysJ fQorKyAgICBFWElUKDApOworKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRpZgorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RodnMuYy5maXBzIG9w ZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19kaHZzLmMKKy0tLSBvcGVuc3NsLTEu MC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1 MS4zOTg3NjkyNTUgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfZGh2cy5jCTIwMTItMDQtMjYgMTg6MDA6NTEuMzk4NzY5MjU1ICswMjAwCitAQCAtMCwwICsx LDI5MiBAQAorKy8qIGZpcHMvZGgvZmlwc19kaHZzLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0 ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBw cm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor KyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKwor KyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYu aD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBE SCBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysjZWxzZQorKworKyNpbmNsdWRl IDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZGguaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPHN0cmlu Zy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKwor K3N0YXRpYyBjb25zdCBFVlBfTUQgKnBhcnNlX21kKGNoYXIgKmxpbmUpCisrCXsKKysJY2hhciAq cDsKKysJaWYgKGxpbmVbMF0gIT0gJ1snIHx8IGxpbmVbMV0gIT0gJ0YnKQorKwkJcmV0dXJuIE5V TEw7CisrCXAgPSBzdHJjaHIobGluZSwgJy0nKTsKKysJaWYgKCFwKQorKwkJcmV0dXJuIE5VTEw7 CisrCWxpbmUgPSBwICsgMTsKKysJcCA9IHN0cmNocihsaW5lLCAnXScpOworKwlpZiAoIXApCisr CQlyZXR1cm4gTlVMTDsKKysJKnAgPSAwOworKwlwID0gbGluZTsKKysJd2hpbGUoaXNzcGFjZSgq cCkpCisrCQlwKys7CisrCWlmICghc3RyY21wKHAsICJTSEExIikpCisrCQlyZXR1cm4gRVZQX3No YTEoKTsKKysJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBMjI0IikpCisrCQlyZXR1cm4gRVZQX3No YTIyNCgpOworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEyNTYiKSkKKysJCXJldHVybiBFVlBf c2hhMjU2KCk7CisrCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTM4NCIpKQorKwkJcmV0dXJuIEVW UF9zaGEzODQoKTsKKysJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBNTEyIikpCisrCQlyZXR1cm4g RVZQX3NoYTUxMigpOworKwllbHNlCisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworK3N0YXRpYyB2 b2lkIG91dHB1dF9aaGFzaChGSUxFICpvdXQsIGludCBleG91dCwKKysJCQkJREggKmRoLCBCSUdO VU0gKnBlZXJrZXksIGNvbnN0IEVWUF9NRCAqbWQsCisrCQkJCXVuc2lnbmVkIGNoYXIgKnJoYXNo LCBzaXplX3Qgcmhhc2hsZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciAqWjsKKysJdW5zaWduZWQg Y2hhciBjaGFzaFtFVlBfTUFYX01EX1NJWkVdOworKwlpbnQgWmxlbjsKKysJaWYgKHJoYXNoID09 IE5VTEwpCisrCQl7CisrCQlyaGFzaGxlbiA9IE1fRVZQX01EX3NpemUobWQpOworKwkJaWYgKCFE SF9nZW5lcmF0ZV9rZXkoZGgpKQorKwkJCWV4aXQgKDEpOworKwkJZG9fYm5fcHJpbnRfbmFtZShv dXQsICJZZXBoZW1JVVQiLCBkaC0+cHViX2tleSk7CisrCQlpZiAoZXhvdXQpCisrCQkJZG9fYm5f cHJpbnRfbmFtZShvdXQsICJYZXBoZW1JVVQiLCBkaC0+cHJpdl9rZXkpOworKwkJfQorKwlaID0g T1BFTlNTTF9tYWxsb2MoQk5fbnVtX2J5dGVzKGRoLT5wKSk7CisrCWlmICghWikKKysJCWV4aXQo MSk7CisrCVpsZW4gPSBESF9jb21wdXRlX2tleV9wYWRkZWQoWiwgcGVlcmtleSwgZGgpOworKwlp ZiAoZXhvdXQpCisrCQlPdXRwdXRWYWx1ZSgiWiIsIFosIFpsZW4sIG91dCwgMCk7CisrCUZJUFNf ZGlnZXN0KFosIFpsZW4sIGNoYXNoLCBOVUxMLCBtZCk7CisrCU91dHB1dFZhbHVlKHJoYXNoID8g IklVVEhhc2haWiIgOiAiSGFzaFpaIiwgY2hhc2gsIHJoYXNobGVuLCBvdXQsIDApOworKwlpZiAo cmhhc2gpCisrCQl7CisrCQlmcHJpbnRmKG91dCwgIlJlc3VsdCA9ICVzXG4iLAorKwkJCQltZW1j bXAoY2hhc2gsIHJoYXNoLCByaGFzaGxlbikgPyAiRiIgOiAiUCIpOworKwkJfQorKwllbHNlCisr CQl7CisrCQlCTl9jbGVhcl9mcmVlKGRoLT5wcml2X2tleSk7CisrCQlCTl9jbGVhcl9mcmVlKGRo LT5wdWJfa2V5KTsKKysJCWRoLT5wcml2X2tleSA9IE5VTEw7CisrCQlkaC0+cHViX2tleSA9IE5V TEw7CisrCQl9CisrCU9QRU5TU0xfY2xlYW5zZShaLCBabGVuKTsKKysJT1BFTlNTTF9mcmVlKFop OworKwl9CisrCisrI2lmZGVmIEZJUFNfQUxHVlMKKytpbnQgZmlwc19kaHZzX21haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQorKyNlbHNlCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQorKyNlbmRpZgorKwl7CisrCWNoYXIgKiphcmdzID0gYXJndiArIDE7CisrCWludCBhcmduID0g YXJnYyAtIDE7CisrCUZJTEUgKmluLCAqb3V0OworKwljaGFyIGJ1ZlsyMDQ4XSwgbGJ1ZlsyMDQ4 XTsKKysJdW5zaWduZWQgY2hhciAqcmhhc2g7CisrCWxvbmcgcmhhc2hsZW47CisrCURIICpkaCA9 IE5VTEw7CisrCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOworKwlCSUdOVU0gKnBlZXJrZXkgPSBO VUxMOworKwljaGFyICprZXl3b3JkID0gTlVMTCwgKnZhbHVlID0gTlVMTDsKKysJaW50IGRvX3Zl cmlmeSA9IC0xLCBleG91dCA9IDA7CisrCisrCWZpcHNfYWxndGVzdF9pbml0KCk7CisrCisrCWlm IChhcmduICYmICFzdHJjbXAoKmFyZ3MsICJkaHZlciIpKQorKwkJeworKwkJZG9fdmVyaWZ5ID0g MTsKKysJCWFyZ3MrKzsKKysJCWFyZ24tLTsKKysJCX0KKysJZWxzZSBpZiAoYXJnbiAmJiAhc3Ry Y21wKCphcmdzLCAiZGhnZW4iKSkKKysJCXsKKysJCWRvX3ZlcmlmeSA9IDA7CisrCQlhcmdzKys7 CisrCQlhcmduLS07CisrCQl9CisrCisrCWlmIChhcmduICYmICFzdHJjbXAoKmFyZ3MsICItZXhv dXQiKSkKKysJCXsKKysJCWV4b3V0ID0gMTsKKysJCWFyZ3MrKzsKKysJCWFyZ24tLTsKKysJCX0K KysKKysJaWYgKGRvX3ZlcmlmeSA9PSAtMSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCIlcyBb ZGh2ZXJ8ZGhnZW58XSBbLWV4b3V0XSAoaW5maWxlIG91dGZpbGUpXG4iLGFyZ3ZbMF0pOworKwkJ ZXhpdCgxKTsKKysJCX0KKysKKysJaWYgKGFyZ24gPT0gMikKKysJCXsKKysJCWluID0gZm9wZW4o KmFyZ3MsICJyIik7CisrCQlpZiAoIWluKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkVy cm9yIG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCQlvdXQg PSBmb3BlbihhcmdzWzFdLCAidyIpOworKwkJaWYgKCFvdXQpCisrCQkJeworKwkJCWZwcmludGYo c3RkZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJ CQl9CisrCQl9CisrCWVsc2UgaWYgKGFyZ24gPT0gMCkKKysJCXsKKysJCWluID0gc3RkaW47Cisr CQlvdXQgPSBzdGRvdXQ7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCIl cyBbZGh2ZXJ8ZGhnZW58XSBbLWV4b3V0XSAoaW5maWxlIG91dGZpbGUpXG4iLGFyZ3ZbMF0pOwor KwkJZXhpdCgxKTsKKysJCX0KKysKKysJZGggPSBGSVBTX2RoX25ldygpOworKworKwl3aGlsZSAo ZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgaW4pICE9IE5VTEwpCisrCQl7CisrCQlmcHV0cyhidWYs IG91dCk7CisrCQlpZiAoc3RybGVuKGJ1ZikgPiA2ICYmICFzdHJuY21wKGJ1ZiwgIltGIiwgMikp CisrCQkJeworKwkJCW1kID0gcGFyc2VfbWQoYnVmKTsKKysJCQlpZiAobWQgPT0gTlVMTCkKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoZGgpCisrCQkJCUZJUFNfZGhfZnJlZShkaCk7 CisrCQkJZGggPSBGSVBTX2RoX25ldygpOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysJCWlmICgh cGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJCWNvbnRpbnVlOwor KwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlAiKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4o JmRoLT5wLCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAiUSIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJibigmZGgt PnEsIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsICJHIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZkaC0+Zywg dmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIlhlcGhlbUlVVCIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJibigmZGgt PnByaXZfa2V5LCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWWVwaGVtSVVUIikpCisrCQkJeworKwkJCWlmICghZG9f aGV4MmJuKCZkaC0+cHViX2tleSwgdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJ CX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlllcGhlbUNBVlMiKSkKKysJCQl7Cisr CQkJaWYgKCFkb19oZXgyYm4oJnBlZXJrZXksIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQlpZiAoZG9fdmVyaWZ5ID09IDApCisrCQkJCW91dHB1dF9aaGFzaChvdXQsIGV4b3V0 LCBkaCwgcGVlcmtleSwgbWQsCisrCQkJCQkJCU5VTEwsIDApOworKwkJCX0KKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIkNBVlNIYXNoWloiKSkKKysJCQl7CisrCQkJaWYgKCFtZCkKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlyaGFzaCA9IGhleDJiaW5fbSh2YWx1ZSwgJnJoYXNo bGVuKTsKKysJCQlpZiAoIXJoYXNoIHx8IHJoYXNobGVuICE9IE1fRVZQX01EX3NpemUobWQpKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCW91dHB1dF9aaGFzaChvdXQsIGV4b3V0LCBkaCwg cGVlcmtleSwgbWQsCisrCQkJCQkJCXJoYXNoLCByaGFzaGxlbik7CisrCQkJfQorKwkJfQorKwlp ZiAoaW4gJiYgaW4gIT0gc3RkaW4pCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIG91dCAh PSBzdGRvdXQpCisrCQlmY2xvc2Uob3V0KTsKKysJcmV0dXJuIDA7CisrCXBhcnNlX2Vycm9yOgor KwlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIFBhcnNpbmcgcmVxdWVzdCBmaWxlXG4iKTsKKysJZXhp dCgxKTsKKysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2RyYmd2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2RyYmd2cy5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2RyYmd2cy5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTg3NjkyNTUgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMJMjAxMi0wNC0yNiAx ODowMDo1MS4zOTg3NjkyNTUgKzAyMDAKK0BAIC0wLDAgKzEsNDE2IEBACisrLyogZmlwcy9yYW5k L2ZpcHNfZHJiZ3ZzLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0 ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlv bi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBs aWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisr ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysg KgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK KysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKworKyNkZWZpbmUgT1BFTlNTTF9G SVBTQVBJCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZuZGVmIE9Q RU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBEUkJHIHN1cHBvcnRcbiIpOwor KyAgICByZXR1cm4oMCk7CisrfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyBpbnQg ZHBhcnNlX21kKGNoYXIgKnN0cikKKysJeworKwlzd2l0Y2goYXRvaShzdHIgKyA1KSkKKysJCXsK KysJCWNhc2UgMToKKysJCXJldHVybiBOSURfc2hhMTsKKysKKysJCWNhc2UgMjI0OgorKwkJcmV0 dXJuIE5JRF9zaGEyMjQ7CisrCisrCQljYXNlIDI1NjoKKysJCXJldHVybiBOSURfc2hhMjU2Owor KworKwkJY2FzZSAzODQ6CisrCQlyZXR1cm4gTklEX3NoYTM4NDsKKysKKysJCWNhc2UgNTEyOgor KwkJcmV0dXJuIE5JRF9zaGE1MTI7CisrCisrCQl9CisrCisrCXJldHVybiBOSURfdW5kZWY7Cisr CX0KKysKKytzdGF0aWMgaW50IHBhcnNlX2VjKGNoYXIgKnN0cikKKysJeworKwlpbnQgY3VydmVf bmlkLCBtZF9uaWQ7CisrCWNoYXIgKm1kOworKwltZCA9IHN0cmNocihzdHIsICcgJyk7CisrCWlm ICghbWQpCisrCQlyZXR1cm4gTklEX3VuZGVmOworKwlpZiAoIXN0cm5jbXAoc3RyLCAiW1AtMjU2 IiwgNikpCisrCQljdXJ2ZV9uaWQgPSBOSURfWDlfNjJfcHJpbWUyNTZ2MTsKKysJZWxzZSBpZiAo IXN0cm5jbXAoc3RyLCAiW1AtMzg0IiwgNikpCisrCQljdXJ2ZV9uaWQgPSBOSURfc2VjcDM4NHIx OworKwllbHNlIGlmICghc3RybmNtcChzdHIsICJbUC01MjEiLCA2KSkKKysJCWN1cnZlX25pZCA9 IE5JRF9zZWNwNTIxcjE7CisrCWVsc2UKKysJCXJldHVybiBOSURfdW5kZWY7CisrCW1kX25pZCA9 IGRwYXJzZV9tZChtZCk7CisrCWlmIChtZF9uaWQgPT0gTklEX3VuZGVmKQorKwkJcmV0dXJuIE5J RF91bmRlZjsKKysJcmV0dXJuIChjdXJ2ZV9uaWQgPDwgMTYpIHwgbWRfbmlkOworKwl9CisrCisr c3RhdGljIGludCBwYXJzZV9hZXMoY2hhciAqc3RyLCBpbnQgKnBkZikKKysJeworKworKwlpZiAo IXN0cm5jbXAoc3RyICsgOSwgIm5vIiwgMikpCisrCQkqcGRmID0gMDsKKysJZWxzZQorKwkJKnBk ZiA9IERSQkdfRkxBR19DVFJfVVNFX0RGOworKworKwlzd2l0Y2goYXRvaShzdHIgKyA1KSkKKysJ CXsKKysJCWNhc2UgMTI4OgorKwkJcmV0dXJuIE5JRF9hZXNfMTI4X2N0cjsKKysKKysJCWNhc2Ug MTkyOgorKwkJcmV0dXJuIE5JRF9hZXNfMTkyX2N0cjsKKysKKysJCWNhc2UgMjU2OgorKwkJcmV0 dXJuIE5JRF9hZXNfMjU2X2N0cjsKKysKKysJCWRlZmF1bHQ6CisrCQlyZXR1cm4gTklEX3VuZGVm OworKworKwkJfQorKwl9CisrCisrdHlwZWRlZiBzdHJ1Y3QgCisrCXsKKysJdW5zaWduZWQgY2hh ciAqZW50OworKwlzaXplX3QgZW50bGVuOworKwl1bnNpZ25lZCBjaGFyICpub25jZTsKKysJc2l6 ZV90IG5vbmNlbGVuOworKwl9IFRFU1RfRU5UOworKworK3N0YXRpYyBzaXplX3QgdGVzdF9lbnRy b3B5KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1h eF9sZW4pCisrCXsKKysJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgp OworKwkqcG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+ZW50OworKwlyZXR1cm4gdC0+ZW50bGVu OworKwl9CisrCisrc3RhdGljIHNpemVfdCB0ZXN0X25vbmNlKERSQkdfQ1RYICpkY3R4LCB1bnNp Z25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBl bnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCisrCXsKKysJVEVTVF9FTlQg KnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOworKwkqcG91dCA9ICh1bnNpZ25lZCBj aGFyICopdC0+bm9uY2U7CisrCXJldHVybiB0LT5ub25jZWxlbjsKKysJfQorKworKyNpZmRlZiBG SVBTX0FMR1ZTCisraW50IGZpcHNfZHJiZ3ZzX21haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisr I2Vsc2UKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysjZW5kaWYKKysJeworKwlG SUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOworKwlEUkJHX0NUWCAqZGN0eCA9IE5VTEw7Cisr CVRFU1RfRU5UIHQ7CisrCWludCByLCBuaWQgPSAwOworKwlpbnQgcHIgPSAwOworKwljaGFyIGJ1 ZlsyMDQ4XSwgbGJ1ZlsyMDQ4XTsKKysJdW5zaWduZWQgY2hhciByYW5kb3V0WzIwNDhdOworKwlj aGFyICprZXl3b3JkID0gTlVMTCwgKnZhbHVlID0gTlVMTDsKKysKKysJdW5zaWduZWQgY2hhciAq ZW50ID0gTlVMTCwgKm5vbmNlID0gTlVMTCwgKnBlcnMgPSBOVUxMLCAqYWRpbiA9IE5VTEw7Cisr CWxvbmcgZW50bGVuLCBub25jZWxlbiwgcGVyc2xlbiwgYWRpbmxlbjsKKysJaW50IGRmID0gMDsK KysKKysJZW51bSBkdHlwZSB7IERSQkdfTk9ORSwgRFJCR19DVFIsIERSQkdfSEFTSCwgRFJCR19I TUFDLCBEUkJHX0RVQUxfRUMgfQorKwkJZHJiZ190eXBlID0gRFJCR19OT05FOworKworKwlpbnQg cmFuZG91dGxlbiA9IDA7CisrCisrCWludCBnZW4gPSAwOworKworKwlmaXBzX2FsZ3Rlc3RfaW5p dCgpOworKworKwlpZiAoYXJnYyA9PSAzKQorKwkJeworKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAi ciIpOworKwkJaWYgKCFpbikKKysJCQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVu aW5nIGlucHV0IGZpbGVcbiIpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKwkJb3V0ID0gZm9wZW4o YXJndlsyXSwgInciKTsKKysJCWlmICghb3V0KQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwg IkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGVcbiIpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKwkJ fQorKwllbHNlIGlmIChhcmdjID09IDEpCisrCQl7CisrCQlpbiA9IHN0ZGluOworKwkJb3V0ID0g c3Rkb3V0OworKwkJfQorKwllbHNlCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwiJXMgKGluZmls ZSBvdXRmaWxlKVxuIixhcmd2WzBdKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCisrCXdoaWxlIChm Z2V0cyhidWYsIHNpemVvZihidWYpLCBpbikgIT0gTlVMTCkKKysJCXsKKysJCWZwdXRzKGJ1Ziwg b3V0KTsKKysJCWlmIChkcmJnX3R5cGUgPT0gRFJCR19OT05FKQorKwkJCXsKKysJCQlpZiAoc3Ry c3RyKGJ1ZiwgIkNUUl9EUkJHIikpCisrCQkJCWRyYmdfdHlwZSA9IERSQkdfQ1RSOworKwkJCWVs c2UgaWYgKHN0cnN0cihidWYsICJIYXNoX0RSQkciKSkKKysJCQkJZHJiZ190eXBlID0gRFJCR19I QVNIOworKwkJCWVsc2UgaWYgKHN0cnN0cihidWYsICJITUFDX0RSQkciKSkKKysJCQkJZHJiZ190 eXBlID0gRFJCR19ITUFDOworKwkJCWVsc2UgaWYgKHN0cnN0cihidWYsICJEdWFsX0VDX0RSQkci KSkKKysJCQkJZHJiZ190eXBlID0gRFJCR19EVUFMX0VDOworKwkJCWVsc2UKKysJCQkJY29udGlu dWU7CisrCQkJfQorKwkJaWYgKHN0cmxlbihidWYpID4gNCAmJiAhc3RybmNtcChidWYsICJbU0hB LSIsIDUpKQorKwkJCXsKKysJCQluaWQgPSBkcGFyc2VfbWQoYnVmKTsKKysJCQlpZiAobmlkID09 IE5JRF91bmRlZikKKysJCQkJZXhpdCgxKTsKKysJCQlpZiAoZHJiZ190eXBlID09IERSQkdfSE1B QykKKysJCQkJeworKwkJCQlzd2l0Y2ggKG5pZCkKKysJCQkJCXsKKysJCQkJCWNhc2UgTklEX3No YTE6CisrCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEExOworKwkJCQkJYnJlYWs7CisrCisrCQkJ CQljYXNlIE5JRF9zaGEyMjQ6CisrCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEEyMjQ7CisrCQkJ CQlicmVhazsKKysKKysJCQkJCWNhc2UgTklEX3NoYTI1NjoKKysJCQkJCW5pZCA9IE5JRF9obWFj V2l0aFNIQTI1NjsKKysJCQkJCWJyZWFrOworKworKwkJCQkJY2FzZSBOSURfc2hhMzg0OgorKwkJ CQkJbmlkID0gTklEX2htYWNXaXRoU0hBMzg0OworKwkJCQkJYnJlYWs7CisrCisrCQkJCQljYXNl IE5JRF9zaGE1MTI6CisrCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEE1MTI7CisrCQkJCQlicmVh azsKKysKKysJCQkJCWRlZmF1bHQ6CisrCQkJCQlleGl0KDEpOworKwkJCQkJfQorKwkJCQl9Cisr CQkJfQorKwkJaWYgKHN0cmxlbihidWYpID4gMTIgJiYgIXN0cm5jbXAoYnVmLCAiW0FFUy0iLCA1 KSkKKysJCQl7CisrCQkJbmlkID0gcGFyc2VfYWVzKGJ1ZiwgJmRmKTsKKysJCQlpZiAobmlkID09 IE5JRF91bmRlZikKKysJCQkJZXhpdCgxKTsKKysJCQl9CisrCQlpZiAoc3RybGVuKGJ1ZikgPiAx MiAmJiAhc3RybmNtcChidWYsICJbUC0iLCAzKSkKKysJCQl7CisrCQkJbmlkID0gcGFyc2VfZWMo YnVmKTsKKysJCQlpZiAobmlkID09IE5JRF91bmRlZikKKysJCQkJZXhpdCgxKTsKKysJCQl9Cisr CQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCQljb250 aW51ZTsKKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJbUHJlZGljdGlvblJlc2lzdGFuY2Ui KSkKKysJCQl7CisrCQkJaWYgKCFzdHJjbXAodmFsdWUsICJUcnVlXSIpKQorKwkJCQlwciA9IDE7 CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIkZhbHNlXSIpKQorKwkJCQlwciA9IDA7Cisr CQkJZWxzZQorKwkJCQlleGl0KDEpOworKwkJCX0KKysKKysJCWlmICghc3RyY21wKGtleXdvcmQs ICJFbnRyb3B5SW5wdXQiKSkKKysJCQl7CisrCQkJZW50ID0gaGV4MmJpbl9tKHZhbHVlLCAmZW50 bGVuKTsKKysJCQl0LmVudCA9IGVudDsKKysJCQl0LmVudGxlbiA9IGVudGxlbjsKKysJCQl9Cisr CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiTm9uY2UiKSkKKysJCQl7CisrCQkJbm9uY2UgPSBo ZXgyYmluX20odmFsdWUsICZub25jZWxlbik7CisrCQkJdC5ub25jZSA9IG5vbmNlOworKwkJCXQu bm9uY2VsZW4gPSBub25jZWxlbjsKKysJCQl9CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAi UGVyc29uYWxpemF0aW9uU3RyaW5nIikpCisrCQkJeworKwkJCXBlcnMgPSBoZXgyYmluX20odmFs dWUsICZwZXJzbGVuKTsKKysJCQlpZiAobmlkID09IDApCisrCQkJCXsKKysJCQkJZnByaW50Zihz dGRlcnIsICJEUkJHIHR5cGUgbm90IHJlY29nbmlzZWQhXG4iKTsKKysJCQkJZXhpdCAoMSk7Cisr CQkJCX0KKysJCQlkY3R4ID0gRklQU19kcmJnX25ldyhuaWQsIGRmIHwgRFJCR19GTEFHX1RFU1Qp OworKwkJCWlmICghZGN0eCkKKysJCQkJZXhpdCAoMSk7CisrCQkJRklQU19kcmJnX3NldF9jYWxs YmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLAorKwkJCQkJCQl0ZXN0X25vbmNlLCAwKTsK KysJCQlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKKysJCQlyYW5kb3V0bGVuID0g KGludClGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKGRjdHgpOworKwkJCXIgPSBGSVBTX2RyYmdf aW5zdGFudGlhdGUoZGN0eCwgcGVycywgcGVyc2xlbik7CisrCQkJaWYgKCFyKQorKwkJCQl7Cisr CQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgaW5zdGFudGlhdGluZyBEUkJHXG4iKTsKKysJCQkJ ZXhpdCgxKTsKKysJCQkJfQorKwkJCU9QRU5TU0xfZnJlZShwZXJzKTsKKysJCQlPUEVOU1NMX2Zy ZWUoZW50KTsKKysJCQlPUEVOU1NMX2ZyZWUobm9uY2UpOworKwkJCWVudCA9IG5vbmNlID0gcGVy cyA9IE5VTEw7CisrCQkJZ2VuID0gMDsKKysJCQl9CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3Jk LCAiQWRkaXRpb25hbElucHV0IikpCisrCQkJeworKwkJCWFkaW4gPSBoZXgyYmluX20odmFsdWUs ICZhZGlubGVuKTsKKysJCQlpZiAocHIpCisrCQkJCWNvbnRpbnVlOworKwkJCXIgPSBGSVBTX2Ry YmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgcmFuZG91dGxlbiwgMCwKKysJCQkJCQkJCWFkaW4s IGFkaW5sZW4pOworKwkJCWlmICghcikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVy cm9yIGdlbmVyYXRpbmcgRFJCRyBiaXRzXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJ CWlmICghcikKKysJCQkJZXhpdCgxKTsKKysJCQlPUEVOU1NMX2ZyZWUoYWRpbik7CisrCQkJYWRp biA9IE5VTEw7CisrCQkJZ2VuKys7CisrCQkJfQorKworKwkJaWYgKHByKQorKwkJCXsKKysJCQlp ZiAoIXN0cmNtcChrZXl3b3JkLCAiRW50cm9weUlucHV0UFIiKSkKKysJCQkJeworKwkJCQllbnQg PSBoZXgyYmluX20odmFsdWUsICZlbnRsZW4pOworKwkJCQl0LmVudCA9IGVudDsKKysJCQkJdC5l bnRsZW4gPSBlbnRsZW47CisrCQkJCXIgPSBGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwKKysJCQkJ CQkJcmFuZG91dCwgcmFuZG91dGxlbiwKKysJCQkJCQkJMSwgYWRpbiwgYWRpbmxlbik7CisrCQkJ CWlmICghcikKKysJCQkJCXsKKysJCQkJCWZwcmludGYoc3RkZXJyLAorKwkJCQkJCSJFcnJvciBn ZW5lcmF0aW5nIERSQkcgYml0c1xuIik7CisrCQkJCQlleGl0KDEpOworKwkJCQkJfQorKwkJCQlP UEVOU1NMX2ZyZWUoYWRpbik7CisrCQkJCU9QRU5TU0xfZnJlZShlbnQpOworKwkJCQlhZGluID0g ZW50ID0gTlVMTDsKKysJCQkJZ2VuKys7CisrCQkJCX0KKysJCQl9CisrCQlpZiAoIXN0cmNtcChr ZXl3b3JkLCAiRW50cm9weUlucHV0UmVzZWVkIikpCisrCQkJeworKwkJCWVudCA9IGhleDJiaW5f bSh2YWx1ZSwgJmVudGxlbik7CisrCQkJdC5lbnQgPSBlbnQ7CisrCQkJdC5lbnRsZW4gPSBlbnRs ZW47CisrCQkJfQorKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkFkZGl0aW9uYWxJbnB1dFJlc2Vl ZCIpKQorKwkJCXsKKysJCQlhZGluID0gaGV4MmJpbl9tKHZhbHVlLCAmYWRpbmxlbik7CisrCQkJ RklQU19kcmJnX3Jlc2VlZChkY3R4LCBhZGluLCBhZGlubGVuKTsKKysJCQlPUEVOU1NMX2ZyZWUo ZW50KTsKKysJCQlPUEVOU1NMX2ZyZWUoYWRpbik7CisrCQkJZW50ID0gYWRpbiA9IE5VTEw7Cisr CQkJfQorKwkJaWYgKGdlbiA9PSAyKQorKwkJCXsKKysJCQlPdXRwdXRWYWx1ZSgiUmV0dXJuZWRC aXRzIiwgcmFuZG91dCwgcmFuZG91dGxlbiwKKysJCQkJCQkJCQlvdXQsIDApOworKwkJCUZJUFNf ZHJiZ19mcmVlKGRjdHgpOworKwkJCWRjdHggPSBOVUxMOworKwkJCWdlbiA9IDA7CisrCQkJfQor KworKwkJfQorKwlpZiAoaW4gJiYgaW4gIT0gc3RkaW4pCisrCQlmY2xvc2UoaW4pOworKwlpZiAo b3V0ICYmIG91dCAhPSBzdGRvdXQpCisrCQlmY2xvc2Uob3V0KTsKKysJcmV0dXJuIDA7CisrCX0K KysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlw c19kc3N2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3Zz LmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYy5maXBz CTIwMTItMDQtMjYgMTg6MDA6NTEuMzk4NzY5MjU1ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTg3Njky NTUgKzAyMDAKK0BAIC0wLDAgKzEsNTM3IEBACisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNv bmYuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKwor K2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQ UyBEU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrI2Vsc2UKKysKKysjaW5j bHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+ CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIHZvaWQgcGJuKGNvbnN0IGNo YXIgKm5hbWUsIEJJR05VTSAqYm4pCisrCXsKKysJaW50IGxlbiwgaTsKKysJdW5zaWduZWQgY2hh ciAqdG1wOworKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOworKwl0bXAgPSBPUEVOU1NMX21hbGxv YyhsZW4pOworKwlpZiAoIXRtcCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFs bG9jYXRpb24gZXJyb3JcbiIpOworKwkJcmV0dXJuOworKwkJfQorKwlCTl9ibjJiaW4oYm4sIHRt cCk7CisrCXByaW50ZigiJXMgPSAiLCBuYW1lKTsKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsr KQorKwkJcHJpbnRmKCIlMDJYIiwgdG1wW2ldKTsKKysJZnB1dHMoIlxuIiwgc3Rkb3V0KTsKKysJ T1BFTlNTTF9mcmVlKHRtcCk7CisrCXJldHVybjsKKysJfQorKworK3ZvaWQgcHJpbWVzKCkKKysg ICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0MF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0MF07CisrICAg IGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBi dWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJZnB1dHMoYnVmLHN0ZG91dCk7CisrCWlmICghcGFy c2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGludWU7CisrCWlm KCFzdHJjbXAoa2V5d29yZCwiUHJpbWUiKSkKKysJICAgIHsKKysJICAgIEJJR05VTSAqcHA7Cisr CisrCSAgICBwcD1CTl9uZXcoKTsKKysJICAgIGRvX2hleDJibigmcHAsdmFsdWUpOworKwkgICAg cHJpbnRmKCJyZXN1bHQ9ICVjXG4iLAorKwkJICAgQk5faXNfcHJpbWVfZXgocHAsMjAsTlVMTCxO VUxMKSA/ICdQJyA6ICdGJyk7CisrCSAgICB9CSAgICAKKysJfQorKyAgICB9CisrCisrdm9pZCBw cWcoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07 CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysKKysgICAg d2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFw YXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhi dWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIltt b2QiKSkKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJOIikpCisrCSAgICB7CisrCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKKysKKysJICAgIHByaW50 ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKworKwkgICAgd2hpbGUobi0tKQorKwkJeworKwkJ dW5zaWduZWQgY2hhciBzZWVkWzIwXTsKKysJCURTQSAqZHNhOworKwkJaW50IGNvdW50ZXI7Cisr CQl1bnNpZ25lZCBsb25nIGg7CisrCQlkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysKKysJCWlmICgh RFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMCwmY291bnRlciwmaCxO VUxMKSkKKysJCQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgxKTsKKysJCQl9 CisrCQlwYm4oIlAiLGRzYS0+cCk7CisrCQlwYm4oIlEiLGRzYS0+cSk7CisrCQlwYm4oIkciLGRz YS0+Zyk7CisrCQlwdigiU2VlZCIsc2VlZCwyMCk7CisrCQlwcmludGYoImMgPSAlZFxuIixjb3Vu dGVyKTsKKysJCXByaW50ZigiSCA9ICVseFxuIixoKTsKKysJCXB1dGMoJ1xuJyxzdGRvdXQpOwor KwkJfQorKwkgICAgfQorKwllbHNlCisrCSAgICBmcHV0cyhidWYsc3Rkb3V0KTsKKysJfQorKyAg ICB9CisrCisrdm9pZCBwcWd2ZXIoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAg ICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgQklH TlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEw7CisrICAgIGludCBjb3VudGVyLCBj b3VudGVyMjsKKysgICAgdW5zaWduZWQgbG9uZyBoLCBoMjsKKysgICAgRFNBICpkc2E9TlVMTDsK KysgICAgaW50IG5tb2Q9MDsKKysgICAgdW5zaWduZWQgY2hhciBzZWVkWzEwMjRdOworKworKyAg ICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAo IXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRz KGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWZwdXRzKGJ1Ziwgc3Rkb3V0KTsK KysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICBubW9kPWF0b2kodmFsdWUpOwor KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgcD1oZXgyYm4odmFsdWUpOwor KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgcT1oZXgyYm4odmFsdWUpOwor KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgZz1oZXgyYm4odmFsdWUpOwor KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiU2VlZCIpKQorKwkgICAgeworKwkgICAgaW50IHNs ZW4gPSBoZXgyYmluKHZhbHVlLCBzZWVkKTsKKysJICAgIGlmIChzbGVuICE9IDIwKQorKwkJewor KwkJZnByaW50ZihzdGRlcnIsICJTZWVkIHBhcnNlIGxlbmd0aCBlcnJvclxuIik7CisrCQlleGl0 ICgxKTsKKysJCX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsImMiKSkKKysJ ICAgIGNvdW50ZXIgPWF0b2koYnVmKzQpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiSCIp KQorKwkgICAgeworKwkgICAgaCA9IGF0b2kodmFsdWUpOworKwkgICAgaWYgKCFwIHx8ICFxIHx8 ICFnKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxuIik7CisrCQlleGl0 ICgxKTsKKysJCX0KKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOworKwkgICAgaWYgKCFEU0Ff Z2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwyMCAsJmNvdW50ZXIyLCZoMixO VUxMKSkKKysJCQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgxKTsKKysJCQl9 CisrICAgICAgICAgICAgaWYgKEJOX2NtcChkc2EtPnAsIHApIHx8IEJOX2NtcChkc2EtPnEsIHEp IHx8IEJOX2NtcChkc2EtPmcsIGcpCisrCQl8fCAoY291bnRlciAhPSBjb3VudGVyMikgfHwgKGgg IT0gaDIpKQorKwkgICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7CisrCSAgICBlbHNlCisrCSAg ICAJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKKysJICAgIEJOX2ZyZWUocCk7CisrCSAgICBCTl9m cmVlKHEpOworKwkgICAgQk5fZnJlZShnKTsKKysJICAgIHAgPSBOVUxMOworKwkgICAgcSA9IE5V TEw7CisrCSAgICBnID0gTlVMTDsKKysJICAgIEZJUFNfZHNhX2ZyZWUoZHNhKTsKKysJICAgIGRz YSA9IE5VTEw7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKy8qIEtleXBhaXIgdmVyaWZpY2F0 aW9uIHJvdXRpbmUuIE5COiB0aGlzIGlzbid0IHBhcnQgb2YgdGhlIHN0YW5kYXJkIEZJUFMxNDAt MgorKyAqIGFsZ29yaXRobSB0ZXN0cy4gSXQgaXMgYW4gYWRkaXRpb25hbCB0ZXN0IHRvIHBlcmZv cm0gc2FuaXR5IGNoZWNrcyBvbiB0aGUKKysgKiBvdXRwdXQgb2YgdGhlIEtleVBhaXIgdGVzdC4K KysgKi8KKysKKytzdGF0aWMgaW50IGRzc19wYXJhbWNoZWNrKGludCBubW9kLCBCSUdOVU0gKnAs IEJJR05VTSAqcSwgQklHTlVNICpnLAorKwkJCQkJCQlCTl9DVFggKmN0eCkKKysgICAgeworKyAg ICBCSUdOVU0gKnJlbSA9IE5VTEw7CisrICAgIGlmIChCTl9udW1fYml0cyhwKSAhPSBubW9kKQor KwlyZXR1cm4gMDsKKysgICAgaWYgKEJOX251bV9iaXRzKHEpICE9IDE2MCkKKysJcmV0dXJuIDA7 CisrICAgIGlmIChCTl9pc19wcmltZV9leChwLCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkg IT0gMSkKKysJcmV0dXJuIDA7CisrICAgIGlmIChCTl9pc19wcmltZV9leChxLCBCTl9wcmltZV9j aGVja3MsIGN0eCwgTlVMTCkgIT0gMSkKKysJcmV0dXJuIDA7CisrICAgIHJlbSA9IEJOX25ldygp OworKyAgICBpZiAoIUJOX21vZChyZW0sIHAsIHEsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pCisr ICAgIAl8fCAoQk5fY21wKGcsIEJOX3ZhbHVlX29uZSgpKSA8PSAwKQorKwl8fCAhQk5fbW9kX2V4 cChyZW0sIGcsIHEsIHAsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pKQorKwl7CisrCUJOX2ZyZWUo cmVtKTsKKysJcmV0dXJuIDA7CisrCX0KKysgICAgLyogVG9kbzogY2hlY2sgZyAqLworKyAgICBC Tl9mcmVlKHJlbSk7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrdm9pZCBrZXl2ZXIoKQor KyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAg IGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxM LCAqZyA9IE5VTEwsICpYID0gTlVMTCwgKlkgPSBOVUxMOworKyAgICBCSUdOVU0gKlkyOworKyAg ICBCTl9DVFggKmN0eCA9IE5VTEw7CisrICAgIGludCBubW9kPTAsIHBhcmFtY2hlY2sgPSAwOwor KworKyAgICBjdHggPSBCTl9DVFhfbmV3KCk7CisrICAgIFkyID0gQk5fbmV3KCk7CisrCisrICAg IHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICgh cGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMo YnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJb bW9kIikpCisrCSAgICB7CisrCSAgICBpZiAocCkKKysJCUJOX2ZyZWUocCk7CisrCSAgICBwID0g TlVMTDsKKysJICAgIGlmIChxKQorKwkJQk5fZnJlZShxKTsKKysJICAgIHEgPSBOVUxMOworKwkg ICAgaWYgKGcpCisrCQlCTl9mcmVlKGcpOworKwkgICAgZyA9IE5VTEw7CisrCSAgICBwYXJhbWNo ZWNrID0gMDsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAgICB9CisrCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJQIikpCisrCSAgICBwPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJRIikpCisrCSAgICBxPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICBnPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJYIikpCisrCSAgICBYPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJZIikpCisrCSAgICB7CisrCSAgICBZPWhleDJibih2YWx1ZSk7CisrCSAg ICBpZiAoIXAgfHwgIXEgfHwgIWcgfHwgIVggfHwgIVkpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVy ciwgIlBhcnNlIEVycm9yXG4iKTsKKysJCWV4aXQgKDEpOworKwkJfQorKwkgICAgcGJuKCJQIixw KTsKKysJICAgIHBibigiUSIscSk7CisrCSAgICBwYm4oIkciLGcpOworKwkgICAgcGJuKCJYIixY KTsKKysJICAgIHBibigiWSIsWSk7CisrCSAgICBpZiAoIXBhcmFtY2hlY2spCisrCQl7CisrCQlp ZiAoZHNzX3BhcmFtY2hlY2sobm1vZCwgcCwgcSwgZywgY3R4KSkKKysJCQlwYXJhbWNoZWNrID0g MTsKKysJCWVsc2UKKysJCQlwYXJhbWNoZWNrID0gLTE7CisrCQl9CisrCSAgICBpZiAocGFyYW1j aGVjayAhPSAxKQorKwkgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKKysJICAgIGVsc2UKKysJ CXsKKysJCWlmICghQk5fbW9kX2V4cChZMiwgZywgWCwgcCwgY3R4KSB8fCBCTl9jbXAoWTIsIFkp KQorKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IEZcbiIpOworKwkgICAgICAgIGVsc2UKKysJICAg IAkJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKKysJCX0KKysJICAgIEJOX2ZyZWUoWCk7CisrCSAg ICBCTl9mcmVlKFkpOworKwkgICAgWCA9IE5VTEw7CisrCSAgICBZID0gTlVMTDsKKysJICAgIH0K KysJfQorKwlpZiAocCkKKysJICAgIEJOX2ZyZWUocCk7CisrCWlmIChxKQorKwkgICAgQk5fZnJl ZShxKTsKKysJaWYgKGcpCisrCSAgICBCTl9mcmVlKGcpOworKwlpZiAoWTIpCisrCSAgICBCTl9m cmVlKFkyKTsKKysgICAgfQorKworK3ZvaWQga2V5cGFpcigpCisrICAgIHsKKysgICAgY2hhciBi dWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZh bHVlOworKyAgICBpbnQgbm1vZD0wOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1 ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1 ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7 CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgbm1vZD1hdG9pKHZh bHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKKysJICAgIHsKKysJICAgIERT QSAqZHNhOworKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7CisrCisrCSAgICBwcmludGYoIlttb2Qg PSAlZF1cblxuIixubW9kKTsKKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOworKwkgICAgaWYg KCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxO VUxMKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsKKysJCX0KKysJ ICAgIHBibigiUCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJICAgIHBibigi RyIsZHNhLT5nKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKworKwkgICAgd2hpbGUobi0t KQorKwkJeworKwkJaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisrCQkJeworKwkJCWRvX3By aW50X2Vycm9ycygpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKworKwkJcGJuKCJYIixkc2EtPnBy aXZfa2V5KTsKKysJCXBibigiWSIsZHNhLT5wdWJfa2V5KTsKKysJCXB1dGMoJ1xuJyxzdGRvdXQp OworKwkJfQorKwkgICAgfQorKwl9CisrICAgIH0KKysKKyt2b2lkIHNpZ2dlbigpCisrICAgIHsK KysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAq a2V5d29yZCwgKnZhbHVlOworKyAgICBpbnQgbm1vZD0wOworKyAgICBEU0EgKmRzYT1OVUxMOwor KworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJewor KwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJ CWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5 d29yZCwiW21vZCIpKQorKwkgICAgeworKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJICAgIHBy aW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAgaWYgKGRzYSkKKysJCUZJUFNfZHNh X2ZyZWUoZHNhKTsKKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOworKwkgICAgaWYgKCFEU0Ff Z2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkK KysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsKKysJCX0KKysJICAgIHBi bigiUCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJICAgIHBibigiRyIsZHNh LT5nKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQorKwllbHNlIGlmKCFzdHJj bXAoa2V5d29yZCwiTXNnIikpCisrCSAgICB7CisrCSAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0 XTsKKysJICAgIHVuc2lnbmVkIGNoYXIgc2J1Zls2MF07CisrCSAgICB1bnNpZ25lZCBpbnQgc2xl bjsKKysJICAgIGludCBuOworKwkgICAgRVZQX1BLRVkgcGs7CisrCSAgICBFVlBfTURfQ1RYIG1j dHg7CisrCSAgICBEU0FfU0lHICpzaWc7CisrCSAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwor KworKwkgICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7CisrCSAgICBwdigiTXNnIixtc2csbik7Cisr CisrCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKKysJCXsKKysJCWRvX3ByaW50X2Vy cm9ycygpOworKwkJZXhpdCgxKTsKKysJCX0KKysJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7 CisrCSAgICBway5wa2V5LmRzYSA9IGRzYTsKKysJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5KTsK KysKKysJICAgIEVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7CisrCSAg ICBFVlBfU2lnblVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKKysJICAgIEVWUF9TaWduRmluYWwoJm1j dHgsIHNidWYsICZzbGVuLCAmcGspOworKworKwkgICAgc2lnID0gRFNBX1NJR19uZXcoKTsKKysJ ICAgIEZJUFNfZHNhX3NpZ19kZWNvZGUoc2lnLCBzYnVmLCBzbGVuKTsKKysKKysJICAgIHBibigi UiIsc2lnLT5yKTsKKysJICAgIHBibigiUyIsc2lnLT5zKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRv dXQpOworKwkgICAgRFNBX1NJR19mcmVlKHNpZyk7CisrCSAgICBFVlBfTURfQ1RYX2NsZWFudXAo Jm1jdHgpOworKwkgICAgfQorKwl9CisrCWlmIChkc2EpCisrCQlGSVBTX2RzYV9mcmVlKGRzYSk7 CisrICAgIH0KKysKKyt2b2lkIHNpZ3ZlcigpCisrICAgIHsKKysgICAgRFNBICpkc2E9TlVMTDsK KysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgdW5zaWdu ZWQgY2hhciBtc2dbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50 IG5tb2Q9MCwgbj0wOworKyAgICBEU0FfU0lHIHNnLCAqc2lnID0gJnNnOworKworKyAgICBzaWct PnIgPSBOVUxMOworKyAgICBzaWctPnMgPSBOVUxMOworKworKyAgICB3aGlsZShmZ2V0cyhidWYs c2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdv cmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJ Y29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgewor KwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJICAgIGlmKGRzYSkKKysJCUZJUFNfZHNhX2ZyZWUo ZHNhKTsKKysJICAgIGRzYT1GSVBTX2RzYV9uZXcoKTsKKysJICAgIH0KKysJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsIlAiKSkKKysJICAgIGRzYS0+cD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgZHNhLT5xPWhleDJibih2YWx1ZSk7CisrCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICB7CisrCSAgICBkc2EtPmc9aGV4MmJu KHZhbHVlKTsKKysKKysJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAg cGJuKCJQIixkc2EtPnApOworKwkgICAgcGJuKCJRIixkc2EtPnEpOworKwkgICAgcGJuKCJHIixk c2EtPmcpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9CisrCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJNc2ciKSkKKysJICAgIHsKKysJICAgIG49aGV4MmJpbih2YWx1ZSxtc2cp OworKwkgICAgcHYoIk1zZyIsbXNnLG4pOworKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiWSIpKQorKwkgICAgZHNhLT5wdWJfa2V5PWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJSIikpCisrCSAgICBzaWctPnI9aGV4MmJuKHZhbHVlKTsKKysJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIlMiKSkKKysJICAgIHsKKysJICAgIEVWUF9NRF9DVFggbWN0 eDsKKysJICAgIEVWUF9QS0VZIHBrOworKwkgICAgdW5zaWduZWQgY2hhciBzaWdidWZbNjBdOwor KwkgICAgdW5zaWduZWQgaW50IHNsZW47CisrCSAgICBpbnQgcjsKKysJICAgIEVWUF9NRF9DVFhf aW5pdCgmbWN0eCk7CisrCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOworKwkgICAgcGsucGtl eS5kc2EgPSBkc2E7CisrCSAgICBzaWctPnM9aGV4MmJuKHZhbHVlKTsKKysJCisrCSAgICBwYm4o IlkiLGRzYS0+cHViX2tleSk7CisrCSAgICBwYm4oIlIiLHNpZy0+cik7CisrCSAgICBwYm4oIlMi LHNpZy0+cyk7CisrCisrCSAgICBzbGVuID0gRklQU19kc2Ffc2lnX2VuY29kZShzaWdidWYsIHNp Zyk7CisrCSAgICBFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7Cisr CSAgICBFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBtc2csIG4pOworKwkgICAgciA9IEVWUF9WZXJp ZnlGaW5hbCgmbWN0eCwgc2lnYnVmLCBzbGVuLCAmcGspOworKwkgICAgRVZQX01EX0NUWF9jbGVh bnVwKCZtY3R4KTsKKysJCisrCSAgICBwcmludGYoIlJlc3VsdCA9ICVjXG4iLCByID09IDEgPyAn UCcgOiAnRicpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9CisrCX0KKysgICAg fQorKworK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorKyAgICB7CisrICAgIGlmKGFy Z2MgIT0gMikKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiJXMgW3ByaW1lfHBxZ3xwcWd2ZXJ8a2V5 cGFpcnxzaWdnZW58c2lndmVyXVxuIixhcmd2WzBdKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBp ZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysJZXhpdCgx KTsKKysJfQorKyAgICBpZighc3RyY21wKGFyZ3ZbMV0sInByaW1lIikpCisrCXByaW1lcygpOwor KyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFnIikpCisrCXBxZygpOworKyAgICBlbHNl IGlmKCFzdHJjbXAoYXJndlsxXSwicHFndmVyIikpCisrCXBxZ3ZlcigpOworKyAgICBlbHNlIGlm KCFzdHJjbXAoYXJndlsxXSwia2V5cGFpciIpKQorKwlrZXlwYWlyKCk7CisrICAgIGVsc2UgaWYo IXN0cmNtcChhcmd2WzFdLCJrZXl2ZXIiKSkKKysJa2V5dmVyKCk7CisrICAgIGVsc2UgaWYoIXN0 cmNtcChhcmd2WzFdLCJzaWdnZW4iKSkKKysJc2lnZ2VuKCk7CisrICAgIGVsc2UgaWYoIXN0cmNt cChhcmd2WzFdLCJzaWd2ZXIiKSkKKysJc2lndmVyKCk7CisrICAgIGVsc2UKKysJeworKwlmcHJp bnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOworKwlleGl0KDEp OworKwl9CisrCisrICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2djbXRlc3QuYworLS0tIG9wZW5zc2wtMS4w LjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMuZmlwcwkyMDEyLTA0LTI2IDE4OjAw OjUxLjM5OTc2OTI3NiArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMv Zmlwc19nY210ZXN0LmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTk3NjkyNzYgKzAyMDAKK0BAIC0w LDAgKzEsNTcxIEBACisrLyogZmlwcy9hZXMvZmlwc19nY210ZXN0LmMgKi8KKysvKiBXcml0dGVu IGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5T U0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisr ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq LworKworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrI2luY2x1ZGUgPG9wZW5zc2wvb3Bl bnNzbGNvbmYuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5o PgorKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAgIHByaW50Zigi Tm8gRklQUyBHQ00gc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrI2Vsc2UKKysK KysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0 eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIHZvaWQgZ2NtdGVz dChGSUxFICppbiwgRklMRSAqb3V0LCBpbnQgZW5jcnlwdCkKKysJeworKwljaGFyIGJ1ZlsyMDQ4 XTsKKysJY2hhciBsYnVmWzIwNDhdOworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCWludCBr ZXlsZW4gPSAtMSwgaXZsZW4gPSAtMSwgYWFkbGVuID0gLTEsIHRhZ2xlbiA9IC0xLCBwdGxlbiA9 IC0xOworKwlpbnQgcnY7CisrCWxvbmcgbDsKKysJdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTCwg Kml2ID0gTlVMTCwgKmFhZCA9IE5VTEwsICp0YWcgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpj dCA9IE5VTEwsICpwdCA9IE5VTEw7CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJY29uc3QgRVZQ X0NJUEhFUiAqZ2NtID0gTlVMTDsKKysJRklQU19jaXBoZXJfY3R4X2luaXQoJmN0eCk7CisrCisr CXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQorKwkJeworKwkJZnB1dHMo YnVmLG91dCk7CisrCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVm KSkKKysJCQljb250aW51ZTsKKysJCWlmKCFzdHJjbXAoa2V5d29yZCwiW0tleWxlbiIpKQorKwkJ CXsKKysJCQlrZXlsZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoa2V5bGVuID09IDEyOCkKKysJ CQkJZ2NtID0gRVZQX2Flc18xMjhfZ2NtKCk7CisrCQkJZWxzZSBpZiAoa2V5bGVuID09IDE5MikK KysJCQkJZ2NtID0gRVZQX2Flc18xOTJfZ2NtKCk7CisrCQkJZWxzZSBpZiAoa2V5bGVuID09IDI1 NikKKysJCQkJZ2NtID0gRVZQX2Flc18yNTZfZ2NtKCk7CisrCQkJZWxzZSAKKysJCQkJeworKwkJ CQlmcHJpbnRmKHN0ZGVyciwgIlVuc3VwcG9ydGVkIGtleWxlbiAlZFxuIiwKKysJCQkJCQkJa2V5 bGVuKTsKKysJCQkJfQorKwkJCWtleWxlbiA+Pj0gMzsKKysJCQl9CisrCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJbSVZsZW4iKSkKKysJCQlpdmxlbiA9IGF0b2kodmFsdWUpID4+IDM7Cisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJbQUFEbGVuIikpCisrCQkJYWFkbGVuID0gYXRv aSh2YWx1ZSkgPj4gMzsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltUYWdsZW4iKSkK KysJCQl0YWdsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiW1BUbGVuIikpCisrCQkJcHRsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOworKwkJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIktleSIpKQorKwkJCXsKKysJCQlrZXkgPSBoZXgyYmluX20odmFs dWUsICZsKTsKKysJCQlpZiAobCAhPSBrZXlsZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRl cnIsICJJbmNvbnNpc3RlbnQgS2V5IGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0K KysJCQl9CisrCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiSVYiKSkKKysJCQl7CisrCQkJaXYg PSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSBpdmxlbikKKysJCQkJeworKwkJ CQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBJViBsZW5ndGhcbiIpOworKwkJCQlleGl0 KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlBUIikpCisr CQkJeworKwkJCXB0ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gcHRsZW4p CisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgUFQgbGVuZ3RoXG4i KTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJDVCIpKQorKwkJCXsKKysJCQljdCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlm IChsICE9IHB0bGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50 IENUIGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiQUFEIikpCisrCQkJeworKwkJCWFhZCA9IGhleDJiaW5fbSh2YWx1 ZSwgJmwpOworKwkJCWlmIChsICE9IGFhZGxlbikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVy ciwgIkluY29uc2lzdGVudCBBQUQgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQor KwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJUYWciKSkKKysJCQl7CisrCQkJdGFn ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gdGFnbGVuKQorKwkJCQl7Cisr CQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFRhZyBsZW5ndGhcbiIpOworKwkJCQll eGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJaWYgKGVuY3J5cHQgJiYgcHQgJiYgYWFkICYmIChp diB8fCBlbmNyeXB0PT0xKSkKKysJCQl7CisrCQkJdGFnID0gT1BFTlNTTF9tYWxsb2ModGFnbGVu KTsKKysJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgZ2NtLCBOVUxMLCBOVUxMLCAxKTsKKysJCQkv KiBSZWxheCBGSVBTIGNvbnN0cmFpbnRzIGZvciB0ZXN0aW5nICovCisrCQkJTV9FVlBfQ0lQSEVS X0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVyk7CisrCQkJ RklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwgaXZsZW4s IDApOworKwkJCWlmIChlbmNyeXB0ID09IDEpCisrCQkJCXsKKysJCQkJc3RhdGljIHVuc2lnbmVk IGNoYXIgaXZfZml4ZWRbNF0gPSB7MSwyLDMsNH07CisrCQkJCWlmICghaXYpCisrCQkJCQlpdiA9 IE9QRU5TU0xfbWFsbG9jKGl2bGVuKTsKKysJCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEws IGtleSwgTlVMTCwgMSk7CisrCQkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsCisrCQkJCQkJ RVZQX0NUUkxfR0NNX1NFVF9JVl9GSVhFRCwKKysJCQkJCQk0LCBpdl9maXhlZCk7CisrCQkJCWlm ICghRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwKKysJCQkJCUVWUF9DVFJMX0dDTV9JVl9HRU4s IDAsIGl2KSkKKysJCQkJCXsKKysJCQkJCWZwcmludGYoc3RkZXJyLCAiSVYgZ2VuIGVycm9yXG4i KTsKKysJCQkJCWV4aXQoMSk7CisrCQkJCQl9CisrCQkJCU91dHB1dFZhbHVlKCJJViIsIGl2LCBp dmxlbiwgb3V0LCAwKTsKKysJCQkJfQorKwkJCWVsc2UKKysJCQkJRklQU19jaXBoZXJpbml0KCZj dHgsIE5VTEwsIGtleSwgaXYsIDEpOworKworKworKwkJCWlmIChhYWRsZW4pCisrCQkJCUZJUFNf Y2lwaGVyKCZjdHgsIE5VTEwsIGFhZCwgYWFkbGVuKTsKKysJCQlpZiAocHRsZW4pCisrCQkJCXsK KysJCQkJY3QgPSBPUEVOU1NMX21hbGxvYyhwdGxlbik7CisrCQkJCXJ2ID0gRklQU19jaXBoZXIo JmN0eCwgY3QsIHB0LCBwdGxlbik7CisrCQkJCX0KKysJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxM LCBOVUxMLCAwKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01f R0VUX1RBRywKKysJCQkJCQkJCXRhZ2xlbiwgdGFnKTsJCisrCQkJT3V0cHV0VmFsdWUoIkNUIiwg Y3QsIHB0bGVuLCBvdXQsIDApOworKwkJCU91dHB1dFZhbHVlKCJUYWciLCB0YWcsIHRhZ2xlbiwg b3V0LCAwKTsKKysJCQlpZiAoaXYpCisrCQkJCU9QRU5TU0xfZnJlZShpdik7CisrCQkJaWYgKGFh ZCkKKysJCQkJT1BFTlNTTF9mcmVlKGFhZCk7CisrCQkJaWYgKGN0KQorKwkJCQlPUEVOU1NMX2Zy ZWUoY3QpOworKwkJCWlmIChwdCkKKysJCQkJT1BFTlNTTF9mcmVlKHB0KTsKKysJCQlpZiAoa2V5 KQorKwkJCQlPUEVOU1NMX2ZyZWUoa2V5KTsKKysJCQlpZiAodGFnKQorKwkJCQlPUEVOU1NMX2Zy ZWUodGFnKTsKKysJCQlpdiA9IGFhZCA9IGN0ID0gcHQgPSBrZXkgPSB0YWcgPSBOVUxMOworKwkJ CX0JCisrCQlpZiAoIWVuY3J5cHQgJiYgdGFnKQorKwkJCXsKKysJCQlGSVBTX2NpcGhlcmluaXQo JmN0eCwgZ2NtLCBOVUxMLCBOVUxMLCAwKTsKKysJCQkvKiBSZWxheCBGSVBTIGNvbnN0cmFpbnRz IGZvciB0ZXN0aW5nICovCisrCQkJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQ X0NJUEhfRkxBR19OT05fRklQU19BTExPVyk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0 eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwgaXZsZW4sIDApOworKwkJCUZJUFNfY2lwaGVyaW5p dCgmY3R4LCBOVUxMLCBrZXksIGl2LCAwKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4 LCBFVlBfQ1RSTF9HQ01fU0VUX1RBRywgdGFnbGVuLCB0YWcpOworKwkJCWlmIChhYWRsZW4pCisr CQkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIGFhZCwgYWFkbGVuKTsKKysJCQlpZiAocHRsZW4p CisrCQkJCXsKKysJCQkJcHQgPSBPUEVOU1NMX21hbGxvYyhwdGxlbik7CisrCQkJCXJ2ID0gRklQ U19jaXBoZXIoJmN0eCwgcHQsIGN0LCBwdGxlbik7CisrCQkJCX0KKysJCQlydiA9IEZJUFNfY2lw aGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApOworKwkJCWlmIChydiA8IDApCisrCQkJCWZwcmludGYo b3V0LCAiRkFJTCIgUkVTUF9FT0wpOworKwkJCWVsc2UKKysJCQkJT3V0cHV0VmFsdWUoIlBUIiwg cHQsIHB0bGVuLCBvdXQsIDApOworKwkJCWlmIChpdikKKysJCQkJT1BFTlNTTF9mcmVlKGl2KTsK KysJCQlpZiAoYWFkKQorKwkJCQlPUEVOU1NMX2ZyZWUoYWFkKTsKKysJCQlpZiAoY3QpCisrCQkJ CU9QRU5TU0xfZnJlZShjdCk7CisrCQkJaWYgKHB0KQorKwkJCQlPUEVOU1NMX2ZyZWUocHQpOwor KwkJCWlmIChrZXkpCisrCQkJCU9QRU5TU0xfZnJlZShrZXkpOworKwkJCWlmICh0YWcpCisrCQkJ CU9QRU5TU0xfZnJlZSh0YWcpOworKwkJCWl2ID0gYWFkID0gY3QgPSBwdCA9IGtleSA9IHRhZyA9 IE5VTEw7CisrCQkJfQorKwkJfQorKwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsJCisr CX0KKysKKytzdGF0aWMgdm9pZCB4dHN0ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQpCisrCXsKKysJ Y2hhciBidWZbMjA0ODAwXTsKKysJY2hhciBsYnVmWzIwNDgwMF07CisrCWNoYXIgKmtleXdvcmQs ICp2YWx1ZTsKKysJaW50IGlubGVuID0gMDsKKysJaW50IGVuY3J5cHQgPSAwOworKwlsb25nIGw7 CisrCXVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEwsICppdiA9IE5VTEw7CisrCXVuc2lnbmVkIGNo YXIgKmluYnVmID0gTlVMTCwgKm91dGJ1ZiA9IE5VTEw7CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsK KysJY29uc3QgRVZQX0NJUEhFUiAqeHRzID0gTlVMTDsKKysJRklQU19jaXBoZXJfY3R4X2luaXQo JmN0eCk7CisrCisrCXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQorKwkJ eworKwkJZnB1dHMoYnVmLG91dCk7CisrCQlpZiAoYnVmWzBdID09ICdbJyAmJiBzdHJsZW4oYnVm KSA+PSA5KQorKwkJCXsKKysJCQlpZighc3RybmNtcChidWYsIltFTkNSWVBUXSIsIDkpKQorKwkJ CQllbmNyeXB0ID0gMTsKKysJCQllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0RFQ1JZUFRdIiwgOSkp CisrCQkJCWVuY3J5cHQgPSAwOworKwkJCX0KKysJCWlmICAoIXBhcnNlX2xpbmUoJmtleXdvcmQs ICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJLZXkiKSkKKysJCQl7CisrCQkJa2V5ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Cisr CQkJaWYgKGwgPT0gMzIpCisrCQkJCXh0cyA9IEVWUF9hZXNfMTI4X3h0cygpOworKwkJCWVsc2Ug aWYgKGwgPT0gNjQpCisrCQkJCXh0cyA9IEVWUF9hZXNfMjU2X3h0cygpOworKwkJCWVsc2UKKysJ CQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBLZXkgbGVuZ3RoXG4iKTsK KysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJpIikpCisrCQkJeworKwkJCWl2ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKGwg IT0gMTYpCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgaSBsZW5n dGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZihlbmNyeXB0 ICYmICFzdHJjbXAoa2V5d29yZCwiUFQiKSkKKysJCQl7CisrCQkJaW5idWYgPSBoZXgyYmluX20o dmFsdWUsICZsKTsKKysJCQlpbmxlbiA9IGw7CisrCQkJfQorKwkJZWxzZSBpZighZW5jcnlwdCAm JiAhc3RyY21wKGtleXdvcmQsIkNUIikpCisrCQkJeworKwkJCWluYnVmID0gaGV4MmJpbl9tKHZh bHVlLCAmbCk7CisrCQkJaW5sZW4gPSBsOworKwkJCX0KKysJCWlmIChpbmJ1ZikKKysJCQl7Cisr CQkJRklQU19jaXBoZXJpbml0KCZjdHgsIHh0cywga2V5LCBpdiwgZW5jcnlwdCk7CisrCQkJb3V0 YnVmID0gT1BFTlNTTF9tYWxsb2MoaW5sZW4pOworKwkJCUZJUFNfY2lwaGVyKCZjdHgsIG91dGJ1 ZiwgaW5idWYsIGlubGVuKTsKKysJCQlPdXRwdXRWYWx1ZShlbmNyeXB0ID8gIkNUIjoiUFQiLCBv dXRidWYsIGlubGVuLCBvdXQsIDApOworKwkJCU9QRU5TU0xfZnJlZShpbmJ1Zik7CisrCQkJT1BF TlNTTF9mcmVlKG91dGJ1Zik7CisrCQkJT1BFTlNTTF9mcmVlKGtleSk7CisrCQkJT1BFTlNTTF9m cmVlKGl2KTsKKysJCQlpdiA9IGtleSA9IGluYnVmID0gb3V0YnVmID0gTlVMTDsKKysJCQl9CQor KwkJfQorKwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsJCisrCX0KKysKKytzdGF0aWMg dm9pZCBjY210ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQpCisrCXsKKysJY2hhciBidWZbMjAwMDQ4 XTsKKysJY2hhciBsYnVmWzIwMDA0OF07CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJbG9u ZyBsOworKwl1bnNpZ25lZCBjaGFyICpLZXkgPSBOVUxMLCAqTm9uY2UgPSBOVUxMOworKwl1bnNp Z25lZCBjaGFyICpBZGF0YSA9IE5VTEwsICpQYXlsb2FkID0gTlVMTDsKKysJdW5zaWduZWQgY2hh ciAqQ1QgPSBOVUxMOworKwlpbnQgUGxlbiA9IC0xLCBObGVuID0gLTEsIFRsZW4gPSAtMSwgQWxl biA9IC0xOworKwlpbnQgZGVjciA9IDA7CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJY29uc3Qg RVZQX0NJUEhFUiAqY2NtID0gTlVMTDsKKysJRklQU19jaXBoZXJfY3R4X2luaXQoJmN0eCk7Cisr CisrCXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQorKwkJeworKwkJY2hh ciAqcDsKKysJCWZwdXRzKGJ1ZixvdXQpOworKwkJcmVkbzoKKysJCWlmICghcGFyc2VfbGluZSgm a2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJCWNvbnRpbnVlOworKworKwkJLyogSWYg c3Vycm91bmRlZCBieSBzcXVhcmUgYnJhY2tldHMgemFwIHRoZW0gKi8KKysJCWlmIChrZXl3b3Jk WzBdID09ICdbJykKKysJCQl7CisrCQkJa2V5d29yZCsrOworKwkJCXAgPSBzdHJjaHIodmFsdWUs ICddJyk7CisrCQkJaWYgKHApCisrCQkJCSpwID0gMDsKKysJCQl9CisrCQkvKiBTZWUgaWYgd2Ug aGF2ZSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHBhcmFtZXRlcnMKKysJCSAqIGlmIHNvIGNv cHkgcmVzdCBvZiBsaW5lIGJhY2sgdG8gYnVmZmVyIGFuZCByZWRvIGxhdGVyLgorKwkJICovCisr CQlwID0gc3RyY2hyKHZhbHVlLCAnLCcpOworKwkJaWYgKHApCisrCQkJeworKwkJCSpwID0gMDsK KysJCQlzdHJjcHkoYnVmLCBwICsgMSk7CisrCQkJc3RyY2F0KGJ1ZiwgIlxuIik7CisrCQkJZGVj ciA9IDE7CisrCQkJfQorKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiUGxlbiIpKQorKwkJCVBsZW4g PSBhdG9pKHZhbHVlKTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiTmxlbiIpKQorKwkJ CU5sZW4gPSBhdG9pKHZhbHVlKTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiVGxlbiIp KQorKwkJCVRsZW4gPSBhdG9pKHZhbHVlKTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwi QWxlbiIpKQorKwkJCUFsZW4gPSBhdG9pKHZhbHVlKTsKKysJCWlmIChwKQorKwkJCWdvdG8gcmVk bzsKKysJCWlmICghc3RyY21wKGtleXdvcmQsIktleSIpKQorKwkJCXsKKysJCQlpZiAoS2V5KQor KwkJCQlPUEVOU1NMX2ZyZWUoS2V5KTsKKysJCQlLZXkgPSBoZXgyYmluX20odmFsdWUsICZsKTsK KysJCQlpZiAobCA9PSAxNikKKysJCQkJY2NtID0gRVZQX2Flc18xMjhfY2NtKCk7CisrCQkJZWxz ZSBpZiAobCA9PSAyNCkKKysJCQkJY2NtID0gRVZQX2Flc18xOTJfY2NtKCk7CisrCQkJZWxzZSBp ZiAobCA9PSAzMikKKysJCQkJY2NtID0gRVZQX2Flc18yNTZfY2NtKCk7CisrCQkJZWxzZQorKwkJ CQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEtleSBsZW5ndGhcbiIpOwor KwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCJOb25jZSIpKQorKwkJCXsKKysJCQlpZiAoTm9uY2UpCisrCQkJCU9QRU5TU0xfZnJlZShOb25j ZSk7CisrCQkJTm9uY2UgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSBObGVu KQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IG5vbmNlIGxlbmd0 aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsIlBheWxvYWQiKSAmJiAhZGVjcikKKysJCQl7CisrCQkJUGF5bG9hZCA9IGhleDJi aW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChQbGVuICYmIGwgIT0gUGxlbikKKysJCQkJeworKwkJ CQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBQYXlsb2FkIGxlbmd0aFxuIik7CisrCQkJ CWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIkFk YXRhIikpCisrCQkJeworKwkJCWlmIChBZGF0YSkKKysJCQkJT1BFTlNTTF9mcmVlKEFkYXRhKTsK KysJCQlBZGF0YSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChBbGVuICYmIGwgIT0g QWxlbikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBQYXlsb2Fk IGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsIkNUIikgJiYgZGVjcikKKysJCQl7CisrCQkJQ1QgPSBoZXgyYmluX20o dmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSAoUGxlbiArIFRsZW4pKQorKwkJCQl7CisrCQkJCWZw cmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IENUIGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7 CisrCQkJCX0KKysJCQl9CisrCQlpZiAoUGF5bG9hZCkKKysJCQl7CisrCQkJRklQU19jaXBoZXJp bml0KCZjdHgsIGNjbSwgTlVMTCwgTlVMTCwgMSk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwo JmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwgTmxlbiwgMCk7CisrCQkJRklQU19jaXBoZXJf Y3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsIFRsZW4sIDApOworKwkJCUZJUFNf Y2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBLZXksIE5vbmNlLCAxKTsKKysKKysJCQlGSVBTX2NpcGhl cigmY3R4LCBOVUxMLCBOVUxMLCBQbGVuKTsKKysJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBB ZGF0YSwgQWxlbik7CisrCQkJQ1QgPSBPUEVOU1NMX21hbGxvYyhQbGVuICsgVGxlbik7CisrCQkJ RklQU19jaXBoZXIoJmN0eCwgQ1QsIFBheWxvYWQsIFBsZW4pOworKwkJCUZJUFNfY2lwaGVyX2N0 eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9HRVRfVEFHLCBUbGVuLAorKwkJCQkJCUNUICsgUGxl bik7CisrCQkJT3V0cHV0VmFsdWUoIkNUIiwgQ1QsIFBsZW4gKyBUbGVuLCBvdXQsIDApOworKwkJ CU9QRU5TU0xfZnJlZShDVCk7CisrCQkJT1BFTlNTTF9mcmVlKFBheWxvYWQpOworKwkJCUNUID0g UGF5bG9hZCA9IE5VTEw7CisrCQkJfQorKwkJaWYgKENUKQorKwkJCXsKKysJCQlpbnQgcnY7Cisr CQkJaW50IGxlbiA9IFBsZW4gPT0gMCA/IDE6IFBsZW47CisrCQkJRklQU19jaXBoZXJpbml0KCZj dHgsIGNjbSwgTlVMTCwgTlVMTCwgMCk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwg RVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwgTmxlbiwgMCk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0 cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsCisrCQkJCQkJVGxlbiwgQ1QgKyBQbGVuKTsK KysJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwgS2V5LCBOb25jZSwgMCk7CisrCQkJRklQ U19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgUGxlbik7CisrCQkJRklQU19jaXBoZXIoJmN0eCwg TlVMTCwgQWRhdGEsIEFsZW4pOworKwkJCVBheWxvYWQgPSBPUEVOU1NMX21hbGxvYyhsZW4pOwor KwkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwgUGF5bG9hZCwgQ1QsIFBsZW4pOworKwkJCWlmIChy diA+PSAwKQorKwkJCQl7CisrCQkJCWlmIChydiA9PSAwKQorKwkJCQkJUGF5bG9hZFswXSA9IDA7 CisrCQkJCWZwdXRzKCJSZXN1bHQgPSBQYXNzIiBSRVNQX0VPTCwgb3V0KTsKKysJCQkJT3V0cHV0 VmFsdWUoIlBheWxvYWQiLCBQYXlsb2FkLCBsZW4sIG91dCwgMCk7CisrCQkJCX0KKysJCQllbHNl CisrCQkJCWZwdXRzKCJSZXN1bHQgPSBGYWlsIiBSRVNQX0VPTCwgb3V0KTsKKysJCQlPUEVOU1NM X2ZyZWUoQ1QpOworKwkJCU9QRU5TU0xfZnJlZShQYXlsb2FkKTsKKysJCQlDVCA9IFBheWxvYWQg PSBOVUxMOworKwkJCX0KKysJCX0KKysJaWYgKEtleSkKKysJCU9QRU5TU0xfZnJlZShLZXkpOwor KwlpZiAoTm9uY2UpCisrCQlPUEVOU1NMX2ZyZWUoTm9uY2UpOworKwlpZiAoQWRhdGEpCisrCQlP UEVOU1NMX2ZyZWUoQWRhdGEpOworKwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsKKysJ fQorKworKyNpZmRlZiBGSVBTX0FMR1ZTCisraW50IGZpcHNfZ2NtdGVzdF9tYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKKysjZWxzZQorK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK KysjZW5kaWYKKysJeworKwlpbnQgZW5jcnlwdDsKKysJaW50IHh0cyA9IDAsIGNjbSA9IDA7Cisr CUZJTEUgKmluLCAqb3V0OworKwlpZiAoYXJnYyA9PSA0KQorKwkJeworKwkJaW4gPSBmb3Blbihh cmd2WzJdLCAiciIpOworKwkJaWYgKCFpbikKKysJCQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJF cnJvciBvcGVuaW5nIGlucHV0IGZpbGVcbiIpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKwkJb3V0 ID0gZm9wZW4oYXJndlszXSwgInciKTsKKysJCWlmICghb3V0KQorKwkJCXsKKysJCQlmcHJpbnRm KHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGVcbiIpOworKwkJCWV4aXQoMSk7Cisr CQkJfQorKwkJfQorKwllbHNlIGlmIChhcmdjID09IDIpCisrCQl7CisrCQlpbiA9IHN0ZGluOwor KwkJb3V0ID0gc3Rkb3V0OworKwkJfQorKwllbHNlCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwi JXMgWy1lbmNyeXB0fC1kZWNyeXB0XVxuIixhcmd2WzBdKTsKKysJCWV4aXQoMSk7CisrCQl9Cisr CWZpcHNfYWxndGVzdF9pbml0KCk7CisrCWlmKCFzdHJjbXAoYXJndlsxXSwiLWVuY3J5cHQiKSkK KysJCWVuY3J5cHQgPSAxOworKwllbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwiLWVuY3J5cHRJVmV4 dCIpKQorKwkJZW5jcnlwdCA9IDI7CisrCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCItZGVjcnlw dCIpKQorKwkJZW5jcnlwdCA9IDA7CisrCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCItY2NtIikp CisrCQljY20gPSAxOworKwllbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwiLXh0cyIpKQorKwkJeHRz ID0gMTsKKysJZWxzZQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRv ICVzLlxuIixhcmd2WzFdKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCisrCWlmIChjY20pCisrCQlj Y210ZXN0KGluLCBvdXQpOworKwllbHNlIGlmICh4dHMpCisrCQl4dHN0ZXN0KGluLCBvdXQpOwor KwllbHNlCisrCQlnY210ZXN0KGluLCBvdXQsIGVuY3J5cHQpOworKworKwlpZiAoYXJnYyA9PSA0 KQorKwkJeworKwkJZmNsb3NlKGluKTsKKysJCWZjbG9zZShvdXQpOworKwkJfQorKworKwlyZXR1 cm4gMDsKKyt9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcm5ndnMuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMv Zmlwc19ybmd2cy5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3Ju Z3ZzLmMuZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjM5OTc2OTI3NiArMDIwMAorKysrIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCTIwMTItMDQtMjYgMTg6MDA6 NTEuMzk5NzY5Mjc2ICswMjAwCitAQCAtMCwwICsxLDIzMCBAQAorKy8qCisrICogQ3J1ZGUgdGVz dCBkcml2ZXIgZm9yIHByb2Nlc3NpbmcgdGhlIFZTVCBhbmQgTUNUIHRlc3R2ZWN0b3IgZmlsZXMK KysgKiBnZW5lcmF0ZWQgYnkgdGhlIENNVlAgUk5HVlMgcHJvZHVjdC4KKysgKgorKyAqIE5vdGUg dGhlIGlucHV0IGZpbGVzIGFyZSBhc3N1bWVkIHRvIGhhdmUgYSBfdmVyeV8gc3BlY2lmaWMgZm9y bWF0CisrICogYXMgZGVzY3JpYmVkIGluIHRoZSBOSVNUIGRvY3VtZW50ICJUaGUgUmFuZG9tIE51 bWJlciBHZW5lcmF0b3IKKysgKiBWYWxpZGF0aW9uIFN5c3RlbSAoUk5HVlMpIiwgTWF5IDI1LCAy MDA0LgorKyAqCisrICovCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysj aWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSTkcgc3VwcG9y dFxuIik7CisrICAgIHJldHVybiAwOworK30KKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94 NTA5djMuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisr I2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrdm9pZCB2c3QoKQorKyAgICB7CisrICAgIHVuc2ln bmVkIGNoYXIgKmtleSA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgKnYgPSBOVUxMOworKyAg ICB1bnNpZ25lZCBjaGFyICpkdCA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgcmV0WzE2XTsK KysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAq a2V5d29yZCwgKnZhbHVlOworKyAgICBsb25nIGksIGtleWxlbjsKKysKKysgICAga2V5bGVuID0g MDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisr CXsKKysJZnB1dHMoYnVmLHN0ZG91dCk7CisrCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5 XSIsIDEzKSkKKysJCWtleWxlbiA9IDE2OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAx OTItS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDI0OworKwllbHNlIGlmKCFzdHJuY21wKGJ1Ziwi W0FFUyAyNTYtS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDMyOworKwlpZiAoIXBhcnNlX2xpbmUo JmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVlOworKwlpZighc3RyY21w KGtleXdvcmQsIktleSIpKQorKwkgICAgeworKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7 CisrCSAgICBpZiAoaSAhPSBrZXlsZW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFs aWQga2V5IGxlbmd0aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKKysJCXJldHVybjsKKysJ CX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikpCisrCSAgICB7Cisr CSAgICBkdD1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7Cisr CQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJ CX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkKKysJICAgIHsKKysJ ICAgIHY9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJ ZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0K KysKKysJICAgIGlmICgha2V5IHx8ICFkdCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWlz c2luZyBrZXkgb3IgRFRcbiIpOworKwkJcmV0dXJuOworKwkJfQorKworKwkgICAgRklQU194OTMx X3NldF9rZXkoa2V5LCBrZXlsZW4pOworKwkgICAgRklQU194OTMxX3NlZWQodiwxNik7CisrCSAg ICBGSVBTX3g5MzFfc2V0X2R0KGR0KTsKKysJICAgIGlmIChGSVBTX3g5MzFfYnl0ZXMocmV0LDE2 KSA8PSAwKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFs dWVcbiIpOworKwkgICAgICAgIHJldHVybjsKKysJICAgICAgICB9CisrCisrCSAgICBwdigiUiIs cmV0LDE2KTsKKysJICAgIE9QRU5TU0xfZnJlZShrZXkpOworKwkgICAga2V5ID0gTlVMTDsKKysJ ICAgIE9QRU5TU0xfZnJlZShkdCk7CisrCSAgICBkdCA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2Zy ZWUodik7CisrCSAgICB2ID0gTlVMTDsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrdm9pZCBt Y3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEw7CisrICAgIHVuc2ln bmVkIGNoYXIgKnYgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyICpkdCA9IE5VTEw7CisrICAg IHVuc2lnbmVkIGNoYXIgcmV0WzE2XTsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIg bGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBsb25nIGksIGtl eWxlbjsKKysgICAgaW50IGo7CisrCisrICAgIGtleWxlbiA9IDA7CisrCisrICAgIHdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWZwdXRzKGJ1ZixzdGRv dXQpOworKwlpZighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0iLCAxMykpCisrCQlrZXlsZW4g PSAxNjsKKysJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCisrCQlr ZXlsZW4gPSAyNDsKKysJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykp CisrCQlrZXlsZW4gPSAzMjsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxi dWYsIGJ1ZikpCisrCQljb250aW51ZTsKKysJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKKysJ ICAgIHsKKysJICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0ga2V5 bGVuKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVj dGluZyAlbGRcbiIsIGtleWxlbik7CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2Ug aWYoIXN0cmNtcChrZXl3b3JkLCJEVCIpKQorKwkgICAgeworKwkgICAgZHQ9aGV4MmJpbl9tKHZh bHVlLCZpKTsKKysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJ bnZhbGlkIERUIGxlbmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2Ug aWYoIXN0cmNtcChrZXl3b3JkLCJWIikpCisrCSAgICB7CisrCSAgICB2PWhleDJiaW5fbSh2YWx1 ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52 YWxpZCBWIGxlbmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBpZiAoIWtleSB8 fCAhZHQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsK KysJCXJldHVybjsKKysJCX0KKysKKysJICAgIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVu KTsKKysJICAgIEZJUFNfeDkzMV9zZWVkKHYsMTYpOworKwkgICAgZm9yIChpID0gMDsgaSA8IDEw MDAwOyBpKyspCisrCQl7CisrCQkgICAgRklQU194OTMxX3NldF9kdChkdCk7CisrCQkgICAgaWYg KEZJUFNfeDkzMV9ieXRlcyhyZXQsMTYpIDw9IDApCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJy LCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKKysJCSAgICAgICAgcmV0dXJuOworKwkJ ICAgICAgICB9CisrCQkgICAgLyogSW5jcmVtZW50IERUICovCisrCQkgICAgZm9yIChqID0gMTU7 IGogPj0gMDsgai0tKQorKwkJCXsKKysJCQlkdFtqXSsrOworKwkJCWlmIChkdFtqXSkKKysJCQkJ YnJlYWs7CisrCQkJfQorKwkJfQorKworKwkgICAgcHYoIlIiLHJldCwxNik7CisrCSAgICBPUEVO U1NMX2ZyZWUoa2V5KTsKKysJICAgIGtleSA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUoZHQp OworKwkgICAgZHQgPSBOVUxMOworKwkgICAgT1BFTlNTTF9mcmVlKHYpOworKwkgICAgdiA9IE5V TEw7CisrCSAgICB9CisrCX0KKysgICAgfQorKworK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiph cmd2KQorKyAgICB7CisrICAgIGlmKGFyZ2MgIT0gMikKKysJeworKwlmcHJpbnRmKHN0ZGVyciwi JXMgW21jdHx2c3RdXG4iLGFyZ3ZbMF0pOworKwlleGl0KDEpOworKwl9CisrICAgIGlmKCFGSVBT X21vZGVfc2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlleGl0KDEpOworKwl9 CisrICAgIEZJUFNfeDkzMV9yZXNldCgpOworKyAgICBpZiAoIUZJUFNfeDkzMV90ZXN0X21vZGUo KSkKKysJeworKwlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHNldHRpbmcgUFJORyB0ZXN0IG1vZGVc biIpOworKwlkb19wcmludF9lcnJvcnMoKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBpZighc3Ry Y21wKGFyZ3ZbMV0sIm1jdCIpKQorKwltY3QoKTsKKysgICAgZWxzZSBpZighc3RyY21wKGFyZ3Zb MV0sInZzdCIpKQorKwl2c3QoKTsKKysgICAgZWxzZQorKwl7CisrCWZwcmludGYoc3RkZXJyLCJE b24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7CisrCWV4aXQoMSk7CisrCX0KKysKKysg ICAgcmV0dXJuIDA7CisrICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuMzk5NzY5Mjc2 ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0 LmMJMjAxMi0wNC0yNiAxODowMDo1MS4zOTk3NjkyNzYgKzAyMDAKK0BAIC0wLDAgKzEsMzkwIEBA CisrLyogZmlwc19yc2FndGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVu c29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDA1 LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1LDIwMDcgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisr ICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu CisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlz IHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMg WW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisr ICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrCisrI2lmbmRlZiBPUEVO U1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAg cHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysK KysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK2ludCByc2FfdGVzdChGSUxF ICpvdXQsIEZJTEUgKmluKTsKKytzdGF0aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBS U0EgKnJzYSwKKysJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwKKysJCUJJ R05VTSAqZSk7Cisrc3RhdGljIGludCByc2FfcHJpbnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2Es CisrCQlCSUdOVU0gKlhxMSwgQklHTlVNICpYcTIsIEJJR05VTSAqWHEpOworKworK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBO VUxMOworKworKwlpbnQgcmV0ID0gMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCQl7 CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoYXJn YyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAi ciIpOworKworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91 dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8g ZW5kOworKwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFU QUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQor KworKwlpZiAoIXJzYV90ZXN0KG91dCwgaW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJG QVRBTCBSU0FHVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBlbmQ7Cisr CQl9CisrCWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJldCkKKysJCWRv X3ByaW50X2Vycm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZjbG9z ZShpbik7CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7Cisr CisrCXJldHVybiByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4J MTAyNDAKKysKKytpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikKKysJeworKwljaGFy ICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOwor KwlSU0EgKnJzYSA9IE5VTEw7CisrCUJJR05VTSAqWHAxID0gTlVMTCwgKlhwMiA9IE5VTEwsICpY cCA9IE5VTEw7CisrCUJJR05VTSAqWHExID0gTlVMTCwgKlhxMiA9IE5VTEwsICpYcSA9IE5VTEw7 CisrCUJJR05VTSAqZSA9IE5VTEw7CisrCWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7Cisr CisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCWxp bmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFs aW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCXdoaWxlIChmZ2V0cyhv bGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJ c3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyog U2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikq a2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisr CQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3 aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCB8fCAq a2V5d29yZD09J1snKQorKwkJCXsKKysJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQor KwkJCQlnb3RvIGVycm9yOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsK KysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAwOworKwkJdmFsdWUg PSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJ CXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysK KysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUg KyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJaWYgKCFzdHJjbXAoa2V5 d29yZCwgInhwMSIpKQorKwkJCXsKKysJCQlpZiAoWHAxIHx8ICFkb19oZXgyYm4oJlhwMSx2YWx1 ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAieHAyIikpCisrCQkJeworKwkJCWlmIChYcDIgfHwgIWRvX2hleDJibigmWHAyLHZh bHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJYcCIpKQorKwkJCXsKKysJCQlpZiAoWHAgfHwgIWRvX2hleDJibigmWHAsdmFs dWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgInhxMSIpKQorKwkJCXsKKysJCQlpZiAoWHExIHx8ICFkb19oZXgyYm4oJlhxMSx2 YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAieHEyIikpCisrCQkJeworKwkJCWlmIChYcTIgfHwgIWRvX2hleDJibigmWHEy LHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJYcSIpKQorKwkJCXsKKysJCQlpZiAoWHEgfHwgIWRvX2hleDJibigmWHEs dmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgImUiKSkKKysJCQl7CisrCQkJaWYgKGUgfHwgIWRvX2hleDJibigmZSx2YWx1 ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAicDEiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgInAyIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJw IikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxMSIpKQor KwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTIiKSkKKysJCQlj b250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInEiKSkKKysJCQljb250aW51 ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKKysJCQljb250aW51ZTsKKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImQiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UK KysJCQlnb3RvIHBhcnNlX2Vycm9yOworKworKwkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisr CQlpZiAoZSAmJiBYcDEgJiYgWHAyICYmIFhwKQorKwkJCXsKKysJCQlyc2EgPSBGSVBTX3JzYV9u ZXcoKTsKKysJCQlpZiAoIXJzYSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlpZiAoIXJzYV9wcmlu dGtleTEob3V0LCByc2EsIFhwMSwgWHAyLCBYcCwgZSkpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJ Qk5fZnJlZShYcDEpOworKwkJCVhwMSA9IE5VTEw7CisrCQkJQk5fZnJlZShYcDIpOworKwkJCVhw MiA9IE5VTEw7CisrCQkJQk5fZnJlZShYcCk7CisrCQkJWHAgPSBOVUxMOworKwkJCUJOX2ZyZWUo ZSk7CisrCQkJZSA9IE5VTEw7CisrCQkJfQorKworKwkJaWYgKHJzYSAmJiBYcTEgJiYgWHEyICYm IFhxKQorKwkJCXsKKysJCQlpZiAoIXJzYV9wcmludGtleTIob3V0LCByc2EsIFhxMSwgWHEyLCBY cSkpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJQk5fZnJlZShYcTEpOworKwkJCVhxMSA9IE5VTEw7 CisrCQkJQk5fZnJlZShYcTIpOworKwkJCVhxMiA9IE5VTEw7CisrCQkJQk5fZnJlZShYcSk7Cisr CQkJWHEgPSBOVUxMOworKwkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKKysJCQlyc2EgPSBOVUxMOwor KwkJCX0KKysJCX0KKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1 ZikKKysJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNT TF9mcmVlKGxpbmVidWYpOworKworKwlpZiAoWHAxKQorKwkJQk5fZnJlZShYcDEpOworKwlpZiAo WHAyKQorKwkJQk5fZnJlZShYcDIpOworKwlpZiAoWHApCisrCQlCTl9mcmVlKFhwKTsKKysJaWYg KFhxMSkKKysJCUJOX2ZyZWUoWHExKTsKKysJaWYgKFhxMSkKKysJCUJOX2ZyZWUoWHExKTsKKysJ aWYgKFhxMikKKysJCUJOX2ZyZWUoWHEyKTsKKysJaWYgKFhxKQorKwkJQk5fZnJlZShYcSk7Cisr CWlmIChlKQorKwkJQk5fZnJlZShlKTsKKysJaWYgKHJzYSkKKysJCUZJUFNfcnNhX2ZyZWUocnNh KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysK KysJZ290byBlcnJvcjsKKysKKysJfQorKworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MShGSUxF ICpvdXQsIFJTQSAqcnNhLAorKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdOVU0gKlhw LAorKwkJQklHTlVNICplKQorKwl7CisrCWludCByZXQgPSAwOworKwlCSUdOVU0gKnAxID0gTlVM TCwgKnAyID0gTlVMTDsKKysJcDEgPSBCTl9uZXcoKTsKKysJcDIgPSBCTl9uZXcoKTsKKysJaWYg KCFwMSB8fCAhcDIpCisrCQlnb3RvIGVycm9yOworKworKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9l eChyc2EsIHAxLCBwMiwgTlVMTCwgTlVMTCwgWHAxLCBYcDIsIFhwLAorKwkJCQkJCU5VTEwsIE5V TEwsIE5VTEwsIGUsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysKKysJZG9fYm5fcHJpbnRfbmFt ZShvdXQsICJwMSIsIHAxKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMiIsIHAyKTsKKysJ ZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwIiwgcnNhLT5wKTsKKysKKysJcmV0ID0gMTsKKysKKysJ ZXJyb3I6CisrCWlmIChwMSkKKysJCUJOX2ZyZWUocDEpOworKwlpZiAocDIpCisrCQlCTl9mcmVl KHAyKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5 MihGSUxFICpvdXQsIFJTQSAqcnNhLAorKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdO VU0gKlhxKQorKwl7CisrCWludCByZXQgPSAwOworKwlCSUdOVU0gKnExID0gTlVMTCwgKnEyID0g TlVMTDsKKysJcTEgPSBCTl9uZXcoKTsKKysJcTIgPSBCTl9uZXcoKTsKKysJaWYgKCFxMSB8fCAh cTIpCisrCQlnb3RvIGVycm9yOworKworKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5V TEwsIE5VTEwsIHExLCBxMiwgTlVMTCwgTlVMTCwgTlVMTCwKKysJCQkJCQlYcTEsIFhxMiwgWHEs IE5VTEwsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQs ICJxMSIsIHExKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMiIsIHEyKTsKKysJZG9fYm5f cHJpbnRfbmFtZShvdXQsICJxIiwgcnNhLT5xKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJu IiwgcnNhLT5uKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJkIiwgcnNhLT5kKTsKKysKKysJ cmV0ID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChxMSkKKysJCUJOX2ZyZWUocTEpOworKwlpZiAo cTIpCisrCQlCTl9mcmVlKHEyKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKworKyNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYworLS0t IG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jLmZpcHMJMjAx Mi0wNC0yNiAxODowMDo1MS40MDA3NjkyOTggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwMDc2OTI5 OCArMDIwMAorQEAgLTAsMCArMSwzNzAgQEAKKysvKiBmaXBzX3JzYXN0ZXN0LmMgKi8KKysvKiBX cml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhl IE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBD b3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz CisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwor KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9y Zy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisr ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0 amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysj aW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv aG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3Jz YS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYz Lmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysg ICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgor KworK3N0YXRpYyBpbnQgcnNhX3N0ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVu KTsKKytzdGF0aWMgaW50IHJzYV9wcmludHNpZyhGSUxFICpvdXQsIFJTQSAqcnNhLCBjb25zdCBF VlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLCBpbnQgU2Fs dGxlbik7CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUg KmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCisrCWludCByZXQgPSAxLCBTYWx0bGVuID0gLTE7 CisrCisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7 CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNh bHRsZW4iLCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOworKwkJ aWYgKFNhbHRsZW4gPCAwKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZh bGlkIHNhbHQgbGVuZ3RoXG4iKTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQlhcmdjIC09IDI7 CisrCQlhcmd2ICs9IDI7CisrCQl9CisrCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgi LXg5MzEiLCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSAtMjsKKysJCWFyZ2MtLTsKKysJ CWFyZ3YrKzsKKysJCX0KKysKKysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVs c2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJ b3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKwor KwlpZiAoIWluKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFs aXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisr CQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJv clxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFyc2Ffc3Rlc3Qob3V0LCBpbiwg U2FsdGxlbikpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQVNURVNUIGZpbGUg cHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0 ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAocmV0KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7Cisr CisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAm JiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysK KysJfQorKworKyNkZWZpbmUgUlNBX1RFU1RfTUFYTElORUxFTgkxMDI0MAorKworK2ludCByc2Ff c3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRsZW4pCisrCXsKKysJY2hhciAqbGlu ZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJUlNB ICpyc2EgPSBOVUxMOworKwljb25zdCBFVlBfTUQgKmRnc3QgPSBOVUxMOworKwl1bnNpZ25lZCBj aGFyICpNc2cgPSBOVUxMOworKwlsb25nIE1zZ2xlbiA9IC0xOworKwlpbnQga2V5bGVuID0gLTEs IGN1cnJlbnRfa2V5bGVuID0gLTE7CisrCWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7Cisr CisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCWxp bmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFs aW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCXdoaWxlIChmZ2V0cyhv bGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJ c3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyog U2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikq a2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisr CQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IGp1c3QgY29weSAq LworKwkJaWYgKCFwKQorKwkJCXsKKysJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQor KwkJCQlnb3RvIGVycm9yOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsK KysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAwOworKwkJdmFsdWUg PSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJ CXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysK KysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUg KyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJLyogTG9vayBmb3IgW21v ZCA9IFhYWF0gZm9yIGtleSBsZW5ndGggKi8KKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJb bW9kIikpCisrCQkJeworKwkJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKwkJCWlm ICgqcCAhPSAnXScpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJKnAgPSAwOworKwkJCWtl eWxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChrZXlsZW4gPCAwKQorKwkJCQlnb3RvIHBhcnNl X2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNIQUFsZyIpKQor KwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTEiKSkKKysJCQkJZGdzdCA9IEVWUF9z aGExKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTIyNCIpKQorKwkJCQlkZ3N0 ID0gRVZQX3NoYTIyNCgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyNTYiKSkK KysJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAi U0hBMzg0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMzg0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNt cCh2YWx1ZSwgIlNIQTUxMiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTUxMigpOworKwkJCWVsc2UK KysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwKKysJCQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQg YWxnb3JpdGhtIFwiJXNcIlxuIiwKKysJCQkJCQkJCXZhbHVlKTsKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIp KQorKwkJCXsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChz dHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlNc2cgPSBoZXgy YmluX20odmFsdWUsICZNc2dsZW4pOworKwkJCWlmICghTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOworKwkJCX0KKysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJLyogSWYga2V5 IGxlbmd0aCBoYXMgY2hhbmdlZCwgZ2VuZXJhdGUgYW5kIG91dHB1dCBwdWJsaWMKKysJCSAqIGtl eSBjb21wb25lbnRzIG9mIG5ldyBSU0EgcHJpdmF0ZSBrZXkuCisrCQkgKi8KKysKKysJCWlmIChr ZXlsZW4gIT0gY3VycmVudF9rZXlsZW4pCisrCQkJeworKwkJCUJJR05VTSAqYm5fZTsKKysJCQlp ZiAocnNhKQorKwkJCQlGSVBTX3JzYV9mcmVlKHJzYSk7CisrCQkJcnNhID0gRklQU19yc2FfbmV3 KCk7CisrCQkJaWYgKCFyc2EpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJYm5fZSA9IEJOX25ldygp OworKwkJCWlmICghYm5fZSB8fCAhQk5fc2V0X3dvcmQoYm5fZSwgMHgxMDAxKSkKKysJCQkJZ290 byBlcnJvcjsKKysJCQlpZiAoIVJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChyc2EsIGtleWxlbiwg Ym5fZSwgTlVMTCkpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJQk5fZnJlZShibl9lKTsKKysJCQlm cHV0cygibiA9ICIsIG91dCk7CisrCQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPm4pOworKwkJCWZw dXRzKCJcbmUgPSAiLCBvdXQpOworKwkJCWRvX2JuX3ByaW50KG91dCwgcnNhLT5lKTsKKysJCQlm cHV0cygiXG4iLCBvdXQpOworKwkJCWN1cnJlbnRfa2V5bGVuID0ga2V5bGVuOworKwkJCX0KKysK KysJCWlmIChNc2cgJiYgZGdzdCkKKysJCQl7CisrCQkJaWYgKCFyc2FfcHJpbnRzaWcob3V0LCBy c2EsIGRnc3QsIE1zZywgTXNnbGVuLAorKwkJCQkJCQkJU2FsdGxlbikpCisrCQkJCWdvdG8gZXJy b3I7CisrCQkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQl9CisrCisr CQl9CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlP UEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShs aW5lYnVmKTsKKysJaWYgKHJzYSkKKysJCUZJUFNfcnNhX2ZyZWUocnNhKTsKKysKKysJcmV0dXJu IHJldDsKKysKKysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFy c2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsK KysKKysJfQorKworK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2Es IGNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4s IGludCBTYWx0bGVuKQorKwl7CisrCWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyICpzaWdi dWYgPSBOVUxMOworKwlpbnQgaSwgc2lnbGVuOworKwkvKiBFVlBfUEtFWSBzdHJ1Y3R1cmUgKi8K KysJRVZQX1BLRVkgcGs7CisrCUVWUF9NRF9DVFggY3R4OworKwlway50eXBlID0gRVZQX1BLRVlf UlNBOworKwlway5wa2V5LnJzYSA9IHJzYTsKKysKKysJc2lnbGVuID0gUlNBX3NpemUocnNhKTsK KysJc2lnYnVmID0gT1BFTlNTTF9tYWxsb2Moc2lnbGVuKTsKKysJaWYgKCFzaWdidWYpCisrCQln b3RvIGVycm9yOworKworKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7CisrCisrCWlmIChTYWx0bGVu ID49IDApCisrCQl7CisrCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsCisrCQkJRVZQX01E X0NUWF9GTEFHX1BBRF9QU1MgfCAoU2FsdGxlbiA8PCAxNikpOworKwkJfQorKwllbHNlIGlmIChT YWx0bGVuID09IC0yKQorKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1g5MzEpOworKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxM KSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25VcGRhdGUoJmN0eCwgTXNnLCBNc2ds ZW4pKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBfU2lnbkZpbmFsKCZjdHgsIHNpZ2J1Ziwg KHVuc2lnbmVkIGludCAqKSZzaWdsZW4sICZwaykpCisrCQlnb3RvIGVycm9yOworKworKwlFVlBf TURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWZwdXRzKCJTID0gIiwgb3V0KTsKKysKKysJZm9y IChpID0gMDsgaSA8IHNpZ2xlbjsgaSsrKQorKwkJZnByaW50ZihvdXQsICIlMDJYIiwgc2lnYnVm W2ldKTsKKysKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6 CisrCisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFi L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuNDAwNzY5 Mjk4ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0 ZXN0LmMJMjAxMi0wNC0yNiAxODowMDo1MS40MDA3NjkyOTggKzAyMDAKK0BAIC0wLDAgKzEsMzc3 IEBACisrLyogZmlwc19yc2F2dGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4g SGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAy MDA1LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAq ICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wu b3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBw cm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlv dW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAq CisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2lu Y2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKworKyNpZm5kZWYgT1BFTlNT TF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHBy aW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisr I2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytpbnQgcnNhX3Rlc3QoRklMRSAq b3V0LCBGSUxFICppbiwgaW50IHNhbHRsZW4pOworK3N0YXRpYyBpbnQgcnNhX3ByaW50dmVyKEZJ TEUgKm91dCwKKysJCUJJR05VTSAqbiwgQklHTlVNICplLAorKwkJY29uc3QgRVZQX01EICpkZ3N0 LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwKKysJCXVuc2lnbmVkIGNoYXIg KlMsIGxvbmcgU2xlbiwgaW50IFNhbHRsZW4pOworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOworKworKwlpbnQg cmV0ID0gMTsKKysJaW50IFNhbHRsZW4gPSAtMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkp CisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlp ZiAoKGFyZ2MgPiAyKSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQorKwkJeworKwkJ U2FsdGxlbiA9IGF0b2koYXJndlsyXSk7CisrCQlpZiAoU2FsdGxlbiA8IDApCisrCQkJeworKwkJ CWZwcmludGYoc3RkZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOworKwkJCWdv dG8gZW5kOworKwkJCX0KKysJCWFyZ2MgLT0gMjsKKysJCWFyZ3YgKz0gMjsKKysJCX0KKysJZWxz ZSBpZiAoKGFyZ2MgPiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQorKwkJeworKwkJ U2FsdGxlbiA9IC0yOworKwkJYXJnYy0tOworKwkJYXJndisrOworKwkJfQorKworKwlpZiAoYXJn YyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAi ciIpOworKworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91 dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8g ZW5kOworKwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFU QUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQor KworKwlpZiAoIXJzYV90ZXN0KG91dCwgaW4sIFNhbHRsZW4pKQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsICJGQVRBTCBSU0FWVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290 byBlbmQ7CisrCQl9CisrCWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJl dCkKKysJCWRvX3ByaW50X2Vycm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkK KysJCWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3Nl KG91dCk7CisrCisrCXJldHVybiByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFJTQV9URVNUX01B WExJTkVMRU4JMTAyNDAKKysKKytpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50 IFNhbHRsZW4pCisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNo YXIgKmtleXdvcmQsICp2YWx1ZTsKKysJY29uc3QgRVZQX01EICpkZ3N0ID0gTlVMTDsKKysJQklH TlVNICpuID0gTlVMTCwgKmUgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMLCAq UyA9IE5VTEw7CisrCWxvbmcgTXNnbGVuLCBTbGVuOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxu dW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVM RU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Cisr CisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKworKwl3aGls ZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxu dW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1 ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9yID0g c2lnbiAqLworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBv ciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVzdCBjb3B5ICovCisrCQlp ZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKKysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBv dXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlx ID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsK KysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZh bHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZh bHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJ cCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8 fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlmICgh c3RyY21wKGtleXdvcmQsICJuIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZuLHZhbHVl KSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJlIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZlLHZhbHVlKSkKKysJCQkJ Z290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJT SEFBbGciKSkKKysJCQl7CisrCQkJaWYgKCFzdHJjbXAodmFsdWUsICJTSEExIikpCisrCQkJCWRn c3QgPSBFVlBfc2hhMSgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyMjQiKSkK KysJCQkJZGdzdCA9IEVWUF9zaGEyMjQoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAi U0hBMjU2IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNt cCh2YWx1ZSwgIlNIQTM4NCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTM4NCgpOworKwkJCWVsc2Ug aWYgKCFzdHJjbXAodmFsdWUsICJTSEE1MTIiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGE1MTIoKTsK KysJCQllbHNlCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsCisrCQkJCQkiRkFUQUw6IHVu c3VwcG9ydGVkIGFsZ29yaXRobSBcIiVzXCJcbiIsCisrCQkJCQkJCQl2YWx1ZSk7CisrCQkJCWdv dG8gcGFyc2VfZXJyb3I7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJNc2ciKSkKKysJCQl7CisrCQkJaWYgKE1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsK KysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkgPSAnMCc7CisrCQkJ TXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKKysJCQlpZiAoIU1zZykKKysJCQkJZ290 byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTIikp CisrCQkJeworKwkJCWlmIChTKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChzdHJs ZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlTID0gaGV4MmJpbl9t KHZhbHVlLCAmU2xlbik7CisrCQkJaWYgKCFTKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJ CX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlJlc3VsdCIpKQorKwkJCWNvbnRpbnVl OworKwkJZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisrCQlmcHV0cyhvbGluZWJ1Ziwg b3V0KTsKKysKKysJCWlmIChuICYmIGUgJiYgTXNnICYmIFMgJiYgZGdzdCkKKysJCQl7CisrCQkJ aWYgKCFyc2FfcHJpbnR2ZXIob3V0LCBuLCBlLCBkZ3N0LAorKwkJCQkJTXNnLCBNc2dsZW4sIFMs IFNsZW4sIFNhbHRsZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShNc2cp OworKwkJCU1zZyA9IE5VTEw7CisrCQkJT1BFTlNTTF9mcmVlKFMpOworKwkJCVMgPSBOVUxMOwor KwkJCX0KKysKKysJCX0KKysKKysKKysJcmV0ID0gMTsKKysKKysKKysJZXJyb3I6CisrCisrCWlm IChvbGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQor KwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOworKwlpZiAobikKKysJCUJOX2ZyZWUobik7CisrCWlm IChlKQorKwkJQk5fZnJlZShlKTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJcGFyc2VfZXJyb3I6 CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5l ICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQorKworK3N0YXRpYyBpbnQg cnNhX3ByaW50dmVyKEZJTEUgKm91dCwKKysJCUJJR05VTSAqbiwgQklHTlVNICplLAorKwkJY29u c3QgRVZQX01EICpkZ3N0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwKKysJ CXVuc2lnbmVkIGNoYXIgKlMsIGxvbmcgU2xlbiwgaW50IFNhbHRsZW4pCisrCXsKKysJaW50IHJl dCA9IDAsIHI7CisrCS8qIFNldHVwIFJTQSBhbmQgRVZQX1BLRVkgc3RydWN0dXJlcyAqLworKwlS U0EgKnJzYV9wdWJrZXkgPSBOVUxMOworKwlFVlBfUEtFWSBwazsKKysJRVZQX01EX0NUWCBjdHg7 CisrCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisrCXJzYV9wdWJrZXkgPSBGSVBTX3JzYV9u ZXcoKTsKKysJaWYgKCFyc2FfcHVia2V5KQorKwkJZ290byBlcnJvcjsKKysJcnNhX3B1YmtleS0+ biA9IEJOX2R1cChuKTsKKysJcnNhX3B1YmtleS0+ZSA9IEJOX2R1cChlKTsKKysJaWYgKCFyc2Ff cHVia2V5LT5uIHx8ICFyc2FfcHVia2V5LT5lKQorKwkJZ290byBlcnJvcjsKKysJcGsudHlwZSA9 IEVWUF9QS0VZX1JTQTsKKysJcGsucGtleS5yc2EgPSByc2FfcHVia2V5OworKworKwlFVlBfTURf Q1RYX2luaXQoJmN0eCk7CisrCisrCWlmIChTYWx0bGVuID49IDApCisrCQl7CisrCQlNX0VWUF9N RF9DVFhfc2V0X2ZsYWdzKCZjdHgsCisrCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgfCAoU2Fs dGxlbiA8PCAxNikpOworKwkJfQorKwllbHNlIGlmIChTYWx0bGVuID09IC0yKQorKwkJTV9FVlBf TURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOworKwlpZiAo IUVWUF9WZXJpZnlJbml0X2V4KCZjdHgsIGRnc3QsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysJ aWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZjdHgsIE1zZywgTXNnbGVuKSkKKysJCWdvdG8gZXJyb3I7 CisrCisrCXIgPSBFVlBfVmVyaWZ5RmluYWwoJmN0eCwgUywgU2xlbiwgJnBrKTsKKysKKysKKysJ RVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlpZiAociA8IDApCisrCQlnb3RvIGVycm9y OworKwlFUlJfY2xlYXJfZXJyb3IoKTsKKysKKysJaWYgKHIgPT0gMCkKKysJCWZwdXRzKCJSZXN1 bHQgPSBGXG4iLCBvdXQpOworKwllbHNlCisrCQlmcHV0cygiUmVzdWx0ID0gUFxuIiwgb3V0KTsK KysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChyc2FfcHVia2V5KQorKwkJRklQU19y c2FfZnJlZShyc2FfcHVia2V5KTsKKysJaWYgKGJ1ZikKKysJCU9QRU5TU0xfZnJlZShidWYpOwor KworKwlyZXR1cm4gcmV0OworKwl9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBz L2NhdnMvZmlwc19zaGF0ZXN0LmMuZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwMDc2OTI5OCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMJ MjAxMi0wNC0yNiAxODowMDo1MS40MDA3NjkyOTggKzAyMDAKK0BAIC0wLDAgKzEsMzg4IEBACisr LyogZmlwc19zaGF0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24g KHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisr ICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor KyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlz dHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIK KysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAor KyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysg KiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdy aXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8K KysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4u aD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQ UworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYo Ik5vIEZJUFMgU0hBWFhYIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNl bHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIGludCBkZ3N0X3Rlc3Qo RklMRSAqb3V0LCBGSUxFICppbik7Cisrc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0IEVWUF9N RCAqbWQsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbik7Cisr c3RhdGljIGludCBwcmludF9tb250ZShjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisrCQl1 bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQgU2VlZExlbik7CisrCisraW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCisr CWludCByZXQgPSAxOworKworKwlpZighRklQU19tb2RlX3NldCgxKSkKKysJCXsKKysJCWRvX3By aW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmIChhcmdjID09IDEpCisr CQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisr CWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4o YXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAi RkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9 CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQg aW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICgh ZGdzdF90ZXN0KG91dCwgaW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBkaWdl c3QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNl CisrCQlyZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJv cnMoKTsKKysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlp ZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4g cmV0OworKworKwl9CisrCisrI2RlZmluZSBTSEFfVEVTVF9NQVhfQklUUwkxMDI0MDAKKysjZGVm aW5lIFNIQV9URVNUX01BWExJTkVMRU4JKCgoU0hBX1RFU1RfTUFYX0JJVFMgPj4gMykgKiAyKSAr IDEwMCkKKysKKytpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pCisrCXsKKysJY29u c3QgRVZQX01EICptZCA9IE5VTEw7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpx OworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEws ICpTZWVkID0gTlVMTDsKKysJbG9uZyBNc2dMZW4gPSAtMSwgTGVuID0gLTEsIFNlZWRMZW4gPSAt MTsKKysJaW50IHJldCA9IDA7CisrCWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVO U1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFs bG9jKFNIQV9URVNUX01BWExJTkVMRU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVm KQorKwkJZ290byBlcnJvcjsKKysKKysKKysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBTSEFfVEVT VF9NQVhMSU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwg b2xpbmVidWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3Bh Y2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlr ZXl3b3JkKys7CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGlu ZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtMPTIw XSBsaW5lKSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCkKKysJCQl7CisrCQkJZnB1dHMob2xpbmVi dWYsIG91dCk7CisrCQkJY29udGludWU7CisrCQkJfQorKworKwkJcSA9IHAgLSAxOworKworKwkJ LyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAx OworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUg KGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsrOworKworKwkJLyog UmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0cmxl bih2YWx1ZSkgLSAxOworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJbTCIp ICYmICpwPT0nXScpCisrCQkJeworKwkJCXN3aXRjaCAoYXRvaSh2YWx1ZSkpCisrCQkJCXsKKysJ CQkJY2FzZSAyMDogbWQ9RVZQX3NoYTEoKTsgICBicmVhazsKKysJCQkJY2FzZSAyODogbWQ9RVZQ X3NoYTIyNCgpOyBicmVhazsKKysJCQkJY2FzZSAzMjogbWQ9RVZQX3NoYTI1NigpOyBicmVhazsK KysJCQkJY2FzZSA0ODogbWQ9RVZQX3NoYTM4NCgpOyBicmVhazsKKysJCQkJY2FzZSA2NDogbWQ9 RVZQX3NoYTUxMigpOyBicmVhazsKKysJCQkJZGVmYXVsdDogZ290byBwYXJzZV9lcnJvcjsKKysJ CQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkxlbiIpKQorKwkJCXsK KysJCQlpZiAoTGVuICE9IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCUxlbiA9IGF0 b2kodmFsdWUpOworKwkJCWlmIChMZW4gPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJ CS8qIE9ubHkgaGFuZGxlIG11bHRpcGxlcyBvZiA4IGJpdHMgKi8KKysJCQlpZiAoTGVuICYgMHg3 KQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChMZW4gPiBTSEFfVEVTVF9NQVhfQklU UykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlNc2dMZW4gPSBMZW4gPj4gMzsKKysJCQl9 CisrCisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKKysJCQl7CisrCQkJbG9u ZyB0bXBsZW47CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0g JzAnOworKwkJCWlmIChNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTXNnID0gaGV4 MmJpbl9tKHZhbHVlLCAmdG1wbGVuKTsKKysJCQlpZiAoIU1zZykKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTZWVkIikpCisrCQkJ eworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJ CQlpZiAoU2VlZCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlTZWVkID0gaGV4MmJpbl9t KHZhbHVlLCAmU2VlZExlbik7CisrCQkJaWYgKCFTZWVkKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1EIikpCisrCQkJY29udGlu dWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5lYnVm LCBvdXQpOworKworKwkJaWYgKG1kICYmIE1zZyAmJiAoTXNnTGVuID49IDApKQorKwkJCXsKKysJ CQlpZiAoIXByaW50X2Rnc3QobWQsIG91dCwgTXNnLCBNc2dMZW4pKQorKwkJCQlnb3RvIGVycm9y OworKwkJCU9QRU5TU0xfZnJlZShNc2cpOworKwkJCU1zZyA9IE5VTEw7CisrCQkJTXNnTGVuID0g LTE7CisrCQkJTGVuID0gLTE7CisrCQkJfQorKwkJZWxzZSBpZiAobWQgJiYgU2VlZCAmJiAoU2Vl ZExlbiA+IDApKQorKwkJCXsKKysJCQlpZiAoIXByaW50X21vbnRlKG1kLCBvdXQsIFNlZWQsIFNl ZWRMZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShTZWVkKTsKKysJCQlT ZWVkID0gTlVMTDsKKysJCQlTZWVkTGVuID0gLTE7CisrCQkJfQorKwkKKysKKysJCX0KKysKKysK KysJcmV0ID0gMTsKKysKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJCU9QRU5T U0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKGxpbmVi dWYpOworKwlpZiAoTXNnKQorKwkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCWlmIChTZWVkKQorKwkJ T1BFTlNTTF9mcmVlKFNlZWQpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoK KysKKysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUg JWRcbiIsIGxudW0pOworKworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGludCBw cmludF9kZ3N0KGNvbnN0IEVWUF9NRCAqZW1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFy ICpNc2csIGludCBNc2dsZW4pCisrCXsKKysJaW50IGksIG1kbGVuOworKwl1bnNpZ25lZCBjaGFy IG1kW0VWUF9NQVhfTURfU0laRV07CisrCWlmICghRVZQX0RpZ2VzdChNc2csIE1zZ2xlbiwgbWQs ICh1bnNpZ25lZCBpbnQgKikmbWRsZW4sIGVtZCwgTlVMTCkpCisrCQl7CisrCQlmcHV0cygiRXJy b3IgY2FsY3VsYXRpbmcgSEFTSFxuIiwgc3RkZXJyKTsKKysJCXJldHVybiAwOworKwkJfQorKwlm cHV0cygiTUQgPSAiLCBvdXQpOworKwlmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKKysJCWZw cmludGYob3V0LCAiJTAyeCIsIG1kW2ldKTsKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysJcmV0dXJu IDE7CisrCX0KKysKKytzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJ TEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKQorKwl7CisrCXVu c2lnbmVkIGludCBpLCBqLCBrOworKwlpbnQgcmV0ID0gMDsKKysJRVZQX01EX0NUWCBjdHg7Cisr CXVuc2lnbmVkIGNoYXIgKm0xLCAqbTIsICptMywgKnA7CisrCXVuc2lnbmVkIGludCBtbGVuLCBt MWxlbiwgbTJsZW4sIG0zbGVuOworKworKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7CisrCisrCWlm IChTZWVkTGVuID4gRVZQX01BWF9NRF9TSVpFKQorKwkJbWxlbiA9IFNlZWRMZW47CisrCWVsc2UK KysJCW1sZW4gPSBFVlBfTUFYX01EX1NJWkU7CisrCisrCW0xID0gT1BFTlNTTF9tYWxsb2MobWxl bik7CisrCW0yID0gT1BFTlNTTF9tYWxsb2MobWxlbik7CisrCW0zID0gT1BFTlNTTF9tYWxsb2Mo bWxlbik7CisrCisrCWlmICghbTEgfHwgIW0yIHx8ICFtMykKKysJCWdvdG8gbWNfZXJyb3I7Cisr CisrCW0xbGVuID0gbTJsZW4gPSBtM2xlbiA9IFNlZWRMZW47CisrCW1lbWNweShtMSwgU2VlZCwg U2VlZExlbik7CisrCW1lbWNweShtMiwgU2VlZCwgU2VlZExlbik7CisrCW1lbWNweShtMywgU2Vl ZCwgU2VlZExlbik7CisrCisrCWZwdXRzKCJcbiIsIG91dCk7CisrCisrCWZvciAoaiA9IDA7IGog PCAxMDA7IGorKykKKysJCXsKKysJCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspCisrCQkJewor KwkJCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kLCBOVUxMKTsKKysJCQlFVlBfRGlnZXN0VXBk YXRlKCZjdHgsIG0xLCBtMWxlbik7CisrCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMiwgbTJs ZW4pOworKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTMsIG0zbGVuKTsKKysJCQlwID0gbTE7 CisrCQkJbTEgPSBtMjsKKysJCQltMWxlbiA9IG0ybGVuOworKwkJCW0yID0gbTM7CisrCQkJbTJs ZW4gPSBtM2xlbjsKKysJCQltMyA9IHA7CisrCQkJRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgsIG0z LCAmbTNsZW4pOworKwkJCX0KKysJCWZwcmludGYob3V0LCAiQ09VTlQgPSAlZFxuIiwgaik7Cisr CQlmcHV0cygiTUQgPSAiLCBvdXQpOworKwkJZm9yIChrID0gMDsgayA8IG0zbGVuOyBrKyspCisr CQkJZnByaW50ZihvdXQsICIlMDJ4IiwgbTNba10pOworKwkJZnB1dHMoIlxuXG4iLCBvdXQpOwor KwkJbWVtY3B5KG0xLCBtMywgbTNsZW4pOworKwkJbWVtY3B5KG0yLCBtMywgbTNsZW4pOworKwkJ bTFsZW4gPSBtMmxlbiA9IG0zbGVuOworKwkJfQorKworKwlyZXQgPSAxOworKworKwltY19lcnJv cjoKKysJaWYgKG0xKQorKwkJT1BFTlNTTF9mcmVlKG0xKTsKKysJaWYgKG0yKQorKwkJT1BFTlNT TF9mcmVlKG0yKTsKKysJaWYgKG0zKQorKwkJT1BFTlNTTF9mcmVlKG0zKTsKKysKKysJRVZQX01E X0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlyZXR1cm4gcmV0OworKwl9CisrCisrI2VuZGlmCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmguZmlwcyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmgKKy0tLSBvcGVuc3NsLTEu MC4xYi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmguZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUx LjQwMDc2OTI5OCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2NhdnMvZmlw c191dGwuaAkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwMDc2OTI5OCArMDIwMAorQEAgLTAsMCArMSwz NDMgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g CisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBk aXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisr ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysg KgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKyt2b2lkIGRvX3ByaW50X2Vycm9y cyh2b2lkKQorKwl7CisrCWNvbnN0IGNoYXIgKmZpbGUsICpkYXRhOworKwlpbnQgbGluZSwgZmxh Z3M7CisrCXVuc2lnbmVkIGxvbmcgbDsKKysJd2hpbGUgKChsID0gRVJSX2dldF9lcnJvcl9saW5l X2RhdGEoJmZpbGUsICZsaW5lLCAmZGF0YSwgJmZsYWdzKSkpCisrCQl7CisrCQlmcHJpbnRmKHN0 ZGVyciwgIkVSUk9SOiVseDpsaWI9JWQsZnVuYz0lZCxyZWFzb249JWQiCisrCQkJCSI6ZmlsZT0l czpsaW5lPSVkOiVzXG4iLAorKwkJCWwsIEVSUl9HRVRfTElCKGwpLCBFUlJfR0VUX0ZVTkMobCks IEVSUl9HRVRfUkVBU09OKGwpLAorKwkJCWZpbGUsIGxpbmUsIGZsYWdzICYgRVJSX1RYVF9TVFJJ TkcgPyBkYXRhIDogIiIpOworKwkJfQorKwl9CisrCisraW50IGhleDJiaW4oY29uc3QgY2hhciAq aW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQgbjEsIG4yOworKyAgICB1 bnNpZ25lZCBjaGFyIGNoOworKworKyAgICBmb3IgKG4xPTAsbjI9MCA7IGluW24xXSAmJiBpbltu MV0gIT0gJ1xuJyA7ICkKKysJeyAvKiBmaXJzdCBieXRlICovCisrCWlmICgoaW5bbjFdID49ICcw JykgJiYgKGluW24xXSA8PSAnOScpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKKysJZWxz ZSBpZiAoKGluW24xXSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKKysJICAgIGNoID0gaW5b bjErK10gLSAnQScgKyAxMDsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0g PD0gJ2YnKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKKysJZWxzZQorKwkgICAg cmV0dXJuIC0xOworKwlpZighaW5bbjFdKQorKwkgICAgeworKwkgICAgb3V0W24yKytdPWNoOwor KwkgICAgYnJlYWs7CisrCSAgICB9CisrCW91dFtuMl0gPSBjaCA8PCA0OworKwkvKiBzZWNvbmQg Ynl0ZSAqLworKwlpZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkKKysJICAg IGNoID0gaW5bbjErK10gLSAnMCc7CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAmJiAoaW5b bjFdIDw9ICdGJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7CisrCWVsc2UgaWYg KChpbltuMV0gPj0gJ2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCisrCSAgICBjaCA9IGluW24xKytd IC0gJ2EnICsgMTA7CisrCWVsc2UKKysJICAgIHJldHVybiAtMTsKKysJb3V0W24yKytdIHw9IGNo OworKwl9CisrICAgIHJldHVybiBuMjsKKysgICAgfQorKworK3Vuc2lnbmVkIGNoYXIgKmhleDJi aW5fbShjb25zdCBjaGFyICppbiwgbG9uZyAqcGxlbikKKysJeworKwl1bnNpZ25lZCBjaGFyICpw OworKwlwID0gT1BFTlNTTF9tYWxsb2MoKHN0cmxlbihpbikgKyAxKS8yKTsKKysJKnBsZW4gPSBo ZXgyYmluKGluLCBwKTsKKysJcmV0dXJuIHA7CisrCX0KKysKKytpbnQgZG9faGV4MmJuKEJJR05V TSAqKnByLCBjb25zdCBjaGFyICppbikKKysJeworKwl1bnNpZ25lZCBjaGFyICpwOworKwlsb25n IHBsZW47CisrCWludCByID0gMDsKKysJcCA9IGhleDJiaW5fbShpbiwgJnBsZW4pOworKwlpZiAo IXApCisrCQlyZXR1cm4gMDsKKysJaWYgKCEqcHIpCisrCQkqcHIgPSBCTl9uZXcoKTsKKysJaWYg KCEqcHIpCisrCQlyZXR1cm4gMDsKKysJaWYgKEJOX2JpbjJibihwLCBwbGVuLCAqcHIpKQorKwkJ ciA9IDE7CisrCU9QRU5TU0xfZnJlZShwKTsKKysJcmV0dXJuIHI7CisrCX0KKysKKytpbnQgZG9f Ym5fcHJpbnQoRklMRSAqb3V0LCBCSUdOVU0gKmJuKQorKwl7CisrCWludCBsZW4sIGk7CisrCXVu c2lnbmVkIGNoYXIgKnRtcDsKKysJbGVuID0gQk5fbnVtX2J5dGVzKGJuKTsKKysJaWYgKGxlbiA9 PSAwKQorKwkJeworKwkJZnB1dHMoIjAwIiwgb3V0KTsKKysJCXJldHVybiAxOworKwkJfQorKwor Kwl0bXAgPSBPUEVOU1NMX21hbGxvYyhsZW4pOworKwlpZiAoIXRtcCkKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworKwkJcmV0dXJuIDA7Cisr CQl9CisrCUJOX2JuMmJpbihibiwgdG1wKTsKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQor KwkJZnByaW50ZihvdXQsICIlMDJ4IiwgdG1wW2ldKTsKKysJT1BFTlNTTF9mcmVlKHRtcCk7Cisr CXJldHVybiAxOworKwl9CisrCisraW50IGRvX2JuX3ByaW50X25hbWUoRklMRSAqb3V0LCBjb25z dCBjaGFyICpuYW1lLCBCSUdOVU0gKmJuKQorKwl7CisrCWludCByOworKwlmcHJpbnRmKG91dCwg IiVzID0gIiwgbmFtZSk7CisrCXIgPSBkb19ibl9wcmludChvdXQsIGJuKTsKKysJaWYgKCFyKQor KwkJcmV0dXJuIDA7CisrCWZwdXRzKCJcbiIsIG91dCk7CisrCXJldHVybiAxOworKwl9CisrCisr aW50IHBhcnNlX2xpbmUoY2hhciAqKnBrdywgY2hhciAqKnB2YWwsIGNoYXIgKmxpbmVidWYsIGNo YXIgKm9saW5lYnVmKQorKwl7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOworKwlz dHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwlrZXl3b3JkID0gbGluZWJ1ZjsKKysJLyogU2tp cCBsZWFkaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3 b3JkKSkKKysJCWtleXdvcmQrKzsKKysKKysJLyogTG9vayBmb3IgPSBzaWduICovCisrCXAgPSBz dHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJLyogSWYgbm8gJz0nIGV4aXQgKi8KKysJaWYgKCFw KQorKwkJcmV0dXJuIDA7CisrCisrCXEgPSBwIC0gMTsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5n IHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCSpxLS0g PSAwOworKworKwkqcCA9IDA7CisrCXZhbHVlID0gcCArIDE7CisrCisrCS8qIFJlbW92ZSBsZWFk aW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KnZhbHVlKSkKKysJCXZhbHVlKys7CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9t IHZhbHVlICovCisrCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwl3aGlsZSAo KnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCSpwLS0gPSAwOwor KworKwkqcGt3ID0ga2V5d29yZDsKKysJKnB2YWwgPSB2YWx1ZTsKKysJcmV0dXJuIDE7CisrCX0K KysKKytCSUdOVU0gKmhleDJibihjb25zdCBjaGFyICppbikKKysgICAgeworKyAgICBCSUdOVU0g KnA9TlVMTDsKKysKKysgICAgaWYgKCFkb19oZXgyYm4oJnAsIGluKSkKKysJcmV0dXJuIE5VTEw7 CisrCisrICAgIHJldHVybiBwOworKyAgICB9CisrCisraW50IGJpbjJoZXgoY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4saW50IGxlbixjaGFyICpvdXQpCisrICAgIHsKKysgICAgaW50IG4xLCBuMjsK KysgICAgdW5zaWduZWQgY2hhciBjaDsKKysKKysgICAgZm9yIChuMT0wLG4yPTAgOyBuMSA8IGxl biA7ICsrbjEpCisrCXsKKysJY2g9aW5bbjFdID4+IDQ7CisrCWlmIChjaCA8PSAweDA5KQorKwkg ICAgb3V0W24yKytdPWNoKycwJzsKKysJZWxzZQorKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsK KysJY2g9aW5bbjFdICYgMHgwZjsKKysJaWYoY2ggPD0gMHgwOSkKKysJICAgIG91dFtuMisrXT1j aCsnMCc7CisrCWVsc2UKKysJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7CisrCX0KKysgICAgb3V0 W24yXT0nXDAnOworKyAgICByZXR1cm4gbjI7CisrICAgIH0KKysKKyt2b2lkIHB2KGNvbnN0IGNo YXIgKnRhZyxjb25zdCB1bnNpZ25lZCBjaGFyICp2YWwsaW50IGxlbikKKysgICAgeworKyAgICBj aGFyIG9idWZbMjA0OF07CisrCisrICAgIGJpbjJoZXgodmFsLGxlbixvYnVmKTsKKysgICAgcHJp bnRmKCIlcyA9ICVzXG4iLHRhZyxvYnVmKTsKKysgICAgfQorKworKy8qIFRvIGF2b2lkIGV4dGVu c2l2ZSBjaGFuZ2VzIHRvIHRlc3QgcHJvZ3JhbSBhdCB0aGlzIHN0YWdlIGp1c3QgY29udmVydAor KyAqIHRoZSBpbnB1dCBsaW5lIGludG8gYW4gYWNjZXB0YWJsZSBmb3JtLiBLZXl3b3JkIGxpbmVz IGNvbnZlcnRlZCB0byBmb3JtCisrICogImtleXdvcmQgPSB2YWx1ZVxuIiBubyBtYXR0ZXIgd2hh dCB3aGl0ZSBzcGFjZSBwcmVzZW50LCBhbGwgb3RoZXIgbGluZXMKKysgKiBqdXN0IGhhdmUgbGVh ZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UgcmVtb3ZlZC4KKysgKi8KKysKKytpbnQgdGlkeV9saW5l KGNoYXIgKmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQorKwl7CisrCWNoYXIgKmtleXdvcmQsICp2 YWx1ZSwgKnAsICpxOworKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwlrZXl3b3JkID0g bGluZWJ1ZjsKKysJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCWtleXdvcmQrKzsKKysJLyogTG9vayBmb3IgPSBz aWduICovCisrCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJLyogSWYgbm8gJz0nIGp1 c3QgY2hvcCBsZWFkaW5nLCB0cmFpbGluZyB3cyAqLworKwlpZiAoIXApCisrCQl7CisrCQlwID0g a2V5d29yZCArIHN0cmxlbihrZXl3b3JkKSAtIDE7CisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysJCXN0cmNweShvbGlu ZWJ1Ziwga2V5d29yZCk7CisrCQlzdHJjYXQob2xpbmVidWYsICJcbiIpOworKwkJcmV0dXJuIDE7 CisrCQl9CisrCisrCXEgPSBwIC0gMTsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICov CisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCSpxLS0gPSAwOworKwor KwkqcCA9IDA7CisrCXZhbHVlID0gcCArIDE7CisrCisrCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNl IGZyb20gdmFsdWUgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkK KysJCXZhbHVlKys7CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICov CisrCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwl3aGlsZSAoKnAgPT0gJ1xu JyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCSpwLS0gPSAwOworKworKwlzdHJj cHkob2xpbmVidWYsIGtleXdvcmQpOworKwlzdHJjYXQob2xpbmVidWYsICIgPSAiKTsKKysJc3Ry Y2F0KG9saW5lYnVmLCB2YWx1ZSk7CisrCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7CisrCisrCXJl dHVybiAxOworKwl9CisrCisrLyogTkI6IHRoaXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgX2JpdHNf IHJlYWQgKi8KKytpbnQgYmludDJiaW4oY29uc3QgY2hhciAqaW4sIGludCBsZW4sIHVuc2lnbmVk IGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAgbWVtc2V0KG91dCwwLGxl bik7CisrICAgIGZvcihuPTAgOyBuIDwgbGVuIDsgKytuKQorKwlpZihpbltuXSA9PSAnMScpCisr CSAgICBvdXRbbi84XXw9KDB4ODAgPj4gKG4lOCkpOworKyAgICByZXR1cm4gbGVuOworKyAgICB9 CisrCisraW50IGJpbjJiaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hhciAq b3V0KQorKyAgICB7CisrICAgIGludCBuOworKworKyAgICBmb3Iobj0wIDsgbiA8IGxlbiA7ICsr bikKKysJb3V0W25dPShpbltuLzhdJigweDgwID4+IChuJTgpKSkgPyAnMScgOiAnMCc7CisrICAg IHJldHVybiBuOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSovCisrCisrdm9pZCBQcmludFZhbHVlKGNoYXIgKnRhZywgdW5zaWdu ZWQgY2hhciAqdmFsLCBpbnQgbGVuKQorK3sKKysjaWYgVkVSQk9TRQorKyAgY2hhciBvYnVmWzIw NDhdOworKyAgaW50IG9sZW47CisrICBvbGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1Zik7Cisr ICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKKysjZW5kaWYKKyt9Cisr Cisrdm9pZCBPdXRwdXRWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxl biwgRklMRSAqcmZwLGludCBiaXRtb2RlKQorKyAgICB7CisrICAgIGNoYXIgb2J1ZlsyMDQ4XTsK KysgICAgaW50IG9sZW47CisrCisrICAgIGlmKGJpdG1vZGUpCisrCW9sZW49YmluMmJpbnQodmFs LGxlbixvYnVmKTsKKysgICAgZWxzZQorKwlvbGVuPWJpbjJoZXgodmFsLGxlbixvYnVmKTsKKysK KysgICAgZnByaW50ZihyZnAsICIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7CisrI2lm IFZFUkJPU0UKKysgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7Cisr I2VuZGlmCisrICAgIH0KKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2Zp cHNfYWVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2Fl c19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2Vs ZnRlc3QuYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuNDAxNzY5MzIxICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwkyMDEyLTA0LTI2IDE4 OjAwOjUxLjQwMTc2OTMyMSArMDIwMAorQEAgLTAsMCArMSwzNTkgQEAKKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBt ZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysg KiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu CisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K KysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrc3RhdGljIGNvbnN0IHN0cnVjdAorKyAgICB7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIga2V5WzE2XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdOworKyAg ICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMTZdOworKyAgICB9IHRlc3RzW109Cisr CXsKKysJeworKwl7IDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKKysJ ICAweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwweDBFLDB4MEYgfSwKKysJeyAweDAwLDB4 MTEsMHgyMiwweDMzLDB4NDQsMHg1NSwweDY2LDB4NzcsCisrCSAgMHg4OCwweDk5LDB4QUEsMHhC QiwweENDLDB4REQsMHhFRSwweEZGIH0sCisrCXsgMHg2OSwweEM0LDB4RTAsMHhEOCwweDZBLDB4 N0IsMHgwNCwweDMwLAorKwkgIDB4RDgsMHhDRCwweEI3LDB4ODAsMHg3MCwweEI0LDB4QzUsMHg1 QSB9LAorKwl9LAorKwl9OworKworK3N0YXRpYyBpbnQgY29ycnVwdF9hZXM7CisrCisrdm9pZCBG SVBTX2NvcnJ1cHRfYWVzKCkKKysgICAgeworKyAgICBjb3JydXB0X2FlcyA9IDE7CisrICAgIH0K KysKKytpbnQgRklQU19zZWxmdGVzdF9hZXMoKQorKyAgICB7CisrICAgIGludCBuOworKyAgICBp bnQgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NU WF9pbml0KCZjdHgpOworKworKyAgICBmb3Iobj0wIDsgbiA8IDEgOyArK24pCisrCXsKKysJdW5z aWduZWQgY2hhciBrZXlbMTZdOworKworKwltZW1jcHkoa2V5LCB0ZXN0c1tuXS5rZXksIHNpemVv ZihrZXkpKTsKKysJaWYgKGNvcnJ1cHRfYWVzKQorKwkJa2V5WzBdKys7CisrCWlmIChmaXBzX2Np cGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLAorKwkJCQlrZXksIE5VTEwsCisrCQkJ CXRlc3RzW25dLnBsYWludGV4dCwKKysJCQkJdGVzdHNbbl0uY2lwaGVydGV4dCwKKysJCQkJMTYp IDw9IDApCisrCQlnb3RvIGVycjsKKysJfQorKyAgICByZXQgPSAxOworKyAgICBlcnI6CisrICAg IEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrICAgIGlmIChyZXQgPT0gMCkKKysJICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQp OworKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrCisrLyogQUVTLUNDTSB0ZXN0IGRhdGEgZnJv bSBOSVNUIHB1YmxpYyB0ZXN0IHZlY3RvcnMgKi8KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBjY21fa2V5W10gPSB7CisrCTB4Y2UsMHhiMCwweDA5LDB4YWUsMHhhNCwweDQ1LDB4NDQs MHg1MSwweGZlLDB4YWQsMHhmMCwweGU2LAorKwkweGIzLDB4NmYsMHg0NSwweDU1LDB4NWQsMHhk MCwweDQ3LDB4MjMsMHhiYSwweGE0LDB4NDgsMHhlOAorK307Cisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgY2NtX25vbmNlW10gPSB7CisrCTB4NzYsMHg0MCwweDQzLDB4YzQsMHg5NCwweDYw LDB4YjcKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9hZGF0YVtdID0gewor KwkweDZlLDB4ODAsMHhkZCwweDdmLDB4MWIsMHhhZCwweGYzLDB4YTEsMHhjOSwweGFiLDB4MjUs MHhjNywKKysJMHg1ZiwweDEwLDB4YmQsMHhlNywweDhjLDB4MjMsMHhmYSwweDBlLDB4YjgsMHhm OSwweGFhLDB4YTUsCisrCTB4M2EsMHhkZSwweGZiLDB4ZjQsMHhjYiwweGY3LDB4OGYsMHhlNAor K307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3B0W10gPSB7CisrCTB4YzgsMHhk MiwweDc1LDB4ZjksMHgxOSwweGUxLDB4N2QsMHg3ZiwweGU2LDB4OWMsMHgyYSwweDFmLAorKwkw eDU4LDB4OTMsMHg5ZCwweGZlLDB4NGQsMHg0MCwweDM3LDB4OTEsMHhiNSwweGRmLDB4MTMsMHgx MAorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2N0W10gPSB7CisrCTB4OGEs MHgwZiwweDNkLDB4ODIsMHgyOSwweGU0LDB4OGUsMHg3NCwweDg3LDB4ZmQsMHg5NSwweGEyLAor KwkweDhhLDB4ZDMsMHg5MiwweGM4LDB4MGIsMHgzNiwweDgxLDB4ZDQsMHhmYiwweGM3LDB4YmIs MHhmZAorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3RhZ1tdID0geworKwkw eDJkLDB4ZDYsMHhlZiwweDFjLDB4NDUsMHhkNCwweGNjLDB4YjcsMHgyMywweGRjLDB4MDcsMHg0 NCwKKysJMHgxNCwweGRiLDB4NTAsMHg2ZAorK307CisrCisraW50IEZJUFNfc2VsZnRlc3RfYWVz X2NjbSh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyIG91dFsxMjhd LCB0YWdbMTZdOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQo JmN0eCk7CisrCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKKysJaWYgKCFFVlBfQ2lwaGVy SW5pdCgmY3R4LCBFVlBfYWVzXzE5Ml9jY20oKSwgTlVMTCwgTlVMTCwgMSkpCisrCQlnb3RvIGVy cjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZM RU4sCisrCQkJCQlzaXplb2YoY2NtX25vbmNlKSwgTlVMTCkpCisrCQlnb3RvIGVycjsKKysJaWYg KCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfVEFHLAorKwkJCQkJ c2l6ZW9mKGNjbV90YWcpLCBOVUxMKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DaXBoZXJJ bml0KCZjdHgsIE5VTEwsIGNjbV9rZXksIGNjbV9ub25jZSwgMSkpCisrCQlnb3RvIGVycjsKKysJ aWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgc2l6ZW9mKGNjbV9wdCkpICE9IHNpemVv ZihjY21fcHQpKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGNj bV9hZGF0YSwgc2l6ZW9mKGNjbV9hZGF0YSkpIDwgMCkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQ X0NpcGhlcigmY3R4LCBvdXQsIGNjbV9wdCwgc2l6ZW9mKGNjbV9wdCkpICE9IHNpemVvZihjY21f Y3QpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBF VlBfQ1RSTF9DQ01fR0VUX1RBRywgMTYsIHRhZykpCisrCQlnb3RvIGVycjsKKysJaWYgKG1lbWNt cCh0YWcsIGNjbV90YWcsIHNpemVvZihjY21fdGFnKSkKKysJCXx8IG1lbWNtcChvdXQsIGNjbV9j dCwgc2l6ZW9mKGNjbV9jdCkpKQorKwkJZ290byBlcnI7CisrCisrCW1lbXNldChvdXQsIDAsIHNp emVvZihvdXQpKTsKKysKKysJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBFVlBfYWVzXzE5Ml9j Y20oKSwgTlVMTCwgTlVMTCwgMCkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NU WF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZMRU4sCisrCQkJCQlzaXplb2YoY2NtX25v bmNlKSwgTlVMTCkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZj dHgsIEVWUF9DVFJMX0NDTV9TRVRfVEFHLCAxNiwgdGFnKSkKKysJCWdvdG8gZXJyOworKwlpZiAo IUVWUF9DaXBoZXJJbml0KCZjdHgsIE5VTEwsIGNjbV9rZXksIGNjbV9ub25jZSwgMCkpCisrCQln b3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgc2l6ZW9mKGNjbV9j dCkpICE9IHNpemVvZihjY21fY3QpKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZj dHgsIE5VTEwsIGNjbV9hZGF0YSwgc2l6ZW9mKGNjbV9hZGF0YSkpIDwgMCkKKysJCWdvdG8gZXJy OworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQsIGNjbV9jdCwgc2l6ZW9mKGNjbV9jdCkpICE9 IHNpemVvZihjY21fcHQpKQorKwkJZ290byBlcnI7CisrCisrCWlmIChtZW1jbXAob3V0LCBjY21f cHQsIHNpemVvZihjY21fcHQpKSkKKysJCWdvdG8gZXJyOworKworKwlyZXQgPSAxOworKworKwll cnI6CisrCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWlmIChyZXQgPT0gMCkK KysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0NDTSxGSVBTX1JfU0VM RlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwllbHNlCisrCQlyZXR1cm4gcmV0 OworKworKwl9CisrCisrLyogQUVTLUdDTSB0ZXN0IGRhdGEgZnJvbSBOSVNUIHB1YmxpYyB0ZXN0 IHZlY3RvcnMgKi8KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fa2V5W10gPSB7 CisrCTB4ZWUsMHhiYywweDFmLDB4NTcsMHg0OCwweDdmLDB4NTEsMHg5MiwweDFjLDB4MDQsMHg2 NSwweDY2LAorKwkweDVmLDB4OGEsMHhlNiwweGQxLDB4NjUsMHg4YiwweGIyLDB4NmQsMHhlNiww eGY4LDB4YTAsMHg2OSwKKysJMHhhMywweDUyLDB4MDIsMHg5MywweGE1LDB4NzIsMHgwNywweDhm CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21faXZbXSA9IHsKKysJMHg5OSww eGFhLDB4M2UsMHg2OCwweGVkLDB4ODEsMHg3MywweGEwLDB4ZWUsMHhkMCwweDY2LDB4ODQKKyt9 OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9wdFtdID0geworKwkweGY1LDB4NmUs MHg4NywweDA1LDB4NWIsMHhjMywweDJkLDB4MGUsMHhlYiwweDMxLDB4YjIsMHhlYSwKKysJMHhj YywweDJiLDB4ZjIsMHhhNQorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2Fh ZFtdID0geworKwkweDRkLDB4MjMsMHhjMywweGNlLDB4YzMsMHgzNCwweGI0LDB4OWIsMHhkYiww eDM3LDB4MGMsMHg0MywKKysJMHg3ZiwweGVjLDB4NzgsMHhkZQorK307Cisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZ2NtX2N0W10gPSB7CisrCTB4ZjcsMHgyNiwweDQ0LDB4MTMsMHhhOCww eDRjLDB4MGUsMHg3YywweGQ1LDB4MzYsMHg4NiwweDdlLAorKwkweGI5LDB4ZjIsMHgxNywweDM2 CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fdGFnW10gPSB7CisrCTB4Njcs MHhiYSwweDA1LDB4MTAsMHgyNiwweDJhLDB4ZTQsMHg4NywweGQ3LDB4MzcsMHhlZSwweDYyLAor KwkweDk4LDB4ZjcsMHg3ZSwweDBjCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9hZXNfZ2Nt KHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgb3V0WzEyOF0sIHRh Z1sxNl07CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4 KTsKKysJbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOworKwltZW1zZXQodGFnLCAwLCBzaXpl b2YodGFnKSk7CisrCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgRVZQX2Flc18yNTZfZ2NtKCks IE5VTEwsIE5VTEwsIDEpKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3Ry bCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLAorKwkJCQkJc2l6ZW9mKGdjbV9pdiksIE5V TEwpKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgTlVMTCwgZ2Nt X2tleSwgZ2NtX2l2LCAxKSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBO VUxMLCBnY21fYWFkLCBzaXplb2YoZ2NtX2FhZCkpIDwgMCkKKysJCWdvdG8gZXJyOworKwlpZiAo RVZQX0NpcGhlcigmY3R4LCBvdXQsIGdjbV9wdCwgc2l6ZW9mKGdjbV9wdCkpICE9IHNpemVvZihn Y21fY3QpKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEws IDApIDwgMCkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0 eCwgRVZQX0NUUkxfR0NNX0dFVF9UQUcsIDE2LCB0YWcpKQorKwkJZ290byBlcnI7CisrCisrCWlm IChtZW1jbXAodGFnLCBnY21fdGFnLCAxNikgfHwgbWVtY21wKG91dCwgZ2NtX2N0LCAxNikpCisr CQlnb3RvIGVycjsKKysKKysJbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOworKworKwlpZiAo IUVWUF9DaXBoZXJJbml0KCZjdHgsIEVWUF9hZXNfMjU2X2djbSgpLCBOVUxMLCBOVUxMLCAwKSkK KysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxf R0NNX1NFVF9JVkxFTiwKKysJCQkJCXNpemVvZihnY21faXYpLCBOVUxMKSkKKysJCWdvdG8gZXJy OworKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9UQUcs IDE2LCB0YWcpKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgTlVM TCwgZ2NtX2tleSwgZ2NtX2l2LCAwKSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigm Y3R4LCBOVUxMLCBnY21fYWFkLCBzaXplb2YoZ2NtX2FhZCkpIDwgMCkKKysJCWdvdG8gZXJyOwor KwlpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQsIGdjbV9jdCwgc2l6ZW9mKGdjbV9jdCkpICE9IHNp emVvZihnY21fcHQpKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEws IE5VTEwsIDApIDwgMCkKKysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21wKG91dCwgZ2NtX3B0 LCAxNikpCisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyOgorKwlFVlBfQ0lQ SEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19HQ00sRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7 CisrCQlyZXR1cm4gMDsKKysJCX0KKysJZWxzZQorKwkJcmV0dXJuIHJldDsKKysKKysJfQorKwor KworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfa2V5W10gPSB7CisrCTB4YTEs MHhiOSwweDBjLDB4YmEsMHgzZiwweDA2LDB4YWMsMHgzNSwweDNiLDB4MmMsMHgzNCwweDM4LAor KwkweDc2LDB4MDgsMHgxNywweDYyLDB4MDksMHgwOSwweDIzLDB4MDIsMHg2ZSwweDkxLDB4Nzcs MHgxOCwKKysJMHgxNSwweGYyLDB4OWQsMHhhYiwweDAxLDB4OTMsMHgyZiwweDJmCisrfTsKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2lbXSA9IHsKKysJMHg0ZiwweGFlLDB4 ZjcsMHgxMSwweDdjLDB4ZGEsMHg1OSwweGM2LDB4NmUsMHg0YiwweDkyLDB4MDEsCisrCTB4M2Us MHg3NiwweDhhLDB4ZDUKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhf cHRbXSA9IHsKKysJMHhlYiwweGFiLDB4Y2UsMHg5NSwweGIxLDB4NGQsMHgzYywweDhkLDB4NmYs MHhiMywweDUwLDB4MzksCisrCTB4MDcsMHg5MCwweDMxLDB4MWMKKyt9OworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfY3RbXSA9IHsKKysJMHg3NywweDhhLDB4ZTgsMHhiNCww eDNjLDB4YjksMHg4ZCwweDVhLDB4ODIsMHg1MCwweDgxLDB4ZDUsCisrCTB4YmUsMHg0NywweDFj LDB4NjMKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfa2V5W10g PSB7CisrCTB4MWUsMHhhNiwweDYxLDB4YzUsMHg4ZCwweDk0LDB4M2EsMHgwZSwweDQ4LDB4MDEs MHhlNCwweDJmLAorKwkweDRiLDB4MDksMHg0NywweDE0LDB4OWUsMHg3ZiwweDlmLDB4OGUsMHgz ZSwweDY4LDB4ZDAsMHhjNywKKysJMHg1MCwweDUyLDB4MTAsMHhiZCwweDMxLDB4MWEsMHgwZSww eDdjLDB4ZDYsMHhlMSwweDNmLDB4ZmQsCisrCTB4ZjIsMHg0MSwweDhkLDB4OGQsMHgxOSwweDEx LDB4YzAsMHgwNCwweGNkLDB4YTUsMHg4ZCwweGEzLAorKwkweGQ2LDB4MTksMHhiNywweGUyLDB4 YjksMHgxNCwweDFlLDB4NTgsMHgzMSwweDhlLDB4ZWEsMHgzOSwKKysJMHgyYywweGY0LDB4MWIs MHgwOAorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9pW10gPSB7Cisr CTB4YWQsMHhmOCwweGQ5LDB4MjYsMHgyNywweDQ2LDB4NGEsMHhkMiwweGYwLDB4NDIsMHg4ZSww eDg0LAorKwkweGE5LDB4ZjgsMHg3NSwweDY0CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBYVFNfMjU2X3B0W10gPSB7CisrCTB4MmUsMHhlZCwweGVhLDB4NTIsMHhjZCwweDgyLDB4 MTUsMHhlMSwweGFjLDB4YzYsMHg0NywweGU4LAorKwkweDEwLDB4YmIsMHhjMywweDY0LDB4MmUs MHg4NywweDI4LDB4N2YsMHg4ZCwweDJlLDB4NTcsMHhlMywKKysJMHg2YywweDBhLDB4MjQsMHhm YiwweGMxLDB4MmEsMHgyMCwweDJlCisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBY VFNfMjU2X2N0W10gPSB7CisrCTB4Y2IsMHhhYSwweGQwLDB4ZTIsMHhmNiwweGNlLDB4YTMsMHhm NSwweDBiLDB4MzcsMHhmOSwweDM0LAorKwkweGQ0LDB4NmEsMHg5YiwweDEzLDB4MGIsMHg5ZCww eDU0LDB4ZjAsMHg3ZSwweDM0LDB4ZjMsMHg2YSwKKysJMHhmNywweDkzLDB4ZTgsMHg2ZiwweDcz LDB4YzYsMHhkNywweGRiCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9hZXNfeHRzKCkKKysJ eworKwlpbnQgcmV0ID0gMTsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQSEVSX0NU WF9pbml0KCZjdHgpOworKworKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzEy OF94dHMoKSwKKysJCQkJWFRTXzEyOF9rZXksIFhUU18xMjhfaSwgWFRTXzEyOF9wdCwgWFRTXzEy OF9jdCwKKysJCQkJc2l6ZW9mKFhUU18xMjhfcHQpKSA8PSAwKQorKwkJcmV0ID0gMDsKKysKKysJ aWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18yNTZfeHRzKCksCisrCQkJCVhUU18y NTZfa2V5LCBYVFNfMjU2X2ksIFhUU18yNTZfcHQsIFhUU18yNTZfY3QsCisrCQkJCXNpemVvZihY VFNfMjU2X3B0KSkgPD0gMCkKKysJCXJldCA9IDA7CisrCisrCUVWUF9DSVBIRVJfQ1RYX2NsZWFu dXAoJmN0eCk7CisrCWlmIChyZXQgPT0gMCkKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRF U1RfQUVTX1hUUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJcmV0dXJuIHJldDsKKysJfQor KworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwcy5jLmZp cHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwcy5jCistLS0gb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDE3NjkzMjEgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzLmMJMjAxMi0wNC0yNiAxODow MDo1MS40MDE3NjkzMjEgKzAyMDAKK0BAIC0wLDAgKzEsNDg5IEBACisrLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0 OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBv cGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICog ICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK KysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor KyAqCisrICovCisrCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKyNpbmNsdWRlIDxvcGVuc3Ns L3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPHN0cmluZy5o PgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSA8ZGxmY24uaD4KKysjaW5jbHVkZSA8 c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgor KworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr CisrI2lmbmRlZiBQQVRIX01BWAorKyNkZWZpbmUgUEFUSF9NQVggMTAyNAorKyNlbmRpZgorKwor K3N0YXRpYyBpbnQgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKKytzdGF0aWMgaW50IGZpcHNfbW9k ZSA9IDA7Cisrc3RhdGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOworKworK3N0YXRpYyBpbnQgZmlw c19pc19vd25pbmdfdGhyZWFkKHZvaWQpOworK3N0YXRpYyBpbnQgZmlwc19zZXRfb3duaW5nX3Ro cmVhZCh2b2lkKTsKKytzdGF0aWMgaW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKTsK KysKKysjZGVmaW5lIGZpcHNfd19sb2NrKCkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBT KQorKyNkZWZpbmUgZmlwc193X3VubG9jaygpCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19G SVBTKQorKyNkZWZpbmUgZmlwc19yX2xvY2soKQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJ UFMpCisrI2RlZmluZSBmaXBzX3JfdW5sb2NrKCkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NL X0ZJUFMpCisrCisrc3RhdGljIHZvaWQgZmlwc19zZXRfbW9kZShpbnQgb25vZmYpCisrCXsKKysJ aW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysJaWYgKGZp cHNfc3RhcnRlZCkKKysJCXsKKysJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X2xvY2soKTsK KysJCWZpcHNfbW9kZSA9IG9ub2ZmOworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfdW5s b2NrKCk7CisrCQl9CisrCX0KKysKKytpbnQgRklQU19tb2R1bGVfbW9kZSh2b2lkKQorKwl7Cisr CWludCByZXQgPSAwOworKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVh ZCgpOworKworKwlpZiAoZmlwc19zdGFydGVkKQorKwkJeworKwkJaWYgKCFvd25pbmdfdGhyZWFk KSBmaXBzX3JfbG9jaygpOworKwkJcmV0ID0gZmlwc19tb2RlOworKwkJaWYgKCFvd25pbmdfdGhy ZWFkKSBmaXBzX3JfdW5sb2NrKCk7CisrCQl9CisrCXJldHVybiByZXQ7CisrCX0KKysKKytpbnQg RklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCkKKysgICAgeworKyAgICBpbnQgcmV0ID0gMDsKKysg ICAgaWYgKGZpcHNfc3RhcnRlZCkKKysJeworKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNf b3duaW5nX3RocmVhZCgpOworKworKwlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7 CisrCXJldCA9IGZpcHNfc2VsZnRlc3RfZmFpbDsKKysJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBz X3JfdW5sb2NrKCk7CisrCX0KKysgICAgcmV0dXJuIHJldDsKKysgICAgfQorKworKy8qIFNlbGZ0 ZXN0IGZhaWx1cmUgZmF0YWwgZXhpdCByb3V0aW5lLiBUaGlzIHdpbGwgYmUgY2FsbGVkCisrICog ZHVyaW5nICphbnkqIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uLiBJdCBoYXMgdGhlIG1pbmltdW0K KysgKiBvdmVyaGVhZCBwb3NzaWJsZSB0byBhdm9pZCB0b28gYmlnIGEgcGVyZm9ybWFuY2UgaGl0 LgorKyAqLworKworK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lkKQorKyAgICB7CisrICAg IGlmIChmaXBzX3NlbGZ0ZXN0X2ZhaWwpCisrCXsKKysJT3BlblNTTERpZShfX0ZJTEVfXyxfX0xJ TkVfXywgIkZBVEFMIEZJUFMgU0VMRlRFU1QgRkFJTFVSRSIpOworKwl9CisrICAgIH0KKysKKyt2 b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCkKKysgICAgeworKyAgICBmaXBzX3NlbGZ0 ZXN0X2ZhaWwgPSAxOworKyAgICB9CisrCisrLyogd2UgaW1wbGVtZW50IHdoYXQgbGliZmlwc2No ZWNrIGRvZXMgb3Vyc2VsdmVzICovCisrCisrc3RhdGljIGludAorK2dldF9saWJyYXJ5X3BhdGgo Y29uc3QgY2hhciAqbGlibmFtZSwgY29uc3QgY2hhciAqc3ltYm9sbmFtZSwgY2hhciAqcGF0aCwg c2l6ZV90IHBhdGhsZW4pCisreworKwlEbF9pbmZvIGluZm87CisrCXZvaWQgKmRsLCAqc3ltOwor KwlpbnQgcnYgPSAtMTsKKysKKysgICAgICAgIGRsID0gZGxvcGVuKGxpYm5hbWUsIFJUTERfTEFa WSk7CisrICAgICAgICBpZiAoZGwgPT0gTlVMTCkgeworKwkgICAgICAgIHJldHVybiAtMTsKKysg ICAgICAgIH0gICAgICAgCisrCisrCXN5bSA9IGRsc3ltKGRsLCBzeW1ib2xuYW1lKTsKKysKKysJ aWYgKHN5bSAhPSBOVUxMICYmIGRsYWRkcihzeW0sICZpbmZvKSkgeworKwkJc3RybmNweShwYXRo LCBpbmZvLmRsaV9mbmFtZSwgcGF0aGxlbi0xKTsKKysJCXBhdGhbcGF0aGxlbi0xXSA9ICdcMCc7 CisrCQlydiA9IDA7CisrCX0KKysKKysJZGxjbG9zZShkbCk7CQorKwkKKysJcmV0dXJuIHJ2Owor K30KKysKKytzdGF0aWMgY29uc3QgY2hhciBjb252W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Cisr Cisrc3RhdGljIGNoYXIgKgorK2JpbjJoZXgodm9pZCAqYnVmLCBzaXplX3QgbGVuKQorK3sKKysJ Y2hhciAqaGV4LCAqcDsKKysJdW5zaWduZWQgY2hhciAqc3JjID0gYnVmOworKwkKKysJaGV4ID0g bWFsbG9jKGxlbiAqIDIgKyAxKTsKKysJaWYgKGhleCA9PSBOVUxMKQorKwkJcmV0dXJuIE5VTEw7 CisrCisrCXAgPSBoZXg7CisrCisrCXdoaWxlIChsZW4gPiAwKSB7CisrCQl1bnNpZ25lZCBjOwor KworKwkJYyA9ICpzcmM7CisrCQlzcmMrKzsKKysKKysJCSpwID0gY29udltjID4+IDRdOworKwkJ KytwOworKwkJKnAgPSBjb252W2MgJiAweDBmXTsKKysJCSsrcDsKKysJCS0tbGVuOworKwl9Cisr CSpwID0gJ1wwJzsKKysJcmV0dXJuIGhleDsKKyt9CisrCisrI2RlZmluZSBITUFDX1BSRUZJWCAi LiIgCisrI2RlZmluZSBITUFDX1NVRkZJWCAiLmhtYWMiIAorKyNkZWZpbmUgUkVBRF9CVUZGRVJf TEVOR1RIIDE2Mzg0CisrCisrc3RhdGljIGNoYXIgKgorK21ha2VfaG1hY19wYXRoKGNvbnN0IGNo YXIgKm9yaWdwYXRoKQorK3sKKysJY2hhciAqcGF0aCwgKnA7CisrCWNvbnN0IGNoYXIgKmZuOwor KworKwlwYXRoID0gbWFsbG9jKHNpemVvZihITUFDX1BSRUZJWCkgKyBzaXplb2YoSE1BQ19TVUZG SVgpICsgc3RybGVuKG9yaWdwYXRoKSk7CisrCWlmKHBhdGggPT0gTlVMTCkgeworKwkJcmV0dXJu IE5VTEw7CisrCX0KKysKKysJZm4gPSBzdHJyY2hyKG9yaWdwYXRoLCAnLycpOworKwlpZiAoZm4g PT0gTlVMTCkgeworKwkJZm4gPSBvcmlncGF0aDsKKysJfSBlbHNlIHsKKysJCSsrZm47CisrCX0K KysKKysJc3RybmNweShwYXRoLCBvcmlncGF0aCwgZm4tb3JpZ3BhdGgpOworKwlwID0gcGF0aCAr IChmbiAtIG9yaWdwYXRoKTsKKysJcCA9IHN0cGNweShwLCBITUFDX1BSRUZJWCk7CisrCXAgPSBz dHBjcHkocCwgZm4pOworKwlwID0gc3RwY3B5KHAsIEhNQUNfU1VGRklYKTsKKysKKysJcmV0dXJu IHBhdGg7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyIGhtYWNrZXlbXSA9ICJvcmJvRGVKSVRJ VGVqc2lycEFET05pdmlycFVrdmFyUCI7CisrCisrc3RhdGljIGludAorK2NvbXB1dGVfZmlsZV9o bWFjKGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKipidWYsIHNpemVfdCAqaG1hY2xlbikKKyt7Cisr CUZJTEUgKmYgPSBOVUxMOworKwlpbnQgcnYgPSAtMTsKKysJdW5zaWduZWQgY2hhciByYnVmW1JF QURfQlVGRkVSX0xFTkdUSF07CisrCXNpemVfdCBsZW47CisrCXVuc2lnbmVkIGludCBobGVuOwor KwlITUFDX0NUWCBjOworKworKwlITUFDX0NUWF9pbml0KCZjKTsKKysKKysJZiA9IGZvcGVuKHBh dGgsICJyIik7CisrCisrCWlmIChmID09IE5VTEwpIHsKKysJCWdvdG8gZW5kOworKwl9CisrCisr CUhNQUNfSW5pdCgmYywgaG1hY2tleSwgc2l6ZW9mKGhtYWNrZXkpLTEsIEVWUF9zaGEyNTYoKSk7 CisrCisrCXdoaWxlICgobGVuPWZyZWFkKHJidWYsIDEsIHNpemVvZihyYnVmKSwgZikpICE9IDAp IHsKKysJCUhNQUNfVXBkYXRlKCZjLCByYnVmLCBsZW4pOworKwl9CisrCisrCWxlbiA9IHNpemVv ZihyYnVmKTsKKysJLyogcmV1c2UgcmJ1ZiBmb3IgaG1hYyAqLworKwlITUFDX0ZpbmFsKCZjLCBy YnVmLCAmaGxlbik7CisrCisrCSpidWYgPSBtYWxsb2MoaGxlbik7CisrCWlmICgqYnVmID09IE5V TEwpIHsKKysJCWdvdG8gZW5kOworKwl9CisrCisrCSpobWFjbGVuID0gaGxlbjsKKysKKysJbWVt Y3B5KCpidWYsIHJidWYsIGhsZW4pOworKworKwlydiA9IDA7CisrZW5kOgorKwlITUFDX0NUWF9j bGVhbnVwKCZjKTsKKysKKysJaWYgKGYpCisrCQlmY2xvc2UoZik7CisrCisrCXJldHVybiBydjsK Kyt9CisrCisrc3RhdGljIGludAorK0ZJUFNDSEVDS192ZXJpZnkoY29uc3QgY2hhciAqbGlibmFt ZSwgY29uc3QgY2hhciAqc3ltYm9sbmFtZSkKKyt7CisrCWNoYXIgcGF0aFtQQVRIX01BWCsxXTsK KysJaW50IHJ2OworKwlGSUxFICpoZjsKKysJY2hhciAqaG1hY3BhdGgsICpwOworKwljaGFyICpo bWFjID0gTlVMTDsKKysJc2l6ZV90IG47CisrCQorKwlydiA9IGdldF9saWJyYXJ5X3BhdGgobGli bmFtZSwgc3ltYm9sbmFtZSwgcGF0aCwgc2l6ZW9mKHBhdGgpKTsKKysKKysJaWYgKHJ2IDwgMCkK KysJCXJldHVybiAwOworKworKwlobWFjcGF0aCA9IG1ha2VfaG1hY19wYXRoKHBhdGgpOworKwlp ZiAoaG1hY3BhdGggPT0gTlVMTCkKKysJCXJldHVybiAwOworKworKwloZiA9IGZvcGVuKGhtYWNw YXRoLCAiciIpOworKwlpZiAoaGYgPT0gTlVMTCkgeworKwkJZnJlZShobWFjcGF0aCk7CisrCQly ZXR1cm4gMDsKKysJfQorKworKwlpZiAoZ2V0bGluZSgmaG1hYywgJm4sIGhmKSA+IDApIHsKKysJ CXZvaWQgKmJ1ZjsKKysJCXNpemVfdCBobWFjbGVuOworKwkJY2hhciAqaGV4OworKworKwkJaWYg KChwPXN0cmNocihobWFjLCAnXG4nKSkgIT0gTlVMTCkKKysJCQkqcCA9ICdcMCc7CisrCisrCQlp ZiAoY29tcHV0ZV9maWxlX2htYWMocGF0aCwgJmJ1ZiwgJmhtYWNsZW4pIDwgMCkgeworKwkJCXJ2 ID0gLTQ7CisrCQkJZ290byBlbmQ7CisrCQl9CisrCisrCQlpZiAoKGhleD1iaW4yaGV4KGJ1Ziwg aG1hY2xlbikpID09IE5VTEwpIHsKKysJCQlmcmVlKGJ1Zik7CisrCQkJcnYgPSAtNTsKKysJCQln b3RvIGVuZDsKKysJCX0KKysKKysJCWlmIChzdHJjbXAoaGV4LCBobWFjKSAhPSAwKSB7CisrCQkJ cnYgPSAtMTsKKysJCX0KKysJCWZyZWUoYnVmKTsKKysJCWZyZWUoaGV4KTsKKysJfQorKworK2Vu ZDoKKysJZnJlZShobWFjKTsKKysJZnJlZShobWFjcGF0aCk7CisrCWZjbG9zZShoZik7CisrCisr CWlmIChydiA8IDApCisrCQlyZXR1cm4gMDsKKysKKysJLyogY2hlY2sgc3VjY2Vzc2Z1bCAqLwor KwlyZXR1cm4gMTsJCisrfQorKworK2ludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYs IGNvbnN0IGNoYXIgKmF1dGgpCisrICAgIHsKKysgICAgaW50IHJldCA9IDA7CisrCisrICAgIGZp cHNfd19sb2NrKCk7CisrICAgIGZpcHNfc3RhcnRlZCA9IDE7CisrICAgIGZpcHNfc2V0X293bmlu Z190aHJlYWQoKTsKKysKKysgICAgaWYob25vZmYpCisrCXsKKysKKysJZmlwc19zZWxmdGVzdF9m YWlsID0gMDsKKysKKysJLyogRG9uJ3QgZ28gaW50byBGSVBTIG1vZGUgdHdpY2UsIGp1c3Qgc28g d2UgY2FuIGRvIGF1dG9tYWdpYworKwkgICBzZWVkaW5nICovCisrCWlmKEZJUFNfbW9kdWxlX21v ZGUoKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VU LEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQpOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWls ID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysKKysjaWZk ZWYgT1BFTlNTTF9JQTMyX1NTRTIKKysJeworKwlleHRlcm4gdW5zaWduZWQgaW50IE9QRU5TU0xf aWEzMmNhcF9QWzJdOworKwlpZiAoKE9QRU5TU0xfaWEzMmNhcF9QWzBdICYgKDE8PDI1fDE8PDI2 KSkgIT0gKDE8PDI1fDE8PDI2KSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf TU9EVUxFX01PREVfU0VULEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STSk7CisrCSAgICBmaXBz X3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkgICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOworKwkg ICAgfQorKwlPUEVOU1NMX2lhMzJjYXBfUFswXSB8PSAoMTw8MjgpOwkvKiBzZXQgInNoYXJlZCBj YWNoZSIJKi8KKysJT1BFTlNTTF9pYTMyY2FwX1BbMV0gJj0gfigxPDwoNjAtMzIpKTsJLyogY2xl YXIgQVZYCQkqLworKwl9CisrI2VuZGlmCisrCisrCWlmKCFGSVBTQ0hFQ0tfdmVyaWZ5KCJsaWJj cnlwdG8uc28uIiBTSExJQl9WRVJTSU9OX05VTUJFUiwiRklQU19tb2RlX3NldCIpKQorKwkgICAg eworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJTkdF UlBSSU5UX0RPRVNfTk9UX01BVENIKTsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Cisr CSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9CisrCisrCWlmKCFGSVBTQ0hF Q0tfdmVyaWZ5KCJsaWJzc2wuc28uIiBTSExJQl9WRVJTSU9OX05VTUJFUiwiU1NMX0NUWF9uZXci KSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJ UFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCk7CisrCSAgICBmaXBzX3NlbGZ0ZXN0X2Zh aWwgPSAxOworKwkgICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOworKwkgICAgfQorKworKwlp ZihGSVBTX3NlbGZ0ZXN0KCkpCisrCSAgICBmaXBzX3NldF9tb2RlKG9ub2ZmKTsKKysJZWxzZQor KwkgICAgeworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7Cisr CSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysJcmV0ID0gMTsKKysJZ290byBlbmQ7CisrCX0KKysg ICAgZmlwc19zZXRfbW9kZSgwKTsKKysgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKKysgICAg cmV0ID0gMTsKKytlbmQ6CisrICAgIGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOworKyAgICBm aXBzX3dfdW5sb2NrKCk7CisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysKKytzdGF0aWMgQ1JZ UFRPX1RIUkVBRElEIGZpcHNfdGhyZWFkOworK3N0YXRpYyBpbnQgZmlwc190aHJlYWRfc2V0ID0g MDsKKysKKytzdGF0aWMgaW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKQorKwl7CisrCWlu dCByZXQgPSAwOworKworKwlpZiAoZmlwc19zdGFydGVkKQorKwkJeworKwkJQ1JZUFRPX3JfbG9j ayhDUllQVE9fTE9DS19GSVBTMik7CisrCQlpZiAoZmlwc190aHJlYWRfc2V0KQorKwkJCXsKKysJ CQlDUllQVE9fVEhSRUFESUQgY3VyOworKwkJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIp OworKwkJCWlmICghQ1JZUFRPX1RIUkVBRElEX2NtcCgmY3VyLCAmZmlwc190aHJlYWQpKQorKwkJ CQlyZXQgPSAxOworKwkJCX0KKysJCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7 CisrCQl9CisrCXJldHVybiByZXQ7CisrCX0KKysKKytpbnQgZmlwc19zZXRfb3duaW5nX3RocmVh ZCh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKworKwlpZiAoZmlwc19zdGFydGVkKQorKwkJ eworKwkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQlpZiAoIWZpcHNfdGhy ZWFkX3NldCkKKysJCQl7CisrCQkJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmZpcHNfdGhyZWFk KTsKKysJCQlyZXQgPSAxOworKwkJCWZpcHNfdGhyZWFkX3NldCA9IDE7CisrCQkJfQorKwkJQ1JZ UFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCX0KKysJcmV0dXJuIHJldDsKKysJ fQorKworK2ludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQodm9pZCkKKysJeworKwlpbnQgcmV0 ID0gMDsKKysKKysJaWYgKGZpcHNfc3RhcnRlZCkKKysJCXsKKysJCUNSWVBUT193X2xvY2soQ1JZ UFRPX0xPQ0tfRklQUzIpOworKwkJaWYgKGZpcHNfdGhyZWFkX3NldCkKKysJCQl7CisrCQkJQ1JZ UFRPX1RIUkVBRElEIGN1cjsKKysJCQlDUllQVE9fVEhSRUFESURfY3VycmVudCgmY3VyKTsKKysJ CQlpZiAoIUNSWVBUT19USFJFQURJRF9jbXAoJmN1ciwgJmZpcHNfdGhyZWFkKSkKKysJCQkJZmlw c190aHJlYWRfc2V0ID0gMDsKKysJCQl9CisrCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tf RklQUzIpOworKwkJfQorKwlyZXR1cm4gcmV0OworKwl9CisrCisrCisrI2lmIDAKKysvKiBUaGUg cHVycG9zZSBvZiB0aGlzIGlzIHRvIGVuc3VyZSB0aGUgZXJyb3IgY29kZSBleGlzdHMgYW5kIHRo ZSBmdW5jdGlvbgorKyAqIG5hbWUgaXMgdG8ga2VlcCB0aGUgZXJyb3IgY2hlY2tpbmcgc2NyaXB0 IHF1aWV0CisrICovCisrdm9pZCBoYXNoX2ZpbmFsKHZvaWQpCisrCXsKKysJRklQU2VycihGSVBT X0ZfSEFTSF9GSU5BTCxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJfQorKyNlbmRpZgorKwor KworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19jbWFj X3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2Vs ZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVz dC5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDE3NjkzMjEgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYwkyMDEyLTA0LTI2IDE4OjAw OjUxLjQwMTc2OTMyMSArMDIwMAorQEAgLTAsMCArMSwxNjEgQEAKKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9w ZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAg ICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisr ICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NtYWMu aD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3R5 cGVkZWYgc3RydWN0IHsKKysJaW50IG5pZDsKKysJY29uc3QgdW5zaWduZWQgY2hhciBrZXlbRVZQ X01BWF9LRVlfTEVOR1RIXTsgc2l6ZV90IGtleXNpemU7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIg bXNnWzY0XTsgc2l6ZV90IG1zZ3NpemU7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFjWzMyXTsg c2l6ZV90IG1hY3NpemU7CisrfSBDTUFDX0tBVDsKKysKKysvKiBmcm9tIGh0dHA6Ly9jc3JjLm5p c3QuZ292L3B1YmxpY2F0aW9ucy9uaXN0cHVicy84MDAtMzhCL1NQXzgwMC0zOEIucGRmICovCisr c3RhdGljIGNvbnN0IENNQUNfS0FUIHZlY3RvcltdID0geworKyAgICB7CU5JRF9hZXNfMTI4X2Ni YywJLyogQ291bnQgPSAzMiBmcm9tIENNQUNHZW5BRVMxMjgudHh0ICovCisrCXsgMHg3NywweGE3 LDB4N2YsMHhhZiwgMHgyOSwweDBjLDB4MWYsMHhhMywKKysJICAweDBjLDB4NjgsMHgzZCwweGYx LCAweDZiLDB4YTcsMHhhNywweDdiLCB9LCAxMjgsCisrCXsgMHgwMiwweDA2LDB4ODMsMHhlMSwg MHhmMCwweDM5LDB4MmYsMHg0YywKKysJICAweGFjLDB4NTQsMHgzMSwweDhiLCAweDYwLDB4Mjks MHgyNSwweDllLAorKwkgIDB4OWMsMHg1NSwweDNkLDB4YmMsIDB4NGIsMHg2YSwweGQ5LDB4OTgs CisrCSAgMHhlNiwweDRkLDB4NTgsMHhlNCwgMHhlNywweGRjLDB4MmUsMHgxMywgfSwgMjU2LAor Kwl7IDB4ZmIsMHhmZSwweGE0LDB4MWIsIH0sIDMyCisrICAgIH0sCisrICAgIHsJTklEX2Flc18x OTJfY2JjLAkvKiBDb3VudCA9IDIzIGZyb20gQ01BQ0dlbkFFUzE5Mi50eHQgKi8KKysJeyAweDdi LDB4MzIsMHgzOSwweDEzLCAweDY5LDB4YWEsMHg0YywweGE5LAorKwkgIDB4NzUsMHg1OCwweDA5 LDB4NWIsIDB4ZTMsMHhjMywweGVjLDB4ODYsCisrCSAgMHgyYiwweGQwLDB4NTcsMHhjZSwgMHhm MSwweGUzLDB4MmQsMHg2MiwgfSwgMTkyLAorKwl7IDB4MCB9LCAwLAorKwl7IDB4ZTQsMHhkOSww eDM0LDB4MGIsIDB4MDMsMHhlNiwweDdkLDB4ZWYsCisrCSAgMHhkNCwweDk2LDB4OWMsMHhjMSwg MHhlZCwweDM3LDB4MzUsMHhlNiwgfSwgMTI4LAorKyAgICB9LAorKyAgICB7CU5JRF9hZXNfMjU2 X2NiYywJLyogQ291bnQgPSAzMyBmcm9tIENNQUNHZW5BRVMyNTYudHh0ICovCisrCXsgMHgwYiww eDEyLDB4MmEsMHhjOCwgMHhmMywweDRlLDB4ZDEsMHhmZSwKKysJICAweDA4LDB4MmEsMHgzNiww eDI1LCAweGQxLDB4NTcsMHg1NiwweDE0LAorKwkgIDB4NTQsMHgxNiwweDdhLDB4YzEsIDB4NDUs MHhhMSwweDBiLDB4YmYsCisrCSAgMHg3NywweGM2LDB4YTcsMHgwNSwgMHg5NiwweGQ1LDB4NzQs MHhmMSwgfSwgMjU2LAorKwl7IDB4NDksMHg4YiwweDUzLDB4ZmQsIDB4ZWMsMHg4NywweGVkLDB4 Y2IsCisrCSAgMHhmMCwweDcwLDB4OTcsMHhkYywgMHhjZCwweGU5LDB4M2EsMHgwOCwKKysJICAw eDRiLDB4YWQsMHg3NSwweDAxLCAweGEyLDB4MjQsMHhlMywweDg4LAorKwkgIDB4ZGYsMHgzNCww eDljLDB4ZTEsIDB4ODksMHg1OSwweGZlLDB4ODQsCisrCSAgMHg4NSwweGY4LDB4YWQsMHgxNSwg MHgzNywweGYwLDB4ZDgsMHg5NiwKKysJICAweGVhLDB4NzMsMHhiZSwweGRjLCAweDcyLDB4MTQs MHg3MSwweDNmLCB9LCAzODQsCisrCXsgMHhmNiwweDJjLDB4NDYsMHgzMiwgMHg5YiwgfSwgNDAs CisrICAgIH0sCisrICAgIHsJTklEX2Rlc19lZGUzX2NiYywJLyogQ291bnQgPSA0MSBmcm9tIENN QUNHZW5UREVTMy5yZXEgKi8KKysJeyAweDg5LDB4YmMsMHhkOSwweDUyLCAweGE4LDB4YzgsMHhh YiwweDM3LAorKwkgIDB4MWEsMHhmNCwweDhhLDB4YzcsIDB4ZDAsMHg3MCwweDg1LDB4ZDUsCisr CSAgMHhlZiwweGY3LDB4MDIsMHhlNiwgMHhkNiwweDJjLDB4ZGMsMHgyMywgfSwgMTkyLAorKwl7 IDB4ZmEsMHg2MiwweDBjLDB4MWIsIDB4YmUsMHg5NywweDMxLDB4OWUsCisrCSAgMHg5YSwweDBj LDB4ZjAsMHg0OSwgMHgyMSwweDIxLDB4ZjcsMHhhMiwKKysJICAweDBlLDB4YjAsMHg4YSwweDZh LCAweDcwLDB4OWQsMHhjYiwweGQwLAorKwkgIDB4MGEsMHhhZiwweDM4LDB4ZTQsIDB4ZjksMHg5 ZSwweDc1LDB4NGUsIH0sIDI1NiwKKysJeyAweDhmLDB4NDksMHhhMSwweGI3LCAweGQ2LDB4YWEs MHgyMiwweDU4LCB9LCA2NCwKKysgICAgfSwKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2Nt YWMoKQorKwl7CisrCXNpemVfdCBuLCBvdXRsZW47CisrCXVuc2lnbmVkIGNoYXIgICAgb3V0WzMy XTsKKysJY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyOworKwlDTUFDX0NUWCAqY3R4ID0gQ01BQ19D VFhfbmV3KCk7CisrCWNvbnN0IENNQUNfS0FUICp0OworKwlpbnQgcnYgPSAxOworKworKwlmb3Io bj0wLHQ9dmVjdG9yOyBuPHNpemVvZih2ZWN0b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsr KQorKwkJeworKwkJY2lwaGVyID0gRklQU19nZXRfY2lwaGVyYnluaWQodC0+bmlkKTsKKysJCWlm ICghY2lwaGVyKQorKwkJCXsKKysJCQlydiA9IC0xOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysJ CWlmICghQ01BQ19Jbml0KGN0eCwgdC0+a2V5LCB0LT5rZXlzaXplLzgsIGNpcGhlciwgMCkpCisr CQkJeworKwkJCXJ2ID0gLTE7CisrCQkJZ290byBlcnI7CisrCQkJfQorKwkJaWYgKCFDTUFDX1Vw ZGF0ZShjdHgsIHQtPm1zZywgdC0+bXNnc2l6ZS84KSkKKysJCQl7CisrCQkJcnYgPSAtMTsKKysJ CQlnb3RvIGVycjsKKysJCQl9CisrCQkJCisrCQlpZiAoIUNNQUNfRmluYWwoY3R4LCBvdXQsICZv dXRsZW4pKQorKwkJCXsKKysJCQlydiA9IC0xOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysJCUNN QUNfQ1RYX2NsZWFudXAoY3R4KTsKKysKKysJCWlmKG91dGxlbiA8IHQtPm1hY3NpemUvOCB8fCBt ZW1jbXAob3V0LHQtPm1hYyx0LT5tYWNzaXplLzgpKQorKwkJCXsKKysJCSAgICAJcnYgPSAwOwor KwkJICAgIAl9CisrCQl9CisrCisrCWVycjoKKysJQ01BQ19DVFhfZnJlZShjdHgpOworKworKwlp ZiAocnYgPT0gLTEpCisrCQl7CisrCQlydiA9IDA7CisrCQl9CisrCWlmICghcnYpCisrCQkgICBG SVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0NNQUMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7 CisrCisrCXJldHVybiBydjsKKysJfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0 by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlw cy9maXBzX2Rlc19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDE3NjkzMjEg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5j CTIwMTItMDQtMjYgMTg6MDA6NTEuNDAxNzY5MzIxICswMjAwCitAQCAtMCwwICsxLDE0NyBAQAor Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgor KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1 dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAg ICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwor K3N0YXRpYyBjb25zdCBzdHJ1Y3QKKysgICAgeworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtl eVsxNl07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKyAgICBjb25z dCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07CisrICAgIH0gdGVzdHMyW109CisrCXsKKysJ eworKwl7IDB4N2MsMHg0ZiwweDZlLDB4ZjcsMHhhMiwweDA0LDB4MTYsMHhlYywKKysJICAweDBi LDB4NmIsMHg3YywweDllLDB4NWUsMHgxOSwweGE3LDB4YzQgfSwKKysJeyAweDA2LDB4YTcsMHhk OCwweDc5LDB4YWEsMHhjZSwweDY5LDB4ZWYgfSwKKysJeyAweDRjLDB4MTEsMHgxNywweDU1LDB4 YmYsMHhjNCwweDRlLDB4ZmQgfQorKwl9LAorKwl7CisrCXsgMHg1ZCwweDllLDB4MDEsMHhkMyww eDI1LDB4YzcsMHgzZSwweDM0LAorKwkgIDB4MDEsMHgxNiwweDdjLDB4ODUsMHgyMywweGRmLDB4 ZTAsMHg2OCB9LAorKwl7IDB4OWMsMHg1MCwweDA5LDB4MGYsMHg1ZSwweDdkLDB4NjksMHg3ZSB9 LAorKwl7IDB4ZDIsMHgwYiwweDE4LDB4ZGYsMHhkOSwweDBkLDB4OWUsMHhmZiB9LAorKwl9Cisr CX07CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdAorKyAgICB7CisrICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIga2V5WzI0XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07Cisr ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKKysgICAgfSB0ZXN0czNbXT0K KysJeworKwl7CisrCXsgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAor KwkgIDB4RkUsMHhEQywweEJBLDB4OTgsMHg3NiwweDU0LDB4MzIsMHgxMCwKKysJICAweDEyLDB4 MzQsMHg1NiwweDc4LDB4OWEsMHhiYywweGRlLDB4ZjAgfSwKKysJeyAweDhmLDB4OGYsMHhiZiww eDliLDB4NWQsMHg0OCwweGI0LDB4MWMgfSwKKysJeyAweDU5LDB4OGMsMHhlNSwweGQzLDB4NmMs MHhhMiwweGVhLDB4MWIgfSwKKysJfSwKKysJeworKwl7IDB4REMsMHhCQSwweDk4LDB4NzYsMHg1 NCwweDMyLDB4MTAsMHhGRSwKKysJICAweDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENE LDB4RUYsCisrCSAgMHhFRCwweDM5LDB4RDksMHg1MCwweEZBLDB4NzQsMHhCQywweEM0IH0sCisr CXsgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIsMHhDRCwweEVGIH0sCisrCXsgMHgxMSww eDI1LDB4YjAsMHgzNSwweGJlLDB4YTAsMHg4MiwweDg2IH0sCisrCX0sCisrCX07CisrCisrCisr c3RhdGljIGludCBjb3JydXB0X2RlczsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9kZXMoKQorKyAg ICB7CisrICAgIGNvcnJ1cHRfZGVzID0gMTsKKysgICAgfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0 X2RlcygpCisrICAgIHsKKysgICAgaW50IG4sIHJldCA9IDA7CisrICAgIEVWUF9DSVBIRVJfQ1RY IGN0eDsKKysgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysgICAgLyogRW5jcnlwdC9k ZWNyeXB0IHdpdGggMi1rZXkgM0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCisr ICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKKysJeworKwl1bnNpZ25lZCBjaGFyIHBsYWludGV4 dFs4XTsKKysKKysJbWVtY3B5KHBsYWludGV4dCwgdGVzdHMyW25dLnBsYWludGV4dCwgc2l6ZW9m KHBsYWludGV4dCkpOworKwlpZiAoY29ycnVwdF9kZXMpCisrCQlwbGFpbnRleHRbMF0rKzsKKysJ aWYgKCFmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9kZXNfZWRlX2VjYigpLAorKwkJCQl0ZXN0 czJbbl0ua2V5LCBOVUxMLAorKwkJCQlwbGFpbnRleHQsIHRlc3RzMltuXS5jaXBoZXJ0ZXh0LCA4 KSkKKysJCWdvdG8gZXJyOworKwl9CisrCisrICAgIC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDNE RVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLworKyAgICBmb3Iobj0wIDsgbiA8IDIg OyArK24pCisrCXsKKysJaWYgKCFmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9kZXNfZWRlM19l Y2IoKSwKKysJCQkJdGVzdHMzW25dLmtleSwgTlVMTCwKKysJCQkJdGVzdHMzW25dLnBsYWludGV4 dCwgdGVzdHMzW25dLmNpcGhlcnRleHQsIDgpKQorKwkJZ290byBlcnI7CisrCX0KKysgICAgcmV0 ID0gMTsKKysgICAgZXJyOgorKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKyAg ICBpZiAocmV0ID09IDApCisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUyxG SVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysKKysgICAgcmV0dXJuIHJldDsKKysgICAgfQorKyNl bmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5j LmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jCistLS0gb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jLmZpcHMJMjAxMi0wNC0yNiAx ODowMDo1MS40MDE3NjkzMjEgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfY3RyLmMJMjAxMi0wNC0yNiAxODowMDo1MS40MDI3NjkzNDMgKzAyMDAKK0BAIC0w LDAgKzEsNDM2IEBACisrLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19jdHIuYyAqLworKy8qIFdyaXR0 ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3Bl blNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQg KGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoK KysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K KysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgor KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisr ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisr ICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIK KysKKytzdGF0aWMgdm9pZCBpbmNfMTI4KERSQkdfQ1RSX0NUWCAqY2N0eCkKKysJeworKwlpbnQg aTsKKysJdW5zaWduZWQgY2hhciBjOworKwl1bnNpZ25lZCBjaGFyICpwID0gY2N0eC0+ViArIDE1 OworKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKysJCXsKKysJCWMgPSAqcDsKKysJCWMrKzsK KysJCSpwID0gYzsKKysJCWlmIChjKQorKwkJCXJldHVybjsKKysJCXAtLTsKKysJCX0KKysJfQor KworK3N0YXRpYyB2b2lkIGN0cl9YT1IoRFJCR19DVFJfQ1RYICpjY3R4LCBjb25zdCB1bnNpZ25l ZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQorKwl7CisrCXNpemVfdCBpLCBuOworKwkvKiBBbnkg emVybyBwYWRkaW5nIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHJlc3VsdCBhcyB3ZQorKwkg KiBhcmUgWE9SaW5nLiBTbyBqdXN0IHByb2Nlc3MgaG93ZXZlciBtdWNoIGlucHV0IHdlIGhhdmUu CisrCSAqLworKworKwlpZiAoIWluIHx8ICFpbmxlbikKKysJCXJldHVybjsKKysKKysJaWYgKGlu bGVuIDwgY2N0eC0+a2V5bGVuKQorKwkJbiA9IGlubGVuOworKwllbHNlCisrCQluID0gY2N0eC0+ a2V5bGVuOworKworKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorKwkJY2N0eC0+S1tpXSBePSBp bltpXTsKKysJaWYgKGlubGVuIDw9IGNjdHgtPmtleWxlbikKKysJCXJldHVybjsKKysKKysJbiA9 IGlubGVuIC0gY2N0eC0+a2V5bGVuOworKwkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisrCWlm IChuID4gMTYpCisrCQluID0gMTY7CisrCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorKwkJY2N0 eC0+VltpXSBePSBpbltpICsgY2N0eC0+a2V5bGVuXTsKKysJfQorKworKy8qIFByb2Nlc3MgYSBj b21wbGV0ZSBibG9jayB1c2luZyBCQ0MgYWxnb3JpdGhtIG9mIFNQUCA4MDAtOTAgMTAuNC4zICov CisrCisrc3RhdGljIHZvaWQgY3RyX0JDQ19ibG9jayhEUkJHX0NUUl9DVFggKmNjdHgsIHVuc2ln bmVkIGNoYXIgKm91dCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4pCisrCXsKKysJaW50 IGk7CisrCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorKwkJb3V0W2ldIF49IGluW2ldOworKwlB RVNfZW5jcnlwdChvdXQsIG91dCwgJmNjdHgtPmRmX2tzKTsKKysjaWYgMAorK2ZwcmludGYoc3Rk ZXJyLCAiQkNDIGluK291dFxuIik7CisrQklPX2R1bXBfZnAoc3RkZXJyLCBpbiwgMTYpOworK0JJ T19kdW1wX2ZwKHN0ZGVyciwgb3V0LCAxNik7CisrI2VuZGlmCisrCX0KKysKKysvKiBIYW5kbGUg c2V2ZXJhbCBCQ0Mgb3BlcmF0aW9ucyBmb3IgYXMgbXVjaCBkYXRhIGFzIHdlIG5lZWQgZm9yIEsg YW5kIFggKi8KKytzdGF0aWMgdm9pZCBjdHJfQkNDX2Jsb2NrcyhEUkJHX0NUUl9DVFggKmNjdHgs IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluKQorKwl7CisrCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0 eC0+S1gsIGluKTsKKysJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDE2LCBpbik7Cisr CWlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCisrCQljdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktY ICsgMzIsIGluKTsKKysJfQorKy8qIEluaXRpYWxpc2UgQkNDIGJsb2NrczogdGhlc2UgaGF2ZSB0 aGUgdmFsdWUgMCwxLDIgaW4gbGVmdG1vc3QgcG9zaXRpb25zOgorKyAqIHNlZSAxMC40LjIgc3Rh Z2UgNy4KKysgKi8KKytzdGF0aWMgdm9pZCBjdHJfQkNDX2luaXQoRFJCR19DVFJfQ1RYICpjY3R4 KQorKwl7CisrCW1lbXNldChjY3R4LT5LWCwgMCwgNDgpOworKwltZW1zZXQoY2N0eC0+Ymx0bXAs IDAsIDE2KTsKKysJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCwgY2N0eC0+Ymx0bXApOwor KwljY3R4LT5ibHRtcFszXSA9IDE7CisrCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAx NiwgY2N0eC0+Ymx0bXApOworKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQorKwkJeworKwkJY2N0 eC0+Ymx0bXBbM10gPSAyOworKwkJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDMyLCBj Y3R4LT5ibHRtcCk7CisrCQl9CisrCX0KKysKKysvKiBQcm9jZXNzIHNldmVyYWwgYmxvY2tzIGlu dG8gQkNDIGFsZ29yaXRobSwgc29tZSBwb3NzaWJseSBwYXJ0aWFsICovCisrc3RhdGljIHZvaWQg Y3RyX0JDQ191cGRhdGUoRFJCR19DVFJfQ1RYICpjY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBj aGFyICppbiwgc2l6ZV90IGlubGVuKQorKwl7CisrCWlmICghaW4gfHwgIWlubGVuKQorKwkJcmV0 dXJuOworKwkvKiBJZiB3ZSBoYXZlIHBhcnRpYWwgYmxvY2sgaGFuZGxlIGl0IGZpcnN0ICovCisr CWlmIChjY3R4LT5ibHRtcF9wb3MpCisrCQl7CisrCQlzaXplX3QgbGVmdCA9IDE2IC0gY2N0eC0+ Ymx0bXBfcG9zOworKwkJLyogSWYgd2Ugbm93IGhhdmUgYSBjb21wbGV0ZSBibG9jayBwcm9jZXNz IGl0ICovCisrCQlpZiAoaW5sZW4gPj0gbGVmdCkKKysJCQl7CisrCQkJbWVtY3B5KGNjdHgtPmJs dG1wICsgY2N0eC0+Ymx0bXBfcG9zLCBpbiwgbGVmdCk7CisrCQkJY3RyX0JDQ19ibG9ja3MoY2N0 eCwgY2N0eC0+Ymx0bXApOworKwkJCWNjdHgtPmJsdG1wX3BvcyA9IDA7CisrCQkJaW5sZW4gLT0g bGVmdDsKKysJCQlpbiArPSBsZWZ0OworKwkJCX0KKysJCX0KKysJLyogUHJvY2VzcyB6ZXJvIG9y IG1vcmUgY29tcGxldGUgYmxvY2tzICovCisrCXdoaWxlIChpbmxlbiA+PSAxNikKKysJCXsKKysJ CWN0cl9CQ0NfYmxvY2tzKGNjdHgsIGluKTsKKysJCWluICs9IDE2OworKwkJaW5sZW4gLT0gMTY7 CisrCQl9CisrCS8qIENvcHkgYW55IHJlbWFpbmluZyBwYXJ0aWFsIGJsb2NrIHRvIHRoZSB0ZW1w b3JhcnkgYnVmZmVyICovCisrCWlmIChpbmxlbiA+IDApCisrCQl7CisrCQltZW1jcHkoY2N0eC0+ Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3MsIGluLCBpbmxlbik7CisrCQljY3R4LT5ibHRtcF9wb3Mg Kz0gaW5sZW47CisrCQl9CisrCX0KKysKKytzdGF0aWMgdm9pZCBjdHJfQkNDX2ZpbmFsKERSQkdf Q1RSX0NUWCAqY2N0eCkKKysJeworKwlpZiAoY2N0eC0+Ymx0bXBfcG9zKQorKwkJeworKwkJbWVt c2V0KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCAwLCAxNiAtIGNjdHgtPmJsdG1wX3Bv cyk7CisrCQljdHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5ibHRtcCk7CisrCQl9CisrCX0KKysK KytzdGF0aWMgdm9pZCBjdHJfZGYoRFJCR19DVFJfQ1RYICpjY3R4LAorKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpp bjIsIHNpemVfdCBpbjJsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3Qg aW4zbGVuKQorKwl7CisrCXNpemVfdCBpbmxlbjsKKysJdW5zaWduZWQgY2hhciAqcCA9IGNjdHgt PmJsdG1wOworKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjODAgPSAweDgwOworKworKwljdHJfQkND X2luaXQoY2N0eCk7CisrCWlmICghaW4xKQorKwkJaW4xbGVuID0gMDsKKysJaWYgKCFpbjIpCisr CQlpbjJsZW4gPSAwOworKwlpZiAoIWluMykKKysJCWluM2xlbiA9IDA7CisrCWlubGVuID0gaW4x bGVuICsgaW4ybGVuICsgaW4zbGVuOworKwkvKiBJbml0aWFsaXNlIEx8fE4gaW4gdGVtcG9yYXJ5 IGJsb2NrICovCisrCSpwKysgPSAoaW5sZW4gPj4gMjQpICYgMHhmZjsKKysJKnArKyA9IChpbmxl biA+PiAxNikgJiAweGZmOworKwkqcCsrID0gKGlubGVuID4+IDgpICYgMHhmZjsKKysJKnArKyA9 IGlubGVuICYgMHhmZjsKKysJLyogTkIga2V5bGVuIGlzIGF0IG1vc3QgMzIgYnl0ZXMgKi8KKysJ KnArKyA9IDA7CisrCSpwKysgPSAwOworKwkqcCsrID0gMDsKKysJKnAgPSAodW5zaWduZWQgY2hh cikoKGNjdHgtPmtleWxlbiArIDE2KSAmIDB4ZmYpOworKwljY3R4LT5ibHRtcF9wb3MgPSA4Owor KwljdHJfQkNDX3VwZGF0ZShjY3R4LCBpbjEsIGluMWxlbik7CisrCWN0cl9CQ0NfdXBkYXRlKGNj dHgsIGluMiwgaW4ybGVuKTsKKysJY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4zLCBpbjNsZW4pOwor KwljdHJfQkNDX3VwZGF0ZShjY3R4LCAmYzgwLCAxKTsKKysJY3RyX0JDQ19maW5hbChjY3R4KTsK KysJLyogU2V0IHVwIGtleSBLICovCisrCUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+S1gsIGNj dHgtPmtleWxlbiAqIDgsICZjY3R4LT5kZl9reGtzKTsKKysJLyogWCBmb2xsb3dzIGtleSBLICov CisrCUFFU19lbmNyeXB0KGNjdHgtPktYICsgY2N0eC0+a2V5bGVuLCBjY3R4LT5LWCwgJmNjdHgt PmRmX2t4a3MpOworKwlBRVNfZW5jcnlwdChjY3R4LT5LWCwgY2N0eC0+S1ggKyAxNiwgJmNjdHgt PmRmX2t4a3MpOworKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQorKwkJQUVTX2VuY3J5cHQoY2N0 eC0+S1ggKyAxNiwgY2N0eC0+S1ggKyAzMiwgJmNjdHgtPmRmX2t4a3MpOworKyNpZiAwCisrZnBy aW50ZihzdGRlcnIsICJPdXRwdXQgb2YgY3RyX2RmOlxuIik7CisrQklPX2R1bXBfZnAoc3RkZXJy LCBjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICsgMTYpOworKyNlbmRpZgorKwl9CisrCisrLyogTkIg dGhlIG5vLWRmICBVcGRhdGUgaW4gU1A4MDAtOTAgc3BlY2lmaWVzIGEgY29uc3RhbnQgaW5wdXQg bGVuZ3RoCisrICogb2Ygc2VlZGxlbiwgaG93ZXZlciBvdGhlciB1c2VzIG9mIHRoaXMgYWxnb3Jp dGhtIHBhZCB0aGUgaW5wdXQgd2l0aAorKyAqIHplcm9lcyBpZiBuZWNlc3NhcnkgYW5kIGhhdmUg dXAgdG8gdHdvIHBhcmFtZXRlcnMgWE9SZWQgdG9nZXRoZXIsCisrICogaGFuZGxlIGJvdGggY2Fz ZXMgaW4gdGhpcyBmdW5jdGlvbiBpbnN0ZWFkLgorKyAqLworKworK3N0YXRpYyB2b2lkIGN0cl9V cGRhdGUoRFJCR19DVFggKmRjdHgsCisrCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVf dCBpbjFsZW4sCisrCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCisr CQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuKQorKwl7CisrCURS QkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKKysJLyoga3MgaXMgYWxyZWFkeSBzZXR1 cCBmb3IgY29ycmVjdCBrZXkgKi8KKysJaW5jXzEyOChjY3R4KTsKKysJQUVTX2VuY3J5cHQoY2N0 eC0+ViwgY2N0eC0+SywgJmNjdHgtPmtzKTsKKysJLyogSWYga2V5bGVuIGxvbmdlciB0aGFuIDEy OCBiaXRzIG5lZWQgZXh0cmEgZW5jcnlwdCAqLworKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQor KwkJeworKwkJaW5jXzEyOChjY3R4KTsKKysJCUFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPksg KyAxNiwgJmNjdHgtPmtzKTsKKysJCX0KKysJaW5jXzEyOChjY3R4KTsKKysJQUVTX2VuY3J5cHQo Y2N0eC0+ViwgY2N0eC0+ViwgJmNjdHgtPmtzKTsKKysJLyogSWYgMTkyIGJpdCBrZXkgcGFydCBv ZiBWIGlzIG9uIGVuZCBvZiBLICovCisrCWlmIChjY3R4LT5rZXlsZW4gPT0gMjQpCisrCQl7Cisr CQltZW1jcHkoY2N0eC0+ViArIDgsIGNjdHgtPlYsIDgpOworKwkJbWVtY3B5KGNjdHgtPlYsIGNj dHgtPksgKyAyNCwgOCk7CisrCQl9CisrCisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdf Q1RSX1VTRV9ERikKKysJCXsKKysJCS8qIElmIG5vIGlucHV0IHJldXNlIGV4aXN0aW5nIGRlcml2 ZWQgdmFsdWUgKi8KKysJCWlmIChpbjEgfHwgbm9uY2UgfHwgaW4yKQorKwkJCWN0cl9kZihjY3R4 LCBpbjEsIGluMWxlbiwgbm9uY2UsIG5vbmNlbGVuLCBpbjIsIGluMmxlbik7CisrCQkvKiBJZiB0 aGlzIGEgcmV1c2UgaW5wdXQgaW4xbGVuICE9IDAgKi8KKysJCWlmIChpbjFsZW4pCisrCQkJY3Ry X1hPUihjY3R4LCBjY3R4LT5LWCwgZGN0eC0+c2VlZGxlbik7CisrCQl9CisrCWVsc2UKKysJCXsK KysJCWN0cl9YT1IoY2N0eCwgaW4xLCBpbjFsZW4pOworKwkJY3RyX1hPUihjY3R4LCBpbjIsIGlu Mmxlbik7CisrCQl9CisrCisrCUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3Ry ZW5ndGgsICZjY3R4LT5rcyk7CisrI2lmIDAKKytmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciB1 cGRhdGUgaXM6XG4iKTsKKytCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPkssIGNjdHgtPmtleWxl bik7CisrQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5WLCAxNik7CisrI2VuZGlmCisrCX0KKysK KytzdGF0aWMgaW50IGRyYmdfY3RyX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKKysJCQljb25zdCB1bnNpZ25l ZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KnBlcnMsIHNpemVfdCBwZXJzbGVuKQorKwl7CisrCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4 LT5kLmN0cjsKKysJbWVtc2V0KGNjdHgtPkssIDAsIHNpemVvZihjY3R4LT5LKSk7CisrCW1lbXNl dChjY3R4LT5WLCAwLCBzaXplb2YoY2N0eC0+VikpOworKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGNj dHgtPkssIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+a3MpOworKwljdHJfVXBkYXRlKGRjdHgsIGVu dCwgZW50bGVuLCBwZXJzLCBwZXJzbGVuLCBub25jZSwgbm9uY2VsZW4pOworKwlyZXR1cm4gMTsK KysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19jdHJfcmVzZWVkKERSQkdfQ1RYICpkY3R4LCAKKysJ CQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCisrCQkJY29uc3QgdW5z aWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCisrCXsKKysJY3RyX1VwZGF0ZShkY3R4 LCBlbnQsIGVudGxlbiwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCk7CisrCXJldHVybiAxOworKwl9 CisrCisrc3RhdGljIGludCBkcmJnX2N0cl9nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQl1 bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCisrCXsKKysJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRj dHgtPmQuY3RyOworKwlpZiAoYWRpbiAmJiBhZGlubGVuKQorKwkJeworKwkJY3RyX1VwZGF0ZShk Y3R4LCBhZGluLCBhZGlubGVuLCBOVUxMLCAwLCBOVUxMLCAwKTsKKysJCS8qIFRoaXMgbWVhbnMg d2UgcmV1c2UgZGVyaXZlZCB2YWx1ZSAqLworKwkJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxB R19DVFJfVVNFX0RGKQorKwkJCXsKKysJCQlhZGluID0gTlVMTDsKKysJCQlhZGlubGVuID0gMTsK KysJCQl9CisrCQl9CisrCWVsc2UKKysJCWFkaW5sZW4gPSAwOworKworKwlmb3IgKDs7KQorKwkJ eworKwkJaW5jXzEyOChjY3R4KTsKKysJCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19U RVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpCisrCQkJeworKwkJCUFFU19lbmNyeXB0KGNjdHgtPlYs IGRjdHgtPmxiLCAmY2N0eC0+a3MpOworKwkJCWRjdHgtPmxiX3ZhbGlkID0gMTsKKysJCQljb250 aW51ZTsKKysJCQl9CisrCQlpZiAob3V0bGVuIDwgMTYpCisrCQkJeworKwkJCS8qIFVzZSBLIGFz IHRlbXAgc3BhY2UgYXMgaXQgd2lsbCBiZSB1cGRhdGVkICovCisrCQkJQUVTX2VuY3J5cHQoY2N0 eC0+ViwgY2N0eC0+SywgJmNjdHgtPmtzKTsKKysJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0 KGRjdHgsIGNjdHgtPkspKQorKwkJCQlyZXR1cm4gMDsKKysJCQltZW1jcHkob3V0LCBjY3R4LT5L LCBvdXRsZW4pOworKwkJCWJyZWFrOworKwkJCX0KKysJCUFFU19lbmNyeXB0KGNjdHgtPlYsIG91 dCwgJmNjdHgtPmtzKTsKKysJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkK KysJCQlyZXR1cm4gMDsKKysJCW91dCArPSAxNjsKKysJCW91dGxlbiAtPSAxNjsKKysJCWlmIChv dXRsZW4gPT0gMCkKKysJCQlicmVhazsKKysJCX0KKysKKysJY3RyX1VwZGF0ZShkY3R4LCBhZGlu LCBhZGlubGVuLCBOVUxMLCAwLCBOVUxMLCAwKTsKKysKKysJcmV0dXJuIDE7CisrCisrCX0KKysK KytzdGF0aWMgaW50IGRyYmdfY3RyX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCisrCXsK KysJbWVtc2V0KCZkY3R4LT5kLmN0ciwgMCwgc2l6ZW9mKERSQkdfQ1RSX0NUWCkpOworKwlyZXR1 cm4gMTsKKysJfQorKworK2ludCBmaXBzX2RyYmdfY3RyX2luaXQoRFJCR19DVFggKmRjdHgpCisr CXsKKysJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOworKworKwlzaXplX3Qga2V5 bGVuOworKworKwlzd2l0Y2ggKGRjdHgtPnR5cGUpCisrCQl7CisrCQljYXNlIE5JRF9hZXNfMTI4 X2N0cjoKKysJCWtleWxlbiA9IDE2OworKwkJYnJlYWs7CisrCisrCQljYXNlIE5JRF9hZXNfMTky X2N0cjoKKysJCWtleWxlbiA9IDI0OworKwkJYnJlYWs7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2 X2N0cjoKKysJCWtleWxlbiA9IDMyOworKwkJYnJlYWs7CisrCisrCQlkZWZhdWx0OgorKwkJcmV0 dXJuIC0yOworKwkJfQorKworKwlkY3R4LT5pbnN0YW50aWF0ZSA9IGRyYmdfY3RyX2luc3RhbnRp YXRlOworKwlkY3R4LT5yZXNlZWQgPSBkcmJnX2N0cl9yZXNlZWQ7CisrCWRjdHgtPmdlbmVyYXRl ID0gZHJiZ19jdHJfZ2VuZXJhdGU7CisrCWRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2N0cl91 bmluc3RhbnRpYXRlOworKworKwljY3R4LT5rZXlsZW4gPSBrZXlsZW47CisrCWRjdHgtPnN0cmVu Z3RoID0ga2V5bGVuICogODsKKysJZGN0eC0+YmxvY2tsZW5ndGggPSAxNjsKKysJZGN0eC0+c2Vl ZGxlbiA9IGtleWxlbiArIDE2OworKworKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NU Ul9VU0VfREYpCisrCQl7CisrCQkvKiBkZiBpbml0aWFsaXNhdGlvbiAqLworKwkJc3RhdGljIHVu c2lnbmVkIGNoYXIgZGZfa2V5WzMyXSA9CisrCQkJeworKwkJCTB4MDAsMHgwMSwweDAyLDB4MDMs MHgwNCwweDA1LDB4MDYsMHgwNywKKysJCQkweDA4LDB4MDksMHgwYSwweDBiLDB4MGMsMHgwZCww eDBlLDB4MGYsCisrCQkJMHgxMCwweDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3LAor KwkJCTB4MTgsMHgxOSwweDFhLDB4MWIsMHgxYywweDFkLDB4MWUsMHgxZiAKKysJCQl9OworKwkJ LyogU2V0IGtleSBzY2hlZHVsZSBmb3IgZGZfa2V5ICovCisrCQlBRVNfc2V0X2VuY3J5cHRfa2V5 KGRmX2tleSwgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5kZl9rcyk7CisrCisrCQlkY3R4LT5taW5f ZW50cm9weSA9IGNjdHgtPmtleWxlbjsKKysJCWRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhf TEVOR1RIOworKwkJZGN0eC0+bWluX25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOworKwkJ ZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOworKwkJZGN0eC0+bWF4X3BlcnMgPSBE UkJHX01BWF9MRU5HVEg7CisrCQlkY3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKKysJ CX0KKysJZWxzZQorKwkJeworKwkJZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOwor KwkJZGN0eC0+bWF4X2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOworKwkJLyogTm9uY2Ugbm90IHVz ZWQgKi8KKysJCWRjdHgtPm1pbl9ub25jZSA9IDA7CisrCQlkY3R4LT5tYXhfbm9uY2UgPSAwOwor KwkJZGN0eC0+bWF4X3BlcnMgPSBkY3R4LT5zZWVkbGVuOworKwkJZGN0eC0+bWF4X2FkaW4gPSBk Y3R4LT5zZWVkbGVuOworKwkJfQorKworKwlkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2OworKwlk Y3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxPDwyNDsKKysKKysJcmV0dXJuIDE7CisrCX0KK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMuZmlwcyBvcGVu c3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jCistLS0gb3BlbnNzbC0xLjAu MWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEu NDAyNzY5MzQzICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJn X2hhc2guYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwMjc2OTM0MyArMDIwMAorQEAgLTAsMCArMSwz NzggQEAKKysvKiBmaXBzL3JhbmQvZmlwc19kcmJnX2hhc2guYyAqLworKy8qIFdyaXR0ZW4gYnkg RHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAor KyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIw MTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Cisr ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisr CisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2lu Y2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5j bHVkZSAiZmlwc19yYW5kX2xjbC5oIgorKworKy8qIFRoaXMgaXMgSGFzaF9kZiBmcm9tIFNQIDgw MC05MCAxMC40LjEgKi8KKysKKytzdGF0aWMgaW50IGhhc2hfZGYoRFJCR19DVFggKmRjdHgsIHVu c2lnbmVkIGNoYXIgKm91dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBp bjFsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAorKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMywgc2l6ZV90IGluM2xlbiwKKysJCQljb25zdCB1bnNp Z25lZCBjaGFyICppbjQsIHNpemVfdCBpbjRsZW4pCisrCXsKKysJRVZQX01EX0NUWCAqbWN0eCA9 ICZkY3R4LT5kLmhhc2gubWN0eDsKKysJdW5zaWduZWQgY2hhciAqdnRtcCA9IGRjdHgtPmQuaGFz aC52dG1wOworKwl1bnNpZ25lZCBjaGFyIHRtcFs2XTsKKysJLyogU3RhbmRhcmQgb25seSBldmVy IG5lZWRzIHNlZWRsZW4gYnl0ZXMgd2hpY2ggaXMgYWx3YXlzIGxlc3MgdGhhbgorKwkgKiBtYXhp bXVtIHBlcm1pdHRlZCBzbyBubyBuZWVkIHRvIGNoZWNrIGxlbmd0aC4KKysJICovCisrCXNpemVf dCBvdXRsZW4gPSBkY3R4LT5zZWVkbGVuOworKwl0bXBbMF0gPSAxOworKwl0bXBbMV0gPSAoKG91 dGxlbiAqIDgpID4+IDI0KSAmIDB4ZmY7CisrCXRtcFsyXSA9ICgob3V0bGVuICogOCkgPj4gMTYp ICYgMHhmZjsKKysJdG1wWzNdID0gKChvdXRsZW4gKiA4KSA+PiA4KSAmIDB4ZmY7CisrCXRtcFs0 XSA9IChvdXRsZW4gKiA4KSAmIDB4ZmY7CisrCWlmICghaW4xKQorKwkJeworKwkJdG1wWzVdID0g KHVuc2lnbmVkIGNoYXIpaW4xbGVuOworKwkJaW4xID0gdG1wICsgNTsKKysJCWluMWxlbiA9IDE7 CisrCQl9CisrCWZvciAoOzspCisrCQl7CisrCQlpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBk Y3R4LT5kLmhhc2gubWQpKQorKwkJCXJldHVybiAwOworKwkJaWYgKCFGSVBTX2RpZ2VzdHVwZGF0 ZShtY3R4LCB0bXAsIDUpKQorKwkJCXJldHVybiAwOworKwkJaWYgKGluMSAmJiAhRklQU19kaWdl c3R1cGRhdGUobWN0eCwgaW4xLCBpbjFsZW4pKQorKwkJCXJldHVybiAwOworKwkJaWYgKGluMiAm JiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW4yLCBpbjJsZW4pKQorKwkJCXJldHVybiAwOwor KwkJaWYgKGluMyAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW4zLCBpbjNsZW4pKQorKwkJ CXJldHVybiAwOworKwkJaWYgKGluNCAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW40LCBp bjRsZW4pKQorKwkJCXJldHVybiAwOworKwkJaWYgKG91dGxlbiA8IGRjdHgtPmJsb2NrbGVuZ3Ro KQorKwkJCXsKKysJCQlpZiAoIUZJUFNfZGlnZXN0ZmluYWwobWN0eCwgdnRtcCwgTlVMTCkpCisr CQkJCXJldHVybiAwOworKwkJCW1lbWNweShvdXQsIHZ0bXAsIG91dGxlbik7CisrCQkJT1BFTlNT TF9jbGVhbnNlKHZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysJCQlyZXR1cm4gMTsKKysJCQl9 CisrCQllbHNlIGlmKCFGSVBTX2RpZ2VzdGZpbmFsKG1jdHgsIG91dCwgTlVMTCkpCisrCQkJcmV0 dXJuIDA7CisrCisrCQlvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7CisrCQlpZiAob3V0bGVu ID09IDApCisrCQkJcmV0dXJuIDE7CisrCQl0bXBbMF0rKzsKKysJCW91dCArPSBkY3R4LT5ibG9j a2xlbmd0aDsKKysJCX0KKysJfQorKworKworKy8qIEFkZCBhbiB1bnNpZ25lZCBidWZmZXIgdG8g dGhlIGJ1ZiB2YWx1ZSwgc3RvcmluZyB0aGUgcmVzdWx0IGluIGJ1Zi4gRm9yCisrICogdGhpcyBh bGdvcml0aG0gdGhlIGxlbmd0aCBvZiBpbnB1dCBuZXZlciBleGNlZWRzIHRoZSBzZWVkIGxlbmd0 aC4KKysgKi8KKysKKytzdGF0aWMgdm9pZCBjdHhfYWRkX2J1ZihEUkJHX0NUWCAqZGN0eCwgdW5z aWduZWQgY2hhciAqYnVmLAorKwkJCQl1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQor Kwl7CisrCXNpemVfdCBpID0gaW5sZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnE7CisrCXVu c2lnbmVkIGNoYXIgYywgKnA7CisrCXAgPSBidWYgKyBkY3R4LT5zZWVkbGVuOworKwlxID0gaW4g KyBpbmxlbjsKKysKKysJT1BFTlNTTF9hc3NlcnQoaSA8PSBkY3R4LT5zZWVkbGVuKTsKKysKKysJ LyogU3BlY2lhbCBjYXNlOiB6ZXJvIGxlbmd0aCwganVzdCBpbmNyZW1lbnQgYnVmZmVyICovCisr CWlmIChpKQorKwkJYyA9IDA7CisrCWVsc2UgCisrCQljID0gMTsKKysKKysJd2hpbGUgKGkpCisr CQl7CisrCQlpbnQgcjsKKysJCXAtLTsKKysJCXEtLTsKKysJCXIgPSAqcCArICpxICsgYzsKKysJ CS8qIENhcnJ5ICovCisrCQlpZiAociA+IDB4ZmYpCisrCQkJYyA9IDE7CisrCQllbHNlCisrCQkJ YyA9IDA7CisrCQkqcCA9IHIgJiAweGZmOworKwkJaS0tOworKwkJfQorKworKwlpID0gZGN0eC0+ c2VlZGxlbiAtIGlubGVuOworKworKwkvKiBJZiBub3QgYWRkaW5nIHdob2xlIGJ1ZmZlciBoYW5k bGUgZmluYWwgY2FycmllcyAqLworKwlpZiAoYyAmJiBpKQorKwkJeworKwkJZG8KKysJCQl7Cisr CQkJcC0tOworKwkJCWMgPSAqcDsKKysJCQljKys7CisrCQkJKnAgPSBjOworKwkJCWlmKGMpCisr CQkJCXJldHVybjsKKysJCQl9IHdoaWxlKGktLSk7CisrCQl9CisrCX0KKysKKysvKiBGaW5hbGlz ZSBhbmQgYWRkIGhhc2ggdG8gViAqLworKwkKKytzdGF0aWMgaW50IGN0eF9hZGRfbWQoRFJCR19D VFggKmRjdHgpCisrCXsKKysJaWYgKCFGSVBTX2RpZ2VzdGZpbmFsKCZkY3R4LT5kLmhhc2gubWN0 eCwgZGN0eC0+ZC5oYXNoLnZ0bXAsIE5VTEwpKQorKwkJCXJldHVybiAwOworKwljdHhfYWRkX2J1 ZihkY3R4LCBkY3R4LT5kLmhhc2guViwgZGN0eC0+ZC5oYXNoLnZ0bXAsIGRjdHgtPmJsb2NrbGVu Z3RoKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGhhc2hfZ2VuKERSQkdfQ1RY ICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4pCisrCXsKKysJRFJCR19I QVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7CisrCWlmIChvdXRsZW4gPT0gMCkKKysJCXJl dHVybiAxOworKwltZW1jcHkoaGN0eC0+dnRtcCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7Cisr CWZvcig7OykKKysJCXsKKysJCUZJUFNfZGlnZXN0aW5pdCgmaGN0eC0+bWN0eCwgaGN0eC0+bWQp OworKwkJRklQU19kaWdlc3R1cGRhdGUoJmhjdHgtPm1jdHgsIGhjdHgtPnZ0bXAsIGRjdHgtPnNl ZWRsZW4pOworKwkJaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4 LT5sYl92YWxpZCkKKysJCQl7CisrCQkJRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgZGN0 eC0+bGIsIE5VTEwpOworKwkJCWRjdHgtPmxiX3ZhbGlkID0gMTsKKysJCQl9CisrCQllbHNlIGlm IChvdXRsZW4gPCBkY3R4LT5ibG9ja2xlbmd0aCkKKysJCQl7CisrCQkJRklQU19kaWdlc3RmaW5h bCgmaGN0eC0+bWN0eCwgaGN0eC0+dnRtcCwgTlVMTCk7CisrCQkJaWYgKCFmaXBzX2RyYmdfY3By bmdfdGVzdChkY3R4LCBoY3R4LT52dG1wKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJbWVtY3B5KG91 dCwgaGN0eC0+dnRtcCwgb3V0bGVuKTsKKysJCQlyZXR1cm4gMTsKKysJCQl9CisrCQllbHNlCisr CQkJeworKwkJCUZJUFNfZGlnZXN0ZmluYWwoJmhjdHgtPm1jdHgsIG91dCwgTlVMTCk7CisrCQkJ aWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBvdXQpKQorKwkJCQlyZXR1cm4gMDsKKysJ CQlvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7CisrCQkJaWYgKG91dGxlbiA9PSAwKQorKwkJ CQlyZXR1cm4gMTsKKysJCQlvdXQgKz0gZGN0eC0+YmxvY2tsZW5ndGg7CisrCQkJfQorKwkJY3R4 X2FkZF9idWYoZGN0eCwgaGN0eC0+dnRtcCwgTlVMTCwgMCk7CisrCQl9CisrCX0KKysKKytzdGF0 aWMgaW50IGRyYmdfaGFzaF9pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKKysJCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqbm9uY2UsIHNpemVfdCBub25jZV9sZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KnBzdHIsIHNpemVfdCBwc3RyX2xlbikKKysJeworKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRj dHgtPmQuaGFzaDsKKysJaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPlYsIAorKwkJCWVudCwgZW50 X2xlbiwgbm9uY2UsIG5vbmNlX2xlbiwgcHN0ciwgcHN0cl9sZW4sCisrCQkJTlVMTCwgMCkpCisr CQlyZXR1cm4gMDsKKysJaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsIAorKwkJCU5VTEwsIDAs IGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4sCisrCQkJTlVMTCwgMCwgTlVMTCwgMCkpCisrCQlyZXR1 cm4gMDsKKysKKysjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCisrCWZwcmludGYoc3RkZXJyLCAiVitD IGFmdGVyIGluc3RhbnRpYXRlOlxuIik7CisrCWhleHByaW50KHN0ZGVyciwgaGN0eC0+ViwgZGN0 eC0+c2VlZGxlbik7CisrCWhleHByaW50KHN0ZGVyciwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7 CisrI2VuZGlmCisrCXJldHVybiAxOworKwl9CisrCisrCQorK3N0YXRpYyBpbnQgZHJiZ19oYXNo X3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBz aXplX3QgZW50X2xlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFk aW5fbGVuKQorKwl7CisrCURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKwkv KiBWIGFib3V0IHRvIGJlIHVwZGF0ZWQgc28gdXNlIEMgYXMgb3V0cHV0IGluc3RlYWQgKi8KKysJ aWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsCisrCQkJTlVMTCwgMSwgaGN0eC0+ViwgZGN0eC0+ c2VlZGxlbiwKKysJCQllbnQsIGVudF9sZW4sIGFkaW4sIGFkaW5fbGVuKSkKKysJCXJldHVybiAw OworKwltZW1jcHkoaGN0eC0+ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7CisrCWlmICghaGFz aF9kZihkY3R4LCBoY3R4LT5DLCBOVUxMLCAwLAorKwkJCWhjdHgtPlYsIGRjdHgtPnNlZWRsZW4s IE5VTEwsIDAsIE5VTEwsIDApKQorKwkJcmV0dXJuIDA7CisrI2lmZGVmIEhBU0hfRFJCR19UUkFD RQorKwlmcHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciByZXNlZWQ6XG4iKTsKKysJaGV4cHJpbnQo c3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4 LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysjZW5kaWYKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0 aWMgaW50IGRyYmdfaGFzaF9nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJdW5zaWduZWQg Y2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGlu LCBzaXplX3QgYWRpbl9sZW4pCisrCXsKKysJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5k Lmhhc2g7CisrCUVWUF9NRF9DVFggKm1jdHggPSAmaGN0eC0+bWN0eDsKKysJdW5zaWduZWQgY2hh ciB0bXBbNF07CisrCWlmIChhZGluICYmIGFkaW5fbGVuKQorKwkJeworKwkJdG1wWzBdID0gMjsK KysJCWlmICghRklQU19kaWdlc3Rpbml0KG1jdHgsIGhjdHgtPm1kKSkKKysJCQlyZXR1cm4gMDsK KysJCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCB0bXAsIDEpKQorKwkJCXJldHVybiAwOwor KwkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pKQor KwkJCXJldHVybiAwOworKwkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIGFkaW4sIGFkaW5f bGVuKSkKKysJCQlyZXR1cm4gMDsKKysJCWlmICghY3R4X2FkZF9tZChkY3R4KSkKKysJCQlyZXR1 cm4gMDsKKysJCX0KKysJaWYgKCFoYXNoX2dlbihkY3R4LCBvdXQsIG91dGxlbikpCisrCQlyZXR1 cm4gMDsKKysKKysJdG1wWzBdID0gMzsKKysJaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwgaGN0 eC0+bWQpKQorKwkJcmV0dXJuIDA7CisrCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCB0bXAs IDEpKQorKwkJcmV0dXJuIDA7CisrCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCBoY3R4LT5W LCBkY3R4LT5zZWVkbGVuKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIWN0eF9hZGRfbWQoZGN0 eCkpCisrCQlyZXR1cm4gMDsKKysKKysJY3R4X2FkZF9idWYoZGN0eCwgaGN0eC0+ViwgaGN0eC0+ QywgZGN0eC0+c2VlZGxlbik7CisrCisrCXRtcFswXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+ PiAyNCkgJiAweGZmOworKwl0bXBbMV0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gMTYpICYg MHhmZjsKKysJdG1wWzJdID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDgpICYgMHhmZjsKKysJ dG1wWzNdID0gZGN0eC0+cmVzZWVkX2NvdW50ZXIgJiAweGZmOworKwljdHhfYWRkX2J1ZihkY3R4 LCBoY3R4LT5WLCB0bXAsIDQpOworKyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UKKysJZnByaW50Zihz dGRlcnIsICJWK0MgYWZ0ZXIgZ2VuZXJhdGU6XG4iKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4 LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5z ZWVkbGVuKTsKKysjZW5kaWYKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdf aGFzaF91bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCUVWUF9NRF9DVFhfY2xl YW51cCgmZGN0eC0+ZC5oYXNoLm1jdHgpOworKwlPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQuaGFz aCwgc2l6ZW9mKERSQkdfSEFTSF9DVFgpKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgZmlw c19kcmJnX2hhc2hfaW5pdChEUkJHX0NUWCAqZGN0eCkKKysJeworKwljb25zdCBFVlBfTUQgKm1k OworKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKKysJbWQgPSBGSVBTX2dl dF9kaWdlc3RieW5pZChkY3R4LT50eXBlKTsKKysJaWYgKCFtZCkKKysJCXJldHVybiAtMjsKKysJ c3dpdGNoIChkY3R4LT50eXBlKQorKwkJeworKwkJY2FzZSBOSURfc2hhMToKKysJCWRjdHgtPnN0 cmVuZ3RoID0gMTI4OworKwkJYnJlYWs7CisrCisrCQljYXNlIE5JRF9zaGEyMjQ6CisrCQlkY3R4 LT5zdHJlbmd0aCA9IDE5MjsKKysJCWJyZWFrOworKworKwkJZGVmYXVsdDoKKysJCWRjdHgtPnN0 cmVuZ3RoID0gMjU2OworKwkJYnJlYWs7CisrCQl9CisrCisrCWRjdHgtPmluc3RhbnRpYXRlID0g ZHJiZ19oYXNoX2luc3RhbnRpYXRlOworKwlkY3R4LT5yZXNlZWQgPSBkcmJnX2hhc2hfcmVzZWVk OworKwlkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfaGFzaF9nZW5lcmF0ZTsKKysJZGN0eC0+dW5pbnN0 YW50aWF0ZSA9IGRyYmdfaGFzaF91bmluc3RhbnRpYXRlOworKworKwlkY3R4LT5kLmhhc2gubWQg PSBtZDsKKysJRVZQX01EX0NUWF9pbml0KCZoY3R4LT5tY3R4KTsKKysKKysJLyogVGhlc2UgYXJl IHRha2VuIGZyb20gU1AgODAwLTkwIDEwLjEgdGFibGUgMiAqLworKworKwlkY3R4LT5ibG9ja2xl bmd0aCA9IE1fRVZQX01EX3NpemUobWQpOworKwlpZiAoZGN0eC0+YmxvY2tsZW5ndGggPiAzMikK KysJCWRjdHgtPnNlZWRsZW4gPSAxMTE7CisrCWVsc2UKKysJCWRjdHgtPnNlZWRsZW4gPSA1NTsK KysKKysKKysJZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7CisrCWRjdHgt Pm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOworKworKwlkY3R4LT5taW5fbm9uY2UgPSBk Y3R4LT5taW5fZW50cm9weSAvIDI7CisrCWRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdU SDsKKysKKysJZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7CisrCWRjdHgtPm1heF9h ZGluID0gRFJCR19NQVhfTEVOR1RIOworKworKwlkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2Owor KwlkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxPDwyNDsKKysKKysJcmV0dXJuIDE7CisrCX0KK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMuZmlwcyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jCistLS0gb3BlbnNzbC0x LjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6 NTEuNDAyNzY5MzQzICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19k cmJnX2htYWMuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwMjc2OTM0MyArMDIwMAorQEAgLTAsMCAr MSwyODEgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19kcmJnX2htYWMuYyAqLworKy8qIFdyaXR0ZW4g YnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNT TAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMp IDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICov CisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNs dWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisrc3RhdGljIGludCBkcmJnX2htYWNfdXBkYXRlKERS QkdfQ1RYICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFs ZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKKysJCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuCisrCQkJKQorKwl7CisrCXN0 YXRpYyB1bnNpZ25lZCBjaGFyIGMwID0gMCwgYzEgPSAxOworKwlEUkJHX0hNQUNfQ1RYICpobWFj ID0gJmRjdHgtPmQuaG1hYzsKKysJSE1BQ19DVFggKmhjdHggPSAmaG1hYy0+aGN0eDsKKysKKysJ aWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMt Pm1kLCBOVUxMKSkKKysJCXJldHVybiAwOworKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMt PlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysJCXJldHVybiAwOworKwlpZiAoIUhNQUNfVXBkYXRl KGhjdHgsICZjMCwgMSkpCisrCQlyZXR1cm4gMDsKKysJaWYgKGluMWxlbiAmJiAhSE1BQ19VcGRh dGUoaGN0eCwgaW4xLCBpbjFsZW4pKQorKwkJcmV0dXJuIDA7CisrCWlmIChpbjJsZW4gJiYgIUhN QUNfVXBkYXRlKGhjdHgsIGluMiwgaW4ybGVuKSkKKysJCXJldHVybiAwOworKwlpZiAoaW4zbGVu ICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjMsIGluM2xlbikpCisrCQlyZXR1cm4gMDsKKysKKysJ aWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPkssIE5VTEwpKQorKwkJcmV0dXJuIDA7CisrCisr CWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFj LT5tZCwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFj LT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKCFITUFDX0Zp bmFsKGhjdHgsIGhtYWMtPlYsIE5VTEwpKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghaW4xbGVu ICYmICFpbjJsZW4gJiYgIWluM2xlbikKKysJCXJldHVybiAxOworKworKwlpZiAoIUhNQUNfSW5p dF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQor KwkJcmV0dXJuIDA7CisrCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+Ymxv Y2tsZW5ndGgpKQorKwkJcmV0dXJuIDA7CisrCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgJmMxLCAx KSkKKysJCXJldHVybiAwOworKwlpZiAoaW4xbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjEs IGluMWxlbikpCisrCQlyZXR1cm4gMDsKKysJaWYgKGluMmxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0 eCwgaW4yLCBpbjJsZW4pKQorKwkJcmV0dXJuIDA7CisrCWlmIChpbjNsZW4gJiYgIUhNQUNfVXBk YXRlKGhjdHgsIGluMywgaW4zbGVuKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUhNQUNfRmlu YWwoaGN0eCwgaG1hYy0+SywgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKCFITUFDX0lu aXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkK KysJCXJldHVybiAwOworKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJs b2NrbGVuZ3RoKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1h Yy0+ViwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysKKysJcmV0dXJuIDE7CisrCisrCX0KKysKKytz dGF0aWMgaW50IGRyYmdfaG1hY19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29u c3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKKysJCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZV9sZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKnBzdHIsIHNpemVfdCBwc3RyX2xlbikKKysJeworKwlEUkJHX0hNQUNfQ1RYICpobWFjID0g JmRjdHgtPmQuaG1hYzsKKysJbWVtc2V0KGhtYWMtPkssIDAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsK KysJbWVtc2V0KGhtYWMtPlYsIDEsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysJaWYgKCFkcmJnX2ht YWNfdXBkYXRlKGRjdHgsCisrCQkJZW50LCBlbnRfbGVuLCBub25jZSwgbm9uY2VfbGVuLCBwc3Ry LCBwc3RyX2xlbikpCisrCQlyZXR1cm4gMDsKKysKKysjaWZkZWYgSE1BQ19EUkJHX1RSQUNFCisr CWZwcmludGYoc3RkZXJyLCAiSytWIGFmdGVyIGluc3RhbnRpYXRlOlxuIik7CisrCWhleHByaW50 KHN0ZGVyciwgaG1hYy0+SywgaG1hYy0+YmxvY2tsZW5ndGgpOworKwloZXhwcmludChzdGRlcnIs IGhtYWMtPlYsIGhtYWMtPmJsb2NrbGVuZ3RoKTsKKysjZW5kaWYKKysJcmV0dXJuIDE7CisrCX0K KysKKytzdGF0aWMgaW50IGRyYmdfaG1hY19yZXNlZWQoRFJCR19DVFggKmRjdHgsCisrCQkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCisrCQkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKKysJeworKwlpZiAoIWRyYmdfaG1hY191 cGRhdGUoZGN0eCwKKysJCQllbnQsIGVudF9sZW4sIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwKSkK KysJCXJldHVybiAwOworKworKyNpZmRlZiBITUFDX0RSQkdfVFJBQ0UKKysJeworKwkJRFJCR19I TUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7CisrCQlmcHJpbnRmKHN0ZGVyciwgIksrViBh ZnRlciByZXNlZWQ6XG4iKTsKKysJCWhleHByaW50KHN0ZGVyciwgaG1hYy0+SywgaG1hYy0+Ymxv Y2tsZW5ndGgpOworKwkJaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9ja2xlbmd0 aCk7CisrCX0KKysjZW5kaWYKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdf aG1hY19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBz aXplX3Qgb3V0bGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRp bl9sZW4pCisrCXsKKysJRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7CisrCUhN QUNfQ1RYICpoY3R4ID0gJmhtYWMtPmhjdHg7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKlZ0bXAg PSBobWFjLT5WOworKwlpZiAoYWRpbl9sZW4gJiYgIWRyYmdfaG1hY191cGRhdGUoZGN0eCwgYWRp biwgYWRpbl9sZW4sCisrCQkJCQkJTlVMTCwgMCwgTlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysJ Zm9yICg7OykKKysJCXsKKysJCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgt PmJsb2NrbGVuZ3RoLAorKwkJCQkJCQlobWFjLT5tZCwgTlVMTCkpCisrCQkJcmV0dXJuIDA7Cisr CQlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIFZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysJCQly ZXR1cm4gMDsKKysJCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0 eC0+bGJfdmFsaWQpCisrCQkJeworKwkJCWlmICghSE1BQ19GaW5hbChoY3R4LCBkY3R4LT5sYiwg TlVMTCkpCisrCQkJCXJldHVybiAwOworKwkJCWRjdHgtPmxiX3ZhbGlkID0gMTsKKysJCQlWdG1w ID0gZGN0eC0+bGI7CisrCQkJY29udGludWU7CisrCQkJfQorKwkJZWxzZSBpZiAob3V0bGVuID4g ZGN0eC0+YmxvY2tsZW5ndGgpCisrCQkJeworKwkJCWlmICghSE1BQ19GaW5hbChoY3R4LCBvdXQs IE5VTEwpKQorKwkJCQlyZXR1cm4gMDsKKysJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRj dHgsIG91dCkpCisrCQkJCXJldHVybiAwOworKwkJCVZ0bXAgPSBvdXQ7CisrCQkJfQorKwkJZWxz ZQorKwkJCXsKKysJCQlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCisrCQkJ CXJldHVybiAwOworKwkJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgaG1hYy0+Vikp CisrCQkJCXJldHVybiAwOworKwkJCW1lbWNweShvdXQsIGhtYWMtPlYsIG91dGxlbik7CisrCQkJ YnJlYWs7CisrCQkJfQorKwkJb3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOworKwkJb3V0bGVuIC09 IGRjdHgtPmJsb2NrbGVuZ3RoOworKwkJfQorKwlpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwg YWRpbiwgYWRpbl9sZW4sIE5VTEwsIDAsIE5VTEwsIDApKQorKwkJcmV0dXJuIDA7CisrCisrCXJl dHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBkcmJnX2htYWNfdW5pbnN0YW50aWF0ZShEUkJH X0NUWCAqZGN0eCkKKysJeworKwlITUFDX0NUWF9jbGVhbnVwKCZkY3R4LT5kLmhtYWMuaGN0eCk7 CisrCU9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZC5obWFjLCBzaXplb2YoRFJCR19ITUFDX0NUWCkp OworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RY ICpkY3R4KQorKwl7CisrCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOworKwlEUkJHX0hNQUNfQ1RY ICpoY3R4ID0gJmRjdHgtPmQuaG1hYzsKKysJZGN0eC0+c3RyZW5ndGggPSAyNTY7CisrCXN3aXRj aCAoZGN0eC0+dHlwZSkKKysJCXsKKysJCWNhc2UgTklEX2htYWNXaXRoU0hBMToKKysJCW1kID0g RVZQX3NoYTEoKTsKKysJCWRjdHgtPnN0cmVuZ3RoID0gMTI4OworKwkJYnJlYWs7CisrCisrCQlj YXNlIE5JRF9obWFjV2l0aFNIQTIyNDoKKysJCW1kID0gRVZQX3NoYTIyNCgpOworKwkJZGN0eC0+ c3RyZW5ndGggPSAxOTI7CisrCQlicmVhazsKKysKKysJCWNhc2UgTklEX2htYWNXaXRoU0hBMjU2 OgorKwkJbWQgPSBFVlBfc2hhMjU2KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgTklEX2htYWNX aXRoU0hBMzg0OgorKwkJbWQgPSBFVlBfc2hhMzg0KCk7CisrCQlicmVhazsKKysKKysJCWNhc2Ug TklEX2htYWNXaXRoU0hBNTEyOgorKwkJbWQgPSBFVlBfc2hhNTEyKCk7CisrCQlicmVhazsKKysK KysJCWRlZmF1bHQ6CisrCQlkY3R4LT5zdHJlbmd0aCA9IDA7CisrCQlyZXR1cm4gLTI7CisrCQl9 CisrICAgICAgICBkY3R4LT5pbnN0YW50aWF0ZSA9IGRyYmdfaG1hY19pbnN0YW50aWF0ZTsKKysg ICAgICAgIGRjdHgtPnJlc2VlZCA9IGRyYmdfaG1hY19yZXNlZWQ7CisrICAgICAgICBkY3R4LT5n ZW5lcmF0ZSA9IGRyYmdfaG1hY19nZW5lcmF0ZTsKKysgICAgICAgIGRjdHgtPnVuaW5zdGFudGlh dGUgPSBkcmJnX2htYWNfdW5pbnN0YW50aWF0ZTsKKysJSE1BQ19DVFhfaW5pdCgmaGN0eC0+aGN0 eCk7CisrCWhjdHgtPm1kID0gbWQ7CisrCWRjdHgtPmJsb2NrbGVuZ3RoID0gTV9FVlBfTURfc2l6 ZShtZCk7CisrCWRjdHgtPnNlZWRsZW4gPSBNX0VWUF9NRF9zaXplKG1kKTsKKysKKysgICAgICAg IGRjdHgtPm1pbl9lbnRyb3B5ID0gZGN0eC0+c3RyZW5ndGggLyA4OworKyAgICAgICAgZGN0eC0+ bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7CisrCisrICAgICAgICBkY3R4LT5taW5fbm9u Y2UgPSBkY3R4LT5taW5fZW50cm9weSAvIDI7CisrICAgICAgICBkY3R4LT5tYXhfbm9uY2UgPSBE UkJHX01BWF9MRU5HVEg7CisrCisrICAgICAgICBkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xF TkdUSDsKKysgICAgICAgIGRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOworKworKyAg ICAgICAgZGN0eC0+bWF4X3JlcXVlc3QgPSAxPDwxNjsKKysgICAgICAgIGRjdHgtPnJlc2VlZF9p bnRlcnZhbCA9IDE8PDI0OworKworKwlyZXR1cm4gMTsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5 cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX2xpYi5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDI3NjkzNDMgKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMJMjAxMi0wNC0y NiAxODowMDo1MS40MDI3NjkzNDMgKzAyMDAKK0BAIC0wLDAgKzEsNTc4IEBACisrLyogV3JpdHRl biBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVu U1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAo YykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgor KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgor KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisr ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisr ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg Ki8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5k Lmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgi CisrCisrLyogU3VwcG9ydCBmcmFtZXdvcmsgZm9yIFNQODAwLTkwIERSQkdzICovCisrCisraW50 IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZs YWdzKQorKwl7CisrCWludCBydjsKKysJbWVtc2V0KGRjdHgsIDAsIHNpemVvZihEUkJHX0NUWCkp OworKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOworKwlkY3R4LT54 ZmxhZ3MgPSBmbGFnczsKKysJZGN0eC0+dHlwZSA9IHR5cGU7CisrCisrCWRjdHgtPmlmbGFncyA9 IDA7CisrCWRjdHgtPmVudHJvcHlfYmxvY2tsZW4gPSAwOworKwlkY3R4LT5oZWFsdGhfY2hlY2tf Y250ID0gMDsKKysJZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsID0gRFJCR19IRUFMVEhfSU5U RVJWQUw7CisrCisrCXJ2ID0gZmlwc19kcmJnX2hhc2hfaW5pdChkY3R4KTsKKysKKysJaWYgKHJ2 ID09IC0yKQorKwkJcnYgPSBmaXBzX2RyYmdfY3RyX2luaXQoZGN0eCk7CisrCWlmIChydiA9PSAt MikKKysJCXJ2ID0gZmlwc19kcmJnX2htYWNfaW5pdChkY3R4KTsKKysKKysJaWYgKHJ2IDw9IDAp CisrCQl7CisrCQlpZiAocnYgPT0gLTIpCisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lO SVQsIEZJUFNfUl9VTlNVUFBPUlRFRF9EUkJHX1RZUEUpOworKwkJZWxzZQorKwkJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19JTklULCBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcpOwor KwkJfQorKworKwkvKiBJZiBub3QgaW4gdGVzdCBtb2RlIHJ1biBzZWxmdGVzdHMgb24gRFJCRyBv ZiB0aGUgc2FtZSB0eXBlICovCisrCisrCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19U RVNUKSkKKysJCXsKKysJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKKysJCQl7 CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlM VVJFKTsKKysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9CisrCisrCXJldHVybiBydjsKKysJfQor KworK0RSQkdfQ1RYICpGSVBTX2RyYmdfbmV3KGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3Mp CisrCXsKKysJRFJCR19DVFggKmRjdHg7CisrCWRjdHggPSBPUEVOU1NMX21hbGxvYyhzaXplb2Yo RFJCR19DVFgpKTsKKysJaWYgKCFkY3R4KQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX05FVywgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworKwkJcmV0dXJuIE5VTEw7CisrCQl9Cisr CisrCWlmICh0eXBlID09IDApCisrCQl7CisrCQltZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdf Q1RYKSk7CisrCQlkY3R4LT50eXBlID0gMDsKKysJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVT X1VOSU5JVElBTElTRUQ7CisrCQlyZXR1cm4gZGN0eDsKKysJCX0KKysKKysJaWYgKEZJUFNfZHJi Z19pbml0KGRjdHgsIHR5cGUsIGZsYWdzKSA8PSAwKQorKwkJeworKwkJT1BFTlNTTF9mcmVlKGRj dHgpOworKwkJcmV0dXJuIE5VTEw7CisrCQl9CisrCQkKKysJcmV0dXJuIGRjdHg7CisrCX0KKysK Kyt2b2lkIEZJUFNfZHJiZ19mcmVlKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWlmIChkY3R4LT51 bmluc3RhbnRpYXRlKQorKwkJZGN0eC0+dW5pbnN0YW50aWF0ZShkY3R4KTsKKysJLyogRG9uJ3Qg ZnJlZSB1cCBkZWZhdWx0IERSQkcgKi8KKysJaWYgKGRjdHggPT0gRklQU19nZXRfZGVmYXVsdF9k cmJnKCkpCisrCQl7CisrCQltZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7CisrCQlk Y3R4LT50eXBlID0gMDsKKysJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElT RUQ7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCU9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZCwgc2l6 ZW9mKGRjdHgtPmQpKTsKKysJCU9QRU5TU0xfZnJlZShkY3R4KTsKKysJCX0KKysJfQorKworK3N0 YXRpYyBzaXplX3QgZmlwc19nZXRfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hh ciAqKnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9s ZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciAqdG91dCwgKnA7CisrCXNpemVfdCBibCA9IGRjdHgt PmVudHJvcHlfYmxvY2tsZW4sIHJ2OworKwlpZiAoIWRjdHgtPmdldF9lbnRyb3B5KQorKwkJcmV0 dXJuIDA7CisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCB8fCAhYmwpCisrCQly ZXR1cm4gZGN0eC0+Z2V0X2VudHJvcHkoZGN0eCwgcG91dCwgZW50cm9weSwgbWluX2xlbiwgbWF4 X2xlbik7CisrCXJ2ID0gZGN0eC0+Z2V0X2VudHJvcHkoZGN0eCwgJnRvdXQsIGVudHJvcHkgKyBi bCwKKysJCQkJbWluX2xlbiArIGJsLCBtYXhfbGVuICsgYmwpOworKwlpZiAodG91dCA9PSBOVUxM KQorKwkJcmV0dXJuIDA7CisrCSpwb3V0ID0gdG91dCArIGJsOworKwlpZiAocnYgPCAobWluX2xl biArIGJsKSB8fCAocnYgJSBibCkpCisrCQlyZXR1cm4gMDsKKysJLyogQ29tcGFyZSBjb25zZWN1 dGl2ZSBibG9ja3MgZm9yIGNvbnRpbnVvdXMgUFJORyB0ZXN0ICovCisrCWZvciAocCA9IHRvdXQ7 IHAgPCB0b3V0ICsgcnYgLSBibDsgcCArPSBibCkKKysJCXsKKysJCWlmICghbWVtY21wKHAsIHAg KyBibCwgYmwpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0dFVF9FTlRST1BZLCBG SVBTX1JfRU5UUk9QWV9TT1VSQ0VfU1RVQ0spOworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0K KysJcnYgLT0gYmw7CisrCWlmIChydiA+IG1heF9sZW4pCisrCQlyZXR1cm4gbWF4X2xlbjsKKysJ cmV0dXJuIHJ2OworKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19jbGVhbnVwX2VudHJvcHkoRFJC R19DVFggKmRjdHgsCisrCQkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKQorKwl7 CisrCXNpemVfdCBibDsKKysJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQorKwkJ YmwgPSAwOworKwllbHNlCisrCQlibCA9IGRjdHgtPmVudHJvcHlfYmxvY2tsZW47CisrCS8qIENh bGwgY2xlYW51cCB3aXRoIG9yaWdpbmFsIGFyZ3VtZW50cyAqLworKwlkY3R4LT5jbGVhbnVwX2Vu dHJvcHkoZGN0eCwgb3V0IC0gYmwsIG9sZW4gKyBibCk7CisrCX0KKysKKysKKytpbnQgRklQU19k cmJnX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFy ICpwZXJzLCBzaXplX3QgcGVyc2xlbikKKysJeworKwlzaXplX3QgZW50bGVuID0gMCwgbm9uY2Vs ZW4gPSAwOworKwl1bnNpZ25lZCBjaGFyICpub25jZSA9IE5VTEwsICplbnRyb3B5ID0gTlVMTDsK KysKKysjaWYgMAorKwkvKiBQdXQgaGVyZSBzbyBlcnJvciBzY3JpcHQgcGlja3MgdGhlbSB1cCAq LworKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsCisrCQkJCUZJUFNfUl9Q RVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HKTsKKysJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfSU5fRVJST1JfU1RBVEUpOworKwlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRCk7Cisr CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJ RVZJTkdfRU5UUk9QWSk7CisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwg RklQU19SX0VSUk9SX1JFVFJJRVZJTkdfTk9OQ0UpOworKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfSU5TVEFOVElBVEUsIEZJUFNfUl9JTlNUQU5USUFURV9FUlJPUik7CisrCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VEKTsK KysjZW5kaWYKKysKKysJaW50IHIgPSAwOworKworKwlpZiAocGVyc2xlbiA+IGRjdHgtPm1heF9w ZXJzKQorKwkJeworKwkJciA9IEZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05H OworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghZGN0eC0+aW5zdGFudGlhdGUpCisrCQl7 CisrCQlyID0gRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VEOworKwkJZ290byBlbmQ7CisrCQl9 CisrCisrCWlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysJ CXsKKysJCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfRVJST1IpCisrCQkJciA9IEZJ UFNfUl9JTl9FUlJPUl9TVEFURTsKKysJCWVsc2UKKysJCQlyID0gRklQU19SX0FMUkVBRFlfSU5T VEFOVElBVEVEOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWRjdHgtPnN0YXR1cyA9IERSQkdf U1RBVFVTX0VSUk9SOworKworKwllbnRsZW4gPSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZlbnRy b3B5LCBkY3R4LT5zdHJlbmd0aCwKKysJCQkJZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9l bnRyb3B5KTsKKysKKysJaWYgKGVudGxlbiA8IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+ IGRjdHgtPm1heF9lbnRyb3B5KQorKwkJeworKwkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5H X0VOVFJPUFk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGRjdHgtPm1heF9ub25jZSA+ IDAgJiYgZGN0eC0+Z2V0X25vbmNlKQorKwkJeworKwkJbm9uY2VsZW4gPSBkY3R4LT5nZXRfbm9u Y2UoZGN0eCwgJm5vbmNlLAorKwkJCQkJZGN0eC0+c3RyZW5ndGggLyAyLAorKwkJCQkJZGN0eC0+ bWluX25vbmNlLCBkY3R4LT5tYXhfbm9uY2UpOworKworKwkJaWYgKG5vbmNlbGVuIDwgZGN0eC0+ bWluX25vbmNlIHx8IG5vbmNlbGVuID4gZGN0eC0+bWF4X25vbmNlKQorKwkJCXsKKysJCQlyID0g RklQU19SX0VSUk9SX1JFVFJJRVZJTkdfTk9OQ0U7CisrCQkJZ290byBlbmQ7CisrCQkJfQorKwor KwkJfQorKworKwlpZiAoIWRjdHgtPmluc3RhbnRpYXRlKGRjdHgsIAorKwkJCQllbnRyb3B5LCBl bnRsZW4sCisrCQkJCW5vbmNlLCBub25jZWxlbiwKKysJCQkJcGVycywgcGVyc2xlbikpCisrCQl7 CisrCQlyID0gRklQU19SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRzsKKysJCWdvdG8gZW5kOwor KwkJfQorKworKworKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsKKysJaWYgKCEo ZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKSkKKysJCWRjdHgtPnJlc2VlZF9jb3Vu dGVyID0gMTsKKysKKysJZW5kOgorKworKwlpZiAoZW50cm9weSAmJiBkY3R4LT5jbGVhbnVwX2Vu dHJvcHkpCisrCQlmaXBzX2NsZWFudXBfZW50cm9weShkY3R4LCBlbnRyb3B5LCBlbnRsZW4pOwor KworKwlpZiAobm9uY2UgJiYgZGN0eC0+Y2xlYW51cF9ub25jZSkKKysJCWRjdHgtPmNsZWFudXBf bm9uY2UoZGN0eCwgbm9uY2UsIG5vbmNlbGVuKTsKKysKKysJaWYgKGRjdHgtPnN0YXR1cyA9PSBE UkJHX1NUQVRVU19SRUFEWSkKKysJCXJldHVybiAxOworKworKwlpZiAociAmJiAhKGRjdHgtPmlm bGFncyAmIERSQkdfRkxBR19OT0VSUikpCisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5T VEFOVElBVEUsIHIpOworKworKwlyZXR1cm4gMDsKKysKKysJfQorKworK3N0YXRpYyBpbnQgZHJi Z19yZXNlZWQoRFJCR19DVFggKmRjdHgsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwg c2l6ZV90IGFkaW5sZW4sIGludCBoY2hlY2spCisrCXsKKysJdW5zaWduZWQgY2hhciAqZW50cm9w eSA9IE5VTEw7CisrCXNpemVfdCBlbnRsZW4gPSAwOworKwlpbnQgciA9IDA7CisrCisrI2lmIDAK KysJRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEKTsK KysJRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RP T19MT05HKTsKKysjZW5kaWYKKysJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRUFE WQorKwkJJiYgZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFU0VFRCkKKysJCXsKKysJCWlm IChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfRVJST1IpCisrCQkJciA9IEZJUFNfUl9JTl9F UlJPUl9TVEFURTsKKysJCWVsc2UgaWYoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1VOSU5J VElBTElTRUQpCisrCQkJciA9IEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEOworKwkJZ290byBlbmQ7 CisrCQl9CisrCisrCWlmICghYWRpbikKKysJCWFkaW5sZW4gPSAwOworKwllbHNlIGlmIChhZGlu bGVuID4gZGN0eC0+bWF4X2FkaW4pCisrCQl7CisrCQlyID0gRklQU19SX0FERElUSU9OQUxfSU5Q VVRfVE9PX0xPTkc7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJZGN0eC0+c3RhdHVzID0gRFJC R19TVEFUVVNfRVJST1I7CisrCS8qIFBlZm9ybSBoZWFsdGggY2hlY2sgb24gYWxsIHJlc2VlZCBv cGVyYXRpb25zIGlmIG5vdCBhIHByZWRpY3Rpb24KKysJICogcmVzaXN0YW5jZSByZXF1ZXN0IGFu ZCBub3QgaW4gdGVzdCBtb2RlLgorKwkgKi8KKysJaWYgKGhjaGVjayAmJiAhKGRjdHgtPnhmbGFn cyAmIERSQkdfRkxBR19URVNUKSkKKysJCXsKKysJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVj ayhkY3R4KSkKKysJCQl7CisrCQkJciA9IEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFOworKwkJCWdv dG8gZW5kOworKwkJCX0KKysJCX0KKysKKysJZW50bGVuID0gZmlwc19nZXRfZW50cm9weShkY3R4 LCAmZW50cm9weSwgZGN0eC0+c3RyZW5ndGgsCisrCQkJCWRjdHgtPm1pbl9lbnRyb3B5LCBkY3R4 LT5tYXhfZW50cm9weSk7CisrCisrCWlmIChlbnRsZW4gPCBkY3R4LT5taW5fZW50cm9weSB8fCBl bnRsZW4gPiBkY3R4LT5tYXhfZW50cm9weSkKKysJCXsKKysJCXIgPSBGSVBTX1JfRVJST1JfUkVU UklFVklOR19FTlRST1BZOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghZGN0eC0+cmVz ZWVkKGRjdHgsIGVudHJvcHksIGVudGxlbiwgYWRpbiwgYWRpbmxlbikpCisrCQlnb3RvIGVuZDsK KysKKysJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVBRFk7CisrCWlmICghKGRjdHgtPmlm bGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCisrCQlkY3R4LT5yZXNlZWRfY291bnRlciA9IDE7 CisrCWVuZDoKKysKKysJaWYgKGVudHJvcHkgJiYgZGN0eC0+Y2xlYW51cF9lbnRyb3B5KQorKwkJ Zmlwc19jbGVhbnVwX2VudHJvcHkoZGN0eCwgZW50cm9weSwgZW50bGVuKTsKKysKKysJaWYgKGRj dHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSkKKysJCXJldHVybiAxOworKworKwlpZiAo ciAmJiAhKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCisrCQlGSVBTZXJyKEZJUFNf Rl9EUkJHX1JFU0VFRCwgcik7CisrCisrCXJldHVybiAwOworKwl9CisrCisraW50IEZJUFNfZHJi Z19yZXNlZWQoRFJCR19DVFggKmRjdHgsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwg c2l6ZV90IGFkaW5sZW4pCisrCXsKKysJcmV0dXJuIGRyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFk aW5sZW4sIDEpOworKwl9CisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfY2hlY2soRFJCR19DVFgg KmRjdHgpCisrCXsKKysJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQorKwkJcmV0 dXJuIDE7CisrCWRjdHgtPmhlYWx0aF9jaGVja19jbnQrKzsKKysJaWYgKGRjdHgtPmhlYWx0aF9j aGVja19jbnQgPj0gZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsKQorKwkJeworKwkJaWYgKCFG SVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfQ0hFQ0ssIEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFKTsKKysJCQlyZXR1cm4gMDsK KysJCQl9CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCisraW50IEZJUFNfZHJiZ19nZW5lcmF0 ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKwkJ CWludCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRp biwgc2l6ZV90IGFkaW5sZW4pCisrCXsKKysJaW50IHIgPSAwOworKworKwlpZiAoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19HRU5FUkFU RSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJaWYg KCFmaXBzX2RyYmdfY2hlY2soZGN0eCkpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKGRjdHgtPnN0 YXR1cyAhPSBEUkJHX1NUQVRVU19SRUFEWQorKwkJJiYgZGN0eC0+c3RhdHVzICE9IERSQkdfU1RB VFVTX1JFU0VFRCkKKysJCXsKKysJCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfRVJS T1IpCisrCQkJciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKKysJCWVsc2UgaWYoZGN0eC0+c3Rh dHVzID09IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCisrCQkJciA9IEZJUFNfUl9OT1RfSU5T VEFOVElBVEVEOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmIChvdXRsZW4gPiBkY3R4LT5t YXhfcmVxdWVzdCkKKysJCXsKKysJCXIgPSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RS Qkc7CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJaWYgKGFkaW5sZW4gPiBkY3R4LT5tYXhfYWRp bikKKysJCXsKKysJCXIgPSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsKKysJCWdv dG8gZW5kOworKwkJfQorKworKwlpZiAoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVE KQorKwkJZGN0eC0+Z2VuZXJhdGUoZGN0eCwgTlVMTCwgb3V0bGVuLCBOVUxMLCAwKTsKKysJZWxz ZSBpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQorKwkJ ZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVTRUVEOworKworKwlpZiAoZGN0eC0+c3RhdHVz ID09IERSQkdfU1RBVFVTX1JFU0VFRCB8fCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UpCisrCQl7Cisr CQkvKiBJZiBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBkb24ndCBkbyBoZWFsdGggY2hl Y2sgKi8KKysJCWludCBoY2hlY2sgPSBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UgPyAwIDogMTsKKysJ CQorKwkJaWYgKCFkcmJnX3Jlc2VlZChkY3R4LCBhZGluLCBhZGlubGVuLCBoY2hlY2spKQorKwkJ CXsKKysJCQlyID0gRklQU19SX1JFU0VFRF9FUlJPUjsKKysJCQlnb3RvIGVuZDsKKysJCQl9Cisr CQlhZGluID0gTlVMTDsKKysJCWFkaW5sZW4gPSAwOworKwkJfQorKworKwlpZiAoIWRjdHgtPmdl bmVyYXRlKGRjdHgsIG91dCwgb3V0bGVuLCBhZGluLCBhZGlubGVuKSkKKysJCXsKKysJCXIgPSBG SVBTX1JfR0VORVJBVEVfRVJST1I7CisrCQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJP UjsKKysJCWdvdG8gZW5kOworKwkJfQorKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RP TV9SRVNFRUQpKQorKwkJeworKwkJaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyID49IGRjdHgtPnJl c2VlZF9pbnRlcnZhbCkKKysJCQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRVNFRUQ7Cisr CQllbHNlCisrCQkJZGN0eC0+cmVzZWVkX2NvdW50ZXIrKzsKKysJCX0KKysKKysJZW5kOgorKwlp ZiAocikKKysJCXsKKysJCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCisr CQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFLCByKTsKKysJCXJldHVybiAwOwor KwkJfQorKworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBGSVBTX2RyYmdfdW5pbnN0YW50aWF0 ZShEUkJHX0NUWCAqZGN0eCkKKysJeworKwlpbnQgcnY7CisrCWlmICghZGN0eC0+dW5pbnN0YW50 aWF0ZSkKKysJCXJ2ID0gMTsKKysJZWxzZQorKwkJcnYgPSBkY3R4LT51bmluc3RhbnRpYXRlKGRj dHgpOworKwkvKiBBbHRob3VnaCB3ZSdkIGxpa2UgdG8gY2xlYW5zZSBoZXJlIHdlIGNhbid0IGJl Y2F1c2Ugd2UgaGF2ZSB0bworKwkgKiB0ZXN0IHRoZSB1bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJv ZXMgdGhlIGRhdGEuCisrCSAqLworKwltZW1zZXQoJmRjdHgtPmQsIDAsIHNpemVvZihkY3R4LT5k KSk7CisrCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7CisrCS8qIElm IG1ldGhvZCBoYXMgcHJvYmxlbXMgdW5pbnN0YW50aWF0aW5nLCByZXR1cm4gZXJyb3IgKi8KKysJ cmV0dXJuIHJ2OworKwl9CisrCisraW50IEZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKERSQkdfQ1RY ICpkY3R4LAorKwlzaXplX3QgKCpnZXRfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQg Y2hhciAqKnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1h eF9sZW4pLAorKwl2b2lkICgqY2xlYW51cF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25l ZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSwKKysJc2l6ZV90IGVudHJvcHlfYmxvY2tsZW4sCisr CXNpemVfdCAoKmdldF9ub25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQs CisrCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAorKwl2 b2lkICgqY2xlYW51cF9ub25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBz aXplX3Qgb2xlbikpCisrCXsKKysJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19VTklO SVRJQUxJU0VEKQorKwkJcmV0dXJuIDA7CisrCWRjdHgtPmVudHJvcHlfYmxvY2tsZW4gPSBlbnRy b3B5X2Jsb2NrbGVuOworKwlkY3R4LT5nZXRfZW50cm9weSA9IGdldF9lbnRyb3B5OworKwlkY3R4 LT5jbGVhbnVwX2VudHJvcHkgPSBjbGVhbnVwX2VudHJvcHk7CisrCWRjdHgtPmdldF9ub25jZSA9 IGdldF9ub25jZTsKKysJZGN0eC0+Y2xlYW51cF9ub25jZSA9IGNsZWFudXBfbm9uY2U7CisrCXJl dHVybiAxOworKwl9CisrCisraW50IEZJUFNfZHJiZ19zZXRfcmFuZF9jYWxsYmFja3MoRFJCR19D VFggKmRjdHgsCisrCXNpemVfdCAoKmdldF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBj aGFyICoqcG91dCksCisrCXZvaWQgKCpjbGVhbnVwX2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pLAorKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdf Q1RYICpjdHgsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSksCisrCWludCAoKnJhbmRfYWRkX2Ni KShEUkJHX0NUWCAqY3R4LAorKwkJCQljb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBl bnRyb3B5KSkKKysJeworKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElB TElTRUQpCisrCQlyZXR1cm4gMDsKKysJZGN0eC0+Z2V0X2FkaW4gPSBnZXRfYWRpbjsKKysJZGN0 eC0+Y2xlYW51cF9hZGluID0gY2xlYW51cF9hZGluOworKwlkY3R4LT5yYW5kX3NlZWRfY2IgPSBy YW5kX3NlZWRfY2I7CisrCWRjdHgtPnJhbmRfYWRkX2NiID0gcmFuZF9hZGRfY2I7CisrCXJldHVy biAxOworKwl9CisrCisrdm9pZCAqRklQU19kcmJnX2dldF9hcHBfZGF0YShEUkJHX0NUWCAqZGN0 eCkKKysJeworKwlyZXR1cm4gZGN0eC0+YXBwX2RhdGE7CisrCX0KKysKKyt2b2lkIEZJUFNfZHJi Z19zZXRfYXBwX2RhdGEoRFJCR19DVFggKmRjdHgsIHZvaWQgKmFwcF9kYXRhKQorKwl7CisrCWRj dHgtPmFwcF9kYXRhID0gYXBwX2RhdGE7CisrCX0KKysKKytzaXplX3QgRklQU19kcmJnX2dldF9i bG9ja2xlbmd0aChEUkJHX0NUWCAqZGN0eCkKKysJeworKwlyZXR1cm4gZGN0eC0+YmxvY2tsZW5n dGg7CisrCX0KKysKKytpbnQgRklQU19kcmJnX2dldF9zdHJlbmd0aChEUkJHX0NUWCAqZGN0eCkK KysJeworKwlyZXR1cm4gZGN0eC0+c3RyZW5ndGg7CisrCX0KKysKKyt2b2lkIEZJUFNfZHJiZ19z ZXRfY2hlY2tfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCkKKysJeworKwlk Y3R4LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKysJfQorKworK3ZvaWQgRklQ U19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCkK KysJeworKwlkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKysJfQorKworK3N0YXRp YyBpbnQgZHJiZ19zdGljayA9IDA7CisrCisrdm9pZCBGSVBTX2RyYmdfc3RpY2soaW50IG9ub2Zm KQorKwl7CisrCWRyYmdfc3RpY2sgPSBvbm9mZjsKKysJfQorKworKy8qIENvbnRpbnVvdXMgRFJC RyB1dGlsaXR5IGZ1bmN0aW9uICovCisraW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RY ICpkY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvdXQpCisrCXsKKysJLyogTm8gQ1BSTkcgaW4g dGVzdCBtb2RlICovCisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkKKysJCXJl dHVybiAxOworKwkvKiBDaGVjayBibG9jayBpcyB2YWxpZDogc2hvdWxkIG5ldmVyIGhhcHBlbiAq LworKwlpZiAoZGN0eC0+bGJfdmFsaWQgPT0gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19DUFJOR19URVNULCBGSVBTX1JfSU5URVJOQUxfRVJST1IpOworKwkJZmlwc19zZXRf c2VsZnRlc3RfZmFpbCgpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmIChkcmJnX3N0aWNrKQor KwkJbWVtY3B5KGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysJLyogQ2hlY2sg YWdhaW5zdCBsYXN0IGJsb2NrOiBmYWlsIGlmIG1hdGNoICovCisrCWlmICghbWVtY21wKGRjdHgt PmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19DUFJOR19URVNULCBGSVBTX1JfRFJCR19TVFVDSyk7CisrCQlmaXBzX3NldF9zZWxm dGVzdF9mYWlsKCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJLyogU2F2ZSBsYXN0IGJsb2NrIGZv ciBuZXh0IGNvbXBhcmlzb24gKi8KKysJbWVtY3B5KGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2Nr bGVuZ3RoKTsKKysJcmV0dXJuIDE7CisrCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0 by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJn X3JhbmQuYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuNDAzNzY5MzY1ICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYwkyMDEyLTA0LTI2IDE4OjAw OjUxLjQwMzc2OTM2NSArMDIwMAorQEAgLTAsMCArMSwxNzIgQEAKKysvKiBmaXBzL3JhbmQvZmlw c19kcmJnX3JhbmQuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3Rl dmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9u LgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxp Y2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAq CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQu aD4KKysjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgorKworKy8qIE1hcHBpbmcgb2YgU1A4MDAt OTAgRFJCR3MgdG8gT3BlblNTTCBSQU5EX01FVEhPRCAqLworKworKy8qIFNpbmNlIHdlIG9ubHkg aGF2ZSBvbmUgZ2xvYmFsIFBSTkcgdXNlZCBhdCBhbnkgdGltZSBpbiBPcGVuU1NMIHVzZSBhIGds b2JhbAorKyAqIHZhcmlhYmxlIHRvIHN0b3JlIGNvbnRleHQuCisrICovCisrCisrc3RhdGljIERS QkdfQ1RYIG9zc2xfZGN0eDsKKysKKytEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZv aWQpCisrCXsKKysJcmV0dXJuICZvc3NsX2RjdHg7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNf ZHJiZ19ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkKKysJeworKwlEUkJHX0NU WCAqZGN0eCA9ICZvc3NsX2RjdHg7CisrCWludCBydiA9IDA7CisrCXVuc2lnbmVkIGNoYXIgKmFk aW4gPSBOVUxMOworKwlzaXplX3QgYWRpbmxlbiA9IDA7CisrCUNSWVBUT193X2xvY2soQ1JZUFRP X0xPQ0tfUkFORCk7CisrCWRvIAorKwkJeworKwkJc2l6ZV90IHJjbnQ7CisrCQlpZiAoY291bnQg PiAoaW50KWRjdHgtPm1heF9yZXF1ZXN0KQorKwkJCXJjbnQgPSBkY3R4LT5tYXhfcmVxdWVzdDsK KysJCWVsc2UKKysJCQlyY250ID0gY291bnQ7CisrCQlpZiAoZGN0eC0+Z2V0X2FkaW4pCisrCQkJ eworKwkJCWFkaW5sZW4gPSBkY3R4LT5nZXRfYWRpbihkY3R4LCAmYWRpbik7CisrCQkJaWYgKGFk aW5sZW4gJiYgIWFkaW4pCisrCQkJCXsKKysJCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0JZ VEVTLCBGSVBTX1JfRVJST1JfUkVUUklFVklOR19BRERJVElPTkFMX0lOUFVUKTsKKysJCQkJZ290 byBlcnI7CisrCQkJCX0KKysJCQl9CisrCQlydiA9IEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCBv dXQsIHJjbnQsIDAsIGFkaW4sIGFkaW5sZW4pOworKwkJaWYgKGFkaW4pCisrCQkJeworKwkJCWlm IChkY3R4LT5jbGVhbnVwX2FkaW4pCisrCQkJCWRjdHgtPmNsZWFudXBfYWRpbihkY3R4LCBhZGlu LCBhZGlubGVuKTsKKysJCQlhZGluID0gTlVMTDsKKysJCQl9CisrCQlpZiAoIXJ2KQorKwkJCWdv dG8gZXJyOworKwkJb3V0ICs9IHJjbnQ7CisrCQljb3VudCAtPSByY250OworKwkJfQorKwl3aGls ZSAoY291bnQpOworKwlydiA9IDE7CisrCWVycjoKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19M T0NLX1JBTkQpOworKwlyZXR1cm4gcnY7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19w c2V1ZG8odW5zaWduZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCisrCXsKKysJaWYgKGZpcHNfZHJi Z19ieXRlcyhvdXQsIGNvdW50KSA8PSAwKQorKwkJcmV0dXJuIC0xOworKwlyZXR1cm4gMTsKKysJ fQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX3N0YXR1cyh2b2lkKQorKwl7CisrCURSQkdfQ1RY ICpkY3R4ID0gJm9zc2xfZGN0eDsKKysJaW50IHJ2OworKwlDUllQVE9fcl9sb2NrKENSWVBUT19M T0NLX1JBTkQpOworKwlydiA9IGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSA/IDEg OiAwOworKwlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiBydjsK KysJfQorKworK3N0YXRpYyB2b2lkIGZpcHNfZHJiZ19jbGVhbnVwKHZvaWQpCisrCXsKKysJRFJC R19DVFggKmRjdHggPSAmb3NzbF9kY3R4OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JB TkQpOworKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKKysJQ1JZUFRPX3dfdW5sb2Nr KENSWVBUT19MT0NLX1JBTkQpOworKwl9CisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfc2VlZChj b25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbikKKysJeworKwlEUkJHX0NUWCAqZGN0eCA9ICZv c3NsX2RjdHg7CisrCWlmIChkY3R4LT5yYW5kX3NlZWRfY2IpCisrCQlyZXR1cm4gZGN0eC0+cmFu ZF9zZWVkX2NiKGRjdHgsIHNlZWQsIHNlZWRsZW4pOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0 YXRpYyBpbnQgZmlwc19kcmJnX2FkZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbiwKKysJ CQkJCWRvdWJsZSBhZGRfZW50cm9weSkKKysJeworKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2Rj dHg7CisrCWlmIChkY3R4LT5yYW5kX2FkZF9jYikKKysJCXJldHVybiBkY3R4LT5yYW5kX2FkZF9j YihkY3R4LCBzZWVkLCBzZWVkbGVuLCBhZGRfZW50cm9weSk7CisrCXJldHVybiAxOworKwl9Cisr Cisrc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfZHJiZ19tZXRoID0KKysJeworKwlmaXBz X2RyYmdfc2VlZCwKKysJZmlwc19kcmJnX2J5dGVzLAorKwlmaXBzX2RyYmdfY2xlYW51cCwKKysJ Zmlwc19kcmJnX2FkZCwKKysJZmlwc19kcmJnX3BzZXVkbywKKysJZmlwc19kcmJnX3N0YXR1cwor Kwl9OworKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpCisrCXsK KysJcmV0dXJuICZyYW5kX2RyYmdfbWV0aDsKKysJfQorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0 by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDM3 NjkzNjUgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2Vs ZnRlc3QuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwMzc2OTM2NSArMDIwMAorQEAgLTAsMCArMSw4 NjIgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19kcmJnX3NlbGZ0ZXN0LmMgKi8KKysvKiBXcml0dGVu IGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5T U0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisr ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq LworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQu aD4KKysjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIK KysKKysjaW5jbHVkZSAiZmlwc19kcmJnX3NlbGZ0ZXN0LmgiCisrCisrdHlwZWRlZiBzdHJ1Y3Qg eworKwlpbnQgcG9zdDsKKysJaW50IG5pZDsKKysJdW5zaWduZWQgaW50IGZsYWdzOworKworKwkv KiBLQVQgZGF0YSBmb3Igbm8gUFIgKi8KKysJY29uc3QgdW5zaWduZWQgY2hhciAqZW50OworKwlz aXplX3QgZW50bGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZTsKKysJc2l6ZV90IG5v bmNlbGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzOworKwlzaXplX3QgcGVyc2xlbjsK KysJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbjsKKysJc2l6ZV90IGFkaW5sZW47CisrCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmVudHJlc2VlZDsKKysJc2l6ZV90IGVudHJlc2VlZGxlbjsKKysJY29u c3QgdW5zaWduZWQgY2hhciAqYWRpbnJlc2VlZDsKKysJc2l6ZV90IGFkaW5yZXNlZWRsZW47Cisr CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4yOworKwlzaXplX3QgYWRpbjJsZW47CisrCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmthdDsKKysJc2l6ZV90IGthdGxlbjsKKysJY29uc3QgdW5zaWduZWQg Y2hhciAqa2F0MjsKKysJc2l6ZV90IGthdDJsZW47CisrCisrCS8qIEtBVCBkYXRhIGZvciBQUiAq LworKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRfcHI7CisrCXNpemVfdCBlbnRsZW5fcHI7Cisr CWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlX3ByOworKwlzaXplX3Qgbm9uY2VsZW5fcHI7Cisr CWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnNfcHI7CisrCXNpemVfdCBwZXJzbGVuX3ByOworKwlj b25zdCB1bnNpZ25lZCBjaGFyICphZGluX3ByOworKwlzaXplX3QgYWRpbmxlbl9wcjsKKysJY29u c3QgdW5zaWduZWQgY2hhciAqZW50cHJfcHI7CisrCXNpemVfdCBlbnRwcmxlbl9wcjsKKysJY29u c3QgdW5zaWduZWQgY2hhciAqYWRpbmdfcHI7CisrCXNpemVfdCBhZGluZ2xlbl9wcjsKKysJY29u c3QgdW5zaWduZWQgY2hhciAqZW50Z19wcjsKKysJc2l6ZV90IGVudGdsZW5fcHI7CisrCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmthdF9wcjsKKysJc2l6ZV90IGthdGxlbl9wcjsKKysJY29uc3QgdW5z aWduZWQgY2hhciAqa2F0Ml9wcjsKKysJc2l6ZV90IGthdDJsZW5fcHI7CisrCisrCX0gRFJCR19T RUxGVEVTVF9EQVRBOworKworKyNkZWZpbmUgbWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIGZsYWcs IHByLCBwKSB7cCwgbmlkLCBmbGFnIHwgRFJCR19GTEFHX1RFU1QsIFwKKysJcHIjI19lbnRyb3B5 aW5wdXQsIHNpemVvZihwciMjX2VudHJvcHlpbnB1dCksIFwKKysJcHIjI19ub25jZSwgc2l6ZW9m KHByIyNfbm9uY2UpLCBcCisrCXByIyNfcGVyc29uYWxpemF0aW9uc3RyaW5nLCBzaXplb2YocHIj I19wZXJzb25hbGl6YXRpb25zdHJpbmcpLCBcCisrCXByIyNfYWRkaXRpb25hbGlucHV0LCBzaXpl b2YocHIjI19hZGRpdGlvbmFsaW5wdXQpLCBcCisrCXByIyNfZW50cm9weWlucHV0cmVzZWVkLCBz aXplb2YocHIjI19lbnRyb3B5aW5wdXRyZXNlZWQpLCBcCisrCXByIyNfYWRkaXRpb25hbGlucHV0 cmVzZWVkLCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5wdXRyZXNlZWQpLCBcCisrCXByIyNfYWRk aXRpb25hbGlucHV0Miwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0MiksIFwKKysJcHIjI19p bnRfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19pbnRfcmV0dXJuZWRiaXRzKSwgXAorKwlwciMj X3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfcmV0dXJuZWRiaXRzKSwgXAorKwlwciMjX3ByX2Vu dHJvcHlpbnB1dCwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0KSwgXAorKwlwciMjX3ByX25v bmNlLCBzaXplb2YocHIjI19wcl9ub25jZSksIFwKKysJcHIjI19wcl9wZXJzb25hbGl6YXRpb25z dHJpbmcsIHNpemVvZihwciMjX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZyksIFwKKysJcHIjI19w cl9hZGRpdGlvbmFsaW5wdXQsIHNpemVvZihwciMjX3ByX2FkZGl0aW9uYWxpbnB1dCksIFwKKysJ cHIjI19wcl9lbnRyb3B5aW5wdXRwciwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0cHIpLCBc CisrCXByIyNfcHJfYWRkaXRpb25hbGlucHV0Miwgc2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlu cHV0MiksIFwKKysJcHIjI19wcl9lbnRyb3B5aW5wdXRwcjIsIHNpemVvZihwciMjX3ByX2VudHJv cHlpbnB1dHByMiksIFwKKysJcHIjI19wcl9pbnRfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19w cl9pbnRfcmV0dXJuZWRiaXRzKSwgXAorKwlwciMjX3ByX3JldHVybmVkYml0cywgc2l6ZW9mKHBy IyNfcHJfcmV0dXJuZWRiaXRzKSwgXAorKwl9CisrCisrI2RlZmluZSBtYWtlX2RyYmdfdGVzdF9k YXRhX2RmKG5pZCwgcHIsIHApIFwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIERSQkdfRkxB R19DVFJfVVNFX0RGLCBwciwgcCkKKysKKysjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGFfZWMo Y3VydmUsIG1kLCBwciwgcCkgXAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKChjdXJ2ZSA8PCAxNikg fCBtZCAsIDAsIHByLCBwKQorKworK3N0YXRpYyBEUkJHX1NFTEZURVNUX0RBVEEgZHJiZ190ZXN0 W10gPSB7CisrCW1ha2VfZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18xMjhfY3RyLCBhZXNfMTI4 X3VzZV9kZiwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18xOTJfY3RyLCBh ZXNfMTkyX3VzZV9kZiwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18yNTZf Y3RyLCBhZXNfMjU2X3VzZV9kZiwgMSksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18x MjhfY3RyLCAwLCBhZXNfMTI4X25vX2RmLCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURf YWVzXzE5Ml9jdHIsIDAsIGFlc18xOTJfbm9fZGYsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRh KE5JRF9hZXNfMjU2X2N0ciwgMCwgYWVzXzI1Nl9ub19kZiwgMSksCisrCW1ha2VfZHJiZ190ZXN0 X2RhdGEoTklEX3NoYTEsIDAsIHNoYTEsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9z aGEyMjQsIDAsIHNoYTIyNCwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTI1Niwg MCwgc2hhMjU2LCAxKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMzg0LCAwLCBzaGEz ODQsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGE1MTIsIDAsIHNoYTUxMiwgMCks CisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMSwgMCwgaG1hY19zaGExLCAw KSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEyMjQsIDAsIGhtYWNfc2hh MjI0LCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEyNTYsIDAsIGht YWNfc2hhMjU2LCAxKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEzODQs IDAsIGhtYWNfc2hhMzg0LCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhT SEE1MTIsIDAsIGhtYWNfc2hhNTEyLCAwKSwKKysJezAsMCwwfQorKwl9OworKworK3R5cGVkZWYg c3RydWN0IAorKwl7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudDsKKysJc2l6ZV90IGVudGxl bjsKKysJaW50IGVudGNudDsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2U7CisrCXNpemVf dCBub25jZWxlbjsKKysJaW50IG5vbmNlY250OworKwl9IFRFU1RfRU5UOworKworK3N0YXRpYyBz aXplX3QgdGVzdF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWlu X2xlbiwgc2l6ZV90IG1heF9sZW4pCisrCXsKKysJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0 X2FwcF9kYXRhKGRjdHgpOworKwkqcG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+ZW50OworKwl0 LT5lbnRjbnQrKzsKKysJcmV0dXJuIHQtPmVudGxlbjsKKysJfQorKworK3N0YXRpYyBzaXplX3Qg dGVzdF9ub25jZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNp emVfdCBtYXhfbGVuKQorKwl7CisrCVRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0 YShkY3R4KTsKKysJKnBvdXQgPSAodW5zaWduZWQgY2hhciAqKXQtPm5vbmNlOworKwl0LT5ub25j ZWNudCsrOworKwlyZXR1cm4gdC0+bm9uY2VsZW47CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNf ZHJiZ19zaW5nbGVfa2F0KERSQkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkLAor KwkJCQkJCQkJaW50IHF1aWNrKQorKwl7CisrCVRFU1RfRU5UIHQ7CisrCWludCBydiA9IDA7Cisr CXNpemVfdCBhZGlubGVuOworKwl1bnNpZ25lZCBjaGFyIHJhbmRvdXRbMTAyNF07CisrCisrCS8q IEluaXRpYWwgdGVzdCB3aXRob3V0IFBSICovCisrCisrCS8qIEluc3RhbnRpYXRlIERSQkcgd2l0 aCB0ZXN0IGVudHJvcHksIG5vbmNlIGFuZCBwZXJzb25hbGlzYXRpb24KKysJICogc3RyaW5nLgor KwkgKi8KKysKKysJaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3Mp KQorKwkJcmV0dXJuIDA7CisrCWlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVz dF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKKysJCXJldHVybiAwOworKworKwlGSVBT X2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKKysKKysJdC5lbnQgPSB0ZC0+ZW50OworKwl0 LmVudGxlbiA9IHRkLT5lbnRsZW47CisrCXQubm9uY2UgPSB0ZC0+bm9uY2U7CisrCXQubm9uY2Vs ZW4gPSB0ZC0+bm9uY2VsZW47CisrCXQuZW50Y250ID0gMDsKKysJdC5ub25jZWNudCA9IDA7Cisr CisrCWlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xl bikpCisrCQlnb3RvIGVycjsKKysKKysJLyogTm90ZSBmb3IgQ1RSIHdpdGhvdXQgREYgc29tZSBh ZGRpdGlvbmFsIGlucHV0IHZhbHVlcworKwkgKiBpZ25vcmUgYnl0ZXMgYWZ0ZXIgdGhlIGtleWxl bmd0aDogc28gcmVkdWNlIGFkaW5sZW4KKysJICogdG8gaGFsZiB0byBlbnN1cmUgaW52YWxpZCBk YXRhIGlzIGZlZCBpbi4KKysJICovCisrCWlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNU X0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT5pZmxhZ3MpKQorKwkJYWRpbmxlbiA9IHRkLT5hZGlu bGVuIC8gMjsKKysJZWxzZQorKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuOworKworKwkvKiBHZW5l cmF0ZSB3aXRoIG5vIFBSIGFuZCB2ZXJpZnkgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YSAq LworKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAw LAorKwkJCQl0ZC0+YWRpbiwgYWRpbmxlbikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKG1lbWNt cChyYW5kb3V0LCB0ZC0+a2F0LCB0ZC0+a2F0bGVuKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfTk9QUl9URVNUMV9GQUlMVVJFKTsKKysJCWdv dG8gZXJyMjsKKysJCX0KKysJLyogSWYgYWJicmV2aWF0ZWQgUE9TVCBlbmQgb2YgdGVzdCAqLwor KwlpZiAocXVpY2spCisrCQl7CisrCQlydiA9IDE7CisrCQlnb3RvIGVycjsKKysJCX0KKysJLyog UmVzZWVkIERSQkcgd2l0aCB0ZXN0IGVudHJvcHkgYW5kIGFkZGl0aW9uYWwgaW5wdXQgKi8KKysJ dC5lbnQgPSB0ZC0+ZW50cmVzZWVkOworKwl0LmVudGxlbiA9IHRkLT5lbnRyZXNlZWRsZW47Cisr CisrCWlmICghRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbnJlc2VlZCwgdGQtPmFkaW5y ZXNlZWRsZW4pKQorKwkJZ290byBlcnI7CisrCisrCS8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5k IHZlcmlmeSBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCBkYXRhICovCisrCWlmICghRklQU19kcmJn X2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXQybGVuLCAwLAorKwkJCQl0ZC0+YWRpbjIs IHRkLT5hZGluMmxlbikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKG1lbWNtcChyYW5kb3V0LCB0 ZC0+a2F0MiwgdGQtPmthdDJsZW4pKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X1NJTkdMRV9LQVQsIEZJUFNfUl9OT1BSX1RFU1QyX0ZBSUxVUkUpOworKwkJZ290byBlcnIyOwor KwkJfQorKworKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKKysKKysJLyogTm93IHRl c3Qgd2l0aCBQUiAqLworKworKwkvKiBJbnN0YW50aWF0ZSBEUkJHIHdpdGggdGVzdCBlbnRyb3B5 LCBub25jZSBhbmQgcGVyc29uYWxpc2F0aW9uCisrCSAqIHN0cmluZy4KKysJICovCisrCWlmICgh RklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5pZCwgdGQtPmZsYWdzKSkKKysJCXJldHVybiAwOwor KwlpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwg dGVzdF9ub25jZSwgMCkpCisrCQlyZXR1cm4gMDsKKysKKysJRklQU19kcmJnX3NldF9hcHBfZGF0 YShkY3R4LCAmdCk7CisrCisrCXQuZW50ID0gdGQtPmVudF9wcjsKKysJdC5lbnRsZW4gPSB0ZC0+ ZW50bGVuX3ByOworKwl0Lm5vbmNlID0gdGQtPm5vbmNlX3ByOworKwl0Lm5vbmNlbGVuID0gdGQt Pm5vbmNlbGVuX3ByOworKwl0LmVudGNudCA9IDA7CisrCXQubm9uY2VjbnQgPSAwOworKworKwlp ZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVyc19wciwgdGQtPnBlcnNsZW5f cHIpKQorKwkJZ290byBlcnI7CisrCisrCS8qIE5vdyBnZW5lcmF0ZSB3aXRoIFBSOiB3ZSBuZWVk IHRvIHN1cHBseSBlbnRyb3B5IGFzIHRoaXMgd2lsbAorKwkgKiBwZXJmb3JtIGEgcmVzZWVkIG9w ZXJhdGlvbi4gQ2hlY2sgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWUuCisrCSAqLworKwor Kwl0LmVudCA9IHRkLT5lbnRwcl9wcjsKKysJdC5lbnRsZW4gPSB0ZC0+ZW50cHJsZW5fcHI7Cisr CisrCS8qIE5vdGUgZm9yIENUUiB3aXRob3V0IERGIHNvbWUgYWRkaXRpb25hbCBpbnB1dCB2YWx1 ZXMKKysJICogaWdub3JlIGJ5dGVzIGFmdGVyIHRoZSBrZXlsZW5ndGg6IHNvIHJlZHVjZSBhZGlu bGVuCisrCSAqIHRvIGhhbGYgdG8gZW5zdXJlIGludmFsaWQgZGF0YSBpcyBmZWQgaW4uCisrCSAq LworKwlpZiAoIWZpcHNfcG9zdF9jb3JydXB0KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAm ZGN0eC0+aWZsYWdzKSkKKysJCWFkaW5sZW4gPSB0ZC0+YWRpbmxlbl9wciAvIDI7CisrCWVsc2UK KysJCWFkaW5sZW4gPSB0ZC0+YWRpbmxlbl9wcjsKKysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUo ZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbl9wciwgMSwKKysJCQkJdGQtPmFkaW5fcHIsIGFkaW5s ZW4pKQorKwkJZ290byBlcnI7CisrCisrCWlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdF9wciwg dGQtPmthdGxlbl9wcikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xF X0tBVCwgRklQU19SX1BSX1RFU1QxX0ZBSUxVUkUpOworKwkJZ290byBlcnIyOworKwkJfQorKwor KwkvKiBOb3cgZ2VuZXJhdGUgYWdhaW4gd2l0aCBQUjogc3VwcGx5IG5ldyBlbnRyb3B5IGFnYWlu LgorKwkgKiBDaGVjayBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4KKysJICovCisrCisr CXQuZW50ID0gdGQtPmVudGdfcHI7CisrCXQuZW50bGVuID0gdGQtPmVudGdsZW5fcHI7CisrCisr CWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXQybGVuX3ByLCAx LAorKwkJCQl0ZC0+YWRpbmdfcHIsIHRkLT5hZGluZ2xlbl9wcikpCisrCQlnb3RvIGVycjsKKysK KysJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0Ml9wciwgdGQtPmthdDJsZW5fcHIpKQorKwkJ eworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9QUl9URVNU Ml9GQUlMVVJFKTsKKysJCWdvdG8gZXJyMjsKKysJCX0KKysJLyogQWxsIE9LLCB0ZXN0IGNvbXBs ZXRlICovCisrCXJ2ID0gMTsKKysKKysJZXJyOgorKwlpZiAocnYgPT0gMCkKKysJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJ ZXJyMjoKKysJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7CisrCQorKwlyZXR1cm4gcnY7 CisrCisrCX0KKysKKysvKiBJbml0aWFsaXNlIGEgRFJCRyBiYXNlZCBvbiBzZWxmdGVzdCBkYXRh ICovCisrCisrc3RhdGljIGludCBkb19kcmJnX2luaXQoRFJCR19DVFggKmRjdHgsIERSQkdfU0VM RlRFU1RfREFUQSAqdGQsIFRFU1RfRU5UICp0KQorKwl7CisrCisrCWlmICghRklQU19kcmJnX2lu aXQoZGN0eCwgdGQtPm5pZCwgdGQtPmZsYWdzKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUZJ UFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25j ZSwgMCkpCisrCQlyZXR1cm4gMDsKKysKKysJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCB0 KTsKKysKKysJdC0+ZW50ID0gdGQtPmVudDsKKysJdC0+ZW50bGVuID0gdGQtPmVudGxlbjsKKysJ dC0+bm9uY2UgPSB0ZC0+bm9uY2U7CisrCXQtPm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuOworKwl0 LT5lbnRjbnQgPSAwOworKwl0LT5ub25jZWNudCA9IDA7CisrCXJldHVybiAxOworKwl9CisrCisr LyogSW5pdGlhbGlzZSBhbmQgaW5zdGFudGlhdGUgRFJCRyBiYXNlZCBvbiBzZWxmdGVzdCBkYXRh ICovCisrc3RhdGljIGludCBkb19kcmJnX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LCBEUkJH X1NFTEZURVNUX0RBVEEgKnRkLAorKwkJCQkJCQkJVEVTVF9FTlQgKnQpCisrCXsKKysJaWYgKCFk b19kcmJnX2luaXQoZGN0eCwgdGQsIHQpKQorKwkJcmV0dXJuIDA7CisrCWlmICghRklQU19kcmJn X2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikpCisrCQlyZXR1cm4gMDsK KysKKysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGV4dGVu c2l2ZSBlcnJvciBjaGVja2luZyBhcyByZXF1aXJlZCBieSBTUDgwMC05MC4KKysgKiBJbmR1Y2Ug c2V2ZXJhbCBmYWlsdXJlIG1vZGVzIGFuZCBjaGVjayBhbiBlcnJvciBjb25kaXRpb24gaXMgc2V0 LgorKyAqIFRoaXMgZnVuY3Rpb24gYWxvbmcgd2l0aCBmaXBzX2RyYmdfc2luZ2xlX2thdCBwZWZv cm1zIHRoZSBoZWFsdGggY2hlY2tpbmcKKysgKiBvcGVyYXRpb24uCisrICovCisrCisrc3RhdGlj IGludCBmaXBzX2RyYmdfZXJyb3JfY2hlY2soRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1Rf REFUQSAqdGQpCisrCXsKKysJdW5zaWduZWQgY2hhciByYW5kb3V0WzEwMjRdOworKwlURVNUX0VO VCB0OworKwlzaXplX3QgaTsKKysJdW5zaWduZWQgaW50IHJlc2VlZF9jb3VudGVyX3RtcDsKKysJ dW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopZGN0eDsKKysKKysJLyogSW5pdGlh bGlzZSBEUkJHICovCisrCisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQln b3RvIGVycjsKKysKKysJLyogRG9uJ3QgcmVwb3J0IGluZHVjZWQgZXJyb3JzICovCisrCWRjdHgt PmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCS8qIFBlcnNvbmFsaXNhdGlvbiBzdHJp bmcgdGVzdHMgKi8KKysKKysJLyogVGVzdCBkZXRlY3Rpb24gb2YgdG9vIGxhcmdlIHBlcnNvbmxp c2F0aW9uIHN0cmluZyAqLworKworKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRk LT5wZXJzLCBkY3R4LT5tYXhfcGVycyArIDEpID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1BFUlNPTkFMSVNBVElPTl9FUlJPUl9VTkRF VEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBFbnRyb3B5IHNvdXJjZSB0ZXN0 cyAqLworKworKwkvKiBUZXN0IGVudHJvcHkgc291cmNlIGZhaWx1cmUgZGV0ZWNpb246IGkuZS4g cmV0dXJucyBubyBkYXRhICovCisrCisrCXQuZW50bGVuID0gMDsKKysKKysJaWYgKEZJUFNfZHJi Z19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkKKysJCXsKKysJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJS T1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogVHJ5IHRvIGdlbmVy YXRlIG91dHB1dCBmcm9tIHVuaW5zdGFudGlhdGVkIERSQkcgKi8KKysJaWYgKEZJUFNfZHJiZ19n ZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAorKwkJCQl0ZC0+YWRpbiwgdGQt PmFkaW5sZW4pKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNL LCBGSVBTX1JfR0VORVJBVEVfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0K KysKKysJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJn X3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOwor KwkJfQorKworKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKwkJZ290byBlcnI7 CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCS8qIFRlc3QgaW5z dWZmaWNpZW50IGVudHJvcHkgKi8KKysKKysJdC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAt IDE7CisrCisrCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5w ZXJzbGVuKSA+IDApCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hF Q0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9 CisrCisrCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKwlpZiAoIUZJUFNfZHJi Z191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsK KysJCX0KKysKKysJLyogVGVzdCB0b28gbXVjaCBlbnRyb3B5ICovCisrCisrCWlmICghZG9fZHJi Z19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVycjsKKysKKysJZGN0eC0+aWZsYWdzIHw9 IERSQkdfRkxBR19OT0VSUjsKKysKKysJdC5lbnRsZW4gPSBkY3R4LT5tYXhfZW50cm9weSArIDE7 CisrCisrCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJz bGVuKSA+IDApCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss IEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9Cisr CisrCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKwlpZiAoIUZJUFNfZHJiZ191 bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJ CX0KKysKKysJLyogTm9uY2UgdGVzdHMgKi8KKysKKysJLyogVGVzdCB0b28gc21hbGwgbm9uY2Ug Ki8KKysKKysJaWYgKGRjdHgtPm1pbl9ub25jZSkKKysJCXsKKysKKysJCWlmICghZG9fZHJiZ19p bml0KGRjdHgsIHRkLCAmdCkpCisrCQkJZ290byBlcnI7CisrCisrCQlkY3R4LT5pZmxhZ3MgfD0g RFJCR19GTEFHX05PRVJSOworKworKwkJdC5ub25jZWxlbiA9IGRjdHgtPm1pbl9ub25jZSAtIDE7 CisrCisrCQlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVy c2xlbikgPiAwKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hF Q0ssIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCQlnb3RvIGVycjsKKysJCQl9 CisrCisrCQlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJCWlmICghRklQU19k cmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJCWdvdG8g ZXJyOworKwkJCX0KKysKKysJCX0KKysKKysJLyogVGVzdCB0b28gbGFyZ2Ugbm9uY2UgKi8KKysK KysJaWYgKGRjdHgtPm1heF9ub25jZSkKKysJCXsKKysKKysJCWlmICghZG9fZHJiZ19pbml0KGRj dHgsIHRkLCAmdCkpCisrCQkJZ290byBlcnI7CisrCisrCQlkY3R4LT5pZmxhZ3MgfD0gRFJCR19G TEFHX05PRVJSOworKworKwkJdC5ub25jZWxlbiA9IGRjdHgtPm1heF9ub25jZSArIDE7CisrCisr CQlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikg PiAwKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9OT05DRV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCisr CQlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJCWlmICghRklQU19kcmJnX3Vu aW5zdGFudGlhdGUoZGN0eCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJCWdvdG8gZXJyOwor KwkJCX0KKysKKysJCX0KKysKKysJLyogSW5zdGFudGlhdGUgd2l0aCB2YWxpZCBkYXRhLiAqLwor KwlpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkKKysJCQlnb3RvIGVycjsK KysKKysJLyogQ2hlY2sgZ2VuZXJhdGlvbiBpcyBub3cgT0sgKi8KKysJaWYgKCFGSVBTX2RyYmdf Z2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysJCQkJdGQtPmFkaW4sIHRk LT5hZGlubGVuKSkKKysJCWdvdG8gZXJyOworKworKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFH X05PRVJSOworKworKwkvKiBSZXF1ZXN0IHRvbyBtdWNoIGRhdGEgZm9yIG9uZSByZXF1ZXN0ICov CisrCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgZGN0eC0+bWF4X3JlcXVl c3QgKyAxLCAwLAorKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQorKwkJeworKwkJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUkVRVUVTVF9MRU5HVEhfRVJS T1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogVHJ5IHRvbyBsYXJn ZSBhZGRpdGlvbmFsIGlucHV0ICovCisrCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFu ZG91dCwgdGQtPmthdGxlbiwgMCwKKysJCQkJdGQtPmFkaW4sIGRjdHgtPm1heF9hZGluICsgMSkp CisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9B RERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9Cisr CisrCS8qIENoZWNrIHByZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0IGZhaWxzIGlmIGVudHJv cHkgc291cmNlCisrCSAqIGZhaWx1cmUuCisrCSAqLworKworKwl0LmVudGxlbiA9IDA7CisrCisr CWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMSwKKysJ CQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQln b3RvIGVycjsKKysJCX0KKysJCQorKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsK KysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1Ip OworKwkJZ290byBlcnI7CisrCQl9CisrCisrCisrCS8qIEluc3RhbnRpYXRlIGFnYWluIHdpdGgg dmFsaWQgZGF0YSAqLworKworKwlpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0 KSkKKysJCQlnb3RvIGVycjsKKysJLyogVGVzdCByZXNlZWQgY291bnRlciB3b3JrcyAqLworKwkv KiBTYXZlIGluaXRpYWwgcmVzZWVkIGNvdW50ZXIgKi8KKysJcmVzZWVkX2NvdW50ZXJfdG1wID0g ZGN0eC0+cmVzZWVkX2NvdW50ZXI7CisrCS8qIFNldCByZXNlZWQgY291bnRlciB0byBiZXlvbmQg aW50ZXJ2YWwgKi8KKysJZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4LT5yZXNlZWRfaW50ZXJ2 YWw7CisrCisrCS8qIEdlbmVyYXRlIG91dHB1dCBhbmQgY2hlY2sgZW50cm9weSBoYXMgYmVlbiBy ZXF1ZXN0ZWQgZm9yIHJlc2VlZCAqLworKwl0LmVudGNudCA9IDA7CisrCWlmICghRklQU19kcmJn X2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrCQkJCXRkLT5hZGluLCB0 ZC0+YWRpbmxlbikpCisrCQlnb3RvIGVycjsKKysJaWYgKHQuZW50Y250ICE9IDEpCisrCQl7Cisr CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX05P VF9SRVFVRVNURURfRk9SX1JFU0VFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysJLyogQ2hlY2sg cmVzZWVkIGNvdW50ZXIgaGFzIGJlZW4gcmVzZXQgKi8KKysJaWYgKGRjdHgtPnJlc2VlZF9jb3Vu dGVyICE9IHJlc2VlZF9jb3VudGVyX3RtcCArIDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUik7CisrCQln b3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Cisr CWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsK KysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBDaGVjayBwcmVkaWN0aW9uIHJlc2lzdGFuY2Ug cmVxdWVzdCBmYWlscyBpZiBlbnRyb3B5IHNvdXJjZQorKwkgKiBmYWlsdXJlLgorKwkgKi8KKysK KysJdC5lbnRsZW4gPSAwOworKworKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwor KwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDEsCisr CQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKwkJ Z290byBlcnI7CisrCQl9CisrCQkKKysJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7 CisrCisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VS Uk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKworKwlpZiAoIWRvX2RyYmdfaW5zdGFudGlh dGUoZGN0eCwgdGQsICZ0KSkKKysJCQlnb3RvIGVycjsKKysJLyogVGVzdCByZXNlZWQgY291bnRl ciB3b3JrcyAqLworKwkvKiBTYXZlIGluaXRpYWwgcmVzZWVkIGNvdW50ZXIgKi8KKysJcmVzZWVk X2NvdW50ZXJfdG1wID0gZGN0eC0+cmVzZWVkX2NvdW50ZXI7CisrCS8qIFNldCByZXNlZWQgY291 bnRlciB0byBiZXlvbmQgaW50ZXJ2YWwgKi8KKysJZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4 LT5yZXNlZWRfaW50ZXJ2YWw7CisrCisrCS8qIEdlbmVyYXRlIG91dHB1dCBhbmQgY2hlY2sgZW50 cm9weSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yIHJlc2VlZCAqLworKwl0LmVudGNudCA9IDA7Cisr CWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisr CQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQlnb3RvIGVycjsKKysJaWYgKHQuZW50Y250 ICE9IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRCk7CisrCQlnb3RvIGVycjsKKysJ CX0KKysJLyogQ2hlY2sgcmVzZWVkIGNvdW50ZXIgaGFzIGJlZW4gcmVzZXQgKi8KKysJaWYgKGRj dHgtPnJlc2VlZF9jb3VudGVyICE9IHJlc2VlZF9jb3VudGVyX3RtcCArIDEpCisrCQl7CisrCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9SRVNFRURfQ09VTlRF Ul9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+aWZsYWdzICY9IH5EUkJH X0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7 CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RB TlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBFeHBsaWNpdCByZXNl ZWQgdGVzdHMgKi8KKysKKysJLyogVGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbGFyZ2Ug YWRkaXRpb25hbCBpbnB1dCAqLworKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQor KwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisr CWlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCBkY3R4LT5tYXhfYWRpbiArIDEp ID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJ CX0KKysKKysJLyogVGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCBlbnRyb3B5IHNvdXJjZSBmYWls dXJlICovCisrCisrCXQuZW50bGVuID0gMDsKKysKKysJaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0 eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDApCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwor KwkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0 eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUZXN0 IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBtdWNoIGVudHJvcHkgKi8KKysKKysJaWYgKCFkb19k cmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysJCWdvdG8gZXJyOworKworKwlkY3R4LT5pZmxhZ3Mg fD0gRFJCR19GTEFHX05PRVJSOworKworKwl0LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5ICsg MTsKKysKKysJaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVu KSA+IDApCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisr CWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsK KysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRv byBsaXR0bGUgZW50cm9weSAqLworKworKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQp KQorKwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Cisr CisrCXQuZW50bGVuID0gZGN0eC0+bWluX2VudHJvcHkgLSAxOworKworKwlpZiAoRklQU19kcmJn X3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkKKysJCXsKKysJCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5E RVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0 YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9Cisr CisrCXAgPSAodW5zaWduZWQgY2hhciAqKSZkY3R4LT5kOworKwkvKiBTdGFuZGFyZCBzYXlzIHdl IGhhdmUgdG8gY2hlY2sgdW5pbnN0YW50aWF0ZSByZWFsbHkgemVyb2VzCisrCSAqIHRoZSBkYXRh Li4uCisrCSAqLworKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGRjdHgtPmQpOyBpKyspCisrCQl7 CisrCQlpZiAoKnAgIT0gMCkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9aRVJPSVNFX0VSUk9SKTsKKysJCQlnb3Rv IGVycjsKKysJCQl9CisrCQlwKys7CisrCQl9CisrCisrCXJldHVybiAxOworKworKwllcnI6Cisr CS8qIEEgcmVhbCBlcnJvciBhcyBvcHBvc2VkIHRvIGFuIGluZHVjZWQgb25lOiB1bmRlcmx5aW5n IGZ1bmN0aW9uIHdpbGwKKysJICogaW5kaWNhdGUgdGhlIGVycm9yLgorKwkgKi8KKysJaWYgKCEo ZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19FUlJPUl9DSEVDSywgRklQU19SX0ZVTkNUSU9OX0VSUk9SKTsKKysJRklQU19kcmJnX3Vu aW5zdGFudGlhdGUoZGN0eCk7CisrCXJldHVybiAwOworKworKwl9CisrCisraW50IGZpcHNfZHJi Z19rYXQoRFJCR19DVFggKmRjdHgsIGludCBuaWQsIHVuc2lnbmVkIGludCBmbGFncykKKysJewor KwlEUkJHX1NFTEZURVNUX0RBVEEgKnRkOworKwlmbGFncyB8PSBEUkJHX0ZMQUdfVEVTVDsKKysJ Zm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5pZCAhPSAwOyB0ZCsrKQorKwkJeworKwkJaWYgKHRk LT5uaWQgPT0gbmlkICYmIHRkLT5mbGFncyA9PSBmbGFncykKKysJCQl7CisrCQkJaWYgKCFmaXBz X2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwgMCkpCisrCQkJCXJldHVybiAwOworKwkJCXJldHVy biBmaXBzX2RyYmdfZXJyb3JfY2hlY2soZGN0eCwgdGQpOworKwkJCX0KKysJCX0KKysJcmV0dXJu IDA7CisrCX0KKysKKytpbnQgRklQU19kcmJnX2hlYWx0aF9jaGVjayhEUkJHX0NUWCAqZGN0eCkK KysJeworKwlpbnQgcnY7CisrCURSQkdfQ1RYICp0Y3R4ID0gTlVMTDsKKysJdGN0eCA9IEZJUFNf ZHJiZ19uZXcoMCwgMCk7CisrCWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCBkY3R4 LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKKysJaWYgKCF0Y3R4KQorKwkJcmV0dXJuIDA7CisrCXJ2 ID0gZmlwc19kcmJnX2thdCh0Y3R4LCBkY3R4LT50eXBlLCBkY3R4LT54ZmxhZ3MpOworKwlpZiAo dGN0eCkKKysJCUZJUFNfZHJiZ19mcmVlKHRjdHgpOworKwlpZiAocnYpCisrCQlmaXBzX3Bvc3Rf c3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7CisrCWVs c2UKKysJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4 LT54ZmxhZ3MpOworKwlpZiAoIXJ2KQorKwkJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJS T1I7CisrCWVsc2UKKysJCWRjdHgtPmhlYWx0aF9jaGVja19jbnQgPSAwOworKwlyZXR1cm4gcnY7 CisrCX0KKysKKytpbnQgRklQU19zZWxmdGVzdF9kcmJnKHZvaWQpCisrCXsKKysJRFJCR19DVFgg KmRjdHg7CisrCURSQkdfU0VMRlRFU1RfREFUQSAqdGQ7CisrCWludCBydiA9IDE7CisrCWRjdHgg PSBGSVBTX2RyYmdfbmV3KDAsIDApOworKwlpZiAoIWRjdHgpCisrCQlyZXR1cm4gMDsKKysJZm9y ICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5pZCAhPSAwOyB0ZCsrKQorKwkJeworKwkJaWYgKHRkLT5w b3N0ICE9IDEpCisrCQkJY29udGludWU7CisrCQlpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNf VEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKKysJCQlyZXR1cm4gMTsKKysJCWlmICgh Zmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDEpKQorKwkJCXsKKysJCQlmaXBzX3Bvc3Rf ZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKTsKKysJCQlydiA9IDA7 CisrCQkJY29udGludWU7CisrCQkJfQorKwkJaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RF U1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncykpCisrCQkJcmV0dXJuIDA7CisrCQl9CisrCUZJ UFNfZHJiZ19mcmVlKGRjdHgpOworKwlyZXR1cm4gcnY7CisrCX0KKysKKysKKytpbnQgRklQU19z ZWxmdGVzdF9kcmJnX2FsbCh2b2lkKQorKwl7CisrCURSQkdfQ1RYICpkY3R4OworKwlEUkJHX1NF TEZURVNUX0RBVEEgKnRkOworKwlpbnQgcnYgPSAxOworKwlkY3R4ID0gRklQU19kcmJnX25ldygw LCAwKTsKKysJaWYgKCFkY3R4KQorKwkJcmV0dXJuIDA7CisrCWZvciAodGQgPSBkcmJnX3Rlc3Q7 IHRkLT5uaWQgIT0gMDsgdGQrKykKKysJCXsKKysJCWlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQ U19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQorKwkJCXJldHVybiAxOworKwkJaWYg KCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwgMCkpCisrCQkJeworKwkJCWZpcHNfcG9z dF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOworKwkJCXJ2ID0g MDsKKysJCQljb250aW51ZTsKKysJCQl9CisrCQlpZiAoIWZpcHNfZHJiZ19lcnJvcl9jaGVjayhk Y3R4LCB0ZCkpCisrCQkJeworKwkJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRk LT5uaWQsICZ0ZC0+ZmxhZ3MpOworKwkJCXJ2ID0gMDsKKysJCQljb250aW51ZTsKKysJCQl9Cisr CQlpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZs YWdzKSkKKysJCQlyZXR1cm4gMDsKKysJCX0KKysJRklQU19kcmJnX2ZyZWUoZGN0eCk7CisrCXJl dHVybiBydjsKKysJfQorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlw c19kcmJnX3NlbGZ0ZXN0LmguZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2Ry Ymdfc2VsZnRlc3QuaAorLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19z ZWxmdGVzdC5oLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDQ3NjkzODcgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaAkyMDEyLTA0LTI2 IDE4OjAwOjUxLjQwNDc2OTM4NyArMDIwMAorQEAgLTAsMCArMSwyMzM1IEBACisrLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBh cmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAq CisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wt Y29yZS5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAg IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisr ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysg KgorKyAqLworKworKy8qIFNlbGZ0ZXN0IGFuZCBoZWFsdGggY2hlY2sgZGF0YSBmb3IgdGhlIFNQ ODAwLTkwIERSQkcgKi8KKysKKysjZGVmaW5lIF9fZmlwc19jb25zdHNlZworKworKy8qIEFFUy0x MjggdXNlIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDYxLDB4 NTIsMHg3YywweGUzLDB4MjMsMHg3ZCwweDBhLDB4MDcsMHgxMCwweDBjLDB4NTAsMHgzMywKKysJ MHhjOCwweGRiLDB4ZmYsMHgxMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX25vbmNlW10gPQorKwl7CisrCTB4 NTEsMHgwZCwweDg1LDB4NzcsMHhlZCwweDIyLDB4OTcsMHgyOAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX3Bl cnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDU5LDB4OWYsMHhiYiwweGNkLDB4ZDUs MHgyNSwweDY5LDB4YjUsMHhjYiwweGI1LDB4MDMsMHhmZSwKKysJMHhkNywweGQ3LDB4MDEsMHg2 NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweGVmLDB4ODgs MHg3NiwweDAxLDB4YWYsMHgzYywweGZlLDB4OGIsMHhhZiwweDI2LDB4MDYsMHg5ZSwKKysJMHg5 YSwweDQ3LDB4MDgsMHg3NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7 CisrCTB4ZTIsMHg3NiwweGY5LDB4ZjYsMHgzYSwweGJhLDB4MTAsMHg5ZiwweGJmLDB4NDcsMHgw ZSwweDUxLAorKwkweDA5LDB4ZmIsMHhhMywweGI2CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfaW50X3JldHVy bmVkYml0c1tdID0KKysJeworKwkweGQ0LDB4OTgsMHg4YSwweDQ2LDB4ODAsMHg0YywweGRiLDB4 YTMsMHg1OSwweDAyLDB4NTcsMHg1MiwKKysJMHg2NiwweDFjLDB4ZWEsMHg1YgorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNl X2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg4OCwweDhjLDB4OTEsMHhkNiww eGJlLDB4NTYsMHg2ZSwweDA4LDB4OWEsMHg2MiwweDJiLDB4MTEsCisrCTB4M2YsMHg1ZSwweDMx LDB4MDYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHhjMCww eDVjLDB4NmIsMHg5OCwweDAxLDB4MGQsMHg1OCwweDE4LDB4NTEsMHgxOCwweDk2LDB4YWUsCisr CTB4YTcsMHhlMywweGE4LDB4NjcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9Cisr CXsKKysJMHhjZiwweDAxLDB4YWMsMHgyMiwweDMxLDB4MDYsMHg4ZSwweGZjLDB4Y2UsMHg1Niww eGVhLDB4MjQsCisrCTB4MGYsMHgzOCwweDQzLDB4YzYKKysJfTsKKysKKysKKysvKiBBRVMtMTI4 IHVzZSBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgxZiwweDhl LDB4MzQsMHg4MiwweDBjLDB4YjcsMHhiZSwweGM1LDB4MDEsMHgzZSwweGQwLDB4YTMsCisrCTB4 OWQsMHg3ZCwweDFjLDB4OWIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9ub25jZVtdID0KKysJeworKwkweGQ1LDB4 NGQsMHhiZCwweDRhLDB4OTMsMHg3ZiwweGI4LDB4OTYKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhhYiwweGQ2LDB4M2YsMHgwNCwweGZlLDB4MjcsMHg2 YiwweDJkLDB4ZDcsMHhjMywweDFjLDB4ZjMsCisrCTB4MzgsMHg2NiwweGJhLDB4MWIKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHhmZSwweGY0LDB4MDksMHhhOCww eGI3LDB4NzMsMHgyNywweDljLDB4NWYsMHhhNywweGVhLDB4NDYsCisrCTB4YjUsMHhlMiwweGIy LDB4NDEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTI4X3VzZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NDIsMHhl NCwweDRlLDB4N2IsMHgyNywweGRkLDB4Y2IsMHhiYywweDBhLDB4Y2YsMHhhNiwweDY3LAorKwkw eGU3LDB4NTcsMHgxMSwweGI0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQor Kwl7CisrCTB4MTQsMHgyNiwweDY5LDB4ZDksMHhmMywweDY1LDB4MDMsMHhkNiwweDZiLDB4Yjks MHg0NCwweDBiLAorKwkweGM3LDB4YzQsMHg5ZSwweDM5CisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25h bGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4NTUsMHgyZSwweDYwLDB4OWEsMHgwNSwweDcyLDB4 OGEsMHhhOCwweGVmLDB4MjIsMHg4MSwweDVhLAorKwkweGM4LDB4OTMsMHhmYSwweDg0CisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF91c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDNjLDB4NDAsMHhjOCwweGM0 LDB4MTYsMHgwYywweDIxLDB4YTQsMHgzNywweDJjLDB4OGYsMHhhNSwKKysJMHgwNiwweDBjLDB4 MTUsMHgyYworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfdXNlX2RmX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGUxLDB4M2Us MHg5OSwweDk4LDB4ODYsMHg2NywweDBiLDB4NjMsMHg3YiwweGJlLDB4M2YsMHg4OCwKKysJMHg0 NiwweDgxLDB4YzcsMHgxOQorKwl9OworKworKworKy8qIEFFUy0xOTIgdXNlIGRmIFBSICAqLwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNl X2RmX3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDJiLDB4NGUsMHg4YiwweGUxLDB4ZjEs MHgzNCwweDgwLDB4NTYsMHg4MSwweGY5LDB4NzQsMHhlYywKKysJMHgxNywweDQ0LDB4MmEsMHhm MSwweDE0LDB4YjAsMHhiZiwweDk3LDB4MzksMHhiNywweDA0LDB4N2QKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9w cl9ub25jZVtdID0KKysJeworKwkweGQ2LDB4OWQsMHhlYiwweDE0LDB4NGUsMHg2YywweDMwLDB4 MWUsMHgzOSwweDU1LDB4NzMsMHhkMCwKKysJMHhkMSwweDgwLDB4NzgsMHhmYQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNl X2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGZjLDB4NDMsMHg0YSww eGY4LDB4OWEsMHg1NSwweGIzLDB4NTMsMHg4MywweGUyLDB4MTgsMHgxNiwKKysJMHgwYywweGRj LDB4Y2QsMHg1ZSwweDRmLDB4YTAsMHgwMywweDAxLDB4MmIsMHg5ZiwweGU0LDB4ZDUsCisrCTB4 N2QsMHg0OSwweGYwLDB4NDEsMHg5ZSwweDNkLDB4OTksMHgwNAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2Fk ZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDVlLDB4OWYsMHg0OSwweDZmLDB4MjEsMHg4Yiww eDFkLDB4MzIsMHhkNSwweDg0LDB4NWMsMHhhYywKKysJMHhhZiwweGRmLDB4ZTQsMHg3OSwweDll LDB4YWYsMHhhOSwweDgyLDB4ZDAsMHhmOCwweDRmLDB4Y2IsCisrCTB4NjksMHgxMCwweDBhLDB4 N2UsMHg4MSwweDU3LDB4YjUsMHgzNgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10g PQorKwl7CisrCTB4ZDQsMHg4MSwweDBjLDB4ZDcsMHg2NiwweDM5LDB4ZWMsMHg0MiwweDUzLDB4 ODcsMHg0MSwweGE1LAorKwkweDFlLDB4N2QsMHg4MCwweDkxLDB4OGUsMHhiYiwweGVkLDB4YWMs MHgxNCwweDAyLDB4MWEsMHhkNQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9 CisrCXsKKysJMHhkZiwweDFkLDB4MzksMHg0NSwweDdjLDB4OWIsMHhjNiwweDJiLDB4N2QsMHg4 YywweDkzLDB4ZTksCisrCTB4MTksMHgzMCwweDZiLDB4NjcKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9hZGRp dGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4MDAsMHg3MSwweDI3LDB4NGUsMHhkMywweDE0LDB4 ZjEsMHgyMCwweDdmLDB4NGEsMHg0MSwweDMyLAorKwkweDJhLDB4OTcsMHgxMSwweDQzLDB4OGYs MHg0YSwweDE1LDB4N2IsMHg5YiwweDUxLDB4NzksMHhkYSwKKysJMHg0OSwweDNkLDB4ZGUsMHhl OCwweGJjLDB4OTMsMHg5MSwweDk5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10g PQorKwl7CisrCTB4OTAsMHhlZSwweDc2LDB4YTEsMHg0NSwweDhkLDB4YjcsMHg0MCwweGIwLDB4 MTEsMHhiZiwweGQwLAorKwkweDY1LDB4ZDcsMHgzYywweDdjLDB4NGYsMHgyMCwweDNmLDB4NGUs MHgxMSwweDlkLDB4YjMsMHg1ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0KKysJ eworKwkweDI0LDB4M2IsMHgyMCwweGE0LDB4MzcsMHg2NiwweGJhLDB4NzIsMHgzOSwweDNmLDB4 Y2YsMHgzYywKKysJMHg3ZSwweDFhLDB4MmIsMHg4MworKwl9OworKworKworKy8qIEFFUy0xOTIg dXNlIGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDhkLDB4NzQs MHhhNCwweDUwLDB4MWEsMHgwMiwweDY4LDB4MGMsMHgyYSwweDY5LDB4YzQsMHg4MiwKKysJMHgz YiwweGJiLDB4ZGEsMHgwZSwweDdmLDB4NzcsMHhhMywweDE3LDB4NzgsMHg1NywweGIyLDB4N2IK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX3VzZV9kZl9ub25jZVtdID0KKysJeworKwkweDc1LDB4ZDUsMHgxZiwweGFjLDB4YTQs MHg4ZCwweDQyLDB4NzgsMHhkNywweDY5LDB4ODYsMHg5ZCwKKysJMHg3NywweGQ3LDB4NDEsMHgw ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfdXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDRlLDB4 MzMsMHg0MSwweDNjLDB4OWMsMHhjMiwweGQyLDB4NTMsMHhhZiwweDkwLDB4ZWEsMHhjZiwKKysJ MHgxOSwweDUwLDB4MWUsMHhlNiwweDZmLDB4NjMsMHhjOCwweDMyLDB4MjIsMHhkYywweDA3LDB4 NjUsCisrCTB4OWMsMHhkMywweGY4LDB4MzAsMHg5ZSwweGVkLDB4MzUsMHg3MAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNl X2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDVkLDB4OGIsMHg4YywweGMxLDB4ZGYs MHgwZSwweDAyLDB4NzgsMHhmYiwweDE5LDB4YjgsMHg2OSwKKysJMHg3OCwweDRlLDB4OWMsMHg1 MiwweGJjLDB4YzcsMHgyMCwweGM5LDB4ZTYsMHg1ZSwweDc3LDB4MjIsCisrCTB4MjgsMHgzZCww eDBjLDB4OWUsMHg2OCwweGE4LDB4NDUsMHhkNworKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2ludF9yZXR1cm5lZGJp dHNbXSA9CisrCXsKKysJMHhkNSwweGU3LDB4MDgsMHhjNSwweDE5LDB4OTksMHhkNSwweDMxLDB4 MDMsMHgwYSwweDc0LDB4YjYsCisrCTB4YjcsMHhlZCwweGU5LDB4ZWEKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9l bnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg5YywweDI2LDB4ZGEsMHhmMSwweGFjLDB4 ZDksMHg1YSwweGQ2LDB4YTgsMHg2NSwweGY1LDB4MDIsCisrCTB4OGYsMHhkYywweGEyLDB4MDks MHg1NCwweGE2LDB4ZTIsMHhhNCwweGRlLDB4MzIsMHhlMCwweDAxCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRk aXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OWIsMHg5MCwweGIwLDB4M2EsMHgwZSww eDNhLDB4ODAsMHgwNywweDRhLDB4ZjQsMHhkYSwweDc2LAorKwkweDI4LDB4MzAsMHgzYywweGVl LDB4NTQsMHgxYiwweDk0LDB4NTksMHg1MSwweDQzLDB4NTYsMHg3NywKKysJMHhhZiwweDg4LDB4 ZGQsMHg2MywweDg5LDB4NDcsMHgwNiwweDY1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0 MltdID0KKysJeworKwkweDNjLDB4MTEsMHg2NCwweDdhLDB4OTYsMHhmNSwweGQ4LDB4YjgsMHhh ZSwweGQ2LDB4NzAsMHg0ZSwKKysJMHgxNiwweDk2LDB4ZGUsMHhlOSwweDYyLDB4YmMsMHhlZSww eDI4LDB4MmYsMHgyNiwweGE2LDB4ZjAsCisrCTB4NTYsMHhlZiwweGEzLDB4ZjEsMHg2YiwweGEx LDB4YjEsMHg3NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDBiLDB4 ZTIsMHg1NiwweDAzLDB4MWUsMHhkYiwweDJjLDB4NmQsMHg3ZiwweDFiLDB4MTUsMHg1OCwKKysJ MHgxYSwweGY5LDB4MTMsMHgyOAorKwl9OworKworKworKy8qIEFFUy0yNTYgdXNlIGRmIFBSICAq LworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf dXNlX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDYxLDB4NjgsMHhmYywweDFhLDB4 ZjAsMHhiNSwweDk1LDB4NmIsMHg4NSwweDA5LDB4OWIsMHg3NCwKKysJMHgzZiwweDEzLDB4Nzgs MHg0OSwweDNiLDB4ODUsMHhlYywweDkzLDB4MTMsMHgzYiwweGE5LDB4NGYsCisrCTB4OTYsMHhh YiwweDJjLDB4ZTQsMHhjOCwweDhmLDB4ZGQsMHg2YQorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX25vbmNlW10g PQorKwl7CisrCTB4YWQsMHhkMiwweGJiLDB4YmEsMHhiNywweDY1LDB4ODksMHhjMywweDIxLDB4 NmMsMHg1NSwweDMzLAorKwkweDJiLDB4MzYsMHhmZiwweGE0CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfcGVy c29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NmUsMHhjYSwweGU3LDB4MjAsMHg3Miww eGQzLDB4ODQsMHg1YSwweDMyLDB4ZDMsMHg0YiwweDI0LAorKwkweDcyLDB4YzQsMHg2MywweDJi LDB4OWQsMHgxMiwweDI0LDB4MGMsMHgyMywweDI2LDB4OGUsMHg4MywKKysJMHgxNiwweDM3LDB4 MGIsMHhkMSwweDA2LDB4NGYsMHg2OCwweDZkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfYWRkaXRpb25hbGlu cHV0W10gPQorKwl7CisrCTB4N2UsMHgwOCwweDRhLDB4YmIsMHhlMywweDIxLDB4N2MsMHhjOSww eDIzLDB4ZDIsMHhmOCwweGIwLAorKwkweDczLDB4OTgsMHhiYSwweDg0LDB4NzQsMHgyMywweGFi LDB4MDYsMHg4YSwweGUyLDB4MjIsMHhkMywKKysJMHg3YiwweGNlLDB4OWIsMHhkMiwweDRhLDB4 NzYsMHhiOCwweGRlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJ MHgwYiwweDIzLDB4YWYsMHhkZiwweGYxLDB4NjIsMHhkNywweGQzLDB4NDMsMHg5NywweGY4LDB4 NzcsCisrCTB4MDQsMHhhOCwweDQyLDB4MjAsMHhiZCwweGY2LDB4MGYsMHhjMSwweDE3LDB4MmYs MHg5ZiwweDU0LAorKwkweGJiLDB4NTYsMHgxNywweDg2LDB4NjgsMHgwZSwweGJhLDB4YTkKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X3VzZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MzEsMHg4ZSwweGFk LDB4YWYsMHg0MCwweGViLDB4NmIsMHg3NCwweDMxLDB4NDYsMHg4MCwweGM3LAorKwkweDE3LDB4 YWIsMHgzYywweDdhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJewor KwkweDk0LDB4NmIsMHhjOSwweDlmLDB4YWIsMHg4ZCwweGM1LDB4ZWMsMHg3MSwweDg4LDB4MWQs MHgwMCwKKysJMHg4YywweDg5LDB4NjgsMHhlNCwweGM4LDB4MDcsMHg3NywweDM2LDB4MTcsMHg2 ZCwweDc5LDB4NzgsCisrCTB4YzcsMHgwNiwweDRlLDB4OTksMHgwNCwweDI4LDB4MjksMHhjMwor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweGJmLDB4NmMsMHg1 OSwweDJhLDB4MGQsMHg0NCwweDBmLDB4YWUsMHg5YSwweDVlLDB4MDMsMHg3MywKKysJMHhkOCww eGE2LDB4ZTEsMHhjZiwweDI1LDB4NjEsMHgzOCwweDI0LDB4ODYsMHg5ZSwweDUzLDB4ZTgsCisr CTB4YTQsMHhkZiwweDU2LDB4ZjQsMHgwNiwweDA3LDB4OWMsMHgwZgorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3By X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDIyLDB4NGEsMHhiNCwweGI4LDB4YjYsMHhlZSww eDdkLDB4YjEsMHg5ZSwweGM5LDB4ZjksMHhhMCwKKysJMHhkOSwweGUyLDB4OTcsMHgwMAorKwl9 OworKworKworKy8qIEFFUy0yNTYgdXNlIGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1dFtd ID0KKysJeworKwkweGE1LDB4M2UsMHgzNywweDEwLDB4MTcsMHg0MywweDkxLDB4OTMsMHg1OSww eDFlLDB4NDcsMHg1MCwKKysJMHg4NywweGFhLDB4ZGQsMHhkNSwweGMxLDB4YzMsMHg4NiwweGNk LDB4Y2EsMHgwZCwweGRiLDB4NjgsCisrCTB4ZTAsMHgwMiwweGQ4LDB4MGYsMHhkYywweDQwLDB4 MWEsMHg0NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18yNTZfdXNlX2RmX25vbmNlW10gPQorKwl7CisrCTB4YTksMHg0ZCwweGE1LDB4 NWEsMHhmZCwweGM1LDB4MGMsMHhlNSwweDFjLDB4OWEsMHgzYiwweDhhLAorKwkweDRjLDB4NDQs MHg4NCwweDQwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7Cisr CTB4OGIsMHg1MiwweGEyLDB4NGEsMHg5MywweGMzLDB4NGUsMHhhNywweDFlLDB4MWMsMHhhNyww eDA1LAorKwkweGViLDB4ODIsMHg5YiwweGE2LDB4NWQsMHhlNCwweGQ0LDB4ZTAsMHg3ZiwweGEz LDB4ZDgsMHg2YiwKKysJMHgzNywweDg0LDB4NWYsMHhmMSwweGM3LDB4ZDUsMHhmNiwweGQyCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4MjAsMHhmNCwweDIyLDB4 ZWQsMHhmOCwweDVjLDB4YTEsMHg2YSwweDAxLDB4Y2YsMHhiZSwweDVmLAorKwkweDhkLDB4NmMs MHg5NCwweDdmLDB4YWUsMHgxMiwweGE4LDB4NTcsMHhkYiwweDJhLDB4YTksMHhiZiwKKysJMHhj NywweGIzLDB4NjUsMHg4MSwweDgwLDB4OGQsMHgwZCwweDQ2CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfaW50X3Jl dHVybmVkYml0c1tdID0KKysJeworKwkweDRlLDB4NDQsMHhmZCwweGYzLDB4OWUsMHgyOSwweGEy LDB4YjgsMHgwZiwweDVkLDB4NmMsMHhlMSwKKysJMHgyOCwweDBjLDB4M2IsMHhjMQorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf dXNlX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGRkLDB4NDAsMHhlNSwweDk4 LDB4N2IsMHgyNywweDE2LDB4NzMsMHgxNSwweDY4LDB4ZDIsMHg3NiwKKysJMHhiZiwweDBjLDB4 NjcsMHgxNSwweDc1LDB4NzksMHgwMywweGQzLDB4ZGUsMHhkZSwweDkxLDB4NDYsCisrCTB4NDIs MHhkZCwweGQ0LDB4NjcsMHhjOCwweDc5LDB4YzgsMHgxZQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9u YWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDdmLDB4ZDgsMHgxZiwweGJkLDB4MmEsMHhiNSww eDFjLDB4MTEsMHg1ZCwweDgzLDB4NGUsMHg5OSwKKysJMHhmNiwweDVjLDB4YTUsMHg0MCwweDIw LDB4ZWQsMHgzOCwweDhlLDB4ZDUsMHg5ZSwweGUwLDB4NzUsCisrCTB4OTMsMHhmZSwweDEyLDB4 NWUsMHg1ZCwweDczLDB4ZmIsMHg3NQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9 CisrCXsKKysJMHhjZCwweDJjLDB4ZmYsMHgxNCwweDY5LDB4M2UsMHg0YywweDllLDB4ZmQsMHhm ZSwweDI2LDB4MGQsCisrCTB4ZTksMHg4NiwweDAwLDB4NDksMHgzMCwweGJhLDB4YjEsMHhjNiww eDUwLDB4NTcsMHg3NywweDJhLAorKwkweDYyLDB4MzksMHgyYywweDNiLDB4NzQsMHhlYiwweGM5 LDB4MGQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg0ZiwweDc4LDB4 YmUsMHhiOSwweDRkLDB4OTcsMHg4YywweGU5LDB4ZDAsMHg5NywweGZlLDB4YWQsCisrCTB4ZmEs MHhmZCwweDM1LDB4NWUKKysJfTsKKysKKysKKysvKiBBRVMtMTI4IG5vIGRmIFBSICAqLworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZf cHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4OWEsMHgyNSwweDY1LDB4MTAsMHg2NywweGQ1 LDB4YjYsMHg2YiwweDcwLDB4YTEsMHhiMywweGE0LAorKwkweDQzLDB4OTUsMHg4MCwweGMwLDB4 ODQsMHgwYSwweDc5LDB4YjAsMHg4OCwweDc0LDB4ZjIsMHhiZiwKKysJMHgzMSwweDZjLDB4MzMs MHgzOCwweDBiLDB4MDAsMHhiMiwweDVhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9ub25jZVtdID0KKysJewor KwkweDc4LDB4NDcsMHg2YiwweGY3LDB4OTAsMHg4ZSwweDg3LDB4ZjEKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3By X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGY3LDB4MjIsMHgxZCwweDNhLDB4 YmUsMHgxZCwweGNhLDB4MzIsMHgxYiwweGJkLDB4ODcsMHgwYywKKysJMHg1MSwweDI0LDB4MTks MHhlZSwweGEzLDB4MjMsMHgwOSwweDYzLDB4MzMsMHgzZCwweGE4LDB4MGMsCisrCTB4MWMsMHhm YSwweDQyLDB4ODksMHhjYywweDZmLDB4YTAsMHhhOAorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfYWRkaXRpb25h bGlucHV0W10gPQorKwl7CisrCTB4YzksMHhlMCwweDgwLDB4YmYsMHg4YywweDQ1LDB4NTgsMHgz OSwweGZmLDB4MDAsMHhhYiwweDAyLAorKwkweDRjLDB4M2UsMHgzYSwweDk1LDB4OWIsMHg4MCww eGE4LDB4MjEsMHgyYSwweGVlLDB4YmEsMHg3MywKKysJMHhiMSwweGQ5LDB4Y2YsMHgyOCwweGY2 LDB4OGYsMHg5YiwweDEyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJewor KwkweDRjLDB4YTgsMHhjNSwweGYwLDB4NTksMHg5ZSwweGE2LDB4OGQsMHgyNiwweDUzLDB4ZDcs MHg4YSwKKysJMHhhOSwweGQ4LDB4ZjcsMHhlZCwweGIyLDB4ZjksMHgxMiwweDQyLDB4ZTEsMHhl NSwweGJkLDB4ZTcsCisrCTB4ZTcsMHgxZCwweDc0LDB4OTksMHgwMCwweDlkLDB4MzEsMHgzZQor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfbm9fZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGUyLDB4YWMsMHgy MCwweGYwLDB4ODAsMHhlNywweGJjLDB4N2UsMHg5YywweDdiLDB4NjUsMHg3MSwKKysJMHhhZiww eDE5LDB4MzIsMHgxNgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJewor KwkweDMyLDB4N2YsMHgzOCwweDhiLDB4NzMsMHgwYSwweDc4LDB4ODMsMHhkYywweDMwLDB4YmUs MHg5ZiwKKysJMHgxMCwweDFmLDB4ZjUsMHgxZiwweGNhLDB4MDAsMHhiNSwweDBkLDB4ZDYsMHg5 ZCwweDYwLDB4ODMsCisrCTB4NTEsMHg1NCwweDdkLDB4MzgsMHgyMywweDNhLDB4NTIsMHg1MAor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4MTgsMHg2MSwweDUz LDB4NTYsMHhlZCwweGVkLDB4ZDcsMHgyMCwweGZiLDB4NzEsMHgwNCwweDdhLAorKwkweGIyLDB4 YWMsMHhjMSwweDI4LDB4Y2QsMHhmMiwweGMyLDB4ZmMsMHhhYSwweGIxLDB4MDYsMHgwNywKKysJ MHhlOSwweDQ2LDB4OTUsMHgwMiwweDQ4LDB4MDEsMHg3OCwweGY5CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9y ZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgyOSwweGM4LDB4MWIsMHgxNSwweGIxLDB4ZDEsMHhj MiwweGY2LDB4NzEsMHg4NiwweDY4LDB4MzMsCisrCTB4NTcsMHg4MiwweDMzLDB4YWYKKysJfTsK KysKKysKKysvKiBBRVMtMTI4IG5vIGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfZW50cm9weWlucHV0W10gPQor Kwl7CisrCTB4YzksMHhjNSwweDc5LDB4YmMsMHhlOCwweGM1LDB4MTksMHhkOCwweGJjLDB4NjYs MHg3MywweDY3LAorKwkweGY2LDB4ZDMsMHg3MiwweGFhLDB4YTYsMHgxNiwweGI4LDB4NTAsMHhi NywweDQ3LDB4M2EsMHg0MiwKKysJMHhhYiwweGY0LDB4MTYsMHhiMiwweDk2LDB4ZDIsMHhiNiww eDYwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF9ub19kZl9ub25jZVtdID0KKysJeworKwkweDVmLDB4YmYsMHg5NywweDBjLDB4 NGIsMHhhNCwweDg3LDB4MTMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0K KysJeworKwkweGNlLDB4ZmIsMHg3YiwweDNmLDB4ZDQsMHg2YiwweDI5LDB4MGQsMHg2OSwweDA2 LDB4ZmYsMHhiYiwKKysJMHhmMiwweGU1LDB4YzYsMHg2YywweDBhLDB4MTAsMHhhMCwweGNmLDB4 MWEsMHg0OCwweGM3LDB4OGIsCisrCTB4M2MsMHgxNiwweDg4LDB4ZWQsMHg1MCwweDEzLDB4ODEs MHhjZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4NGIsMHgyMiww eDQ2LDB4MTgsMHgwMiwweDdiLDB4ZDIsMHgxYiwweDIyLDB4NDIsMHg3YywweDM3LAorKwkweGQ5 LDB4ZjYsMHhlOCwweDliLDB4MTIsMHgzMCwweDVmLDB4ZTksMHg5MCwweGU4LDB4MDgsMHgyNCwK KysJMHg0ZiwweDA2LDB4NjYsMHhkYiwweDE5LDB4MmIsMHgxMywweDk1CisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9p bnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MmUsMHg5NiwweDcwLDB4NjQsMHhmYSwweGRm LDB4ZGYsMHg1NywweGI1LDB4ODIsMHhlZSwweGQ2LAorKwkweGVkLDB4M2UsMHg2NSwweGMyCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF9ub19kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHgyNiwweGMwLDB4NzIs MHgxNiwweDNhLDB4NGIsMHhiNywweDk5LDB4ZDQsMHgwNywweGFmLDB4NjYsCisrCTB4NjIsMHgz NiwweDk2LDB4YTQsMHg1MSwweDE3LDB4ZmEsMHgwNywweDhiLDB4MTcsMHg1ZSwweGExLAorKwkw eDJmLDB4M2MsMHgxMCwweGU3LDB4OTAsMHhkMCwweDQ2LDB4MDAKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0 aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDgzLDB4MzksMHgzNywweDdiLDB4MDIsMHgw NiwweGQyLDB4MTIsMHgxMywweDhkLDB4OGIsMHhmMiwKKysJMHhmMCwweGY2LDB4MjYsMHhlYiww eGE0LDB4MjIsMHg3YiwweGMyLDB4ZTcsMHhiYSwweDc5LDB4ZTQsCisrCTB4M2IsMHg3NywweDVk LDB4NGQsMHg0NywweGIyLDB4MmQsMHhiNAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0Mltd ID0KKysJeworKwkweDBiLDB4YjksMHg2NywweDM3LDB4ZGIsMHg4MywweGRmLDB4Y2EsMHg4MSww eDhiLDB4ZjksMHgzZiwKKysJMHhmMSwweDExLDB4MWIsMHgyZiwweGYwLDB4NjEsMHhhNiwweGRm LDB4YmEsMHhhMywweGIxLDB4YWMsCisrCTB4ZDMsMHhlNiwweDA5LDB4YjgsMHgyYywweDZhLDB4 NjcsMHhkNgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfbm9fZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MWUsMHhhNyww eGE0LDB4ZTQsMHhlMSwweGE2LDB4N2MsMHg2OSwweDlhLDB4NDQsMHg2YywweDM2LAorKwkweDgx LDB4MzcsMHgxOSwweGQ0CisrCX07CisrCisrCisrLyogQUVTLTE5MiBubyBkZiBQUiAgKi8KKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2Rm X3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDlkLDB4MmMsMHhkMiwweDU1LDB4NjYsMHhl YSwweGUwLDB4YmUsMHgxOCwweGI3LDB4NzYsMHhlNywKKysJMHg3MywweDM1LDB4ZDgsMHgxZiww eGFkLDB4M2EsMHhlMywweDgxLDB4MGUsMHg5MiwweGQwLDB4NjEsCisrCTB4YzksMHgxMiwweDI2 LDB4ZjYsMHgxYywweGRmLDB4ZmUsMHg0NywweGFhLDB4ZmUsMHg3ZCwweDVhLAorKwkweDE3LDB4 MWYsMHg4ZCwweDlhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9ub25jZVtdID0KKysJeworKwkweDQ0LDB4ODIs MHhlZCwweGU4LDB4NGMsMHgyOCwweDVhLDB4MTQsMHhmZiwweDg4LDB4OGQsMHgxOSwKKysJMHg2 MSwweDVjLDB4ZWUsMHgwZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PQorKwl7CisrCTB4NDcsMHhkNywweDliLDB4OTksMHhhYSwweGNiLDB4ZTcsMHhkMiwweDU3LDB4 NjYsMHgyYywweGUxLAorKwkweDc4LDB4ZDYsMHgyYywweGVhLDB4YTMsMHgyMywweDVmLDB4MmEs MHhjMSwweDNhLDB4ZjAsMHhhNCwKKysJMHgyMCwweDNiLDB4ZmEsMHgwNywweGQ1LDB4MDUsMHgw MiwweGU0LDB4NTcsMHgwMSwweGI2LDB4MTAsCisrCTB4NTcsMHgyZSwweGU3LDB4NTUKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDRiLDB4NzQsMHgwYiwweDQw LDB4Y2UsMHg2YiwweGMyLDB4NmEsMHgyNCwweGI0LDB4ZjMsMHhhZCwKKysJMHg3YSwweGE1LDB4 N2EsMHhhMiwweDE1LDB4ZTIsMHhjOCwweDYxLDB4MTUsMHhjNiwweGI3LDB4ODUsCisrCTB4Njks MHgxMSwweGFkLDB4N2IsMHgxNCwweGQyLDB4ZjYsMHgxMiwweGExLDB4OTUsMHg1ZCwweDNmLAor KwkweGUyLDB4ZDAsMHgwYywweDJmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0K KysJeworKwkweDBjLDB4OWMsMHhhZCwweDA1LDB4ZWUsMHhhZSwweDQ4LDB4MjMsMHg4OSwweDU5 LDB4YTEsMHg5NCwKKysJMHhkNywweGQ4LDB4NzUsMHhkNSwweDU0LDB4OTMsMHhjNywweDRhLDB4 ZDksMHgyNiwweGRlLDB4ZWIsCisrCTB4YmEsMHhiMCwweDdlLDB4MzAsMHgxZCwweDVmLDB4Njks MHg0MCwweDljLDB4M2IsMHgxNywweDU4LAorKwkweDFkLDB4MzAsMHhiMywweDc4CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9u b19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZjcsMHg5MywweGIwLDB4NmQs MHg3NywweDgzLDB4ZDUsMHgzOCwweDAxLDB4ZTEsMHg1MiwweDQwLAorKwkweDdlLDB4M2UsMHgw YywweDI2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4YmMs MHg0YiwweDM3LDB4NDQsMHgxYywweGM1LDB4NDUsMHg1ZiwweDhmLDB4NTEsMHg2MiwweDhhLAor KwkweDg1LDB4MzAsMHgxZCwweDdjLDB4ZTQsMHhjZiwweGY3LDB4NDQsMHhjZSwweDMyLDB4M2Us MHg1NywKKysJMHg5NSwweGE0LDB4MmEsMHhkZiwweGZkLDB4OWUsMHgzOCwweDQxLDB4YjMsMHhm NiwweGM1LDB4ZWUsCisrCTB4MGMsMHg0YiwweGVlLDB4NmUKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJv cHlpbnB1dHByMltdID0KKysJeworKwkweGVjLDB4YWYsMHhmNiwweDRmLDB4YjEsMHhhMCwweDU0 LDB4YjUsMHg1YiwweGUzLDB4NDYsMHhiMCwKKysJMHg3NiwweDVhLDB4N2MsMHgzZiwweDdiLDB4 OTQsMHg2OSwweDIxLDB4NTEsMHgwMiwweGU1LDB4OWYsCisrCTB4MDQsMHg1OSwweDAyLDB4OTgs MHhjNiwweDQzLDB4MmMsMHhjYywweDI2LDB4NGMsMHg4NywweDZiLAorKwkweDhlLDB4MGEsMHg4 MywweGRmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg3NCwweDQ1 LDB4ZmIsMHg1MywweDg0LDB4OTYsMHhiZSwweGZmLDB4MTUsMHhjYywweDQxLDB4OTEsCisrCTB4 YjksMHhhMSwweDIxLDB4NjgKKysJfTsKKysKKysKKysvKiBBRVMtMTkyIG5vIGRmIE5vIFBSICAq LworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf bm9fZGZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4M2MsMHg3ZCwweGI1LDB4ZTAsMHg1NCww eGQ5LDB4NmUsMHg4YywweGE5LDB4ODYsMHhjZSwweDRlLAorKwkweDZiLDB4YWYsMHhlYiwweDJm LDB4ZTcsMHg3NSwweGUwLDB4OGIsMHhhNCwweDNiLDB4MDcsMHhmZSwKKysJMHhiZSwweDMzLDB4 NzUsMHg5MywweDgwLDB4MjcsMHhiNSwweDI5LDB4NDcsMHg4YiwweGM3LDB4MjgsCisrCTB4OTQs MHhjMywweDU5LDB4NjMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX25vbmNlW10gPQorKwl7CisrCTB4NDMsMHhmMSww eDdkLDB4YjgsMHhjMywweGZlLDB4ZDAsMHgyMywweDZiLDB4YjQsMHg5MiwweGRiLAorKwkweDI5 LDB4ZmQsMHg0NSwweDcxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Cisr CXsKKysJMHg5ZiwweDI0LDB4MjksMHg5OSwweDllLDB4MDEsMHhhYiwweGU5LDB4MTksMHhkOCww eDIzLDB4MDgsCisrCTB4YjcsMHhkNiwweDdlLDB4OGMsMHhjMCwweDllLDB4N2YsMHg2ZSwweDVi LDB4MzMsMHgyMCwweDk2LAorKwkweDBiLDB4MjMsMHgyYywweGE1LDB4NmEsMHhmOCwweDFiLDB4 MDQsMHgyNiwweGRiLDB4MmUsMHgyYiwKKysJMHgzYiwweDg4LDB4Y2UsMHgzNQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9f ZGZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4OTQsMHhlOSwweDdjLDB4M2QsMHhhNyww eGRiLDB4NjAsMHg4MywweDFmLDB4OTgsMHgzZiwweDBiLAorKwkweDg4LDB4NTksMHg1NywweDUx LDB4ODgsMHg5ZiwweDc2LDB4NDksMHg5ZiwweGE2LDB4ZGEsMHg3MSwKKysJMHgxZCwweDBkLDB4 NDcsMHgxNiwweDYzLDB4YzUsMHg2OCwweGU0LDB4NWQsMHgzOSwweDY5LDB4YjMsCisrCTB4M2Us MHhiZSwweGQ0LDB4OGUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJ MHhmOSwweGQ3LDB4YWQsMHg2OSwweGFiLDB4OGYsMHgyMywweDU2LDB4NzAsMHgxNywweDRmLDB4 MmEsCisrCTB4NDUsMHhlNywweDRhLDB4YzUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dHJlc2Vl ZFtdID0KKysJeworKwkweGE2LDB4NzEsMHg2YSwweDNkLDB4YmEsMHhkMSwweGU4LDB4NjYsMHhh NiwweGVmLDB4YjIsMHgwZSwKKysJMHhhOCwweDljLDB4YWEsMHg0ZSwweGFmLDB4MTcsMHg4OSww eDUwLDB4MDAsMHhkYSwweGExLDB4YjEsCisrCTB4MGIsMHhhNCwweGQ5LDB4MzUsMHg4OSwweGM4 LDB4ZTUsMHhiMCwweGQ5LDB4YjcsMHhjNCwweDMzLAorKwkweDliLDB4Y2IsMHg3ZSwweDc1Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHgyNywweDIxLDB4 ZmMsMHhjMiwweGJkLDB4ZjMsMHgzYywweGNlLDB4YzMsMHhjYSwweGMxLDB4MDEsCisrCTB4ZTAs MHhmZiwweDkzLDB4MTIsMHg3ZCwweDU0LDB4NDIsMHhlMywweDlmLDB4MDMsMHhkZiwweDI3LAor KwkweDA0LDB4MDcsMHgzYywweDUzLDB4N2YsMHhhOCwweDY2LDB4YzgsMHg5NywweDRiLDB4NjEs MHg0MCwKKysJMHg1ZCwweDdhLDB4MjUsMHg3OQorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0 MltdID0KKysJeworKwkweDJkLDB4OGUsMHgxNiwweDVkLDB4MGIsMHg5ZiwweGViLDB4YWEsMHhk NiwweGVjLDB4MjgsMHg3MSwKKysJMHg3YywweDBiLDB4YzEsMHgxZCwweGQ0LDB4NDQsMHgxOSww eDQ3LDB4ZmQsMHgxZCwweDdjLDB4ZTUsCisrCTB4ZjMsMHgyNywweGUxLDB4YjYsMHg3MiwweDBh LDB4ZTAsMHhlYywweDBlLDB4Y2QsMHhlZiwweDFhLAorKwkweDkxLDB4NmEsMHhlMywweDVmCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhlNSwweGRhLDB4YjgsMHhlMCww eDYzLDB4NTksMHg1YSwweGNjLDB4M2QsMHhkYywweDlmLDB4ZTgsCisrCTB4NjYsMHg2NywweDJj LDB4OTIKKysJfTsKKysKKysKKysvKiBBRVMtMjU2IG5vIGRmIFBSICAqLworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9w eWlucHV0W10gPQorKwl7CisrCTB4MTUsMHhjNywweDVkLDB4Y2IsMHg0MSwweDRiLDB4MTYsMHgw MSwweDNhLDB4ZDEsMHg0NCwweGU4LAorKwkweDIyLDB4MzIsMHhjNiwweDljLDB4M2YsMHhlNyww eDQzLDB4ZjUsMHg5YSwweGQzLDB4ZWEsMHhmMiwKKysJMHhkNywweDRlLDB4NmUsMHg2YSwweDU1 LDB4NzMsMHg0MCwweGVmLDB4ODksMHhhZCwweDBkLDB4MDMsCisrCTB4OTYsMHg3ZSwweDc4LDB4 ODEsMHgyZiwweDkxLDB4MWIsMHg0NCwweGIwLDB4MDIsMHhiYSwweDFjCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9w cl9ub25jZVtdID0KKysJeworKwkweGRjLDB4ZTQsMHhkNCwweDI3LDB4N2EsMHg5MCwweGQ3LDB4 OTksMHg0MywweGExLDB4M2MsMHgzMCwKKysJMHhjYywweDRiLDB4ZWUsMHgyZQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9f ZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4ZTMsMHhlNiwweGI5LDB4 MTEsMHhlNCwweDdhLDB4YTQsMHg0MCwweDZiLDB4ZjgsMHg3MywweGY3LAorKwkweDdlLDB4ZWMs MHhjNywweGI5LDB4OTcsMHhiZiwweGY4LDB4MjUsMHg3YiwweGJlLDB4MTEsMHg5YiwKKysJMHg1 YiwweDZhLDB4MGMsMHgyZSwweDJiLDB4MDEsMHg1MSwweGNkLDB4NDEsMHg0YiwweDZiLDB4YWMs CisrCTB4MzEsMHhhOCwweDBiLDB4ZjcsMHhlNiwweDU5LDB4NDIsMHhiOCwweDAzLDB4MGMsMHhm OCwweDA2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg2YSww eDlmLDB4MDAsMHg5MSwweGFlLDB4ZmUsMHhjZiwweDg0LDB4OTksMHhjZSwweGIxLDB4NDAsCisr CTB4NmQsMHg1ZCwweDMzLDB4MjgsMHg4NCwweGY0LDB4OGMsMHg2MywweDRjLDB4N2UsMHhiZCww eDJjLAorKwkweDgwLDB4NzYsMHhlZSwweDVhLDB4YWEsMHgxNSwweDA3LDB4MzEsMHhkOCwweGJi LDB4OGMsMHg2OSwKKysJMHg5ZCwweDlkLDB4YmMsMHg3ZSwweDQ5LDB4YWUsMHhlYywweDM5LDB4 NmIsMHhkMSwweDFmLDB4N2UKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7 CisrCTB4ZjMsMHhiOSwweDc1LDB4OWMsMHhiZCwweDg4LDB4ZWEsMHhhMiwweDUwLDB4YWQsMHhk NiwweDE2LAorKwkweDFhLDB4MTIsMHgzYywweDg2LDB4NjgsMHhhZiwweDZmLDB4YmUsMHgxOSww eGYyLDB4ZWUsMHhjYywKKysJMHhhNSwweDcwLDB4ODQsMHg1MywweDUwLDB4Y2IsMHg5ZiwweDE0 LDB4YTksMHhlNSwweGVlLDB4YjksCisrCTB4NDgsMHg0NSwweDQwLDB4ZTIsMHhjNywweGM5LDB4 OWEsMHg3NCwweGZmLDB4OGMsMHg5OSwweDFmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9pbnRfcmV0dXJuZWRi aXRzW10gPQorKwl7CisrCTB4MmUsMHhmMiwweDQ1LDB4NGMsMHg2MiwweDJlLDB4MGEsMHhiOSww eDZiLDB4YTIsMHhmZCwweDU2LAorKwkweDc5LDB4NjAsMHg5MywweGNmCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9w cl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4YWYsMHg2OSwweDIwLDB4ZTksMHgzYiww eDM3LDB4OWQsMHgzZiwweGI0LDB4ODAsMHgwMiwweDdhLAorKwkweDI1LDB4N2QsMHhiOCwweGRl LDB4NzEsMHhjNSwweDA2LDB4MGMsMHhiNCwweGUyLDB4OGYsMHgzNSwKKysJMHhkOCwweDE0LDB4 MGQsMHg3ZiwweDc2LDB4NjMsMHg0ZSwweGI1LDB4ZWUsMHhlOSwweDZmLDB4MzQsCisrCTB4Yzcs MHg1ZiwweDU2LDB4MTQsMHg0YSwweGU4LDB4NzMsMHg5NSwweDViLDB4MWMsMHhiOSwweGNiCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHhlNSwweGIwLDB4MmUs MHg3ZSwweDUyLDB4MzAsMHhlMywweDYzLDB4ODIsMHhiNiwweDQ0LDB4ZDMsCisrCTB4MjUsMHgx OSwweDA1LDB4MjQsMHg5YSwweDlmLDB4NWYsMHgyNywweDZhLDB4MjksMHhhYiwweGZhLAorKwkw eDA3LDB4YTIsMHg0MiwweDBmLDB4YzUsMHhhOCwweDk0LDB4N2MsMHgxNywweDdiLDB4ODUsMHg4 MywKKysJMHgwYywweDI1LDB4MGUsMHg2MywweDBiLDB4ZTksMHgxMiwweDYwLDB4Y2QsMHhlZiww eDgwLDB4MGYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDVlLDB4 ZjIsMHgyNiwweGVmLDB4OWYsMHg1OCwweDVkLDB4ZDUsMHg0YSwweDEwLDB4ZmUsMHhhNywKKysJ MHgyZCwweDVmLDB4NGEsMHg0NgorKwl9OworKworKworKy8qIEFFUy0yNTYgbm8gZGYgTm8gUFIg ICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl9ub19kZl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhmYiwweGNmLDB4MWIsMHg2MSwweDE2 LDB4ODksMHg3OCwweDIzLDB4ZjUsMHhkOCwweDk2LDB4ZTMsCisrCTB4NGUsMHg2NCwweDBiLDB4 MjksMHg5YSwweDNmLDB4ZjgsMHhhNSwweGVkLDB4ZjIsMHhmZSwweGRiLAorKwkweDE2LDB4Y2Es MHg3ZiwweDEwLDB4ZmEsMHg1ZSwweDE4LDB4NzYsMHgyYywweDYzLDB4NWUsMHg5NiwKKysJMHhj ZiwweGIzLDB4ZDYsMHhmYywweGFmLDB4OTksMHgzOSwweDI4LDB4OWMsMHg2MSwweGU4LDB4YjMK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMjU2X25vX2RmX25vbmNlW10gPQorKwl7CisrCTB4MTIsMHg5NiwweGYwLDB4NTIsMHhmMyww eDhkLDB4ODEsMHhjZiwweGRlLDB4ODYsMHhmMiwweDk5LAorKwkweDQzLDB4OTYsMHhiOSwweGYw CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl9ub19kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg2MywweDBk LDB4NzgsMHhmNSwweDkwLDB4OGUsMHgzMiwweDQ3LDB4YjAsMHg0ZCwweDM3LDB4NjAsCisrCTB4 MDksMHg5NiwweGJjLDB4YmYsMHg5NywweDdhLDB4NjIsMHgxNCwweDQ1LDB4YmQsMHg4ZCwweGNj LAorKwkweDY5LDB4ZmIsMHgwMywweGUxLDB4ODAsMHgxYywweGM3LDB4ZTIsMHgyYSwweGY5LDB4 MzcsMHgzZiwKKysJMHg2NiwweDRkLDB4NjIsMHhkOSwweDEwLDB4ZTAsMHhhZCwweGM4LDB4OWEs MHhmMCwweGE4LDB4NmQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkw eDM2LDB4YzYsMHgxMywweDYwLDB4YmIsMHgxNCwweGFkLDB4MjIsMHhiMCwweDM4LDB4YWMsMHhh NiwKKysJMHgxOCwweDE2LDB4OTMsMHgyNSwweDg2LDB4YjcsMHhkYywweGRjLDB4MzYsMHg5OCww eDJiLDB4ZjksCisrCTB4NjgsMHgzMywweGQzLDB4YzYsMHhmZiwweGNlLDB4OGQsMHgxNSwweDU5 LDB4ODIsMHg3NiwweGVkLAorKwkweDZmLDB4OGQsMHg0OSwweDc0LDB4MmYsMHhkYSwweGRjLDB4 MWYsMHgxNywweGQwLDB4ZGUsMHgxNworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0K KysJeworKwkweDE2LDB4MmYsMHg4ZSwweDNmLDB4MjEsMHg3YSwweDFjLDB4MjAsMHg1NiwweGQx LDB4OTIsMHhmNiwKKysJMHhkMiwweDI1LDB4NzUsMHgwZQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlu cHV0cmVzZWVkW10gPQorKwl7CisrCTB4OTEsMHg3OSwweDc2LDB4ZWUsMHhlMCwweGNmLDB4OWUs MHhjMiwweGQ1LDB4ZDQsMHgyMywweDliLAorKwkweDEyLDB4OGMsMHg3ZSwweDBhLDB4YjcsMHhk MiwweDhiLDB4ZDYsMHg3YywweGEzLDB4YzYsMHhlNSwKKysJMHgwZSwweGFhLDB4YzcsMHg2Yiww eGFlLDB4MGQsMHhmYSwweDUzLDB4MDYsMHg3OSwweGExLDB4ZWQsCisrCTB4NGQsMHg2YSwweDBl LDB4ZDgsMHg5ZCwweGJlLDB4MWIsMHgzMSwweDkzLDB4N2IsMHhlYywweGZiCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19k Zl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHhkMiwweDQ2LDB4NTAsMHgyMiww eDEwLDB4MTQsMHg2MywweGY3LDB4ZWEsMHgwZiwweGI5LDB4N2UsCisrCTB4MGQsMHhlMSwweDk0 LDB4MDcsMHhhZiwweDA5LDB4NDQsMHgzMSwweGVhLDB4NjQsMHhhNCwweDE4LAorKwkweDViLDB4 ZjksMHhkOCwweGMyLDB4ZmEsMHgwMywweDQ3LDB4YzUsMHgzOSwweDQzLDB4ZDUsMHgzYiwKKysJ MHg2MiwweDg2LDB4NjQsMHhlYSwweDJjLDB4NzMsMHg4YywweGFlLDB4OWQsMHg5OCwweDk4LDB4 MjkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg4YywweGFiLDB4 MTgsMHhmOCwweGMzLDB4ZWMsMHgxOCwweDVjLDB4YjMsMHgxZSwweDlkLDB4YmUsCisrCTB4M2Ys MHgwMywweGI0LDB4MDAsMHg5OCwweDlkLDB4YWUsMHhlYiwweGY0LDB4OTQsMHhmOCwweDQyLAor KwkweDhmLDB4ZTMsMHgzOSwweDA3LDB4ZTEsMHhjOSwweGFkLDB4MGIsMHgxZiwweGVkLDB4YzAs MHhiYSwKKysJMHhmNiwweGQxLDB4ZWMsMHgyNywweDg2LDB4N2IsMHhkNiwweDU1LDB4OWIsMHg2 MCwweGE1LDB4YzYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGVmLDB4 ZDIsMHhkOCwweDVjLDB4ZGMsMHg2MiwweDI1LDB4OWYsMHhhYSwweDFlLDB4MmMsMHg2NywKKysJ MHhmNiwweDAyLDB4MzIsMHhlMgorKwl9OworKworKworKy8qIFNIQS0xIFBSICAqLworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlu cHV0W10gPQorKwl7CisrCTB4ZDIsMHgzNiwweGE1LDB4MjcsMHgzMSwweDczLDB4ZGQsMHgxMSww eDRmLDB4OTMsMHhiZCwweGUyLAorKwkweDMxLDB4YTUsMHg5MSwweDEzCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9ub25jZVtd ID0KKysJeworKwkweGI1LDB4YjMsMHg2MCwweGVmLDB4ZjcsMHg2MywweDMxLDB4ZjMKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3By X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGQ0LDB4YmIsMHgwMiwweDEwLDB4 YjIsMHg3MSwweGRiLDB4ODEsMHhkNiwweGYwLDB4NDIsMHg2MCwKKysJMHhkYSwweGVhLDB4Nzcs MHg1MgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTFfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4NGQsMHhkMiwweDZjLDB4 ODcsMHhmYiwweDJjLDB4NGYsMHhhNiwweDhkLDB4MTYsMHg2MywweDIyLAorKwkweDZhLDB4NTEs MHhlMywweGY4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweGM5LDB4ODMsMHg5 ZSwweDE2LDB4ZjYsMHgxYywweDBmLDB4YjIsMHhlYywweDYwLDB4MzEsMHhhOSwKKysJMHhjYiww eGE5LDB4MzYsMHg3YQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTFfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGE4LDB4 MTMsMHg0ZiwweGY0LDB4MzEsMHgwMiwweDQ0LDB4ZTMsMHhkMywweDNkLDB4NjEsMHg5ZSwKKysJ MHhlNSwweGM2LDB4M2UsMHg4OSwweGI1LDB4OWIsMHgwZiwweDM1CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9hZGRpdGlvbmFs aW5wdXQyW10gPQorKwl7CisrCTB4ZjksMHhlOCwweGQyLDB4NzIsMHgxMywweDM0LDB4OTUsMHg2 ZiwweDE1LDB4NDksMHg0NywweDk5LAorKwkweDE2LDB4MDMsMHgxOSwweDQ3CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRy b3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHg0ZSwweDhjLDB4NDksMHg5YiwweDRhLDB4NWMsMHg5 YiwweDljLDB4M2EsMHhlZSwweGZiLDB4ZDIsCisrCTB4YWUsMHhjZCwweDhjLDB4YzQKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3By X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDUwLDB4YjQsMHhiNCwweGNkLDB4NjgsMHg1Nyww eGZjLDB4MmUsMHhjMSwweDUyLDB4Y2MsMHhmNiwKKysJMHg2OCwweGE0LDB4ODEsMHhlZCwweDdl LDB4ZTQsMHgxZCwweDg3CisrCX07CisrCisrCisrLyogU0hBLTEgTm8gUFIgICovCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9lbnRyb3B5aW5wdXRb XSA9CisrCXsKKysJMHhhOSwweDQ3LDB4MWIsMHgyOSwweDJkLDB4MWMsMHgwNSwweGRmLDB4NzYs MHhkMCwweDYyLDB4ZjksCisrCTB4ZTIsMHg3ZiwweDRjLDB4N2IKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX25vbmNlW10gPQorKwl7 CisrCTB4NTMsMHgyMywweDI0LDB4ZTMsMHhlYywweDBjLDB4NTQsMHgxNAorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4N2EsMHg4NywweGExLDB4YWMsMHgxYywweGZkLDB4 YWIsMHhhZSwweGY3LDB4ZDYsMHhmYiwweDc2LAorKwkweDI4LDB4ZWMsMHg2ZCwweGNhCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9h ZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHhmYywweDkyLDB4MzUsMHhkNiwweDdlLDB4Yjcs MHgyNCwweDY1LDB4ZmQsMHgxMiwweDI3LDB4MzUsCisrCTB4YzAsMHg3MiwweGNhLDB4MjgKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEx X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg1NywweDg4LDB4ODIsMHhlNSwweDI1LDB4 YTUsMHgyYywweDRhLDB4MDYsMHgyMCwweDZjLDB4NzIsCisrCTB4NTUsMHg2MSwweGRkLDB4OTAs MHg3MSwweDlmLDB4OTUsMHhlYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4 NjksMHhhNSwweDQwLDB4NjIsMHg5OCwweDQ3LDB4NTYsMHg3MywweDRhLDB4OGYsMHg2MCwweDk2 LAorKwkweGQ2LDB4OTksMHgyNywweGVkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Cisr CXsKKysJMHhlNSwweDQwLDB4NGUsMHhiZCwweDUwLDB4MDAsMHhmNSwweDE1LDB4YTYsMHhlZSww eDQ1LDB4ZGEsCisrCTB4ODQsMHgzZCwweGQ0LDB4YzAKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dDJbXSA9 CisrCXsKKysJMHgxMSwweDUxLDB4MTQsMHhmMCwweDA5LDB4MWIsMHg0ZSwweDU2LDB4MGQsMHhl OSwweGY2LDB4MWUsCisrCTB4NTIsMHg2NSwweGNkLDB4OTYKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3JldHVybmVkYml0c1tdID0K KysJeworKwkweGExLDB4OWMsMHg5NCwweDZlLDB4MjksMHhlMSwweDMzLDB4MGQsMHgzMiwweGQ2 LDB4YWEsMHhjZSwKKysJMHg3MSwweDNmLDB4NTIsMHg3MiwweDhiLDB4NDIsMHhhOCwweGQ3Cisr CX07CisrCisrCisrLyogU0hBLTIyNCBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4 MTIsMHg2OSwweDMyLDB4NGYsMHg4MywweGE2LDB4ZjUsMHgxNCwweGUzLDB4NDksMHgzZSwweDc1 LAorKwkweDNlLDB4ZGUsMHhhZCwweGExLDB4MjksMHhjMywweGYzLDB4MTksMHgyMCwweGI1LDB4 NGMsMHhkOQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTIyNF9wcl9ub25jZVtdID0KKysJeworKwkweDZhLDB4NzgsMHhkMCwweGViLDB4 YmIsMHg1YSwweGYwLDB4ZWUsMHhlOCwweGMzLDB4YmEsMHg3MQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhkNSwweGI4LDB4YjYsMHhiYywweGMxLDB4NWIsMHg2 MCwweDMxLDB4M2MsMHhmNSwweGU1LDB4YzAsCisrCTB4OGUsMHg1MiwweDdhLDB4YmQsMHhlYSww eDQ3LDB4YTksMHg1ZiwweDhmLDB4ZjksMHg4YiwweGFlCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1 dFtdID0KKysJeworKwkweDFmLDB4NTUsMHhlYywweGFlLDB4MTYsMHgxMiwweDg0LDB4YmEsMHg4 NCwweDE2LDB4MTksMHg4OCwKKysJMHg4ZSwweGI4LDB4MzMsMHgyNSwweDU0LDB4ZmYsMHhjYSww eDc5LDB4YWYsMHgwNywweDI1LDB4NTAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsK KysJMHg5MiwweGEzLDB4MzIsMHhhOCwweDlhLDB4MGEsMHg1OCwweDdjLDB4MWQsMHg1YSwweDdl LDB4ZTEsCisrCTB4YjIsMHg3MywweGFiLDB4MGUsMHgxNiwweDc5LDB4MjMsMHhkMywweDI5LDB4 ODksMHg4MSwweGUxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjI0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhmMyww eDM4LDB4OTEsMHg0MCwweDM3LDB4N2EsMHg1MSwweDcyLDB4NDIsMHg3NCwweDc4LDB4MGEsCisr CTB4NjksMHhmZCwweGE2LDB4NDQsMHg0MywweDQ1LDB4NmMsMHgwYywweDVhLDB4MTksMHhmZiww eGYxLAorKwkweDU0LDB4NjAsMHhlZSwweDZhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9 CisrCXsKKysJMHg3NSwweGYzLDB4MDQsMHgyNSwweGRkLDB4MzYsMHhhOCwweDM3LDB4NDYsMHhh ZSwweDBjLDB4NTIsCisrCTB4MDUsMHg3OSwweDRjLDB4MjYsMHhkYiwweGU5LDB4NzEsMHgxNiww eDRjLDB4MGEsMHhmMiwweDYwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkw eGVhLDB4YzUsMHgwMywweDBhLDB4NGYsMHhiMCwweDM4LDB4OGQsMHgyMywweGQ0LDB4YzgsMHg3 NywKKysJMHhlMiwweDZkLDB4OWMsMHgwYiwweDQ0LDB4ZjcsMHgyZCwweDViLDB4YmYsMHg1ZCww eDJhLDB4MTEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyMjRfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NjAsMHg1MCwweDJi LDB4ZTcsMHg4NiwweGQ4LDB4MjYsMHg3MywweGUzLDB4MWQsMHg5NSwweDIwLAorKwkweGIzLDB4 MmMsMHgzMiwweDFjLDB4ZjUsMHhjZSwweDU3LDB4YTYsMHg2NywweDJiLDB4ZGMsMHg0ZSwKKysJ MHhkZCwweDExLDB4NGMsMHhjNAorKwl9OworKworKworKy8qIFNIQS0yMjQgTm8gUFIgICovCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2VudHJv cHlpbnB1dFtdID0KKysJeworKwkweGIyLDB4MWMsMHg3NywweDRkLDB4ZjYsMHhkMywweGI2LDB4 NDAsMHhiNywweDMwLDB4M2UsMHgyOSwKKysJMHhiMCwweDg1LDB4MWMsMHhiZSwweDRhLDB4ZWEs MHg2YiwweDVhLDB4YjUsMHg4YSwweDk3LDB4ZWIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfbm9uY2VbXSA9CisrCXsKKysJMHg0 MiwweDAyLDB4MGEsMHgxYywweDk4LDB4OWEsMHg3NywweDllLDB4OWYsMHg4MCwweGJhLDB4ZTAK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyMjRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4OTgsMHhiOCwweDA0LDB4 NDEsMHhmYywweGMxLDB4NWQsMHhjNSwweGU5LDB4YjksMHgwOCwweGRhLAorKwkweGY5LDB4ZmEs MHgwZCwweDkwLDB4Y2UsMHhkZiwweDFkLDB4MTAsMHhhOSwweDhkLDB4NTAsMHgwYworKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9h ZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg5YSwweDhkLDB4MzksMHg0OSwweDQyLDB4ZDUs MHgwYiwweGFlLDB4ZTEsMHhhZiwweGI3LDB4MDAsCisrCTB4MDIsMHhmYSwweDk2LDB4YjEsMHhh NSwweDFkLDB4MmQsMHgyNSwweDc4LDB4ZWUsMHg4MywweDNmCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2ludF9yZXR1cm5lZGJp dHNbXSA9CisrCXsKKysJMHhlNCwweGY1LDB4NTMsMHg3OSwweDVhLDB4OTcsMHg1OCwweDA2LDB4 MDgsMHhiYSwweDdiLDB4ZmEsCisrCTB4ZjAsMHg4MywweDA1LDB4OGMsMHgyMiwweGMwLDB4Yzks MHhkYiwweDE1LDB4ZTcsMHhkZSwweDIwLAorKwkweDU1LDB4MjIsMHg5YSwweGFkCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2Vu dHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDY3LDB4MDksMHg0OCwweGFhLDB4MDcsMHgx NiwweDk5LDB4ODksMHg3ZiwweDZkLDB4YTAsMHhlNSwKKysJMHg4ZiwweGRmLDB4YmMsMHhkYiww eGZlLDB4ZTUsMHg2YywweDdhLDB4OTUsMHg0YSwweDY2LDB4MTcKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfYWRkaXRpb25hbGlu cHV0cmVzZWVkW10gPQorKwl7CisrCTB4MGYsMHg0YiwweDFjLDB4NmYsMHhiNywweGUzLDB4NDcs MHhlNSwweDVkLDB4N2QsMHgzOCwweGQ2LAorKwkweDI4LDB4OWIsMHhlYiwweDU1LDB4NjMsMHgw OSwweDNlLDB4N2MsMHg1NiwweGVhLDB4ZjgsMHgxOQorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXQyW10g PQorKwl7CisrCTB4MmQsMHgyNiwweDdjLDB4MzcsMHhlNCwweDdhLDB4MjgsMHg1ZSwweDVhLDB4 M2MsMHhhZiwweDNkLAorKwkweDVhLDB4OGUsMHg1NSwweGEyLDB4MWEsMHg2ZSwweGMwLDB4ZTUs MHhmNiwweDIxLDB4ZDMsMHhmNgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg0ZCww eDgzLDB4MzUsMHhkZiwweDY3LDB4YTksMHhmYywweDE3LDB4ZGEsMHg3MCwweGNjLDB4OGIsCisr CTB4N2YsMHg3NywweGFlLDB4YTIsMHg1ZiwweGI5LDB4N2UsMHg3NCwweDRjLDB4MjYsMHhjMSww eDdhLAorKwkweDNiLDB4YTcsMHg1YywweDkzCisrCX07CisrCisrCisrLyogU0hBLTI1NiBQUiAg Ki8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZf cHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4Y2UsMHg0OSwweDAwLDB4N2EsMHg1NiwweGUz LDB4NjcsMHg4ZiwweGUxLDB4YjYsMHhhNywweGQ0LAorKwkweDRmLDB4MDgsMHg3YSwweDFiLDB4 MDEsMHhmNCwweGZhLDB4NmIsMHhlZiwweGI3LDB4ZTUsMHhlYiwKKysJMHgwNywweDNkLDB4MTEs MHgwZCwweGM4LDB4ZWEsMHgyYiwweGZlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX25vbmNlW10gPQorKwl7CisrCTB4NzMs MHg0MSwweGM4LDB4OTIsMHg5NCwweGUyLDB4YzUsMHg1ZiwweDkzLDB4ZmQsMHgzOSwweDVkLAor KwkweDJiLDB4OTEsMHg0ZCwweDM4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0K KysJeworKwkweDUwLDB4NmQsMHgwMSwweDAxLDB4MDcsMHg1YSwweDgwLDB4MzUsMHg3YSwweDU2 LDB4MWEsMHg1NiwKKysJMHgyZiwweDlhLDB4MGIsMHgzNSwweGIyLDB4YjEsMHhjOSwweGU1LDB4 Y2EsMHg2OSwweDYxLDB4NDgsCisrCTB4ZmYsMHhmYiwweDBmLDB4ZDksMHg0YiwweDc5LDB4MWQs MHhiYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgyMCwweGI4LDB4ZGYs MHg0NCwweDc3LDB4NWEsMHhiOCwweGQzLDB4YmYsMHhmNiwweGNmLDB4YWMsCisrCTB4NWUsMHhh NiwweDk2LDB4NjIsMHg3MywweDQ0LDB4NDAsMHg0YSwweDMwLDB4ZmIsMHgzOCwweGE1LAorKwkw eDdiLDB4MGQsMHhlNCwweDBkLDB4YzYsMHhlNCwweDlhLDB4MWYKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlu cHV0cHJbXSA9CisrCXsKKysJMHgwNCwweGM0LDB4NjUsMHhmNCwweGQzLDB4YmYsMHg4MywweDRi LDB4YWIsMHhjOCwweDQxLDB4YTgsCisrCTB4YzIsMHhlMCwweDQ0LDB4NjMsMHg3NywweDRjLDB4 NmYsMHg2YywweDQ5LDB4NDYsMHhmZiwweDk0LAorKwkweDE3LDB4ZWEsMHhlNiwweDFhLDB4OWQs MHg1ZSwweDY2LDB4NzgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyNTZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDA3 LDB4NGQsMHhhYywweDliLDB4ODYsMHhjYSwweDRhLDB4YWEsMHg2ZSwweDdhLDB4MDMsMHhhMiwK KysJMHg1ZCwweDEwLDB4ZWEsMHgwYiwweGY5LDB4ODMsMHhjYywweGQxLDB4ZmMsMHhlMiwweDA3 LDB4YzcsCisrCTB4MDYsMHgzNCwweDYwLDB4NmYsMHg4MywweDk0LDB4OTksMHg3NgorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9w cl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4ODksMHg0ZSwweDQ1LDB4OGMsMHgxMSww eGY5LDB4YmMsMHg1YiwweGFjLDB4NzQsMHg4YiwweDRiLAorKwkweDVmLDB4ZjcsMHgxOSwweGYz LDB4ZjUsMHgyNCwweDU0LDB4MTQsMHhkMSwweDE1LDB4YjEsMHg0MywKKysJMHgxMiwweGE0LDB4 NWYsMHhkNCwweGVjLDB4ZmMsMHhjZCwweDA5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByMltdID0K KysJeworKwkweDBlLDB4ZWIsMHgxZiwweGQ3LDB4ZmMsMHhkMSwweDlkLDB4ZDQsMHgwNSwweDM2 LDB4OGIsMHhiMiwKKysJMHhmYiwweGU0LDB4ZjQsMHg1MSwweDBjLDB4ODcsMHg5YiwweDAyLDB4 NDQsMHhkNSwweDkyLDB4NGQsCisrCTB4NDQsMHhmZSwweDFhLDB4MDMsMHg0MywweDU2LDB4YmQs MHg4NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTI1Nl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgwMiwweGFhLDB4YjYsMHgx ZCwweDdlLDB4MmEsMHg0MCwweDAzLDB4NjksMHgyZCwweDQ5LDB4YTMsCisrCTB4NDEsMHhlNyww eDQ0LDB4MGIsMHhhZiwweDdiLDB4ODUsMHhlNCwweDVmLDB4NTMsMHgzYiwweDY0LAorKwkweGJj LDB4ODksMHhjOCwweDgyLDB4ZDQsMHg3OCwweDM3LDB4YTIKKysJfTsKKysKKysKKysvKiBTSEEt MjU2IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTI1Nl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg1YiwweDFiLDB4ZWMsMHg0ZCww eGE5LDB4MzgsMHg3NCwweDVhLDB4MzQsMHgwYiwweDdiLDB4YzUsCisrCTB4ZTUsMHhkNywweDY2 LDB4N2MsMHhiYywweDgyLDB4YjksMHgwZSwweDJkLDB4MWYsMHg5MiwweGQ3LAorKwkweGMxLDB4 YmMsMHg2NywweDY5LDB4ZWMsMHg2YiwweDAzLDB4M2MKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfbm9uY2VbXSA9CisrCXsKKysJ MHhhNCwweDBjLDB4ZDgsMHg5YywweDYxLDB4ZDgsMHhjMywweDU0LDB4ZmUsMHg1MywweGM5LDB4 ZTUsCisrCTB4NWQsMHg2ZiwweDZkLDB4MzUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PQorKwl7CisrCTB4MjIsMHg1ZSwweDYyLDB4OTMsMHg0MiwweDgzLDB4NzgsMHgyNCwweGQ4LDB4 NDAsMHg4YywweGRlLAorKwkweDZmLDB4ZjksMHhhNCwweDdhLDB4YzUsMHhhNywweDNiLDB4ODgs MHhhMywweGVlLDB4NDIsMHgyMCwKKysJMHhmZCwweDYxLDB4NTYsMHhjNiwweDRjLDB4MTMsMHg0 MSwweDljCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweGJmLDB4NzQsMHg1Yiww eGY2LDB4YzUsMHg2NCwweDVlLDB4OTksMHgzNCwweDhmLDB4YmMsMHhhNCwKKysJMHhlMiwweGJk LDB4ZDgsMHg4NSwweDI2LDB4MzcsMHhlYSwweGJhLDB4NGYsMHhmMiwweDlhLDB4OWEsCisrCTB4 NjYsMHhmYywweGRmLDB4NjMsMHgyNiwweDI2LDB4MTksMHg4NworKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9pbnRfcmV0dXJuZWRi aXRzW10gPQorKwl7CisrCTB4YjMsMHhjNiwweDA3LDB4MDcsMHhkNiwweDc1LDB4ZjYsMHgyYiww eGQ2LDB4MjEsMHg5NiwweGYxLAorKwkweGFlLDB4ZGIsMHgyYiwweGFjLDB4MjUsMHgyYSwweGFl LDB4YWUsMHg0MSwweDcyLDB4MDMsMHg1ZSwKKysJMHhiZiwweGQzLDB4NjQsMHhiYywweDU5LDB4 ZjksMHhjMCwweDc2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjU2X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGJmLDB4 MjAsMHgzMywweDU2LDB4MjksMHhhOCwweDM3LDB4MDQsMHgxZiwweDc4LDB4MzQsMHgzZCwKKysJ MHg4MSwweDJhLDB4YzksMHg4NiwweGM2LDB4N2EsMHgyZiwweDg4LDB4NWUsMHhkNSwweGJlLDB4 MzQsCisrCTB4NDYsMHgyMCwweGE0LDB4MzUsMHhlYiwweGM3LDB4ZTIsMHg5ZAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRp dGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg5YiwweGFlLDB4MmQsMHgyZCwweDYxLDB4 YTQsMHg4OSwweGViLDB4NDMsMHg0NiwweGE3LDB4ZGEsCisrCTB4ZWYsMHg0MCwweGNhLDB4NGEs MHg5OSwweDExLDB4NDEsMHhkYywweDVjLDB4OTQsMHhlOSwweGFjLAorKwkweGQ0LDB4ZDAsMHhl NiwweGJkLDB4ZmIsMHgwMywweDljLDB4YTgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0MltdID0KKysJ eworKwkweDIzLDB4YWEsMHgwYywweGJkLDB4MjgsMHgzMywweGUyLDB4NTEsMHhmYywweDcxLDB4 ZDIsMHgxNSwKKysJMHgxZiwweDc2LDB4ZmQsMHgwZCwweGUwLDB4YjcsMHhiNSwweDg0LDB4NzUs MHg1YiwweGJlLDB4ZjMsCisrCTB4NWMsMHhjYSwweGM1LDB4MzAsMHhmMiwweDc1LDB4MWYsMHhk YQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTI1Nl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg5MCwweDNjLDB4YzEsMHgxMCwweDhj LDB4MTIsMHgwMSwweGM2LDB4YTYsMHgzYSwweDBmLDB4NGQsCisrCTB4YjYsMHgzYSwweDRmLDB4 NDEsMHg5YywweDYxLDB4NzUsMHg4NCwweGU5LDB4NzQsMHg3NSwweGZkLAorKwkweGZlLDB4ZjIs MHgxZiwweDQzLDB4ZDgsMHg1ZSwweDI0LDB4YTMKKysJfTsKKysKKysKKysvKiBTSEEtMzg0IFBS ICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4 NF9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg3MSwweDlkLDB4YjIsMHg1YSwweDcxLDB4 NmQsMHgwNCwweGU5LDB4MWUsMHhjNywweDkyLDB4MjQsCisrCTB4NmUsMHgxMiwweDMzLDB4YTks MHg1MiwweDY0LDB4MzEsMHhlZiwweDcxLDB4ZWIsMHgyMiwweDU1LAorKwkweDI4LDB4OTcsMHgw NiwweDZhLDB4YzAsMHgwYywweGEwLDB4N2UKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfbm9uY2VbXSA9CisrCXsKKysJMHhm NSwweDBkLDB4ZmEsMHhiMCwweGVjLDB4NmEsMHg3YywweGQ2LDB4YmQsMHg5YiwweDA1LDB4ZmQs CisrCTB4MzgsMHgzZSwweDJlLDB4NTYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PQorKwl7CisrCTB4NzQsMHhhYywweDdlLDB4NmQsMHhiMSwweGE0LDB4ZTcsMHgyMSwweGQxLDB4 MWUsMHg2ZSwweDk2LAorKwkweDZkLDB4NGQsMHg1MywweDQ2LDB4ODIsMHg5NiwweDZlLDB4Y2Ys MHhhYSwweDgxLDB4OGQsMHg3ZCwKKysJMHg5ZSwweGUxLDB4MGYsMHgxNSwweGVhLDB4NDEsMHhi ZiwweGUzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweGRhLDB4OTUsMHhk NCwweGQwLDB4YjgsMHgxMSwweGQzLDB4NDksMHgyNywweDVkLDB4YTksMHgzOSwKKysJMHg2OCww eGYzLDB4YTgsMHhlOSwweDVkLDB4MTksMHg4YSwweDJiLDB4NjYsMHhlOCwweDY5LDB4MDYsCisr CTB4N2MsMHg5ZSwweDAzLDB4YTEsMHg4YiwweDI2LDB4MmQsMHg2ZQorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5 aW5wdXRwcltdID0KKysJeworKwkweDQ5LDB4ZGYsMHg0NCwweDAwLDB4ZTQsMHgxYywweDc1LDB4 MGIsMHgyNiwweDVhLDB4NTksMHg2NCwKKysJMHgxZiwweDRlLDB4YjEsMHhiMiwweDEzLDB4ZjEs MHgyMiwweDRlLDB4YjQsMHg2ZCwweDlhLDB4Y2MsCisrCTB4YTAsMHg0OCwweGU2LDB4Y2YsMHgx ZCwweGQxLDB4OTIsMHgwZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4 YzgsMHg1MiwweGFlLDB4YmYsMHgwNCwweDNjLDB4MjcsMHhiNywweDc4LDB4MTgsMHhhYSwweDhm LAorKwkweGZmLDB4Y2YsMHhhNCwweGYxLDB4Y2MsMHhlNywweDY4LDB4ZmEsMHgyMiwweGEyLDB4 MTMsMHg0NSwKKysJMHhlOCwweGRkLDB4ODcsMHhlNiwweGYyLDB4NmUsMHhkZCwweGM3LDB4NTIs MHg5MCwweDlmLDB4N2IsCisrCTB4ZmEsMHg2MSwweDJkLDB4OWQsMHg5ZSwweGNmLDB4OTgsMHhh YywweDUyLDB4NDAsMHhjZSwweGFmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsK KysJMHg2MSwweDdjLDB4MDMsMHg5YSwweDNlLDB4NTAsMHg1NywweDYwLDB4YzUsMHg4MywweGM5 LDB4YjIsCisrCTB4ZDEsMHg4NywweDg1LDB4NjYsMHg5MiwweDVkLDB4ODQsMHgwZSwweDUzLDB4 ZmIsMHg3MCwweDAzLAorKwkweDcyLDB4ZmQsMHhiYSwweGFlLDB4OWMsMHg4ZiwweGY4LDB4MTgK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEzODRfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4ZjgsMHhlYiwweDg5LDB4YjEs MHg4ZCwweDc4LDB4YmUsMHgyMSwweGUwLDB4YmIsMHg5ZCwweGI3LAorKwkweDk1LDB4MGUsMHhk OSwweDQ2LDB4MGMsMHg4YywweGUyLDB4NjMsMHhiNywweDlkLDB4NjcsMHg5MCwKKysJMHhiZCww eGM3LDB4MGIsMHhhNSwweGNlLDB4YjIsMHg2NSwweDgxCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX3JldHVybmVkYml0c1td ID0KKysJeworKwkweGU2LDB4OWYsMHhmZSwweDY4LDB4ZDYsMHhiNSwweDc5LDB4ZjEsMHgwNiww eDVmLDB4YTMsMHhiYiwKKysJMHgyMywweDg1LDB4ZDgsMHhmMCwweDI5LDB4NWEsMHg2OCwweDll LDB4ZjUsMHhmNCwweGE2LDB4MTIsCisrCTB4ZTAsMHg5YSwweGUyLDB4YWMsMHgwMCwweDFkLDB4 OTgsMHgyNiwweGZjLDB4NTMsMHg5NSwweDUzLAorKwkweGU0LDB4M2UsMHgxNywweGQ1LDB4MDgs MHgwYiwweDcwLDB4M2QsMHg2NywweDk5LDB4YWMsMHg2NgorKwl9OworKworKworKy8qIFNIQS0z ODQgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMzg0X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDA3LDB4MTUsMHgyNywweDJhLDB4 YWYsMHg3NCwweDI0LDB4MzcsMHhiYywweGQ1LDB4MTQsMHg2OSwKKysJMHhjZSwweDExLDB4ZmYs MHhhMiwweDZiLDB4YjgsMHgwNSwweDY3LDB4MzQsMHhmOCwweGJkLDB4NmQsCisrCTB4NmEsMHhj YywweGNkLDB4NjAsMHhhMywweDY4LDB4Y2EsMHhmNAorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9ub25jZVtdID0KKysJeworKwkw eDcwLDB4MTcsMHhjMiwweDViLDB4NWQsMHgyMiwweDBiLDB4MDYsMHgxNSwweDU0LDB4NzgsMHg3 NywKKysJMHg0NCwweGFmLDB4MmYsMHgwOQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9 CisrCXsKKysJMHg4OSwweDM5LDB4MjgsMHhiMCwweDYwLDB4ZWIsMHgzZCwweGRjLDB4NTUsMHg3 NSwweDg2LDB4ZWIsCisrCTB4YWUsMHhhMiwweDhmLDB4YmMsMHgxYiwweDc1LDB4ZDQsMHhlMSww eDBmLDB4YWEsMHgzOCwweGNhLAorKwkweDYyLDB4OGIsMHhjYiwweDJjLDB4MjYsMHhmNiwweGJj LDB4YjEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEzODRfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4MzAsMHgyYiwweDQyLDB4 MzUsMHhlZiwweGRhLDB4NDAsMHg1NSwweDI4LDB4YzYsMHg5NSwweGZiLAorKwkweDU0LDB4MDEs MHg2MiwweGQ3LDB4ODcsMHgxNCwweDQ4LDB4NmQsMHg5MCwweDRjLDB4YTksMHgwMiwKKysJMHg1 NCwweDQwLDB4MjIsMHhjOCwweDY2LDB4YTUsMHg0OCwweDQ4CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2ludF9yZXR1cm5lZGJp dHNbXSA9CisrCXsKKysJMHg4MiwweGM0LDB4YTEsMHg5YywweDIxLDB4ZDIsMHhlNywweGE1LDB4 YTYsMHhmNiwweDVmLDB4MDQsCisrCTB4NWMsMHhjNywweDMxLDB4OWQsMHg4ZCwweDU5LDB4NzQs MHg1MCwweDE5LDB4ODksMHgyZiwweDYzLAorKwkweGQ1LDB4YjcsMHg3ZSwweGViLDB4MTUsMHhl MywweDcwLDB4ODMsMHhhMSwweDI0LDB4NTksMHhmYSwKKysJMHgyYywweDU2LDB4ZjYsMHg4OCww eDNhLDB4OTIsMHg5MywweGExLDB4ZmIsMHg3OSwweGMxLDB4N2EKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfZW50cm9weWlucHV0 cmVzZWVkW10gPQorKwl7CisrCTB4MzksMHhhNiwweGU4LDB4NWMsMHg4MiwweDE3LDB4NzEsMHgy NiwweDU3LDB4NGYsMHg5ZiwweGMyLAorKwkweDU1LDB4ZmYsMHg1YywweDliLDB4NTMsMHgxYSww eGQxLDB4NWYsMHhiYywweDYyLDB4ZTQsMHgyNywKKysJMHgyZCwweDMyLDB4ZjAsMHhlNCwweDUy LDB4OGMsMHhjNSwweDBjCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkw eDhkLDB4Y2IsMHg4ZCwweGNlLDB4MDgsMHhlYSwweDgwLDB4ZTgsMHg5YiwweDYxLDB4YTgsMHgw ZiwKKysJMHhhZiwweDQ5LDB4MjAsMHg5ZSwweDc0LDB4Y2IsMHg1NywweDgwLDB4NDIsMHhiMCww eDg0LDB4NWUsCisrCTB4MzAsMHgyYSwweDY3LDB4MDgsMHhmNCwweGUzLDB4NDAsMHgyMgorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4 NF9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4N2MsMHg4ZiwweGMyLDB4YWUsMHgyMiww eDRhLDB4ZDYsMHhmNiwweDA1LDB4YTQsMHg3YSwweGVhLAorKwkweGJiLDB4MjUsMHhkMCwweGI3 LDB4NWEsMHhkNiwweGNmLDB4OWQsMHhmMywweDZjLDB4ZTIsMHhiMiwKKysJMHg0ZSwweGI0LDB4 YmQsMHhmNCwweGU1LDB4NDAsMHg4MCwweDk0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3JldHVybmVkYml0c1tdID0KKysJewor KwkweDllLDB4N2UsMHhmYiwweDU5LDB4YmIsMHhhYSwweDNjLDB4ZjcsMHhlMSwweGY4LDB4NzYs MHhkZCwKKysJMHg2MywweDVmLDB4YWYsMHgyMywweGQ2LDB4NjQsMHg2MSwweGMwLDB4OWEsMHgw OSwweDQ3LDB4YzksCisrCTB4MzMsMHhkZiwweDZkLDB4NTUsMHg5MSwweDM0LDB4NzksMHg3MCww eGM0LDB4OTksMHg2ZSwweDU0LAorKwkweDA5LDB4NjQsMHgyMSwweDFhLDB4YmQsMHgxZSwweDgw LDB4NDAsMHgzNCwweGFkLDB4ZmEsMHhkNworKwl9OworKworKworKy8qIFNIQS01MTIgUFIgICov CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3By X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDEzLDB4ZjcsMHg2MSwweDc1LDB4NjUsMHgyOCww eGEyLDB4NTksMHgxMywweDVhLDB4NGEsMHg0ZiwKKysJMHg1NiwweDYwLDB4OGMsMHg1MywweDdk LDB4YjAsMHhiZCwweDA2LDB4NGYsMHhlZCwweGNjLDB4ZDIsCisrCTB4YTIsMHhiNSwweGZkLDB4 NWIsMHgzYSwweGFiLDB4ZWMsMHgyOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9ub25jZVtdID0KKysJeworKwkweGJlLDB4 YTMsMHg5MSwweDkzLDB4MWQsMHhjMywweDMxLDB4M2EsMHgyMywweDMzLDB4NTAsMHg2NywKKysJ MHg4OCwweGM3LDB4YTIsMHhjNAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Cisr CXsKKysJMHgxZiwweDU5LDB4NGQsMHg3YiwweGU2LDB4NDYsMHg5MSwweDQ4LDB4YzEsMHgyNSww eGZhLDB4ZmYsCisrCTB4ODksMHgxMiwweDc3LDB4MzUsMHhkZiwweDNlLDB4ZjQsMHg4MCwweDVm LDB4ZDksMHhiMCwweDA3LAorKwkweDIyLDB4NDEsMHhkZCwweDQ4LDB4NzgsMHg2YiwweDc3LDB4 MmIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4MzAsMHhmZiwweDYzLDB4 NmYsMHhhYywweGQ5LDB4ODQsMHgzOSwweDZmLDB4ZTQsMHg5OSwweGNlLAorKwkweDkxLDB4N2Qs MHg3ZSwweGM4LDB4NTgsMHhmMiwweDEyLDB4YzMsMHhiNiwweGFkLDB4ZGEsMHgyMiwKKysJMHgw NCwweGEwLDB4ZDIsMHgyMSwweGZlLDB4ZjIsMHg5NSwweDFkCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1 dHByW10gPQorKwl7CisrCTB4NjQsMHg1NCwweDEzLDB4ZWMsMHg0ZiwweDc3LDB4ZGEsMHhiMiww eDkyLDB4MmUsMHg1MiwweDgwLAorKwkweDExLDB4MTAsMHhjMiwweGY4LDB4ZTYsMHhhNywweGNk LDB4NGIsMHhmYywweDMyLDB4MmUsMHg5ZSwKKysJMHhlYiwweGJiLDB4YjEsMHhiZiwweDE1LDB4 NWMsMHg3MywweDA4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhNTEyX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhlZiww eDFlLDB4ZGMsMHgwYSwweGE0LDB4MzYsMHg5MSwweDljLDB4M2QsMHgyNywweDk3LDB4NTAsCisr CTB4OGQsMHgzNiwweDI5LDB4OGQsMHhjZSwweDZhLDB4MGMsMHhmNywweDIxLDB4YzAsMHg5MSww eGFlLAorKwkweDBjLDB4OTYsMHg3MiwweGJkLDB4NTIsMHg4MSwweDU4LDB4ZmMsMHg2ZCwweGU1 LDB4ZjcsMHhhNSwKKysJMHhmZCwweDVkLDB4YTcsMHg1OCwweDY4LDB4YzgsMHg5OSwweDU4LDB4 OGUsMHhjOCwweGNlLDB4OTUsCisrCTB4MDEsMHg3ZCwweGZmLDB4YTQsMHhjOCwweGY3LDB4NjMs MHhmZSwweDVmLDB4NjksMHg4MywweDUzLAorKwkweGUyLDB4YzYsMHg4YiwweGMzCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3By X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhlNiwweDliLDB4YzQsMHg4OCwweDM0LDB4 Y2EsMHhlYSwweDI5LDB4MmYsMHg5OCwweDA1LDB4YTQsCisrCTB4ZDMsMHhjMCwweDdiLDB4MTEs MHhlOCwweGJiLDB4NzUsMHhmMiwweGJkLDB4MjksMHhiNywweDQwLAorKwkweDI1LDB4N2YsMHhj MSwweGI3LDB4YjEsMHhmMSwweDI1LDB4NjEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHIyW10gPQor Kwl7CisrCTB4MjMsMHg2ZCwweGZmLDB4ZGUsMHhmYiwweGQxLDB4YmEsMHgzMywweDE4LDB4ZTYs MHhiZSwweGI1LAorKwkweDQ4LDB4NzcsMHg2ZCwweDdmLDB4YTcsMHhlMSwweDRkLDB4NDgsMHgx ZSwweDNjLDB4YTcsMHgzNCwKKysJMHgxYSwweGM4LDB4NjAsMHhkYiwweDhmLDB4OTksMHgxNSww eDk5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhNTEyX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDcwLDB4MjcsMHgzMSwweGRi LDB4OTIsMHg3MCwweDIxLDB4ZmUsMHgxNiwweGI2LDB4YzgsMHg1MSwKKysJMHgzNCwweDg3LDB4 NjUsMHhkMCwweDRlLDB4ZmQsMHhmZSwweDY4LDB4ZWMsMHhhYywweGRjLDB4OTMsCisrCTB4NDEs MHgzOCwweDkyLDB4OTAsMHhiNCwweDk0LDB4ZjksMHgwZCwweGE0LDB4ZjcsMHg0ZSwweDgwLAor KwkweDkyLDB4NjcsMHg0OCwweDQwLDB4YTcsMHgwOCwweGM3LDB4YmMsMHg2NiwweDAwLDB4ZmQs MHhmNywKKysJMHg0YywweDhiLDB4MTcsMHg2ZSwweGQxLDB4OGYsMHg5YiwweGYzLDB4NmYsMHhm NiwweDM0LDB4ZGQsCisrCTB4NjcsMHhmNywweDY4LDB4ZGQKKysJfTsKKysKKysKKysvKiBTSEEt NTEyIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTUxMl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhiNiwweDBiLDB4YjcsMHhiYyww eDg0LDB4NTYsMHhmNiwweDEyLDB4YWYsMHg0NSwweDY3LDB4MTcsCisrCTB4N2MsMHhkMSwweGIy LDB4NzgsMHgyYiwweGEwLDB4ZjIsMHhiZSwweGI2LDB4NmQsMHg4YiwweDU2LAorKwkweGM2LDB4 YmMsMHg0ZCwweGUxLDB4ZjcsMHhiZSwweGNlLDB4YmQKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfbm9uY2VbXSA9CisrCXsKKysJ MHg5ZCwweGVkLDB4YzAsMHhlNSwweDVhLDB4OTgsMHg2YSwweGNiLDB4NTEsMHg3ZCwweDc2LDB4 MzEsCisrCTB4NWEsMHg2NCwweGYwLDB4ZjcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PQorKwl7CisrCTB4YzIsMHg2ZCwweGEzLDB4YzMsMHgwNiwweDc0LDB4ZTUsMHgwMSwweDVjLDB4 MTAsMHgxNywweGM3LAorKwkweGFmLDB4ODMsMHg5ZCwweDU5LDB4OGQsMHgyZCwweDI5LDB4Mzgs MHhjNSwweDU5LDB4NzAsMHg4YiwKKysJMHg0NiwweDQ4LDB4MmQsMHhjZiwweDM2LDB4N2QsMHg1 OSwweGMwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweGVjLDB4OGMsMHhkNCww eGY3LDB4NjEsMHg2ZSwweDBkLDB4OTUsMHg3OSwweGI3LDB4MjgsMHhhZCwKKysJMHg1ZiwweDY5 LDB4NzQsMHg1ZiwweDJkLDB4MzYsMHgwNiwweDhhLDB4NmIsMHhhYywweDU0LDB4OTcsCisrCTB4 YzQsMHhhMSwweDEyLDB4ODUsMHgwYSwweGRmLDB4NGIsMHgzNAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9pbnRfcmV0dXJuZWRi aXRzW10gPQorKwl7CisrCTB4ODQsMHgyZiwweDFmLDB4NjgsMHg2YSwweGEzLDB4YWQsMHgxZSww eGZiLDB4ZjQsMHgxNSwweGJkLAorKwkweGRlLDB4MzgsMHhkNCwweDMwLDB4ODAsMHg1MSwweGU5 LDB4ZDMsMHhjNywweDIwLDB4ODgsMHhlOSwKKysJMHhmNSwweGNjLDB4ZGYsMHg1NywweDVjLDB4 NDcsMHgyZiwweDU3LDB4M2MsMHg1ZiwweDEzLDB4NTYsCisrCTB4Y2MsMHhjNSwweDRmLDB4ODQs MHhmOCwweDEwLDB4NDEsMHhkNSwweDdlLDB4NTgsMHg2ZSwweDE5LAorKwkweDE5LDB4OWUsMHhh ZiwweGMyLDB4MjIsMHg1OCwweDQxLDB4NTAsMHg3OSwweGMyLDB4ZDgsMHgwNCwKKysJMHgyOCww eGQ0LDB4MzksMHg5YQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTUxMl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHhmYSww eDdmLDB4NDYsMHg1MSwweDgzLDB4NjIsMHg5OCwweDE2LDB4OWEsMHgxOSwweGEyLDB4NDksCisr CTB4YTksMHhlNiwweDRhLDB4ZDgsMHg4NSwweGU3LDB4ZDQsMHgzYiwweDJjLDB4ODIsMHhjNSww eDgyLAorKwkweGJmLDB4MTEsMHhmOSwweDllLDB4YmMsMHhkMCwweDAxLDB4ZWUKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRk aXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4YjksMHgxMiwweGUwLDB4NGYsMHhmNyww eGE3LDB4YzQsMHhkOCwweGQwLDB4OGUsMHg5OSwweDI5LAorKwkweDdjLDB4OWEsMHhlOSwweGNm LDB4YzQsMHg2YywweGY4LDB4YzMsMHhhNywweDQxLDB4ODMsMHhkNiwKKysJMHgyZSwweGZhLDB4 YjgsMHg1ZSwweDhlLDB4NmIsMHg3OCwweDIwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9Cisr CXsKKysJMHhkNywweDA3LDB4NTIsMHhiOSwweDgzLDB4MmMsMHgwMywweDcxLDB4ZWUsMHhjOSww eGMwLDB4ODUsCisrCTB4ZTEsMHg1NywweGIyLDB4Y2QsMHgzYSwweGYwLDB4YzksMHgzNCwweDI0 LDB4NDEsMHgxYywweDQyLAorKwkweDk5LDB4YjIsMHg4NCwweGU5LDB4MTcsMHhkMiwweDc2LDB4 OTIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGE1MTJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MzYsMHgxNywweDVkLDB4OTgsMHgy YiwweDY1LDB4MjUsMHg4ZSwweGM4LDB4MjksMHhkZiwweDI3LAorKwkweDA1LDB4MzYsMHgyNiww eDEyLDB4OGEsMHg2OCwweDc0LDB4MjcsMHgzNywweGQ0LDB4N2YsMHgzMiwKKysJMHhiMSwweDEy LDB4ZDYsMHg4NSwweDgzLDB4ZWIsMHgyZSwweGEwLDB4ZWQsMHg0YiwweGI1LDB4N2IsCisrCTB4 NmYsMHgzOSwweDNjLDB4NzEsMHg3NywweDAyLDB4MTIsMHhjYywweDJjLDB4M2EsMHg4ZSwweDYz LAorKwkweGRmLDB4NGEsMHhiZCwweDZmLDB4NmUsMHgyZSwweGVkLDB4MGEsMHg4NSwweGE1LDB4 MmYsMHhhMiwKKysJMHg2OCwweGRlLDB4NDIsMHhiNQorKwl9OworKworKworKy8qIEhNQUMgU0hB LTEgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGExX3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDI2LDB4NWYsMHgzNiwweDE0 LDB4ZmYsMHgzZCwweDgzLDB4ZmEsMHg3MywweDVlLDB4NzUsMHhkYywKKysJMHgyYywweDE4LDB4 MTcsMHgxYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMV9wcl9ub25jZVtdID0KKysJeworKwkweGM4LDB4ZTMsMHg1NywweGE1 LDB4N2IsMHg3NCwweDg2LDB4NmUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PQorKwl7CisrCTB4NmUsMHhkYiwweDBkLDB4ZmUsMHg3ZCwweGFjLDB4NzksMHhkMCwweGE1LDB4 M2EsMHg0OCwweDg1LAorKwkweDgwLDB4ZTIsMHg3ZiwweDJhCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2FkZGl0aW9u YWxpbnB1dFtdID0KKysJeworKwkweDMxLDB4Y2QsMHg1ZSwweDQzLDB4ZGMsMHhmYiwweDdhLDB4 NzksMHhjYSwweDg4LDB4ZGUsMHgxZiwKKysJMHhkNywweGJiLDB4NDIsMHgwOQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9w cl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDdjLDB4MjMsMHg5NSwweDM4LDB4MDAsMHg5 NSwweGMxLDB4NzgsMHgxZiwweDhmLDB4ZDcsMHg2MywKKysJMHgyMywweDg3LDB4MmEsMHhlZAor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMV9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YmIsMHgzNCwweGU3LDB4 OTMsMHhhMywweDAyLDB4MmMsMHg0YSwweGQwLDB4ODksMHhkYSwweDdmLAorKwkweGVkLDB4ZjQs MHg0YywweGRlLDB4MTcsMHhlYywweGU1LDB4NmMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfYWRkaXRpb25hbGlucHV0 MltdID0KKysJeworKwkweDQ5LDB4YmMsMHgyZCwweDJjLDB4YjcsMHgzMiwweGNiLDB4MjAsMHhk ZiwweGY1LDB4NzcsMHg1OCwKKysJMHhhMCwweDRiLDB4OTMsMHg2ZQorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRy b3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHgzYywweGFhLDB4YjAsMHgyMSwweDQyLDB4YjAsMHhk ZCwweDM0LDB4ZjAsMHgxNiwweDdmLDB4MGMsCisrCTB4MGYsMHhmZiwweDJlLDB4YWYKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTFfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4OGUsMHhjYiwweGEzLDB4NjQsMHhiMiww eGI4LDB4MzMsMHg2YywweDY0LDB4M2IsMHg3OCwweDE2LAorKwkweDk5LDB4MzUsMHhjOCwweDMw LDB4Y2IsMHgzZSwweGEwLDB4ZDgKKysJfTsKKysKKysKKysvKiBITUFDIFNIQS0xIE5vIFBSICAq LworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MV9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgzMiwweDlhLDB4MmEsMHg4NywweDdiLDB4ODks MHg3YywweGY2LDB4Y2IsMHg5NSwweGQ1LDB4NDAsCisrCTB4MTcsMHhmZSwweDQ3LDB4NzAKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTFfbm9uY2VbXSA9CisrCXsKKysJMHgxNiwweGQ4LDB4ZTAsMHhjNywweDUyLDB4Y2YsMHg0 YSwweDI1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGExX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDM1LDB4 MzUsMHhhOSwweGE1LDB4NDAsMHhiZSwweDliLDB4ZDEsMHg1NiwweGRkLDB4NDQsMHgwMCwKKysJ MHg3MiwweGY3LDB4ZDMsMHg1ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJ MHgxYiwweDJjLDB4ODQsMHgyZCwweDRhLDB4ODksMHg4ZiwweDY5LDB4MTksMHhmMSwweGYzLDB4 ZGIsCisrCTB4YmIsMHhlMywweGFhLDB4ZWEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfaW50X3JldHVybmVkYml0c1tdID0K KysJeworKwkweGNmLDB4ZmEsMHg3ZCwweDcyLDB4MGYsMHhlNiwweGM3LDB4OTYsMHhhMCwweDY5 LDB4MzEsMHgxMSwKKysJMHg5YiwweDBiLDB4MWEsMHgyMCwweDFmLDB4M2YsMHhhYSwweGQxCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGExX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDkwLDB4NzUsMHgxNSwweDA0 LDB4OTUsMHhmMSwweGJhLDB4ODEsMHgwYywweDM3LDB4OTQsMHg2ZiwKKysJMHg4NiwweDUyLDB4 NmQsMHg5YworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg1Yiww eDQwLDB4YmEsMHg1ZiwweDE3LDB4NzAsMHhmMCwweDRiLDB4ZGYsMHhjOSwweDk3LDB4OTIsCisr CTB4NzksMHhjNSwweDgyLDB4MjgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25hbGlucHV0MltdID0KKysJewor KwkweDk3LDB4YzgsMHg4MCwweDkwLDB4YjMsMHhhYSwweDZlLDB4NjAsMHhlYSwweDgzLDB4N2Es MHhlMywKKysJMHg4YSwweGNhLDB4YTQsMHg3ZgorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9yZXR1cm5lZGJpdHNbXSA9Cisr CXsKKysJMHg5MCwweGJkLDB4MDUsMHg1NiwweDZkLDB4YjUsMHgyMiwweGQ1LDB4YjksMHg1YSww eDI5LDB4MmQsCisrCTB4ZTksMHgwYiwweGUxLDB4YWMsMHhkZSwweDI3LDB4MGIsMHhiMAorKwl9 OworKworKworKy8qIEhNQUMgU0hBLTIyNCBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRbXSA9Cisr CXsKKysJMHgxNywweDMyLDB4MmIsMHgyZSwweDZmLDB4MWIsMHg5YywweDZkLDB4MzEsMHhlMCww eDM0LDB4MDcsCisrCTB4Y2YsMHhlZCwweGY2LDB4YjYsMHg1YSwweDc2LDB4NGMsMHhiYywweDYy LDB4ODUsMHgwMSwweDkwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfbm9uY2VbXSA9CisrCXsKKysJMHgzOCwweGJm LDB4NWYsMHgyMCwweGIzLDB4NjgsMHgyZiwweDQzLDB4NjEsMHgwNSwweDhmLDB4MjMKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTIyNF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhjMCwweGM5LDB4NDUs MHhhYywweDhkLDB4MjcsMHg3NywweDA4LDB4MGIsMHgxNywweDZkLDB4ZWQsCisrCTB4YzEsMHg3 ZCwweGQ1LDB4MDcsMHg5ZCwweDZlLDB4ZjgsMHgyMywweDJhLDB4MjIsMHgxMywweGJkCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyMjRfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4YTQsMHgzYywweGU3LDB4M2Is MHhlYSwweDE5LDB4NDUsMHgzMiwweGMyLDB4ODMsMHg2ZCwweDIxLAorKwkweDhhLDB4YzAsMHhl ZSwweDY3LDB4NDUsMHhkZSwweDEzLDB4N2QsMHg5ZCwweDYxLDB4MDAsMHgzYgorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0 X3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4MTUsMHgwNSwweDc0LDB4NGEsMHg3Ziww eDhkLDB4NWMsMHg2MCwweDE2LDB4ZTUsMHg3YiwweGFkLAorKwkweGY1LDB4NDEsMHg4ZiwweDU1 LDB4NjAsMHhjNCwweDA5LDB4ZWUsMHgxZSwweDExLDB4ODEsMHhhYgorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2lu dF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg2ZiwweGY1LDB4OWEsMHhlMiwweDU0LDB4NTMs MHgzMCwweDNkLDB4NWEsMHgyNywweDI5LDB4MzgsCisrCTB4MjcsMHhmMiwweDBkLDB4MDUsMHhl OSwweDI2LDB4Y2IsMHgxNiwweGMzLDB4NTEsMHg1ZiwweDEzLAorKwkweDQxLDB4ZmUsMHg5OSww eGYyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDczLDB4ODEs MHg4OCwweDg0LDB4OGYsMHhlZCwweDZmLDB4MTAsMHg5ZiwweDkzLDB4YmYsMHgxNywKKysJMHgz NSwweDdjLDB4ZWYsMHhkNSwweDhkLDB4MjYsMHhhNiwweDdhLDB4ZTgsMHgwOSwweDM2LDB4NGYK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHhlNiwweGNmLDB4Y2Ys MHg3ZSwweDEyLDB4ZTUsMHg0MywweGQyLDB4MzgsMHhkOCwweDI0LDB4NmYsCisrCTB4NWEsMHgz NywweDY4LDB4YmYsMHg0ZiwweGEwLDB4ZmYsMHhkNSwweDYxLDB4OGEsMHg5MywweGUwCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyMjRfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YWYsMHhmOSwweGQ4LDB4MTksMHg5 MSwweDMwLDB4ODIsMHg2ZiwweGE5LDB4MWUsMHg5ZCwweGQ3LAorKwkweGYzLDB4NTAsMHhlMCww eGM3LDB4ZDUsMHg2NCwweDk2LDB4N2QsMHg0YywweDRkLDB4NzgsMHgwMywKKysJMHg2ZCwweGQ4 LDB4OWUsMHg3MgorKwl9OworKworKworKy8qIEhNQUMgU0hBLTIyNCBObyBQUiAgKi8KKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9lbnRy b3B5aW5wdXRbXSA9CisrCXsKKysJMHgxMSwweDgyLDB4ZmQsMHhkOSwweDQyLDB4ZjQsMHhmYSww eGM4LDB4ZjIsMHg0MSwweGU2LDB4NTQsCisrCTB4MDEsMHhhZSwweDIyLDB4NmUsMHhjNiwweGFm LDB4YWYsMHhkMCwweGE2LDB4YjIsMHhlMiwweDZkCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfbm9uY2VbXSA9CisrCXsK KysJMHhhOSwweDQ4LDB4ZDcsMHg5MiwweDM5LDB4N2UsMHgyYSwweGRjLDB4MzAsMHgxZiwweDBl LDB4MmIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTIyNF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHgxMSww eGQ1LDB4ZjQsMHhiZCwweDY3LDB4OGMsMHgzMSwweGNmLDB4YTMsMHgzZiwweDFlLDB4NmIsCisr CTB4YTgsMHgwNywweDAyLDB4MGIsMHhjOCwweDJlLDB4NmMsMHg2NCwweDQxLDB4NWIsMHhjOCww eDM3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyMjRfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4NjgsMHgxOCwweGMy LDB4MDYsMHhlYiwweDNlLDB4MDQsMHg5NSwweDQ0LDB4NWUsMHhmYiwweGU2LAorKwkweDQxLDB4 YzEsMHg1YywweGNjLDB4NDAsMHgyZiwweGI3LDB4ZDIsMHgwZiwweGYzLDB4NmIsMHhlNworKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjI0X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg3ZiwweDQ1LDB4YzcsMHg1ZCww eDMyLDB4ZTYsMHgxNywweDYwLDB4YmEsMHhkYywweGI4LDB4NDIsCisrCTB4MWIsMHg5YywweGYx LDB4ZmEsMHgzYiwweDRkLDB4MjksMHg1NCwweGM2LDB4OTAsMHhmZiwweDVjLAorKwkweGNkLDB4 ZDYsMHhhOSwweGNjCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4 YzQsMHg4ZSwweDM3LDB4OTUsMHg2OSwweDUzLDB4MjgsMHhkNywweDM3LDB4YmIsMHg3MCwweDk1 LAorKwkweDFjLDB4MDcsMHgxZCwweGQ5LDB4YjcsMHhlNiwweDFiLDB4YmIsMHhmZSwweDQxLDB4 ZWIsMHhjOQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDUz LDB4MTcsMHhhMSwweDZhLDB4ZmEsMHg3NywweDQ3LDB4YjAsMHg5NSwweDU2LDB4OWEsMHgyMCwK KysJMHg1NywweGRlLDB4NWMsMHg4OSwweDlmLDB4N2YsMHhlMiwweGRlLDB4MTcsMHgzYSwweDUw LDB4MjMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4M2EsMHgzMiww eGY5LDB4ODUsMHgwYywweGMxLDB4ZWQsMHg3NiwweDJkLDB4ZGYsMHg0MCwweGMzLAorKwkweDA2 LDB4MjIsMHg2NiwweGQ0LDB4OWEsMHg5YSwweGZmLDB4NWEsMHg3ZSwweDdhLDB4ZjMsMHg5Ngor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMjI0X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDQzLDB4YjQsMHg1NywweDVjLDB4 MzgsMHgyNSwweDlkLDB4YWUsMHhlYywweDk2LDB4ZDEsMHg4NSwKKysJMHgzYSwweDg0LDB4OGQs MHhmZSwweDY4LDB4ZDUsMHgwZSwweDVjLDB4OGYsMHg2NSwweGE1LDB4NGUsCisrCTB4NDUsMHg4 NCwweGE4LDB4OTQKKysJfTsKKysKKysKKysvKiBITUFDIFNIQS0yNTYgUFIgICovCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50 cm9weWlucHV0W10gPQorKwl7CisrCTB4NGQsMHhiMCwweDQzLDB4ZDgsMHgzNCwweDRiLDB4MTAs MHg3MCwweGIxLDB4OGIsMHhlZCwweGVhLAorKwkweDA3LDB4OTIsMHg5ZiwweDZjLDB4NzksMHgz MSwweGFmLDB4ODEsMHgyOSwweGViLDB4NmUsMHhjYSwKKysJMHgzMiwweDQ4LDB4MjgsMHhlNyww eDAyLDB4NWQsMHhhNiwweGE2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHgzYSww eGFlLDB4MTUsMHhhOSwweDk5LDB4ZGMsMHhlNCwweDY3LDB4MzQsMHgzYiwweDcwLDB4MTUsCisr CTB4YWEsMHhkMywweDMwLDB4OWEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9CisrCXsKKysJMHgxMywweDFkLDB4MjQsMHgwNCwweGIwLDB4MTgsMHg4MSwweDE1LDB4MjEs MHg1MSwweDJhLDB4MjQsCisrCTB4NTIsMHg2MSwweGJlLDB4NjQsMHg4MiwweDZiLDB4NTUsMHgy ZiwweGUyLDB4ZjEsMHg0MCwweDdkLAorKwkweDcxLDB4ZDgsMHgwMSwweDg2LDB4MTUsMHhiNyww eDhiLDB4YjUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg4Ziww eGE2LDB4NTQsMHg1ZiwweGIxLDB4ZDAsMHhkOCwweGMzLDB4ZTcsMHgwYywweDE1LDB4YTksCisr CTB4MjMsMHg2ZSwweGZlLDB4ZmIsMHg5MywweGY3LDB4M2EsMHhiZCwweDU5LDB4MDEsMHhmYSww eDE4LAorKwkweDhlLDB4ZTksMHgxYSwweGE5LDB4NzgsMHhmYywweDc5LDB4MGIKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1 Nl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweGNmLDB4MjQsMHhiOSwweGViLDB4YjMs MHhkNCwweGNkLDB4MTcsMHgzNywweDM4LDB4NzUsMHg3OSwKKysJMHgxNSwweGNiLDB4MmQsMHg3 NSwweDUxLDB4ZjEsMHhjYywweGFhLDB4MzIsMHhhNCwweGE3LDB4MzYsCisrCTB4N2MsMHg1Yyww eGU0LDB4NDcsMHhmMSwweDNlLDB4MWQsMHhlNQorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2ludF9yZXR1cm5lZGJp dHNbXSA9CisrCXsKKysJMHg1MiwweDQyLDB4ZmEsMHhlYiwweDg1LDB4ZTAsMHgzMCwweDIyLDB4 NzksMHgwMCwweDE2LDB4YjIsCisrCTB4ODgsMHgyZiwweDE0LDB4NmEsMHhiNywweGZjLDB4Yjcs MHg1MywweGRjLDB4NGEsMHgxMiwweGVmLAorKwkweDU0LDB4ZDYsMHgzMywweGU5LDB4MjAsMHhk NiwweGZkLDB4NTYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4 ZjQsMHhmNiwweDQ5LDB4YTEsMHgyZCwweDY0LDB4MmIsMHgzMCwweDU4LDB4ZjgsMHhiZCwweGI4 LAorKwkweDc1LDB4ZWIsMHhiYiwweDVlLDB4MWMsMHg5YiwweDgxLDB4NmEsMHhkYSwweDE0LDB4 ODYsMHg2ZSwKKysJMHhkMCwweGRhLDB4MTgsMHhiNywweDg4LDB4ZmIsMHg1OSwweGYzCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyNTZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4MjEsMHhjZCwweDZlLDB4NDYs MHhhZCwweDk5LDB4MDcsMHgxNywweGI0LDB4M2QsMHg3NiwweDBhLAorKwkweGZmLDB4NWIsMHg1 MiwweDUwLDB4NzgsMHhkZiwweDFmLDB4MjQsMHgwNiwweDBkLDB4M2YsMHg3NCwKKysJMHhhOSww eGM5LDB4MzcsMHhjZiwweGQ4LDB4MjYsMHgyNSwweDkxCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfcmV0dXJuZWRi aXRzW10gPQorKwl7CisrCTB4YTcsMHhhZiwweDJmLDB4MjksMHhlMCwweDNhLDB4NzIsMHg5NSww eDk2LDB4MWMsMHhhOSwweGYwLAorKwkweDRhLDB4MTcsMHg0ZCwweDY2LDB4MDYsMHgxMCwweGJm LDB4MzksMHg4OSwweDg4LDB4YjgsMHg5MSwKKysJMHgzNywweDE4LDB4OTksMHhjZiwweDhjLDB4 NTMsMHgzYiwweDdlCisrCX07CisrCisrCisrLyogSE1BQyBTSEEtMjU2IE5vIFBSICAqLworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2Vu dHJvcHlpbnB1dFtdID0KKysJeworKwkweDk2LDB4YjcsMHg1MywweDIyLDB4MWUsMHg1MiwweDJh LDB4OTYsMHhiMSwweDE1LDB4M2MsMHgzNSwKKysJMHg1YSwweDhiLDB4ZDMsMHg0YSwweGE2LDB4 NmMsMHg4MywweDBhLDB4N2QsMHhhMywweDIzLDB4M2QsCisrCTB4NDMsMHhhMSwweDA3LDB4MmMs MHgyZCwweGUzLDB4ODEsMHhjYworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X25vbmNlW10gPQorKwl7CisrCTB4ZjEsMHhh YywweDk3LDB4Y2IsMHg1ZSwweDA2LDB4NDgsMHhkMiwweDk0LDB4YmUsMHgxNSwweDJlLAorKwkw eGM3LDB4ZmMsMHhjMiwweDAxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQor Kwl7CisrCTB4OTgsMHhjNSwweDFlLDB4MzUsMHg1ZSwweDg5LDB4MGQsMHhjZSwweDY0LDB4NmQs MHgxOCwweGE3LAorKwkweDVhLDB4YzYsMHhmMywweGU3LDB4ZDYsMHg5ZSwweGMwLDB4ZWEsMHhi NywweDNhLDB4OGQsMHg2NSwKKysJMHhiOCwweGViLDB4MTAsMHhkNywweDU3LDB4MTgsMHhhMCww eDMyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4MWIsMHgxMCwweGFm LDB4YWMsMHhkMCwweDY1LDB4OTUsMHhhZCwweDA0LDB4YWQsMHgwMywweDFjLAorKwkweGUwLDB4 NDAsMHhkNiwweDNlLDB4MWMsMHg0NiwweDUzLDB4MzksMHg3YywweGUyLDB4YmMsMHhkYSwKKysJ MHg4YywweGEyLDB4MzMsMHhhNywweDlhLDB4MjYsMHhkMywweDI3CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfaW50X3Jl dHVybmVkYml0c1tdID0KKysJeworKwkweGJhLDB4NjEsMHgwZSwweDU1LDB4ZmUsMHgxMSwweDhh LDB4OWUsMHgwZiwweDgwLDB4ZGYsMHgxZCwKKysJMHgwMywweDBhLDB4ZmUsMHgxNSwweDk0LDB4 MjgsMHg0YiwweGJhLDB4ZjQsMHg5ZiwweDUxLDB4MjUsCisrCTB4ODgsMHhlNSwweDRlLDB4ZmIs MHhhZiwweGNlLDB4NjksMHg5MAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJ eworKwkweDYyLDB4N2YsMHgxZSwweDZiLDB4ZTgsMHg4ZSwweGUxLDB4MzUsMHg3ZCwweDliLDB4 NGYsMHhjNywKKysJMHhlYywweGM4LDB4YWMsMHhlZiwweDZiLDB4MTMsMHg5ZSwweDA1LDB4NTYs MHhjMSwweDA4LDB4ZjksCisrCTB4MmYsMHgwZiwweDI3LDB4OWMsMHhkNCwweDE1LDB4ZWQsMHgy ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGM3LDB4NzYs MHg2ZSwweGE5LDB4ZDIsMHhiMiwweDc2LDB4NDAsMHg4MiwweDI1LDB4MmMsMHhiMywKKysJMHg2 ZiwweGFjLDB4ZTksMHg3NCwweGVmLDB4OGYsMHgzYywweDhlLDB4Y2QsMHhmMSwweGJmLDB4YjMs CisrCTB4NDksMHg3NywweDM0LDB4ODgsMHg1MiwweDM2LDB4ZTYsMHgyZQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2Fk ZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg4ZCwweGI4LDB4MGMsMHhkMSwweGJmLDB4NzAs MHhmNiwweDE5LDB4YzMsMHg0MSwweDgwLDB4OWYsCisrCTB4ZTEsMHhhNSwweGE0LDB4MWYsMHgy YywweDI2LDB4YjEsMHhlNSwweGQ4LDB4ZWIsMHhiZSwweGY4LAorKwkweGRmLDB4ODgsMHg2YSww eDg5LDB4ZDYsMHgwNSwweGQ4LDB4OWQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHg0MywweDEyLDB4MmEsMHgyYywweDQwLDB4NTMsMHgyZSwweDdjLDB4NjYsMHgzNCwweGFj LDB4YzMsCisrCTB4NDMsMHhlMywweGUwLDB4NmEsMHhmYywweGZhLDB4ZWEsMHg4NywweDIxLDB4 MWYsMHhlMiwweDI2LAorKwkweGM0LDB4ZjksMHgwOSwweDlhLDB4MGQsMHg2ZSwweDdmLDB4ZTAK KysJfTsKKysKKysKKysvKiBITUFDIFNIQS0zODQgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlucHV0W10g PQorKwl7CisrCTB4NjksMHg4MSwweDk4LDB4ODgsMHg0NCwweGY1LDB4ZDYsMHgyZSwweDAwLDB4 MDgsMHgzYiwweGM1LAorKwkweGZiLDB4ZDcsMHg4ZSwweDZmLDB4MjMsMHhmOCwweDZkLDB4MDks MHhkNiwweDg1LDB4NDksMHhkMSwKKysJMHhmOCwweDZkLDB4YTQsMHg1OCwweDU0LDB4ZmQsMHg4 OCwweGE5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEzODRfcHJfbm9uY2VbXSA9CisrCXsKKysJMHg2ZSwweDM4LDB4ODEsMHhj YSwweGI3LDB4ZTgsMHg2ZSwweDY2LDB4NDksMHg4YSwweGIyLDB4NTksCisrCTB4ZWUsMHgxNiww eGM5LDB4ZGUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTM4NF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJ MHhmZSwweDRjLDB4ZDksMHhmNCwweDc4LDB4M2IsMHgwOCwweDQxLDB4OGQsMHg4ZiwweDU1LDB4 YzQsCisrCTB4NDMsMHg1NiwweGI2LDB4MTIsMHgzNiwweDZiLDB4MzAsMHhiNywweDVlLDB4ZTEs MHhiOSwweDQ3LAorKwkweDA0LDB4YjEsMHg0ZSwweGE5LDB4MDAsMHhhMSwweDUyLDB4YTEKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg4OSwweGU5LDB4Y2MsMHg4 ZiwweDI3LDB4M2MsMHgyNiwweGQxLDB4OTUsMHhjOCwweDdkLDB4MGYsCisrCTB4NWIsMHgxYSww eGYwLDB4NzgsMHgzOSwweDU2LDB4NmYsMHhhNCwweDIzLDB4ZTcsMHhkMSwweGRhLAorKwkweDdj LDB4NjYsMHgzMywweGEwLDB4OTAsMHhjOSwweDkyLDB4ODgKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5 aW5wdXRwcltdID0KKysJeworKwkweGJlLDB4M2QsMHg3YywweDBkLDB4Y2EsMHhkYSwweDdjLDB4 NDksMHhiOCwweDEyLDB4MzYsMHhjMCwKKysJMHhkYiwweGFkLDB4MzUsMHhhOCwweGM3LDB4MGIs MHgyYSwweDJjLDB4NjksMHg2ZCwweDI1LDB4NTYsCisrCTB4NjMsMHg4MiwweDExLDB4M2UsMHhh NywweDMzLDB4NzAsMHg3MgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHg4MiwweDNkLDB4ZTYsMHg1NCwweDgwLDB4NDIsMHhmOCwweGJhLDB4OTAsMHg0ZiwweDA2 LDB4YTYsCisrCTB4ZDIsMHg3ZiwweGJmLDB4NzksMHg3YywweDEyLDB4N2QsMHhhNiwweGEyLDB4 NjYsMHhlOCwweGE2LAorKwkweGMwLDB4ZDYsMHg0YSwweDU1LDB4YmYsMHhkOCwweDBhLDB4YzUs MHhmOCwweDAzLDB4ODgsMHhkZCwKKysJMHg4ZSwweDg3LDB4ZDEsMHg1YSwweDQ4LDB4MjYsMHg3 MiwweDJhLDB4OGUsMHhjZiwweGVlLDB4YmEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXQy W10gPQorKwl7CisrCTB4OGYsMHhmZiwweGQ5LDB4ODQsMHhiYiwweDg1LDB4M2EsMHg2NiwweGEx LDB4MjEsMHhjZSwweGIyLAorKwkweDNhLDB4M2EsMHgxNywweDIyLDB4MTksMHhhZSwweGM3LDB4 YjYsMHg2MywweDgxLDB4ZDUsMHhmZiwKKysJMHgwZCwweGM4LDB4ZTEsMHhhZiwweDU3LDB4ZDIs MHhjYiwweDYwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4ZDcs MHhmYiwweGM5LDB4ZTgsMHhlMiwweGYyLDB4YWEsMHg0YywweGI4LDB4NTEsMHgyZiwweGUxLAor KwkweDIyLDB4YmEsMHhmMywweGRhLDB4MGEsMHgxOSwweDc2LDB4NzEsMHg1NywweGIyLDB4MWQs MHg5NCwKKysJMHgwOSwweDY5LDB4NmMsMHhkMywweDk3LDB4NTEsMHg4MSwweDg3CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEz ODRfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTYsMHgxOSwweDI4LDB4YTgsMHgyMSww eGNlLDB4NWUsMHhkYiwweDI0LDB4NzksMHg4YywweDc2LAorKwkweDVkLDB4NzMsMHhiMiwweGRm LDB4YWMsMHhlZiwweDg1LDB4YTcsMHgzYiwweDE5LDB4MDksMHg4YiwKKysJMHg3ZiwweDk4LDB4 MjgsMHhhOSwweDkzLDB4ZDgsMHg3YSwweGFkLDB4NTUsMHg4YiwweDI0LDB4OWQsCisrCTB4ZTYs MHg5OCwweGZlLDB4NDcsMHhkNSwweDQ4LDB4YzEsMHgyMywweGQ4LDB4MWQsMHg2MiwweDc1Cisr CX07CisrCisrCisrLyogSE1BQyBTSEEtMzg0IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2VudHJvcHlpbnB1dFtdID0K KysJeworKwkweGMzLDB4NTYsMHgyYiwweDFkLDB4YzIsMHhiYiwweGE4LDB4ZjAsMHhhZSwweDFi LDB4MGQsMHhkMywKKysJMHg1YSwweDZjLDB4ZGEsMHg1NywweDhlLDB4YTUsMHg4YSwweDBkLDB4 NmMsMHg0YiwweDE4LDB4YjEsCisrCTB4MDQsMHgzZSwweGI0LDB4OTksMHgzNSwweGM0LDB4YzAs MHg1ZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMzg0X25vbmNlW10gPQorKwl7CisrCTB4YzUsMHg0OSwweDFlLDB4NjYsMHgy NywweDkyLDB4YmUsMHhlYywweGI1LDB4MWUsMHg0YiwweGIxLAorKwkweDM4LDB4ZTMsMHhlYiww eDYyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEzODRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4YmUsMHhl NywweDZiLDB4NTcsMHhkZSwweDg4LDB4MTEsMHg5NiwweDliLDB4NmUsMHhlYSwweGU1LAorKwkw eDYzLDB4ODMsMHg0YywweGI2LDB4OGQsMHg2NiwweGFhLDB4MWYsMHg4YiwweDU0LDB4ZTcsMHg2 MiwKKysJMHg2ZCwweDVhLDB4ZmMsMHhiZiwweDk3LDB4YmEsMHhjZCwweDc3CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf YWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZTUsMHgyOCwweDVmLDB4NDMsMHhmNSwweDgz LDB4NmUsMHgwYSwweDgzLDB4NWMsMHhlMywweDgxLAorKwkweDAzLDB4ZjIsMHhmOCwweDc4LDB4 MDAsMHg3YywweDk1LDB4ODcsMHgxNiwweGQ2LDB4NmMsMHg1OCwKKysJMHgzMywweDZjLDB4NTMs MHgzNSwweDBkLDB4NjYsMHhlMywweGNlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfaW50X3JldHVybmVkYml0c1tdID0K KysJeworKwkweGUyLDB4MWYsMHhmMywweGRhLDB4MGQsMHgxOSwweDk5LDB4ODcsMHhjNCwweDkw LDB4YTIsMHgzMSwKKysJMHhjYSwweDJhLDB4ODksMHg1OCwweDQzLDB4NDQsMHhiOCwweGRlLDB4 Y2YsMHhhNCwweGJlLDB4M2IsCisrCTB4NTMsMHgyNiwweDIyLDB4MzEsMHg3NiwweDQxLDB4MjIs MHhiNSwweGE4LDB4NzAsMHgyZiwweDRiLAorKwkweDY0LDB4OTUsMHg0ZCwweDQ4LDB4OTYsMHgz NSwweGU2LDB4YmQsMHgzYywweDM0LDB4ZGIsMHgxYgorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2VudHJvcHlpbnB1dHJl c2VlZFtdID0KKysJeworKwkweDc3LDB4NjEsMHhiYSwweGJjLDB4ZjIsMHhjMSwweGYzLDB4NGIs MHg4NiwweDY1LDB4ZmQsMHg0OCwKKysJMHgwZSwweDNjLDB4MDIsMHg1ZSwweGEyLDB4N2EsMHg2 YiwweDdjLDB4ZWQsMHgyMSwweDVlLDB4ZjksCisrCTB4Y2QsMHhjZCwweDc3LDB4MDcsMHgyYiww eGJlLDB4YzUsMHg1YworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJewor KwkweDE4LDB4MjQsMHg1ZiwweGM2LDB4ODQsMHhkMSwweDY3LDB4YzMsMHg5YSwweDExLDB4YTUs MHg4YywKKysJMHgwNywweDM5LDB4MjEsMHg4MywweDRkLDB4MDQsMHhjNCwweDZhLDB4MjgsMHgx OSwweGNmLDB4OTIsCisrCTB4MjEsMHhkOSwweDllLDB4NDEsMHg3MiwweDZjLDB4OWUsMHg2Mwor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg5NiwweDY3LDB4NDEsMHgy OCwweDliLDB4YjcsMHg5MiwweDhkLDB4NjQsMHgzYiwweGU0LDB4Y2YsCisrCTB4N2UsMHhhYSww eDFlLDB4YjEsMHg0YiwweDFkLDB4MDksMHg1NiwweDY3LDB4OWMsMHhjNiwweDZkLAorKwkweDNi LDB4ZTgsMHg5MSwweDlkLDB4ZTEsMHg4YSwweGI3LDB4MzIKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9yZXR1cm5lZGJp dHNbXSA9CisrCXsKKysJMHhlMywweDU5LDB4NjEsMHgzOCwweDkyLDB4ZWMsMHhlMiwweDNjLDB4 ZmYsMHhiNywweGRiLDB4MTksCisrCTB4MGYsMHg1YiwweDkzLDB4NjgsMHgwZCwweGE0LDB4OTQs MHg0MCwweDcyLDB4MGIsMHhlMCwweGVkLAorKwkweDRkLDB4Y2QsMHg2OCwweGEwLDB4MWUsMHhm ZSwweDY3LDB4YjIsMHhmYSwweDIxLDB4NTYsMHg3NCwKKysJMHhhNCwweGFkLDB4Y2YsMHhiNyww eDYwLDB4NjYsMHgyZSwweDQwLDB4ZGUsMHg4MiwweGNhLDB4ZmIKKysJfTsKKysKKysKKysvKiBI TUFDIFNIQS01MTIgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4YWEsMHg5 ZSwweDQ1LDB4NjcsMHgwZSwweDAwLDB4MmEsMHg2NywweDk4LDB4ZDYsMHhkYSwweDBiLAorKwkw eDBmLDB4MTcsMHg3ZSwweGFjLDB4ZmQsMHgyNywweGM0LDB4Y2EsMHg4NCwweGRmLDB4ZGUsMHhi YSwKKysJMHg4NSwweGQ5LDB4YmUsMHg4ZiwweGYzLDB4ZmYsMHg5MSwweDRkCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJf cHJfbm9uY2VbXSA9CisrCXsKKysJMHg4YywweDQ5LDB4MmYsMHg1OCwweDFlLDB4N2EsMHhkYSww eDRiLDB4N2UsMHg4YSwweDMwLDB4N2IsCisrCTB4ODYsMHhlYSwweGFmLDB4YTIKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUx Ml9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg3MSwweGUxLDB4YmIsMHhh ZCwweGE3LDB4NGIsMHgyZSwweDMxLDB4M2IsMHgwYiwweGVjLDB4MjQsCisrCTB4OTksMHgzOCww eGJjLDB4YWEsMHgwNSwweDRjLDB4NDYsMHg0NCwweGZhLDB4YWQsMHg4ZSwweDAyLAorKwkweGMx LDB4N2UsMHhhZCwweGVjLDB4NTQsMHhhNiwweGQwLDB4YWQKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9hZGRpdGlv bmFsaW5wdXRbXSA9CisrCXsKKysJMHgzZCwweDZlLDB4YTYsMHhhOCwweDI5LDB4MmEsMHhiMiww eGY1LDB4OTgsMHg0MiwweGU0LDB4OTIsCisrCTB4NzgsMHgyMiwweDY3LDB4ZmQsMHgxYiwweDE1 LDB4MWUsMHgyOSwweGFhLDB4NzEsMHgzYywweDNjLAorKwkweGU3LDB4MDUsMHgyMCwweGE5LDB4 MjksMHhjNiwweDc1LDB4NzEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJewor KwkweGFiLDB4YjksMHgxNiwweGQ4LDB4NTUsMHgzNSwweDU0LDB4YjcsMHg5NywweDNmLDB4OTQs MHhiYywKKysJMHgyZiwweDdjLDB4NzAsMHhjNywweGQwLDB4ZWQsMHhiNywweDRiLDB4ZjcsMHhm NiwweDZjLDB4MDMsCisrCTB4MGMsMHhiMCwweDAzLDB4ZDgsMHhiYiwweDcxLDB4ZDksMHgxMAor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhNTEyX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg4ZSwweGQzLDB4ZmQs MHg1MiwweDllLDB4ODMsMHgwOCwweDQ5LDB4MTgsMHg2ZSwweDIzLDB4NTYsCisrCTB4NWMsMHg0 NSwweDkzLDB4MzQsMHgwNSwweGUyLDB4OTgsMHg4ZiwweDBjLDB4ZDQsMHgzMiwweDBjLAorKwkw eGZkLDB4ZGEsMHg1ZiwweDkyLDB4M2EsMHg4YywweDgxLDB4YmQsMHhmNiwweDZjLDB4NTUsMHhm ZCwKKysJMHhiOCwweDIwLDB4Y2UsMHg4ZCwweDk3LDB4MjcsMHhlOCwweGU4LDB4ZTAsMHhiMyww eDg1LDB4NTAsCisrCTB4YTIsMHhjMiwweGIyLDB4OTUsMHgxZCwweDQ4LDB4ZDMsMHg3YiwweDRi LDB4NzgsMHgxMywweDM1LAorKwkweDA1LDB4MTcsMHhiZSwweDBkCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfYWRk aXRpb25hbGlucHV0MltdID0KKysJeworKwkweGMzLDB4ZmMsMHg5NSwweGFhLDB4NjksMHgwNiww eGFlLDB4NTksMHg0MSwweGNlLDB4MjYsMHgwOCwKKysJMHgyOSwweDZkLDB4NDUsMHhkYSwweGU4 LDB4YjMsMHg2YywweDk1LDB4NjAsMHgwZiwweDcwLDB4MmMsCisrCTB4MTAsMHhiYSwweDM4LDB4 OGMsMHhjZiwweDI5LDB4OTksMHhhYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByMltdID0K KysJeworKwkweDNiLDB4OWEsMHgyNSwweGNlLDB4ZDcsMHhmOSwweDVjLDB4ZDEsMHgzYSwweDNl LDB4YWEsMHg3MSwKKysJMHgxNCwweDNlLDB4MTksMHhlOCwweGNlLDB4ZTYsMHhmZSwweDUxLDB4 ODQsMHhlOSwweDFiLDB4ZmUsCisrCTB4M2YsMHhhNywweGYyLDB4ZmQsMHg3NiwweDVmLDB4NmEs MHhlNworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhNTEyX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGI3LDB4ODIsMHhh OSwweDU3LDB4ODEsMHg2NywweDUzLDB4YjUsMHhhMSwweGU5LDB4M2QsMHgzNSwKKysJMHhmOSww eGU0LDB4OTcsMHhiZSwweGE2LDB4Y2EsMHhmMSwweDAxLDB4MTMsMHgwOSwweGU3LDB4MjEsCisr CTB4YzAsMHhlZCwweDkzLDB4NWQsMHg0YiwweGY0LDB4ZWIsMHg4ZCwweDUzLDB4MjUsMHg4YSww eGM0LAorKwkweGIxLDB4NmYsMHg2ZSwweDM3LDB4Y2QsMHgyZSwweGFjLDB4MzksMHhiMiwweGI2 LDB4OTksMHhhMywKKysJMHg4MiwweDAwLDB4YjAsMHgyMSwweGYwLDB4YzcsMHgyZiwweDRjLDB4 NzMsMHg5MiwweGZkLDB4MDAsCisrCTB4YjYsMHhhZiwweGJjLDB4ZDMKKysJfTsKKysKKysKKysv KiBITUFDIFNIQS01MTIgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4NmUs MHg4NSwweGU2LDB4MjUsMHg5NiwweDI5LDB4YTcsMHg1MiwweDViLDB4NjAsMHhiYSwweGFhLAor KwkweGRlLDB4ZGIsMHgzNiwweDBhLDB4NTEsMHg5YSwweDE1LDB4YWUsMHg2ZSwweDE4LDB4ZDMs MHhmZSwKKysJMHgzOSwweGI5LDB4NGEsMHg5NiwweGY4LDB4NzcsMHhjYiwweDk1CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1 MTJfbm9uY2VbXSA9CisrCXsKKysJMHhlMCwweGE2LDB4NWQsMHgwOCwweGMzLDB4N2MsMHhhZSww eDI1LDB4MmUsMHg4MCwweGQxLDB4M2UsCisrCTB4ZDksMHhhZiwweDQzLDB4M2MKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUx Ml9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg1MywweDk5LDB4NTIsMHg1Ziww eDExLDB4YTksMHg2NCwweDY2LDB4MjAsMHg1ZSwweDFiLDB4NWYsCisrCTB4NDIsMHhiMywweGY0 LDB4ZGEsMHhlZCwweGJiLDB4NjMsMHhjMSwweDIzLDB4YWYsMHhkMCwweDAxLAorKwkweDkwLDB4 M2IsMHhkMCwweDc4LDB4ZTQsMHgwYiwweGE3LDB4MjAKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFsaW5w dXRbXSA9CisrCXsKKysJMHg4NSwweDkwLDB4ODAsMHhkMywweDk4LDB4ZjEsMHg1MywweDZkLDB4 NjgsMHgxNSwweDhmLDB4ZTUsCisrCTB4NjAsMHgzZiwweDE3LDB4MjksMHg1NSwweDhkLDB4MzMs MHhiMSwweDQ1LDB4NjQsMHg2NCwweDhkLAorKwkweDUwLDB4MjEsMHg4OSwweGFlLDB4ZjYsMHhm ZCwweDMyLDB4NzMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTUxMl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4Mjgs MHg1NiwweDMwLDB4NmYsMHhmNCwweGExLDB4NDgsMHhlMCwweGM5LDB4ZjUsMHg3NSwweDkwLAor KwkweGNjLDB4ZmIsMHhkZiwweGRmLDB4NzEsMHgzZCwweDBhLDB4OWEsMHgwMywweDY1LDB4M2Is MHgxOCwKKysJMHg2MSwweGUzLDB4ZDEsMHhkYSwweGNjLDB4NGEsMHhmZSwweDU1LDB4MzgsMHhm OCwweDIxLDB4NmIsCisrCTB4ZmEsMHgxOCwweDAxLDB4NDIsMHgzOSwweDJmLDB4OTksMHg1Myww eDM4LDB4MTUsMHg4MiwweDM0LAorKwkweGM1LDB4OTMsMHg5MiwweGJjLDB4NGQsMHg3NSwweDFh LDB4NWYsMHgyMSwweDI3LDB4Y2MsMHhhMSwKKysJMHhiMSwweDU3LDB4NjksMHhlOAorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh NTEyX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDhjLDB4NTIsMHg3ZSwweDc3LDB4 NzIsMHgzZiwweGEzLDB4MDQsMHg5NywweDEwLDB4OWIsMHg0MSwKKysJMHhiZCwweGU4LDB4ZmYs MHg4OSwweGVkLDB4ODAsMHhlMywweGJkLDB4YWEsMHgxMiwweDJkLDB4Y2EsCisrCTB4NzUsMHg4 MiwweDM2LDB4NzcsMHg4OCwweGNkLDB4YTYsMHg3MworKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1 dHJlc2VlZFtdID0KKysJeworKwkweDdlLDB4MzIsMHhlMywweDY5LDB4NjksMHgwNywweDM0LDB4 YTIsMHgxNiwweGEyLDB4NWQsMHgxYSwKKysJMHgxMCwweDkxLDB4ZDMsMHhlMiwweDIxLDB4YTIs MHhhMywweGRkLDB4Y2QsMHgwYywweDA5LDB4ODYsCisrCTB4MTEsMHhlMSwweDUwLDB4ZmYsMHg1 YywweGI3LDB4ZWIsMHg1YworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJ MHg3ZiwweDc4LDB4NjYsMHhkOCwweGZiLDB4NjcsMHhjZiwweDhkLDB4OGMsMHgwOCwweDMwLDB4 YTUsCisrCTB4ZjgsMHg3ZCwweGNmLDB4NDQsMHg1OSwweGNlLDB4ZjgsMHhkZiwweDU4LDB4ZDMs MHg2MCwweGNiLAorKwkweGE4LDB4NjAsMHhiOSwweDA3LDB4YzQsMHhiMSwweDk1LDB4NDgKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTUxMl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhkZiwweGE3LDB4MzYsMHhkNCwweGRj LDB4NWQsMHg0ZCwweDMxLDB4YWQsMHg2OSwweDQ2LDB4OWYsCisrCTB4ZjEsMHg3YywweGQ3LDB4 M2IsMHg0ZiwweDU1LDB4ZjIsMHhkNywweGI5LDB4OWQsMHhhZCwweDdhLAorKwkweDc5LDB4MDgs MHg1OSwweGE1LDB4ZGMsMHg3NCwweGY1LDB4OWIsMHg3MywweGQyLDB4MTMsMHgyNSwKKysJMHgw YiwweDgxLDB4MDgsMHgwOCwweDI1LDB4ZmIsMHgzOSwweGYyLDB4ZjAsMHhhMywweGE0LDB4OGQs CisrCTB4ZWYsMHgwNSwweDllLDB4YjgsMHhjNywweDUyLDB4ZTQsMHgwZSwweDQyLDB4YWEsMHg3 YywweDc5LAorKwkweGMyLDB4ZDYsMHhmZCwweGE1CisrCX07CisrCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MWIvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQw NDc2OTM4NyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfZHNhX3Nl bGZ0ZXN0LmMJMjAxMi0wNC0yNiAxODowMDo1MS40MDQ3NjkzODcgKzAyMDAKK0BAIC0wLDAgKzEs MTkzIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAg ZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgor KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisr ICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisr ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNp bmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wW10gPSB7CisrCTB4YTgsMHg1Myww eDc4LDB4ZDgsMHhmZCwweDNmLDB4OGQsMHg3MiwweGVjLDB4NzQsMHgxOCwweDA4LAorKwkweDBk LDB4YTIsMHgxMywweDE3LDB4ZTQsMHgzZSwweGM0LDB4YjYsMHgyYiwweGE4LDB4YzgsMHg2MiwK KysJMHgzYiwweDdlLDB4NGQsMHgwNCwweDQ0LDB4MWQsMHhkMSwweGEwLDB4NjUsMHg4NiwweDYy LDB4NTksCisrCTB4NjQsMHg5MywweGNhLDB4OGUsMHg5ZSwweDhmLDB4YmIsMHg3ZSwweDM0LDB4 YWEsMHhkZCwweGI2LAorKwkweDJlLDB4NWQsMHg2NywweGI2LDB4ZDAsMHg5YSwweDZlLDB4NjEs MHhiNywweDY5LDB4ZTcsMHhjMywKKysJMHg1MiwweGFhLDB4MmIsMHgxMCwweGUyLDB4MGMsMHhh MCwweDYzLDB4NjksMHg2MywweGI1LDB4NTIsCisrCTB4M2UsMHg4NiwweDQ3LDB4MGQsMHhlYyww eGJiLDB4ZWQsMHhhMCwweDI3LDB4ZTcsMHg5NywweGU3LAorKwkweGI2LDB4NzYsMHgzNSwweGQ0 LDB4ZDQsMHg5YywweDMwLDB4NzAsMHgwZSwweDc0LDB4YWYsMHg4YSwKKysJMHgwZiwweGYxLDB4 NTYsMHhhOCwweDAxLDB4YWYsMHg1NywweGEyLDB4NmUsMHg3MCwweDc4LDB4ZjEsCisrCTB4ZDgs MHgyZiwweDc0LDB4OTAsMHg4ZSwweGNiLDB4NmQsMHgwNywweGU3LDB4MGIsMHgzNSwweDAzLAor KwkweGVlLDB4ZDksMHg0ZiwweGEzLDB4MmMsMHhmMSwweDdhLDB4N2YsMHhjMywweGQ2LDB4Y2Ys MHg0MCwKKysJMHhkYywweDdiLDB4MDAsMHg4MywweDBlLDB4NmEsMHgyNSwweDY2LDB4ZGMsMHgw NywweDNlLDB4MzQsCisrCTB4MzMsMHgxMiwweDUxLDB4N2MsMHg2YSwweGE1LDB4MTUsMHgyYiww eDRiLDB4ZmUsMHhjZCwweDJlLAorKwkweDU1LDB4MWYsMHhlZSwweDM0LDB4NjMsMHgxOCwweGEx LDB4NTMsMHg0MiwweDNjLDB4OTksMHg2YiwKKysJMHgwZCwweDVkLDB4Y2IsMHg5MSwweDAyLDB4 YWUsMHhkZCwweDM4LDB4NzksMHg4NiwweDE2LDB4ZjEsCisrCTB4ZjEsMHhlMCwweGQ2LDB4YzQs MHgwMywweDUyLDB4NWIsMHgxZiwweDliLDB4M2QsMHg0ZCwweGM3LAorKwkweDY2LDB4ZGUsMHgy ZCwweGZjLDB4NGEsMHg1NiwweGQ3LDB4YjgsMHhiYSwweDU5LDB4NjMsMHhkNiwKKysJMHgwZiww eDNlLDB4MTYsMHgzMSwweDg4LDB4NzAsMHhhZCwweDQzLDB4NjksMHg1MiwweGU1LDB4NTcsCisr CTB4NjUsMHgzNywweDRlLDB4YWIsMHg4NSwweGU4LDB4ZWMsMHgxNywweGQ2LDB4YjksMHhhNCww eDU0LAorKwkweDdiLDB4OWIsMHg1ZiwweDI3LDB4NTIsMHhmMywweDEwLDB4NWIsMHhlOCwweDA5 LDB4YjIsMHgzYSwKKysJMHgyYywweDhkLDB4NzQsMHg2OSwweGRiLDB4MDIsMHhlMiwweDRkLDB4 NTksMHgyMywweDk0LDB4YTcsCisrCTB4ZGIsMHhhMCwweDY5LDB4ZTkKKyt9OworKworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcVtdID0geworKwkweGQyLDB4Nzcs MHgwNCwweDRlLDB4NTAsMHhmNSwweGE0LDB4ZTMsMHhmNSwweDEwLDB4YTUsMHgwYSwKKysJMHgw YiwweDg0LDB4ZmQsMHhmZiwweGJjLDB4YTAsMHg0NywweGVkLDB4MjcsMHg2MCwweDIwLDB4NTYs CisrCTB4NzQsMHg0MSwweGEwLDB4YTUKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGRzYV90ZXN0XzIwNDhfZ1tdID0geworKwkweDEzLDB4ZDcsMHg1NCwweGUyLDB4MWYsMHhk MiwweDQxLDB4NjUsMHg1ZCwweGE4LDB4OTEsMHhjNSwKKysJMHgyMiwweGE2LDB4NWEsMHg3Miww eGE4LDB4OWIsMHhkYywweDY0LDB4ZWMsMHg5YiwweDU0LDB4YTgsCisrCTB4MjEsMHhlZCwweDRh LDB4ODksMHg4YiwweDQ5LDB4MGUsMHgwYywweDRmLDB4Y2IsMHg3MiwweDE5LAorKwkweDJhLDB4 NGEsMHgyMCwweGY1LDB4NDEsMHhmMywweGYyLDB4OTIsMHg1MywweDk5LDB4ZjAsMHhiYSwKKysJ MHhlYywweGY5LDB4MjksMHhhYSwweGZiLDB4ZjcsMHg5ZCwweGZlLDB4NDMsMHgzMiwweDM5LDB4 M2IsCisrCTB4MzIsMHhjZCwweDJlLDB4MmYsMHhjZiwweDI3LDB4MmYsMHgzMiwweGE2LDB4Mjcs MHg0MywweDRhLAorKwkweDBkLDB4ZjIsMHg0MiwweGI3LDB4NWIsMHg0MSwweDRkLDB4ZjMsMHg3 MiwweDEyLDB4MWUsMHg1MywKKysJMHhhNSwweDUzLDB4ZjIsMHgyMiwweGY4LDB4MzYsMHhiMCww eDAwLDB4ZjAsMHgxNiwweDQ4LDB4NWIsCisrCTB4NmIsMHhkMCwweDg5LDB4ODQsMHg1MSwweDgw LDB4MWQsMHhjZCwweDhkLDB4ZTYsMHg0YywweGQ1LAorKwkweDM2LDB4NTYsMHg5NiwweGZmLDB4 YzUsMHgzMiwweGQ1LDB4MjgsMHhjNSwweDA2LDB4NjIsMHgwYSwKKysJMHg5NCwweDJhLDB4MDMs MHgwNSwweDA0LDB4NmQsMHg4ZiwweDE4LDB4NzYsMHgzNCwweDFmLDB4MWUsCisrCTB4NTcsMHgw YiwweGMzLDB4OTcsMHg0YiwweGE2LDB4YjksMHhhNCwweDM4LDB4ZTksMHg3MCwweDIzLAorKwkw eDAyLDB4YTIsMHhlNiwweGU2LDB4N2IsMHhmZCwweDA2LDB4ZDMsMHgyYiwweGM2LDB4NzksMHg5 NiwKKysJMHgyMiwweDcxLDB4ZDcsMHhiNCwweDBjLDB4ZDcsMHgyZiwweDM4LDB4NmUsMHg2NCww eGUwLDB4ZDcsCisrCTB4ZWYsMHg4NiwweGNhLDB4OGMsMHhhNSwweGQxLDB4NDIsMHgyOCwweGRj LDB4MmEsMHg0ZiwweDE2LAorKwkweGUzLDB4MTgsMHg5OCwweDg2LDB4YjUsMHg5OSwweDA2LDB4 NzQsMHhmNCwweDIwLDB4MGYsMHgzYSwKKysJMHg0YywweGY2LDB4NWEsMHgzZiwweDBkLDB4ZGIs MHhhMSwweGZhLDB4NjcsMHgyZCwweGZmLDB4MmYsCisrCTB4NWUsMHgxNCwweDNkLDB4MTAsMHhl NCwweGU5LDB4N2EsMHhlOCwweDRmLDB4NmQsMHhhMCwweDk1LAorKwkweDM1LDB4ZDUsMHhiOSww eGRmLDB4MjUsMHg5MSwweDgxLDB4YTcsMHg5YiwweDYzLDB4YjAsMHg2OSwKKysJMHhlOSwweDQ5 LDB4OTcsMHgyYiwweDAyLDB4YmEsMHgzNiwweGIzLDB4NTgsMHg2YSwweGFiLDB4N2UsCisrCTB4 NDUsMHhmMywweDIyLDB4ZjgsMHgyZSwweDRlLDB4ODUsMHhjYSwweDNhLDB4YjgsMHg1NSwweDkx LAorKwkweGIzLDB4YzIsMHhhOSwweDY2CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBkc2FfdGVzdF8yMDQ4X3B1Yl9rZXlbXSA9IHsKKysJMHgyNCwweDUyLDB4ZjMsMHhjYyww eGJlLDB4OWUsMHhkNSwweGNhLDB4N2QsMHhjNywweDRjLDB4NjAsCisrCTB4MmIsMHg5OSwweDIy LDB4NmUsMHg4ZiwweDJmLDB4YWIsMHgzOCwweGU3LDB4ZDcsMHhkZCwweGZiLAorKwkweDc1LDB4 NTMsMHg5YiwweDE3LDB4MTUsMHg1ZSwweDlmLDB4Y2YsMHhkMSwweGFiLDB4YTUsMHg2NCwKKysJ MHhlYiwweDg1LDB4MzUsMHhkOCwweDEyLDB4YzksMHhjMiwweGRjLDB4ZjksMHg3MiwweDg0LDB4 NDQsCisrCTB4MWIsMHhjNCwweDgyLDB4MjQsMHgzNiwweDI0LDB4YzcsMHhmNCwweDU3LDB4NTgs MHgwYywweDFjLAorKwkweDM4LDB4YTUsMHg3YywweDQ2LDB4YzQsMHg1NywweDM5LDB4MjQsMHg3 MCwweGVkLDB4YjUsMHgyYywKKysJMHhiNSwweGE2LDB4ZTAsMHgzZiwweGU2LDB4MjgsMHg3Yiww eGI2LDB4ZjQsMHg5YSwweDQyLDB4YTIsCisrCTB4MDYsMHg1YSwweDA1LDB4NGYsMHgwMywweDA4 LDB4MzksMHhkZiwweDFmLDB4ZDMsMHgxNCwweDljLAorKwkweDRjLDB4YTAsMHg1MywweDFkLDB4 ZDgsMHhjYSwweDhhLDB4YWEsMHg5YywweGM3LDB4MzMsMHg3MSwKKysJMHg5MywweDM4LDB4NzMs MHg0OCwweDMzLDB4NjEsMHgxOCwweDIyLDB4NDUsMHg0NSwweGU4LDB4OGMsCisrCTB4ODAsMHhm ZiwweGQ4LDB4NzYsMHg1ZCwweDc0LDB4MzYsMHgwMywweDMzLDB4Y2MsMHhhYiwweDk5LAorKwkw eDcyLDB4NzcsMHg5YiwweDY1LDB4MjUsMHhhNiwweDViLDB4ZGQsMHgwZCwweDEwLDB4YzYsMHg3 NSwKKysJMHhjMSwweDA5LDB4YmIsMHhkMywweGU1LDB4YmUsMHg0ZCwweDcyLDB4ZWYsMHg2ZSww eGJhLDB4NmUsCisrCTB4NDMsMHg4ZCwweDUyLDB4MjYsMHgyMywweDdkLDB4YjgsMHg4OCwweDM3 LDB4OWMsMHg1ZiwweGNjLAorKwkweDQ3LDB4YTMsMHg4NCwweDdmLDB4ZjYsMHgzNywweDExLDB4 YmEsMHhlZCwweDZkLDB4MDMsMHhhZiwKKysJMHhlOCwweDFlLDB4NjksMHg0YSwweDQxLDB4M2Is MHg2OCwweDBiLDB4ZDMsMHg4YSwweGI0LDB4OTAsCisrCTB4M2YsMHg4MywweDcwLDB4YTcsMHgw NywweGVmLDB4NTUsMHgxZCwweDQ5LDB4NDEsMHgwMiwweDZkLAorKwkweDk1LDB4NzksMHhkNiww eDkxLDB4ZGUsMHg4ZSwweGRhLDB4YTEsMHg2MSwweDA1LDB4ZWIsMHg5ZCwKKysJMHhiYSwweDNj LDB4MmYsMHg0YywweDFiLDB4ZWMsMHg1MCwweDgyLDB4NzUsMHhhYSwweDAyLDB4MDcsCisrCTB4 ZTIsMHg1MSwweGI1LDB4ZWMsMHhjYiwweDI4LDB4NmEsMHg0YiwweDAxLDB4ZDQsMHg0OSwweGQz LAorKwkweDBhLDB4Y2IsMHg2NywweDM3LDB4MTcsMHhhMCwweGQyLDB4ZmIsMHgzYiwweDUwLDB4 YzgsMHg5MywKKysJMHhmNywweGRhLDB4YjEsMHg0ZgorK307CisrCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wcml2X2tleVtdID0geworKwkweDBjLDB4NGIsMHgz MCwweDg5LDB4ZDEsMHhiOCwweDYyLDB4Y2IsMHgzYywweDQzLDB4NjQsMHg5MSwKKysJMHhmMCww eDkxLDB4NTQsMHg3MCwweGM1LDB4MjcsMHg5NiwweGUzLDB4YWMsMHhiZSwweGU4LDB4MDAsCisr CTB4ZWMsMHg1NSwweGY2LDB4Y2MKKyt9OworKworK3N0YXRpYyBpbnQgY29ycnVwdF9kc2E7Cisr Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZHNhKCkKKysgICAgeworKyAgICBjb3JydXB0X2RzYSA9IDE7 CisrICAgIH0KKysKKytpbnQgRklQU19zZWxmdGVzdF9kc2EoKQorKwl7CisrCURTQSAqZHNhID0g TlVMTDsKKysJRVZQX1BLRVkgKnBrID0gTlVMTDsKKysJaW50IHJldCA9IDA7CisrCisrCWRzYSA9 IERTQV9uZXcoKTsKKysKKysJaWYoZHNhID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJZmlw c19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwLCBkc2FfdGVzdF8yMDQ4KTsKKysJZmlwc19sb2Fk X2tleV9jb21wb25lbnQoZHNhLCBxLCBkc2FfdGVzdF8yMDQ4KTsKKysJZmlwc19sb2FkX2tleV9j b21wb25lbnQoZHNhLCBnLCBkc2FfdGVzdF8yMDQ4KTsKKysJZmlwc19sb2FkX2tleV9jb21wb25l bnQoZHNhLCBwdWJfa2V5LCBkc2FfdGVzdF8yMDQ4KTsKKysJZmlwc19sb2FkX2tleV9jb21wb25l bnQoZHNhLCBwcml2X2tleSwgZHNhX3Rlc3RfMjA0OCk7CisrCisrCWlmIChjb3JydXB0X2RzYSkK KysJCUJOX3NldF9iaXQoZHNhLT5wdWJfa2V5LCAyMDQ3KTsKKysKKysJaWYgKChwaz1FVlBfUEtF WV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwlFVlBfUEtFWV9hc3NpZ25fRFNB KHBrLCBkc2EpOworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgTlVMTCwg MCwKKysJCQkJCU5VTEwsIDAsIEVWUF9zaGEyNTYoKSwgMCwKKysJCQkJCSJEU0EgU0hBMjU2Iikp CisrCQlnb3RvIGVycjsKKysJcmV0ID0gMTsKKysKKysJZXJyOgorKwlpZiAocGspCisrCQlFVlBf UEtFWV9mcmVlKHBrKTsKKysJZWxzZSBpZiAoZHNhKQorKwkJRFNBX2ZyZWUoZHNhKTsKKysJcmV0 dXJuIHJldDsKKysJfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2Zp cHMvZmlwc19lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMK Ky0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2VuYy5jLmZpcHMJMjAxMi0wNC0y NiAxODowMDo1MS40MDU3Njk0MDggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlw cy9maXBzX2VuYy5jCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA1NzY5NDA4ICswMjAwCitAQCAtMCww ICsxLDE5MSBAQAorKy8qIGZpcGUvZXZwL2ZpcHNfZW5jLmMgKi8KKysvKiBDb3B5cmlnaHQgKEMp IDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRz IHJlc2VydmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlv biB3cml0dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRo ZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2Nh cGVzIFNTTC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBh bmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBs eSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwg UlNBLAorKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4g IFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRp b24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhh dCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysg KiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmln aHQgbm90aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJ ZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJl IGdpdmVuIGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhl IGxpYnJhcnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwg bWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxp bmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisr ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhp YyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQu Y29tKSIKKysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlm IHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3Qg Y3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2lu ZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAg ICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUg YW4gYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysg KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF CisrICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQg ZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBv cgorKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0 aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3Ro ZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExp Y2VuY2UuXQorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrY29uc3QgRVZQX0NJUEhFUiAqRklQU19n ZXRfY2lwaGVyYnluaWQoaW50IG5pZCkKKysJeworKwlzd2l0Y2ggKG5pZCkKKysJCXsKKysJCWNh c2UgTklEX2Flc18xMjhfY2JjOgorKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2NiYygpOworKworKwkJ Y2FzZSBOSURfYWVzXzEyOF9jY206CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY2NtKCk7CisrCisr CQljYXNlIE5JRF9hZXNfMTI4X2NmYjE6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY2ZiMSgpOwor KworKwkJY2FzZSBOSURfYWVzXzEyOF9jZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY2Zi MTI4KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X2NmYjg6CisrCQlyZXR1cm4gRVZQX2Flc18x MjhfY2ZiOCgpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9jdHI6CisrCQlyZXR1cm4gRVZQX2Fl c18xMjhfY3RyKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X2VjYjoKKysJCXJldHVybiBFVlBf YWVzXzEyOF9lY2IoKTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfZ2NtOgorKwkJcmV0dXJuIEVW UF9hZXNfMTI4X2djbSgpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9vZmIxMjg6CisrCQlyZXR1 cm4gRVZQX2Flc18xMjhfb2ZiKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X3h0czoKKysJCXJl dHVybiBFVlBfYWVzXzEyOF94dHMoKTsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfY2JjOgorKwkJ cmV0dXJuIEVWUF9hZXNfMTkyX2NiYygpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9jY206Cisr CQlyZXR1cm4gRVZQX2Flc18xOTJfY2NtKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2NmYjE6 CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfY2ZiMSgpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9j ZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfY2ZiMTI4KCk7CisrCisrCQljYXNlIE5JRF9h ZXNfMTkyX2NmYjg6CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfY2ZiOCgpOworKworKwkJY2FzZSBO SURfYWVzXzE5Ml9jdHI6CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfY3RyKCk7CisrCisrCQljYXNl IE5JRF9hZXNfMTkyX2VjYjoKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9lY2IoKTsKKysKKysJCWNh c2UgTklEX2Flc18xOTJfZ2NtOgorKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2djbSgpOworKworKwkJ Y2FzZSBOSURfYWVzXzE5Ml9vZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfb2ZiKCk7Cisr CisrCQljYXNlIE5JRF9hZXNfMjU2X2NiYzoKKysJCXJldHVybiBFVlBfYWVzXzI1Nl9jYmMoKTsK KysKKysJCWNhc2UgTklEX2Flc18yNTZfY2NtOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NjbSgp OworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9jZmIxOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2Nm YjEoKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfY2ZiMTI4OgorKwkJcmV0dXJuIEVWUF9hZXNf MjU2X2NmYjEyOCgpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9jZmI4OgorKwkJcmV0dXJuIEVW UF9hZXNfMjU2X2NmYjgoKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfY3RyOgorKwkJcmV0dXJu IEVWUF9hZXNfMjU2X2N0cigpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9lY2I6CisrCQlyZXR1 cm4gRVZQX2Flc18yNTZfZWNiKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2djbToKKysJCXJl dHVybiBFVlBfYWVzXzI1Nl9nY20oKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfb2ZiMTI4Ogor KwkJcmV0dXJuIEVWUF9hZXNfMjU2X29mYigpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl94dHM6 CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfeHRzKCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlX2Vj YjoKKysJCXJldHVybiBFVlBfZGVzX2VkZSgpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfZWNi OgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlMygpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfY2Jj OgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlM19jYmMoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGUz X2NmYjE6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUzX2NmYjEoKTsKKysKKysJCWNhc2UgTklEX2Rl c19lZGUzX2NmYjY0OgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlM19jZmI2NCgpOworKworKwkJY2Fz ZSBOSURfZGVzX2VkZTNfY2ZiODoKKysJCXJldHVybiBFVlBfZGVzX2VkZTNfY2ZiOCgpOworKwor KwkJY2FzZSBOSURfZGVzX2VkZTNfb2ZiNjQ6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUzX29mYigp OworKworKwkJY2FzZSBOSURfZGVzX2VkZV9jYmM6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGVfY2Jj KCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlX2NmYjY0OgorKwkJcmV0dXJuIEVWUF9kZXNfZWRl X2NmYjY0KCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlX29mYjY0OgorKwkJcmV0dXJuIEVWUF9k ZXNfZWRlX29mYigpOworKworKwkJZGVmYXVsdDoKKysJCXJldHVybiBOVUxMOworKworKwkJfQor Kwl9CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzLmguZmlwcyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzLmgKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlw dG8vZmlwcy9maXBzLmguZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNTc2OTQwOCArMDIwMAor KysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHMuaAkyMDEyLTA0LTI2IDE4OjAwOjUx LjQwNTc2OTQwOCArMDIwMAorQEAgLTAsMCArMSwyNzkgQEAKKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv CisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5z c2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoK KysgKi8KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysKKysjaWZuZGVmIE9QRU5T U0xfRklQUworKyNlcnJvciBGSVBTIGlzIGRpc2FibGVkLgorKyNlbmRpZgorKworKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2Vu ZGlmCisrCisrc3RydWN0IGRzYV9zdDsKKytzdHJ1Y3QgcnNhX3N0OworK3N0cnVjdCBldnBfcGtl eV9zdDsKKytzdHJ1Y3QgZW52X21kX3N0OworK3N0cnVjdCBlbnZfbWRfY3R4X3N0OworK3N0cnVj dCBldnBfY2lwaGVyX3N0OworK3N0cnVjdCBldnBfY2lwaGVyX2N0eF9zdDsKKytzdHJ1Y3QgZGhf bWV0aG9kOworK3N0cnVjdCBDTUFDX0NUWF9zdDsKKytzdHJ1Y3QgaG1hY19jdHhfc3Q7CisrCisr aW50IEZJUFNfbW9kdWxlX21vZGVfc2V0KGludCBvbm9mZiwgY29uc3QgY2hhciAqYXV0aCk7Cisr aW50IEZJUFNfbW9kdWxlX21vZGUodm9pZCk7CisrY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNr KHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0KHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9zaGExKHZvaWQpOworK2ludCBGSVBTX3Nl bGZ0ZXN0X3NoYTEodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3Rfc2hhMih2b2lkKTsKKyt2b2lk IEZJUFNfY29ycnVwdF9hZXModm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfYWVzX2NjbSh2b2lk KTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXNfZ2NtKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0 X2Flc194dHModm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfYWVzKHZvaWQpOworK3ZvaWQgRklQ U19jb3JydXB0X2Rlcyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9kZXModm9pZCk7Cisrdm9p ZCBGSVBTX2NvcnJ1cHRfcnNhKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4o dm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfcnNhKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0 X2RzYSh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOworK2ludCBG SVBTX3NlbGZ0ZXN0X2RzYSh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9ybmcodm9pZCk7Cisr dm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKTsKKyt2b2lkIEZJUFNfeDkzMV9zdGljayhpbnQgb25v ZmYpOworK3ZvaWQgRklQU19kcmJnX3N0aWNrKGludCBvbm9mZik7CisraW50IEZJUFNfc2VsZnRl c3Rfcm5nKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X3g5MzEodm9pZCk7CisraW50IEZJUFNf c2VsZnRlc3RfaG1hYyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9kcmJnKHZvaWQpOworK2lu dCBGSVBTX3NlbGZ0ZXN0X2RyYmdfYWxsKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2NtYWMo dm9pZCk7CisrCisrdm9pZCBGSVBTX2dldF90aW1ldmVjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5z aWduZWQgbG9uZyAqcGN0cik7CisrCisrI2RlZmluZSBGSVBTX0VSUk9SX0lHTk9SRUQoYWxnKSBP cGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAorKwkJYWxnICIgcHJldmlvdXMgRklQUyBm b3JiaWRkZW4gYWxnb3JpdGhtIGVycm9yIGlnbm9yZWQiKTsKKysKKytpbnQgZmlwc19wa2V5X3Np Z25hdHVyZV90ZXN0KHN0cnVjdCBldnBfcGtleV9zdCAqcGtleSwKKysJCQljb25zdCB1bnNpZ25l ZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1 bnNpZ25lZCBpbnQga2F0bGVuLAorKwkJCWNvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKmRpZ2VzdCwg dW5zaWduZWQgaW50IG1kX2ZsYWdzLAorKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKTsKKysKKytp bnQgZmlwc19jaXBoZXJfdGVzdChzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3QgKmN0eCwKKysJCQlj b25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAqY2lwaGVyLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmtleSwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKysJCQljb25zdCB1bnNpZ25l ZCBjaGFyICpwbGFpbnRleHQsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwK KysJCQlpbnQgbGVuKTsKKysKKyt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCk7Cisr CisrY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqRklQU19nZXRfZGlnZXN0YnluaWQoaW50IG5pZCk7 CisrCisrY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGlu dCBuaWQpOworKworKworKy8qIEJFR0lOIEVSUk9SIENPREVTICovCisrLyogVGhlIGZvbGxvd2lu ZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNo YW5nZXMKKysgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4g dGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KKysgKi8KKyt2b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5n cyh2b2lkKTsKKysKKysvKiBFcnJvciBjb2RlcyBmb3IgdGhlIEZJUFMgZnVuY3Rpb25zLiAqLwor KworKy8qIEZ1bmN0aW9uIGNvZGVzLiAqLworKyNkZWZpbmUgRklQU19GX0RIX0JVSUxUSU5fR0VO UEFSQU1TCQkJIDEwMAorKyNkZWZpbmUgRklQU19GX0RIX0lOSVQJCQkJCSAxNDgKKysjZGVmaW5l IEZJUFNfRl9EUkJHX1JFU0VFRAkJCQkgMTYyCisrI2RlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5f UEFSQU1HRU4JCQkgMTAxCisrI2RlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4yCQkJ IDEwNworKyNkZWZpbmUgRklQU19GX0RTQV9ET19TSUdOCQkJCSAxMDIKKysjZGVmaW5lIEZJUFNf Rl9EU0FfRE9fVkVSSUZZCQkJCSAxMDMKKysjZGVmaW5lIEZJUFNfRl9FQ0RIX0NPTVBVVEVfS0VZ CQkJCSAxNjMKKysjZGVmaW5lIEZJUFNfRl9FQ0RTQV9ET19TSUdOCQkJCSAxNjQKKysjZGVmaW5l IEZJUFNfRl9FQ0RTQV9ET19WRVJJRlkJCQkJIDE2NQorKyNkZWZpbmUgRklQU19GX0VDX0tFWV9H RU5FUkFURV9LRVkJCQkgMTY2CisrI2RlZmluZSBGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgJCQkg MTI0CisrI2RlZmluZSBGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgJCQkgMTI1CisrI2RlZmluZSBG SVBTX0ZfRklQU19DSEVDS19EU0EJCQkJIDEwNAorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tf RFNBX1BSTkcJCQkgMTUxCisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19FQwkJCQkgMTQyCisr I2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19FQ19QUk5HCQkJIDE1MgorKyNkZWZpbmUgRklQU19G X0ZJUFNfQ0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5UCQkgMTA1CisrI2RlZmluZSBGSVBTX0ZfRklQ U19DSEVDS19SU0EJCQkJIDEwNgorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBX1BSTkcJ CQkgMTUwCisrI2RlZmluZSBGSVBTX0ZfRklQU19DSVBIRVIJCQkJIDE2MAorKyNkZWZpbmUgRklQ U19GX0ZJUFNfQ0lQSEVSSU5JVAkJCQkgMTQzCisrI2RlZmluZSBGSVBTX0ZfRklQU19DSVBIRVJf Q1RYX0NUUkwJCQkgMTYxCisrI2RlZmluZSBGSVBTX0ZfRklQU19ESUdFU1RGSU5BTAkJCQkgMTU4 CisrI2RlZmluZSBGSVBTX0ZfRklQU19ESUdFU1RJTklUCQkJCSAxMjgKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX0RJR0VTVFVQREFURQkJCSAxNTkKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQllU RVMJCQkJIDEzMQorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19DSEVDSwkJCQkgMTQ2CisrI2Rl ZmluZSBGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RFU1QJCQkgMTMyCisrI2RlZmluZSBGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLCQkJIDEzNgorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19H RU5FUkFURQkJCSAxMzQKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfSU5JVAkJCQkgMTM1Cisr I2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFCQkJIDEzOAorKyNkZWZpbmUgRklQ U19GX0ZJUFNfRFJCR19ORVcJCQkJIDEzOQorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19SRVNF RUQJCQkJIDE0MAorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FUCQkJIDE0MQor KyNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX0NIRUNLCQkvKiB1bnVzZWQgKi8JIDEwNworKyNkZWZp bmUgRklQU19GX0ZJUFNfRFNBX1NJR05fRElHRVNUCQkJIDE1NAorKyNkZWZpbmUgRklQU19GX0ZJ UFNfRFNBX1ZFUklGWV9ESUdFU1QJCQkgMTU1CisrI2RlZmluZSBGSVBTX0ZfRklQU19HRVRfRU5U Uk9QWQkJCQkgMTQ3CisrI2RlZmluZSBGSVBTX0ZfRklQU19NT0RFX1NFVAkJLyogdW51c2VkICov CSAxMDgKKysjZGVmaW5lIEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVAkJCSAxMDgKKysjZGVm aW5lIEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QJCQkgMTA5CisrI2RlZmluZSBGSVBT X0ZfRklQU19SQU5EX0FERAkJCQkgMTM3CisrI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX0JZVEVT CQkJCSAxMjIKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfUFNFVURPX0JZVEVTCQkJIDE2Nwor KyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TRUVECQkJCSAxNjgKKysjZGVmaW5lIEZJUFNfRl9G SVBTX1JBTkRfU0VUX01FVEhPRAkJCSAxMjYKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU1RB VFVTCQkJCSAxMjcKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JTQV9TSUdOX0RJR0VTVAkJCSAxNTYK KysjZGVmaW5lIEZJUFNfRl9GSVBTX1JTQV9WRVJJRllfRElHRVNUCQkJIDE1NworKyNkZWZpbmUg RklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTCQkJIDExMAorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VM RlRFU1RfQUVTX0NDTQkJCSAxNDUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19H Q00JCQkgMTI5CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfWFRTCQkJIDE0NAor KyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQ01BQwkJCSAxMzAKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX1NFTEZURVNUX0RFUwkJCSAxMTEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNU X0RTQQkJCSAxMTIKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0VDRFNBCQkJIDEzMwor KyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQwkJCSAxMTMKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX1NFTEZURVNUX1JORwkvKiB1bnVzZWQgKi8JIDExNAorKyNkZWZpbmUgRklQU19GX0ZJ UFNfU0VMRlRFU1RfU0hBMQkJCSAxMTUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5 MzEJCQkgMTE0CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRVRfUFJOR19LRVkJCQkgMTUzCisrI2Rl ZmluZSBGSVBTX0ZfSEFTSF9GSU5BTAkJCQkgMTIzCisrI2RlZmluZSBGSVBTX0ZfUlNBX0JVSUxU SU5fS0VZR0VOCQkJIDExNgorKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfSU5JVAkJCQkgMTQ5Cisr I2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQJCQkgMTE3CisrI2RlZmluZSBG SVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQJCQkgMTE4CisrI2RlZmluZSBGSVBTX0ZfUlNB X0VBWV9QVUJMSUNfREVDUllQVAkJCSAxMTkKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJ Q19FTkNSWVBUCQkJIDEyMAorKyNkZWZpbmUgRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9F WAkJCSAxMjEKKysjZGVmaW5lIEZJUFNfRl9TU0xFQVlfUkFORF9CWVRFUwkvKiB1bnVzZWQgKi8J IDEyMgorKworKy8qIFJlYXNvbiBjb2Rlcy4gKi8KKysjZGVmaW5lIEZJUFNfUl9BRERJVElPTkFM X0lOUFVUX0VSUk9SX1VOREVURUNURUQJIDE1MAorKyNkZWZpbmUgRklQU19SX0FERElUSU9OQUxf SU5QVVRfVE9PX0xPTkcJCSAxMjUKKysjZGVmaW5lIEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRF RAkJCSAxMzQKKysjZGVmaW5lIEZJUFNfUl9BVVRIRU5USUNBVElPTl9GQUlMVVJFCQkJIDE1MQor KyNkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRQkJLyogdW51c2VkICovCSAxMDMKKysjZGVm aW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVfRElHRVNUCS8qIHVudXNlZCAqLwkgMTA0CisrI2Rl ZmluZSBGSVBTX1JfQ09OVFJBRElDVElOR19FVklERU5DRQkJCSAxMTQKKysjZGVmaW5lIEZJUFNf Ul9EUkJHX05PVF9JTklUSUFMSVNFRAkJCSAxNTIKKysjZGVmaW5lIEZJUFNfUl9EUkJHX1NUVUNL CQkJCSAxMDMKKysjZGVmaW5lIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQJCQkgMTA0 CisrI2RlZmluZSBGSVBTX1JfRU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQJCSAxMDUK KysjZGVmaW5lIEZJUFNfUl9FTlRST1BZX1NPVVJDRV9TVFVDSwkJCSAxNDIKKysjZGVmaW5lIEZJ UFNfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRwkJCSAxMTUKKysjZGVmaW5lIEZJUFNfUl9FUlJP Ul9JTlNUQU5USUFUSU5HX0RSQkcJCQkgMTI3CisrI2RlZmluZSBGSVBTX1JfRVJST1JfUkVUUklF VklOR19BRERJVElPTkFMX0lOUFVUCSAxMjQKKysjZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVW SU5HX0VOVFJPUFkJCQkgMTIyCisrI2RlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19OT05D RQkJCSAxNDAKKysjZGVmaW5lIEZJUFNfUl9FWEVfRElHRVNUX0RPRVNfTk9UX01BVENIICAgLyog dW51c2VkICovCSAxMDUKKysjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRD SAkJIDExMAorKyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJ Q19SRUxPQ0FURUQgMTExCisrI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFU Q0hfU0VHTUVOVF9BTElBU0lORyAxMTIKKysjZGVmaW5lIEZJUFNfUl9GSVBTX01PREVfQUxSRUFE WV9TRVQJCQkgMTAyCisrI2RlZmluZSBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQJCQkgMTA2 CisrI2RlZmluZSBGSVBTX1JfRlVOQ1RJT05fRVJST1IJCQkJIDExNgorKyNkZWZpbmUgRklQU19S X0dFTkVSQVRFX0VSUk9SCQkJCSAxMzcKKysjZGVmaW5lIEZJUFNfUl9HRU5FUkFURV9FUlJPUl9V TkRFVEVDVEVECQkgMTE4CisrI2RlZmluZSBGSVBTX1JfSU5TVEFOVElBVEVfRVJST1IJCQkgMTE5 CisrI2RlZmluZSBGSVBTX1JfSU5TVUZGSUNJRU5UX1NFQ1VSSVRZX1NUUkVOR1RICQkgMTIwCisr I2RlZmluZSBGSVBTX1JfSU5URVJOQUxfRVJST1IJCQkJIDEyMQorKyNkZWZpbmUgRklQU19SX0lO VkFMSURfS0VZX0xFTkdUSAkJCSAxMDkKKysjZGVmaW5lIEZJUFNfUl9JTlZBTElEX1BBUkFNRVRF UlMJCQkgMTQ0CisrI2RlZmluZSBGSVBTX1JfSU5fRVJST1JfU1RBVEUJCQkJIDEyMworKyNkZWZp bmUgRklQU19SX0tFWV9UT09fU0hPUlQJCQkJIDEwOAorKyNkZWZpbmUgRklQU19SX05PTkNFX0VS Uk9SX1VOREVURUNURUQJCQkgMTQ5CisrI2RlZmluZSBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9ECQkJ CSAxMDAKKysjZGVmaW5lIEZJUFNfUl9OT1BSX1RFU1QxX0ZBSUxVUkUJCQkgMTQ1CisrI2RlZmlu ZSBGSVBTX1JfTk9QUl9URVNUMl9GQUlMVVJFCQkJIDE0NgorKyNkZWZpbmUgRklQU19SX05PVF9J TlNUQU5USUFURUQJCQkJIDEyNgorKyNkZWZpbmUgRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVE CQkJIDEwNworKyNkZWZpbmUgRklQU19SX1BFUlNPTkFMSVNBVElPTl9FUlJPUl9VTkRFVEVDVEVE CQkgMTI4CisrI2RlZmluZSBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORwkJ IDEyOQorKyNkZWZpbmUgRklQU19SX1BSTkdfU1RSRU5HVEhfVE9PX0xPVwkJCSAxNDMKKysjZGVm aW5lIEZJUFNfUl9QUl9URVNUMV9GQUlMVVJFCQkJCSAxNDcKKysjZGVmaW5lIEZJUFNfUl9QUl9U RVNUMl9GQUlMVVJFCQkJCSAxNDgKKysjZGVmaW5lIEZJUFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJP Ul9VTkRFVEVDVEVECQkgMTMwCisrI2RlZmluZSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9S X0RSQkcJCSAxMzEKKysjZGVmaW5lIEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUgkJCSAxMzIK KysjZGVmaW5lIEZJUFNfUl9SRVNFRURfRVJST1IJCQkJIDEzMworKyNkZWZpbmUgRklQU19SX1JT QV9ERUNSWVBUX0VSUk9SCS8qIHVudXNlZCAqLwkgMTE1CisrI2RlZmluZSBGSVBTX1JfUlNBX0VO Q1JZUFRfRVJST1IJLyogdW51c2VkICovCSAxMTYKKysjZGVmaW5lIEZJUFNfUl9TRUxGVEVTVF9G QUlMRUQJCQkJIDEwMQorKyNkZWZpbmUgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUJCQkJIDEzNQor KyNkZWZpbmUgRklQU19SX1NUUkVOR1RIX0VSUk9SX1VOREVURUNURUQJCSAxMzYKKysjZGVmaW5l IEZJUFNfUl9URVNUX0ZBSUxVUkUJCQkJIDExNworKyNkZWZpbmUgRklQU19SX1VOSU5TVEFOVElB VEVfRVJST1IJCQkgMTQxCisrI2RlZmluZSBGSVBTX1JfVU5JTlNUQU5USUFURV9aRVJPSVNFX0VS Uk9SCQkgMTM4CisrI2RlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfRFJCR19UWVBFCQkJIDEzOQor KyNkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JNCQkJIDExMworKworKyNpZmRlZiAg X19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2Ny eXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRv L2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNTc2 OTQwOCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxm dGVzdC5jCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA1NzY5NDA4ICswMjAwCitAQCAtMCwwICsxLDEz NyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4K KysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrdHlwZWRlZiBzdHJ1Y3QgeworKwljb25zdCBFVlBf TUQgKigqYWxnKSh2b2lkKTsKKysJY29uc3QgY2hhciAqa2V5LCAqaXY7CisrCXVuc2lnbmVkIGNo YXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXTsKKyt9IEhNQUNfS0FUOworKworK3N0YXRpYyBjb25z dCBITUFDX0tBVCB2ZWN0b3JbXSA9IHsKKysgICAgewlFVlBfc2hhMSwKKysJLyogZnJvbSBodHRw Oi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9maXBzMTk4L2ZpcHMtMTk4YS5wZGYg Ki8KKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHgwOSww eDIyLDB4ZDMsMHg0MCwweDVmLDB4YWEsMHgzZCwweDE5LAorKwkgIDB4NGYsMHg4MiwweGE0LDB4 NTgsMHgzMCwweDczLDB4N2QsMHg1YywKKysJICAweGM2LDB4YzcsMHg1ZCwweDI0IH0KKysgICAg fSwKKysgICAgewlFVlBfc2hhMjI0LAorKwkvKiBqdXN0IGtlZXAgZXh0ZW5kaW5nIHRoZSBhYm92 ZS4uLiAqLworKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAw eGRkLDB4ZWYsMHgwYSwweDQwLDB4Y2IsMHg3ZCwweDUwLDB4ZmIsCisrCSAgMHg2ZSwweGU2LDB4 Y2UsMHhhMSwweDIwLDB4YmEsMHgyNiwweGFhLAorKwkgIDB4MDgsMHhmMywweDA3LDB4NzUsMHg4 NywweGI4LDB4YWQsMHgxYiwKKysJICAweDhjLDB4OGQsMHgxMiwweGM3IH0KKysgICAgfSwKKysg ICAgewlFVlBfc2hhMjU2LAorKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMy IiwKKysJeyAweGI4LDB4ZjIsMHgwZCwweGI1LDB4NDEsMHhlYSwweDQzLDB4MDksCisrCSAgMHhj YSwweDRlLDB4YTksMHgzOCwweDBjLDB4ZDAsMHhlOCwweDM0LAorKwkgIDB4ZjcsMHgxZiwweGJl LDB4OTEsMHg3NCwweGEyLDB4NjEsMHgzOCwKKysJICAweDBkLDB4YzEsMHg3ZSwweGFlLDB4NmEs MHgzNCwweDUxLDB4ZDkgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGEzODQsCisrCSIwMTIzNDU2 Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4MDgsMHhiYywweGIwLDB4ZGEs MHg0OSwweDFlLDB4ODcsMHhhZCwKKysJICAweDlhLDB4MWQsMHg2YSwweGNlLDB4MjMsMHhjNSww eDBiLDB4ZjYsCisrCSAgMHhiNywweDE4LDB4MDYsMHhhNSwweDc3LDB4Y2QsMHg0OSwweDA0LAor KwkgIDB4ODksMHhmMSwweGU2LDB4MjMsMHg0NCwweDUxLDB4NTEsMHg5ZiwKKysJICAweDg1LDB4 NTYsMHg4MCwweDc5LDB4MGMsMHhiZCwweDRkLDB4NTAsCisrCSAgMHhhNCwweDVmLDB4MjksMHhl MywweDkzLDB4ZjAsMHhlOCwweDdmIH0KKysgICAgfSwKKysgICAgewlFVlBfc2hhNTEyLAorKwki MDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweDgwLDB4OWQsMHg0 NCwweDA1LDB4N2MsMHg1YiwweDk1LDB4NDEsCisrCSAgMHgwNSwweGJkLDB4MDQsMHgxMywweDE2 LDB4ZGIsMHgwZiwweGFjLAorKwkgIDB4NDQsMHhkNSwweGE0LDB4ZDUsMHhkMCwweDg5LDB4MmIs MHhkMCwKKysJICAweDRlLDB4ODYsMHg2NCwweDEyLDB4YzAsMHg5MCwweDc3LDB4NjgsCisrCSAg MHhmMSwweDg3LDB4YjcsMHg3YywweDRmLDB4YWUsMHgyYywweDJmLAorKwkgIDB4MjEsMHhhNSww eGI1LDB4NjUsMHg5YSwweDRmLDB4NGIsMHhhNywKKysJICAweDQ3LDB4MDIsMHhhMywweGRlLDB4 OWIsMHg1MSwweGYxLDB4NDUsCisrCSAgMHhiZCwweDRmLDB4MjUsMHgyNywweDQyLDB4OTgsMHg5 OSwweDA1IH0KKysgICAgfSwKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWMoKQorKyAg ICB7CisrICAgIGludCBuOworKyAgICB1bnNpZ25lZCBpbnQgICAgb3V0bGVuOworKyAgICB1bnNp Z25lZCBjaGFyICAgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIGNvbnN0IEVWUF9NRCAgICpt ZDsKKysgICAgY29uc3QgSE1BQ19LQVQgKnQ7CisrCisrICAgIGZvcihuPTAsdD12ZWN0b3I7IG48 c2l6ZW9mKHZlY3Rvcikvc2l6ZW9mKHZlY3RvclswXSk7IG4rKyx0KyspCisrCXsKKysJbWQgPSAo KnQtPmFsZykoKTsKKysJSE1BQyhtZCx0LT5rZXksc3RybGVuKHQtPmtleSksCisrCQkoY29uc3Qg dW5zaWduZWQgY2hhciAqKXQtPml2LHN0cmxlbih0LT5pdiksCisrCQlvdXQsJm91dGxlbik7Cisr CisrCWlmKG1lbWNtcChvdXQsdC0+a2F2YWwsb3V0bGVuKSkKKysJICAgIHsKKysJICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJ ICAgIHJldHVybiAwOworKwkgICAgfQorKwl9CisrICAgIHJldHVybiAxOworKyAgICB9CisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaC5maXBz IG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oCistLS0gb3BlbnNzbC0xLjAu MWIvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmguZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNTc2 OTQwOCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oCTIw MTItMDQtMjYgMTg6MDA6NTEuNDA1NzY5NDA4ICswMjAwCitAQCAtMCwwICsxLDcxIEBACisrLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9u LgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9w ZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K KysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRl ZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysjZGVmaW5lIEZJUFNf TUFYX0NJUEhFUl9URVNUX1NJWkUJMzIKKysjZGVmaW5lIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50 KGtleSwgY29tcCwgcHJlKSBcCisrCWtleS0+Y29tcCA9IEJOX2JpbjJibihwcmUjI18jI2NvbXAs IHNpemVvZihwcmUjI18jI2NvbXApLCBrZXktPmNvbXApOyBcCisrCWlmICgha2V5LT5jb21wKSBc CisrCQlnb3RvIGVycgorKworKyNkZWZpbmUgZmlwc19wb3N0X3N0YXJ0ZWQoaWQsIHN1YmlkLCBl eCkgMQorKyNkZWZpbmUgZmlwc19wb3N0X3N1Y2Nlc3MoaWQsIHN1YmlkLCBleCkgMQorKyNkZWZp bmUgZmlwc19wb3N0X2ZhaWxlZChpZCwgc3ViaWQsIGV4KSAxCisrI2RlZmluZSBmaXBzX3Bvc3Rf Y29ycnVwdChpZCwgc3ViaWQsIGV4KSAxCisrI2RlZmluZSBmaXBzX3Bvc3Rfc3RhdHVzKCkgMQor KworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX21kLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vZmlwcy9maXBzX21kLmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBz X21kLmMuZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNTc2OTQwOCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfbWQuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNTc2 OTQwOCArMDIwMAorQEAgLTAsMCArMSwxNDUgQEAKKysvKiBmaXBzL2V2cC9maXBzX21kLmMgKi8K KysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNv bSkKKysgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFu IFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0 c29mdC5jb20pLgorKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBj b25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJl ZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKysgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlv biwgYmUgaXQgdGhlIFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBq dXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdp dGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVy bXMKKysgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNv ZnQuY29tKS4KKysgKiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBh cyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8g YmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVy aWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBv ZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUg Zm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBk b2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2Fn ZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAq ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91 bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycg Y2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBi ZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5 b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhl cmVvZikgZnJvbSAKKysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUp IHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0 LmNvbSkiCisrICogCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5H IGBgQVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUworKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysg KiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBh dmFpbGFibGUgdmVyc2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBi ZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBh bmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5n IHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAxOTk4LTIwMDEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0Ogor KyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVu c3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAq ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhp YyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20p LiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVk c29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysvKiBNaW5pbWFsIHN0YW5k YWxvbmUgRklQUyB2ZXJzaW9ucyBvZiBEaWdlc3Qgb3BlcmF0aW9ucyAqLworKworKyNkZWZpbmUg T1BFTlNTTF9GSVBTQVBJCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmlu Zy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrCisrY29uc3QgRVZQX01EICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKQorKwl7 CisrCXN3aXRjaCAobmlkKQorKwkJeworKwkJY2FzZSBOSURfc2hhMToKKysJCXJldHVybiBFVlBf c2hhMSgpOworKworKwkJY2FzZSBOSURfc2hhMjI0OgorKwkJcmV0dXJuIEVWUF9zaGEyMjQoKTsK KysKKysJCWNhc2UgTklEX3NoYTI1NjoKKysJCXJldHVybiBFVlBfc2hhMjU2KCk7CisrCisrCQlj YXNlIE5JRF9zaGEzODQ6CisrCQlyZXR1cm4gRVZQX3NoYTM4NCgpOworKworKwkJY2FzZSBOSURf c2hhNTEyOgorKwkJcmV0dXJuIEVWUF9zaGE1MTIoKTsKKysKKysJCWRlZmF1bHQ6CisrCQlyZXR1 cm4gTlVMTDsKKysJCX0KKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMv Zmlwc19wb3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYwor LS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMJMjAxMi0wNC0y NiAxODowMDo1MS40MDY3Njk0MjkgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlw cy9maXBzX3Bvc3QuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNjc2OTQyOSArMDIwMAorQEAgLTAs MCArMSwyMDUgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysg KiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisr ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjZGVmaW5lIE9QRU5T U0xfRklQU0FQSQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4K KysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrLyogUG93ZXIgb24gc2VsZiB0ZXN0IChQT1NU KSBzdXBwb3J0IGZ1bmN0aW9ucyAqLworKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj aW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrLyogUnVuIGFsbCBzZWxmdGVzdHMgKi8KKytpbnQg RklQU19zZWxmdGVzdCh2b2lkKQorKwl7CisrCWludCBydiA9IDE7CisrCWlmICghRklQU19zZWxm dGVzdF9kcmJnKCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxmdGVzdF94OTMxKCkpCisr CQlydiA9IDA7CisrICAgIAlpZiAoIUZJUFNfc2VsZnRlc3Rfc2hhMSgpKQorKwkJcnYgPSAwOwor KyAgICAJaWYgKCFGSVBTX3NlbGZ0ZXN0X3NoYTIoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBT X3NlbGZ0ZXN0X2htYWMoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2NtYWMo KSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2FlcygpKQorKwkJcnYgPSAwOwor KwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX2NjbSgpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNf c2VsZnRlc3RfYWVzX2djbSgpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVz X3h0cygpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfZGVzKCkpCisrCQlydiA9 IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9yc2EoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBT X3NlbGZ0ZXN0X2RzYSgpKQorKwkJcnYgPSAwOworKwlyZXR1cm4gcnY7CisrCX0KKysKKysvKiBH ZW5lcmFsaXplZCBwdWJsaWMga2V5IHRlc3Qgcm91dGluZS4gU2lnbnMgYW5kIHZlcmlmaWVzIHRo ZSBkYXRhCisrICogc3VwcGxpZWQgaW4gdGJzIHVzaW5nIG1lc2FnZSBkaWdlc3QgbWQgYW5kIHNl dHRpbmcgb3B0aW9uIGRpZ2VzdAorKyAqIGZsYWdzIG1kX2ZsYWdzLiBJZiB0aGUgJ2thdCcgcGFy YW1ldGVyIGlzIG5vdCBOVUxMIGl0IHdpbGwKKysgKiBhZGRpdGlvbmFsbHkgY2hlY2sgdGhlIHNp Z25hdHVyZSBtYXRjaGVzIGl0OiBhIGtub3duIGFuc3dlciB0ZXN0CisrICogVGhlIHN0cmluZyAi ZmFpbF9zdHIiIGlzIHVzZWQgZm9yIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIGluIGNhc2UKKysg KiBvZiBmYWlsdXJlLiBJZiAicGtleSIgaXMgTlVMTCBqdXN0IHBlcmZvcm0gYSBtZXNzYWdlIGRp Z2VzdCBjaGVjay4KKysgKi8KKysKKytpbnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KEVWUF9Q S0VZICpwa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKKysJ CQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBrYXRsZW4sCisrCQkJY29u c3QgRVZQX01EICpkaWdlc3QsIHVuc2lnbmVkIGludCBtZF9mbGFncywKKysJCQljb25zdCBjaGFy ICpmYWlsX3N0cikKKysJewkKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgc2lndG1w WzI1Nl0sICpzaWcgPSBzaWd0bXA7CisrCXVuc2lnbmVkIGludCBzaWdsZW47CisrCUVWUF9NRF9D VFggbWN0eDsKKysJRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysKKysJaWYgKGRpZ2VzdCA9PSBO VUxMKQorKwkJZGlnZXN0ID0gRVZQX3NoYTI1NigpOworKworKwlpZiAoKHBrZXktPnR5cGUgPT0g RVZQX1BLRVlfUlNBKQorKwkJJiYgKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSA+IHNpemVvZihz aWd0bXApKSkKKysJCXsKKysJCXNpZyA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHBrZXktPnBr ZXkucnNhKSk7CisrCQlpZiAoIXNpZykKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19Q S0VZX1NJR05BVFVSRV9URVNULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKysJCQlyZXR1cm4gMDsK KysJCQl9CisrCQl9CisrCisrCWlmICh0YnNsZW4gPT0gLTEpCisrCQl0YnNsZW4gPSBzdHJsZW4o KGNoYXIgKil0YnMpOworKworKwlpZiAobWRfZmxhZ3MpCisrCQlFVlBfTURfQ1RYX3NldF9mbGFn cygmbWN0eCwgbWRfZmxhZ3MpOworKworKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgZGln ZXN0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgs IHRicywgdGJzbGVuKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25GaW5hbCgmbWN0 eCwgc2lnLCAmc2lnbGVuLCBwa2V5KSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmIChrYXQgJiYg KChzaWdsZW4gIT0ga2F0bGVuKSB8fCBtZW1jbXAoa2F0LCBzaWcsIGthdGxlbikpKQorKwkJZ290 byBlcnJvcjsKKysKKysJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxM KSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgdGJzLCB0 YnNsZW4pKQorKwkJZ290byBlcnJvcjsKKysJcmV0ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBz aWcsIHNpZ2xlbiwgcGtleSk7CisrCisrCWVycm9yOgorKwlpZiAoc2lnICE9IHNpZ3RtcCkKKysJ CU9QRU5TU0xfZnJlZShzaWcpOworKwlFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKwlpZiAo cmV0ICE9IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RF U1QsRklQU19SX1RFU1RfRkFJTFVSRSk7CisrCQlpZiAoZmFpbF9zdHIpCisrCQkJRVJSX2FkZF9l cnJvcl9kYXRhKDIsICJUeXBlPSIsIGZhaWxfc3RyKTsKKysJCXJldHVybiAwOworKwkJfQorKwly ZXR1cm4gMTsKKysJfQorKworKy8qIEdlbmVyYWxpemVkIHN5bW1ldHJpYyBjaXBoZXIgdGVzdCBy b3V0aW5lLiBFbmNyeXB0IGRhdGEsIHZlcmlmeSByZXN1bHQKKysgKiBhZ2FpbnN0IGtub3duIGFu c3dlciwgZGVjcnlwdCBhbmQgY29tcGFyZSB3aXRoIG9yaWdpbmFsIHBsYWludGV4dC4KKysgKi8K KysKKytpbnQgZmlwc19jaXBoZXJfdGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBFVlBf Q0lQSEVSICpjaXBoZXIsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwK KysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4pCisrCXsK KysJdW5zaWduZWQgY2hhciBwbHRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKKysJdW5z aWduZWQgY2hhciBjaXRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKKysKKysJT1BFTlNT TF9hc3NlcnQobGVuIDw9IEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOworKwltZW1zZXQocGx0 bXAsIDAsIEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOworKwltZW1zZXQoY2l0bXAsIDAsIEZJ UFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOworKworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4 LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDEpIDw9IDApCisrCQlyZXR1cm4gMDsKKysJaWYgKEVW UF9DaXBoZXIoY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCBsZW4pIDw9IDApCisrCQlyZXR1cm4gMDsK KysJaWYgKG1lbWNtcChjaXRtcCwgY2lwaGVydGV4dCwgbGVuKSkKKysJCXJldHVybiAwOworKwlp ZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDApIDw9IDAp CisrCQlyZXR1cm4gMDsKKysJaWYgKEVWUF9DaXBoZXIoY3R4LCBwbHRtcCwgY2l0bXAsIGxlbikg PD0gMCkKKysJCXJldHVybiAwOworKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIGxlbikp CisrCQlyZXR1cm4gMDsKKysJcmV0dXJuIDE7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5 cHRvL2ZpcHMvZmlwc19yYW5kLmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBz X3JhbmQuYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA2NzY5NDI5ICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMJMjAxMi0wNC0yNiAxODowMDo1MS40 MDY3Njk0MjkgKzAyMDAKK0BAIC0wLDAgKzEsNDU3IEBACisrLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBD b3B5cmlnaHQgKGMpIDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz CisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwor KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3Ns Lm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z CisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisr ICovCisrCisrLyoKKysgKiBUaGlzIGlzIGEgRklQUyBhcHByb3ZlZCBBRVMgUFJORyBiYXNlZCBv biBBTlNJIFg5LjMxIEEuMi40LgorKyAqLworKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgor KyNpbmNsdWRlICJlX29zLmgiCisrCisrLyogSWYgd2UgZG9uJ3QgZGVmaW5lIF9YT1BFTl9TT1VS Q0VfRVhURU5ERUQsIHN0cnVjdCB0aW1ldmFsIHdvbid0CisrICAgYmUgZGVmaW5lZCBhbmQgZ2V0 dGltZW9mZGF5KCkgd29uJ3QgYmUgZGVjbGFyZWQgd2l0aCBzdHJpY3QgY29tcGlsZXJzCisrICAg bGlrZSBERUMgQyBpbiBBTlNJIEMgbW9kZS4gICovCisrI2lmbmRlZiBfWE9QRU5fU09VUkNFX0VY VEVOREVECisrI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEKKysjZW5kaWYKKysKKysj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Cisr I2lmICEoZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMikgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19W WFdPUktTKSkKKysjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisrI2VuZGlmCisrI2lmIGRlZmluZWQo T1BFTlNTTF9TWVNfVlhXT1JLUykKKysjIGluY2x1ZGUgPHRpbWUuaD4KKysjZW5kaWYKKysjaW5j bHVkZSA8YXNzZXJ0Lmg+CisrI2lmbmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKyMgaWZkZWYgT1BF TlNTTF9VTklTVEQKKysjICBpbmNsdWRlIE9QRU5TU0xfVU5JU1RECisrIyBlbHNlCisrIyAgaW5j bHVkZSA8dW5pc3RkLmg+CisrIyBlbmRpZgorKyNlbmRpZgorKyNpbmNsdWRlIDxzdHJpbmcuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKwor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKyt2b2lkICpPUEVOU1NMX3N0ZGVycih2b2lkKTsKKysK KysjZGVmaW5lIEFFU19CTE9DS19MRU5HVEgJMTYKKysKKysKKysvKiBBRVMgRklQUyBQUk5HIGlt cGxlbWVudGF0aW9uICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgCisrCXsKKysJaW50IHNlZWRlZDsK KysJaW50IGtleWVkOworKwlpbnQgdGVzdF9tb2RlOworKwlpbnQgc2Vjb25kOworKwlpbnQgZXJy b3I7CisrCXVuc2lnbmVkIGxvbmcgY291bnRlcjsKKysJQUVTX0tFWSBrczsKKysJaW50IHZwb3M7 CisrCS8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBrZXkgaWYgaXQgZXF1YWxzIHNlZWQgbGVuZ3Ro ICovCisrCXVuc2lnbmVkIGNoYXIgdG1wX2tleVtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWdu ZWQgY2hhciBWW0FFU19CTE9DS19MRU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIERUW0FFU19CTE9D S19MRU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIGxhc3RbQUVTX0JMT0NLX0xFTkdUSF07CisrCX0g RklQU19QUk5HX0NUWDsKKysKKytzdGF0aWMgRklQU19QUk5HX0NUWCBzY3R4OworKworK3N0YXRp YyBpbnQgZmlwc19wcm5nX2ZhaWwgPSAwOworKworK3ZvaWQgRklQU194OTMxX3N0aWNrKGludCBv bm9mZikKKysJeworKwlmaXBzX3BybmdfZmFpbCA9IG9ub2ZmOworKwl9CisrCisrdm9pZCBGSVBT X3JuZ19zdGljayh2b2lkKQorKwl7CisrCUZJUFNfeDkzMV9zdGljaygxKTsKKysJfQorKworK3N0 YXRpYyB2b2lkIGZpcHNfcmFuZF9wcm5nX3Jlc2V0KEZJUFNfUFJOR19DVFggKmN0eCkKKysJewor KwljdHgtPnNlZWRlZCA9IDA7CisrCWN0eC0+a2V5ZWQgPSAwOworKwljdHgtPnRlc3RfbW9kZSA9 IDA7CisrCWN0eC0+Y291bnRlciA9IDA7CisrCWN0eC0+c2Vjb25kID0gMDsKKysJY3R4LT5lcnJv ciA9IDA7CisrCWN0eC0+dnBvcyA9IDA7CisrCU9QRU5TU0xfY2xlYW5zZShjdHgtPlYsIEFFU19C TE9DS19MRU5HVEgpOworKwlPUEVOU1NMX2NsZWFuc2UoJmN0eC0+a3MsIHNpemVvZihBRVNfS0VZ KSk7CisrCX0KKysJCisrCisrc3RhdGljIGludCBmaXBzX3NldF9wcm5nX2tleShGSVBTX1BSTkdf Q1RYICpjdHgsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBpbnQga2V5 bGVuKQorKwl7CisrCWlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJeworKwkJRklQU2Vy cihGSVBTX0ZfRklQU19TRVRfUFJOR19LRVksIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJ cmV0dXJuIDA7CisrCQl9CisrCWlmIChrZXlsZW4gIT0gMTYgJiYga2V5bGVuICE9IDI0ICYmIGtl eWxlbiAhPSAzMikKKysJCXsKKysJCS8qIGVycm9yOiBpbnZhbGlkIGtleSBzaXplICovCisrCQly ZXR1cm4gMDsKKysJCX0KKysJQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGtleWxlbiA8PCAzLCAm Y3R4LT5rcyk7CisrCWlmIChrZXlsZW4gPT0gMTYpCisrCQl7CisrCQltZW1jcHkoY3R4LT50bXBf a2V5LCBrZXksIDE2KTsKKysJCWN0eC0+a2V5ZWQgPSAyOworKwkJfQorKwllbHNlCisrCQljdHgt PmtleWVkID0gMTsKKysJY3R4LT5zZWVkZWQgPSAwOworKwljdHgtPnNlY29uZCA9IDA7CisrCXJl dHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBmaXBzX3NldF9wcm5nX3NlZWQoRklQU19QUk5H X0NUWCAqY3R4LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWQsIHVuc2lnbmVkIGludCBz ZWVkbGVuKQorKwl7CisrCXVuc2lnbmVkIGludCBpOworKwlpZiAoIWN0eC0+a2V5ZWQpCisrCQly ZXR1cm4gMDsKKysJLyogSW4gdGVzdCBtb2RlIHNlZWQgaXMganVzdCBzdXBwbGllZCBkYXRhICov CisrCWlmIChjdHgtPnRlc3RfbW9kZSkKKysJCXsKKysJCWlmIChzZWVkbGVuICE9IEFFU19CTE9D S19MRU5HVEgpCisrCQkJcmV0dXJuIDA7CisrCQltZW1jcHkoY3R4LT5WLCBzZWVkLCBBRVNfQkxP Q0tfTEVOR1RIKTsKKysJCWN0eC0+c2VlZGVkID0gMTsKKysJCXJldHVybiAxOworKwkJfQorKwkv KiBPdXRzaWRlIHRlc3QgbW9kZSBYT1Igc3VwcGxpZWQgZGF0YSB3aXRoIGV4aXN0aW5nIHNlZWQg Ki8KKysJZm9yIChpID0gMDsgaSA8IHNlZWRsZW47IGkrKykKKysJCXsKKysJCWN0eC0+VltjdHgt PnZwb3MrK10gXj0gc2VlZFtpXTsKKysJCWlmIChjdHgtPnZwb3MgPT0gQUVTX0JMT0NLX0xFTkdU SCkKKysJCQl7CisrCQkJY3R4LT52cG9zID0gMDsKKysJCQkvKiBTcGVjaWFsIGNhc2UgaWYgZmly c3Qgc2VlZCBhbmQga2V5IGxlbmd0aCBlcXVhbHMKKysgCQkJICogYmxvY2sgc2l6ZSBjaGVjayBr ZXkgYW5kIHNlZWQgZG8gbm90IG1hdGNoLgorKyAJCQkgKi8gCisrCQkJaWYgKGN0eC0+a2V5ZWQg PT0gMikKKysJCQkJeworKwkJCQlpZiAoIW1lbWNtcChjdHgtPnRtcF9rZXksIGN0eC0+ViwgMTYp KQorKwkJCQkJeworKwkJCQkJUkFORGVycihSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVELAorKwkJ CQkJCVJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZKTsKKysJCQkJCXJldHVybiAw OworKwkJCQkJfQorKwkJCQlPUEVOU1NMX2NsZWFuc2UoY3R4LT50bXBfa2V5LCAxNik7CisrCQkJ CWN0eC0+a2V5ZWQgPSAxOworKwkJCQl9CisrCQkJY3R4LT5zZWVkZWQgPSAxOworKwkJCX0KKysJ CX0KKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3Rlc3RfbW9kZShG SVBTX1BSTkdfQ1RYICpjdHgpCisrCXsKKysJaWYgKGN0eC0+a2V5ZWQpCisrCQl7CisrCQlSQU5E ZXJyKFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUsUkFORF9SX1BSTkdfS0VZRUQpOworKwkJcmV0 dXJuIDA7CisrCQl9CisrCWN0eC0+dGVzdF9tb2RlID0gMTsKKysJcmV0dXJuIDE7CisrCX0KKysK KytpbnQgRklQU194OTMxX3Rlc3RfbW9kZSh2b2lkKQorKwl7CisrCXJldHVybiBmaXBzX3NldF90 ZXN0X21vZGUoJnNjdHgpOworKwl9CisrCisraW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCkK KysJeworKwlyZXR1cm4gZmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKKysJfQorKworKworK2lu dCBGSVBTX3g5MzFfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KQorKwl7CisrCWlmICghc2N0eC50 ZXN0X21vZGUpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1g5MzFfU0VUX0RULFJBTkRf Ul9OT1RfSU5fVEVTVF9NT0RFKTsKKysJCXJldHVybiAwOworKwkJfQorKwltZW1jcHkoc2N0eC5E VCwgZHQsIEFFU19CTE9DS19MRU5HVEgpOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBGSVBT X3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KQorKwl7CisrCWlmICghc2N0eC50ZXN0X21v ZGUpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RULFJBTkRfUl9OT1Rf SU5fVEVTVF9NT0RFKTsKKysJCXJldHVybiAwOworKwkJfQorKwltZW1jcHkoc2N0eC5EVCwgZHQs IEFFU19CTE9DS19MRU5HVEgpOworKwlyZXR1cm4gMTsKKysJfQorKworK3ZvaWQgRklQU19nZXRf dGltZXZlYyh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgKnBjdHIpCisrCXsKKysj aWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysJRklMRVRJTUUgZnQ7CisrI2VsaWYgZGVmaW5lZChP UEVOU1NMX1NZU19WWFdPUktTKQorKyAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOworKyNlbHNl CisrCXN0cnVjdCB0aW1ldmFsIHR2OworKyNlbmRpZgorKworKyNpZm5kZWYgR0VUUElEX0lTX01F QU5JTkdMRVNTCisrCXVuc2lnbmVkIGxvbmcgcGlkOworKyNlbmRpZgorKworKyNpZmRlZiBPUEVO U1NMX1NZU19XSU4zMgorKwlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOworKwlidWZbMF0g PSAodW5zaWduZWQgY2hhcikgKGZ0LmR3SGlnaERhdGVUaW1lICYgMHhmZik7CisrCWJ1ZlsxXSA9 ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDgpICYgMHhmZik7CisrCWJ1 ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDE2KSAmIDB4ZmYp OworKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAyNCkg JiAweGZmKTsKKysJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpIChmdC5kd0xvd0RhdGVUaW1lICYg MHhmZik7CisrCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4g OCkgJiAweGZmKTsKKysJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGlt ZSA+PiAxNikgJiAweGZmKTsKKysJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dE YXRlVGltZSA+PiAyNCkgJiAweGZmKTsKKysjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09S S1MpCisrCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cyk7CisrCWJ1ZlswXSA9ICh1 bnNpZ25lZCBjaGFyKSAodHMudHZfc2VjICYgMHhmZik7CisrCWJ1ZlsxXSA9ICh1bnNpZ25lZCBj aGFyKSAoKHRzLnR2X3NlYyA+PiA4KSAmIDB4ZmYpOworKwlidWZbMl0gPSAodW5zaWduZWQgY2hh cikgKCh0cy50dl9zZWMgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFy KSAoKHRzLnR2X3NlYyA+PiAyNCkgJiAweGZmKTsKKysJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIp ICh0cy50dl9uc2VjICYgMHhmZik7CisrCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2 X25zZWMgPj4gOCkgJiAweGZmKTsKKysJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZf bnNlYyA+PiAxNikgJiAweGZmKTsKKysJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZf bnNlYyA+PiAyNCkgJiAweGZmKTsKKysjZWxzZQorKwlnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpOwor KwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKHR2LnR2X3NlYyAmIDB4ZmYpOworKwlidWZbMV0g PSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gOCkgJiAweGZmKTsKKysJYnVmWzJdID0g KHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDE2KSAmIDB4ZmYpOworKwlidWZbM10gPSAo dW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gMjQpICYgMHhmZik7CisrCWJ1Zls0XSA9ICh1 bnNpZ25lZCBjaGFyKSAodHYudHZfdXNlYyAmIDB4ZmYpOworKwlidWZbNV0gPSAodW5zaWduZWQg Y2hhcikgKCh0di50dl91c2VjID4+IDgpICYgMHhmZik7CisrCWJ1Zls2XSA9ICh1bnNpZ25lZCBj aGFyKSAoKHR2LnR2X3VzZWMgPj4gMTYpICYgMHhmZik7CisrCWJ1Zls3XSA9ICh1bnNpZ25lZCBj aGFyKSAoKHR2LnR2X3VzZWMgPj4gMjQpICYgMHhmZik7CisrI2VuZGlmCisrCWJ1Zls4XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKnBjdHIgJiAweGZmKTsKKysJYnVmWzldID0gKHVuc2lnbmVkIGNoYXIp ICgoKnBjdHIgPj4gOCkgJiAweGZmKTsKKysJYnVmWzEwXSA9ICh1bnNpZ25lZCBjaGFyKSAoKCpw Y3RyID4+IDE2KSAmIDB4ZmYpOworKwlidWZbMTFdID0gKHVuc2lnbmVkIGNoYXIpICgoKnBjdHIg Pj4gMjQpICYgMHhmZik7CisrCisrCSgqcGN0cikrKzsKKysKKysKKysjaWZuZGVmIEdFVFBJRF9J U19NRUFOSU5HTEVTUworKwlwaWQ9KHVuc2lnbmVkIGxvbmcpZ2V0cGlkKCk7CisrCWJ1ZlsxMl0g PSAodW5zaWduZWQgY2hhcikgKHBpZCAmIDB4ZmYpOworKwlidWZbMTNdID0gKHVuc2lnbmVkIGNo YXIpICgocGlkID4+IDgpICYgMHhmZik7CisrCWJ1ZlsxNF0gPSAodW5zaWduZWQgY2hhcikgKChw aWQgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlsxNV0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4g MjQpICYgMHhmZik7CisrI2VuZGlmCisrICAgIH0KKysKKytzdGF0aWMgaW50IGZpcHNfcmFuZChG SVBTX1BSTkdfQ1RYICpjdHgsCisrCQkJdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBpbnQg b3V0bGVuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgUltBRVNfQkxPQ0tfTEVOR1RIXSwgSVtBRVNf QkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciB0bXBbQUVTX0JMT0NLX0xFTkdUSF07Cisr CWludCBpOworKwlpZiAoY3R4LT5lcnJvcikKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNf UkFORCxSQU5EX1JfUFJOR19FUlJPUik7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKCFjdHgt PmtleWVkKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9OT19LRVlf U0VUKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWN0eC0+c2VlZGVkKQorKwkJeworKwkJ UkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX05PVF9TRUVERUQpOworKwkJcmV0 dXJuIDA7CisrCQl9CisrCWZvciAoOzspCisrCQl7CisrCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQor KwkJCUZJUFNfZ2V0X3RpbWV2ZWMoY3R4LT5EVCwgJmN0eC0+Y291bnRlcik7CisrCQlBRVNfZW5j cnlwdChjdHgtPkRULCBJLCAmY3R4LT5rcyk7CisrCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NL X0xFTkdUSDsgaSsrKQorKwkJCXRtcFtpXSA9IElbaV0gXiBjdHgtPlZbaV07CisrCQlBRVNfZW5j cnlwdCh0bXAsIFIsICZjdHgtPmtzKTsKKysJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVO R1RIOyBpKyspCisrCQkJdG1wW2ldID0gUltpXSBeIElbaV07CisrCQlBRVNfZW5jcnlwdCh0bXAs IGN0eC0+ViwgJmN0eC0+a3MpOworKwkJLyogQ29udGludW91cyBQUk5HIHRlc3QgKi8KKysJCWlm IChjdHgtPnNlY29uZCkKKysJCQl7CisrCQkJaWYgKGZpcHNfcHJuZ19mYWlsKQorKwkJCQltZW1j cHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCQlpZiAoIW1lbWNtcChSLCBj dHgtPmxhc3QsIEFFU19CTE9DS19MRU5HVEgpKQorKwkJCQl7CisrCSAgICAJCQlSQU5EZXJyKFJB TkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfU1RVQ0spOworKwkJCQljdHgtPmVycm9yID0gMTsK KysJCQkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQor KwkJCX0KKysJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJaWYg KCFjdHgtPnNlY29uZCkKKysJCQl7CisrCQkJY3R4LT5zZWNvbmQgPSAxOworKwkJCWlmICghY3R4 LT50ZXN0X21vZGUpCisrCQkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCWlmIChvdXRsZW4gPD0g QUVTX0JMT0NLX0xFTkdUSCkKKysJCQl7CisrCQkJbWVtY3B5KG91dCwgUiwgb3V0bGVuKTsKKysJ CQlicmVhazsKKysJCQl9CisrCisrCQltZW1jcHkob3V0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsK KysJCW91dCArPSBBRVNfQkxPQ0tfTEVOR1RIOworKwkJb3V0bGVuIC09IEFFU19CTE9DS19MRU5H VEg7CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCisrCisraW50IEZJUFNfeDkzMV9zZXRfa2V5 KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbikKKysJeworKwlpbnQgcmV0Owor KwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBmaXBzX3NldF9wcm5n X2tleSgmc2N0eCwga2V5LCBrZXlsZW4pOworKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tf UkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3NldF9rZXkoY29u c3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbikKKysJeworKwly ZXR1cm4gRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pOworKwl9CisrCisraW50IEZJUFNf eDkzMV9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuKQorKwl7CisrCWludCByZXQ7 CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldCA9IGZpcHNfc2V0X3By bmdfc2VlZCgmc2N0eCwgc2VlZCwgc2VlZGxlbik7CisrCUNSWVBUT193X3VubG9jayhDUllQVE9f TE9DS19SQU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQorKworKworK2ludCBGSVBTX3g5MzFfYnl0 ZXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCisrCXsKKysJaW50IHJldDsKKysJQ1JZ UFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0ID0gZmlwc19yYW5kKCZzY3R4LCBv dXQsIGNvdW50KTsKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1 cm4gcmV0OworKwl9CisrCisraW50IEZJUFNfeDkzMV9zdGF0dXModm9pZCkKKysJeworKwlpbnQg cmV0OworKwlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBzY3R4LnNl ZWRlZDsKKysJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0 OworKwl9CisrCisrdm9pZCBGSVBTX3g5MzFfcmVzZXQodm9pZCkKKysJeworKwlDUllQVE9fd19s b2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlmaXBzX3JhbmRfcHJuZ19yZXNldCgmc2N0eCk7Cisr CUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJfQorKworK3N0YXRpYyBpbnQg Zmlwc19kb19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCisrCXsKKysJ RklQU194OTMxX3NlZWQoc2VlZCwgc2VlZGxlbik7CisrCXJldHVybiAxOworKwl9CisrCisrc3Rh dGljIGludCBmaXBzX2RvX3JhbmRfYWRkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuLAor KwkJCQkJZG91YmxlIGFkZF9lbnRyb3B5KQorKwl7CisrCUZJUFNfeDkzMV9zZWVkKHNlZWQsIHNl ZWRsZW4pOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCBy YW5kX3g5MzFfbWV0aD0KKysgICAgeworKyAgICBmaXBzX2RvX3JhbmRfc2VlZCwKKysgICAgRklQ U194OTMxX2J5dGVzLAorKyAgICBGSVBTX3g5MzFfcmVzZXQsCisrICAgIGZpcHNfZG9fcmFuZF9h ZGQsCisrICAgIEZJUFNfeDkzMV9ieXRlcywKKysgICAgRklQU194OTMxX3N0YXR1cworKyAgICB9 OworKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3g5MzFfbWV0aG9kKHZvaWQpCisreworKyAg cmV0dXJuICZyYW5kX3g5MzFfbWV0aDsKKyt9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0 by9maXBzL2ZpcHNfcmFuZC5oCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19y YW5kLmguZmlwcwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNjc2OTQyOSArMDIwMAorKysrIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA2 NzY5NDI5ICswMjAwCitAQCAtMCwwICsxLDE0NSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgor KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwor KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQor KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK KysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAq LworKworKyNpZm5kZWYgSEVBREVSX0ZJUFNfUkFORF9ICisrI2RlZmluZSBIRUFERVJfRklQU19S QU5EX0gKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFu ZC5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisr ZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisraW50IEZJUFNfeDkzMV9zZXRfa2V5KGNvbnN0IHVu c2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbik7CisraW50IEZJUFNfeDkzMV9zZWVkKGNvbnN0 IHZvaWQgKmJ1ZiwgaW50IG51bSk7CisraW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFy ICpvdXQsIGludCBvdXRsZW4pOworKworK2ludCBGSVBTX3g5MzFfdGVzdF9tb2RlKHZvaWQpOwor K3ZvaWQgRklQU194OTMxX3Jlc2V0KHZvaWQpOworK2ludCBGSVBTX3g5MzFfc2V0X2R0KHVuc2ln bmVkIGNoYXIgKmR0KTsKKysKKytpbnQgRklQU194OTMxX3N0YXR1cyh2b2lkKTsKKysKKytjb25z dCBSQU5EX01FVEhPRCAqRklQU194OTMxX21ldGhvZCh2b2lkKTsKKysKKyt0eXBlZGVmIHN0cnVj dCBkcmJnX2N0eF9zdCBEUkJHX0NUWDsKKysvKiBEUkJHIGV4dGVybmFsIGZsYWdzICovCisrLyog RmxhZyBmb3IgQ1RSIG1vZGUgb25seTogdXNlIGRlcml2YXRpb24gZnVuY3Rpb24gY3RyX2RmICov CisrI2RlZmluZQlEUkJHX0ZMQUdfQ1RSX1VTRV9ERgkJMHgxCisrLyogUFJORyBpcyBpbiB0ZXN0 IHN0YXRlICovCisrI2RlZmluZQlEUkJHX0ZMQUdfVEVTVAkJCTB4MgorKworK0RSQkdfQ1RYICpG SVBTX2RyYmdfbmV3KGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworK2ludCBGSVBTX2Ry YmdfaW5pdChEUkJHX0NUWCAqZGN0eCwgaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncyk7Cisr aW50IEZJUFNfZHJiZ19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29uc3QgdW5z aWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pOworK2ludCBGSVBTX2RyYmdfcmVzZWVk KERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxl bik7CisraW50IEZJUFNfZHJiZ19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hh ciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKwkJCWludCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UsCisr CQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOworKworK2ludCBG SVBTX2RyYmdfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCk7Cisrdm9pZCBGSVBTX2RyYmdf ZnJlZShEUkJHX0NUWCAqZGN0eCk7CisrCisraW50IEZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKERS QkdfQ1RYICpkY3R4LAorKwlzaXplX3QgKCpnZXRfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5z aWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6 ZV90IG1heF9sZW4pLAorKwl2b2lkICgqY2xlYW51cF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1 bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSwKKysJc2l6ZV90IGVudHJvcHlfYmxvY2ts ZW4sCisrCXNpemVfdCAoKmdldF9ub25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq KnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4p LAorKwl2b2lkICgqY2xlYW51cF9ub25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq b3V0LCBzaXplX3Qgb2xlbikpOworKworK2ludCBGSVBTX2RyYmdfc2V0X3JhbmRfY2FsbGJhY2tz KERSQkdfQ1RYICpkY3R4LAorKwlzaXplX3QgKCpnZXRfYWRpbikoRFJCR19DVFggKmN0eCwgdW5z aWduZWQgY2hhciAqKnBvdXQpLAorKwl2b2lkICgqY2xlYW51cF9hZGluKShEUkJHX0NUWCAqY3R4 LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSwKKysJaW50ICgqcmFuZF9zZWVkX2Ni KShEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpidWYsIGludCBudW0pLAorKwlpbnQgKCpyYW5k X2FkZF9jYikoRFJCR19DVFggKmN0eCwKKysJCQkJY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBk b3VibGUgZW50cm9weSkpOworKworK3ZvaWQgKkZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoRFJCR19D VFggKmN0eCk7Cisrdm9pZCBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKERSQkdfQ1RYICpjdHgsIHZv aWQgKmFwcF9kYXRhKTsKKytzaXplX3QgRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NU WCAqZGN0eCk7CisraW50IEZJUFNfZHJiZ19nZXRfc3RyZW5ndGgoRFJCR19DVFggKmRjdHgpOwor K3ZvaWQgRklQU19kcmJnX3NldF9jaGVja19pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGlu dGVydmFsKTsKKyt2b2lkIEZJUFNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdfQ1RYICpk Y3R4LCBpbnQgaW50ZXJ2YWwpOworKworK2ludCBGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKERSQkdf Q1RYICpkY3R4KTsKKysKKytEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZvaWQpOwor K2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpOworKworKworK2ludCBG SVBTX3JhbmRfc2V0X21ldGhvZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCk7CisrY29uc3QgUkFO RF9NRVRIT0QgKkZJUFNfcmFuZF9nZXRfbWV0aG9kKHZvaWQpOworKworK3ZvaWQgRklQU19yYW5k X3NldF9iaXRzKGludCBuYml0cyk7CisrCisraW50IEZJUFNfcmFuZF9zdHJlbmd0aCh2b2lkKTsK KysKKysvKiAxLjAuMCBjb21wYXQgZnVuY3Rpb25zICovCisraW50IEZJUFNfcmFuZF9zZXRfa2V5 KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4pOworK2lu dCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKTsK KytpbnQgRklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVf VCBvdXRsZW4pOworK2ludCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpOworK3ZvaWQgRklQU19y YW5kX3Jlc2V0KHZvaWQpOworK2ludCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0 KTsKKytpbnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKTsKKytjb25zdCBSQU5EX01FVEhPRCAqRklQ U19yYW5kX21ldGhvZCh2b2lkKTsKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRp ZgorKyNlbmRpZgorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMv Zmlwc19yYW5kX2xjbC5oLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yYW5k X2xjbC5oCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oLmZp cHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDY3Njk0MjkgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgJMjAxMi0wNC0yNiAxODowMDo1MS40MDY3Njk0 MjkgKzAyMDAKK0BAIC0wLDAgKzEsMjE5IEBACisrLyogZmlwcy9yYW5kL2ZpcHNfcmFuZF9sY2wu aCAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5v cmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0 OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVu U1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAq ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9zdCBE UkJHX0hBU0hfQ1RYOworK3R5cGVkZWYgc3RydWN0IGRyYmdfaG1hY19jdHhfc3QgRFJCR19ITUFD X0NUWDsKKyt0eXBlZGVmIHN0cnVjdCBkcmJnX2N0cl9jdHhfc3QgRFJCR19DVFJfQ1RYOworKwor Ky8qIDg4OCBiaXRzIGZyb20gMTAuMSB0YWJsZSAyICovCisrI2RlZmluZSBIQVNIX1BSTkdfTUFY X1NFRURMRU4JMTExCisrCisrc3RydWN0IGRyYmdfaGFzaF9jdHhfc3QKKysJeworKwljb25zdCBF VlBfTUQgKm1kOworKwlFVlBfTURfQ1RYIG1jdHg7CisrCXVuc2lnbmVkIGNoYXIgVltIQVNIX1BS TkdfTUFYX1NFRURMRU5dOworKwl1bnNpZ25lZCBjaGFyIENbSEFTSF9QUk5HX01BWF9TRUVETEVO XTsKKysJLyogVGVtcG9yYXJ5IHZhbHVlIHN0b3JhZ2U6IHNob3VsZCBhbHdheXMgZXhjZWVkIG1h eCBkaWdlc3QgbGVuZ3RoICovCisrCXVuc2lnbmVkIGNoYXIgdnRtcFtIQVNIX1BSTkdfTUFYX1NF RURMRU5dOworKwl9OworKworK3N0cnVjdCBkcmJnX2htYWNfY3R4X3N0CisrCXsKKysJY29uc3Qg RVZQX01EICptZDsKKysJSE1BQ19DVFggaGN0eDsKKysJdW5zaWduZWQgY2hhciBLW0VWUF9NQVhf TURfU0laRV07CisrCXVuc2lnbmVkIGNoYXIgVltFVlBfTUFYX01EX1NJWkVdOworKwl9OworKwor K3N0cnVjdCBkcmJnX2N0cl9jdHhfc3QKKysJeworKwlBRVNfS0VZIGtzOworKwlzaXplX3Qga2V5 bGVuOworKwl1bnNpZ25lZCBjaGFyIEtbMzJdOworKwl1bnNpZ25lZCBjaGFyIFZbMTZdOworKwkv KiBUZW1wIHZhcmlhYmxlcyB1c2VkIGJ5IGRlcml2YXRpb24gZnVuY3Rpb24gKi8KKysJQUVTX0tF WSBkZl9rczsKKysJQUVTX0tFWSBkZl9reGtzOworKwkvKiBUZW1wb3JhcnkgYmxvY2sgc3RvcmFn ZSB1c2VkIGJ5IGN0cl9kZiAqLworKwl1bnNpZ25lZCBjaGFyIGJsdG1wWzE2XTsKKysJc2l6ZV90 IGJsdG1wX3BvczsKKysJdW5zaWduZWQgY2hhciBLWFs0OF07CisrCX07CisrCisrLyogRFJCRyBp bnRlcm5hbCBmbGFncyAqLworKworKy8qIEZ1bmN0aW9ucyBzaG91bGRuJ3QgY2FsbCBlcnIgbGli cmFyeSAqLworKyNkZWZpbmUJRFJCR19GTEFHX05PRVJSCQkJMHgxCisrLyogQ3VzdG9tIHJlc2Vl ZCBjaGVja2luZyAqLworKyNkZWZpbmUJRFJCR19DVVNUT01fUkVTRUVECQkweDIKKysKKysvKiBE UkJHIHN0YXR1cyB2YWx1ZXMgKi8KKysvKiBub3QgaW5pdGlhbGlzZWQgKi8KKysjZGVmaW5lIERS QkdfU1RBVFVTX1VOSU5JVElBTElTRUQJMAorKy8qIG9rIGFuZCByZWFkeSB0byBnZW5lcmF0ZSBy YW5kb20gYml0cyAqLworKyNkZWZpbmUgRFJCR19TVEFUVVNfUkVBRFkJCTEKKysvKiByZXNlZWQg cmVxdWlyZWQgKi8KKysjZGVmaW5lIERSQkdfU1RBVFVTX1JFU0VFRAkJMgorKy8qIGZhdGFsIGVy cm9yIGNvbmRpdGlvbiAqLworKyNkZWZpbmUgRFJCR19TVEFUVVNfRVJST1IJCTMKKysKKysvKiBB IGRlZmF1bHQgbWF4aW11bSBsZW5ndGg6IGxhcmdlciB0aGFuIGFueSByZWFzb25hYmxlIHZhbHVl IHVzZWQgaW4gcHJhdGljZSAqLworKworKyNkZWZpbmUgRFJCR19NQVhfTEVOR1RICQkJMHg3ZmZm ZmZmMAorKy8qIE1heGltdW0gRFJCRyBibG9jayBsZW5ndGg6IGFsbCBtZCBzaXplcyBhcmUgYmln Z2VyIHRoYW4gY2lwaGVyIGJsb2NrcyBzaXplcworKyAqIHNvIHVzZSBtYXggZGlnZXN0IGxlbmd0 aC4KKysgKi8KKysjZGVmaW5lIERSQkdfTUFYX0JMT0NLCQkJRVZQX01BWF9NRF9TSVpFCisrCisr I2RlZmluZSBEUkJHX0hFQUxUSF9JTlRFUlZBTAkJKDEgPDwgMjQpCisrCisrLyogRFJCRyBjb250 ZXh0IHN0cnVjdHVyZSAqLworKworK3N0cnVjdCBkcmJnX2N0eF9zdAorKwl7CisrCS8qIEZpcnN0 IHR5cGVzIGNvbW1vbiB0byBhbGwgaW1wbGVtZW50YXRpb25zICovCisrCS8qIERSQkcgdHlwZTog YSBOSUQgZm9yIHRoZSB1bmRlcmx5aW5nIGFsZ29yaXRobSAqLworKwlpbnQgdHlwZTsKKysJLyog VmFyaW91cyBleHRlcm5hbCBmbGFncyAqLworKwl1bnNpZ25lZCBpbnQgeGZsYWdzOworKwkvKiBW YXJpb3VzIGludGVybmFsIHVzZSBvbmx5IGZsYWdzICovCisrCXVuc2lnbmVkIGludCBpZmxhZ3M7 CisrCS8qIFVzZWQgZm9yIHBlcmlvZGljIGhlYWx0aCBjaGVja3MgKi8KKysJaW50IGhlYWx0aF9j aGVja19jbnQsIGhlYWx0aF9jaGVja19pbnRlcnZhbDsKKysKKysJLyogVGhlIGZvbGxvd2luZyBw YXJhbWV0ZXJzIGFyZSBzZXR1cCBieSBtZWNoYW5pc20gZHJiZ19pbml0KCkgY2FsbCAqLworKwlp bnQgc3RyZW5ndGg7CisrCXNpemVfdCBibG9ja2xlbmd0aDsKKysJc2l6ZV90IG1heF9yZXF1ZXN0 OworKworKwlzaXplX3QgbWluX2VudHJvcHksIG1heF9lbnRyb3B5OworKwlzaXplX3QgbWluX25v bmNlLCBtYXhfbm9uY2U7CisrCXNpemVfdCBtYXhfcGVycywgbWF4X2FkaW47CisrCXVuc2lnbmVk IGludCByZXNlZWRfY291bnRlcjsKKysJdW5zaWduZWQgaW50IHJlc2VlZF9pbnRlcnZhbDsKKysJ c2l6ZV90IHNlZWRsZW47CisrCWludCBzdGF0dXM7CisrCS8qIEFwcGxpY2F0aW9uIGRhdGE6IHR5 cGljYWxseSB1c2VkIGJ5IHRlc3QgZ2V0X2VudHJvcHkgKi8KKysJdm9pZCAqYXBwX2RhdGE7Cisr CS8qIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIHN0cnVjdHVyZXMgKi8KKysJdW5pb24gCisrCQl7 CisrCQlEUkJHX0hBU0hfQ1RYIGhhc2g7CisrCQlEUkJHX0hNQUNfQ1RYIGhtYWM7CisrCQlEUkJH X0NUUl9DVFggIGN0cjsKKysJCX0gZDsKKysJLyogSW5pdGlhbGlhc2UgUFJORyBhbmQgc2V0dXAg Y2FsbGJhY2tzIGJlbG93ICovCisrCWludCAoKmluaXQpKERSQkdfQ1RYICpjdHgsIGludCBuaWQs IGludCBzZWN1cml0eSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKysJLyogSW50YW50aWF0ZSBQUk5H ICovCisrCWludCAoKmluc3RhbnRpYXRlKShEUkJHX0NUWCAqY3R4LAorKwkJCQljb25zdCB1bnNp Z25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg Km5vbmNlLCBzaXplX3Qgbm9uY2VsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMs IHNpemVfdCBwZXJzbGVuKTsKKysJLyogcmVzZWVkICovCisrCWludCAoKnJlc2VlZCkoRFJCR19D VFggKmN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAor KwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7CisrCS8qIGdl bmVyYXQgb3V0cHV0ICovCisrCWludCAoKmdlbmVyYXRlKShEUkJHX0NUWCAqY3R4LAorKwkJCQl1 bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKKysJLyogdW5pbnN0YW50aWF0ZSAqLworKwlpbnQg KCp1bmluc3RhbnRpYXRlKShEUkJHX0NUWCAqY3R4KTsKKysKKysJLyogRW50cm9weSBzb3VyY2Ug YmxvY2sgbGVuZ3RoICovCisrCXNpemVfdCBlbnRyb3B5X2Jsb2NrbGVuOworKworKwkvKiBlbnRy b3B5IGdhdGhlcmluZyBmdW5jdGlvbiAqLworKwlzaXplX3QgKCpnZXRfZW50cm9weSkoRFJCR19D VFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXplX3Qg bWluX2xlbiwgc2l6ZV90IG1heF9sZW4pOworKwkvKiBJbmRpY2F0ZXMgd2UgaGF2ZSBmaW5pc2hl ZCB3aXRoIGVudHJvcHkgYnVmZmVyICovCisrCXZvaWQgKCpjbGVhbnVwX2VudHJvcHkpKERSQkdf Q1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pOworKworKwkvKiBub25j ZSBnYXRoZXJpbmcgZnVuY3Rpb24gKi8KKysJc2l6ZV90ICgqZ2V0X25vbmNlKShEUkJHX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5f bGVuLCBzaXplX3QgbWF4X2xlbik7CisrCS8qIEluZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVkIHdp dGggbm9uY2UgYnVmZmVyICovCisrCXZvaWQgKCpjbGVhbnVwX25vbmNlKShEUkJHX0NUWCAqY3R4 LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsKKysKKysJLyogQ29udGludW91cyBy YW5kb20gbnVtYmVyIHRlc3QgdGVtcG9yYXJ5IGFyZWEgKi8KKysJLyogTGFzdCBibG9jayAqLwkK KysJdW5zaWduZWQgY2hhciBsYltFVlBfTUFYX01EX1NJWkVdOworKwkvKiBzZXQgaWYgbGIgaXMg dmFsaWQgKi8KKysJaW50IGxiX3ZhbGlkOworKworKwkvKiBDYWxsYmFja3MgdXNlZCB3aGVuIGNh bGxlZCB0aHJvdWdoIFJBTkQgaW50ZXJmYWNlICovCisrCS8qIEdldCBhbnkgYWRkaXRpb25hbCBp bnB1dCBmb3IgZ2VuZXJhdGUgKi8KKysJc2l6ZV90ICgqZ2V0X2FkaW4pKERSQkdfQ1RYICpjdHgs IHVuc2lnbmVkIGNoYXIgKipwb3V0KTsKKysJdm9pZCAoKmNsZWFudXBfYWRpbikoRFJCR19DVFgg KmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7CisrCS8qIENhbGxiYWNrIGZv ciBSQU5EX3NlZWQoKSwgUkFORF9hZGQoKSAqLworKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdf Q1RYICpjdHgsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSk7CisrCWludCAoKnJhbmRfYWRkX2Ni KShEUkJHX0NUWCAqY3R4LAorKwkJCQljb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBl bnRyb3B5KTsKKysJfTsKKysKKysKKytpbnQgZmlwc19kcmJnX2N0cl9pbml0KERSQkdfQ1RYICpk Y3R4KTsKKytpbnQgZmlwc19kcmJnX2hhc2hfaW5pdChEUkJHX0NUWCAqZGN0eCk7CisraW50IGZp cHNfZHJiZ19obWFjX2luaXQoRFJCR19DVFggKmRjdHgpOworK2ludCBmaXBzX2RyYmdfa2F0KERS QkdfQ1RYICpkY3R4LCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworK2ludCBmaXBzX2Ry YmdfY3BybmdfdGVzdChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqb3V0KTsK KysKKytjb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlk KTsKKysKKytjb25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAqRklQU19nZXRfY2lwaGVyYnluaWQo aW50IG5pZCk7CisrCisrI2RlZmluZSBGSVBTX2RpZ2VzdGluaXQgRVZQX0RpZ2VzdEluaXQKKysj ZGVmaW5lIEZJUFNfZGlnZXN0dXBkYXRlIEVWUF9EaWdlc3RVcGRhdGUKKysjZGVmaW5lIEZJUFNf ZGlnZXN0ZmluYWwgRVZQX0RpZ2VzdEZpbmFsCisrI2RlZmluZSBNX0VWUF9NRF9zaXplIEVWUF9N RF9zaXplCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGli LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMKKy0tLSBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMuZmlwcwkyMDEyLTA0LTI2 IDE4OjAwOjUxLjQwNzc2OTQ1MSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBz L2ZpcHNfcmFuZF9saWIuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwNzc2OTQ1MSArMDIwMAorQEAg LTAsMCArMSwxOTEgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK KysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisr ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8 b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJlX29zLmgiCisrCisrLyogRklQUyBBUEkg Zm9yIFBSTkcgdXNlLiBTaW1pbGFyIHRvIFJBTkQgZnVuY3Rpb25hbGl0eSBidXQgd2l0aG91dAor KyAqIEVOR0lORSBhbmQgYWRkaXRpb25hbCBjaGVja2luZyBmb3Igbm9uLUZJUFMgcmFuZCBtZXRo b2RzLgorKyAqLworKworK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCAqZmlwc19yYW5kX21ldGgg PSBOVUxMOworK3N0YXRpYyBpbnQgZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAwOworK3N0YXRp YyBpbnQgZmlwc19yYW5kX2JpdHMgPSAwOworKworKy8qIEFsbG93cyBhcHBsaWNhdGlvbiB0byBv dmVycmlkZSBudW1iZXIgb2YgYml0cyBhbmQgdXNlcyBub24tRklQUyBtZXRob2RzICovCisrdm9p ZCBGSVBTX3JhbmRfc2V0X2JpdHMoaW50IG5iaXRzKQorKwl7CisrCWZpcHNfcmFuZF9iaXRzID0g bmJpdHM7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3NldF9tZXRob2QoY29uc3QgUkFORF9NRVRI T0QgKm1ldGgpCisrCXsKKysJaWYgKCFmaXBzX3JhbmRfYml0cykKKysJCXsKKysJCWlmIChtZXRo ID09IEZJUFNfZHJiZ19tZXRob2QoKSkKKysJCQlmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDE7 CisrCQllbHNlIGlmIChtZXRoID09IEZJUFNfeDkzMV9tZXRob2QoKSkKKysJCQlmaXBzX2FwcHJv dmVkX3JhbmRfbWV0aCA9IDI7CisrCQllbHNlCisrCQkJeworKwkJCWZpcHNfYXBwcm92ZWRfcmFu ZF9tZXRoID0gMDsKKysJCQlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQorKwkJCQl7CisrCQkJCUZJ UFNlcnIoRklQU19GX0ZJUFNfUkFORF9TRVRfTUVUSE9ELAorKwkJCQkJCUZJUFNfUl9OT05fRklQ U19NRVRIT0QpOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCX0KKysJCX0KKysJZmlwc19y YW5kX21ldGggPSBtZXRoOworKwlyZXR1cm4gMTsKKysJfQorKworK2NvbnN0IFJBTkRfTUVUSE9E ICpGSVBTX3JhbmRfZ2V0X21ldGhvZCh2b2lkKQorKwl7CisrCXJldHVybiBmaXBzX3JhbmRfbWV0 aDsKKysJfQorKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpCisr CXsKKysJcmV0dXJuIEZJUFNfcmFuZF9nZXRfbWV0aG9kKCk7CisrCX0KKysKKyt2b2lkIEZJUFNf cmFuZF9yZXNldCh2b2lkKQorKwl7CisrCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRf bWV0aC0+Y2xlYW51cCkKKysJCWZpcHNfcmFuZF9tZXRoLT5jbGVhbnVwKCk7CisrCX0KKysKKytp bnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSkK KysJeworKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUo KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9TRUVELCBGSVBTX1JfTk9OX0ZJ UFNfTUVUSE9EKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoZmlwc19yYW5kX21ldGggJiYg Zmlwc19yYW5kX21ldGgtPnNlZWQpCisrCQlmaXBzX3JhbmRfbWV0aC0+c2VlZChidWYsbnVtKTsK KysJcmV0dXJuIDE7CisrCX0KKysKKyt2b2lkIEZJUFNfcmFuZF9hZGQoY29uc3Qgdm9pZCAqYnVm LCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSkKKysJeworKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFu ZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJ UFNfUkFORF9BREQsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOworKwkJcmV0dXJuOworKwkJfQor KwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPmFkZCkKKysJCWZpcHNfcmFu ZF9tZXRoLT5hZGQoYnVmLG51bSxlbnRyb3B5KTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfYnl0 ZXModW5zaWduZWQgY2hhciAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSkKKysJeworKwlpZiAo IWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKKysJCXsKKysJ CUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9CWVRFUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7 CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9t ZXRoLT5ieXRlcykKKysJCXJldHVybiBmaXBzX3JhbmRfbWV0aC0+Ynl0ZXMoYnVmLG51bSk7Cisr CXJldHVybiAwOworKwl9CisrCisraW50IEZJUFNfcmFuZF9wc2V1ZG9fYnl0ZXModW5zaWduZWQg Y2hhciAqYnVmLCBpbnQgbnVtKQorKwl7CisrCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGgg JiYgRklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5E X1BTRVVET19CWVRFUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsKKysJ CX0KKysJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5wc2V1ZG9yYW5kKQor KwkJcmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5wc2V1ZG9yYW5kKGJ1ZixudW0pOworKwlyZXR1cm4g LTE7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKQorKwl7CisrCWlmICghZmlw c19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJRklQ U2VycihGSVBTX0ZfRklQU19SQU5EX1NUQVRVUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Cisr CQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRo LT5zdGF0dXMpCisrCQlyZXR1cm4gZmlwc19yYW5kX21ldGgtPnN0YXR1cygpOworKwlyZXR1cm4g MDsKKysJfQorKworKy8qIFJldHVybiBpbnN0YW50aWF0ZWQgc3RyZW5ndGggb2YgUFJORy4gRm9y IERSQkcgdGhpcyBpcyBhbiBpbnRlcm5hbAorKyAqIHBhcmFtZXRlci4gRm9yIFg5LjMxIFBSTkcg aXQgaXMgODAgYml0cyAoZnJvbSBTUDgwMC0xMzEpLiBBbnkgb3RoZXIKKysgKiB0eXBlIG9mIFBS TkcgaXMgbm90IGFwcHJvdmVkIGFuZCByZXR1cm5zIDAgaW4gRklQUyBtb2RlIGFuZCBtYXhpbXVt CisrICogMjU2IG91dHNpZGUgRklQUyBtb2RlLgorKyAqLworKworK2ludCBGSVBTX3JhbmRfc3Ry ZW5ndGgodm9pZCkKKysJeworKwlpZiAoZmlwc19yYW5kX2JpdHMpCisrCQlyZXR1cm4gZmlwc19y YW5kX2JpdHM7CisrCWlmIChmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9PSAxKQorKwkJcmV0dXJu IEZJUFNfZHJiZ19nZXRfc3RyZW5ndGgoRklQU19nZXRfZGVmYXVsdF9kcmJnKCkpOworKwllbHNl IGlmIChmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9PSAyKQorKwkJcmV0dXJuIDgwOworKwllbHNl IGlmIChmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9PSAwKQorKwkJeworKwkJaWYgKEZJUFNfbW9k dWxlX21vZGUoKSkKKysJCQlyZXR1cm4gMDsKKysJCWVsc2UKKysJCQlyZXR1cm4gMjU2OworKwkJ fQorKwlyZXR1cm4gMDsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMv Zmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBz X3JhbmRfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfcmFu ZF9zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDc3Njk0NTEgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwkyMDEyLTA0 LTI2IDE4OjAwOjUxLjQwNzc2OTQ1MSArMDIwMAorQEAgLTAsMCArMSwxODMgQEAKKysvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAq IGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisr ICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisr ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAi Zmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKworKworK3R5cGVkZWYg c3RydWN0CisrCXsKKysJdW5zaWduZWQgY2hhciBEVFsxNl07CisrCXVuc2lnbmVkIGNoYXIgVlsx Nl07CisrCXVuc2lnbmVkIGNoYXIgUlsxNl07CisrCX0gQUVTX1BSTkdfVFY7CisrCisrLyogVGhl IGZvbGxvd2luZyB0ZXN0IHZlY3RvcnMgYXJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIFJHTlZT IHNwZWMgKi8KKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4X2tleVsxNl0gPQorKwkJ ezB4ZjMsMHhiMSwweDY2LDB4NmQsMHgxMywweDYwLDB4NzIsMHg0MiwKKysJCSAweGVkLDB4MDYs MHgxYywweGFiLDB4YjgsMHhkNCwweDYyLDB4MDJ9OworKworK3N0YXRpYyBBRVNfUFJOR19UViBh ZXNfMTI4X3R2ID0gCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGU2LDB4YjMsMHhiZSwweDc4 LDB4MmEsMHgyMywweGZhLDB4NjIsCisrCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTks MHgyMiwweGY5fSwKKysJCQkJLyogViAqLworKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHg1OSwweDUzLDB4MWUsMHhkMSwweDNiLDB4YjAsMHhj MCwweDU1LAorKwkJIDB4ODQsMHg3OSwweDY2LDB4ODUsMHhjMSwweDJmLDB4NzYsMHg0MX0KKysJ fTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTkyX2tleVsyNF0gPQorKwkJezB4MTUs MHhkOCwweDc4LDB4MGQsMHg2MiwweGQzLDB4MjUsMHg2ZSwKKysJCSAweDQ0LDB4NjQsMHgxMCww eDEzLDB4NjAsMHgyYiwweGE5LDB4YmMsCisrCQkgMHg0YSwweGZiLDB4Y2EsMHhlYiwweDRjLDB4 OGIsMHg5OSwweDNifTsKKysKKytzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzE5Ml90diA9IAorKwl7 CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4Yiww eGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0Yn0sCisrCQkJ CS8qIFYgKi8KKysJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisr CQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAq LworKwkJezB4MTcsMHgwNywweGQ1LDB4MjgsMHgxOSwweDc5LDB4MWUsMHhlZiwKKysJCSAweGE1 LDB4MGMsMHhiZiwweDI1LDB4ZTUsMHg1NiwweGI0LDB4OTN9CisrCX07CisrCisrc3RhdGljIHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl9rZXlbMzJdID0KKysJCXsweDZkLDB4MTQsMHgwNiwweDZjLDB4 YjYsMHhkOCwweDIxLDB4MmQsCisrCQkgMHg4MiwweDhkLDB4ZmEsMHhmMiwweDdhLDB4MDMsMHhi NywweDlmLAorKwkJIDB4MGMsMHhjNywweDNlLDB4Y2QsMHg3NiwweGViLDB4ZWUsMHhiNSwKKysJ CSAweDIxLDB4MDUsMHg4YywweDRmLDB4MzEsMHg3YSwweDgwLDB4YmJ9OworKworK3N0YXRpYyBB RVNfUFJOR19UViBhZXNfMjU2X3R2ID0KKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZGEsMHgz YSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJCSAweGYyLDB4YTksMHg0ZSwweDM0 LDB4NzQsMHg4ZSwweDllLDB4ODh9LAorKwkJCQkvKiBWICovCisrCQl7MHg4MCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDM1LDB4YzcsMHhlZiwweGE3LDB4 NzgsMHg0ZCwweDI5LDB4YmMsCisrCQkgMHg4MiwweDc5LDB4OTksMHhmYiwweGQwLDB4YjMsMHgz YiwweDcyfQorKwl9OworKworK3ZvaWQgRklQU19jb3JydXB0X3JuZygpCisrICAgIHsKKysgICAg YWVzXzE5Ml90di5WWzBdKys7CisrICAgIH0KKysKKysjZGVmaW5lIGZpcHNfeDkzMV90ZXN0KGtl eSwgdHYpIFwKKysJZG9feDkzMV90ZXN0KGtleSwgc2l6ZW9mIGtleSwgJnR2KQorKworK3N0YXRp YyBpbnQgZG9feDkzMV90ZXN0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwKKysJCQlB RVNfUFJOR19UViAqdHYpCisrCXsKKysJdW5zaWduZWQgY2hhciBSWzE2XSwgVlsxNl07CisrCWlu dCBydiA9IDE7CisrCW1lbWNweShWLCB0di0+Viwgc2l6ZW9mKFYpKTsKKysJaWYgKCFGSVBTX3g5 MzFfc2V0X2tleShrZXksIGtleWxlbikpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFmaXBzX3Bvc3Rf c3RhcnRlZChGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKSkKKysJCXJldHVybiAxOworKwlp ZiAoIWZpcHNfcG9zdF9jb3JydXB0KEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQorKwkJ VlswXSsrOworKwlGSVBTX3g5MzFfc2VlZChWLCAxNik7CisrCUZJUFNfeDkzMV9zZXRfZHQodHYt PkRUKTsKKysJRklQU194OTMxX2J5dGVzKFIsIDE2KTsKKysJaWYgKG1lbWNtcChSLCB0di0+Uiwg MTYpKQorKwkJeworKwkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBO VUxMKTsKKysJCXJ2ID0gMDsKKysJCX0KKysJZWxzZSBpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJ UFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQorKwkJcmV0dXJuIDA7CisrCXJldHVybiBydjsK KysJfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X3g5MzEoKQorKwl7CisrCWludCBydiA9IDE7Cisr CUZJUFNfeDkzMV9yZXNldCgpOworKwlpZiAoIUZJUFNfeDkzMV90ZXN0X21vZGUoKSkKKysJCXsK KysJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfWDkzMSxGSVBTX1JfU0VMRlRFU1RfRkFJ TEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18xMjhf a2V5LGFlc18xMjhfdHYpKQorKwkJcnYgPSAwOworKwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18x OTJfa2V5LCBhZXNfMTkyX3R2KSkKKysJCXJ2ID0gMDsKKysJaWYgKCFmaXBzX3g5MzFfdGVzdChh ZXNfMjU2X2tleSwgYWVzXzI1Nl90dikpCisrCQlydiA9IDA7CisrCUZJUFNfeDkzMV9yZXNldCgp OworKwlpZiAoIXJ2KQorKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9YOTMxLEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOworKwlyZXR1cm4gcnY7CisrCX0KKysKKytpbnQgRklQU19zZWxm dGVzdF9ybmcodm9pZCkKKysJeworKwlyZXR1cm4gRklQU19zZWxmdGVzdF94OTMxKCk7CisrCX0K KysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfcmFu ZHRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYwor LS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzCTIwMTIt MDQtMjYgMTg6MDA6NTEuNDA3NzY5NDUxICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRv L2ZpcHMvZmlwc19yYW5kdGVzdC5jCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA3NzY5NDUxICswMjAw CitAQCAtMCwwICsxLDI1MCBAQAorKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91 bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKysgKiBieSBF cmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICogVGhlIGltcGxlbWVudGF0aW9uIHdh cyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorKyAqIAorKyAq IFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1 c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0 by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5k IGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisrICogbGhhc2gsIERF UywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0 aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRo ZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGlt IEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAorKyAqIENvcHlyaWdodCByZW1haW5z IEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisrICog dGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1 c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24K KysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorKyAq IFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0g c3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92 aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUK KysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4g YnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorKyAqICAgIFRoZSB3 b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0 aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0 ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUg KG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9y eSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBI dWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorKyAqIEFOWSBFWFBSRVNTIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKysgKiBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKyAqIFNV Q0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMg Zm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisrICogZGVyaXZhdGl2ZSBv ZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2lt cGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGlj ZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisrICovCisrLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9u LgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9w ZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K KysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUg PHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysK KysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisraW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSQU5EIHN1 cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUg ImZpcHNfdXRsLmgiCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworK3R5cGVkZWYgc3Ry dWN0CisrCXsKKysJdW5zaWduZWQgY2hhciBEVFsxNl07CisrCXVuc2lnbmVkIGNoYXIgVlsxNl07 CisrCXVuc2lnbmVkIGNoYXIgUlsxNl07CisrCX0gQUVTX1BSTkdfTUNUOworKworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbWN0X2tleVsxNl0gPQorKwl7MHg5ZiwweDViLDB4 NTEsMHgyMCwweDBiLDB4ZjMsMHgzNCwweGI1LAorKwkgMHhkOCwweDJiLDB4ZTgsMHhjMywweDcy LDB4NTUsMHhjOCwweDQ4fTsKKysKKytzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18xMjhf bWN0X3R2ID0geworKwkJCS8qIERUICovCisrCXsweDYzLDB4NzYsMHhiYiwweGU1LDB4MjksMHgw MiwweGJhLDB4M2IsCisrCSAweDY3LDB4YzksMHgyNSwweGZhLDB4NzAsMHgxZiwweDExLDB4YWN9 LAorKwkJCS8qIFYgKi8KKysJezB4NTcsMHgyYywweDhlLDB4NzYsMHg4NywweDI2LDB4NDcsMHg5 NywKKysJIDB4N2UsMHg3NCwweGZiLDB4ZGQsMHhjNCwweDk1LDB4MDEsMHhkMX0sCisrCQkJLyog UiAqLworKwl7MHg0OCwweGU5LDB4YmQsMHgwZCwweDA2LDB4ZWUsMHgxOCwweGZiLAorKwkgMHhl NCwweDU3LDB4OTAsMHhkNSwweGMzLDB4ZmMsMHg5YiwweDczfQorK307CisrCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9tY3Rfa2V5WzI0XSA9CisrCXsweGI3LDB4NmMsMHgz NCwweGQxLDB4MDksMHg2NywweGFiLDB4NzMsCisrCSAweDRkLDB4NWEsMHhkNSwweDM0LDB4OTgs MHgxNiwweDBiLDB4OTEsCisrCSAweGJjLDB4MzUsMHg1MSwweDE2LDB4NmIsMHhhZSwweDkzLDB4 OGF9OworKworK3N0YXRpYyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzE5Ml9tY3RfdHYgPSB7Cisr CQkJLyogRFQgKi8KKysJezB4ODQsMHhjZSwweDIyLDB4N2QsMHg5MSwweDVhLDB4YTMsMHhjOSwK KysJIDB4ODQsMHgzYywweDBhLDB4YjMsMHhhOSwweDYzLDB4MTUsMHg1Mn0sCisrCQkJLyogViAq LworKwl7MHhiNiwweGFmLDB4ZTYsMHg4ZiwweDk5LDB4OWUsMHg5MCwweDY0LAorKwkgMHhkZCww eGM3LDB4N2EsMHhjMSwweGJiLDB4OTAsMHgzYSwweDZkfSwKKysJCQkvKiBSICovCisrCXsweGZj LDB4ODUsMHg2MCwweDlhLDB4MjksMHg2ZiwweGVmLDB4MjEsCisrCSAweGRkLDB4ODYsMHgyMCww eDMyLDB4OGEsMHgyOSwweDZmLDB4NDd9CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X21jdF9rZXlbMzJdID0KKysJezB4OWIsMHgwNSwweGM4LDB4NjgsMHhmZiww eDQ3LDB4ZjgsMHgzYSwKKysJIDB4YTYsMHgzYSwweGE4LDB4Y2IsMHg0ZSwweDcxLDB4YjIsMHhl MCwKKysJIDB4YjgsMHg3ZSwweGYxLDB4MzcsMHhiNiwweGI0LDB4ZjYsMHg2ZCwKKysJIDB4ODYs MHgzMiwweGZjLDB4MWYsMHg1ZSwweDFkLDB4MWUsMHg1MH07CisrCisrc3RhdGljIGNvbnN0IEFF U19QUk5HX01DVCBhZXNfMjU2X21jdF90diA9IHsKKysJCQkvKiBEVCAqLworKwl7MHgzMSwweDZl LDB4MzUsMHg5YSwweGIxLDB4NDQsMHhmMCwweGVlLAorKwkgMHg2MiwweDZkLDB4MDQsMHg0Niww eGUwLDB4YTMsMHg5MiwweDRjfSwKKysJCQkvKiBWICovCisrCXsweDRmLDB4Y2QsMHhjMSwweDg3 LDB4ODIsMHgxZiwweDRkLDB4YTEsCisrCSAweDNlLDB4MGUsMHg1NiwweDQ0LDB4NTksMHhlOCww eDgzLDB4Y2F9LAorKwkJCS8qIFIgKi8KKysJezB4YzgsMHg4NywweGMyLDB4NjEsMHg1YiwweGQw LDB4YjksMHhlMSwKKysJIDB4ZTcsMHhmMywweDhiLDB4ZDcsMHg1YiwweGQ1LDB4ZjEsMHg4ZH0K Kyt9OworKworK3N0YXRpYyB2b2lkIGR1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqYixpbnQgbikK KysgICAgeworKyAgICB3aGlsZShuLS0gPiAwKQorKwl7CisrCXByaW50ZigiICUwMngiLCpiKysp OworKwl9CisrICAgIH0KKysKKytzdGF0aWMgdm9pZCBjb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNo YXIgKnJlc3VsdCxjb25zdCB1bnNpZ25lZCBjaGFyICpleHBlY3RlZCwKKysJCSAgICBpbnQgbikK KysgICAgeworKyAgICBpbnQgaTsKKysKKysgICAgZm9yKGk9MCA7IGkgPCBuIDsgKytpKQorKwlp ZihyZXN1bHRbaV0gIT0gZXhwZWN0ZWRbaV0pCisrCSAgICB7CisrCSAgICBwdXRzKCJSYW5kb20g dGVzdCBmYWlsZWQsIGdvdDoiKTsKKysJICAgIGR1bXAocmVzdWx0LG4pOworKwkgICAgcHV0cygi XG4gICAgICAgICAgICAgICBleHBlY3RlZDoiKTsKKysJICAgIGR1bXAoZXhwZWN0ZWQsbik7Cisr CSAgICBwdXRjaGFyKCdcbicpOworKwkgICAgRVhJVCgxKTsKKysJICAgIH0KKysgICAgfQorKwor KworK3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtl eWxlbiwKKysJCQkJCQkJY29uc3QgQUVTX1BSTkdfTUNUICp0dikKKysgICAgeworKyAgICB1bnNp Z25lZCBjaGFyIGJ1ZlsxNl0sIGR0WzE2XTsKKysgICAgaW50IGksIGo7CisrICAgIEZJUFNfeDkz MV9yZXNldCgpOworKyAgICBGSVBTX3g5MzFfdGVzdF9tb2RlKCk7CisrICAgIEZJUFNfeDkzMV9z ZXRfa2V5KGtleSwga2V5bGVuKTsKKysgICAgRklQU194OTMxX3NlZWQodHYtPlYsIDE2KTsKKysg ICAgbWVtY3B5KGR0LCB0di0+RFQsIDE2KTsKKysgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwOyBp KyspCisrCXsKKysgICAgCUZJUFNfeDkzMV9zZXRfZHQoZHQpOworKwlGSVBTX3g5MzFfYnl0ZXMo YnVmLCAxNik7CisrCS8qIEluY3JlbWVudCBEVCAqLworKwlmb3IgKGogPSAxNTsgaiA+PSAwOyBq LS0pCisrCQl7CisrCQlkdFtqXSsrOworKwkJaWYgKGR0W2pdKQorKwkJCWJyZWFrOworKwkJfQor Kwl9CisrCisrICAgIGNvbXBhcmUoYnVmLHR2LT5SLCAxNik7CisrICAgIH0KKysKKytpbnQgbWFp bigpCisrCXsKKysJcnVuX3Rlc3QoYWVzXzEyOF9tY3Rfa2V5LCAxNiwgJmFlc18xMjhfbWN0X3R2 KTsKKysJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAxIGRvbmVcbiIpOworKwlydW5fdGVzdChhZXNf MTkyX21jdF9rZXksIDI0LCAmYWVzXzE5Ml9tY3RfdHYpOworKwlwcmludGYoIkZJUFMgUFJORyB0 ZXN0IDIgZG9uZVxuIik7CisrCXJ1bl90ZXN0KGFlc18yNTZfbWN0X2tleSwgMzIsICZhZXNfMjU2 X21jdF90dik7CisrCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMyBkb25lXG4iKTsKKysJcmV0dXJu IDA7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBz L2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBz X3JzYV9zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yc2Ff c2VsZnRlc3QuYy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA3NzY5NDUxICswMjAwCisrKysg b3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwkyMDEyLTA0LTI2 IDE4OjAwOjUxLjQwNzc2OTQ1MSArMDIwMAorQEAgLTAsMCArMSw0NDQgQEAKKysvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisr ICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4K KysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVu c3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisr ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysg KgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK KysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgbltdID0KKysiXHgwMFx4QkJceEY4XHgyRlx4MDlceDA2XHg4Mlx4 Q0VceDlDXHgyM1x4MzhceEFDXHgyQlx4OURceEE4XHg3MSIKKysiXHhGN1x4MzZceDhEXHgwN1x4 RUVceEQ0XHgxMFx4NDNceEE0XHg0MFx4RDZceEI2XHhGMFx4NzRceDU0XHhGNSIKKysiXHgxRlx4 QjhceERGXHhCQVx4QUZceDAzXHg1Q1x4MDJceEFCXHg2MVx4RUFceDQ4XHhDRVx4RUJceDZGXHhD RCIKKysiXHg0OFx4NzZceEVEXHg1Mlx4MERceDYwXHhFMVx4RUNceDQ2XHgxOVx4NzFceDlEXHg4 QVx4NUJceDhCXHg4MCIKKysiXHg3Rlx4QUZceEI4XHhFMFx4QTNceERGXHhDN1x4MzdceDcyXHgz RVx4RTZceEI0XHhCN1x4RDlceDNBXHgyNSIKKysiXHg4NFx4RUVceDZBXHg2NFx4OURceDA2XHgw OVx4NTNceDc0XHg4OFx4MzRceEIyXHg0NVx4NDVceDk4XHgzOSIKKysiXHg0RVx4RTBceEFBXHhC MVx4MkRceDdCXHg2MVx4QTVceDFGXHg1Mlx4N0FceDlBXHg0MVx4RjZceEMxXHg2OCIKKysiXHg3 Rlx4RTJceDUzXHg3Mlx4OThceENBXHgyQVx4OEZceDU5XHg0Nlx4RjhceEU1XHhGRFx4MDlceDFE XHhCRCIKKysiXHhDQiI7CisrCisrc3RhdGljIGludCBjb3JydXB0X3JzYTsKKysKKytzdGF0aWMg aW50IHNldHJzYWtleShSU0EgKmtleSkKKysgICAgeworKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBlW10gPSAiXHgxMSI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGRbXSA9CisrIlx4MDBceEE1XHhEQVx4RkNceDUzXHg0MVx4RkFceEYyXHg4OVx4QzRceEI5XHg4 OFx4REJceDMwXHhDMVx4Q0QiCisrIlx4RjhceDNGXHgzMVx4MjVceDFFXHgwNlx4NjhceEI0XHgy N1x4ODRceDgxXHgzOFx4MDFceDU3XHg5Nlx4NDEiCisrIlx4QjJceDk0XHgxMFx4QjNceEM3XHg5 OVx4OERceDZCXHhDNFx4NjVceDc0XHg1RVx4NUNceDM5XHgyNlx4NjkiCisrIlx4RDZceDg3XHgw RFx4QTJceEMwXHg4Mlx4QTlceDM5XHhFM1x4N0ZceERDXHhCOFx4MkVceEM5XHgzRVx4REEiCisr Ilx4QzlceDdGXHhGM1x4QURceDU5XHg1MFx4QUNceENGXHhCQ1x4MTFceDFDXHg3Nlx4RjFceEE5 XHg1Mlx4OTQiCisrIlx4NDRceEU1XHg2QVx4QUZceDY4XHhDNVx4NkNceDA5XHgyQ1x4RDNceDhE XHhDM1x4QkVceEY1XHhEMlx4MEEiCisrIlx4OTNceDk5XHgyNlx4RURceDRGXHg3NFx4QTFceDNF XHhERFx4RkJceEUxXHhBMVx4Q0VceENDXHg0OFx4OTQiCisrIlx4QUZceDk0XHgyOFx4QzJceEI3 XHhCOFx4ODhceDNGXHhFNFx4NDZceDNBXHg0Qlx4QzhceDVCXHgxQ1x4QjMiCisrIlx4QzEiOwor KworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwW10gPQorKyJceDAwXHhFRVx4Q0Zc eEFFXHg4MVx4QjFceEI5XHhCM1x4QzlceDA4XHg4MVx4MEJceDEwXHhBMVx4QjVceDYwIgorKyJc eDAxXHg5OVx4RUJceDlGXHg0NFx4QUVceEY0XHhGRFx4QTRceDkzXHhCOFx4MUFceDlFXHgzRFx4 ODRceEY2IgorKyJceDMyXHgxMlx4NEVceEYwXHgyM1x4NkVceDVEXHgxRVx4M0JceDdFXHgyOFx4 RkFceEU3XHhBQVx4MDRceDBBIgorKyJceDJEXHg1Qlx4MjVceDIxXHg3Nlx4NDVceDlEXHgxRlx4 MzlceDc1XHg0MVx4QkFceDJBXHg1OFx4RkJceDY1IgorKyJceDk5IjsKKysKKysgICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgcVtdID0KKysiXHgwMFx4QzlceDdGXHhCMVx4RjBceDI3XHhG NFx4NTNceEY2XHgzNFx4MTJceDMzXHhFQVx4QUFceEQxXHhEOSIKKysiXHgzNVx4M0ZceDZDXHg0 Mlx4RDBceDg4XHg2Nlx4QjFceEQwXHg1QVx4MEZceDIwXHgzNVx4MDJceDhCXHg5RCIKKysiXHg4 Nlx4OThceDQwXHhCNFx4MTZceDY2XHhCNFx4MkVceDkyXHhFQVx4MERceEEzXHhCNFx4MzJceDA0 XHhCNSIKKysiXHhDRlx4Q0VceDMzXHg1Mlx4NTJceDREXHgwNFx4MTZceEE1XHhBNFx4NDFceEU3 XHgwMFx4QUZceDQ2XHgxNSIKKysiXHgwMyI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGRtcDFbXSA9CisrIlx4NTRceDQ5XHg0Q1x4QTZceDNFXHhCQVx4MDNceDM3XHhFNFx4 RTJceDQwXHgyM1x4RkNceEQ2XHg5QVx4NUEiCisrIlx4RUJceDA3XHhERFx4RENceDAxXHg4M1x4 QTRceEQwXHhBQ1x4OUJceDU0XHhCMFx4NTFceEYyXHhCMVx4M0UiCisrIlx4RDlceDQ5XHgwOVx4 NzVceEVBXHhCN1x4NzRceDE0XHhGRlx4NTlceEMxXHhGN1x4NjlceDJFXHg5QVx4MkUiCisrIlx4 MjBceDJCXHgzOFx4RkNceDkxXHgwQVx4NDdceDQxXHg3NFx4QURceEM5XHgzQ1x4MUZceDY3XHhD OVx4ODEiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXExW10gPQorKyJc eDQ3XHgxRVx4MDJceDkwXHhGRlx4MEFceEYwXHg3NVx4MDNceDUxXHhCN1x4RjhceDc4XHg4Nlx4 NENceEE5IgorKyJceDYxXHhBRFx4QkRceDNBXHg4QVx4N0VceDk5XHgxQ1x4NUNceDA1XHg1Nlx4 QTlceDRDXHgzMVx4NDZceEE3IgorKyJceEY5XHg4MFx4M0ZceDhGXHg2Rlx4OEFceEUzXHg0Mlx4 RTlceDMxXHhGRFx4OEFceEU0XHg3QVx4MjJceDBEIgorKyJceDFCXHg5OVx4QTRceDk1XHg4NFx4 OThceDA3XHhGRVx4MzlceEY5XHgyNFx4NUFceDk4XHgzNlx4REFceDNEIjsKKysgICAgCisrICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlxbXBbXSA9CisrIlx4MDBceEIwXHg2Q1x4NEZc eERBXHhCQlx4NjNceDAxXHgxOVx4OERceDI2XHg1Qlx4REJceEFFXHg5NFx4MjMiCisrIlx4QjNc eDgwXHhGMlx4NzFceEY3XHgzNFx4NTNceDg4XHg1MFx4OTNceDA3XHg3Rlx4Q0RceDM5XHhFMlx4 MTEiCisrIlx4OUZceEM5XHg4Nlx4MzJceDE1XHg0Rlx4NThceDgzXHhCMVx4NjdceEE5XHg2N1x4 QkZceDQwXHgyQlx4NEUiCisrIlx4OUVceDJFXHgwRlx4OTZceDU2XHhFNlx4OThceEVBXHgzNlx4 NjZceEVEXHhGQlx4MjVceDc5XHg4MFx4MzkiCisrIlx4RjciOworKworKyAgICBrZXktPm4gPSBC Tl9iaW4yYm4obiwgc2l6ZW9mKG4pLTEsIGtleS0+bik7CisrICAgIGlmIChjb3JydXB0X3JzYSkK KysJQk5fc2V0X2JpdChrZXktPm4sIDEwMjQpOworKyAgICBrZXktPmUgPSBCTl9iaW4yYm4oZSwg c2l6ZW9mKGUpLTEsIGtleS0+ZSk7CisrICAgIGtleS0+ZCA9IEJOX2JpbjJibihkLCBzaXplb2Yo ZCktMSwga2V5LT5kKTsKKysgICAga2V5LT5wID0gQk5fYmluMmJuKHAsIHNpemVvZihwKS0xLCBr ZXktPnApOworKyAgICBrZXktPnEgPSBCTl9iaW4yYm4ocSwgc2l6ZW9mKHEpLTEsIGtleS0+cSk7 CisrICAgIGtleS0+ZG1wMSA9IEJOX2JpbjJibihkbXAxLCBzaXplb2YoZG1wMSktMSwga2V5LT5k bXAxKTsKKysgICAga2V5LT5kbXExID0gQk5fYmluMmJuKGRtcTEsIHNpemVvZihkbXExKS0xLCBr ZXktPmRtcTEpOworKyAgICBrZXktPmlxbXAgPSBCTl9iaW4yYm4oaXFtcCwgc2l6ZW9mKGlxbXAp LTEsIGtleS0+aXFtcCk7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrdm9pZCBGSVBTX2Nv cnJ1cHRfcnNhKCkKKysgICAgeworKyAgICBjb3JydXB0X3JzYSA9IDE7CisrICAgIH0KKysKKysv KiBLbm93biBBbnN3ZXIgVGVzdCAoS0FUKSBkYXRhIGZvciB0aGUgYWJvdmUgUlNBIHByaXZhdGUg a2V5IHNpZ25pbmcKKysgKiBrYXRfdGJzLgorKyAqLworKworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGthdF90YnNbXSA9ICJPcGVuU1NMIEZJUFMgMTQwLTIgUHVibGljIEtleSBSU0EgS0FU IjsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEExW10gPSB7 CisrICAweDJELCAweEFGLCAweDZFLCAweEMyLCAweDk4LCAweEZCLCAweDhBLCAweEExLCAweEI5 LCAweDQ2LCAweERBLCAweDBGLAorKyAgMHgwMSwgMHgxRSwgMHgzNywgMHg5MywgMHhDMiwgMHg1 NSwgMHgyNywgMHhFNCwgMHgxRCwgMHhEMiwgMHg5MCwgMHhCQiwKKysgIDB4RjQsIDB4QkYsIDB4 NEEsIDB4NzQsIDB4MzksIDB4NTEsIDB4QkIsIDB4RTgsIDB4MEMsIDB4QjcsIDB4RjgsIDB4RDMs CisrICAweEQxLCAweERGLCAweEU3LCAweEJFLCAweDgwLCAweDA1LCAweEMzLCAweEI1LCAweEM3 LCAweDgzLCAweEQ1LCAweDRDLAorKyAgMHg3RiwgMHg0OSwgMHhGQiwgMHgzRiwgMHgyOSwgMHg5 QiwgMHhFMSwgMHgxMiwgMHg1MSwgMHg2MCwgMHhEMCwgMHhBNywKKysgIDB4MEQsIDB4QTksIDB4 MjgsIDB4NTYsIDB4NzMsIDB4RDksIDB4MDcsIDB4RTMsIDB4NUUsIDB4M0YsIDB4OUIsIDB4RjUs CisrICAweEI2LCAweEYzLCAweEYyLCAweDVFLCAweDc0LCAweEM5LCAweDgzLCAweDgxLCAweDQ3 LCAweEYwLCAweEM1LCAweDQ1LAorKyAgMHgwQSwgMHhFOSwgMHg4RSwgMHgzOCwgMHhENywgMHgx OCwgMHhDNiwgMHgyQSwgMHgwRiwgMHhGOCwgMHhCNywgMHgzMSwKKysgIDB4RDYsIDB4NTUsIDB4 RTQsIDB4NjYsIDB4NzgsIDB4ODEsIDB4RDQsIDB4RTYsIDB4REIsIDB4OUYsIDB4QkEsIDB4RTgs CisrICAweDIzLCAweEI1LCAweDdGLCAweERDLCAweDA4LCAweEVBLCAweEQ1LCAweDI2LCAweDFF LCAweDIwLCAweDI1LCAweDg0LAorKyAgMHgyNiwgMHhDNiwgMHg3OSwgMHhDOSwgMHg5QiwgMHgz RCwgMHg3RSwgMHhBOQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JT QV9QU1NfU0hBMjI0W10gPSB7CisrICAweDM5LCAweDRBLCAweDZBLCAweDIwLCAweEJDLCAweEU5 LCAweDMzLCAweEVELCAweEVGLCAweEM1LCAweDU4LCAweEE3LAorKyAgMHhGRSwgMHg4MSwgMHhD NCwgMHgzNiwgMHg1MCwgMHg5QSwgMHgyQywgMHg4MiwgMHg5OCwgMHgwOCwgMHg5NSwgMHhGQSwK KysgIDB4QjEsIDB4OUUsIDB4RDIsIDB4NTUsIDB4NjEsIDB4ODcsIDB4MjEsIDB4NTksIDB4ODcs IDB4N0IsIDB4MUYsIDB4NTcsCisrICAweDMwLCAweDlELCAweDBELCAweDRBLCAweDA2LCAweEVC LCAweDUyLCAweDM3LCAweDU1LCAweDU0LCAweDFDLCAweDg5LAorKyAgMHg4MywgMHg3NSwgMHg1 OSwgMHg2NSwgMHg2NCwgMHg5MCwgMHgyRSwgMHgxNiwgMHhDQywgMHg4NiwgMHgwNSwgMHhFRSwK KysgIDB4QjEsIDB4RTYsIDB4N0IsIDB4QkEsIDB4MTYsIDB4NzUsIDB4MEQsIDB4MEMsIDB4NjQs IDB4MEIsIDB4QUIsIDB4MjIsCisrICAweDE1LCAweDc4LCAweDZCLCAweDZGLCAweEE0LCAweEZC LCAweDc3LCAweDQwLCAweDY0LCAweDYyLCAweEQxLCAweEI1LAorKyAgMHgzNywgMHgxRSwgMHhF MCwgMHgzRCwgMHhBOCwgMHhGOSwgMHhEMiwgMHhCRCwgMHhBQSwgMHgzOCwgMHgyNCwgMHg0OSwK KysgIDB4NTgsIDB4RDIsIDB4NzQsIDB4ODUsIDB4RjQsIDB4QjUsIDB4OTMsIDB4OEUsIDB4RjUs IDB4MDMsIDB4RUEsIDB4MkQsCisrICAweEM4LCAweDUyLCAweEZBLCAweENGLCAweDdFLCAweDM1 LCAweEIwLCAweDZBLCAweEFGLCAweDk1LCAweEMwLCAweDAwLAorKyAgMHg1NCwgMHg3NiwgMHgz RCwgMHgwQywgMHg5QywgMHhCMiwgMHhFRSwgMHhDMAorK307CisrCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjU2W10gPSB7CisrICAweDZELCAweDNELCAweEJF LCAweDhGLCAweDYwLCAweDZELCAweDI1LCAweDE0LCAweEYwLCAweDMxLCAweEUzLCAweDg5LAor KyAgMHgwMCwgMHg5NywgMHhGQSwgMHg5OSwgMHg3MSwgMHgyOCwgMHhFNSwgMHgxMCwgMHgyNSwg MHg5QSwgMHhGMywgMHg4RiwKKysgIDB4N0IsIDB4QzUsIDB4QTgsIDB4NEEsIDB4NzQsIDB4NTEs IDB4MzYsIDB4RTIsIDB4OEQsIDB4N0QsIDB4NzMsIDB4MjgsCisrICAweEMxLCAweDc3LCAweEM2 LCAweDI3LCAweDk3LCAweDAwLCAweDhCLCAweDAwLCAweEEzLCAweDk2LCAweDczLCAweDRFLAor KyAgMHg3RCwgMHgyRSwgMHgyQywgMHgzNCwgMHg2OCwgMHg4QywgMHg4RSwgMHhERiwgMHg5RCwg MHg0OSwgMHg0NywgMHgwNSwKKysgIDB4QUIsIDB4RjUsIDB4MDEsIDB4RDYsIDB4ODEsIDB4NDcs IDB4NzAsIDB4RjUsIDB4MUQsIDB4NkQsIDB4MjYsIDB4QkEsCisrICAweDJGLCAweDdBLCAweDU0 LCAweDUzLCAweDRFLCAweEVELCAweDcxLCAweEQ5LCAweDVBLCAweEYzLCAweERBLCAweEI2LAor KyAgMHgwQiwgMHg0NywgMHgzNCwgMHhBRiwgMHg5MCwgMHhEQywgMHhDOCwgMHhEOSwgMHg2Riwg MHg1NiwgMHhDRCwgMHg5RiwKKysgIDB4MjEsIDB4QjcsIDB4N0UsIDB4QUQsIDB4N0MsIDB4MkYs IDB4NzUsIDB4NTAsIDB4NDcsIDB4MTIsIDB4RTQsIDB4NkQsCisrICAweDVGLCAweEI3LCAweDAx LCAweERGLCAweEMzLCAweDExLCAweDZDLCAweEE5LCAweDlFLCAweDQ5LCAweEI5LCAweEY2LAor KyAgMHg3MiwgMHhGNCwgMHhGNiwgMHhFRiwgMHg4OCwgMHgxRSwgMHgyRCwgMHgxQworK307Cisr Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMzg0W10gPSB7Cisr ICAweDQwLCAweEZCLCAweEExLCAweDIxLCAweEY0LCAweEIyLCAweDQwLCAweDlBLCAweEI0LCAw eDMxLCAweEE4LCAweEYyLAorKyAgMHhFQywgMHgxQywgMHhDNCwgMHhDOCwgMHg3QywgMHgyMiwg MHg2NSwgMHg5QywgMHg1NywgMHg0NSwgMHhDRCwgMHg1RSwKKysgIDB4ODYsIDB4MDAsIDB4Rjcs IDB4MjUsIDB4NzgsIDB4REUsIDB4REMsIDB4N0EsIDB4NzEsIDB4NDQsIDB4OUEsIDB4Q0QsCisr ICAweEFBLCAweDI1LCAweEY0LCAweEIyLCAweEZDLCAweEYwLCAweDc1LCAweEQ5LCAweDJGLCAw eDc4LCAweDIzLCAweDdGLAorKyAgMHg2RiwgMHgwMiwgMHhFRiwgMHhDMSwgMHhBRiwgMHhBNiwg MHgyOCwgMHgxNiwgMHgzMSwgMHhEQywgMHg0MiwgMHg2QywKKysgIDB4QjIsIDB4NDQsIDB4RTUs IDB4NEQsIDB4NjYsIDB4QTIsIDB4RTYsIDB4NzEsIDB4RjMsIDB4QUMsIDB4NEYsIDB4RkIsCisr ICAweDkxLCAweENBLCAweEY1LCAweDcwLCAweEVGLCAweDZCLCAweDlELCAweEE0LCAweEVGLCAw eEQ5LCAweDNELCAweDJGLAorKyAgMHgzQSwgMHhCRSwgMHg4OSwgMHgzOCwgMHg1OSwgMHgwMSwg MHhCQSwgMHhEQSwgMHgzMiwgMHhBRCwgMHg0MiwgMHg4OSwKKysgIDB4OTgsIDB4OEIsIDB4Mzks IDB4NDQsIDB4RjAsIDB4RkMsIDB4MzgsIDB4QUMsIDB4ODcsIDB4MUYsIDB4Q0EsIDB4NkYsCisr ICAweDQ4LCAweEY2LCAweEFFLCAweEQ3LCAweDQ1LCAweEVFLCAweEFFLCAweDg4LCAweDBFLCAw eDYwLCAweEY0LCAweDU1LAorKyAgMHg0OCwgMHg0NCwgMHhFRSwgMHgxRiwgMHg5MCwgMHgxOCwg MHg0QiwgMHhGMQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9Q U1NfU0hBNTEyW10gPSB7CisrICAweDA3LCAweDFFLCAweEQ4LCAweEQ1LCAweDA1LCAweEU4LCAw eEU2LCAweEU2LCAweDU3LCAweEFFLCAweDYzLCAweDhDLAorKyAgMHhDNiwgMHg4MywgMHhCNywg MHhBMCwgMHg1OSwgMHhCQiwgMHhGMiwgMHhDNiwgMHg4RiwgMHgxMiwgMHg1MywgMHg5QSwKKysg IDB4OUIsIDB4NTQsIDB4OUUsIDB4QjMsIDB4QzEsIDB4MUQsIDB4MjMsIDB4NEQsIDB4NTEsIDB4 RUQsIDB4OUUsIDB4REQsCisrICAweDRCLCAweEYzLCAweDQ2LCAweDlCLCAweDZCLCAweEY2LCAw eDdDLCAweDI0LCAweDYwLCAweDc5LCAweDIzLCAweDM5LAorKyAgMHgwMSwgMHgxQywgMHg1MSwg MHhDQiwgMHhEOCwgMHhFOSwgMHg5QSwgMHgwMSwgMHg2NywgMHg1RiwgMHhGRSwgMHhENywKKysg IDB4N0MsIDB4RTMsIDB4N0YsIDB4RUQsIDB4REIsIDB4ODcsIDB4QkIsIDB4RjAsIDB4M0QsIDB4 NzgsIDB4NTUsIDB4NjEsCisrICAweDU3LCAweEUzLCAweDBGLCAweEUzLCAweEQyLCAweDlELCAw eDBDLCAweDJBLCAweDIwLCAweEIwLCAweDg1LCAweDEzLAorKyAgMHhDNSwgMHg0NywgMHgzNCwg MHgwRCwgMHgzMiwgMHgxNSwgMHhDOCwgMHhBRSwgMHg5QSwgMHg2QSwgMHgzOSwgMHg2MywKKysg IDB4MkQsIDB4NjAsIDB4RjUsIDB4NEMsIDB4REYsIDB4OEEsIDB4NDgsIDB4NEIsIDB4QkYsIDB4 RjQsIDB4QTgsIDB4RkUsCisrICAweDc2LCAweEYyLCAweDMyLCAweDFCLCAweDlDLCAweDdDLCAw eENBLCAweEZFLCAweDdGLCAweDgwLCAweEMyLCAweDg4LAorKyAgMHg1QywgMHg5NywgMHg3MCwg MHhCNCwgMHgyNiwgMHhDOSwgMHgxNCwgMHg4QgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9TSEExW10gPSB7CisrICAweDcxLCAweEVFLCAweDFBLCAweEMwLCAw eEZFLCAweDAxLCAweDkzLCAweDU0LCAweDc5LCAweDVDLCAweEYyLCAweDRDLAorKyAgMHg0QSwg MHhGRCwgMHgxQSwgMHgwNSwgMHg4RiwgMHg2NCwgMHhCMSwgMHg2RCwgMHg2MSwgMHgzMywgMHg4 RCwgMHg5QiwKKysgIDB4RTcsIDB4RkQsIDB4NjAsIDB4QTMsIDB4ODMsIDB4QjUsIDB4QTMsIDB4 NTEsIDB4NTUsIDB4NzcsIDB4OTAsIDB4Q0YsCisrICAweERDLCAweDIyLCAweDM3LCAweDhFLCAw eEQwLCAweEUxLCAweEFFLCAweDA5LCAweEUzLCAweDNELCAweDFFLCAweEY4LAorKyAgMHg4MCwg MHhEMSwgMHg4QiwgMHhDMiwgMHhFQywgMHgwQSwgMHhENywgMHg2QiwgMHg4OCwgMHg4QiwgMHg4 QiwgMHhBMSwKKysgIDB4MjAsIDB4MjIsIDB4QkUsIDB4NTksIDB4NUIsIDB4RTAsIDB4MjMsIDB4 MjQsIDB4QTEsIDB4NDksIDB4MzAsIDB4QkEsCisrICAweEE5LCAweDlFLCAweEU4LCAweEIxLCAw eDhBLCAweDYyLCAweDE2LCAweEJGLCAweDRFLCAweENBLCAweDJFLCAweDRFLAorKyAgMHhCQywg MHgyOSwgMHhBOCwgMHg2NywgMHgxMywgMHhCNywgMHg5RiwgMHgxRCwgMHgwNCwgMHg0NCwgMHhF NSwgMHg1RiwKKysgIDB4MzUsIDB4MDcsIDB4MTEsIDB4QkMsIDB4RUQsIDB4MTksIDB4MzcsIDB4 MjEsIDB4Q0YsIDB4MjMsIDB4NDgsIDB4MUYsCisrICAweDcyLCAweDA1LCAweERFLCAweEU2LCAw eEU4LCAweDdGLCAweDMzLCAweDhBLCAweDc2LCAweDRCLCAweDJGLCAweDk1LAorKyAgMHhERiwg MHhGMSwgMHg1RiwgMHg4NCwgMHg4MCwgMHhEOSwgMHg0NiwgMHhCNAorK307CisrCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyMjRbXSA9IHsKKysgIDB4NjIsIDB4QUEs IDB4NzksIDB4QTksIDB4MTgsIDB4MEUsIDB4NUYsIDB4OEMsIDB4QkIsIDB4QjcsIDB4MTUsIDB4 RjksCisrICAweDI1LCAweEJCLCAweEZBLCAweEQ0LCAweDNBLCAweDM0LCAweEVELCAweDlFLCAw eEEwLCAweEE5LCAweDE4LCAweDhELAorKyAgMHg1QiwgMHg1NSwgMHg5QSwgMHg3RSwgMHgxRSwg MHgwOCwgMHgwOCwgMHg2MCwgMHhDNSwgMHgxQSwgMHhDNSwgMHg4OSwKKysgIDB4MDgsIDB4RTIs IDB4MUIsIDB4QkQsIDB4NjIsIDB4NTAsIDB4MTcsIDB4NzYsIDB4MzAsIDB4MkMsIDB4OUUsIDB4 Q0QsCisrICAweEE0LCAweDAyLCAweEFELCAweEIxLCAweDZELCAweDQ0LCAweDZELCAweEQ1LCAw eEM2LCAweDQ1LCAweDQxLCAweEU1LAorKyAgMHhFRSwgMHgxRiwgMHg4RCwgMHg3RSwgMHgwOCwg MHgxNiwgMHhBNiwgMHhFMSwgMHg1RSwgMHgwQiwgMHhBOSwgMHhDQywKKysgIDB4REIsIDB4NTks IDB4NTUsIDB4ODcsIDB4MDksIDB4MjUsIDB4NzAsIDB4ODYsIDB4ODQsIDB4MDIsIDB4QzYsIDB4 M0IsCisrICAweDBCLCAweDQ0LCAweDRDLCAweDQ2LCAweDk1LCAweEY0LCAweEY4LCAweDVBLCAw eDkxLCAweDI4LCAweDNFLCAweEIyLAorKyAgMHg1OCwgMHgyRSwgMHgwNiwgMHg0NSwgMHg0OSwg MHhFMCwgMHg5MiwgMHhFMiwgMHhDMCwgMHg2NiwgMHhFNiwgMHgzNSwKKysgIDB4RDksIDB4Nzks IDB4N0YsIDB4MTcsIDB4NUUsIDB4MDIsIDB4NzMsIDB4MDQsIDB4NzcsIDB4ODIsIDB4RTYsIDB4 REMsCisrICAweDQwLCAweDIxLCAweDg5LCAweDhCLCAweDM3LCAweDNFLCAweDFFLCAweDhECisr fTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTI1NltdID0gewor KyAgMHgwRCwgMHg1NSwgMHhFMiwgMHhBQSwgMHg4MSwgMHhEQiwgMHg4RSwgMHg4MiwgMHgwNSwg MHgxNywgMHhBNSwgMHgyMywKKysgIDB4RTcsIDB4M0IsIDB4MUQsIDB4QUYsIDB4RkIsIDB4OEMs IDB4RDAsIDB4ODEsIDB4MjAsIDB4N0IsIDB4QUEsIDB4MjMsCisrICAweDkyLCAweDg3LCAweDhD LCAweEQxLCAweDUzLCAweDg1LCAweDE2LCAweERDLCAweEJFLCAweEFELCAweDZGLCAweDM1LAor KyAgMHg5OCwgMHgyRCwgMHg2OSwgMHg4NCwgMHhCRiwgMHhEOSwgMHg4QSwgMHgwMSwgMHgxNywg MHg1OCwgMHhCMiwgMHg2RSwKKysgIDB4MkMsIDB4NDQsIDB4OUIsIDB4OTAsIDB4RjEsIDB4RkIs IDB4NTEsIDB4RTgsIDB4NkEsIDB4OTAsIDB4MkQsIDB4MTgsCisrICAweDBFLCAweEMwLCAweDkw LCAweDEwLCAweDI0LCAweEE5LCAweDFELCAweEIzLCAweDU4LCAweDdBLCAweDkxLCAweDMwLAor KyAgMHhCRSwgMHgyMiwgMHhDNywgMHhEMywgMHhFQywgMHhDMywgMHgwOSwgMHg1RCwgMHhCRiwg MHhFMiwgMHg4MCwgMHgzQSwKKysgIDB4N0MsIDB4ODUsIDB4QjQsIDB4QkMsIDB4RDEsIDB4RTks IDB4RjAsIDB4NUMsIDB4REUsIDB4ODEsIDB4QTYsIDB4MzgsCisrICAweEI4LCAweDQyLCAweEJC LCAweDg2LCAweEM1LCAweDlELCAweENFLCAweDdDLCAweDJDLCAweEVFLCAweEQxLCAweERBLAor KyAgMHgyNywgMHg0OCwgMHgyQiwgMHhGNSwgMHhBQiwgMHhCOSwgMHhGNywgMHg4MCwgMHhEMSwg MHg5MCwgMHgyNywgMHg5MCwKKysgIDB4QkQsIDB4NDQsIDB4OTcsIDB4NjAsIDB4Q0QsIDB4NTcs IDB4QzAsIDB4N0EKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff U0hBMzg0W10gPSB7CisrICAweDFELCAweEUzLCAweDZBLCAweERELCAweDI3LCAweDRDLCAweEMw LCAweEE1LCAweDI3LCAweEVGLCAweEU2LCAweDFGLAorKyAgMHhEMiwgMHg5MSwgMHg2OCwgMHg1 OSwgMHgwNCwgMHhBRSwgMHhCRCwgMHg5OSwgMHg2MywgMHg1NiwgMHg0NywgMHhDNywKKysgIDB4 NkYsIDB4MjIsIDB4MTYsIDB4NDgsIDB4RDAsIDB4RjksIDB4MTgsIDB4QTksIDB4Q0EsIDB4RkEs IDB4NUQsIDB4NUMsCisrICAweEE3LCAweDY1LCAweDUyLCAweDhBLCAweEM4LCAweDQ0LCAweDdF LCAweDg2LCAweDVELCAweEE5LCAweEE2LCAweDU1LAorKyAgMHg2NSwgMHgzRSwgMHhEOSwgMHgy RCwgMHgwMiwgMHgzOCwgMHhBOCwgMHg3OSwgMHgyOCwgMHg3RiwgMHhCNiwgMHhDRiwKKysgIDB4 ODIsIDB4REQsIDB4N0UsIDB4NTUsIDB4RTEsIDB4QjEsIDB4QkMsIDB4RTIsIDB4MTksIDB4MkIs IDB4MzAsIDB4QzIsCisrICAweDFCLCAweDJCLCAweEIwLCAweDgyLCAweDQ2LCAweEFDLCAweDRC LCAweEQxLCAweEUyLCAweDdELCAweEVCLCAweDhDLAorKyAgMHhGRiwgMHg5NSwgMHhFOSwgMHg2 QSwgMHgxQywgMHgzRCwgMHg0RCwgMHhCRiwgMHg4RiwgMHg4QiwgMHg5QywgMHhDRCwKKysgIDB4 RUEsIDB4ODUsIDB4RUUsIDB4MDAsIDB4REMsIDB4MUMsIDB4QTcsIDB4RUIsIDB4RDAsIDB4OEYs IDB4OTksIDB4RjEsCisrICAweDE2LCAweDI4LCAweDI0LCAweDY0LCAweDA0LCAweDM5LCAweDJE LCAweDU4LCAweDFFLCAweDM3LCAweERDLCAweDA0LAorKyAgMHhCRCwgMHgzMSwgMHhBMiwgMHgy RiwgMHhCMywgMHgzNSwgMHg1NiwgMHhCRgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9TSEE1MTJbXSA9IHsKKysgIDB4NjksIDB4NTIsIDB4MUIsIDB4NTEsIDB4 NUUsIDB4MDYsIDB4Q0EsIDB4OUIsIDB4MTYsIDB4NTEsIDB4NUQsIDB4Q0YsCisrICAweDQ5LCAw eDI1LCAweDRBLCAweEExLCAweDZBLCAweDc3LCAweDRDLCAweDM2LCAweDQwLCAweEY4LCAweEIy LCAweDlBLAorKyAgMHgxNSwgMHhFQSwgMHg1QywgMHhFNSwgMHhFNiwgMHg4MiwgMHhFMCwgMHg4 NiwgMHg4MiwgMHg2QiwgMHgzMiwgMHhGMSwKKysgIDB4MDQsIDB4QzEsIDB4NUEsIDB4MUEsIDB4 RUQsIDB4MUUsIDB4OUEsIDB4QjYsIDB4NEMsIDB4NTQsIDB4OUYsIDB4RDgsCisrICAweDhELCAw eENDLCAweEFDLCAweDhBLCAweEJCLCAweDlDLCAweDgyLCAweDNGLCAweEE2LCAweDUzLCAweDYy LCAweEI1LAorKyAgMHg4MCwgMHhFMiwgMHhCQywgMHhERCwgMHg2NywgMHgyQiwgMHhEOSwgMHgz RiwgMHhFNCwgMHg3NSwgMHg5MiwgMHg2QiwKKysgIDB4QUYsIDB4NjIsIDB4N0MsIDB4NTIsIDB4 RjAsIDB4RUUsIDB4MzMsIDB4REYsIDB4MUIsIDB4MUQsIDB4NDcsIDB4RTYsCisrICAweDU5LCAw eDU2LCAweEE1LCAweEI5LCAweDVDLCAweEU2LCAweDc3LCAweDc4LCAweDE2LCAweDYzLCAweDg0 LCAweDA1LAorKyAgMHg2RiwgMHgwRSwgMHgyQiwgMHgzMSwgMHg5RCwgMHhGNywgMHg3RiwgMHhC MiwgMHg2NCwgMHg3MSwgMHhFMCwgMHgyRCwKKysgIDB4M0UsIDB4NjIsIDB4Q0UsIDB4QjUsIDB4 M0YsIDB4ODgsIDB4REYsIDB4MkQsIDB4QUIsIDB4OTgsIDB4NjUsIDB4OTEsCisrICAweERGLCAw eDcwLCAweDE0LCAweEE1LCAweDNGLCAweDM2LCAweEFCLCAweDg0CisrfTsKKysKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMVtdID0geworKyAgMHg4NiwgMHhC NCwgMHgxOCwgMHhCQSwgMHhEMSwgMHg4MCwgMHhCNiwgMHg3QywgMHg0MiwgMHg0NSwgMHg0RCwg MHhERiwKKysgIDB4RTksIDB4MkQsIDB4RTEsIDB4ODMsIDB4NUYsIDB4QjUsIDB4MkYsIDB4Qzks IDB4Q0QsIDB4QzQsIDB4QjIsIDB4NzUsCisrICAweDgwLCAweEE0LCAweEYxLCAweDRBLCAweEU3 LCAweDgzLCAweDEyLCAweDFFLCAweDFFLCAweDE0LCAweEI4LCAweEFDLAorKyAgMHgzNSwgMHhF MiwgMHhBQSwgMHgwQiwgMHg1QywgMHhGOCwgMHgzOCwgMHg0RCwgMHgwNCwgMHhFRSwgMHhBOSwg MHg5NywKKysgIDB4NzAsIDB4RkIsIDB4NUUsIDB4RTcsIDB4QjcsIDB4RTMsIDB4NjIsIDB4MjMs IDB4NEIsIDB4MzgsIDB4QkUsIDB4RDYsCisrICAweDUzLCAweDE1LCAweEY3LCAweERGLCAweDg3 LCAweEI0LCAweDBFLCAweENDLCAweEIxLCAweDFBLCAweDExLCAweDE5LAorKyAgMHhFRSwgMHg1 MSwgMHhDQywgMHg5MiwgMHhERCwgMHhCQywgMHg2MywgMHgyOSwgMHg2MywgMHgwQywgMHg1OSwg MHhENywKKysgIDB4NkYsIDB4NEMsIDB4M0MsIDB4MzcsIDB4NUIsIDB4MzcsIDB4MDMsIDB4NjEs IDB4N0QsIDB4MjQsIDB4MUMsIDB4OTksCisrICAweDQ4LCAweEFGLCAweDgyLCAweEZFLCAweDMy LCAweDQxLCAweDlCLCAweEIyLCAweERCLCAweEVBLCAweEVELCAweDc2LAorKyAgMHg4RSwgMHg2 RSwgMHhDQSwgMHg3RSwgMHg0RSwgMHgxNCwgMHhCQSwgMHgzMCwgMHg4NCwgMHgxQywgMHhCMywg MHg2NywKKysgIDB4QTMsIDB4MjksIDB4ODAsIDB4NzAsIDB4NTQsIDB4NjgsIDB4N0QsIDB4NDkK Kyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEyNTZb XSA9IHsKKysgIDB4N0UsIDB4QTIsIDB4NzcsIDB4RkUsIDB4QjgsIDB4NTQsIDB4OEEsIDB4Qzcs IDB4N0YsIDB4NjQsIDB4NTQsIDB4ODksCisrICAweEU1LCAweDUyLCAweDE1LCAweDhFLCAweDUy LCAweDk2LCAweDRFLCAweEE2LCAweDU4LCAweDkyLCAweDFDLCAweERELAorKyAgMHhFQSwgMHhB MiwgMHgyRCwgMHg1QywgMHhEMSwgMHg2MiwgMHgwMCwgMHg0OSwgMHgwNSwgMHg5NSwgMHg3Mywg MHhDRiwKKysgIDB4MTYsIDB4NzYsIDB4NjgsIDB4RjYsIDB4QzYsIDB4NUUsIDB4ODAsIDB4Qjgs IDB4QjgsIDB4N0IsIDB4QzgsIDB4OUIsCisrICAweEM2LCAweDUzLCAweDg4LCAweDI2LCAweDIw LCAweDg4LCAweDczLCAweEI2LCAweDEzLCAweEI4LCAweEYwLCAweDRCLAorKyAgMHgwMCwgMHg4 NSwgMHhGMywgMHhERCwgMHgwNywgMHg1MCwgMHhFQiwgMHgyMCwgMHhDNCwgMHgzOCwgMHgwRSwg MHg5OCwKKysgIDB4QUQsIDB4NEUsIDB4NDksIDB4MkMsIDB4RDcsIDB4NjUsIDB4QTUsIDB4MTks IDB4MEUsIDB4NTksIDB4MDEsIDB4RUMsCisrICAweDdFLCAweDc1LCAweDg5LCAweDY5LCAweDJF LCAweDYzLCAweDc2LCAweDg1LCAweDQ2LCAweDhELCAweEEwLCAweDhDLAorKyAgMHgzMywgMHgx RCwgMHg4MiwgMHg4QywgMHgwMywgMHhFQSwgMHg2OSwgMHg4OCwgMHgzNSwgMHhBMSwgMHg0Miwg MHhCRCwKKysgIDB4MjEsIDB4RUQsIDB4OEQsIDB4QkMsIDB4QkMsIDB4REIsIDB4MzAsIDB4RkYs IDB4ODYsIDB4RjAsIDB4NUIsIDB4REMsCisrICAweEUzLCAweEUyLCAweEU4LCAweDBBLCAweDBB LCAweDI5LCAweDk0LCAweDgwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBr YXRfUlNBX1g5MzFfU0hBMzg0W10gPSB7CisrICAweDVDLCAweDdELCAweDk2LCAweDM1LCAweEVD LCAweDdFLCAweDExLCAweDM4LCAweEJCLCAweDdCLCAweEVDLCAweDdCLAorKyAgMHhGMiwgMHg4 MiwgMHg4RSwgMHg5OSwgMHhCRCwgMHhFRiwgMHhEOCwgMHhBRSwgMHhENywgMHgzOSwgMHgzNywg MHhDQiwKKysgIDB4RTYsIDB4NEYsIDB4NUUsIDB4MEEsIDB4MTMsIDB4RTQsIDB4MkUsIDB4NDAs IDB4QjksIDB4QkUsIDB4MkUsIDB4RTMsCisrICAweEVGLCAweDc4LCAweDgzLCAweDE4LCAweDQ0 LCAweDM1LCAweDlDLCAweDhFLCAweEQ3LCAweDRBLCAweDYzLCAweEY2LAorKyAgMHg1NywgMHhD MiwgMHhCMCwgMHgwOCwgMHg1MSwgMHg3MywgMHhDRiwgMHhDQSwgMHg5OSwgMHg2NiwgMHhFRSwg MHgzMSwKKysgIDB4RDgsIDB4NjksIDB4RTksIDB4QUIsIDB4MTMsIDB4MjcsIDB4N0IsIDB4NDEs IDB4MUUsIDB4NkQsIDB4OEQsIDB4RjEsCisrICAweDNFLCAweDlDLCAweDM1LCAweDk1LCAweDU4 LCAweERELCAweDJCLCAweEQ1LCAweEEwLCAweDYwLCAweDQxLCAweDc5LAorKyAgMHgyNCwgMHgy MiwgMHhFNCwgMHhCNywgMHhCRiwgMHg0NywgMHg1MywgMHhGNiwgMHgzNCwgMHhENSwgMHg3Qywg MHhGRiwKKysgIDB4MEUsIDB4MDksIDB4RUUsIDB4MkUsIDB4RTIsIDB4MzcsIDB4QjksIDB4REUs IDB4QzUsIDB4MTIsIDB4NDQsIDB4MzUsCisrICAweEVGLCAweDAxLCAweEU2LCAweDVFLCAweDM5 LCAweDMxLCAweDJELCAweDcxLCAweEE1LCAweERDLCAweEM2LCAweDZELAorKyAgMHhFMiwgMHhD RCwgMHg4NSwgMHhEQiwgMHg3MywgMHg4MiwgMHg2NSwgMHgyOAorK307CisrCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTUxMltdID0geworKyAgMHhBNiwgMHg2 NSwgMHhBMiwgMHg3NywgMHg0RiwgMHhCMywgMHg4NiwgMHhDQiwgMHg2NCwgMHgzQSwgMHhDMSwg MHg2MywKKysgIDB4RkMsIDB4QTEsIDB4QUEsIDB4Q0IsIDB4OUIsIDB4NzksIDB4REQsIDB4NEIs IDB4RTEsIDB4RDksIDB4REEsIDB4QUMsCisrICAweEU3LCAweDQ3LCAweDA5LCAweEIyLCAweDEx LCAweDRCLCAweDhBLCAweEFBLCAweDA1LCAweDlFLCAweDc3LCAweEQ3LAorKyAgMHgzQSwgMHhC RCwgMHg1RSwgMHg1MywgMHgwOSwgMHg0QSwgMHhFNiwgMHgwRiwgMHg1RSwgMHhGOSwgMHgxNCwg MHgyOCwKKysgIDB4QTAsIDB4OTksIDB4NzQsIDB4NjQsIDB4NzAsIDB4NEUsIDB4RjIsIDB4RTMs IDB4RkEsIDB4QzcsIDB4RjgsIDB4QzUsCisrICAweDZFLCAweDJCLCAweDc5LCAweDk2LCAweDBE LCAweDBDLCAweEM4LCAweDEwLCAweDM0LCAweDUzLCAweEQyLCAweEFGLAorKyAgMHgxNywgMHgw RSwgMHhFMCwgMHhCRiwgMHg3OSwgMHhGNiwgMHgwNCwgMHg3MiwgMHgxMCwgMHhFMCwgMHhGNiwg MHhEMCwKKysgIDB4Q0UsIDB4OEEsIDB4NkYsIDB4QTEsIDB4OTUsIDB4ODksIDB4QkYsIDB4NTgs IDB4OEYsIDB4NDYsIDB4NUYsIDB4MDksCisrICAweDlGLCAweDA5LCAweENBLCAweDg0LCAweDE1 LCAweDg1LCAweEUwLCAweEVELCAweDA0LCAweDJELCAweEZCLCAweDdDLAorKyAgMHgzNiwgMHgz NSwgMHgyMSwgMHgzMSwgMHhDMywgMHhGRCwgMHg5MiwgMHg0MiwgMHgxMSwgMHgzMCwgMHg3MSwg MHgxQiwKKysgIDB4NjAsIDB4ODMsIDB4MTgsIDB4ODgsIDB4QTMsIDB4RjUsIDB4NTksIDB4QzMK Kyt9OworKworKworK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSgpCisrCXsKKysJaW50IHJldCA9IDA7 CisrCVJTQSAqa2V5OworKwlFVlBfUEtFWSAqcGsgPSBOVUxMOworKworKwlpZiAoKGtleT1SU0Ff bmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJc2V0cnNha2V5KGtleSk7CisrCWlmICgo cGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJRVZQX1BLRVlf YXNzaWduX1JTQShwaywga2V5KTsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMSwgc2l6 ZW9mKGthdF9SU0FfU0hBMSksCisrCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURf UEtDUzEsCisrCQkJCSJSU0EgU0hBMSBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwK KysJCQkJa2F0X1JTQV9TSEEyMjQsIHNpemVvZihrYXRfUlNBX1NIQTIyNCksCisrCQkJCUVWUF9z aGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEEyMjQgUEtD UyMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGss IGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMjU2LCBzaXpl b2Yoa2F0X1JTQV9TSEEyNTYpLAorKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19Q QURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMjU2IFBLQ1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlm ICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ricykg LSAxLAorKwkJCQlrYXRfUlNBX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfU0hBMzg0KSwKKysJCQkJ RVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTM4 NCBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEE1MTIs IHNpemVvZihrYXRfUlNBX1NIQTUxMiksCisrCQkJCUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9G TEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEE1MTIgUEtDUyMxIikpCisrCQlnb3RvIGVycjsK KysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihr YXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTEsIHNpemVvZihrYXRfUlNBX1BTU19T SEExKSwKKysJCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJS U0EgU0hBMSBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVf dGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1Nf U0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjI0KSwKKysJCQkJRVZQX3NoYTIyNCgpLCBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEEyMjQgUFNTIikpCisrCQlnb3Rv IGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVv ZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0Ff UFNTX1NIQTI1NiksCisrCQkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1Ms CisrCQkJCSJSU0EgU0hBMjU2IFBTUyIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlr YXRfUlNBX1BTU19TSEEzODQsIHNpemVvZihrYXRfUlNBX1BTU19TSEEzODQpLAorKwkJCQlFVlBf c2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTM4NCBQU1Mi KSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0 X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBNTEyLCBzaXpl b2Yoa2F0X1JTQV9QU1NfU0hBNTEyKSwKKysJCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZM QUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEE1MTIgUFNTIikpCisrCQlnb3RvIGVycjsKKysKKysK KysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRf dGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NIQTEsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hB MSksCisrCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0Eg U0hBMSBYOTMxIikpCisrCQlnb3RvIGVycjsKKysJLyogTkI6IFNIQTIyNCBub3Qgc3VwcG9ydGVk IGluIFg5LjMxICovCisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9TSEEyNTYsIHNpemVvZihr YXRfUlNBX1g5MzFfU0hBMjU2KSwKKysJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19Q QURfWDkzMSwKKysJCQkiUlNBIFNIQTI1NiBYOTMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFm aXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEs CisrCQkJa2F0X1JTQV9YOTMxX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEzODQpLAor KwkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0EgU0hB Mzg0IFg5MzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hB NTEyLCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTUxMiksCisrCQkJRVZQX3NoYTUxMigpLCBFVlBf TURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEE1MTIgWDkzMSIpKQorKwkJZ290byBl cnI7CisrCisrCisrCXJldCA9IDE7CisrCisrCWVycjoKKysJaWYgKHBrKQorKwkJRVZQX1BLRVlf ZnJlZShwayk7CisrCWVsc2UgaWYgKGtleSkKKysJCVJTQV9mcmVlKGtleSk7CisrCXJldHVybiBy ZXQ7CisrCX0KKysKKysjZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQUyAqLworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzIG9wZW5zc2wtMS4w LjFiL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlw dG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1MS40MDg3Njk0 NzQgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5j CTIwMTItMDQtMjYgMTg6MDA6NTEuNDA4NzY5NDc0ICswMjAwCitAQCAtMCwwICsxLDI4MiBAQAor Ky8qIGNyeXB0by9yc2EvcnNhX2dlbi5jICovCisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgg RXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K KysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgor KyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1wbGVtZW50 YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisr ICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21t ZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBh aGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8gYWxsIGNv ZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKysgKiBs aGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRv Y3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVy ZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhlIGhvbGRl ciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29weXJpZ2h0 IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMg aW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhpcyBwYWNr YWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRy aWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVz ZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQg cHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1 YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBz b2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUg d3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisrICog ICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5l cyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBo aWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lm aWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisrICogICAgdGhlIGFwcHMg ZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xl ZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4g YnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisrICogQU5ZIEVYUFJF U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAqIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsgTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G CisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlv biB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysgKiBkZXJp dmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNh bm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1 dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKysg Ki8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1 ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrZXh0ZXJuIGludCBmaXBzX2NoZWNrX3Jz YShSU0EgKnJzYSk7CisrI2VuZGlmCisrCisrLyogWDkuMzEgUlNBIGtleSBkZXJpdmF0aW9uIGFu ZCBnZW5lcmF0aW9uICovCisrCisraW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklH TlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKKysJCQljb25zdCBC SUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCisrCQkJY29u c3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAorKwkJ CWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQorKwl7CisrCUJJR05VTSAqcjA9TlVMTCwq cjE9TlVMTCwqcjI9TlVMTCwqcjM9TlVMTDsKKysJQk5fQ1RYICpjdHg9TlVMTCwqY3R4Mj1OVUxM OworKworKwlpZiAoIXJzYSkgCisrCQlnb3RvIGVycjsKKysKKysJY3R4ID0gQk5fQ1RYX25ldygp OworKwlpZiAoIWN0eCkgCisrCQlnb3RvIGVycjsKKysJQk5fQ1RYX3N0YXJ0KGN0eCk7CisrCisr CXIwID0gQk5fQ1RYX2dldChjdHgpOworKwlyMSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJcjIgPSBC Tl9DVFhfZ2V0KGN0eCk7CisrCXIzID0gQk5fQ1RYX2dldChjdHgpOworKworKwlpZiAocjMgPT0g TlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIXJzYS0+ZSkKKysJCXsKKysJCXJzYS0+ZSA9IEJO X2R1cChlKTsKKysJCWlmICghcnNhLT5lKQorKwkJCWdvdG8gZXJyOworKwkJfQorKwllbHNlCisr CQllID0gcnNhLT5lOworKworKwkvKiBJZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2VudCBvbmx5 IGNhbGN1bGF0ZSB3aGF0IHdlIGNhbi4KKysJICogVGhpcyBhbGxvd3MgdGVzdCBwcm9ncmFtcyB0 byBvdXRwdXQgc2VsZWN0aXZlIHBhcmFtZXRlcnMuCisrCSAqLworKworKwlpZiAoWHAgJiYgIXJz YS0+cCkKKysJCXsKKysJCXJzYS0+cCA9IEJOX25ldygpOworKwkJaWYgKCFyc2EtPnApCisrCQkJ Z290byBlcnI7CisrCisrCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cCwgcDEs IHAyLAorKwkJCQkJWHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNiKSkKKysJCQlnb3RvIGVycjsKKysJ CX0KKysKKysJaWYgKFhxICYmICFyc2EtPnEpCisrCQl7CisrCQlyc2EtPnEgPSBCTl9uZXcoKTsK KysJCWlmICghcnNhLT5xKQorKwkJCWdvdG8gZXJyOworKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9w cmltZV9leChyc2EtPnEsIHExLCBxMiwKKysJCQkJCVhxLCBYcTEsIFhxMiwgZSwgY3R4LCBjYikp CisrCQkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCisrCQl7 CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJcmV0dXJuIDI7 CisrCQl9CisrCisrCS8qIFNpbmNlIGJvdGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5vdyBjYWxj dWxhdGUgYWxsIHJlbWFpbmluZyAKKysJICogY29tcG9uZW50cy4KKysJICovCisrCisrCS8qIGNh bGN1bGF0ZSBuICovCisrCXJzYS0+bj1CTl9uZXcoKTsKKysJaWYgKHJzYS0+biA9PSBOVUxMKQor KwkJZ290byBlcnI7CisrCWlmICghQk5fbXVsKHJzYS0+bixyc2EtPnAscnNhLT5xLGN0eCkpCisr CQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGQgKi8KKysJaWYgKCFCTl9zdWIocjEscnNh LT5wLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8gZXJyOwkvKiBwLTEgKi8KKysJaWYgKCFCTl9z dWIocjIscnNhLT5xLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8gZXJyOwkvKiBxLTEgKi8KKysJ aWYgKCFCTl9tdWwocjAscjEscjIsY3R4KSkKKysJCWdvdG8gZXJyOwkvKiAocC0xKShxLTEpICov CisrCisrCWlmICghQk5fZ2NkKHIzLCByMSwgcjIsIGN0eCkpCisrCQlnb3RvIGVycjsKKysKKysJ aWYgKCFCTl9kaXYocjAsIE5VTEwsIHIwLCByMywgY3R4KSkKKysJCWdvdG8gZXJyOwkvKiBMQ00o KHAtMSkocS0xKSkgKi8KKysKKysJY3R4MiA9IEJOX0NUWF9uZXcoKTsKKysJaWYgKCFjdHgyKQor KwkJZ290byBlcnI7CisrCisrCXJzYS0+ZD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+ZSxyMCxj dHgyKTsJLyogZCAqLworKwlpZiAocnNhLT5kID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJ LyogY2FsY3VsYXRlIGQgbW9kIChwLTEpICovCisrCXJzYS0+ZG1wMT1CTl9uZXcoKTsKKysJaWYg KHJzYS0+ZG1wMSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghQk5fbW9kKHJzYS0+ZG1w MSxyc2EtPmQscjEsY3R4KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUgZCBtb2Qg KHEtMSkgKi8KKysJcnNhLT5kbXExPUJOX25ldygpOworKwlpZiAocnNhLT5kbXExID09IE5VTEwp CisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tb2QocnNhLT5kbXExLHJzYS0+ZCxyMixjdHgpKQor KwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAgKi8KKysJ cnNhLT5pcW1wPUJOX21vZF9pbnZlcnNlKE5VTEwscnNhLT5xLHJzYS0+cCxjdHgyKTsKKysKKysJ ZXJyOgorKwlpZiAoY3R4KQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgpOworKwkJQk5fQ1RYX2Zy ZWUoY3R4KTsKKysJCX0KKysJaWYgKGN0eDIpCisrCQlCTl9DVFhfZnJlZShjdHgyKTsKKysJLyog SWYgdGhpcyBpcyBzZXQgYWxsIGNhbGxzIHN1Y2Nlc3NmdWwgKi8KKysJaWYgKHJzYSAmJiByc2Et PmlxbXAgIT0gTlVMTCkKKysJCXJldHVybiAxOworKworKwlyZXR1cm4gMDsKKysKKysJfQorKwor K2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBC SUdOVU0gKmUsIEJOX0dFTkNCICpjYikKKysJeworKwlpbnQgb2sgPSAwOworKwlCSUdOVU0gKlhw ID0gTlVMTCwgKlhxID0gTlVMTDsKKysJQk5fQ1RYICpjdHggPSBOVUxMOworKworKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFH X05PTl9GSVBTX0FMTE9XKSAmJiAKKysJCShiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9E VUxVU19CSVRTKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVS QVRFX0tFWV9FWCxGSVBTX1JfS0VZX1RPT19TSE9SVCk7CisrCSAgICByZXR1cm4gMDsKKysJICAg IH0KKysKKysJaWYgKGJpdHMgJiAweGZmKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0Zf UlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgpOworKwkg ICAgcmV0dXJuIDA7CisrCSAgICB9CisrCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisr CSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQ U19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKyNl bmRpZgorKworKwljdHggPSBCTl9DVFhfbmV3KCk7CisrCWlmICghY3R4KQorKwkJZ290byBlcnJv cjsKKysKKysJQk5fQ1RYX3N0YXJ0KGN0eCk7CisrCVhwID0gQk5fQ1RYX2dldChjdHgpOworKwlY cSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX1hwcShYcCwgWHEs IGJpdHMsIGN0eCkpCisrCQlnb3RvIGVycm9yOworKworKwlyc2EtPnAgPSBCTl9uZXcoKTsKKysJ cnNhLT5xID0gQk5fbmV3KCk7CisrCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCisrCQlnb3RvIGVy cm9yOworKworKwkvKiBHZW5lcmF0ZSB0d28gcHJpbWVzIGZyb20gWHAsIFhxICovCisrCisrCWlm ICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnAsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIFhwLAorKwkJCQkJZSwgY3R4LCBjYikpCisrCQlnb3RvIGVycm9yOworKworKwlpZiAoIUJO X1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5xLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBY cSwKKysJCQkJCWUsIGN0eCwgY2IpKQorKwkJZ290byBlcnJvcjsKKysKKysJLyogU2luY2UgcnNh LT5wIGFuZCByc2EtPnEgYXJlIHZhbGlkIHRoaXMgY2FsbCB3aWxsIGp1c3QgZGVyaXZlCisrCSAq IHJlbWFpbmluZyBSU0EgY29tcG9uZW50cy4KKysJICovCisrCisrCWlmICghUlNBX1g5MzFfZGVy aXZlX2V4KHJzYSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKysJCQkJTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCwgZSwgY2IpKQorKwkJZ290byBlcnJvcjsKKysKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCWlmKCFmaXBzX2NoZWNrX3JzYShyc2EpKQorKwkgICAgZ290byBlcnJv cjsKKysjZW5kaWYKKysKKysJb2sgPSAxOworKworKwllcnJvcjoKKysJaWYgKGN0eCkKKysJCXsK KysJCUJOX0NUWF9lbmQoY3R4KTsKKysJCUJOX0NUWF9mcmVlKGN0eCk7CisrCQl9CisrCisrCWlm IChvaykKKysJCXJldHVybiAxOworKworKwlyZXR1cm4gMDsKKysKKysJfQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNC0yNiAxODowMDo1 MS40MDg3Njk0NzQgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3No YV9zZWxmdGVzdC5jCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA4NzY5NDc0ICswMjAwCitAQCAtMCww ICsxLDE0MCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAq ICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJp bmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KytzdGF0aWMgY29uc3QgY2hhciB0ZXN0W11bNjBdPQorKyAgICB7CisrICAgICIiLAorKyAgICAi YWJjIiwKKysgICAgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1u bG1ub21ub3Bub3BxIgorKyAgICB9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJl dFtdW1NIQV9ESUdFU1RfTEVOR1RIXT0KKysgICAgeworKyAgICB7IDB4ZGEsMHgzOSwweGEzLDB4 ZWUsMHg1ZSwweDZiLDB4NGIsMHgwZCwweDMyLDB4NTUsCisrICAgICAgMHhiZiwweGVmLDB4OTUs MHg2MCwweDE4LDB4OTAsMHhhZiwweGQ4LDB4MDcsMHgwOSB9LAorKyAgICB7IDB4YTksMHg5OSww eDNlLDB4MzYsMHg0NywweDA2LDB4ODEsMHg2YSwweGJhLDB4M2UsCisrICAgICAgMHgyNSwweDcx LDB4NzgsMHg1MCwweGMyLDB4NmMsMHg5YywweGQwLDB4ZDgsMHg5ZCB9LAorKyAgICB7IDB4ODQs MHg5OCwweDNlLDB4NDQsMHgxYywweDNiLDB4ZDIsMHg2ZSwweGJhLDB4YWUsCisrICAgICAgMHg0 YSwweGExLDB4ZjksMHg1MSwweDI5LDB4ZTUsMHhlNSwweDQ2LDB4NzAsMHhmMSB9LAorKyAgICB9 OworKworK3N0YXRpYyBpbnQgY29ycnVwdF9zaGE7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfc2hh MSgpCisrICAgIHsKKysgICAgY29ycnVwdF9zaGEgPSAxOworKyAgICB9CisrCisraW50IEZJUFNf c2VsZnRlc3Rfc2hhMSgpCisrICAgIHsKKysgICAgaW50IG47CisrCisrICAgIGZvcihuPTAgOyBu PHNpemVvZih0ZXN0KS9zaXplb2YodGVzdFswXSkgOyArK24pCisrCXsKKysJdW5zaWduZWQgY2hh ciBtZFtTSEFfRElHRVNUX0xFTkdUSF07CisrCisrCUVWUF9EaWdlc3QodGVzdFtuXSxzdHJsZW4o dGVzdFtuXSkrY29ycnVwdF9zaGEsbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpOworKwlpZiht ZW1jbXAobWQscmV0W25dLHNpemVvZiBtZCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX1NFTEZURVNUX1NIQTEsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1 cm4gMDsKKysJICAgIH0KKysJfQorKyAgICByZXR1cm4gMTsKKysgICAgfQorKworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIG1zZ19zaGEyNTZbXSA9IHsgMHhmYSwgMHg0OCwgMHg1OSwgMHgy YSwgMHhlMSwgMHhhZSwgMHgxZiwgMHgzMCwKKysJCQkJCSAgICAweGZjIH07Cisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZGlnX3NoYTI1NltdID0geyAweGY3LCAweDI2LCAweGQ4LCAweDk4 LCAweDQ3LCAweDkxLCAweDY4LCAweDViLAorKwkJCQkJICAgIDB4OWUsIDB4MzksIDB4YjIsIDB4 NTgsIDB4YmIsIDB4NzUsIDB4YmYsIDB4MDEsCisrCQkJCQkgICAgMHgxNywgMHgwYywgMHg4NCwg MHgwMCwgMHgwMSwgMHg3YSwgMHg5NCwgMHg4MywKKysJCQkJCSAgICAweGYzLCAweDBiLCAweDE1 LCAweDg0LCAweDRiLCAweDY5LCAweDg4LCAweDhhIH07CisrCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgbXNnX3NoYTUxMltdID0geyAweDM3LCAweGQxLCAweDM1LCAweDlkLCAweDE4LCAw eDQxLCAweGU5LCAweGI3LAorKwkJCQkJICAgIDB4NmQsIDB4OWEsIDB4MTMsIDB4ZGEsIDB4NWYs IDB4ZjMsIDB4YmQgfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaWdfc2hhNTEyW10g PSB7IDB4MTEsIDB4MTMsIDB4YzQsIDB4MTksIDB4ZWQsIDB4MmIsIDB4MWQsIDB4MTYsCisrCQkJ CQkgICAgMHgxMSwgMHhlYiwgMHg5YiwgMHhiZSwgMHhmMCwgMHg3ZiwgMHhjZiwgMHg0NCwKKysJ CQkJCSAgICAweDhiLCAweGQ3LCAweDU3LCAweGJkLCAweDhkLCAweGE5LCAweDI1LCAweGIwLAor KwkJCQkJICAgIDB4NDcsIDB4MjUsIDB4ZDYsIDB4NmMsIDB4OWEsIDB4NTQsIDB4N2YsIDB4OGYs CisrCQkJCQkgICAgMHgwYiwgMHg1MywgMHgxYSwgMHgxMCwgMHg2OCwgMHgzMiwgMHgwMywgMHgz OCwKKysJCQkJCSAgICAweDgyLCAweGM0LCAweDg3LCAweGM0LCAweGVhLCAweDBlLCAweGQxLCAw eDA0LAorKwkJCQkJICAgIDB4YTksIDB4OTgsIDB4YzEsIDB4MDUsIDB4YTMsIDB4ZjMsIDB4Zjgs IDB4YjEsCisrCQkJCQkgICAgMHhhZiwgMHhiYywgMHhkOSwgMHg3OCwgMHg3ZSwgMHhlZSwgMHgz ZCwgMHg0MyB9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTIodm9pZCkKKysJeworKwl1bnNp Z25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKKysKKysJRVZQX0RpZ2VzdChtc2df c2hhMjU2LCBzaXplb2YobXNnX3NoYTI1NiksIG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5VTEwp OworKwlpZihtZW1jbXAoZGlnX3NoYTI1NiwgbWQsIHNpemVvZihkaWdfc2hhMjU2KSkpCisrCQl7 CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVE KTsKKysJCXJldHVybiAwOworKwkJfQorKworKwlFVlBfRGlnZXN0KG1zZ19zaGE1MTIsIHNpemVv Zihtc2dfc2hhNTEyKSwgbWQsIE5VTEwsIEVWUF9zaGE1MTIoKSwgTlVMTCk7CisrCWlmKG1lbWNt cChkaWdfc2hhNTEyLCBtZCwgc2l6ZW9mKGRpZ19zaGE1MTIpKSkKKysJCXsKKysJCUZJUFNlcnIo RklQU19GX0ZJUFNfTU9ERV9TRVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJu IDA7CisrCQl9CisrCisrCXJldHVybiAxOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVu c3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jLmZpcHMgb3BlbnNz bC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMuYworLS0tIG9wZW5zc2wt MS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMuZmlwcwkyMDEyLTA0LTI2 IDE4OjAwOjUxLjQwODc2OTQ3NCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBz L2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMJMjAxMi0wNC0yNiAxODowMDo1MS40MDg3Njk0NzQgKzAy MDAKK0BAIC0wLDAgKzEsMTgwIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMp IDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgor KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisr ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2lu Y2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L3NoYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysKKysjaWZuZGVmIEZJUFNDQU5J U1RFUl9PCisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkgeyByZXR1cm4gMDsgfQorK3ZvaWQg RklQU19zZWxmdGVzdF9jaGVjaygpIHt9Cisrdm9pZCBPUEVOU1NMX2NsZWFuc2Uodm9pZCAqcCxz aXplX3QgbGVuKSB7fQorKyNlbmRpZgorKworKyNpZglkZWZpbmVkKF9faTM4NikgICB8fCBkZWZp bmVkKF9faTM4Nl9fKSAgIHx8IGRlZmluZWQoX01fSVg4NikgfHwgXAorKwlkZWZpbmVkKF9fSU5U RUxfXykgfHwgXAorKwlkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8 IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KQorKworK3Vuc2lnbmVkIGludCAg T1BFTlNTTF9pYTMyY2FwX1BbMl07CisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KworK3N0YXRpYyB2b2lkIGhtYWNfaW5pdChTSEEyNTZfQ1RYICptZF9jdHgsU0hBMjU2X0NUWCAq b19jdHgsCisrCQkgICAgICBjb25zdCBjaGFyICprZXkpCisrICAgIHsKKysgICAgc2l6ZV90IGxl bj1zdHJsZW4oa2V5KTsKKysgICAgaW50IGk7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5bWRbSE1B Q19NQVhfTURfQ0JMT0NLXTsKKysgICAgdW5zaWduZWQgY2hhciBwYWRbSE1BQ19NQVhfTURfQ0JM T0NLXTsKKysKKysgICAgaWYgKGxlbiA+IFNIQV9DQkxPQ0spCisrCXsKKysJU0hBMjU2X0luaXQo bWRfY3R4KTsKKysJU0hBMjU2X1VwZGF0ZShtZF9jdHgsa2V5LGxlbik7CisrCVNIQTI1Nl9GaW5h bChrZXltZCxtZF9jdHgpOworKwlsZW49U0hBMjU2X0RJR0VTVF9MRU5HVEg7CisrCX0KKysgICAg ZWxzZQorKwltZW1jcHkoa2V5bWQsa2V5LGxlbik7CisrICAgIG1lbXNldCgma2V5bWRbbGVuXSwn XDAnLEhNQUNfTUFYX01EX0NCTE9DSy1sZW4pOworKworKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNf TUFYX01EX0NCTE9DSyA7IGkrKykKKysJcGFkW2ldPTB4MzZea2V5bWRbaV07CisrICAgIFNIQTI1 Nl9Jbml0KG1kX2N0eCk7CisrICAgIFNIQTI1Nl9VcGRhdGUobWRfY3R4LHBhZCxTSEEyNTZfQ0JM T0NLKTsKKysKKysgICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCisr CXBhZFtpXT0weDVjXmtleW1kW2ldOworKyAgICBTSEEyNTZfSW5pdChvX2N0eCk7CisrICAgIFNI QTI1Nl9VcGRhdGUob19jdHgscGFkLFNIQTI1Nl9DQkxPQ0spOworKyAgICB9CisrCisrc3RhdGlj IHZvaWQgaG1hY19maW5hbCh1bnNpZ25lZCBjaGFyICptZCxTSEEyNTZfQ1RYICptZF9jdHgsU0hB MjU2X0NUWCAqb19jdHgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJ R0VTVF9MRU5HVEhdOworKworKyAgICBTSEEyNTZfRmluYWwoYnVmLG1kX2N0eCk7CisrICAgIFNI QTI1Nl9VcGRhdGUob19jdHgsYnVmLHNpemVvZiBidWYpOworKyAgICBTSEEyNTZfRmluYWwobWQs b19jdHgpOworKyAgICB9CisrCisrI2VuZGlmCisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAq KmFyZ3YpCisrICAgIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIHN0YXRpYyBjaGFyIGtl eVtdPSJvcmJvRGVKSVRJVGVqc2lycEFET05pdmlycFVrdmFyUCI7CisrICAgIGludCBuLGJpbmFy eT0wOworKworKyAgICBpZihhcmdjIDwgMikKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiJXMgWzxm aWxlPl0rXG4iLGFyZ3ZbMF0pOworKwlleGl0KDEpOworKwl9CisrCisrICAgIG49MTsKKysgICAg aWYgKCFzdHJjbXAoYXJndltuXSwiLWJpbmFyeSIpKQorKwl7CisrCW4rKzsKKysJYmluYXJ5PTE7 CS8qIGVtaXQgYmluYXJ5IGZpbmdlcnByaW50Li4uICovCisrCX0KKysKKysgICAgZm9yKDsgbiA8 IGFyZ2MgOyArK24pCisrCXsKKysJRklMRSAqZj1mb3Blbihhcmd2W25dLCJyYiIpOworKwlTSEEy NTZfQ1RYIG1kX2N0eCxvX2N0eDsKKysJdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xF TkdUSF07CisrCWludCBpOworKworKwlpZighZikKKysJICAgIHsKKysJICAgIHBlcnJvcihhcmd2 W25dKTsKKysJICAgIGV4aXQoMik7CisrCSAgICB9CisrCisrCWhtYWNfaW5pdCgmbWRfY3R4LCZv X2N0eCxrZXkpOworKwlmb3IoIDsgOyApCisrCSAgICB7CisrCSAgICBjaGFyIGJ1ZlsxMDI0XTsK KysJICAgIHNpemVfdCBsPWZyZWFkKGJ1ZiwxLHNpemVvZiBidWYsZik7CisrCisrCSAgICBpZihs ID09IDApCisrCQl7CisrCQlpZihmZXJyb3IoZikpCisrCQkgICAgeworKwkJICAgIHBlcnJvcihh cmd2W25dKTsKKysJCSAgICBleGl0KDMpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICBicmVh azsKKysJCX0KKysJICAgIFNIQTI1Nl9VcGRhdGUoJm1kX2N0eCxidWYsbCk7CisrCSAgICB9Cisr CWhtYWNfZmluYWwobWQsJm1kX2N0eCwmb19jdHgpOworKworKwlpZiAoYmluYXJ5KQorKwkgICAg eworKwkgICAgZndyaXRlKG1kLFNIQTI1Nl9ESUdFU1RfTEVOR1RILDEsc3Rkb3V0KTsKKysJICAg IGJyZWFrOwkvKiAuLi4gZm9yIHNpbmdsZSghKSBmaWxlICovCisrCSAgICB9CisrCisrLyoJcHJp bnRmKCJITUFDLVNIQTEoJXMpPSAiLGFyZ3Zbbl0pOyAqLworKwlmb3IoaT0wIDsgaSA8IFNIQTI1 Nl9ESUdFU1RfTEVOR1RIIDsgKytpKQorKwkgICAgcHJpbnRmKCIlMDJ4IixtZFtpXSk7CisrCXBy aW50ZigiXG4iKTsKKysJfQorKyNlbmRpZgorKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlw cyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYworLS0tIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMJMjAxMi0wNC0yNiAx ODowMDo1MS40MDg3Njk0NzQgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vZmlwcy9m aXBzX3Rlc3Rfc3VpdGUuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwODc2OTQ3NCArMDIwMAorQEAg LTAsMCArMSw1ODggQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqCisrICog VGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGFzIGEgdGVzdCBkcml2ZXIgZm9yIHRoZSBGSVBTLTE0 MCB0ZXN0aW5nCisrICogbGFiIHBlcmZvcm1pbmcgRklQUy0xNDAgdmFsaWRhdGlvbi4gIEl0IGRl bW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZQorKyAqIE9wZW5TU0wgbGlicmFyeSBpdG8gcGVyZm9y bSBhIHZhcmlldHkgb2YgY29tbW9uIGNyeXB0b2dyYXBoaWMKKysgKiBmdW5jdGlvbnMuICBBIHBv d2VyLXVwIHNlbGYgdGVzdCBpcyBkZW1vbnN0cmF0ZWQgYnkgZGVsaWJlcmF0ZWx5CisrICogcG9p bnRpbmcgdG8gYW4gaW52YWxpZCBleGVjdXRhYmxlIGhhc2gKKysgKgorKyAqIENvbnRyaWJ1dGVk IGJ5IFN0ZXZlIE1hcnF1ZXNzLgorKyAqCisrICovCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2lu Y2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrCisrI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvc2hhLmg+CisrCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQorKyAgICB7CisrICAgIHByaW50ZigiTm8gRklQUyBzdXBwb3J0 XG4iKTsKKysgICAgcmV0dXJuKDApOworKyAgICB9CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrLyogQUVTOiBlbmNyeXB0 IGFuZCBkZWNyeXB0IGtub3duIHBsYWludGV4dCwgdmVyaWZ5IHJlc3VsdCBtYXRjaGVzIG9yaWdp bmFsIHBsYWludGV4dAorKyovCisrc3RhdGljIGludCBGSVBTX2Flc190ZXN0KHZvaWQpCisrCXsK KysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgcGx0bXBbMTZdOworKwl1bnNpZ25lZCBj aGFyIGNpdG1wWzE2XTsKKysJdW5zaWduZWQgY2hhciBrZXlbMTZdID0geyAxLDIsMyw0LDUsNiw3 LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNn07CisrCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2 XSA9ICJldGFvbnJpc2hkbGN1IjsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQSEVS X0NUWF9pbml0KCZjdHgpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18x MjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVWUF9D aXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgMTYpOworKwlpZiAoRVZQX0NpcGhlckluaXRf ZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQorKwkJ Z290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCAxNik7CisrCWlmICht ZW1jbXAocGx0bXAsIHBsYWludGV4dCwgMTYpKQorKwkJZ290byBlcnI7CisrCXJldCA9IDE7Cisr CWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysJcmV0dXJuIHJldDsKKysJ fQorKworK3N0YXRpYyBpbnQgRklQU19kZXMzX3Rlc3Qodm9pZCkKKysJeworKwlpbnQgcmV0ID0g MDsKKysJdW5zaWduZWQgY2hhciBwbHRtcFs4XTsKKysJdW5zaWduZWQgY2hhciBjaXRtcFs4XTsK KysgICAgCXVuc2lnbmVkIGNoYXIga2V5W10gPSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEy LDEzLDE0LDE1LDE2LDE3LDE4LAorKwkJICAgICAgICAgICAgICAxOSwyMCwyMSwyMiwyMywyNH07 CisrICAgIAl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtdID0geyAnZScsICd0JywgJ2EnLCAnbycs ICduJywgJ3InLCAnaScsICdzJyB9OworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7CisrCUVWUF9DSVBI RVJfQ1RYX2luaXQoJmN0eCk7CisrCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVz X2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVW UF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgOCk7CisrCWlmIChFVlBfQ2lwaGVySW5p dF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQor KwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCA4KTsKKysJaWYg KG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCA4KSkKKysJCWdvdG8gZXJyOworKwlyZXQgPSAxOwor KwllcnI6CisrCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrCXJldHVybiByZXQ7Cisr CX0KKysKKysvKgorKyAqIERTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0 IHBsYWludGV4dC4KKysgKi8KKytzdGF0aWMgaW50IEZJUFNfZHNhX3Rlc3QoaW50IGJhZCkKKysg ICAgeworKyAgICBEU0EgKmRzYSA9IE5VTEw7CisrICAgIEVWUF9QS0VZIHBrOworKyAgICB1bnNp Z25lZCBjaGFyIGRnc3RbXSA9ICJldGFvbnJpc2hkbGMiOworKyAgICB1bnNpZ25lZCBjaGFyIGJ1 Zls2MF07CisrICAgIHVuc2lnbmVkIGludCBzbGVuOworKyAgICBpbnQgciA9IDA7CisrICAgIEVW UF9NRF9DVFggbWN0eDsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIEVWUF9NRF9D VFhfaW5pdCgmbWN0eCk7CisrICAgIGRzYSA9IERTQV9uZXcoKTsKKysgICAgaWYgKCFkc2EpCisr CWdvdG8gZW5kOworKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAy NCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFEU0FfZ2Vu ZXJhdGVfa2V5KGRzYSkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoYmFkKQorKwkgICAgQk5fYWRk X3dvcmQoZHNhLT5wdWJfa2V5LCAxKTsKKysKKysgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsK KysgICAgcGsucGtleS5kc2EgPSBkc2E7CisrCisrICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZt Y3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25V cGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAg aWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQorKwlnb3RvIGVuZDsK KysKKysgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkp CisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGRnc3QsIHNp emVvZihkZ3N0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgm bWN0eCwgYnVmLCBzbGVuLCAmcGspOworKyAgICBlbmQ6CisrICAgIEVWUF9NRF9DVFhfY2xlYW51 cCgmbWN0eCk7CisrICAgIGlmIChkc2EpCisrICAJICBEU0FfZnJlZShkc2EpOworKyAgICBpZiAo ciAhPSAxKQorKwlyZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKgorKyAq IFJTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KKysg Ki8KKytzdGF0aWMgaW50IEZJUFNfcnNhX3Rlc3QoaW50IGJhZCkKKysgICAgeworKyAgICBSU0Eg KmtleTsKKysgICAgdW5zaWduZWQgY2hhciBpbnB1dF9wdGV4dFtdID0gImV0YW9ucmlzaGRsYyI7 CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07CisrICAgIHVuc2lnbmVkIGludCBzbGVuOwor KyAgICBCSUdOVU0gKmJuOworKyAgICBFVlBfTURfQ1RYIG1jdHg7CisrICAgIEVWUF9QS0VZIHBr OworKyAgICBpbnQgciA9IDA7CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBFVlBf TURfQ1RYX2luaXQoJm1jdHgpOworKyAgICBrZXkgPSBSU0FfbmV3KCk7CisrICAgIGJuID0gQk5f bmV3KCk7CisrICAgIGlmICgha2V5IHx8ICFibikKKysJcmV0dXJuIDA7CisrICAgIEJOX3NldF93 b3JkKGJuLCA2NTUzNyk7CisrICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQs Ym4sTlVMTCkpCisrCXJldHVybiAwOworKyAgICBCTl9mcmVlKGJuKTsKKysgICAgaWYgKGJhZCkK KysJICAgIEJOX2FkZF93b3JkKGtleS0+biwgMSk7CisrCisrICAgIHBrLnR5cGUgPSBFVlBfUEtF WV9SU0E7CisrICAgIHBrLnBrZXkucnNhID0ga2V5OworKworKyAgICBpZiAoIUVWUF9TaWduSW5p dF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVW UF9TaWduVXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEp KQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVu LCAmcGspKQorKwlnb3RvIGVuZDsKKysKKysgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0 eCwgRVZQX3NoYTEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9WZXJpZnlV cGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCisrCWdv dG8gZW5kOworKyAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7 CisrICAgIGVuZDoKKysgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKysgICAgaWYgKGtl eSkKKysgIAkgICAgUlNBX2ZyZWUoa2V5KTsKKysgICAgaWYgKHIgIT0gMSkKKysJcmV0dXJuIDA7 CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBr bm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBj b3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19zaGExX3Rlc3QoKQorKyAgICB7Cisr ICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdFU1RfTEVOR1RIXSA9CisrICAgICAgICB7 IDB4MTEsIDB4ZjEsIDB4OWEsIDB4M2EsIDB4ZWMsIDB4MWEsIDB4MWUsIDB4OGUsIDB4NjUsIDB4 ZDQsIDB4OWEsIDB4MzgsIDB4MGMsIDB4OGIsIDB4MWUsIDB4MmMsIDB4ZTgsIDB4YjMsIDB4YzUs IDB4MTggfTsKKysgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKKysKKysg ICAgdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07CisrCisrICAgIEVSUl9jbGVh cl9lcnJvcigpOworKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwg TlVMTCwgRVZQX3NoYTEoKSwgTlVMTCkpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG1kLGRp Z2VzdCxzaXplb2YobWQpKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysg ICAgfQorKworKy8qIFNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUg YW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLwor K3N0YXRpYyBpbnQgRklQU19zaGEyNTZfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hh ciBkaWdlc3RbU0hBMjU2X0RJR0VTVF9MRU5HVEhdID0KKysJezB4ZjUsIDB4NTMsIDB4Y2QsIDB4 YjgsIDB4Y2YsIDB4MSwgMHhlZSwgMHgxNywgMHg5YiwgMHg5MywgMHhjOSwgMHg2OCwgMHhjMCwg MHhlYSwgMHg0MCwgMHg5MSwKKysJIDB4NiwgMHhlYywgMHg4ZSwgMHgxMSwgMHg5NiwgMHhjOCwg MHg1ZCwgMHgxYywgMHhhZiwgMHg2NCwgMHgyMiwgMHhlNiwgMHg1MCwgMHg0ZiwgMHg0NywgMHg1 N307CisrICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7CisrCisrICAgIHVu c2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworKworKyAgICBFUlJfY2xlYXJf ZXJyb3IoKTsKKysgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5V TEwsIEVWUF9zaGEyNTYoKSwgTlVMTCkpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG1kLGRp Z2VzdCxzaXplb2YobWQpKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysg ICAgfQorKworKy8qIFNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUg YW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLwor K3N0YXRpYyBpbnQgRklQU19zaGE1MTJfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hh ciBkaWdlc3RbU0hBNTEyX0RJR0VTVF9MRU5HVEhdID0KKysJezB4OTksIDB4YzksIDB4ZTksIDB4 NWIsIDB4ODgsIDB4ZDQsIDB4NzgsIDB4ODgsIDB4ZGYsIDB4ODgsIDB4NWYsIDB4OTQsIDB4NzEs IDB4NjQsIDB4MjgsIDB4Y2EsCisrCSAweDE2LCAweDFmLCAweDNkLCAweGY0LCAweDFmLCAweGYz LCAweDBmLCAweGM1LCAweDAzLCAweDk5LCAweGIyLCAweGQwLCAweGU3LCAweDBiLCAweDk0LCAw eDRhLAorKwkgMHg0NSwgMHhkMiwgMHg2YywgMHg0ZiwgMHgyMCwgMHgwNiwgMHhlZiwgMHg3MSwg MHhhOSwgMHgyNSwgMHg3ZiwgMHgyNCwgMHhiMSwgMHhkOSwgMHg0MCwgMHgyMiwKKysJIDB4NDks IDB4NTQsIDB4MTAsIDB4YzIsIDB4MjIsIDB4OWQsIDB4MjcsIDB4ZmUsIDB4YmQsIDB4ZDYsIDB4 ZDYsIDB4ZWIsIDB4MmQsIDB4NDIsIDB4MWQsIDB4YTN9OworKyAgICB1bnNpZ25lZCBjaGFyIHN0 cltdID0gImV0YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdF U1RfTEVOR1RIXTsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghRVZQX0Rp Z2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhNTEyKCksIE5VTEwpKSBy ZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCisrICAgICAg ICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFDLVNIQTE6IGdl bmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisr ICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19z aGExX3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNo ZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2ln bmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweDczLCAweGY3LCAweGEwLCAw eDQ4LCAweGY4LCAweDk0LCAweGVkLCAweGRkLCAweDBhLCAweGVhLCAweGVhLCAweDU2LCAweDFi LCAweDYxLCAweDJlLCAweDcwLAorKwkgMHhiMiwgMHhmYiwgMHhlYywgMHhjNn07CisrCisrICAg IHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBv dXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3No YTEoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1 cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKKysgICAgICAgIHJldHVy biAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMtU0hBMjI0OiBnZW5lcmF0 ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHBy ZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjI0 X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7 CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2lnbmVk IGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweDc1LCAweDU4LCAweGQ1LCAweGJk LCAweDU1LCAweDZkLCAweDg3LCAweDBmLCAweDc1LCAweGZmLCAweGJlLCAweDFjLCAweGIyLCAw eGYwLCAweDIwLCAweDM1LAorKwkgMHhlNSwgMHg2MiwgMHg0OSwgMHhiNiwgMHg5NCwgMHhiOSwg MHhmYywgMHg2NSwgMHgzNCwgMHgzMywgMHgzYSwgMHgxOX07CisrCisrICAgIHVuc2lnbmVkIGNo YXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisr ICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3NoYTIyNCgpLGtleSxz aXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAg ICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAg IHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yg a25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQg Y29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpCisr ICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5z aWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZh bFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4ZTksIDB4MTcsIDB4YzEsIDB4N2IsIDB4NGMsIDB4 NmIsIDB4NzcsIDB4ZGEsIDB4ZDIsIDB4MzAsIDB4MzYsIDB4MDIsIDB4ZjUsIDB4NzIsIDB4MzMs IDB4ODcsCisrCSAweDlmLCAweGM2LCAweDZlLCAweDdiLCAweDdlLCAweGE4LCAweGVhLCAweGFh LCAweDlmLCAweGJhLCAweGVlLCAweDUxLCAweGZmLCAweGRhLCAweDI0LCAweGY0fTsKKysKKysg ICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50 IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQyhFVlBf c2hhMjU2KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkg cmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAgICAgICBy ZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFDLVNIQTM4NDogZ2Vu ZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysg ICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3No YTM4NF90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlz aGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNp Z25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHhiMiwgMHg5ZCwgMHg0MCwg MHg1OCwgMHgzMiwgMHhjNCwgMHhlMywgMHgzMSwgMHhiNiwgMHg2MywgMHgwOCwgMHgyNiwgMHg5 OSwgMHhlZiwgMHgzYiwgMHgxMCwKKysJIDB4ZTIsIDB4ZGYsIDB4ZjgsIDB4ZmYsIDB4YzYsIDB4 ZTEsIDB4MDMsIDB4MjksIDB4ODEsIDB4MmEsIDB4MWIsIDB4YWMsIDB4YjAsIDB4MDcsIDB4Mzks IDB4MDgsCisrCSAweGYzLCAweDkxLCAweDM1LCAweDExLCAweDc2LCAweGQ2LCAweDRjLCAweDIw LCAweGZiLCAweDRkLCAweGMzLCAweGYzLCAweGI4LCAweDliLCAweDg4LCAweDFjfTsKKysKKysg ICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50 IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQyhFVlBf c2hhMzg0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkg cmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAgICAgICBy ZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFDLVNIQTUxMjogZ2Vu ZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysg ICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3No YTUxMl90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlz aGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNp Z25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHhjZCwgMHgzZSwgMHhiOSwg MHg1MSwgMHhiOCwgMHhiYywgMHg3ZiwgMHg5YSwgMHgyMywgMHhhZiwgMHhmMywgMHg3NywgMHg1 OSwgMHg4NSwgMHhhOSwgMHhlNiwKKysJIDB4ZjcsIDB4ZDEsIDB4NTEsIDB4OTYsIDB4MTcsIDB4 ZTAsIDB4OTIsIDB4ZDgsIDB4YTYsIDB4M2IsIDB4YzEsIDB4YWQsIDB4N2UsIDB4MjQsIDB4Y2Es IDB4YjEsCisrCSAweGQ3LCAweDc5LCAweDBhLCAweGE1LCAweGVhLCAweDJjLCAweDAyLCAweDU4 LCAweDBiLCAweGE2LCAweDUyLCAweDZiLCAweDYxLCAweDdmLCAweGViLCAweDljLAorKwkgMHg0 NywgMHg4NiwgMHg1ZCwgMHg3NCwgMHgyYiwgMHg4OCwgMHhkZiwgMHhlZSwgMHg0NiwgMHg2OSwg MHg5NiwgMHgzZCwgMHhhNiwgMHhkOSwgMHgyYSwgMHg1M307CisrCisrICAgIHVuc2lnbmVkIGNo YXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisr ICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3NoYTUxMigpLGtleSxz aXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAg ICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAg IHJldHVybiAxOworKyAgICB9CisrCisrCisrLyogREg6IGdlbmVyYXRlIHNoYXJlZCBwYXJhbWV0 ZXJzCisrKi8KKytzdGF0aWMgaW50IGRoX3Rlc3QoKQorKyAgICB7CisrICAgIERIICpkaDsKKysg ICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGRoID0gRklQU19kaF9uZXcoKTsKKysgICAgaWYg KCFkaCkKKysJcmV0dXJuIDA7CisrICAgIGlmICghREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChk aCwgMTAyNCwgMiwgTlVMTCkpCisrCXJldHVybiAwOworKyAgICBGSVBTX2RoX2ZyZWUoZGgpOwor KyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFplcm9pemUKKysqLworK3N0YXRpYyBpbnQg WmVyb2l6ZSgpCisrICAgIHsKKysgICAgUlNBICprZXk7CisrICAgIEJJR05VTSAqYm47CisrICAg IHVuc2lnbmVkIGNoYXIgdXNlcmtleVsxNl0gPSAKKysJeyAweDQ4LCAweDUwLCAweGYwLCAweGEz LCAweDNhLCAweGVkLCAweGQzLCAweGFmLCAweDZlLCAweDQ3LCAweDdmLCAweDgzLCAweDAyLCAw eGIxLCAweDA5LCAweDY4IH07CisrICAgIGludCBpLCBuOworKworKyAgICBrZXkgPSBGSVBTX3Jz YV9uZXcoKTsKKysgICAgYm4gPSBCTl9uZXcoKTsKKysgICAgaWYgKCFrZXkgfHwgIWJuKQorKwly ZXR1cm4gMDsKKysgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKKysgICAgaWYgKCFSU0FfZ2Vu ZXJhdGVfa2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKKysJcmV0dXJuIDA7CisrICAgIEJOX2Zy ZWUoYm4pOworKyAgICAKKysgICAgbiA9IEJOX251bV9ieXRlcyhrZXktPmQpOworKyAgICBwcmlu dGYoIiBHZW5lcmF0ZWQgJWQgYnl0ZSBSU0EgcHJpdmF0ZSBrZXlcbiIsIG4pOworKyAgICBwcmlu dGYoIlx0Qk4ga2V5IGJlZm9yZSBvdmVyd3JpdGluZzpcbiIpOworKyAgICBkb19ibl9wcmludChz dGRvdXQsIGtleS0+ZCk7CisrICAgIEJOX3JhbmQoa2V5LT5kLG4qOCwtMSwwKTsKKysgICAgcHJp bnRmKCJcdEJOIGtleSBhZnRlciBvdmVyd3JpdGluZzpcbiIpOworKyAgICBkb19ibl9wcmludChz dGRvdXQsIGtleS0+ZCk7CisrCisrICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYmVmb3Jl IG92ZXJ3cml0aW5nOiBcblx0XHQiKTsKKysgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJr ZXkpOyBpKyspIHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOworKyAgICAgICAgcHJpbnRmKCJc biIpOworKyAgICBSQU5EX2J5dGVzKHVzZXJrZXksIHNpemVvZiB1c2Vya2V5KTsKKysgICAgcHJp bnRmKCJcdGNoYXIgYnVmZmVyIGtleSBhZnRlciBvdmVyd3JpdGluZzogXG5cdFx0Iik7CisrICAg IGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vy a2V5W2ldKTsKKysgICAgICAgIHByaW50ZigiXG4iKTsKKysKKysgICAgcmV0dXJuIDE7CisrICAg IH0KKysKKytzdGF0aWMgaW50IEVycm9yOworK2NvbnN0IGNoYXIgKiBGYWlsKGNvbnN0IGNoYXIg Km1zZykKKysgICAgeworKyAgICBkb19wcmludF9lcnJvcnMoKTsKKysgICAgRXJyb3IrKzsKKysg ICAgcmV0dXJuIG1zZzsgCisrICAgIH0KKysKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJn dikKKysgICAgeworKworKyAgICBpbnQgZG9fY29ycnVwdF9yc2Ffa2V5Z2VuID0gMCwgZG9fY29y cnVwdF9kc2Ffa2V5Z2VuID0gMDsKKysgICAgaW50IGJhZF9yc2EgPSAwLCBiYWRfZHNhID0gMDsK KysgICAgaW50IGRvX3JuZ19zdGljayA9IDA7CisrICAgIGludCBub19leGl0ID0gMDsKKysKKysg ICAgcHJpbnRmKCJcdEZJUFMtbW9kZSB0ZXN0IGFwcGxpY2F0aW9uXG5cbiIpOworKworKyAgICAv KiBMb2FkIGVudHJvcHkgZnJvbSBleHRlcm5hbCBmaWxlLCBpZiBhbnkgKi8KKysgICAgUkFORF9s b2FkX2ZpbGUoIi5ybmQiLCAxMDI0KTsKKysKKysgICAgaWYgKGFyZ3ZbMV0pIHsKKysgICAgICAg IC8qIENvcnJ1cHRlZCBLQVQgdGVzdHMgKi8KKysgICAgICAgIGlmICghc3RyY21wKGFyZ3ZbMV0s ICJhZXMiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9hZXMoKTsKKysgICAgICAgICAg ICBwcmludGYoIkFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4u XG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZGVzIikpIHsKKysg ICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZGVzKCk7CisrICAgICAgICAgICAgcHJpbnRmKCJERVMz LUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysg ICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNhIikpIHsKKysgICAgICAgICAg ICBGSVBTX2NvcnJ1cHRfZHNhKCk7CisrICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVy YXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7 CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYSIpKSB7CisrICAgICAg ICAgICAgRklQU19jb3JydXB0X3JzYSgpOworKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBn ZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5c biIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXkiKSkgewor KyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFs aWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOworKwkgICAgYmFkX3JzYSA9IDE7Cisr CSAgICBub19leGl0ID0gMTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAi cnNha2V5Z2VuIikpIHsKKysJICAgIGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDE7CisrCSAgICBu b19leGl0ID0gMTsKKysgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQg c2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsKKysgICAg ICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5IikpIHsKKysgICAgICAgICAg ICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0 aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKKysJICAgIGJhZF9kc2EgPSAxOworKwkgICAgbm9fZXhp dCA9IDE7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleWdlbiIp KSB7CisrCSAgICBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAxOworKwkgICAgbm9fZXhpdCA9IDE7 CisrICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2 YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7CisrICAgICAgICB9IGVsc2Ug aWYgKCFzdHJjbXAoYXJndlsxXSwgInNoYTEiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVw dF9zaGExKCk7CisrICAgICAgICAgICAgcHJpbnRmKCJTSEEtMSBoYXNoIHdpdGggY29ycnVwdGVk IEtBVC4uLlxuIik7CisrCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nIikpIHsKKysJ ICAgIEZJUFNfY29ycnVwdF9ybmcoKTsKKysJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJy bmdzdGljayIpKSB7CisrCSAgICBkb19ybmdfc3RpY2sgPSAxOworKwkgICAgbm9fZXhpdCA9IDE7 CisrCSAgICBwcmludGYoIlJORyB0ZXN0IHdpdGggc3R1Y2sgY29udGludW91cyB0ZXN0Li4uXG4i KTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgcHJpbnRmKCJCYWQgYXJndW1lbnQg XCIlc1wiXG4iLCBhcmd2WzFdKTsKKysgICAgICAgICAgICBleGl0KDEpOworKyAgICAgICAgfQor KwlpZiAoIW5vX2V4aXQpIHsKKysgICAgICAgIAlpZiAoIUZJUFNfbW9kZV9zZXQoMSkpIHsKKysg CQkgICAgZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgICAgICAJICAgIHByaW50ZigiUG93ZXItdXAg c2VsZiB0ZXN0IGZhaWxlZFxuIik7CisrCQkgICAgZXhpdCgxKTsKKysJCX0KKysgICAgICAgIAlw cmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBzdWNjZXNzZnVsXG4iKTsKKysgICAgICAgIAlleGl0 KDApOworKwl9CisrICAgIH0KKysKKysgICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMg b3BlcmF0aW9uCisrICAgICovCisrICAgIHByaW50ZigiMS4gTm9uLUFwcHJvdmVkIGNyeXB0b2dy YXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOworKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQg YWxnb3JpdGhtIChELUgpLi4uIik7CisrICAgIHByaW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3Nm dWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogUG93ZXItdXAgc2VsZiB0 ZXN0CisrICAgICovCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBwcmludGYoIjIuIEF1 dG9tYXRpYyBwb3dlci11cCBzZWxmIHRlc3QuLi4iKTsKKysgICAgaWYgKCFGSVBTX21vZGVfc2V0 KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKyAgICAgICAgcHJpbnRmKEZhaWwoIkZB SUxFRCFcbiIpKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBwcmludGYoInN1Y2Nlc3NmdWxcbiIp OworKyAgICBpZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2VuKQorKyAgICAgICAgICAgIEZJUFNfY29y cnVwdF9kc2Ffa2V5Z2VuKCk7CisrICAgIGlmIChkb19jb3JydXB0X3JzYV9rZXlnZW4pCisrICAg ICAgICAgICAgRklQU19jb3JydXB0X3JzYV9rZXlnZW4oKTsKKysgICAgaWYgKGRvX3JuZ19zdGlj aykKKysgICAgICAgICAgICBGSVBTX3JuZ19zdGljaygpOworKworKyAgICAvKiBBRVMgZW5jcnlw dGlvbi9kZWNyeXB0aW9uCisrICAgICovCisrICAgIHByaW50ZigiMy4gQUVTIGVuY3J5cHRpb24v ZGVjcnlwdGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNfYWVzX3Rlc3QoKSA/ICJzdWNjZXNz ZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFJTQSBrZXkgZ2VuZXJh dGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICovCisrICAgIHByaW50ZigiNC4g UlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKKysgICAg cHJpbnRmKCBGSVBTX3JzYV90ZXN0KGJhZF9yc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgi RkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogREVTLUNCQyBlbmNyeXB0aW9uL2RlY3J5cHRpb24K KysgICAgKi8KKysgICAgcHJpbnRmKCI1LiBERVMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4u LiIpOworKyAgICBwcmludGYoIEZJUFNfZGVzM190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBG YWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNp Z25hdHVyZSB2YWxpZGF0aW9uCisrICAgICovCisrICAgIHByaW50ZigiNi4gRFNBIGtleSBnZW5l cmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNf ZHNhX3Rlc3QoYmFkX2RzYSkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSAp OworKworKyAgICAvKiBTSEEtMSBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2EuIFNIQS0x IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxc biIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogU0hBLTI1NiBoYXNoCisrICAg ICovCisrICAgIHByaW50ZigiN2IuIFNIQS0yNTYgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJ UFNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7 CisrCisrICAgIC8qIFNIQS01MTIgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdjLiBTSEEt NTEyIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vz c2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS0xIGhh c2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3ZC4gSE1BQy1TSEEtMSBoYXNoLi4uIik7CisrICAg IHByaW50ZiggRklQU19obWFjX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgi RkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMjI0IGhhc2gKKysgICAgKi8KKysg ICAgcHJpbnRmKCI3ZS4gSE1BQy1TSEEtMjI0IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBT X2htYWNfc2hhMjI0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIp ICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTI1NiBoYXNoCisrICAgICovCisrICAgIHByaW50Zigi N2YuIEhNQUMtU0hBLTI1NiBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTI1 Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAg ICAvKiBITUFDLVNIQS0zODQgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdnLiBITUFDLVNI QS0zODQgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEzODRfdGVzdCgpID8g InN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1T SEEtNTEyIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3aC4gSE1BQy1TSEEtNTEyIGhhc2gu Li4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhNTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVs XG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlw dG9ncmFwaGljIG9wZXJhdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjguIE5vbi1BcHByb3Zl ZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKKysgICAgcHJpbnRmKCJcdGEu IEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOworKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ ICJzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCisrCSAgICA6IEZhaWwoImZhaWxlZCBJTkNPUlJF Q1RMWSFcbiIpICk7CisrCisrICAgIC8qIFplcm9pemF0aW9uCisrICAgICovCisrICAgIHByaW50 ZigiOS4gWmVyby1pemF0aW9uLi4uXG4iKTsKKysgICAgcHJpbnRmKCBaZXJvaXplKCkgPyAiXHRz dWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCisrCSAgICA6IEZhaWwoIlx0ZmFpbGVkIElOQ09SUkVD VExZIVxuIikgKTsKKysKKysgICAgcHJpbnRmKCJcbkFsbCB0ZXN0cyBjb21wbGV0ZWQgd2l0aCAl ZCBlcnJvcnNcbiIsIEVycm9yKTsKKysgICAgcmV0dXJuIEVycm9yID8gMSA6IDA7CisrICAgIH0K KysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9maXBzL01ha2VmaWxl LmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvTWFrZWZpbGUKKy0tLSBvcGVuc3NsLTEu MC4xYi9jcnlwdG8vZmlwcy9NYWtlZmlsZS5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA5NzY5 NDk2ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAxMi0w NC0yNiAxODowMDo1MS40MDk3Njk0OTYgKzAyMDAKK0BAIC0wLDAgKzEsMzQwIEBACisrIworKyMg T3BlblNTTC9jcnlwdG8vZmlwcy9NYWtlZmlsZQorKyMKKysKKytESVI9CWZpcHMKKytUT1A9CS4u Ly4uCisrQ0M9CWNjCisrSU5DTFVERVM9CisrQ0ZMQUc9LWcKKytNQUtFRklMRT0JTWFrZWZpbGUK KytBUj0JCWFyIHIKKysKKytDRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCisrCisrR0VORVJB TD1NYWtlZmlsZQorK1RFU1Q9Zmlwc190ZXN0X3N1aXRlLmMgZmlwc19yYW5kdGVzdC5jCisrQVBQ Uz0KKysKKytQUk9HUkFNPSBmaXBzX3N0YW5kYWxvbmVfaG1hYworK0VYRT0gJChQUk9HUkFNKSQo RVhFX0VYVCkKKysKKytMSUI9JChUT1ApL2xpYmNyeXB0by5hCisrTElCU1JDPWZpcHNfYWVzX3Nl bGZ0ZXN0LmMgZmlwc19kZXNfc2VsZnRlc3QuYyBmaXBzX2htYWNfc2VsZnRlc3QuYyBmaXBzX3Jh bmRfc2VsZnRlc3QuYyBcCisrICAgIGZpcHNfcnNhX3NlbGZ0ZXN0LmMgZmlwc19zaGFfc2VsZnRl c3QuYyBmaXBzLmMgZmlwc19kc2Ffc2VsZnRlc3QuYyAgZmlwc19yYW5kLmMgXAorKyAgICBmaXBz X3JzYV94OTMxZy5jIGZpcHNfcG9zdC5jIGZpcHNfZHJiZ19jdHIuYyBmaXBzX2RyYmdfaGFzaC5j IGZpcHNfZHJiZ19obWFjLmMgXAorKyAgICBmaXBzX2RyYmdfbGliLmMgZmlwc19kcmJnX3JhbmQu YyBmaXBzX2RyYmdfc2VsZnRlc3QuYyBmaXBzX3JhbmRfbGliLmMgXAorKyAgICBmaXBzX2NtYWNf c2VsZnRlc3QuYyBmaXBzX2VuYy5jIGZpcHNfbWQuYworKworK0xJQk9CSj1maXBzX2Flc19zZWxm dGVzdC5vIGZpcHNfZGVzX3NlbGZ0ZXN0Lm8gZmlwc19obWFjX3NlbGZ0ZXN0Lm8gZmlwc19yYW5k X3NlbGZ0ZXN0Lm8gXAorKyAgICBmaXBzX3JzYV9zZWxmdGVzdC5vIGZpcHNfc2hhX3NlbGZ0ZXN0 Lm8gZmlwcy5vIGZpcHNfZHNhX3NlbGZ0ZXN0Lm8gIGZpcHNfcmFuZC5vIFwKKysgICAgZmlwc19y c2FfeDkzMWcubyBmaXBzX3Bvc3QubyBmaXBzX2RyYmdfY3RyLm8gZmlwc19kcmJnX2hhc2gubyBm aXBzX2RyYmdfaG1hYy5vIFwKKysgICAgZmlwc19kcmJnX2xpYi5vIGZpcHNfZHJiZ19yYW5kLm8g Zmlwc19kcmJnX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX2xpYi5vIFwKKysgICAgZmlwc19jbWFjX3Nl bGZ0ZXN0Lm8gZmlwc19lbmMubyBmaXBzX21kLm8KKysKKytMSUJDUllQVE89LUwuLiAtbGNyeXB0 bworKworK1NSQz0gJChMSUJTUkMpIGZpcHNfc3RhbmRhbG9uZV9obWFjLmMKKysKKytFWEhFQURF Uj0gZmlwcy5oIGZpcHNfcmFuZC5oCisrSEVBREVSPQkkKEVYSEVBREVSKQorKworK0FMTD0gICAg JChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCisrCisrdG9wOgorKwkoY2QgLi4vLi47ICQoTUFL RSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCisrCisrYWxsOglsaWIgZXhlCisr CisrbGliOgkkKExJQk9CSikKKysJJChBUikgJChMSUIpICQoTElCT0JKKQorKwkkKFJBTkxJQikg JChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KKysJQHRvdWNoIGxpYgorKworK2V4ZToJJChFWEUp CisrCisrZmlsZXM6CisrCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4g JChUT1ApL01JTkZPCisrCisrbGlua3M6CisrCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5w bCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKKysJQCQoUEVSTCkgJChUT1ApL3V0 aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQorKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9t a2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCisrCisraW5zdGFsbDoKKysJQFsgLW4gIiQoSU5T VEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgorKwlAaGVhZGVy bGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCisrCWRvICBcCisr CShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8k JGk7IFwKKysJY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRl L29wZW5zc2wvJCRpICk7IFwKKysJZG9uZTsKKysKKyt0YWdzOgorKwljdGFncyAkKFNSQykKKysK Kyt0ZXN0czoKKysKKytsaW50OgorKwlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1 ZmYKKysKKytkZXBlbmQ6CisrCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNl dCBieSB1cHBlciBNYWtlZmlsZS4uLgorKwkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5D TFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCisrCisrZGNsZWFuOgorKwkk KFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhp dCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3CisrCW12IC1mIE1ha2VmaWxlLm5ldyAk KE1BS0VGSUxFKQorKworK2NsZWFuOgorKwlybSAtZiAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAu cHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgorKworKyQoRVhFKTogJChQUk9HUkFNKS5vCisr CUZJUFNfU0hBX0FTTT0iIjsgZm9yIGkgaW4gJChTSEExX0FTTV9PQkopIHNoYTI1Ni5vOyBkbyBG SVBTX1NIQV9BU009IiQkRklQU19TSEFfQVNNIC4uL3NoYS8kJGkiIDsgZG9uZTsgXAorKwkkKEND KSAtbyAkQCAkKENGTEFHUykgJChQUk9HUkFNKS5vICQkRklQU19TSEFfQVNNCisrCisrIyBETyBO T1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgorKworK2Zp cHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvY3J5cHRvLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCisr Zmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2Zp cHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv cnNhLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmggZmlwcy5jIGZpcHNfbG9jbC5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBz X2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2Fl c19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19hZXNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfYWVzX3NlbGZ0ZXN0LmMKKytmaXBzX2Rlc19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9j cnlwdG8uaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisr Zmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBz X2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19k ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZGVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19k ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2Rl c19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfZGVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZGVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19kZXNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kZXNfc2VsZnRl c3QuYworK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RyYmdf Y3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAor K2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNf ZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2Ry YmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX2N0 ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvcmFuZC5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0 YWNrLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZmlwc19kcmJnX2N0ci5vOiBmaXBzX2Ry YmdfY3RyLmMgZmlwc19yYW5kX2xjbC5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdf aGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19o YXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfaGFzaC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19oYXNoLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX2hhc2gubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQu aAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAor K2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19k cmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX2hh c2guYworK2ZpcHNfZHJiZ19oYXNoLm86IGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJiZ19obWFj Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfZHJi Z19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2RyYmdfaG1hYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFj LmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisr Zmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytm aXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNf ZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oIGZpcHNfZHJiZ19obWFjLmMKKytmaXBzX2RyYmdfaG1hYy5vOiBmaXBzX3JhbmRfbGNsLmgK KytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJnX2xpYi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZmlwc19yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2ZpcHNfZHJi Z19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5o CisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZmlwc19kcmJn X2xpYi5vOiBmaXBzX2RyYmdfbGliLmMgZmlwc19sb2NsLmggZmlwc19yYW5kX2xjbC5oCisrZmlw c19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJnX3JhbmQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o CisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19kcmJnX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNf ZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZHJi Z19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19kcmJnX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX3JhbmQuYworK2Zp cHNfZHJiZ19yYW5kLm86IGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAor K2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBz X2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19k cmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZHJiZ19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2ZpcHNfZHJiZ19zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX3NlbGZ0ZXN0LmMKKytmaXBz X2RyYmdfc2VsZnRlc3QubzogZmlwc19kcmJnX3NlbGZ0ZXN0LmggZmlwc19sb2NsLmggZmlwc19y YW5kX2xjbC5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgK KytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19kc2Ff c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0 YWNrLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFj a3MuaCBmaXBzX2RzYV9zZWxmdGVzdC5jCisrZmlwc19kc2Ffc2VsZnRlc3QubzogZmlwc19sb2Ns LmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNf aG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvaG1hYy5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9saGFzaC5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmpfbWFjLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmggZmlwc19obWFjX3NlbGZ0ZXN0LmMKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX3Bvc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlw dG8uaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAor K2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfcG9zdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAor K2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9yc2EuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0 YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX3Bvc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19sb2NsLmggZmlwc19wb3N0LmMKKytmaXBz X3JhbmQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaAorK2ZpcHNf cmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9iaW8uaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfcmFuZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3Jh bmQuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfcmFuZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcmFuZC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2ZpcHNfcmFu ZC5vOiBmaXBzX2xvY2wuaCBmaXBzX3JhbmQuYworK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vZV9v cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBz X3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZV9vczIuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfcmFuZF9saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5k LmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2ZpcHNf cmFuZF9saWIubzogZmlwc19yYW5kX2xpYi5jCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlw c19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfcmFu ZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX3JhbmRf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfcmFuZF9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2xvY2wuaAorK2ZpcHNfcmFuZF9zZWxmdGVz dC5vOiBmaXBzX3JhbmRfc2VsZnRlc3QuYworK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19y c2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19yc2Ffc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgK KytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisr Zmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgK KytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAor K2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisr Zmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCisrZmlwc19y c2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19y c2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX3JzYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX3JzYV9zZWxm dGVzdC5jCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX3Jz YV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yc2FfeDkzMWcubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorK2Zp cHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNf cnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19yc2FfeDkz MWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19yc2FfeDkzMWcuYwor K2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19zaGFfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9maXBzLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFj LmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o CisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o CisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5o CisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19zaGFfc2VsZnRlc3QuYworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRv L2htYWMvaG1hYy5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMJ MjAxMS0wNi0xMiAxNzowNzoyNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vaG1hYy9obWFjLmMJMjAxMi0wNC0yNiAxODowMDo1MS40MDk3Njk0OTYgKzAyMDAKK0BA IC04MSwxMSArODEsNiBAQCBpbnQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZv CisgCQkJRVZQZXJyKEVWUF9GX0hNQUNfSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMp OworIAkJCXJldHVybiAwOworIAkJCX0KKy0JCS8qIE90aGVyIGFsZ29yaXRobSBibG9ja2luZyB3 aWxsIGJlIGRvbmUgaW4gRklQU19jbWFjX2luaXQsCistCQkgKiB2aWEgRklQU19obWFjX2luaXRf ZXgoKS4KKy0JCSAqLworLQkJaWYgKCFpbXBsICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKKy0JCQly ZXR1cm4gRklQU19obWFjX2luaXRfZXgoY3R4LCBrZXksIGxlbiwgbWQsIE5VTEwpOworIAkJfQor ICNlbmRpZgorIAorQEAgLTk5LDYgKzk0LDEzIEBAIGludCBITUFDX0luaXRfZXgoSE1BQ19DVFgg KmN0eCwgY29uc3Qgdm8KKyAKKyAJaWYgKGtleSAhPSBOVUxMKQorIAkJeworKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSAmJiAhKG1kLT5mbGFncyAmIEVWUF9NRF9GTEFH X0ZJUFMpCisrCQkmJiAoIShjdHgtPm1kX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05f RklQU19BTExPVykKKysJCSB8fCAhKGN0eC0+aV9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cpCisrCQkgfHwgIShjdHgtPm9fY3R4LmZsYWdzICYgRVZQX01EX0NUWF9G TEFHX05PTl9GSVBTX0FMTE9XKSkpCisrCQkJZ290byBlcnI7CisrI2VuZGlmCisgCQlyZXNldD0x OworIAkJaj1FVlBfTURfYmxvY2tfc2l6ZShtZCk7CisgCQlPUEVOU1NMX2Fzc2VydChqIDw9IChp bnQpc2l6ZW9mKGN0eC0+a2V5KSk7CitAQCAtMTU1LDEwICsxNTcsNiBAQCBpbnQgSE1BQ19Jbml0 KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQKKyAKKyBpbnQgSE1BQ19VcGRhdGUoSE1BQ19DVFgg KmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbikKKyAJeworLSNpZmRl ZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2luZSkK Ky0JCXJldHVybiBGSVBTX2htYWNfdXBkYXRlKGN0eCwgZGF0YSwgbGVuKTsKKy0jZW5kaWYKKyAJ cmV0dXJuIEVWUF9EaWdlc3RVcGRhdGUoJmN0eC0+bWRfY3R4LGRhdGEsbGVuKTsKKyAJfQorIAor QEAgLTE2NiwxMCArMTY0LDYgQEAgaW50IEhNQUNfRmluYWwoSE1BQ19DVFggKmN0eCwgdW5zaWdu ZWQgYworIAl7CisgCXVuc2lnbmVkIGludCBpOworIAl1bnNpZ25lZCBjaGFyIGJ1ZltFVlBfTUFY X01EX1NJWkVdOworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFj dHgtPmlfY3R4LmVuZ2luZSkKKy0JCXJldHVybiBGSVBTX2htYWNfZmluYWwoY3R4LCBtZCwgbGVu KTsKKy0jZW5kaWYKKyAKKyAJaWYgKCFFVlBfRGlnZXN0RmluYWxfZXgoJmN0eC0+bWRfY3R4LGJ1 ZiwmaSkpCisgCQlnb3RvIGVycjsKK0BAIC0yMDksMTMgKzIwMyw2IEBAIGludCBITUFDX0NUWF9j b3B5KEhNQUNfQ1RYICpkY3R4LCBITUFDX0MKKyAKKyB2b2lkIEhNQUNfQ1RYX2NsZWFudXAoSE1B Q19DVFggKmN0eCkKKyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgp ICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKKy0JCXsKKy0JCUZJUFNfaG1hY19jdHhfY2xlYW51cChj dHgpOworLQkJcmV0dXJuOworLQkJfQorLSNlbmRpZgorIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0 eC0+aV9jdHgpOworIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+b19jdHgpOworIAlFVlBfTURf Q1RYX2NsZWFudXAoJmN0eC0+bWRfY3R4KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0 by9tZDIvbWQyX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9tZDIvbWQyX2Rnc3Qu YworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzCTIwMTEtMDYt MDEgMTU6Mzk6NDMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL21k Mi9tZDJfZGdzdC5jCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA5NzY5NDk2ICswMjAwCitAQCAtNjIs NiArNjIsMTEgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9tZDIuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9vcGVuc3Nsdi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisrI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisgCisgY29uc3QgY2hhciBNRDJfdmVyc2lvbltdPSJNRDIiIE9Q RU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKK0BAIC0xMTYsNyArMTIxLDcgQEAgY29uc3QgY2hhciAq TUQyX29wdGlvbnModm9pZCkKKyAJCXJldHVybigibWQyKGludCkiKTsKKyAJfQorIAorLWZpcHNf bWRfaW5pdChNRDIpCisrbm9uZmlwc19tZF9pbml0KE1EMikKKyAJeworIAljLT5udW09MDsKKyAJ bWVtc2V0KGMtPnN0YXRlLDAsc2l6ZW9mIGMtPnN0YXRlKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFiL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9tZDQv bWQ0X2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBz CTIwMTEtMDYtMDEgMTU6Mzk6NDMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIv Y3J5cHRvL21kNC9tZDRfZGdzdC5jCTIwMTItMDQtMjYgMTg6MDA6NTEuNDA5NzY5NDk2ICswMjAw CitAQCAtNzEsNyArNzEsNyBAQCBjb25zdCBjaGFyIE1ENF92ZXJzaW9uW109Ik1ENCIgT1BFTlNT TF9WCisgI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAorICNk ZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKyAKKy1maXBzX21k X2luaXQoTUQ0KQorK25vbmZpcHNfbWRfaW5pdChNRDQpCisgCXsKKyAJbWVtc2V0IChjLDAsc2l6 ZW9mKCpjKSk7CisgCWMtPkE9SU5JVF9EQVRBX0E7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9j cnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vbWQ1L21kNV9k Z3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcwkyMDEx LTA2LTAxIDE1OjM5OjQzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0 by9tZDUvbWQ1X2Rnc3QuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjQwOTc2OTQ5NiArMDIwMAorQEAg LTcxLDcgKzcxLDcgQEAgY29uc3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVgor ICNkZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKKyAjZGVmaW5l IElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCisgCistZmlwc19tZF9pbml0 KE1ENSkKKytub25maXBzX21kX2luaXQoTUQ1KQorIAl7CisgCW1lbXNldCAoYywwLHNpemVvZigq YykpOworIAljLT5BPUlOSVRfREFUQV9BOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRv L21kYzIvbWRjMmRnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9tZGMyL21kYzJkZ3N0 LmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMJMjAxMS0w Ni0wMSAxNTozOTo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v bWRjMi9tZGMyZGdzdC5jCTIwMTItMDQtMjYgMTg6MDA6NTEuNjkxNzc1NjU2ICswMjAwCitAQCAt NzYsNyArNzYsNyBAQAorIAkJCSooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4 ZmYpKQorIAorIHN0YXRpYyB2b2lkIG1kYzJfYm9keShNREMyX0NUWCAqYywgY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pOworLWZpcHNfbWRfaW5pdChNREMyKQorK25vbmZpcHNf bWRfaW5pdChNREMyKQorIAl7CisgCWMtPm51bT0wOworIAljLT5wYWRfdHlwZT0xOworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL29faW5pdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5 cHRvL29faW5pdC5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL29faW5pdC5jLmZpcHMJMjAx MS0wNS0yNiAxNjoxOToxOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlw dG8vb19pbml0LmMJMjAxMi0wNC0yNiAxODowMDo1MS42OTY3NzU3NjYgKzAyMDAKK0BAIC01NSwy OCArNTUsNjMgQEAKKyAjaW5jbHVkZSA8ZV9vcy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorICNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1 ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5o PgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKworKyNkZWZpbmUg RklQU19NT0RFX1NXSVRDSF9GSUxFICIvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxlZCIKKysK KytzdGF0aWMgdm9pZCBpbml0X2ZpcHNfbW9kZSh2b2lkKQorKwl7CisrCWNoYXIgYnVmWzJdID0g IjAiOworKwlpbnQgZmQ7CisrCQorKwlpZiAoZ2V0ZW52KCJPUEVOU1NMX0ZPUkNFX0ZJUFNfTU9E RSIpICE9IE5VTEwpCisrCQl7CisrCQlidWZbMF0gPSAnMSc7CisrCQl9CisrCWVsc2UgaWYgKChm ZCA9IG9wZW4oRklQU19NT0RFX1NXSVRDSF9GSUxFLCBPX1JET05MWSkpID49IDApCisrCQl7Cisr CQl3aGlsZSAocmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPCAwICYmIGVycm5vID09IEVJTlRS KTsKKysJCWNsb3NlKGZkKTsKKysJCX0KKysJLyogRmFpbHVyZSByZWFkaW5nIHRoZSBmaXBzIG1v ZGUgc3dpdGNoIGZpbGUgbWVhbnMganVzdCBub3QKKysJICogc3dpdGNoaW5nIGludG8gRklQUyBt b2RlLiBXZSB3b3VsZCBicmVhayB0b28gbWFueSB0aGluZ3MKKysJICogb3RoZXJ3aXNlLiAKKysJ ICovCisrCQorKwlpZiAoYnVmWzBdID09ICcxJykKKysJCXsKKysJCUZJUFNfbW9kZV9zZXQoMSk7 CisrCQl9CisrCX0KKyAjZW5kaWYKKyAKKyAvKiBQZXJmb3JtIGFueSBlc3NlbnRpYWwgT3BlblNT TCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zLgorICAqIEN1cnJlbnRseSBvbmx5IHNldHMgRklQ UyBjYWxsYmFja3MKKyAgKi8KKyAKKy12b2lkIE9QRU5TU0xfaW5pdCh2b2lkKQorK3ZvaWQgT1BF TlNTTF9pbml0X2xpYnJhcnkodm9pZCkKKyAJeworIAlzdGF0aWMgaW50IGRvbmUgPSAwOworIAlp ZiAoZG9uZSkKKyAJCXJldHVybjsKKyAJZG9uZSA9IDE7CisgI2lmZGVmIE9QRU5TU0xfRklQUwor LQlGSVBTX3NldF9sb2NraW5nX2NhbGxiYWNrcyhDUllQVE9fbG9jaywgQ1JZUFRPX2FkZF9sb2Nr KTsKKy0JRklQU19zZXRfZXJyb3JfY2FsbGJhY2tzKEVSUl9wdXRfZXJyb3IsIEVSUl9hZGRfZXJy b3JfdmRhdGEpOworLQlGSVBTX3NldF9tYWxsb2NfY2FsbGJhY2tzKENSWVBUT19tYWxsb2MsIENS WVBUT19mcmVlKTsKKyAJUkFORF9pbml0X2ZpcHMoKTsKKysJaW5pdF9maXBzX21vZGUoKTsKKyAj ZW5kaWYKKyAjaWYgMAorIAlmcHJpbnRmKHN0ZGVyciwgIkNhbGxlZCBPUEVOU1NMX2luaXRcbiIp OworICNlbmRpZgorIAl9CisgCisrdm9pZCBPUEVOU1NMX2luaXQodm9pZCkKKysJeworKwlPUEVO U1NMX2luaXRfbGlicmFyeSgpOworKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v b3BlbnNzbGNvbmYuaC5pbi5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9vcGVuc3NsY29uZi5o LmluCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcwkyMDA1 LTEyLTE2IDExOjM3OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0 by9vcGVuc3NsY29uZi5oLmluCTIwMTItMDQtMjYgMTg6MDA6NTEuNzAyNzc1ODk3ICswMjAwCitA QCAtMSw1ICsxLDIwIEBACisgLyogY3J5cHRvL29wZW5zc2xjb25mLmguaW4gKi8KKyAKKysjaWZk ZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECisrCisrLyogSW5jbHVkZSBhbnkgc3ltYm9scyBo ZXJlIHRoYXQgaGF2ZSB0byBiZSBleHBsaWNpdGx5IHNldCB0byBlbmFibGUgYSBmZWF0dXJlCisr ICogdGhhdCBzaG91bGQgYmUgdmlzaWJsZSB0byBtYWtlZGVwZW5kLgorKyAqCisrICogW091ciAi bWFrZSBkZXBlbmQiIGRvZXNuJ3QgYWN0dWFsbHkgbG9vayBhdCB0aGlzLCB3ZSB1c2UgYWN0dWFs IGJ1aWxkIHNldHRpbmdzCisrICogaW5zdGVhZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgdG8g cmVtb3ZlIHN1YmRpcmVjdG9yaWVzIHdpdGggZGlzYWJsZWQgYWxnb3JpdGhtcy5dCisrICovCisr CisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjZGVmaW5lIE9QRU5TU0xfRklQUworKyNlbmRpZgor KworKyNlbmRpZgorKworIC8qIEdlbmVyYXRlIDgwMzg2IGNvZGU/ICovCisgI3VuZGVmIEkzODZf T05MWQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYworLS0tIG9wZW5zc2wt MS4wLjFiL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jLmZpcHMJMjAwOS0wMy0wOSAxNDowODowNC4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vcGtjczEyL3AxMl9jcnQu YwkyMDEyLTA0LTI2IDE4OjAwOjUxLjcwODc3NjAyOCArMDIwMAorQEAgLTU5LDYgKzU5LDEwIEBA CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUg PG9wZW5zc2wvcGtjczEyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyAKKyBzdGF0aWMgaW50IHBrY3MxMl9hZGRfYmFn KFNUQUNLX09GKFBLQ1MxMl9TQUZFQkFHKSAqKnBiYWdzLCBQS0NTMTJfU0FGRUJBRyAqYmFnKTsK K0BAIC05MCw3ICs5NCwxNCBAQCBQS0NTMTIgKlBLQ1MxMl9jcmVhdGUoY2hhciAqcGFzcywgY2hh ciAqCisgCisgCS8qIFNldCBkZWZhdWx0cyAqLworIAlpZiAoIW5pZF9jZXJ0KQorKwkJeworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSkKKysJCQluaWRfY2VydCA9IE5J RF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOworKwkJZWxzZQorKyNlbmRpZgor IAkJbmlkX2NlcnQgPSBOSURfcGJlX1dpdGhTSEExQW5kNDBCaXRSQzJfQ0JDOworKwkJfQorIAlp ZiAoIW5pZF9rZXkpCisgCQluaWRfa2V5ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBs ZURFU19DQkM7CisgCWlmICghaXRlcikKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9y YW5kL21kX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yYW5kL21kX3JhbmQuYwor LS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzCTIwMTEtMDEtMjYg MTU6NTU6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JhbmQv bWRfcmFuZC5jCTIwMTItMDQtMjYgMTg6MDA6NTEuNzEzNzc2MTM3ICswMjAwCitAQCAtMzg5LDcg KzM4OSwxMCBAQCBzdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoCisgCUNS WVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7CisgCWNyeXB0b19sb2NrX3JhbmQgPSAx OworIAorLQlpZiAoIWluaXRpYWxpemVkKQorKwkvKiBhbHdheXMgcG9sbCBmb3IgZXh0ZXJuYWwg ZW50cm9weSBpbiBGSVBTIG1vZGUsIGRyYmcgcHJvdmlkZXMgdGhlIAorKwkgKiBleHBhbnNpb24K KysJICovCisrCWlmICghaW5pdGlhbGl6ZWQgfHwgRklQU19tb2R1bGVfbW9kZSgpKSAKKyAJCXsK KyAJCVJBTkRfcG9sbCgpOworIAkJaW5pdGlhbGl6ZWQgPSAxOworZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWIvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JhbmQv cmFuZC5oCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMJMjAxMi0w NC0yNiAxODowMDo1MC44MDk3NTYzODggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v cmFuZC9yYW5kLmgJMjAxMi0wNC0yNiAxODowMDo1MS43MTQ3NzYxNTkgKzAyMDAKK0BAIC0xMzMs MTUgKzEzMywzMyBAQCB2b2lkIEVSUl9sb2FkX1JBTkRfc3RyaW5ncyh2b2lkKTsKKyAvKiBFcnJv ciBjb2RlcyBmb3IgdGhlIFJBTkQgZnVuY3Rpb25zLiAqLworIAorIC8qIEZ1bmN0aW9uIGNvZGVz LiAqLworKyNkZWZpbmUgUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRAkJCSAxMDgKKysj ZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJIDEwMworKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFO RF9CWVRFUwkJCQkgMTAyCisrI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX1NFVF9EVAkJCQkgMTA2 CisrI2RlZmluZSBSQU5EX0ZfRklQU19YOTMxX1NFVF9EVAkJCQkgMTA2CisrI2RlZmluZSBSQU5E X0ZfRklQU19TRVRfRFQJCQkJIDEwNAorKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VF RAkJCSAxMDcKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUJCQkgMTA1CisgI2Rl ZmluZSBSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTAxCistI2RlZmluZSBSQU5EX0Zf UkFORF9JTklUX0ZJUFMJCQkJIDEwMgorKyNkZWZpbmUgUkFORF9GX1JBTkRfSU5JVF9GSVBTCQkJ CSAxMDkKKyAjZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUwkJCSAxMDAKKyAKKyAvKiBS ZWFzb24gY29kZXMuICovCistI2RlZmluZSBSQU5EX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcJ CQkgMTAyCistI2RlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDEwMwor LSNkZWZpbmUgUkFORF9SX05PX0ZJUFNfUkFORE9NX01FVEhPRF9TRVQJCSAxMDEKKysjZGVmaW5l IFJBTkRfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRwkJCSAxMTIKKysjZGVmaW5lIFJBTkRfUl9F UlJPUl9JTlNUQU5USUFUSU5HX0RSQkcJCQkgMTEzCisrI2RlZmluZSBSQU5EX1JfTk9OX0ZJUFNf TUVUSE9ECQkJCSAxMDUKKysjZGVmaW5lIFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFCQkJCSAxMDYK KysjZGVmaW5lIFJBTkRfUl9OT19GSVBTX1JBTkRPTV9NRVRIT0RfU0VUCQkgMTExCisrI2RlZmlu ZSBSQU5EX1JfTk9fS0VZX1NFVAkJCQkgMTA3CisrI2RlZmluZSBSQU5EX1JfUFJOR19BU0tJTkdf Rk9SX1RPT19NVUNICQkJIDEwMQorKyNkZWZpbmUgUkFORF9SX1BSTkdfRVJST1IJCQkJIDEwOAor KyNkZWZpbmUgUkFORF9SX1BSTkdfS0VZRUQJCQkJIDEwOQorKyNkZWZpbmUgUkFORF9SX1BSTkdf Tk9UX1JFS0VZRUQJCQkJIDEwMgorKyNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFU0VFREVECQkJ IDEwMworICNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRAkJCQkgMTAwCisrI2RlZmluZSBS QU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWQkJIDExMAorKyNkZWZpbmUgUkFORF9S X1BSTkdfU1RVQ0sJCQkJIDEwNAorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKyB9CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEu MC4xYi9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8v cmlwZW1kL3JtZF9kZ3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQ0LjAwMDAwMDAwMCArMDIw MAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwkyMDEyLTA0LTI2 IDE4OjAwOjUxLjcxNTc3NjE4MSArMDIwMAorQEAgLTcwLDcgKzcwLDcgQEAgY29uc3QgY2hhciBS TUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYwIgorICAgICAgdm9pZCByaXBlbWQxNjBfYmxvY2so UklQRU1EMTYwX0NUWCAqYywgdW5zaWduZWQgbG9uZyAqcCxzaXplX3QgbnVtKTsKKyAjICBlbmRp ZgorIAorLWZpcHNfbWRfaW5pdChSSVBFTUQxNjApCisrbm9uZmlwc19tZF9pbml0KFJJUEVNRDE2 MCkKKyAJeworIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+QT1SSVBFTUQxNjBfQTsK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2EvcnNhX2NycHQuYy5maXBzIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9yc2EvcnNhX2NycHQuYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0 by9yc2EvcnNhX2NycHQuYy5maXBzCTIwMTEtMDYtMDIgMjA6MjI6NDIuMDAwMDAwMDAwICswMjAw CisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfY3JwdC5jCTIwMTItMDQtMjYgMTg6 MDA6NTEuNzE1Nzc2MTgxICswMjAwCitAQCAtOTAsMTAgKzkwLDkgQEAgaW50IFJTQV9wcml2YXRl X2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0CisgCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQor IAl7CisgI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1l dGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCistCQkJJiYgIShyc2EtPmZsYWdzICYg UlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+Zmxh Z3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisgCQl7CistCQlSU0FlcnIoUlNBX0ZfUlNB X1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisrCQlSU0FlcnIo UlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lO X0ZJUFNfTU9ERSk7CisgCQlyZXR1cm4gLTE7CisgCQl9CisgI2VuZGlmCitAQCAtMTE4LDEwICsx MTcsOSBAQCBpbnQgUlNBX3B1YmxpY19kZWNyeXB0KGludCBmbGVuLCBjb25zdCB1CisgCSAgICAg UlNBICpyc2EsIGludCBwYWRkaW5nKQorIAl7CisgI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAo RklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0Qp CistCQkJJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwlpZihG SVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisg CQl7CistCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9OT05fRklQU19S U0FfTUVUSE9EKTsKKysJCVJTQWVycihSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX09Q RVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOworIAkJcmV0dXJuIC0xOworIAkJfQor ICNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfZWF5LmMuZmlw cyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vcnNhL3JzYV9lYXkuYworLS0tIG9wZW5zc2wtMS4wLjFi L2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMJMjAxMS0xMC0xOSAxNjo1ODo1OS4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vcnNhL3JzYV9lYXkuYwkyMDEyLTA0LTI2 IDE4OjAwOjUxLjcxNjc3NjIwMyArMDIwMAorQEAgLTExNCw2ICsxMTQsMTAgQEAKKyAjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorICNpbmNsdWRlIDxv cGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorICNpZm5kZWYg UlNBX05VTEwKKyAKK0BAIC0xMzgsNyArMTQyLDcgQEAgc3RhdGljIFJTQV9NRVRIT0QgcnNhX3Br Y3MxX2VheV9tZXRoPXsKKyAJQk5fbW9kX2V4cF9tb250LCAvKiBYWFggcHJvYmFibHkgd2Ugc2hv dWxkIG5vdCB1c2UgTW9udGdvbWVyeSBpZiAgZSA9PSAzICovCisgCVJTQV9lYXlfaW5pdCwKKyAJ UlNBX2VheV9maW5pc2gsCistCTAsIC8qIGZsYWdzICovCisrCVJTQV9GTEFHX0ZJUFNfTUVUSE9E LCAvKiBmbGFncyAqLworIAlOVUxMLAorIAkwLCAvKiByc2Ffc2lnbiAqLworIAkwLCAvKiByc2Ff dmVyaWZ5ICovCitAQCAtMTU4LDYgKzE2MiwyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGlj X2VuY3J5cHQoaW50IGZsCisgCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOworIAlCTl9DVFggKmN0 eD1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkpCisrCQl7 CisrCQlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBT X0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwor KwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19O T05fRklQU19BTExPVykKKysJCQkmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNB X0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZ X1BVQkxJQ19FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAt MTsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChCTl9udW1fYml0cyhyc2EtPm4pID4g T1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKKyAJCXsKKyAJCVJTQWVycihSU0FfRl9SU0Ff RUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7CitAQCAtMzYxLDYg KzM4MywyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGludCBmCisgCUJJ R05VTSAqdW5ibGluZCA9IE5VTEw7CisgCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7Cisg CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisrCQl7CisrCQlpZihG SVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZ X1BSSVZBVEVfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJCXJldHVy biAtMTsKKysJCQl9CisrCisrCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpCisrCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01J Tl9NT0RVTFVTX0JJVFMpKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRF X0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOworKwkJ CX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBn b3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CisgCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsK K0BAIC01MDQsNiArNTQ0LDI0IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2RlY3J5cHQo aW50IGYKKyAJQklHTlVNICp1bmJsaW5kID0gTlVMTDsKKyAJQk5fQkxJTkRJTkcgKmJsaW5kaW5n ID0gTlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJ CXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQ U19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7 CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysKKysJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxB R19OT05fRklQU19BTExPVykKKysJCQkmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xf UlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0Ff RUFZX1BSSVZBVEVfREVDUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1 cm4gLTE7CisrCQkJfQorKwkJfQorKyNlbmRpZgorKworIAlpZigoY3R4ID0gQk5fQ1RYX25ldygp KSA9PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CisgCWYgICA9IEJOX0NU WF9nZXQoY3R4KTsKK0BAIC02MzksNiArNjk3LDI0IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJs aWNfZGVjcnlwdChpbnQgZmwKKyAJdW5zaWduZWQgY2hhciAqYnVmPU5VTEw7CisgCUJOX0NUWCAq Y3R4PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisr CQl7CisrCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJ UFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7 CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFH X05PTl9GSVBTX0FMTE9XKQorKwkJCSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9S U0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9F QVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJu IC0xOworKwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKEJOX251bV9iaXRzKHJzYS0+bikg PiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTKQorIAkJeworIAkJUlNBZXJyKFJTQV9GX1JT QV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKK0BAIC04NDcs MTIgKzkyMywxMiBAQCBzdGF0aWMgaW50IFJTQV9lYXlfbW9kX2V4cChCSUdOVU0gKnIwLCBjCisg CWlmICghQk5fbW9kKHIwLHByMSxyc2EtPnAsY3R4KSkgZ290byBlcnI7CisgCisgCS8qIElmIHAg PCBxIGl0IGlzIG9jY2FzaW9uYWxseSBwb3NzaWJsZSBmb3IgdGhlIGNvcnJlY3Rpb24gb2YKKy0g ICAgICAgICAqIGFkZGluZyAncCcgaWYgcjAgaXMgbmVnYXRpdmUgYWJvdmUgdG8gbGVhdmUgdGhl IHJlc3VsdCBzdGlsbAorKwkgKiBhZGRpbmcgJ3AnIGlmIHIwIGlzIG5lZ2F0aXZlIGFib3ZlIHRv IGxlYXZlIHRoZSByZXN1bHQgc3RpbGwKKyAJICogbmVnYXRpdmUuIFRoaXMgY2FuIGJyZWFrIHRo ZSBwcml2YXRlIGtleSBvcGVyYXRpb25zOiB0aGUgZm9sbG93aW5nCisgCSAqIHNlY29uZCBjb3Jy ZWN0aW9uIHNob3VsZCAqYWx3YXlzKiBjb3JyZWN0IHRoaXMgcmFyZSBvY2N1cnJlbmNlLgorIAkg KiBUaGlzIHdpbGwgKm5ldmVyKiBoYXBwZW4gd2l0aCBPcGVuU1NMIGdlbmVyYXRlZCBrZXlzIGJl Y2F1c2UKKy0gICAgICAgICAqIHRoZXkgZW5zdXJlIHAgPiBxIFtzdGV2ZV0KKy0gICAgICAgICAq LworKwkgKiB0aGV5IGVuc3VyZSBwID4gcSBbc3RldmVdCisrCSAqLworIAlpZiAoQk5faXNfbmVn YXRpdmUocjApKQorIAkJaWYgKCFCTl9hZGQocjAscjAscnNhLT5wKSkgZ290byBlcnI7CisgCWlm ICghQk5fbXVsKHIxLHIwLHJzYS0+cSxjdHgpKSBnb3RvIGVycjsKK0BAIC04OTcsNiArOTczLDkg QEAgZXJyOgorIAorIHN0YXRpYyBpbnQgUlNBX2VheV9pbml0KFJTQSAqcnNhKQorIAl7CisrI2lm ZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCXJz YS0+ZmxhZ3N8PVJTQV9GTEFHX0NBQ0hFX1BVQkxJQ3xSU0FfRkxBR19DQUNIRV9QUklWQVRFOwor IAlyZXR1cm4oMSk7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2EvcnNh X2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfZXJyLmMKKy0tLSBvcGVu c3NsLTEuMC4xYi9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzCTIwMTEtMTAtMTAgMDE6MTM6NTAu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfZXJyLmMJ MjAxMi0wNC0yNiAxODowMDo1MS43MTc3NzYyMjUgKzAyMDAKK0BAIC0xMjEsNiArMTIxLDggQEAg c3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1tdPQorIHtFUlJfRlVOQyhSU0Ff Rl9SU0FfUFVCTElDX0VOQ1JZUFQpLAkiUlNBX3B1YmxpY19lbmNyeXB0In0sCisge0VSUl9GVU5D KFJTQV9GX1JTQV9QVUJfREVDT0RFKSwJIlJTQV9QVUJfREVDT0RFIn0sCisge0VSUl9GVU5DKFJT QV9GX1JTQV9TRVRVUF9CTElORElORyksCSJSU0Ffc2V0dXBfYmxpbmRpbmcifSwKKyt7RVJSX0ZV TkMoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCksCSJSU0Ffc2V0X2RlZmF1bHRfbWV0aG9k In0sCisre0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfTUVUSE9EKSwJIlJTQV9zZXRfbWV0aG9kIn0s Cisge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOKSwJIlJTQV9zaWduIn0sCisge0VSUl9GVU5DKFJT QV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HKSwJIlJTQV9zaWduX0FTTjFfT0NURVRfU1RS SU5HIn0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9WRVJJRlkpLAkiUlNBX3ZlcmlmeSJ9LAorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEu MC4xYi9jcnlwdG8vcnNhL3JzYV9nZW4uYworLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2Ev cnNhX2dlbi5jLmZpcHMJMjAxMS0wNi0wOSAxNToxODowNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vcnNhL3JzYV9nZW4uYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjcx ODc3NjI0NiArMDIwMAorQEAgLTY5LDYgKzY5LDc4IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvcnNh Lmg+CisgI2lmZGVmIE9QRU5TU0xfRklQUworICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKytz dGF0aWMgaW50IGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAwOworKworK3ZvaWQgRklQU19jb3Jy dXB0X3JzYV9rZXlnZW4odm9pZCkKKysJeworKwlmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMTsK KysJfQorKworK2ludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSkKKysJeworKwljb25zdCB1bnNp Z25lZCBjaGFyIHRic1tdID0gIlJTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsKKysJdW5zaWduZWQg Y2hhciAqY3RidWYgPSBOVUxMLCAqcHRidWYgPSBOVUxMOworKwlpbnQgbGVuLCByZXQgPSAwOwor KwlFVlBfUEtFWSAqcGs7CisrCisrCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisr CQlnb3RvIGVycjsKKysKKysJRVZQX1BLRVlfc2V0MV9SU0EocGssIHJzYSk7CisrCisrCS8qIFBl cmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgc2lnbmF0dXJlIHRlc3QgKi8KKysJaWYgKCFmaXBz X3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCisrCQkJTlVMTCwgMCwgRVZQX3NoYTEo KSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwgTlVMTCkKKysJCXx8ICFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIHRicywgLTEsCisrCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01E X0NUWF9GTEFHX1BBRF9YOTMxLCBOVUxMKQorKwkJfHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywgdGJzLCAtMSwKKysJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdf UEFEX1BTUywgTlVMTCkpCisrCQlnb3RvIGVycjsKKysJLyogTm93IHBlcmZvcm0gcGFpcndpc2Ug Y29uc2lzdGVuY3kgZW5jcnlwdC9kZWNyeXB0IHRlc3QgKi8KKysJY3RidWYgPSBPUEVOU1NMX21h bGxvYyhSU0Ffc2l6ZShyc2EpKTsKKysJaWYgKCFjdGJ1ZikKKysJCWdvdG8gZXJyOworKworKwls ZW4gPSBSU0FfcHVibGljX2VuY3J5cHQoc2l6ZW9mKHRicykgLSAxLCB0YnMsIGN0YnVmLCByc2Es IFJTQV9QS0NTMV9QQURESU5HKTsKKysJaWYgKGxlbiA8PSAwKQorKwkJZ290byBlcnI7CisrCS8q IENoZWNrIGNpcGhlcnRleHQgZG9lc24ndCBtYXRjaCBwbGFpbnRleHQgKi8KKysJaWYgKChsZW4g PT0gKHNpemVvZih0YnMpIC0gMSkpICYmICFtZW1jbXAodGJzLCBjdGJ1ZiwgbGVuKSkKKysJCWdv dG8gZXJyOworKwlwdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOworKworKwlp ZiAoIXB0YnVmKQorKwkJZ290byBlcnI7CisrCWxlbiA9IFJTQV9wcml2YXRlX2RlY3J5cHQobGVu LCBjdGJ1ZiwgcHRidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOworKwlpZiAobGVuICE9IChz aXplb2YodGJzKSAtIDEpKQorKwkJZ290byBlcnI7CisrCWlmIChtZW1jbXAocHRidWYsIHRicywg bGVuKSkKKysJCWdvdG8gZXJyOworKworKwlyZXQgPSAxOworKworKwlpZiAoIXB0YnVmKQorKwkJ Z290byBlcnI7CisrCQorKwllcnI6CisrCWlmIChyZXQgPT0gMCkKKysJCXsKKysJCWZpcHNfc2V0 X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfQ0hFQ0tfUlNBLEZJUFNf Ul9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7CisrCQl9CisrCisrCWlmIChjdGJ1ZikKKysJCU9QRU5T U0xfZnJlZShjdGJ1Zik7CisrCWlmIChwdGJ1ZikKKysJCU9QRU5TU0xfZnJlZShwdGJ1Zik7Cisr CWlmIChwaykKKysJCUVWUF9QS0VZX2ZyZWUocGspOworKworKwlyZXR1cm4gcmV0OworKwl9Cisg I2VuZGlmCisgCisgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIGludCBi aXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYik7CitAQCAtODEsNyArMTUzLDcgQEAg c3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCisgaW50IFJTQV9nZW5lcmF0 ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpj YikKKyAJeworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICEocnNh LT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorKwlpZiAoRklQU19tb2R1bGVf bW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorIAkJ CSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKyAJCXsKKyAJCVJT QWVycihSU0FfRl9SU0FfR0VORVJBVEVfS0VZX0VYLCBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9E KTsKK0BAIC05MCwxMCArMTYyLDYgQEAgaW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2Es IGludCBiaQorICNlbmRpZgorIAlpZihyc2EtPm1ldGgtPnJzYV9rZXlnZW4pCisgCQlyZXR1cm4g cnNhLT5tZXRoLT5yc2Ffa2V5Z2VuKHJzYSwgYml0cywgZV92YWx1ZSwgY2IpOworLSNpZmRlZiBP UEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpKQorLQkJcmV0dXJuIEZJUFNfcnNhX2dlbmVy YXRlX2tleV9leChyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKKy0jZW5kaWYKKyAJcmV0dXJuIHJz YV9idWlsdGluX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKKyAJfQorIAorQEAgLTEw NSw2ICsxNzMsMjMgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCisg CWludCBiaXRzcCxiaXRzcSxvaz0gLTEsbj0wOworIAlCTl9DVFggKmN0eD1OVUxMOworIAorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKKysJCXsKKysJCWlm KEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICAJeworKwkJICAgIEZJUFNlcnIoRklQU19G X1JTQV9CVUlMVElOX0tFWUdFTixGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAg CXJldHVybiAwOworKwkgICAgCX0KKysKKysJCWlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19N SU5fTU9EVUxVU19CSVRTKQorKwkJICAgIHsKKysJCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJ TFRJTl9LRVlHRU4sRklQU19SX0tFWV9UT09fU0hPUlQpOworKwkJICAgIHJldHVybiAwOworKwkJ ICAgIH0KKysJCX0KKysjZW5kaWYKKysKKyAJY3R4PUJOX0NUWF9uZXcoKTsKKyAJaWYgKGN0eCA9 PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CitAQCAtMjE2LDYgKzMwMSwx NyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwKKyAJCXAgPSByc2Et PnA7CisgCWlmICghQk5fbW9kX2ludmVyc2UocnNhLT5pcW1wLHJzYS0+cSxwLGN0eCkpIGdvdG8g ZXJyOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkK KysJCXsKKysJCWlmIChmaXBzX3JzYV9wYWlyd2lzZV9mYWlsKQorKwkJCUJOX2FkZF93b3JkKHJz YS0+biwgMSk7CisrCisrCQlpZighZmlwc19jaGVja19yc2EocnNhKSkKKysJCSAgICBnb3RvIGVy cjsKKysJCX0KKysjZW5kaWYKKysKKyAJb2s9MTsKKyBlcnI6CisgCWlmIChvayA9PSAtMSkKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2EvcnNhLmguZmlwcyBvcGVuc3NsLTEuMC4x Yi9jcnlwdG8vcnNhL3JzYS5oCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2EuaC5m aXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuMTQwNzYzNjE5ICswMjAwCisrKysgb3BlbnNzbC0xLjAu MWIvY3J5cHRvL3JzYS9yc2EuaAkyMDEyLTA0LTI2IDE4OjAwOjUxLjcxODc3NjI0NiArMDIwMAor QEAgLTE2NCw2ICsxNjQsOCBAQCBzdHJ1Y3QgcnNhX3N0CisgIyBkZWZpbmUgT1BFTlNTTF9SU0Ff TUFYX01PRFVMVVNfQklUUwkxNjM4NAorICNlbmRpZgorIAorKyNkZWZpbmUgT1BFTlNTTF9SU0Ff RklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAjaWZuZGVmIE9QRU5TU0xfUlNBX1NNQUxM X01PRFVMVVNfQklUUworICMgZGVmaW5lIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUwkz MDcyCisgI2VuZGlmCitAQCAtMjkwLDYgKzI5MiwxMSBAQCBSU0EgKglSU0FfZ2VuZXJhdGVfa2V5 KGludCBiaXRzLCB1bnNpZ25lCisgCisgLyogTmV3IHZlcnNpb24gKi8KKyBpbnQJUlNBX2dlbmVy YXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsK KytpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAy LCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBC SUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwKKysJCQljb25zdCBCSUdOVU0gKlhxMSwgY29u c3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCisrCQkJY29uc3QgQklHTlVNICplLCBC Tl9HRU5DQiAqY2IpOworK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGlu dCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7CisgCisgaW50CVJTQV9jaGVj a19rZXkoY29uc3QgUlNBICopOworIAkvKiBuZXh0IDQgcmV0dXJuIC0xIG9uIGVycm9yICovCitA QCAtNDg3LDcgKzQ5NCw3IEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgI2Rl ZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfTk9ORQkJCSAxMDcKKyAjZGVmaW5lIFJTQV9GX1JT QV9QQURESU5HX0FERF9QS0NTMV9PQUVQCQkgMTIxCisgI2RlZmluZSBSU0FfRl9SU0FfUEFERElO R19BRERfUEtDUzFfUFNTCQkJIDEyNQorLSNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BL Q1MxX1BTU19NR0YxCQkgMTQ4CisrI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFf UFNTX01HRjEJCSAxNTgKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9UWVBF XzEJCSAxMDgKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9UWVBFXzIJCSAx MDkKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9TU0xWMjMJCQkgMTEwCitAQCAtNTAw LDIwICs1MDcsMjIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5l IFJTQV9GX1JTQV9QQURESU5HX0NIRUNLX1g5MzEJCQkgMTI4CisgI2RlZmluZSBSU0FfRl9SU0Ff UFJJTlQJCQkJCSAxMTUKKyAjZGVmaW5lIFJTQV9GX1JTQV9QUklOVF9GUAkJCQkgMTE2CistI2Rl ZmluZSBSU0FfRl9SU0FfUFJJVkFURV9ERUNSWVBUCQkJIDE1MAorLSNkZWZpbmUgUlNBX0ZfUlNB X1BSSVZBVEVfRU5DUllQVAkJCSAxNTEKKysjZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0RFQ1JZ UFQJCQkgMTU3CisrI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUCQkJIDE0OAorICNk ZWZpbmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFCQkJCSAxMzcKKyAjZGVmaW5lIFJTQV9GX1JTQV9Q UklWX0VOQ09ERQkJCQkgMTM4CistI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQJCQkg MTUyCisrI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQJCQkgMTQ5CisgI2RlZmluZSBS U0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQJCQkgMTUzCisgI2RlZmluZSBSU0FfRl9SU0FfUFVCX0RF Q09ERQkJCQkgMTM5CisgI2RlZmluZSBSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcJCQkgMTM2Cisr I2RlZmluZSBSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9ECQkJIDE1MAorKyNkZWZpbmUgUlNB X0ZfUlNBX1NFVF9NRVRIT0QJCQkJIDE1MQorICNkZWZpbmUgUlNBX0ZfUlNBX1NJR04JCQkJCSAx MTcKKyAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HCQkgMTE4CisgI2Rl ZmluZSBSU0FfRl9SU0FfVkVSSUZZCQkJCSAxMTkKKyAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllf QVNOMV9PQ1RFVF9TVFJJTkcJCSAxMjAKKyAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFf UFNTCQkJIDEyNgorLSNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1NfTUdGMQkJCSAx NDkKKysjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTX01HRjEJCQkgMTUyCisgCisg LyogUmVhc29uIGNvZGVzLiAqLworICNkZWZpbmUgUlNBX1JfQUxHT1JJVEhNX01JU01BVENICQkJ IDEwMAorQEAgLTU0MiwyMSArNTUxLDIyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9p ZCk7CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX01HRjFfTUQJCQkJIDE1NgorICNkZWZpbmUgUlNB X1JfSU5WQUxJRF9QQURESU5HCQkJCSAxMzgKKyAjZGVmaW5lIFJTQV9SX0lOVkFMSURfUEFERElO R19NT0RFCQkJIDE0MQorLSNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QU1NfUEFSQU1FVEVSUwkJCSAx NDkKKysjZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1BBUkFNRVRFUlMJCQkgMTU3CisgI2RlZmlu ZSBSU0FfUl9JTlZBTElEX1BTU19TQUxUTEVOCQkJIDE0NgorLSNkZWZpbmUgUlNBX1JfSU5WQUxJ RF9TQUxUX0xFTkdUSAkJCSAxNTAKKysjZGVmaW5lIFJTQV9SX0lOVkFMSURfU0FMVF9MRU5HVEgJ CQkgMTU4CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX1RSQUlMRVIJCQkJIDEzOQorICNkZWZpbmUg UlNBX1JfSU5WQUxJRF9YOTMxX0RJR0VTVAkJCSAxNDIKKyAjZGVmaW5lIFJTQV9SX0lRTVBfTk9U X0lOVkVSU0VfT0ZfUQkJCSAxMjYKKyAjZGVmaW5lIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJ CSAxMjAKKyAjZGVmaW5lIFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRAkJCSAxMzQKKyAjZGVmaW5l IFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDUKKy0jZGVmaW5lIFJTQV9SX05PTl9GSVBT X1JTQV9NRVRIT0QJCQkgMTU3CisrI2RlZmluZSBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9ECQkJ IDE0OQorKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxNDkKKyAjZGVmaW5lIFJT QV9SX05PX1BVQkxJQ19FWFBPTkVOVAkJCSAxNDAKKyAjZGVmaW5lIFJTQV9SX05VTExfQkVGT1JF X0JMT0NLX01JU1NJTkcJCQkgMTEzCisgI2RlZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1Bf UQkJCSAxMjcKKyAjZGVmaW5lIFJTQV9SX09BRVBfREVDT0RJTkdfRVJST1IJCQkgMTIxCistI2Rl ZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTgKKysjZGVm aW5lIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDE1MAorICNkZWZp bmUgUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRQkgMTQ4Cisg I2RlZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRAkJCSAxMTQKKyAjZGVmaW5lIFJTQV9S X1BfTk9UX1BSSU1FCQkJCSAxMjgKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2Ev cnNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfbGliLmMKKy0tLSBv cGVuc3NsLTEuMC4xYi9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzCTIwMTEtMDYtMjAgMjE6NDE6 MTMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfbGli LmMJMjAxMi0wNC0yNiAxODowMDo1MS43MTk3NzYyNjcgKzAyMDAKK0BAIC04NCw2ICs4NCwxMyBA QCBSU0EgKlJTQV9uZXcodm9pZCkKKyAKKyB2b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29u c3QgUlNBX01FVEhPRCAqbWV0aCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJ UFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7 CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNf TUVUSE9EKTsKKysJCXJldHVybjsKKysJCX0KKysjZW5kaWYKKyAJZGVmYXVsdF9SU0FfbWV0aCA9 IG1ldGg7CisgCX0KKyAKK0BAIC05MSwxOCArOTgsMTEgQEAgY29uc3QgUlNBX01FVEhPRCAqUlNB X2dldF9kZWZhdWx0X21ldGhvZAorIAl7CisgCWlmIChkZWZhdWx0X1JTQV9tZXRoID09IE5VTEwp CisgCQl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYgKEZJUFNfbW9kZSgpKQorLQkJCXJl dHVybiBGSVBTX3JzYV9wa2NzMV9zc2xlYXkoKTsKKy0JCWVsc2UKKy0JCQlyZXR1cm4gUlNBX1BL Q1MxX1NTTGVheSgpOworLSNlbHNlCisgI2lmZGVmIFJTQV9OVUxMCisgCQlkZWZhdWx0X1JTQV9t ZXRoPVJTQV9udWxsX21ldGhvZCgpOworICNlbHNlCisgCQlkZWZhdWx0X1JTQV9tZXRoPVJTQV9Q S0NTMV9TU0xlYXkoKTsKKyAjZW5kaWYKKy0jZW5kaWYKKyAJCX0KKyAKKyAJcmV0dXJuIGRlZmF1 bHRfUlNBX21ldGg7CitAQCAtMTE4LDYgKzExOCwxMyBAQCBpbnQgUlNBX3NldF9tZXRob2QoUlNB ICpyc2EsIGNvbnN0IFJTQV9NCisgCS8qIE5COiBUaGUgY2FsbGVyIGlzIHNwZWNpZmljYWxseSBz ZXR0aW5nIGEgbWV0aG9kLCBzbyBpdCdzIG5vdCB1cCB0byB1cworIAkgKiB0byBkZWFsIHdpdGgg d2hpY2ggRU5HSU5FIGl0IGNvbWVzIGZyb20uICovCisgCWNvbnN0IFJTQV9NRVRIT0QgKm10bXA7 CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFn cyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKKysJCXsKKysJCVJTQWVycihSU0FfRl9SU0FfU0VU X01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAwOworKwkJfQorKyNl bmRpZgorIAltdG1wID0gcnNhLT5tZXRoOworIAlpZiAobXRtcC0+ZmluaXNoKSBtdG1wLT5maW5p c2gocnNhKTsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitAQCAtMTcwLDYgKzE3NywxOCBA QCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQorIAkJCX0KKyAJCX0KKyAjZW5k aWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKHJldC0+bWV0 aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7CisrCQlSU0FlcnIoUlNBX0Zf UlNBX05FV19NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7CisrI2lmbmRlZiBPUEVOU1NM X05PX0VOR0lORQorKwkJaWYgKHJldC0+ZW5naW5lKQorKwkJCUVOR0lORV9maW5pc2gocmV0LT5l bmdpbmUpOworKyNlbmRpZgorKwkJT1BFTlNTTF9mcmVlKHJldCk7CisrCQlyZXR1cm4gTlVMTDsK KysJCX0KKysjZW5kaWYKKyAKKyAJcmV0LT5wYWQ9MDsKKyAJcmV0LT52ZXJzaW9uPTA7CitAQCAt MTg4LDcgKzIwNyw3IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpCisgCXJl dC0+YmxpbmRpbmc9TlVMTDsKKyAJcmV0LT5tdF9ibGluZGluZz1OVUxMOworIAlyZXQtPmJpZ251 bV9kYXRhPU5VTEw7CistCXJldC0+ZmxhZ3M9cmV0LT5tZXRoLT5mbGFncyAmIH5SU0FfRkxBR19O T05fRklQU19BTExPVzsKKysJcmV0LT5mbGFncz1yZXQtPm1ldGgtPmZsYWdzOworIAlpZiAoIUNS WVBUT19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfUlNBLCByZXQsICZyZXQtPmV4X2RhdGEp KQorIAkJeworICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFiL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vcnNh L3JzYV9wbWV0aC5jCistLS0gb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2FfcG1ldGguYy5m aXBzCTIwMTItMDItMTUgMTU6MTQ6MDEuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MWIvY3J5cHRvL3JzYS9yc2FfcG1ldGguYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjcyMDc3NjI4OSAr MDIwMAorQEAgLTIwNiwyMiArMjA2LDYgQEAgc3RhdGljIGludCBwa2V5X3JzYV9zaWduKEVWUF9Q S0VZX0NUWCAqYworIAkJCQkJUlNBX1JfSU5WQUxJRF9ESUdFU1RfTEVOR1RIKTsKKyAJCQlyZXR1 cm4gLTE7CisgCQkJfQorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChyZXQgPiAwKQorLQkJ CXsKKy0JCQl1bnNpZ25lZCBpbnQgc2xlbjsKKy0JCQlyZXQgPSBGSVBTX3JzYV9zaWduX2RpZ2Vz dChyc2EsIHRicywgdGJzbGVuLCByY3R4LT5tZCwKKy0JCQkJCQkJcmN0eC0+cGFkX21vZGUsCist CQkJCQkJCXJjdHgtPnNhbHRsZW4sCistCQkJCQkJCXJjdHgtPm1nZjFtZCwKKy0JCQkJCQkJc2ln LCAmc2xlbik7CistCQkJaWYgKHJldCA+IDApCistCQkJCSpzaWdsZW4gPSBzbGVuOworLQkJCWVs c2UKKy0JCQkJKnNpZ2xlbiA9IDA7CistCQkJcmV0dXJuIHJldDsKKy0JCQl9CistI2VuZGlmCisg CisgCQlpZiAoRVZQX01EX3R5cGUocmN0eC0+bWQpID09IE5JRF9tZGMyKQorIAkJCXsKK0BAIC0z NTQsMTkgKzMzOCw2IEBAIHN0YXRpYyBpbnQgcGtleV9yc2FfdmVyaWZ5KEVWUF9QS0VZX0NUWAor ICNlbmRpZgorIAlpZiAocmN0eC0+bWQpCisgCQl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJ aWYgKHJ2ID4gMCkKKy0JCQl7CistCQkJcmV0dXJuIEZJUFNfcnNhX3ZlcmlmeV9kaWdlc3QocnNh LAorLQkJCQkJCQl0YnMsIHRic2xlbiwKKy0JCQkJCQkJcmN0eC0+bWQsCistCQkJCQkJCXJjdHgt PnBhZF9tb2RlLAorLQkJCQkJCQlyY3R4LT5zYWx0bGVuLAorLQkJCQkJCQlyY3R4LT5tZ2YxbWQs CistCQkJCQkJCXNpZywgc2lnbGVuKTsKKy0JCQkJCQkJCistCQkJfQorLSNlbmRpZgorIAkJaWYg KHJjdHgtPnBhZF9tb2RlID09IFJTQV9QS0NTMV9QQURESU5HKQorIAkJCXJldHVybiBSU0FfdmVy aWZ5KEVWUF9NRF90eXBlKHJjdHgtPm1kKSwgdGJzLCB0YnNsZW4sCisgCQkJCQlzaWcsIHNpZ2xl biwgcnNhKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5m aXBzIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9yc2EvcnNhX3NpZ24uYworLS0tIG9wZW5zc2wtMS4w LjFiL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzCTIwMTItMDItMTUgMTU6MDA6MDkuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCTIwMTIt MDQtMjYgMTg6MDA6NTEuNzIwNzc2Mjg5ICswMjAwCitAQCAtMTM4LDcgKzEzOCw4IEBAIGludCBS U0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKKyAJCWkyZF9YNTA5X1NJRygmc2ln LCZwKTsKKyAJCXM9dG1wczsKKyAJfQorLQlpPVJTQV9wcml2YXRlX2VuY3J5cHQoaSxzLHNpZ3Jl dCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhv ZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCisrCWkgPSByc2EtPm1ldGgtPnJz YV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGkscyxzaWdyZXQscnNhLFJTQV9Q S0NTMV9QQURESU5HKSA6IDA7CisgCWlmIChpIDw9IDApCisgCQlyZXQ9MDsKKyAJZWxzZQorQEAg LTE3OCw4ICsxNzksOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBjb25zdCB1bnNp CisgCisgCWlmKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEpICYmIHJtKQorIAkJeworLQkJaSA9IFJT QV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKKy0JCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BL Q1MxX1BBRERJTkcpOworKwkJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgt PnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLAorKwkJCQkJc2lnYnVmLHJtLHJzYSxSU0FfUEtDUzFf UEFERElORykgOiAwOworIAkJaWYgKGkgPD0gMCkKKyAJCQlyZXR1cm4gMDsKKyAJCSpwcm1fbGVu ID0gaTsKK0BAIC0xOTYsNyArMTk3LDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwg Y29uc3QgdW5zaQorIAkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxSU0FfUl9JTlZBTElE X01FU1NBR0VfTEVOR1RIKTsKKyAJCQlnb3RvIGVycjsKKyAJfQorLQlpPVJTQV9wdWJsaWNfZGVj cnlwdCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkvKiBO QjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5n ICovCisrCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHViX2Rl YygoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKKyAKKyAJ aWYgKGkgPD0gMCkgZ290byBlcnI7CisgCS8qIE9kZGJhbGwgTURDMiBjYXNlOiBzaWduYXR1cmUg Y2FuIGJlIE9DVEVUIFNUUklORy4KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9zaGEv c2hhMjU2LmMuZmlwcyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vc2hhL3NoYTI1Ni5jCistLS0gb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDQu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3NoYS9zaGEyNTYuYwky MDEyLTA0LTI2IDE4OjAwOjUxLjcyMTc3NjMxMiArMDIwMAorQEAgLTEyLDEyICsxMiwxOSBAQAor IAorICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5o PgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2Vu ZGlmCisrCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAKKyBjb25zdCBjaGFyIFNI QTI1Nl92ZXJzaW9uW109IlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKKyBmaXBz X21kX2luaXRfY3R4KFNIQTIyNCwgU0hBMjU2KQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldCAoYywwLHNpemVvZigq YykpOworIAljLT5oWzBdPTB4YzEwNTllZDhVTDsJYy0+aFsxXT0weDM2N2NkNTA3VUw7CisgCWMt PmhbMl09MHgzMDcwZGQxN1VMOwljLT5oWzNdPTB4ZjcwZTU5MzlVTDsKK0BAIC0yOSw2ICszNiw5 IEBAIGZpcHNfbWRfaW5pdF9jdHgoU0hBMjI0LCBTSEEyNTYpCisgCisgZmlwc19tZF9pbml0KFNI QTI1NikKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygp OworKyNlbmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+aFswXT0weDZhMDll NjY3VUw7CWMtPmhbMV09MHhiYjY3YWU4NVVMOworIAljLT5oWzJdPTB4M2M2ZWYzNzJVTDsJYy0+ aFszXT0weGE1NGZmNTNhVUw7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vc2hhL3No YTUxMi5jLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3NoYS9zaGE1MTIuYworLS0tIG9wZW5z c2wtMS4wLjFiL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDExLTExLTE0IDIxOjU4OjAxLjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9zaGEvc2hhNTEyLmMJMjAx Mi0wNC0yNiAxODowMDo1MS43MjI3NzYzMzQgKzAyMDAKK0BAIC01LDYgKzUsMTAgQEAKKyAgKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorICAqLworICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysK KyAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hB NTEyKQorIC8qCisgICogSU1QTEVNRU5UQVRJT04gTk9URVMuCitAQCAtNjEsNiArNjUsOSBAQCBj b25zdCBjaGFyIFNIQTUxMl92ZXJzaW9uW109IlNIQS01MTIiIE9QCisgCisgZmlwc19tZF9pbml0 X2N0eChTSEEzODQsIFNIQTUxMikKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19z ZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAljLT5oWzBdPVU2NCgweGNiYmI5ZDVkYzEwNTll ZDgpOworIAljLT5oWzFdPVU2NCgweDYyOWEyOTJhMzY3Y2Q1MDcpOworIAljLT5oWzJdPVU2NCgw eDkxNTkwMTVhMzA3MGRkMTcpOworQEAgLTc3LDYgKzg0LDkgQEAgZmlwc19tZF9pbml0X2N0eChT SEEzODQsIFNIQTUxMikKKyAKKyBmaXBzX21kX2luaXQoU0hBNTEyKQorIAl7CisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWMtPmhbMF09 VTY0KDB4NmEwOWU2NjdmM2JjYzkwOCk7CisgCWMtPmhbMV09VTY0KDB4YmI2N2FlODU4NGNhYTcz Yik7CisgCWMtPmhbMl09VTY0KDB4M2M2ZWYzNzJmZTk0ZjgyYik7CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xYi9jcnlwdG8vc2hhL3NoYS5oLmZpcHMgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3NoYS9z aGEuaAorLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9zaGEvc2hhLmguZmlwcwkyMDEyLTA0LTI2 IDE4OjAwOjUwLjYxNjc1MjE3MCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9zaGEv c2hhLmgJMjAxMi0wNC0yNiAxODowMDo1MS43MjI3NzYzMzQgKzAyMDAKK0BAIC0xMTYsOSArMTE2 LDYgQEAgdW5zaWduZWQgY2hhciAqU0hBKGNvbnN0IHVuc2lnbmVkIGNoYXIgKgorIHZvaWQgU0hB X1RyYW5zZm9ybShTSEFfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyAjZW5k aWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMQorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy1pbnQg cHJpdmF0ZV9TSEExX0luaXQoU0hBX0NUWCAqYyk7CistI2VuZGlmCisgaW50IFNIQTFfSW5pdChT SEFfQ1RYICpjKTsKKyBpbnQgU0hBMV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0 YSwgc2l6ZV90IGxlbik7CisgaW50IFNIQTFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9D VFggKmMpOworQEAgLTE0MSwxMCArMTM4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBMjU2c3RhdGVf c3QKKyAJfSBTSEEyNTZfQ1RYOworIAorICNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKy0jaWZk ZWYgT1BFTlNTTF9GSVBTCistaW50IHByaXZhdGVfU0hBMjI0X0luaXQoU0hBMjU2X0NUWCAqYyk7 CistaW50IHByaXZhdGVfU0hBMjU2X0luaXQoU0hBMjU2X0NUWCAqYyk7CistI2VuZGlmCisgaW50 IFNIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOworIGludCBTSEEyMjRfVXBkYXRlKFNIQTI1Nl9D VFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBTSEEyMjRfRmluYWwo dW5zaWduZWQgY2hhciAqbWQsIFNIQTI1Nl9DVFggKmMpOworQEAgLTE5MiwxMCArMTg1LDYgQEAg dHlwZWRlZiBzdHJ1Y3QgU0hBNTEyc3RhdGVfc3QKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIE9QRU5T U0xfTk9fU0hBNTEyCistI2lmZGVmIE9QRU5TU0xfRklQUworLWludCBwcml2YXRlX1NIQTM4NF9J bml0KFNIQTUxMl9DVFggKmMpOworLWludCBwcml2YXRlX1NIQTUxMl9Jbml0KFNIQTUxMl9DVFgg KmMpOworLSNlbmRpZgorIGludCBTSEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKKyBpbnQgU0hB Mzg0X1VwZGF0ZShTSEE1MTJfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsK KyBpbnQgU0hBMzg0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJfQ1RYICpjKTsKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzIG9wZW5zc2wt MS4wLjFiL2NyeXB0by9zaGEvc2hhX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjFiL2NyeXB0by9z aGEvc2hhX2xvY2wuaC5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTAuNjIyNzUyMzAyICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMWIvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCTIwMTItMDQtMjYgMTg6MDA6 NTEuNzIzNzc2MzU2ICswMjAwCitAQCAtMTIzLDExICsxMjMsMTQgQEAgdm9pZCBzaGExX2Jsb2Nr X2RhdGFfb3JkZXIgKFNIQV9DVFggKmMsCisgI2RlZmluZSBJTklUX0RBVEFfaDQgMHhjM2QyZTFm MFVMCisgCisgI2lmZGVmIFNIQV8wCistZmlwc19tZF9pbml0KFNIQSkKKytub25maXBzX21kX2lu aXQoU0hBKQorICNlbHNlCisgZmlwc19tZF9pbml0X2N0eChTSEExLCBTSEEpCisgI2VuZGlmCisg CXsKKysjaWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisrCUZJUFNf c2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Cisg CWMtPmgwPUlOSVRfREFUQV9oMDsKKyAJYy0+aDE9SU5JVF9EQVRBX2gxOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWIvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFi L2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vd2hy bHBvb2wvd3BfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0NS4wMDAwMDAwMDAgKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4xYi9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jCTIwMTItMDQtMjYg MTg6MDA6NTEuNzI0Nzc2Mzc4ICswMjAwCitAQCAtNTUsNyArNTUsNyBAQAorICNpbmNsdWRlIDxv cGVuc3NsL2NyeXB0by5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKy1maXBzX21kX2luaXQo V0hJUkxQT09MKQorK25vbmZpcHNfbWRfaW5pdChXSElSTFBPT0wpCisgCXsKKyAJbWVtc2V0IChj LDAsc2l6ZW9mKCpjKSk7CisgCXJldHVybigxKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFiL01h a2VmaWxlLm9yZy5maXBzIG9wZW5zc2wtMS4wLjFiL01ha2VmaWxlLm9yZworLS0tIG9wZW5zc2wt MS4wLjFiL01ha2VmaWxlLm9yZy5maXBzCTIwMTItMDQtMjYgMTg6MDA6NTEuMzUwNzY4MjA3ICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMWIvTWFrZWZpbGUub3JnCTIwMTItMDQtMjYgMTg6MDA6NTEu NzI0Nzc2Mzc4ICswMjAwCitAQCAtMTM2LDYgKzEzNiw5IEBAIEZJUFNDQU5MSUI9CisgCisgQkFT RUFERFI9CisgCisrIyBOb24tZW1wdHkgaWYgRklQUyBlbmFibGVkCisrRklQUz0KKysKKyBESVJT PSAgIGNyeXB0byBzc2wgZW5naW5lcyBhcHBzIHRlc3QgdG9vbHMKKyBFTkdESVJTPSBjY2dvc3QK KyBTSExJQkRJUlM9IGNyeXB0byBzc2wKK0BAIC0xNDgsNyArMTUxLDcgQEAgU0RJUlM9ICBcCisg CWJuIGVjIHJzYSBkc2EgZWNkc2EgZGggZWNkaCBkc28gZW5naW5lIFwKKyAJYnVmZmVyIGJpbyBz dGFjayBsaGFzaCByYW5kIGVyciBcCisgCWV2cCBhc24xIHBlbSB4NTA5IHg1MDl2MyBjb25mIHR4 dF9kYiBwa2NzNyBwa2NzMTIgY29tcCBvY3NwIHVpIGtyYjUgXAorLQljbXMgcHF1ZXVlIHRzIGpw YWtlIHNycCBzdG9yZSBjbWFjCisrCWNtcyBwcXVldWUgdHMganBha2Ugc3JwIHN0b3JlIGNtYWMg ZmlwcworICMga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGFib3ZlIGxpc3QgaXMgYWRqdXN0ZWQgYnkg Li9Db25maWd1cmUKKyAjIGFjY29yZGluZyB0byBuby14eHggYXJndW1lbnRzLi4uCisgCitAQCAt MjM3LDYgKzI0MCw3IEBAIEJVSUxERU5WPQlQTEFURk9STT0nJChQTEFURk9STSknIFBST0NFU1MK KyAJCUZJUFNMSUJESVI9JyR7RklQU0xJQkRJUn0nCQkJXAorIAkJRklQU0RJUj0nJHtGSVBTRElS fScJCQkJXAorIAkJRklQU0NBTkxJQj0iJCR7RklQU0NBTkxJQjotJChGSVBTQ0FOTElCKX0iCVwK KysJCUZJUFM9IiQke0ZJUFM6LSQoRklQUyl9IglcCisgCQlUSElTPSQke1RISVM6LSRAfSBNQUtF RklMRT1NYWtlZmlsZSBNQUtFT1ZFUlJJREVTPQorICMgTUFLRU9WRVJSSURFUz0gZWZmZWN0aXZl bHkgImVxdWFsaXplcyIgR05VLWlzaCBhbmQgU3lzVi1pc2ggbWFrZSBmbGF2b3JzLAorICMgd2hp Y2ggaW4gdHVybiBlbGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0bWVudCB3 aXRoIC1lLgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWIvc3NsL3NzbF9hbGdzLmMuZmlwcyBvcGVu c3NsLTEuMC4xYi9zc2wvc3NsX2FsZ3MuYworLS0tIG9wZW5zc2wtMS4wLjFiL3NzbC9zc2xfYWxn cy5jLmZpcHMJMjAxMi0wMS0xNSAxNDo0Mjo1MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4xYi9zc2wvc3NsX2FsZ3MuYwkyMDEyLTA0LTI2IDE4OjAwOjUxLjcyNTc3NjM5OSArMDIw MAorQEAgLTY0LDYgKzY0LDEyIEBACisgaW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkKKyAJewor IAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysJaWYg KCFGSVBTX21vZGUoKSkKKysJCXsKKysjZW5kaWYKKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9fREVT CisgCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2JjKCkpOworIAlFVlBfYWRkX2NpcGhlcihFVlBf ZGVzX2VkZTNfY2JjKCkpOworQEAgLTEzNiw2ICsxNDIsNTAgQEAgaW50IFNTTF9saWJyYXJ5X2lu aXQodm9pZCkKKyAJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYSgpKTsKKyAJRVZQX2FkZF9kaWdlc3Qo RVZQX2RzcygpKTsKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQl9CisrCWVsc2UK KysJCXsKKysjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNf ZWRlM19jYmMoKSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX0FFUworKwlFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTky X2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2JjKCkpOworKwlFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2 X2djbSgpKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fTUQ1CisrCS8qIG5lZWRlZCBl dmVuIGluIHRoZSBGSVBTIG1vZGUgZm9yIFRMUyBNQUMgKi8KKysJRVZQX2FkZF9kaWdlc3QoRVZQ X21kNSgpKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wyLW1kNSIpOworKwlF VlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsInNzbDMtbWQ1Iik7CisrI2VuZGlmCisrI2lmbmRl ZiBPUEVOU1NMX05PX1NIQQorKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsgLyogUlNBIHdp dGggc2hhMSAqLworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCJzc2wzLXNoYTEiKTsK KysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLFNOX3NoYTFX aXRoUlNBKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2CisrCUVWUF9hZGRf ZGlnZXN0KEVWUF9zaGEyMjQoKSk7CisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7Cisr I2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgorKwlFVlBfYWRkX2RpZ2VzdChFVlBf c2hhMzg0KCkpOworKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOworKyNlbmRpZgorKyNp ZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19EU0EpCisr CUVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOyAvKiBEU0Egd2l0aCBzaGExICovCisrCUVWUF9h ZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLFNOX2RzYVdpdGhTSEExXzIpOworKwlFVlBf YWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiRFNTMSIpOworKwlFVlBfYWRkX2RpZ2Vz dF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiZHNzMSIpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNT TF9OT19FQ0RTQQorKwlFVlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7CisrI2VuZGlmCisrCQl9 CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKKyAJLyogVGhpcyB3aWxsIGluaXRp YWxpc2UgdGhlIGJ1aWx0LWluIGNvbXByZXNzaW9uIGFsZ29yaXRobXMuCisgCSAgIFRoZSB2YWx1 ZSByZXR1cm5lZCBpcyBhIFNUQUNLX09GKFNTTF9DT01QKSwgYnV0IHRoYXQgY2FuCgpkaWZmIC0t Z2l0IGEvb3BlbnNzbC5zcGVjIGIvb3BlbnNzbC5zcGVjCmluZGV4IDczNjRjMDYuLmUxZTg2Njkg MTAwNjQ0Ci0tLSBhL29wZW5zc2wuc3BlYworKysgYi9vcGVuc3NsLnNwZWMKQEAgLTIwLDcgKzIw LDcgQEAKIAogU3VtbWFyeTogVXRpbGl0aWVzIGZyb20gdGhlIGdlbmVyYWwgcHVycG9zZSBjcnlw dG9ncmFwaHkgbGlicmFyeSB3aXRoIFRMUyBpbXBsZW1lbnRhdGlvbgogTmFtZTogb3BlbnNzbAot VmVyc2lvbjogMS4wLjFhCitWZXJzaW9uOiAxLjAuMWIKICMgRG8gbm90IGZvcmdldCB0byBidW1w IFNITElCX1ZFUlNJT04gb24gdmVyc2lvbiB1cGdyYWRlcwogUmVsZWFzZTogMSV7P2Rpc3R9CiBF cG9jaDogMQpAQCAtNTEsNyArNTEsNyBAQCBQYXRjaDM1OiBvcGVuc3NsLTAuOS44ai12ZXJzaW9u LWFkZC1lbmdpbmVzLnBhdGNoCiBQYXRjaDM2OiBvcGVuc3NsLTEuMC4wZS1kb2Mtbm9lb2YucGF0 Y2gKIFBhdGNoMzg6IG9wZW5zc2wtMS4wLjEtYmV0YTItc3NsLW9wLWFsbC5wYXRjaAogUGF0Y2gz OTogb3BlbnNzbC0xLjAuMS1iZXRhMi1pcHY2LWFwcHMucGF0Y2gKLVBhdGNoNDA6IG9wZW5zc2wt MS4wLjFhLWZpcHMucGF0Y2gKK1BhdGNoNDA6IG9wZW5zc2wtMS4wLjFiLWZpcHMucGF0Y2gKIFBh dGNoNDU6IG9wZW5zc2wtMC45LjhqLWVudi1ub3psaWIucGF0Y2gKIFBhdGNoNDc6IG9wZW5zc2wt MS4wLjAtYmV0YTUtcmVhZG1lLXdhcm5pbmcucGF0Y2gKIFBhdGNoNDk6IG9wZW5zc2wtMS4wLjFh LWFsZ28tZG9jLnBhdGNoCkBAIC02Myw5ICs2Myw5IEBAIFBhdGNoNjA6IG9wZW5zc2wtMS4wLjBk LWFwcHMtZGdzdC5wYXRjaAogUGF0Y2g2Mzogb3BlbnNzbC0xLjAuMGQteG1wcC1zdGFydHRscy5w YXRjaAogUGF0Y2g2NTogb3BlbnNzbC0xLjAuMGUtY2hpbC1maXhlcy5wYXRjaAogUGF0Y2g2Njog b3BlbnNzbC0xLjAuMS1wa2djb25maWcta3JiNS5wYXRjaAorUGF0Y2g2Nzogb3BlbnNzbC0xLjAu MC1maXBzLXBrY3M4LnBhdGNoCiAjIEJhY2twb3J0ZWQgZml4ZXMgaW5jbHVkaW5nIHNlY3VyaXR5 IGZpeGVzCiBQYXRjaDgxOiBvcGVuc3NsLTEuMC4xLWJldGEyLXBhZGxvY2s2NC5wYXRjaAotUGF0 Y2g4Mjogb3BlbnNzbC0xLjAuMWEtYmFja3BvcnQucGF0Y2gKIAogTGljZW5zZTogT3BlblNTTAog R3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9MaWJyYXJpZXMKQEAgLTE2MSw5ICsxNjEsOSBAQCBm cm9tIG90aGVyIGZvcm1hdHMgdG8gdGhlIGZvcm1hdHMgdXNlZCBieSB0aGUgT3BlblNTTCB0b29s a2l0LgogJXBhdGNoNjMgLXAxIC1iIC5zdGFydHRscwogJXBhdGNoNjUgLXAxIC1iIC5jaGlsCiAl cGF0Y2g2NiAtcDEgLWIgLmtyYjUKKyVwYXRjaDY3IC1wMSAtYiAucGtjczgKIAogJXBhdGNoODEg LXAxIC1iIC5wYWRsb2NrNjQKLSVwYXRjaDgyIC1wMSAtYiAuYmFja3BvcnQKIAogIyBNb2RpZnkg dGhlIHZhcmlvdXMgcGVybCBzY3JpcHRzIHRvIHJlZmVyZW5jZSBwZXJsIGluIHRoZSByaWdodCBs b2NhdGlvbi4KIHBlcmwgdXRpbC9wZXJscGF0aC5wbCBgZGlybmFtZSAle19fcGVybH1gCkBAIC00 MTksNiArNDE5LDkgQEAgcm0gLXJmICRSUE1fQlVJTERfUk9PVC8le19saWJkaXJ9L2ZpcHNjYW5p c3Rlci4qCiAlcG9zdHVuIGxpYnMgLXAgL3NiaW4vbGRjb25maWcKIAogJWNoYW5nZWxvZworKiBU aHUgQXByIDI2IDIwMTIgVG9tYXMgTXJheiA8dG1yYXpAcmVkaGF0LmNvbT4gMS4wLjFiLTEKKy0g bmV3IHVwc3RyZWFtIHZlcnNpb24KKwogKiBGcmkgQXByIDIwIDIwMTIgVG9tYXMgTXJheiA8dG1y YXpAcmVkaGF0LmNvbT4gMS4wLjFhLTEKIC0gbmV3IHVwc3RyZWFtIHZlcnNpb24gZml4aW5nIENW RS0yMDEyLTIxMTAKIAoKZGlmZiAtLWdpdCBhL3NvdXJjZXMgYi9zb3VyY2VzCmluZGV4IDFlYjc3 MjcuLjkzZTBmZmYgMTAwNjQ0Ci0tLSBhL3NvdXJjZXMKKysrIGIvc291cmNlcwpAQCAtMSArMSBA QAotMjFhM2I4YmVlMWZkYjdlNjBjYTJlNGFhNTA1MjlmODEgIG9wZW5zc2wtMS4wLjFhLXVzYS50 YXIueHoKK2M4Nzc4NjI3NzE4ZjMzMmY5MWMwMDQxZWIyM2ZhMjUxICBvcGVuc3NsLTEuMC4xYi11 c2EudGFyLnh6Cg==