ZGlmZiAtLWdpdCBhLy50cmF2aXMueW1sIGIvLnRyYXZpcy55bWwKaW5kZXggYzY3YzBjZC4uNzZjYjFjNSAxMDA2NDQKLS0tIGEvLnRyYXZpcy55bWwKKysrIGIvLnRyYXZpcy55bWwKQEAgLTI4LDEwICsyOCw2IEBACiAgICAgICBzY3JpcHQ6CiAgICAgICAgIC0gdGVzdHMvc2NyaXB0cy9hbGwuc2ggLWsgdGVzdF9mdWxsX2NtYWtlX2djY19hc2FuCiAKLSAgICAtIG5hbWU6IGNoZWNrIGNvbXBpbGF0aW9uIGd1YXJkcwotICAgICAgc2NyaXB0OgotICAgICAgICAtIHRlc3RzL3NjcmlwdHMvYWxsLnNoIC1rICd0ZXN0X2RlcGVuZHNfKicgJ2J1aWxkX2tleV9leGNoYW5nZXMnCi0KICAgICAtIG5hbWU6IG1hY09TCiAgICAgICBvczogb3N4CiAgICAgICBjb21waWxlcjogY2xhbmcKZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKaW5kZXggODgzMzI0Ni4uYWMyNGJmNCAxMDA2NDQKLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrIGIvQ01ha2VMaXN0cy50eHQKQEAgLTE0LDkgKzE0LDEzIEBACiAjICAgICBDTWFrZSBmaWxlcy4gSXQgaXMgcmVsYXRlZCB0byBaTElCIHN1cHBvcnQgd2hpY2ggaXMgcGxhbm5lZCB0byBiZSByZW1vdmVkLgogIyAgICAgV2hlbiB0aGUgc3VwcG9ydCBpcyByZW1vdmVkLCB0aGUgYXNzb2NpYXRlZCBpbmNsdWRlX2RpcmVjdG9yaWVzIGNvbW1hbmQKICMgICAgIHdpbGwgYmUgcmVtb3ZlZCBhcyB3ZWxsIGFzIHRoaXMgbm90ZS4KKyMgLSBNQkVEVExTX1RBUkdFVF9QUkVGSVg6IENNYWtlIHRhcmdldHMgYXJlIGRlc2lnbmVkIHRvIGJlIGFsdGVyYWJsZSBieSBjYWxsaW5nCisjICAgQ01ha2UgaW4gb3JkZXIgdG8gYXZvaWQgdGFyZ2V0IG5hbWUgY2xhc2hlcywgdmlhIHRoZSB1c2Ugb2YKKyMgICBNQkVEVExTX1RBUkdFVF9QUkVGSVguIFRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIHByZWZpeGVkIHRvIHRoZQorIyAgIG1iZWR0bHMsIG1iZWR4NTA5LCBtYmVkY3J5cHRvIGFuZCBhcGlkb2MgdGFyZ2V0cy4KICMKIAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuNikKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguMTIpCiBpZihURVNUX0NQUCkKICAgICBwcm9qZWN0KCJtYmVkIFRMUyIgQyBDWFgpCiBlbHNlKCkKQEAgLTExMiw5ICsxMTYsMTIgQEAKICAgICBlbmRpZigpCiBlbmRpZigpCiAKLXNldChDTUFLRV9CVUlMRF9UWVBFICR7Q01BS0VfQlVJTERfVFlQRX0KLSAgICBDQUNIRSBTVFJJTkcgIkNob29zZSB0aGUgdHlwZSBvZiBidWlsZDogTm9uZSBEZWJ1ZyBSZWxlYXNlIENvdmVyYWdlIEFTYW4gQVNhbkRiZyBNZW1TYW4gTWVtU2FuRGJnIENoZWNrIENoZWNrRnVsbCIKLSAgICBGT1JDRSkKKyMgSWYgdGhpcyBpcyB0aGUgcm9vdCBwcm9qZWN0IGFkZCBsb25nZXIgbGlzdCBvZiBhdmFpbGFibGUgQ01BS0VfQlVJTERfVFlQRSB2YWx1ZXMKK2lmKENNQUtFX1NPVVJDRV9ESVIgU1RSRVFVQUwgQ01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSKQorICAgIHNldChDTUFLRV9CVUlMRF9UWVBFICR7Q01BS0VfQlVJTERfVFlQRX0KKyAgICAgICAgQ0FDSEUgU1RSSU5HICJDaG9vc2UgdGhlIHR5cGUgb2YgYnVpbGQ6IE5vbmUgRGVidWcgUmVsZWFzZSBDb3ZlcmFnZSBBU2FuIEFTYW5EYmcgTWVtU2FuIE1lbVNhbkRiZyBDaGVjayBDaGVja0Z1bGwiCisgICAgICAgIEZPUkNFKQorZW5kaWYoKQogCiAjIENyZWF0ZSBhIHN5bWJvbGljIGxpbmsgZnJvbSAke2Jhc2VfbmFtZX0gaW4gdGhlIGJpbmFyeSBkaXJlY3RvcnkKICMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcGF0aCBpbiB0aGUgc291cmNlIGRpcmVjdG9yeS4KQEAgLTI2MSw3ICsyNjgsNyBAQAogIyB0byBkZWZpbmUgdGhlIHRlc3QgZXhlY3V0YWJsZXMuCiAjCiBpZihFTkFCTEVfVEVTVElORyBPUiBFTkFCTEVfUFJPR1JBTVMpCi0gICAgZmlsZShHTE9CIE1CRURUTFNfVEVTVF9GSUxFUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdGVzdHMvc3JjLyouYykKKyAgICBmaWxlKEdMT0IgTUJFRFRMU19URVNUX0ZJTEVTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS90ZXN0cy9zcmMvKi5jICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS90ZXN0cy9zcmMvZHJpdmVycy8qLmMpCiAgICAgYWRkX2xpYnJhcnkobWJlZHRsc190ZXN0IE9CSkVDVCAke01CRURUTFNfVEVTVF9GSUxFU30pCiAgICAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMobWJlZHRsc190ZXN0CiAgICAgICAgIFBSSVZBVEUgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3Rlc3RzL2luY2x1ZGUKQEAgLTI3Myw3ICsyODAsNyBAQAogICAgIGFkZF9zdWJkaXJlY3RvcnkocHJvZ3JhbXMpCiBlbmRpZigpCiAKLUFERF9DVVNUT01fVEFSR0VUKGFwaWRvYworQUREX0NVU1RPTV9UQVJHRVQoJHtNQkVEVExTX1RBUkdFVF9QUkVGSVh9YXBpZG9jCiAgICAgQ09NTUFORCBkb3h5Z2VuIG1iZWR0bHMuZG94eWZpbGUKICAgICBXT1JLSU5HX0RJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZG94eWdlbikKIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDMyODUzY2UuLjU5NGMzY2YgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxMTggQEAKIG1iZWQgVExTIENoYW5nZUxvZyAoU29ydGVkIHBlciBicmFuY2gsIGRhdGUpCiAKKz0gbWJlZCBUTFMgMi4yNC4wIGJyYW5jaCByZWxlYXNlZCAyMDIwLTA5LTAxCisKK0FQSSBjaGFuZ2VzCisgICAqIEluIHRoZSBQU0EgQVBJLCByZW5hbWUgdGhlIHR5cGVzIG9mIGVsbGlwdGljIGN1cnZlIGFuZCBEaWZmaWUtSGVsbG1hbgorICAgICBncm91cCBmYW1pbGllcyB0byBwc2FfZWNjX2ZhbWlseV90IGFuZCBwc2FfZGhfZmFtaWx5X3QsIGluIGxpbmUgd2l0aCB0aGUKKyAgICAgUFNBIENyeXB0byBBUEkgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDEuMC4wLgorICAgICBSZW5hbWUgYXNzb2NpYXRlZCBtYWNyb3MgYXMgd2VsbDoKKyAgICAgUFNBX0VDQ19DVVJWRV94eHggcmVuYW1lZCB0byBQU0FfRUNDX0ZBTUlMWV94eHgKKyAgICAgUFNBX0RIX0dST1VQX3h4eCByZW5hbWVkIHRvIFBTQV9ESF9GQU1JTFlfeHh4CisgICAgIFBTQV9LRVlfVFlQRV9HRVRfQ1VSVkUgcmVuYW1lZCB0byB0byBQU0FfS0VZX1RZUEVfRUNDX0dFVF9GQU1JTFkKKyAgICAgUFNBX0tFWV9UWVBFX0dFVF9HUk9VUCByZW5hbWVkIHRvIFBTQV9LRVlfVFlQRV9ESF9HRVRfRkFNSUxZCisKK0RlZmF1bHQgYmVoYXZpb3IgY2hhbmdlcworICAgKiBTdG9wIHN0b3JpbmcgcGVyc2lzdGVudCBpbmZvcm1hdGlvbiBhYm91dCBleHRlcm5hbGx5IHN0b3JlZCBrZXlzIGNyZWF0ZWQKKyAgICAgdGhyb3VnaCBQU0EgQ3J5cHRvIHdpdGggYSB2b2xhdGlsZSBsaWZldGltZS4gUmVwb3J0ZWQgaW4gIzMyODggYW5kCisgICAgIGNvbnRyaWJ1dGVkIGJ5IFN0ZXZlbiBDb29yZW1hbiBpbiAjMzM4Mi4KKworRmVhdHVyZXMKKyAgICogVGhlIG5ldyBmdW5jdGlvbiBtYmVkdGxzX2VjcF93cml0ZV9rZXkoKSBleHBvcnRzIHByaXZhdGUgRUNDIGtleXMgYmFjayB0bworICAgICBhIGJ5dGUgYnVmZmVyLiBJdCBpcyB0aGUgaW52ZXJzZSBvZiB0aGUgZXhpc3RpbmcgbWJlZHRsc19lY3BfcmVhZF9rZXkoKS4KKyAgICogU3VwcG9ydCBidWlsZGluZyBvbiBlMmsgKEVsYnJ1cykgYXJjaGl0ZWN0dXJlOiBjb3JyZWN0bHkgZW5hYmxlCisgICAgIC1XZm9ybWF0LXNpZ25lZG5lc3MsIGFuZCBmaXggdGhlIGNvZGUgdGhhdCBjYXVzZXMgc2lnbmVkLW9uZS1iaXQtZmllbGQKKyAgICAgYW5kIHNpZ24tY29tcGFyZSB3YXJuaW5ncy4gQ29udHJpYnV0ZWQgYnkgbWFraXNlLWhvbXVyYSAoSWdvciBNb2xjaGFub3YpCisgICAgIDxha2VtaV9ob211cmFAa3VyaXNhLmNoPi4KKworU2VjdXJpdHkKKyAgICogRml4IGEgdnVsbmVyYWJpbGl0eSBpbiB0aGUgdmVyaWZpY2F0aW9uIG9mIFguNTA5IGNlcnRpZmljYXRlcyB3aGVuCisgICAgIG1hdGNoaW5nIHRoZSBleHBlY3RlZCBjb21tb24gbmFtZSAodGhlIGNuIGFyZ3VtZW50IG9mCisgICAgIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5KCkpIHdpdGggdGhlIGFjdHVhbCBjZXJ0aWZpY2F0ZSBuYW1lOiB3aGVuIHRoZQorICAgICBzdWJqZWNBbHROYW1lIGV4dGVuc2lvbiBpcyBwcmVzZW50LCB0aGUgZXhwZWN0ZWQgbmFtZSB3YXMgY29tcGFyZWQgdG8gYW55CisgICAgIG5hbWUgaW4gdGhhdCBleHRlbnNpb24gcmVnYXJkbGVzcyBvZiBpdHMgdHlwZS4gVGhpcyBtZWFucyB0aGF0IGFuCisgICAgIGF0dGFja2VyIGNvdWxkIGZvciBleGFtcGxlIGltcGVyc29uYXRlIGEgNC1ieXRlcyBvciAxNi1ieXRlIGRvbWFpbiBieQorICAgICBnZXR0aW5nIGEgY2VydGlmaWNhdGUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIElQdjQgb3IgSVB2NiAodGhpcyB3b3VsZAorICAgICByZXF1aXJlIHRoZSBhdHRhY2tlciB0byBjb250cm9sIHRoYXQgSVAgYWRkcmVzcywgdGhvdWdoKS4gU2ltaWxhciBhdHRhY2tzCisgICAgIHVzaW5nIG90aGVyIHN1YmplY3RBbHROYW1lIG5hbWUgdHlwZXMgbWlnaHQgYmUgcG9zc2libGUuIEZvdW5kIGFuZAorICAgICByZXBvcnRlZCBieSBrRllhdGVrIGluICMzNDk4LgorICAgKiBXaGVuIGNoZWNraW5nIFguNTA5IENSTHMsIGEgY2VydGlmaWNhdGUgd2FzIG9ubHkgY29uc2lkZXJlZCBhcyByZXZva2VkIGlmCisgICAgIGl0cyByZXZvY2F0aW9uRGF0ZSB3YXMgaW4gdGhlIHBhc3QgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbCBjbG9jayBpZgorICAgICBhdmFpbGFibGUuIEluIHBhcnRpY3VsYXIsIG9uIGJ1aWxkcyB3aXRob3V0IE1CRURUTFNfSEFWRV9USU1FX0RBVEUsCisgICAgIGNlcnRpZmljYXRlcyB3ZXJlIG5ldmVyIGNvbnNpZGVyZWQgYXMgcmV2b2tlZC4gT24gYnVpbGRzIHdpdGgKKyAgICAgTUJFRFRMU19IQVZFX1RJTUVfREFURSwgYW4gYXR0YWNrZXIgYWJsZSB0byBjb250cm9sIHRoZSBsb2NhbCBjbG9jayAoZm9yCisgICAgIGV4YW1wbGUsIGFuIHVudHJ1c3RlZCBPUyBhdHRhY2tpbmcgYSBzZWN1cmUgZW5jbGF2ZSkgY291bGQgcHJldmVudAorICAgICByZXZvY2F0aW9uIG9mIGNlcnRpZmljYXRlcyB2aWEgQ1JMcy4gRml4ZWQgYnkgbm8gbG9uZ2VyIGNoZWNraW5nIHRoZQorICAgICByZXZvY2F0aW9uRGF0ZSBmaWVsZCwgaW4gYWNjb3JkYW5jZSB3aXRoIFJGQyA1MjgwLiBSZXBvcnRlZCBieQorICAgICB5dWVtb25hbmdvbmcgaW4gIzMzNDAuIFJlcG9ydGVkIGluZGVwZW5kZW50bHkgYW5kIGZpeGVkIGJ5CisgICAgIFJhb3VsIFN0cmFja3ggYW5kIEpldGhybyBCZWVrbWFuIGluICMzNDMzLgorICAgKiBJbiAoRClUTFMgcmVjb3JkIGRlY3J5cHRpb24sIHdoZW4gdXNpbmcgYSBDQkMgY2lwaGVyc3VpdGVzIHdpdGhvdXQgdGhlCisgICAgIEVuY3J5cHQtdGhlbi1NYWMgZXh0ZW5zaW9uLCB1c2UgY29uc3RhbnQgY29kZSBmbG93IG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMKKyAgICAgdG8gZXh0cmFjdCBhbmQgY2hlY2sgdGhlIE1BQy4gVGhpcyBpcyBhbiBpbXByb3ZlbWVudCB0byB0aGUgZXhpc3RpbmcKKyAgICAgY291bnRlcm1lYXN1cmUgYWdhaW5zdCBMdWNreSAxMyBhdHRhY2tzLiBUaGUgcHJldmlvdXMgY291bnRlcm1lYXN1cmUgd2FzCisgICAgIGVmZmVjdGl2ZSBhZ2FpbnN0IG5ldHdvcmstYmFzZWQgYXR0YWNrZXJzLCBidXQgbGVzcyBzbyBhZ2FpbnN0IGxvY2FsCisgICAgIGF0dGFja2Vycy4gVGhlIG5ldyBjb3VudGVybWVhc3VyZSBkZWZlbmRzIGFnYWluc3QgbG9jYWwgYXR0YWNrZXJzLCBldmVuCisgICAgIGlmIHRoZXkgaGF2ZSBhY2Nlc3MgdG8gZmluZS1ncmFpbmVkIG1lYXN1cmVtZW50cy4gSW4gcGFydGljdWxhciwgdGhpcworICAgICBmaXhlcyBhIGxvY2FsIEx1Y2t5IDEzIGNhY2hlIGF0dGFjayBmb3VuZCBhbmQgcmVwb3J0ZWQgYnkgVHViYSBZYXZ1eiwKKyAgICAgRmFyaGFhbiBGb3d6ZSwgS2VuIChZaWhhbikgQmFpLCBHcmFudCBIZXJuYW5kZXosIGFuZCBLZXZpbiBCdXRsZXIKKyAgICAgKFVuaXZlcnNpdHkgb2YgRmxvcmlkYSkgYW5kIERhdmUgVGlhbiAoUHVyZHVlIFVuaXZlcnNpdHkpLgorICAgKiBGaXggc2lkZSBjaGFubmVsIGluIFJTQSBwcml2YXRlIGtleSBvcGVyYXRpb25zIGFuZCBzdGF0aWMgKGZpbml0ZS1maWVsZCkKKyAgICAgRGlmZmllLUhlbGxtYW4uIEFuIGFkdmVyc2FyeSB3aXRoIHByZWNpc2UgZW5vdWdoIHRpbWluZyBhbmQgbWVtb3J5IGFjY2VzcworICAgICBpbmZvcm1hdGlvbiAodHlwaWNhbGx5IGFuIHVudHJ1c3RlZCBvcGVyYXRpbmcgc3lzdGVtIGF0dGFja2luZyBhIHNlY3VyZQorICAgICBlbmNsYXZlKSBjb3VsZCBieXBhc3MgYW4gZXhpc3RpbmcgY291bnRlci1tZWFzdXJlIChiYXNlIGJsaW5kaW5nKSBhbmQKKyAgICAgcG90ZW50aWFsbHkgZnVsbHkgcmVjb3ZlciB0aGUgcHJpdmF0ZSBrZXkuCisgICAqIEZpeCBhIDEtYnl0ZSBidWZmZXIgb3ZlcnJlYWQgaW4gbWJlZHRsc194NTA5X2NybF9wYXJzZV9kZXIoKS4KKyAgICAgQ3JlZGl0IHRvIE9TUy1GdXp6IGZvciBkZXRlY3RpbmcgdGhlIHByb2JsZW0gYW5kIHRvIFBoaWxpcHBlIEFudG9pbmUKKyAgICAgZm9yIHBpbnBvaW50aW5nIHRoZSBwcm9ibGVtYXRpYyBjb2RlLgorICAgKiBaZXJvaXNpbmcgb2YgcGxhaW50ZXh0IGJ1ZmZlcnMgaW4gbWJlZHRsc19zc2xfcmVhZCgpIHRvIGVyYXNlIHVudXNlZAorICAgICBhcHBsaWNhdGlvbiBkYXRhIGZyb20gbWVtb3J5LiBSZXBvcnRlZCBpbiAjNjg5IGJ5CisgICAgIEpvaGFuIFVwcG1hbiBCcnVjZSBvZiBTZWN0cmEuCisKK0J1Z2ZpeAorICAgKiBMaWJyYXJ5IGZpbGVzIGluc3RhbGxlZCBhZnRlciBhIENNYWtlIGJ1aWxkIG5vIGxvbmdlciBoYXZlIGV4ZWN1dGUKKyAgICAgcGVybWlzc2lvbi4KKyAgICogVXNlIGxvY2FsIGxhYmVscyBpbiBtYmVkdGxzX3BhZGxvY2tfaGFzX3N1cHBvcnQoKSB0byBmaXggYW4gaW52YWxpZCBzeW1ib2wKKyAgICAgcmVkZWZpbml0aW9uIGlmIHRoZSBmdW5jdGlvbiBpcyBpbmxpbmVkLgorICAgICBSZXBvcnRlZCBpbiAjMzQ1MSBhbmQgZml4IGNvbnRyaWJ1dGVkIGluICMzNDUyIGJ5IG9raG93YW5nLgorICAgKiBGaXggdGhlIGVuZGlhbm5lc3Mgb2YgQ3VydmUyNTUxOSBrZXlzIGltcG9ydGVkL2V4cG9ydGVkIHRocm91Z2ggdGhlIFBTQQorICAgICBBUElzLiBwc2FfaW1wb3J0X2tleSBhbmQgcHNhX2V4cG9ydF9rZXkgd2lsbCBub3cgY29ycmVjdGx5IGV4cGVjdC9vdXRwdXQKKyAgICAgTW9udGdvbWVyeSBrZXlzIGluIGxpdHRsZS1lbmRpYW4gYXMgZGVmaW5lZCBieSBSRkM3NzQ4LiBDb250cmlidXRlZCBieQorICAgICBTdGV2ZW4gQ29vcmVtYW4gaW4gIzM0MjUuCisgICAqIEZpeCBidWlsZCBlcnJvcnMgd2hlbiB0aGUgb25seSBlbmFibGVkIGVsbGlwdGljIGN1cnZlcyBhcmUgTW9udGdvbWVyeQorICAgICBjdXJ2ZXMuIFJhaXNlZCBieSBzaWducGFpbnRlciBpbiAjOTQxIGFuZCBieSBUYWlraS1TYW4gaW4gIzE0MTIuIFRoaXMKKyAgICAgYWxzbyBmaXhlcyBtaXNzaW5nIGRlY2xhcmF0aW9ucyByZXBvcnRlZCBieSBTdGV2ZW4gQ29vcmVtYW4gaW4gIzExNDcuCisgICAqIEZpeCBzZWxmLXRlc3QgZmFpbHVyZSB3aGVuIHRoZSBvbmx5IGVuYWJsZWQgc2hvcnQgV2VpZXJzdHJhc3MgZWxsaXB0aWMKKyAgICAgY3VydmUgaXMgc2VjcDE5MmsxLiBGaXhlcyAjMjAxNy4KKyAgICogUFNBIGtleSBpbXBvcnQgd2lsbCBub3cgY29ycmVjdGx5IGltcG9ydCBhIEN1cnZlMjU1MTkvQ3VydmU0NDggcHVibGljIGtleQorICAgICBpbnN0ZWFkIG9mIGVycm9yaW5nIG91dC4gQ29udHJpYnV0ZWQgYnkgU3RldmVuIENvb3JlbWFuIGluICMzNDkyLgorICAgKiBVc2UgYXJjNHJhbmRvbV9idWYgb24gTmV0QlNEIGluc3RlYWQgb2YgcmFuZCBpbXBsZW1lbnRhdGlvbiB3aXRoIGN5Y2xpY2FsCisgICAgIGxvd2VyIGJpdHMuIEZpeCBjb250cmlidXRlZCBpbiAjMzU0MC4KKyAgICogRml4IGEgbWVtb3J5IGxlYWsgaW4gbWJlZHRsc19tZF9zZXR1cCgpIHdoZW4gdXNpbmcgSE1BQyB1bmRlciBsb3cgbWVtb3J5CisgICAgIGNvbmRpdGlvbnMuIFJlcG9ydGVkIGFuZCBmaXggc3VnZ2VzdGVkIGJ5IEd1aWRvIFZyYW5rZW4gaW4gIzM0ODYuCisgICAqIEZpeCBidWcgaW4gcmVkaXJlY3Rpb24gb2YgdW5pdCB0ZXN0IG91dHB1dHMgb24gcGxhdGZvcm1zIHdoZXJlIHN0ZG91dCBpcworICAgICBkZWZpbmVkIGFzIGEgbWFjcm8uIEZpcnN0IHJlcG9ydGVkIGluICMyMzExIGFuZCBmaXggY29udHJpYnV0ZWQgaW4gIzM1MjguCisKK0NoYW5nZXMKKyAgICogT25seSBwYXNzIC1XZm9ybWF0LXNpZ25lZG5lc3MgdG8gdmVyc2lvbnMgb2YgR0NDIHRoYXQgc3VwcG9ydCBpdC4gUmVwb3J0ZWQKKyAgICAgaW4gIzM0NzggYW5kIGZpeCBjb250cmlidXRlZCBpbiAjMzQ3OSBieSBva2hvd2FuZy4KKyAgICogUmVkdWNlIHRoZSBzdGFjayBjb25zdW1wdGlvbiBvZiBtYmVkdGxzX3g1MDl3cml0ZV9jc3JfZGVyKCkgd2hpY2gKKyAgICAgcHJldmlvdXNseSBjb3VsZCBsZWFkIHRvIHN0YWNrIG92ZXJmbG93IG9uIGNvbnN0cmFpbmVkIGRldmljZXMuCisgICAgIENvbnRyaWJ1dGVkIGJ5IERvcnUgR3VjZWEgYW5kIFNpbW9uIExlZXQgaW4gIzM0NjQuCisgICAqIFVuZGVmaW5lIHRoZSBBU1NFUlQgbWFjcm8gYmVmb3JlIGRlZmluaW5nIGl0IGxvY2FsbHksIGluIGNhc2UgaXQgaXMgZGVmaW5lZAorICAgICBpbiBhIHBsYXRmb3JtIGhlYWRlci4gQ29udHJpYnV0ZWQgYnkgQWJkZWxhdGlmIEd1ZXR0b3VjaGUgaW4gIzM1NTcuCisgICAqIFVwZGF0ZSBjb3B5cmlnaHQgbm90aWNlcyB0byB1c2UgTGludXggRm91bmRhdGlvbiBndWlkYW5jZS4gQXMgYSByZXN1bHQsCisgICAgIHRoZSBjb3B5cmlnaHQgb2YgY29udHJpYnV0b3JzIG90aGVyIHRoYW4gQXJtIGlzIG5vdyBhY2tub3dsZWRnZWQsIGFuZCB0aGUKKyAgICAgeWVhcnMgb2YgcHVibGlzaGluZyBhcmUgbm8gbG9uZ2VyIHRyYWNrZWQgaW4gdGhlIHNvdXJjZSBmaWxlcy4gVGhpcyBhbHNvCisgICAgIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBsaW5lcyBkZWNsYXJpbmcgdGhlIGZpbGVzIHRvIGJlIHBhcnQgb2YKKyAgICAgTWJlZFRMUy4gRml4ZXMgIzM0NTcuCisgICAqIEFkZCB0aGUgY29tbWFuZCBsaW5lIHBhcmFtZXRlciBrZXlfcHdkIHRvIHRoZSBzc2xfY2xpZW50MiBhbmQgc3NsX3NlcnZlcjIKKyAgICAgZXhhbXBsZSBhcHBsaWNhdGlvbnMgd2hpY2ggYWxsb3dzIHRvIHByb3ZpZGUgYSBwYXNzd29yZCBmb3IgdGhlIGtleSBmaWxlCisgICAgIHNwZWNpZmllZCB0aHJvdWdoIHRoZSBleGlzdGluZyBrZXlfZmlsZSBhcmd1bWVudC4gVGhpcyBhbGxvd3MgdGhlIHVzZSBvZgorICAgICB0aGVzZSBhcHBsaWNhdGlvbnMgd2l0aCBwYXNzd29yZC1wcm90ZWN0ZWQga2V5IGZpbGVzLiBBbmFsb2dvdXNseSBidXQgZm9yCisgICAgIHNzbF9zZXJ2ZXIyIG9ubHksIGFkZCB0aGUgY29tbWFuZCBsaW5lIHBhcmFtZXRlciBrZXlfcHdkMiB3aGljaCBhbGxvd3MgdG8KKyAgICAgc2V0IGEgcGFzc3dvcmQgZm9yIHRoZSBrZXkgZmlsZSBwcm92aWRlZCB0aHJvdWdoIHRoZSBleGlzdGluZyBrZXlfZmlsZTIKKyAgICAgYXJndW1lbnQuCisKID0gbWJlZCBUTFMgMi4yMy4wIGJyYW5jaCByZWxlYXNlZCAyMDIwLTA3LTAxCiAKIERlZmF1bHQgYmVoYXZpb3IgY2hhbmdlcwpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvMDBSRUFETUUubWQgYi9DaGFuZ2VMb2cuZC8wMFJFQURNRS5tZAppbmRleCBiNTU5ZTIzLi5kMmVhNzNkIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cuZC8wMFJFQURNRS5tZAorKysgYi9DaGFuZ2VMb2cuZC8wMFJFQURNRS5tZApAQCAtMyw2ICszLDI5IEBACiBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBjaGFuZ2Vsb2cgZW50cmllcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIG1lcmdlZAogdG8gdGhlIGNoYW5nZWxvZyBmaWxlIChbYC4uL0NoYW5nZUxvZ2BdKC4uL0NoYW5nZUxvZykpLgogCisjIyBXaGF0IHJlcXVpcmVzIGEgY2hhbmdlbG9nIGVudHJ5PworCitXcml0ZSBhIGNoYW5nZWxvZyBlbnRyeSBpZiB0aGVyZSBpcyBhIHVzZXItdmlzaWJsZSBjaGFuZ2UuIFRoaXMgaW5jbHVkZXM6CisKKyogQnVnIGZpeGVzIGluIHRoZSBsaWJyYXJ5IG9yIGluIHNhbXBsZSBwcm9ncmFtczogZml4aW5nIGEgc2VjdXJpdHkgaG9sZSwKKyAgZml4aW5nIGJyb2tlbiBiZWhhdmlvciwgZml4aW5nIHRoZSBidWlsZCBpbiBzb21lIGNvbmZpZ3VyYXRpb24gb3Igb24gc29tZQorICBwbGF0Zm9ybSwgZXRjLgorKiBOZXcgZmVhdHVyZXMgaW4gdGhlIGxpYnJhcnksIG5ldyBzYW1wbGUgcHJvZ3JhbXMsIG9yIG5ldyBwbGF0Zm9ybSBzdXBwb3J0LgorKiBDaGFuZ2VzIGluIGV4aXN0aW5nIGJlaGF2aW9yLiBUaGVzZSBzaG91bGQgYmUgcmFyZS4gQ2hhbmdlcyBpbiBmZWF0dXJlcworICB0aGF0IGFyZSBkb2N1bWVudGVkIGFzIGV4cGVyaW1lbnRhbCBtYXkgb3IgbWF5IG5vdCBiZSBhbm5vdW5jZWQsIGRlcGVuZGluZworICBvbiB0aGUgZXh0ZW50IG9mIHRoZSBjaGFuZ2UgYW5kIGhvdyB3aWRlbHkgd2UgZXhwZWN0IHRoZSBmZWF0dXJlIHRvIGJlIHVzZWQuCisKK1dlIGdlbmVyYWxseSBkb24ndCBpbmNsdWRlIGNoYW5nZWxvZyBlbnRyaWVzIGZvcjoKKworKiBEb2N1bWVudGF0aW9uIGltcHJvdmVtZW50cy4KKyogUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLCB1bmxlc3MgdGhleSBhcmUgcGFydGljdWxhcmx5IHNpZ25pZmljYW50LgorKiBDaGFuZ2VzIHRvIHBhcnRzIG9mIHRoZSBjb2RlIGJhc2UgdGhhdCB1c2VycyBkb24ndCBpbnRlcmFjdCB3aXRoIGRpcmVjdGx5LAorICBzdWNoIGFzIHRlc3QgY29kZSBhbmQgdGVzdCBkYXRhLgorCitVbnRpbCBNYmVkIFRMUyAyLjI0LjAsIHdlIHJlcXVpcmVkIGNoYW5nZWxvZyBlbnRyaWVzIGluIG1vcmUgY2FzZXMuCitMb29raW5nIGF0IG9sZGVyIGNoYW5nZWxvZyBlbnRyaWVzIGlzIGdvb2QgcHJhY3RpY2UgZm9yIGhvdyB0byB3cml0ZSBhCitjaGFuZ2Vsb2cgZW50cnksIGJ1dCBub3QgZm9yIGRlY2lkaW5nIHdoZXRoZXIgdG8gd3JpdGUgb25lLgorCiAjIyBDaGFuZ2Vsb2cgZW50cnkgZmlsZSBmb3JtYXQKIAogQSBjaGFuZ2Vsb2cgZW50cnkgZmlsZSBtdXN0IGhhdmUgdGhlIGV4dGVuc2lvbiBgKi50eHRgIGFuZCBtdXN0IGhhdmUgdGhlCkBAIC0zMyw4ICs1Niw3IEBACiAgICAgQnVnZml4CiAgICAgQ2hhbmdlcwogCi1Vc2Ug4oCcQ2hhbmdlc+KAnSBmb3IgYW55dGhpbmcgdGhhdCBkb2Vzbid0IGZpdCBpbiB0aGUgb3RoZXIgY2F0ZWdvcmllcywgc3VjaCBhcwotcGVyZm9ybWFuY2UsIGRvY3VtZW50YXRpb24gYW5kIHRlc3QgaW1wcm92ZW1lbnRzLgorVXNlIOKAnENoYW5nZXPigJ0gZm9yIGFueXRoaW5nIHRoYXQgZG9lc24ndCBmaXQgaW4gdGhlIG90aGVyIGNhdGVnb3JpZXMuCiAKICMjIEhvdyB0byB3cml0ZSBhIGNoYW5nZWxvZyBlbnRyeQogCkBAIC00OSw4ICs3MSw3IEBACiBNYmVkIFRMUyBpc3N1ZS4gQWRkIG90aGVyIGV4dGVybmFsIHJlZmVyZW5jZXMgc3VjaCBhcyBDVkUgbnVtYmVycyB3aGVyZQogYXBwbGljYWJsZS4KIAotQ3JlZGl0IHRoZSBhdXRob3Igb2YgdGhlIGNvbnRyaWJ1dGlvbiBpZiB0aGUgY29udHJpYnV0aW9uIGlzIG5vdCBhIG1lbWJlciBvZgotdGhlIE1iZWQgVExTIGRldmVsb3BtZW50IHRlYW0uIEFsc28gY3JlZGl0IGJ1ZyByZXBvcnRlcnMgd2hlcmUgYXBwbGljYWJsZS4KK0NyZWRpdCBidWcgcmVwb3J0ZXJzIHdoZXJlIGFwcGxpY2FibGUuCiAKICoqRXhwbGFpbiB3aHksIG5vdCBob3cqKi4gUmVtZW1iZXIgdGhhdCB0aGUgYXVkaWVuY2UgaXMgdGhlIHVzZXJzIG9mIHRoZQogbGlicmFyeSwgbm90IGl0cyBkZXZlbG9wZXJzLiBJbiBwYXJ0aWN1bGFyLCBmb3IgYSBidWcgZml4LCBleHBsYWluIHRoZQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvX0dOVV9TT1VSQ0UtcmVkZWZpbmVkLnR4dCBiL0NoYW5nZUxvZy5kL19HTlVfU09VUkNFLXJlZGVmaW5lZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljOGExNQotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy5kL19HTlVfU09VUkNFLXJlZGVmaW5lZC50eHQKQEAgLTAsMCArMSwzIEBACitCdWdmaXgKKyAgICogRml4IHRoZSBidWlsZCB3aGVuIHRoZSBtYWNybyBfR05VX1NPVVJDRSBpcyBkZWZpbmVkIHRvIGEgbm9uLWVtcHR5IHZhbHVlLgorICAgICBGaXggIzM0MzIuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9hZGQtYWVzLWVjYi10by1wc2EudHh0IGIvQ2hhbmdlTG9nLmQvYWRkLWFlcy1lY2ItdG8tcHNhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGRlNjdjCi0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvYWRkLWFlcy1lY2ItdG8tcHNhLnR4dApAQCAtMCwwICsxLDIgQEAKK0ZlYXR1cmVzCisgICAqIEFkZCBzdXBwb3J0IGZvciBFQ0IgdG8gdGhlIFBTQSBjaXBoZXIgQVBJLgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvYWRkX01CRURUTFNfVEFSR0VUX1BSRUZJWF90b19jbWFrZS50eHQgYi9DaGFuZ2VMb2cuZC9hZGRfTUJFRFRMU19UQVJHRVRfUFJFRklYX3RvX2NtYWtlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzNmMzA5Ci0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvYWRkX01CRURUTFNfVEFSR0VUX1BSRUZJWF90b19jbWFrZS50eHQKQEAgLTAsMCArMSw2IEBACitGZWF0dXJlcworICAgKiBBZGQgTUJFRFRMU19UQVJHRVRfUFJFRklYIENNYWtlIHZhcmlhYmxlLCB3aGljaCBpcyBwcmVmaXhlZCB0byB0aGUgbWJlZHRscywKKyAgICAgbWJlZGNyeXB0bywgbWJlZHg1MDkgYW5kIGFwaWRvYyBDTWFrZSB0YXJnZXQgbmFtZXMuIFRoaXMgY2FuIGJlIHVzZWQgYnkKKyAgICAgZXh0ZXJuYWwgQ01ha2UgcHJvamVjdHMgdGhhdCBpbmNsdWRlIHRoaXMgb25lIHRvIGF2b2lkIENNYWtlIHRhcmdldCBuYW1lCisgICAgIGNsYXNoZXMuICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzICIiLCBzbyBkZWZhdWx0IHRhcmdldCBuYW1lcworICAgICBhcmUgdW5jaGFuZ2VkLgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvYWRkX2NpcGhlcl90cmFuc3BhcmVudF9kcml2ZXIudHh0IGIvQ2hhbmdlTG9nLmQvYWRkX2NpcGhlcl90cmFuc3BhcmVudF9kcml2ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNmYzM2QKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2cuZC9hZGRfY2lwaGVyX3RyYW5zcGFyZW50X2RyaXZlci50eHQKQEAgLTAsMCArMSw0IEBACitGZWF0dXJlcworICAgKiBQYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXcgUFNBIENyeXB0byBhY2NlbGVyYXRvciBBUElzIGZvcgorICAgICBlbmFibGluZyBzeW1tZXRyaWMgY2lwaGVyIGFjY2VsZXJhdGlvbiB0aHJvdWdoIGNyeXB0byBhY2NlbGVyYXRvcnMuCisgICAgIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlbiBDb29yZW1hbiBpbiAjMzY0NC4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL2FkZF9zaWduX3ZlcmlmeV9rZXlnZW5fdHJhbnNwYXJlbnRfZHJpdmVyLnR4dCBiL0NoYW5nZUxvZy5kL2FkZF9zaWduX3ZlcmlmeV9rZXlnZW5fdHJhbnNwYXJlbnRfZHJpdmVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTQzODk5Ci0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvYWRkX3NpZ25fdmVyaWZ5X2tleWdlbl90cmFuc3BhcmVudF9kcml2ZXIudHh0CkBAIC0wLDAgKzEsNCBAQAorRmVhdHVyZXMKKyAgICogUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV3IFBTQSBDcnlwdG8gYWNjZWxlcmF0b3IgQVBJcyBmb3IKKyAgICAgZW5hYmxpbmcga2V5IGdlbmVyYXRpb24gYW5kIGFzeW1tZXRyaWMgc2lnbmluZy92ZXJpZmljYXRpb24gdGhyb3VnaCBjcnlwdG8KKyAgICAgYWNjZWxlcmF0b3JzLiBDb250cmlidXRlZCBieSBTdGV2ZW4gQ29vcmVtYW4gaW4gIzM1MDEuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9hZGp1c3Rpbmcgc2xpZGluZ193aW5kb3dfc2l6ZV9QUjM1OTIudHh0IGIvQ2hhbmdlTG9nLmQvYWRqdXN0aW5nIHNsaWRpbmdfd2luZG93X3NpemVfUFIzNTkyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDg5NTY1Ci0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvYWRqdXN0aW5nIHNsaWRpbmdfd2luZG93X3NpemVfUFIzNTkyLnR4dApAQCAtMCwwICsxLDMgQEAKK0NoYW5nZXMKKyAgICogUmVkdWNlIHN0YWNrIHVzYWdlIHNpZ25pZmljYW50bHkgZHVyaW5nIHNsaWRpbmcgd2luZG93IGV4cG9uZW50aWF0aW9uLgorICAgICBSZXBvcnRlZCBpbiAjMzU5MSBhbmQgZml4IGNvbnRyaWJ1dGVkIGluICMzNTkyIGJ5IERhbmllbCBPdHRlLgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvYW5kcm9pZC1zb2NrbGVuX3QudHh0IGIvQ2hhbmdlTG9nLmQvYW5kcm9pZC1zb2NrbGVuX3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OTVhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2cuZC9hbmRyb2lkLXNvY2tsZW5fdC50eHQKQEAgLTAsMCArMSwzIEBACitCdWdmaXgKKyAgICogVXNlIHNvY2tsZW5fdCBvbiBBbmRyb2lkIGFuZCBvdGhlciBQT1NJWC1jb21wbGlhbnQgc3lzdGVtCisKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL2J1Z2ZpeF8zNTI0LnR4dCBiL0NoYW5nZUxvZy5kL2J1Z2ZpeF8zNTI0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDM4MzQwCi0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvYnVnZml4XzM1MjQudHh0CkBAIC0wLDAgKzEsMyBAQAorQnVnZml4CisgICogSW5jbHVkZSB0aGUgcHNhX2NvbnN0YW50X25hbWVzIGdlbmVyYXRlZCBzb3VyY2UgY29kZSBpbiB0aGUgc291cmNlIHRyZWUKKyAgICBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgaXQgYXQgYnVpbGQgdGltZS4gRml4ZXMgIzM1MjQuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9idWdmaXhfMzc5NC50eHQgYi9DaGFuZ2VMb2cuZC9idWdmaXhfMzc5NC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4M2VhNwotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy5kL2J1Z2ZpeF8zNzk0LnR4dApAQCAtMCwwICsxLDQgQEAKK0J1Z2ZpeAorICAqIEZpeCBoYW5kbGluZyBvZiBFT0YgYWdhaW5zdCAweGZmIGJ5dGVzIGFuZCBvbiBwbGF0Zm9ybXMgd2l0aAorICAgIHVuc2lnbmVkIGNoYXJzLiAgRml4ZXMgYSBidWlsZCBmYWlsdXJlIG9uIHBsYXRmb3JtcyB3aGVyZSBjaGFyIGlzCisgICAgdW5zaWduZWQuICBGaXhlcyAjMzc5NC4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL2J1Z2ZpeF9QUjMyOTQudHh0IGIvQ2hhbmdlTG9nLmQvYnVnZml4X1BSMzI5NC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlYTc1ZQotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy5kL2J1Z2ZpeF9QUjMyOTQudHh0CkBAIC0wLDAgKzEsNCBAQAorQnVnZml4CisgICAqIEZpeCBidWlsZCBmYWlsdXJlIGluIGNvbmZpZ3VyYXRpb25zIHdoZXJlIE1CRURUTFNfVVNFX1BTQV9DUllQVE8gaXMKKyAgICAgZW5hYmxlZCBidXQgRUNEU0EgaXMgZGlzYWJsZWQuIENvbnRyaWJ1dGVkIGJ5IGpkdXJrb3AuIEZpeGVzICMzMjk0LgorCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9idWdmaXhfUFIzNDUyLnR4dCBiL0NoYW5nZUxvZy5kL2J1Z2ZpeF9QUjM0NTIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2Y1OTNlLi4wMDAwMDAwCi0tLSBhL0NoYW5nZUxvZy5kL2J1Z2ZpeF9QUjM0NTIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1CdWdmaXgKLSAgICogVXNlIGxvY2FsIGxhYmVscyBpbiBtYmVkdGxzX3BhZGxvY2tfaGFzX3N1cHBvcnQoKSB0byBmaXggYW4gaW52YWxpZCBzeW1ib2wgcmVkZWZpbml0aW9uIGlmIHRoZSBmdW5jdGlvbiBpcyBpbmxpbmVkLgotICAgICBSZXBvcnRlZCBpbiAjMzQ1MSBhbmQgZml4IGNvbnRyaWJ1dGVkIGluICMzNDUyIGJ5IG9raG93YW5nLgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvYnVpbGRfd2l0aF9vbmx5X21vbnRnb21lcnlfY3VydmVzLnR4dCBiL0NoYW5nZUxvZy5kL2J1aWxkX3dpdGhfb25seV9tb250Z29tZXJ5X2N1cnZlcy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZWM3YzUuLjAwMDAwMDAKLS0tIGEvQ2hhbmdlTG9nLmQvYnVpbGRfd2l0aF9vbmx5X21vbnRnb21lcnlfY3VydmVzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotQnVnZml4Ci0gICAqIEZpeCBidWlsZCBlcnJvcnMgd2hlbiB0aGUgb25seSBlbmFibGVkIGVsbGlwdGljIGN1cnZlcyBhcmUgTW9udGdvbWVyeQotICAgICBjdXJ2ZXMuIFJhaXNlZCBieSBzaWducGFpbnRlciBpbiAjOTQxIGFuZCBieSBUYWlraS1TYW4gaW4gIzE0MTIuIFRoaXMKLSAgICAgYWxzbyBmaXhlcyBtaXNzaW5nIGRlY2xhcmF0aW9ucyByZXBvcnRlZCBieSBTdGV2ZW4gQ29vcmVtYW4gaW4gIzExNDcuCi0gICAqIEZpeCBzZWxmLXRlc3QgZmFpbHVyZSB3aGVuIHRoZSBvbmx5IGVuYWJsZWQgc2hvcnQgV2VpZXJzdHJhc3MgZWxsaXB0aWMKLSAgICAgY3VydmUgaXMgc2VjcDE5MmsxLiBGaXhlcyAjMjAxNy4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL2NtYWtlLWluc3RhbGwudHh0IGIvQ2hhbmdlTG9nLmQvY21ha2UtaW5zdGFsbC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiY2VjNGEuLjAwMDAwMDAKLS0tIGEvQ2hhbmdlTG9nLmQvY21ha2UtaW5zdGFsbC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLUJ1Z2ZpeAotICAgKiBMaWJyYXJ5IGZpbGVzIGluc3RhbGxlZCBhZnRlciBhIENNYWtlIGJ1aWxkIG5vIGxvbmdlciBoYXZlIGV4ZWN1dGUKLSAgICAgcGVybWlzc2lvbi4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL2NvcHlyaWdodC50eHQgYi9DaGFuZ2VMb2cuZC9jb3B5cmlnaHQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWZjNmJjLi4wMDAwMDAwCi0tLSBhL0NoYW5nZUxvZy5kL2NvcHlyaWdodC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLUNoYW5nZXMKLSAgICogVXBkYXRlIGNvcHlyaWdodCBub3RpY2VzIHRvIHVzZSBMaW51eCBGb3VuZGF0aW9uIGd1aWRhbmNlLiBBcyBhIHJlc3VsdCwKLSAgICAgdGhlIGNvcHlyaWdodCBvZiBjb250cmlidXRvcnMgb3RoZXIgdGhhbiBBcm0gaXMgbm93IGFja25vd2xlZGdlZCwgYW5kIHRoZQotICAgICB5ZWFycyBvZiBwdWJsaXNoaW5nIGFyZSBubyBsb25nZXIgdHJhY2tlZCBpbiB0aGUgc291cmNlIGZpbGVzLiBUaGlzIGFsc28KLSAgICAgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgdGhlIGxpbmVzIGRlY2xhcmluZyB0aGUgZmlsZXMgdG8gYmUgcGFydCBvZgotICAgICBNYmVkVExTLiBGaXhlcyAjMzQ1Ny4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL2NybC1yZXZvY2F0aW9uRGF0ZS50eHQgYi9DaGFuZ2VMb2cuZC9jcmwtcmV2b2NhdGlvbkRhdGUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGFkNTMyLi4wMDAwMDAwCi0tLSBhL0NoYW5nZUxvZy5kL2NybC1yZXZvY2F0aW9uRGF0ZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1TZWN1cml0eQotICAgKiBXaGVuIGNoZWNraW5nIFguNTA5IENSTHMsIGEgY2VydGlmaWNhdGUgd2FzIG9ubHkgY29uc2lkZXJlZCBhcyByZXZva2VkIGlmCi0gICAgIGl0cyByZXZvY2F0aW9uRGF0ZSB3YXMgaW4gdGhlIHBhc3QgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbCBjbG9jayBpZgotICAgICBhdmFpbGFibGUuIEluIHBhcnRpY3VsYXIsIG9uIGJ1aWxkcyB3aXRob3V0IE1CRURUTFNfSEFWRV9USU1FX0RBVEUsCi0gICAgIGNlcnRpZmljYXRlcyB3ZXJlIG5ldmVyIGNvbnNpZGVyZWQgYXMgcmV2b2tlZC4gT24gYnVpbGRzIHdpdGgKLSAgICAgTUJFRFRMU19IQVZFX1RJTUVfREFURSwgYW4gYXR0YWNrZXIgYWJsZSB0byBjb250cm9sIHRoZSBsb2NhbCBjbG9jayAoZm9yCi0gICAgIGV4YW1wbGUsIGFuIHVudHJ1c3RlZCBPUyBhdHRhY2tpbmcgYSBzZWN1cmUgZW5jbGF2ZSkgY291bGQgcHJldmVudAotICAgICByZXZvY2F0aW9uIG9mIGNlcnRpZmljYXRlcyB2aWEgQ1JMcy4gRml4ZWQgYnkgbm8gbG9uZ2VyIGNoZWNraW5nIHRoZQotICAgICByZXZvY2F0aW9uRGF0ZSBmaWVsZCwgaW4gYWNjb3JkYW5jZSB3aXRoIFJGQyA1MjgwLiBSZXBvcnRlZCBieQotICAgICB5dWVtb25hbmdvbmcgaW4gIzMzNDAuIFJlcG9ydGVkIGluZGVwZW5kZW50bHkgYW5kIGZpeGVkIGJ5Ci0gICAgIFJhb3VsIFN0cmFja3ggYW5kIEpldGhybyBCZWVrbWFuIGluICMzNDMzLgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvZG9fbm90X3BlcnNpc3Rfdm9sYXRpbGVfZXh0ZXJuYWxfa2V5cy50eHQgYi9DaGFuZ2VMb2cuZC9kb19ub3RfcGVyc2lzdF92b2xhdGlsZV9leHRlcm5hbF9rZXlzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI3MjkyYy4uMDAwMDAwMAotLS0gYS9DaGFuZ2VMb2cuZC9kb19ub3RfcGVyc2lzdF92b2xhdGlsZV9leHRlcm5hbF9rZXlzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotRGVmYXVsdCBiZWhhdmlvciBjaGFuZ2VzCi0gICAqIFN0b3Agc3RvcmluZyBwZXJzaXN0ZW50IGluZm9ybWF0aW9uIGFib3V0IGV4dGVybmFsbHkgc3RvcmVkIGtleXMgY3JlYXRlZAotICAgICB0aHJvdWdoIFBTQSBDcnlwdG8gd2l0aCBhIHZvbGF0aWxlIGxpZmV0aW1lLiBSZXBvcnRlZCBpbiAjMzI4OCBhbmQKLSAgICAgY29udHJpYnV0ZWQgYnkgU3RldmVuIENvb3JlbWFuIGluICMzMzgyLgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvZTJrLXN1cHBvcnQudHh0IGIvQ2hhbmdlTG9nLmQvZTJrLXN1cHBvcnQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjNiMTg4Li4wMDAwMDAwCi0tLSBhL0NoYW5nZUxvZy5kL2Uyay1zdXBwb3J0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotRmVhdHVyZXMKLSAgICogU3VwcG9ydCBidWlsZGluZyBvbiBlMmsgKEVsYnJ1cykgYXJjaGl0ZWN0dXJlOiBjb3JyZWN0bHkgZW5hYmxlCi0gICAgIC1XZm9ybWF0LXNpZ25lZG5lc3MsIGFuZCBmaXggdGhlIGNvZGUgdGhhdCBjYXVzZXMgc2lnbmVkLW9uZS1iaXQtZmllbGQKLSAgICAgYW5kIHNpZ24tY29tcGFyZSB3YXJuaW5ncy4gQ29udHJpYnV0ZWQgYnkgbWFraXNlLWhvbXVyYSAoSWdvciBNb2xjaGFub3YpCi0gICAgIDxha2VtaV9ob211cmFAa3VyaXNhLmNoPi4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL2VjcF9jdXJ2ZV9saXN0LnR4dCBiL0NoYW5nZUxvZy5kL2VjcF9jdXJ2ZV9saXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTc0NWQzCi0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvZWNwX2N1cnZlX2xpc3QudHh0CkBAIC0wLDAgKzEsNSBAQAorQnVnZml4CisgICAqIG1iZWR0bHNfZWNwX2N1cnZlX2xpc3QoKSBub3cgbGlzdHMgQ3VydmUyNTUxOSBhbmQgQ3VydmU0NDggdW5kZXIgdGhlIG5hbWVzCisgICAgICJ4MjU1MTkiIGFuZCAieDQ0OCIuIFRoZXNlIGN1cnZlcyBzdXBwb3J0IEVDREggYnV0IG5vdCBFQ0RTQS4gSWYgeW91IG5lZWQKKyAgICAgb25seSB0aGUgY3VydmVzIHRoYXQgc3VwcG9ydCBFQ0RTQSwgZmlsdGVyIHRoZSBsaXN0IHdpdGgKKyAgICAgbWJlZHRsc19lY2RzYV9jYW5fZG8oKS4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL2ZlYXR1cmUtZHRscy1zcnRwLnR4dCBiL0NoYW5nZUxvZy5kL2ZlYXR1cmUtZHRscy1zcnRwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjkxODZiCi0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvZmVhdHVyZS1kdGxzLXNydHAudHh0CkBAIC0wLDAgKzEsMiBAQAorRmVhdHVyZXMKKyogQWRkIHN1cHBvcnQgZm9yIERUTFMtU1JUUCBhcyBkZWZpbmVkIGluIFJGQyA1NzY0LiBDb250cmlidXRlZCBieSBKb2hhbiBQYXNjYWwsIGltcHJvdmVkIGJ5IFJvbiBFbGRvci4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL2ZpeC1yc2EtYmxpbmRpbmcudHh0IGIvQ2hhbmdlTG9nLmQvZml4LXJzYS1ibGluZGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEzNTcyYwotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy5kL2ZpeC1yc2EtYmxpbmRpbmcudHh0CkBAIC0wLDAgKzEsNiBAQAorQnVnZml4CisgICAqIEZpeCByc2FfcHJlcGFyZV9ibGluZGluZygpIHRvIHJldHJ5IHdoZW4gdGhlIGJsaW5kaW5nIHZhbHVlIGlzIG5vdAorICAgICBpbnZlcnRpYmxlIChtb2QgTiksIGluc3RlYWQgb2YgcmV0dXJuaW5nIE1CRURUTFNfRVJSX1JTQV9STkdfRkFJTEVELiBUaGlzCisgICAgIGFkZHJlc3NlcyBhIHJlZ3Jlc3Npb24gYnV0IGlzIHJhcmUgaW4gcHJhY3RpY2UgKGFwcHJveC4gMSBpbiAyL3NxcnQoTikpLgorICAgICBGb3VuZCBieSBTeW5vcHN5cyBDb3Zlcml0eSwgZml4IGNvbnRyaWJ1dGVkIGJ5IFBldGVyIEtvbGJ1cyAoR2FybWluKS4KKyAgICAgRml4ZXMgIzM2NDcuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9maXhfY2NtX2FkZF9sZW5ndGhfY2hlY2sudHh0IGIvQ2hhbmdlTG9nLmQvZml4X2NjbV9hZGRfbGVuZ3RoX2NoZWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTkzOTlmCi0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvZml4X2NjbV9hZGRfbGVuZ3RoX2NoZWNrLnR4dApAQCAtMCwwICsxLDUgQEAKK0J1Z2ZpeAorICAgKiBGaXggYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiB0aGUgYWRkaXRpb25hbCBkYXRhIGxlbmd0aCBjaGVjayBmb3IKKyAgICAgQ0NNLCB3aGljaCBhbGxvd2VkIGVuY3J5cHRpb24gd2l0aCBhIG5vbi1zdGFuZGFyZCBsZW5ndGggZmllbGQuCisgICAgIEZpeGVzICMzNzE5LgorCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9mb3JtYXQtc2lnbmVkbmVzcy50eHQgYi9DaGFuZ2VMb2cuZC9mb3JtYXQtc2lnbmVkbmVzcy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMWVlNGIuLjAwMDAwMDAKLS0tIGEvQ2hhbmdlTG9nLmQvZm9ybWF0LXNpZ25lZG5lc3MudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1DaGFuZ2VzCi0gICAqIE9ubHkgcGFzcyAtV2Zvcm1hdC1zaWduZWRuZXNzIHRvIHZlcnNpb25zIG9mIEdDQyB0aGF0IHN1cHBvcnQgaXQuIFJlcG9ydGVkCi0gICAgIGluICMzNDc4IGFuZCBmaXggY29udHJpYnV0ZWQgaW4gIzM0NzkgYnkgb2tob3dhbmcuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9tZF9zZXR1cC1sZWFrLnR4dCBiL0NoYW5nZUxvZy5kL21kX3NldHVwLWxlYWsudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTExZDhlLi4wMDAwMDAwCi0tLSBhL0NoYW5nZUxvZy5kL21kX3NldHVwLWxlYWsudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1CdWdmaXgKLSAgICogRml4IGEgbWVtb3J5IGxlYWsgaW4gbWJlZHRsc19tZF9zZXR1cCgpIHdoZW4gdXNpbmcgSE1BQyB1bmRlciBsb3cgbWVtb3J5Ci0gICAgIGNvbmRpdGlvbnMuIFJlcG9ydGVkIGFuZCBmaXggc3VnZ2VzdGVkIGJ5IEd1aWRvIFZyYW5rZW4gaW4gIzM0ODYuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9taW5pbXVtX2NtYWtlX3ZlcnNpb25fUFIzODAyLnR4dCBiL0NoYW5nZUxvZy5kL21pbmltdW1fY21ha2VfdmVyc2lvbl9QUjM4MDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0OWY5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2cuZC9taW5pbXVtX2NtYWtlX3ZlcnNpb25fUFIzODAyLnR4dApAQCAtMCwwICsxLDMgQEAKK1JlcXVpcmVtZW50IGNoYW5nZXMKKyogVXBkYXRlIHRoZSBtaW5pbXVtIHJlcXVpcmVkIENNYWtlIHZlcnNpb24gdG8gMi44LjEyLgorKiBUaGlzIHNpbGVuY2VzIGEgd2FybmluZyBvbiBDTWFrZSAzLjE5LjAuICMzODAxCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9uZXRic2QtcmFuZC1hcmM0cmFuZG9tX2J1Zi50eHQgYi9DaGFuZ2VMb2cuZC9uZXRic2QtcmFuZC1hcmM0cmFuZG9tX2J1Zi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MzlkMWYuLjAwMDAwMDAKLS0tIGEvQ2hhbmdlTG9nLmQvbmV0YnNkLXJhbmQtYXJjNHJhbmRvbV9idWYudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1CdWdmaXgKLSAgICogVXNlIGFyYzRyYW5kb21fYnVmIG9uIE5ldEJTRCBpbnN0ZWFkIG9mIHJhbmQgaW1wbGVtZW50YXRpb24gd2l0aCBjeWNsaWNhbAotICAgICBsb3dlciBiaXRzLiBGaXggY29udHJpYnV0ZWQgaW4gIzM1NDAuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9wc2FfY3VydmUyNTUxOV9rZXlfc3VwcG9ydC50eHQgYi9DaGFuZ2VMb2cuZC9wc2FfY3VydmUyNTUxOV9rZXlfc3VwcG9ydC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NGNhMGYuLjAwMDAwMDAKLS0tIGEvQ2hhbmdlTG9nLmQvcHNhX2N1cnZlMjU1MTlfa2V5X3N1cHBvcnQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1GZWF0dXJlcwotICAgKiBUaGUgbmV3IGZ1bmN0aW9uIG1iZWR0bHNfZWNwX3dyaXRlX2tleSgpIGV4cG9ydHMgcHJpdmF0ZSBFQ0Mga2V5cyBiYWNrIHRvCi0gICAgIGEgYnl0ZSBidWZmZXIuIEl0IGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBleGlzdGluZyBtYmVkdGxzX2VjcF9yZWFkX2tleSgpLgotCi1CdWdmaXgKLSAgICogRml4IHRoZSBlbmRpYW5uZXNzIG9mIEN1cnZlMjU1MTkga2V5cyBpbXBvcnRlZC9leHBvcnRlZCB0aHJvdWdoIHRoZSBQU0EKLSAgICAgQVBJcy4gcHNhX2ltcG9ydF9rZXkgYW5kIHBzYV9leHBvcnRfa2V5IHdpbGwgbm93IGNvcnJlY3RseSBleHBlY3Qvb3V0cHV0Ci0gICAgIE1vbnRnb21lcnkga2V5cyBpbiBsaXR0bGUtZW5kaWFuIGFzIGRlZmluZWQgYnkgUkZDNzc0OC4gQ29udHJpYnV0ZWQgYnkKLSAgICAgU3RldmVuIENvb3JlbWFuIGluICMzNDI1LgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvcHNhX2N1cnZlMjU1MTlfcHVibGljX2tleV9pbXBvcnQudHh0IGIvQ2hhbmdlTG9nLmQvcHNhX2N1cnZlMjU1MTlfcHVibGljX2tleV9pbXBvcnQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWExMWUyLi4wMDAwMDAwCi0tLSBhL0NoYW5nZUxvZy5kL3BzYV9jdXJ2ZTI1NTE5X3B1YmxpY19rZXlfaW1wb3J0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotQnVnZml4Ci0gICAqIFBTQSBrZXkgaW1wb3J0IHdpbGwgbm93IGNvcnJlY3RseSBpbXBvcnQgYSBDdXJ2ZTI1NTE5L0N1cnZlNDQ4IHB1YmxpYyBrZXkKLSAgICAgaW5zdGVhZCBvZiBlcnJvcmluZyBvdXQuIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlbiBDb29yZW1hbiBpbiAjMzQ5Mi4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL3BzYV9lY2NfZGhfbWFjcm9zLnR4dCBiL0NoYW5nZUxvZy5kL3BzYV9lY2NfZGhfbWFjcm9zLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMzZjNkOC4uMDAwMDAwMAotLS0gYS9DaGFuZ2VMb2cuZC9wc2FfZWNjX2RoX21hY3Jvcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLUFQSSBjaGFuZ2VzCi0gICAqIEluIHRoZSBQU0EgQVBJLCByZW5hbWUgdGhlIHR5cGVzIG9mIGVsbGlwdGljIGN1cnZlIGFuZCBEaWZmaWUtSGVsbG1hbiBncm91cCBmYW1pbGllcyB0bwotICAgICBwc2FfZWNjX2ZhbWlseV90IGFuZCBwc2FfZGhfZmFtaWx5X3QsIGluIGxpbmUgd2l0aCB0aGUgUFNBIENyeXB0byBBUEkgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDEuMC4wLgotICAgICBSZW5hbWUgYXNzb2NpYXRlZCBtYWNyb3MgYXMgd2VsbDoKLSAgICAgUFNBX0VDQ19DVVJWRV94eHggcmVuYW1lZCB0byBQU0FfRUNDX0ZBTUlMWV94eHgKLSAgICAgUFNBX0RIX0dST1VQX3h4eCByZW5hbWVkIHRvIFBTQV9ESF9GQU1JTFlfeHh4Ci0gICAgIFBTQV9LRVlfVFlQRV9HRVRfQ1VSVkUgcmVuYW1lZCB0byB0byBQU0FfS0VZX1RZUEVfRUNDX0dFVF9GQU1JTFkKLSAgICAgUFNBX0tFWV9UWVBFX0dFVF9HUk9VUCByZW5hbWVkIHRvIFBTQV9LRVlfVFlQRV9ESF9HRVRfRkFNSUxZCi0KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL3BzYV9lcnJvcl9pbnZhbGlkX2FyZ3VtZW50X2Zvcl9pbnZhbGlkX2NpcGhlcl9pbnB1dF9zaXplcy50eHQgYi9DaGFuZ2VMb2cuZC9wc2FfZXJyb3JfaW52YWxpZF9hcmd1bWVudF9mb3JfaW52YWxpZF9jaXBoZXJfaW5wdXRfc2l6ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YzM2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2cuZC9wc2FfZXJyb3JfaW52YWxpZF9hcmd1bWVudF9mb3JfaW52YWxpZF9jaXBoZXJfaW5wdXRfc2l6ZXMudHh0CkBAIC0wLDAgKzEsNCBAQAorQnVnZml4CisgICAqIENvbnNpc3RlbnRseSByZXR1cm4gUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgb24gaW52YWxpZCBjaXBoZXIgaW5wdXQKKyAgICAgc2l6ZXMgKGluc3RlYWQgb2YgUFNBX0VSUk9SX0JBRF9TVEFURSBpbiBzb21lIGNhc2VzKSB0byBtYWtlIHRoZQorICAgICBwc2FfY2lwaGVyXyogZnVuY3Rpb25zIGNvbXBsaWFudCB3aXRoIHRoZSBQU0EgQ3J5cHRvIEFQSSBzcGVjaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvcHNhX2dlbmVyYXRlX2tleS1jdXJ2ZTI1NTE5LnR4dCBiL0NoYW5nZUxvZy5kL3BzYV9nZW5lcmF0ZV9rZXktY3VydmUyNTUxOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRiNmZjZgotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy5kL3BzYV9nZW5lcmF0ZV9rZXktY3VydmUyNTUxOS50eHQKQEAgLTAsMCArMSwzIEBACitCdWdmaXgKKyAgICogRml4IHBzYV9nZW5lcmF0ZV9rZXkoKSByZXR1cm5pbmcgYW4gZXJyb3Igd2hlbiBhc2tlZCB0byBnZW5lcmF0ZQorICAgICBhbiBFQ0Mga2V5IHBhaXIgb24gQ3VydmUyNTUxOSBvciBzZWNwMjQ0azEuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9wd19wcm90ZWN0ZWRfa2V5X2ZpbGVfc3NsX2NsaXNydjIudHh0IGIvQ2hhbmdlTG9nLmQvcHdfcHJvdGVjdGVkX2tleV9maWxlX3NzbF9jbGlzcnYyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQxYWQzMC4uMDAwMDAwMAotLS0gYS9DaGFuZ2VMb2cuZC9wd19wcm90ZWN0ZWRfa2V5X2ZpbGVfc3NsX2NsaXNydjIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1DaGFuZ2VzCi0gICAqIEFkZCB0aGUgY29tbWFuZCBsaW5lIHBhcmFtZXRlciBrZXlfcHdkIHRvIHRoZSBzc2xfY2xpZW50MiBhbmQgc3NsX3NlcnZlcjIKLSAgICAgZXhhbXBsZSBhcHBsaWNhdGlvbnMgd2hpY2ggYWxsb3dzIHRvIHByb3ZpZGUgYSBwYXNzd29yZCBmb3IgdGhlIGtleSBmaWxlCi0gICAgIHNwZWNpZmllZCB0aHJvdWdoIHRoZSBleGlzdGluZyBrZXlfZmlsZSBhcmd1bWVudC4gVGhpcyBhbGxvd3MgdGhlIHVzZSBvZgotICAgICB0aGVzZSBhcHBsaWNhdGlvbnMgd2l0aCBwYXNzd29yZC1wcm90ZWN0ZWQga2V5IGZpbGVzLiBBbmFsb2dvdXNseSBidXQgZm9yCi0gICAgIHNzbF9zZXJ2ZXIyIG9ubHksIGFkZCB0aGUgY29tbWFuZCBsaW5lIHBhcmFtZXRlciBrZXlfcHdkMiB3aGljaCBhbGxvd3MgdG8KLSAgICAgc2V0IGEgcGFzc3dvcmQgZm9yIHRoZSBrZXkgZmlsZSBwcm92aWRlZCB0aHJvdWdoIHRoZSBleGlzdGluZyBrZXlfZmlsZTIKLSAgICAgYXJndW1lbnQuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC9zdGRvdXQtbWFjcm8udHh0IGIvQ2hhbmdlTG9nLmQvc3Rkb3V0LW1hY3JvLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ1NjI0MC4uMDAwMDAwMAotLS0gYS9DaGFuZ2VMb2cuZC9zdGRvdXQtbWFjcm8udHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1CdWdmaXgKLSAgICogRml4IGJ1ZyBpbiByZWRpcmVjdGlvbiBvZiB1bml0IHRlc3Qgb3V0cHV0cyBvbiBwbGF0Zm9ybXMgd2hlcmUgc3Rkb3V0IGlzCi0gICAgIGRlZmluZWQgYXMgYSBtYWNyby4gRmlyc3QgcmVwb3J0ZWQgaW4gIzIzMTEgYW5kIGZpeCBjb250cmlidXRlZCBpbiAjMzUyOC4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL3N1cHBvcnQtZWNkaC1rZGYtd2l0aC1lY2RoLWtleS50eHQgYi9DaGFuZ2VMb2cuZC9zdXBwb3J0LWVjZGgta2RmLXdpdGgtZWNkaC1rZXkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NjBkYzMKLS0tIC9kZXYvbnVsbAorKysgYi9DaGFuZ2VMb2cuZC9zdXBwb3J0LWVjZGgta2RmLXdpdGgtZWNkaC1rZXkudHh0CkBAIC0wLDAgKzEsNiBAQAorRmVhdHVyZXMKKyAgICogSW4gUFNBLCBhbGxvdyB1c2luZyBhIGtleSBkZWNsYXJlZCB3aXRoIGEgYmFzZSBrZXkgYWdyZWVtZW50IGFsZ29yaXRobQorICAgICBpbiBjb21iaW5lZCBrZXkgYWdyZWVtZW50IGFuZCBkZXJpdmF0aW9uIG9wZXJhdGlvbnMsIGFzIGxvbmcgYXMgdGhlIGtleQorICAgICBhZ3JlZW1lbnQgYWxnb3JpdGhtIGluIHVzZSBtYXRjaGVzIHRoZSBhbGdvcml0aG0gdGhlIGtleSB3YXMgZGVjbGFyZWQgd2l0aC4KKyAgICAgVGhpcyBpcyBjdXJyZW50bHkgbm9uLXN0YW5kYXJkIGJlaGF2aW91ciwgYnV0IGV4cGVjdGVkIHRvIG1ha2UgaXQgaW50byBhCisgICAgIGZ1dHVyZSByZXZpc2lvbiBvZiB0aGUgUFNBIENyeXB0byBzdGFuZGFyZC4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5kL3N1cHBvcnQta2V5LWFncmVlbWVudC1hbmQtZGVyaXZhdGlvbi1vdXRwdXQtYXMta2V5LnR4dCBiL0NoYW5nZUxvZy5kL3N1cHBvcnQta2V5LWFncmVlbWVudC1hbmQtZGVyaXZhdGlvbi1vdXRwdXQtYXMta2V5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjYxNDgxCi0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvc3VwcG9ydC1rZXktYWdyZWVtZW50LWFuZC1kZXJpdmF0aW9uLW91dHB1dC1hcy1rZXkudHh0CkBAIC0wLDAgKzEsNCBAQAorQnVnZml4CisgICAqIEZpeCBwc2Ffa2V5X2Rlcml2YXRpb25fb3V0cHV0X2tleSgpIHRvIGFsbG93IHRoZSBvdXRwdXQgb2YgYSBjb21iaW5lZCBrZXkKKyAgICAgYWdyZWVtZW50IGFuZCBzdWJzZXF1ZW50IGtleSBkZXJpdmF0aW9uIG9wZXJhdGlvbiB0byBiZSB1c2VkIGFzIGEga2V5CisgICAgIGluc2lkZSBvZiB0aGUgUFNBIENyeXB0byBjb3JlLgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQvc3lzdGVtYXRpY2FsbHlfc3RvcmVfYml0X3NpemVfMzc0MC50eHQgYi9DaGFuZ2VMb2cuZC9zeXN0ZW1hdGljYWxseV9zdG9yZV9iaXRfc2l6ZV8zNzQwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTYzYmJjCi0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLmQvc3lzdGVtYXRpY2FsbHlfc3RvcmVfYml0X3NpemVfMzc0MC50eHQKQEAgLTAsMCArMSw1IEBACitDaGFuZ2VzCisgICAqIFRoZSBQU0EgcGVyc2lzdGVudCBzdG9yYWdlIGZvcm1hdCBpcyB1cGRhdGVkIHRvIGFsd2F5cyBzdG9yZSB0aGUga2V5IGJpdHMKKyAgICAgYXR0cmlidXRlLiBObyBhdXRvbWF0aWMgdXBncmFkZSBwYXRoIGlzIHByb3ZpZGVkLiBQcmV2aW91c2x5IHN0b3JlZCBrZXlzCisgICAgIG11c3QgYmUgZXJhc2VkLCBvciBtYW51YWxseSB1cGdyYWRlZCBiYXNlZCBvbiB0aGUga2V5IHN0b3JhZ2UgZm9ybWF0CisgICAgIHNwZWNpZmljYXRpb24gKGRvY3MvYXJjaGl0ZWN0dXJlL21iZWQtY3J5cHRvLXN0b3JhZ2Utc3BlY2lmaWNhdGlvbi5tZCkuICMzNzQwCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC91bmRlZl9hc3NlcnRfYmVmb3JlX2RlZmluaW5nX2l0LnR4dCBiL0NoYW5nZUxvZy5kL3VuZGVmX2Fzc2VydF9iZWZvcmVfZGVmaW5pbmdfaXQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGEyMDE4Li4wMDAwMDAwCi0tLSBhL0NoYW5nZUxvZy5kL3VuZGVmX2Fzc2VydF9iZWZvcmVfZGVmaW5pbmdfaXQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1DaGFuZ2VzCi0gICAqIFVuZGVmaW5lIHRoZSBBU1NFUlQgbWFjcm8gYmVmb3JlIGRlZmluaW5nIGl0IGxvY2FsbHksIGluIGNhc2UgaXQgaXMgZGVmaW5lZAotICAgICBpbiBhIHBsYXRmb3JtIGhlYWRlci4gQ29udHJpYnV0ZWQgYnkgQWJkZWxhdGlmIEd1ZXR0b3VjaGUgaW4gIzM1NTcuCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuZC94NTA5LXZlcmlmeS1ub24tZG5zLXNhbi50eHQgYi9DaGFuZ2VMb2cuZC94NTA5LXZlcmlmeS1ub24tZG5zLXNhbi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZDgxYjMuLjAwMDAwMDAKLS0tIGEvQ2hhbmdlTG9nLmQveDUwOS12ZXJpZnktbm9uLWRucy1zYW4udHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotU2VjdXJpdHkKLSAgICogRml4IGEgdnVsbmVyYWJpbGl0eSBpbiB0aGUgdmVyaWZpY2F0aW9uIG9mIFguNTA5IGNlcnRpZmljYXRlcyB3aGVuCi0gICAgIG1hdGNoaW5nIHRoZSBleHBlY3RlZCBjb21tb24gbmFtZSAodGhlIGNuIGFyZ3VtZW50IG9mCi0gICAgIG1iZWR0bHNfeDUwOV9jcnRfdmVyaWZ5KCkpIHdpdGggdGhlIGFjdHVhbCBjZXJ0aWZpY2F0ZSBuYW1lOiB3aGVuIHRoZQotICAgICBzdWJqZWNBbHROYW1lIGV4dGVuc2lvbiBpcyBwcmVzZW50LCB0aGUgZXhwZWN0ZWQgbmFtZSB3YXMgY29tcGFyZWQgdG8gYW55Ci0gICAgIG5hbWUgaW4gdGhhdCBleHRlbnNpb24gcmVnYXJkbGVzcyBvZiBpdHMgdHlwZS4gVGhpcyBtZWFucyB0aGF0IGFuCi0gICAgIGF0dGFja2VyIGNvdWxkIGZvciBleGFtcGxlIGltcGVyc29uYXRlIGEgNC1ieXRlcyBvciAxNi1ieXRlIGRvbWFpbiBieQotICAgICBnZXR0aW5nIGEgY2VydGlmaWNhdGUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIElQdjQgb3IgSVB2NiAodGhpcyB3b3VsZAotICAgICByZXF1aXJlIHRoZSBhdHRhY2tlciB0byBjb250cm9sIHRoYXQgSVAgYWRkcmVzcywgdGhvdWdoKS4gU2ltaWxhciBhdHRhY2tzCi0gICAgIHVzaW5nIG90aGVyIHN1YmplY3RBbHROYW1lIG5hbWUgdHlwZXMgbWlnaHQgYmUgcG9zc2libGUuIEZvdW5kIGFuZAotICAgICByZXBvcnRlZCBieSBrRllhdGVrIGluICMzNDk4LgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLmQveDUwOXdyaXRlX2Nzcl9oZWFwX2FsbG9jLnR4dCBiL0NoYW5nZUxvZy5kL3g1MDl3cml0ZV9jc3JfaGVhcF9hbGxvYy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiY2UyMGMuLjAwMDAwMDAKLS0tIGEvQ2hhbmdlTG9nLmQveDUwOXdyaXRlX2Nzcl9oZWFwX2FsbG9jLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotQ2hhbmdlcwotICAgKiBSZWR1Y2UgdGhlIHN0YWNrIGNvbnN1bXB0aW9uIG9mIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9kZXIoKSB3aGljaAotICAgICBwcmV2aW91c2x5IGNvdWxkIGxlYWQgdG8gc3RhY2sgb3ZlcmZsb3cgb24gY29uc3RyYWluZWQgZGV2aWNlcy4KLSAgICAgQ29udHJpYnV0ZWQgYnkgRG9ydSBHdWNlYSBhbmQgU2ltb24gTGVldCBpbiAjMzQ2NC4KZGlmZiAtLWdpdCBhL2NvbmZpZ3MvY29uZmlnLXBzYS1jcnlwdG8uaCBiL2NvbmZpZ3MvY29uZmlnLXBzYS1jcnlwdG8uaAppbmRleCA3MDU2M2FlLi5iOThmYzljIDEwMDY0NAotLS0gYS9jb25maWdzL2NvbmZpZy1wc2EtY3J5cHRvLmgKKysrIGIvY29uZmlncy9jb25maWctcHNhLWNyeXB0by5oCkBAIC0xMTQ0LDIwICsxMTQ0LDIwIEBACiAgKi8KIC8vI2RlZmluZSBNQkVEVExTX0VOVFJPUFlfTlZfU0VFRAogCi0vKiBNQkVEVExTX1BTQV9DUllQVE9fS0VZX0ZJTEVfSURfRU5DT0RFU19PV05FUgorLyogTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSCiAgKgotICogSW4gUFNBIGtleSBzdG9yYWdlLCBlbmNvZGUgdGhlIG93bmVyIG9mIHRoZSBrZXkuCisgKiBFbmFibGUga2V5IGlkZW50aWZpZXJzIHRoYXQgZW5jb2RlIGEga2V5IG93bmVyIGlkZW50aWZpZXIuCiAgKgogICogVGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwgd2hlbiBidWlsZGluZyB0aGUgbGlicmFyeSBhcyBwYXJ0IG9mIGEKLSAqIG11bHRpLWNsaWVudCBzZXJ2aWNlLiBXaGVuIHlvdSBhY3RpdmF0ZSB0aGlzIG9wdGlvbiwgeW91IG11c3QgcHJvdmlkZQotICogYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHR5cGUgcHNhX2tleV9vd25lcl9pZF90IGFuZCBhIHRyYW5zbGF0aW9uCi0gKiBmcm9tIHBzYV9rZXlfZmlsZV9pZF90IHRvIGZpbGUgbmFtZSBpbiBhbGwgdGhlIHN0b3JhZ2UgYmFja2VuZHMgdGhhdAorICogbXVsdGktY2xpZW50IHNlcnZpY2UuIFdoZW4geW91IGFjdGl2YXRlIHRoaXMgb3B0aW9uLCB5b3UgbXVzdCBwcm92aWRlIGFuCisgKiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHlwZSBtYmVkdGxzX2tleV9vd25lcl9pZF90IGFuZCBhIHRyYW5zbGF0aW9uIGZyb20KKyAqIG1iZWR0bHNfc3ZjX2tleV9pZF90IHRvIGZpbGUgbmFtZSBpbiBhbGwgdGhlIHN0b3JhZ2UgYmFja2VuZHMgdGhhdCB5b3UKICAqIHlvdSB3aXNoIHRvIHN1cHBvcnQuCiAgKgogICogTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGlzIG1lYW50IGZvciBpbnRlcm5hbCB1c2Ugb25seSBhbmQgbWF5IGJlIHJlbW92ZWQKICAqIHdpdGhvdXQgbm90aWNlLgogICovCi0vLyNkZWZpbmUgTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9GSUxFX0lEX0VOQ09ERVNfT1dORVIKKy8vI2RlZmluZSBNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIKIAogLyoqCiAgKiBcZGVmIE1CRURUTFNfTUVNT1JZX0RFQlVHCmRpZmYgLS1naXQgYS9kb2NzL2FyY2hpdGVjdHVyZS9tYmVkLWNyeXB0by1zdG9yYWdlLXNwZWNpZmljYXRpb24ubWQgYi9kb2NzL2FyY2hpdGVjdHVyZS9tYmVkLWNyeXB0by1zdG9yYWdlLXNwZWNpZmljYXRpb24ubWQKaW5kZXggZTczMTVlYi4uOTE0YmNhMyAxMDA2NDQKLS0tIGEvZG9jcy9hcmNoaXRlY3R1cmUvbWJlZC1jcnlwdG8tc3RvcmFnZS1zcGVjaWZpY2F0aW9uLm1kCisrKyBiL2RvY3MvYXJjaGl0ZWN0dXJlL21iZWQtY3J5cHRvLXN0b3JhZ2Utc3BlY2lmaWNhdGlvbi5tZApAQCAtMTA3LDE0ICsxMDcsMTIgQEAKIAogIyMjIEtleSBuYW1lcyBmb3IgMS4wLjAKIAotSW5mb3JtYXRpb24gYWJvdXQgZWFjaCBrZXkgaXMgc3RvcmVkIGluIGEgZGVkaWNhdGVkIGZpbGUgZGVzaWduYXRlZCBieSBhIF9rZXkgZmlsZSBpZGVudGlmaWVyXyAoYHBzYV9rZXlfZmlsZV9pZF90YCkuIFRoZSBrZXkgZmlsZSBpZGVudGlmaWVyIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIDMyLWJpdCBrZXkgaWRlbnRpZmllciAoYHBzYV9rZXlfaWRfdGApIGFuZCwgaWYgYXBwbGljYWJsZSwgYW4gaWRlbnRpZmllciBvZiB0aGUgb3duZXIgb2YgdGhlIGtleS4gSW4gaW50ZWdyYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGNvbmNlcHQgb2Yga2V5IG93bmVyIChpbiBwYXJ0aWN1bGFyLCBpbiBsaWJyYXJ5IGludGVncmF0aW9ucyksIHRoZSBrZXkgZmlsZSBpZGVudGlmaWVyIGlzIGV4YWN0bHkgdGhlIGtleSBpZGVudGlmaWVyLiBXaGVuIHRoZSBsaWJyYXJ5IGlzIGludGVncmF0ZWQgaW50byBhIHNlcnZpY2UsIHRoZSBzZXJ2aWNlIGRldGVybWluZXMgdGhlIHNlbWFudGljcyBvZiB0aGUgb3duZXIgaWRlbnRpZmllci4KK0luZm9ybWF0aW9uIGFib3V0IGVhY2gga2V5IGlzIHN0b3JlZCBpbiBhIGRlZGljYXRlZCBmaWxlIGRlc2lnbmF0ZWQgYnkgdGhlIGtleSBpZGVudGlmaWVyLiBJbiBpbnRlZ3JhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gY29uY2VwdCBvZiBrZXkgb3duZXIgKGluIHBhcnRpY3VsYXIsIGluIGxpYnJhcnkgaW50ZWdyYXRpb25zKSwgdGhlIGtleSBpZGVudGlmaWVyIGlzIGV4YWN0bHkgdGhlIGtleSBpZGVudGlmaWVyIGFzIGRlZmluZWQgaW4gdGhlIFBTQSBDcnlwdG9ncmFwaHkgQVBJIHNwZWNpZmljYXRpb24gKGBwc2Ffa2V5X2lkX3RgKS4gSW4gaW50ZWdyYXRpb25zIHdoZXJlIHRoZXJlIGlzIGEgY29uY2VwdCBvZiBrZXkgb3duZXIgKGludGVncmF0aW9uIGludG8gYSBzZXJ2aWNlIGZvciBleGFtcGxlKSwgdGhlIGtleSBpZGVudGlmaWVyIGlzIG1hZGUgb2YgYW4gb3duZXIgaWRlbnRpZmllciAoaXRzIHNlbWFudGljcyBhbmQgdHlwZSBhcmUgaW50ZWdyYXRpb24gc3BlY2lmaWMpIGFuZCBvZiB0aGUga2V5IGlkZW50aWZpZXIgKGBwc2Ffa2V5X2lkX3RgKSBmcm9tIHRoZSBrZXkgb3duZXIgcG9pbnQgb2Ygdmlldy4KIAotVGhlIHdheSBpbiB3aGljaCB0aGUgZmlsZSBuYW1lIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIGtleSBmaWxlIGlkZW50aWZpZXIgZGVwZW5kcyBvbiB0aGUgc3RvcmFnZSBiYWNrZW5kLiBUaGUgY29udGVudCBvZiB0aGUgZmlsZSBpcyBkZXNjcmliZWQgW2JlbG93XSgja2V5LWZpbGUtZm9ybWF0LWZvci0xLjAuMCkuCitUaGUgd2F5IGluIHdoaWNoIHRoZSBmaWxlIG5hbWUgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUga2V5IGlkZW50aWZpZXIgZGVwZW5kcyBvbiB0aGUgc3RvcmFnZSBiYWNrZW5kLiBUaGUgY29udGVudCBvZiB0aGUgZmlsZSBpcyBkZXNjcmliZWQgW2JlbG93XSgja2V5LWZpbGUtZm9ybWF0LWZvci0xLjAuMCkuCiAKLVRoZSB2YWxpZCB2YWx1ZXMgZm9yIGEga2V5IGlkZW50aWZpZXIgYXJlIHRoZSByYW5nZSBmcm9tIDEgdG8gMHhmZmZlZmZmZi4gVGhpcyBsaW1pdGF0aW9uIG9uIHRoZSByYW5nZSBpcyBub3QgZG9jdW1lbnRlZCBpbiB1c2VyLWZhY2luZyBkb2N1bWVudGF0aW9uOiBhY2NvcmRpbmcgdG8gdGhlIHVzZXItZmFjaW5nIGRvY3VtZW50YXRpb24sIGFyYml0cmFyeSAzMi1iaXQgdmFsdWVzIGFyZSB2YWxpZC4KLQotKiBMaWJyYXJ5IGludGVncmF0aW9uOiB0aGUga2V5IGZpbGUgbmFtZSBpcyBqdXN0IHRoZSBrZXkgaWRlbnRpZmVyLiBUaGlzIGlzIGEgMzItYml0IHZhbHVlLgotKiBQU0Egc2VydmljZSBpbnRlZ3JhdGlvbjogdGhlIGtleSBmaWxlIGlkZW50aWZpZXIgaXMgYCh1aW50MzJfdClvd25lcl91aWQgPDwgMzIgfCBrZXlfaWRgIHdoZXJlIGBrZXlfaWRgIGlzIHRoZSBrZXkgaWRlbnRpZmllciBzcGVjaWZpZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGFuZCBgb3duZXJfdWlkYCAob2YgdHlwZSBgaW50MzJfdGApIGlzIHRoZSBjYWxsaW5nIHBhcnRpdGlvbiBpZGVudGlmaWVyIHByb3ZpZGVkIHRvIHRoZSBzZXJ2ZXIgYnkgdGhlIHBhcnRpdGlvbiBtYW5hZ2VyLiBUaGlzIGlzIGEgNjQtYml0IHZhbHVlLgorKiBMaWJyYXJ5IGludGVncmF0aW9uOiB0aGUga2V5IGZpbGUgbmFtZSBpcyBqdXN0IHRoZSBrZXkgaWRlbnRpZmllciBhcyBkZWZpbmVkIGluIHRoZSBQU0EgY3J5cHRvIHNwZWNpZmljYXRpb24uIFRoaXMgaXMgYSAzMi1iaXQgdmFsdWUuCisqIFBTQSBzZXJ2aWNlIGludGVncmF0aW9uOiB0aGUga2V5IGZpbGUgbmFtZSBpcyBgKHVpbnQzMl90KW93bmVyX3VpZCA8PCAzMiB8IGtleV9pZGAgd2hlcmUgYGtleV9pZGAgaXMgdGhlIGtleSBpZGVudGlmaWVyIGZyb20gdGhlIG93bmVyIHBvaW50IG9mIHZpZXcgYW5kIGBvd25lcl91aWRgIChvZiB0eXBlIGBpbnQzMl90YCkgaXMgdGhlIGNhbGxpbmcgcGFydGl0aW9uIGlkZW50aWZpZXIgcHJvdmlkZWQgdG8gdGhlIHNlcnZlciBieSB0aGUgcGFydGl0aW9uIG1hbmFnZXIuIFRoaXMgaXMgYSA2NC1iaXQgdmFsdWUuCiAKICMjIyBLZXkgZmlsZSBmb3JtYXQgZm9yIDEuMC4wCiAKQEAgLTI1Myw2ICsyNTEsNyBAQAogKiBrZXkgbWF0ZXJpYWwgbGVuZ3RoICg0IGJ5dGVzKS4KICoga2V5IG1hdGVyaWFsOgogICAgICogRm9yIGEgdHJhbnNwYXJlbnQga2V5OiBvdXRwdXQgb2YgYHBzYV9leHBvcnRfa2V5YC4KKyAgICAqIEZvciBhbiBvcGFxdWUga2V5ICh1bmlmaWVkIGRyaXZlciBpbnRlcmZhY2UpOiBkcml2ZXItc3BlY2lmaWMgb3BhcXVlIGtleSBibG9iLgogICAgICogRm9yIGFuIG9wYXF1ZSBrZXkgKGtleSBpbiBhIHNlY3VyZSBlbGVtZW50KTogc2xvdCBudW1iZXIgKDggYnl0ZXMpLCBpbiBwbGF0Zm9ybSBlbmRpYW5uZXNzLgogKiBBbnkgdHJhaWxpbmcgZGF0YSBpcyByZWplY3RlZCBvbiBsb2FkLgogCkBAIC0yODIsMyArMjgxLDM2IEBACiAgICAgKiBUaGUgc2xvdCBpbiB0aGUgc2VjdXJlIGVsZW1lbnQgZGVzaWduYXRlZCBieSB0aGUgc2xvdCBudW1iZXIuCiAgICAgKiBUaGUgZmlsZSBjb250YWluaW5nIHRoZSBrZXkgbWV0YWRhdGEgZGVzaWduYXRlZCBieSB0aGUga2V5IGlkZW50aWZpZXIuCiAgICAgKiBUaGUgZHJpdmVyIHBlcnNpc3RlbnQgZGF0YS4KKworTWJlZCBDcnlwdG8gVEJECistLS0tLS0tLS0tLS0tLS0KKworVGFnczogVEJECisKK1JlbGVhc2VkIGluIFRCRCAyMDIwLiA8YnI+CitJbnRlZ3JhdGVkIGluIE1iZWQgT1MgVEJELgorCisjIyMgQ2hhbmdlcyBpbnRyb2R1Y2VkIGluIFRCRAorCisqIFRoZSB0eXBlIGZpZWxkIGhhcyBiZWVuIHNwbGl0IGludG8gYSB0eXBlIGFuZCBhIGJpdHMgZmllbGQgb2YgMiBieXRlcyBlYWNoLgorCisjIyMgS2V5IGZpbGUgZm9ybWF0IGZvciBUQkQKKworQWxsIGludGVnZXJzIGFyZSBlbmNvZGVkIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIgaW4gOC1iaXQgYnl0ZXMgZXhjZXB0IHdoZXJlIG90aGVyd2lzZSBpbmRpY2F0ZWQuCisKK1RoZSBsYXlvdXQgb2YgYSBrZXkgZmlsZSBpczoKKworKiBtYWdpYyAoOCBieXRlcyk6IGAiUFNBXDBLRVlcMCJgLgorKiB2ZXJzaW9uICg0IGJ5dGVzKTogMC4KKyogbGlmZXRpbWUgKDQgYnl0ZXMpOiBgcHNhX2tleV9saWZldGltZV90YCB2YWx1ZS4KKyogdHlwZSAoMiBieXRlcyk6IGBwc2Ffa2V5X3R5cGVfdGAgdmFsdWUuCisqIGJpdHMgKDIgYnl0ZXMpOiBgcHNhX2tleV9iaXRzX3RgIHZhbHVlLgorKiBwb2xpY3kgdXNhZ2UgZmxhZ3MgKDQgYnl0ZXMpOiBgcHNhX2tleV91c2FnZV90YCB2YWx1ZS4KKyogcG9saWN5IHVzYWdlIGFsZ29yaXRobSAoNCBieXRlcyk6IGBwc2FfYWxnb3JpdGhtX3RgIHZhbHVlLgorKiBwb2xpY3kgZW5yb2xsbWVudCBhbGdvcml0aG0gKDQgYnl0ZXMpOiBgcHNhX2FsZ29yaXRobV90YCB2YWx1ZS4KKyoga2V5IG1hdGVyaWFsIGxlbmd0aCAoNCBieXRlcykuCisqIGtleSBtYXRlcmlhbDoKKyAgICAqIEZvciBhIHRyYW5zcGFyZW50IGtleTogb3V0cHV0IG9mIGBwc2FfZXhwb3J0X2tleWAuCisgICAgKiBGb3IgYW4gb3BhcXVlIGtleSAodW5pZmllZCBkcml2ZXIgaW50ZXJmYWNlKTogZHJpdmVyLXNwZWNpZmljIG9wYXF1ZSBrZXkgYmxvYi4KKyAgICAqIEZvciBhbiBvcGFxdWUga2V5IChrZXkgaW4gYSBzZWN1cmUgZWxlbWVudCk6IHNsb3QgbnVtYmVyICg4IGJ5dGVzKSwgaW4gcGxhdGZvcm0gZW5kaWFubmVzcy4KKyogQW55IHRyYWlsaW5nIGRhdGEgaXMgcmVqZWN0ZWQgb24gbG9hZC4KZGlmZiAtLWdpdCBhL2RvY3MvYXJjaGl0ZWN0dXJlL3RsczEzLWV4cGVyaW1lbnRhbC5tZCBiL2RvY3MvYXJjaGl0ZWN0dXJlL3RsczEzLWV4cGVyaW1lbnRhbC5tZAppbmRleCBiY2YzZTM0Li4zZGIxNmUwIDEwMDY0NAotLS0gYS9kb2NzL2FyY2hpdGVjdHVyZS90bHMxMy1leHBlcmltZW50YWwubWQKKysrIGIvZG9jcy9hcmNoaXRlY3R1cmUvdGxzMTMtZXhwZXJpbWVudGFsLm1kCkBAIC0zOCwzICszOCwxMiBAQAogLSBUaGUgSEtERiBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiBvbiB3aGljaCB0aGUgVExTIDEuMyBrZXkgc2NoZWR1bGUgaXMgYmFzZWQsCiAgIGlzIGFscmVhZHkgcHJlc2VudCBhcyBhbiBpbmRlcGVuZGVudCBtb2R1bGUgY29udHJvbGxlZCBieSBgTUJFRFRMU19IS0RGX0NgCiAgIGluZGVwZW5kZW50bHkgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoZSBUTFMgMS4zIHByb3RvdHlwZS4KKworLSBUaGUgVExTIDEuMy1zcGVjaWZpYyBIS0RGLWJhc2VkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9ucyAoc2VlIFJGQyA4NDQ2KToKKyAgKiBIS0RGLUV4cGFuZC1MYWJlbAorICAqIERlcml2ZS1TZWNyZXQKKyAgLSBTZWNyZXQgZXZvbHV0aW9uCisgICogVGhlIHRyYWZmaWMge0tleSxJVn0gZ2VuZXJhdGlvbiBmcm9tIHNlY3JldAorICBUaG9zZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIGluIGBsaWJyYXJ5L3NzbF90bHMxM19rZXlzLmNgIGFuZAorICB0ZXN0ZWQgaW4gYHRlc3Rfc3VpdGVfc3NsYCB1c2luZyB0ZXN0IHZlY3RvcnMgZnJvbSBSRkMgODQ0OCBhbmQKKyAgaHR0cHM6Ly90bHMxMy51bGZoZWltLm5ldC8uCmRpZmYgLS1naXQgYS9kb2NzL3Byb3Bvc2VkL01ha2VmaWxlIGIvZG9jcy9wcm9wb3NlZC9NYWtlZmlsZQppbmRleCAyMTMyYjA4Li4xYzMxNDY0IDEwMDY0NAotLS0gYS9kb2NzL3Byb3Bvc2VkL01ha2VmaWxlCisrKyBiL2RvY3MvcHJvcG9zZWQvTWFrZWZpbGUKQEAgLTMsNiArMyw3IEBACiBkZWZhdWx0OiBhbGwKIAogYWxsX21hcmtkb3duID0gXAorCSAgICAgICBwc2EtY29uZGl0aW9uYWwtaW5jbHVzaW9uLWMubWQgXAogCSAgICAgICBwc2EtZHJpdmVyLWRldmVsb3Blci1ndWlkZS5tZCBcCiAJICAgICAgIHBzYS1kcml2ZXItaW50ZWdyYXRpb24tZ3VpZGUubWQgXAogCSAgICAgICBwc2EtZHJpdmVyLWludGVyZmFjZS5tZCBcCmRpZmYgLS1naXQgYS9kb2NzL3Byb3Bvc2VkL3BzYS1jb25kaXRpb25hbC1pbmNsdXNpb24tYy5tZCBiL2RvY3MvcHJvcG9zZWQvcHNhLWNvbmRpdGlvbmFsLWluY2x1c2lvbi1jLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MzA2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3Byb3Bvc2VkL3BzYS1jb25kaXRpb25hbC1pbmNsdXNpb24tYy5tZApAQCAtMCwwICsxLDIwMiBAQAorQ29uZGl0aW9uYWwgaW5jbHVzaW9uIG9mIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtIHRocm91Z2ggdGhlIFBTQSBBUEkgaW4gTWJlZCBUTFMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgaXMgYSBwcm9wb3NlZCBpbnRlcmZhY2UgZm9yIGRlY2lkaW5nIGF0IGJ1aWxkIHRpbWUgd2hpY2ggY3J5cHRvZ3JhcGhpYyBtZWNoYW5pc21zIHRvIGluY2x1ZGUgaW4gdGhlIFBTQSBDcnlwdG9ncmFwaHkgaW50ZXJmYWNlLgorCitUaGlzIGlzIGN1cnJlbnRseSBhIHByb3Bvc2FsIGZvciBNYmVkIFRMUy4gSXQgaXMgbm90IGN1cnJlbnRseSBvbiB0cmFjayBmb3Igc3RhbmRhcmRpemF0aW9uIGluIFBTQS4KKworVGltZS1zdGFtcDogIjIwMjAvMDkvMDcgMDg6Mjc6MzIgR01UIgorCisjIyBJbnRyb2R1Y3Rpb24KKworIyMjIFB1cnBvc2Ugb2YgdGhpcyBzcGVjaWZpY2F0aW9uCisKK1RoZSBbUFNBIENyeXB0b2dyYXBoeSBBUEkgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9hcm1tYmVkLmdpdGh1Yi5pby9tYmVkLWNyeXB0by9wc2EvI2FwcGxpY2F0aW9uLXByb2dyYW1taW5nLWludGVyZmFjZSkgc3BlY2lmaWVzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBhIFBTQSBDcnlwdG9ncmFwaHkgaW1wbGVtZW50YXRpb24gYW5kIGFuIGFwcGxpY2F0aW9uLiBUaGUgaW50ZXJmYWNlIGRlZmluZXMgYSBudW1iZXIgb2YgY2F0ZWdvcmllcyBvZiBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgKGhhc2hlcywgTUFDLCBzaWduYXR1cmVzLCBldGMuKS4gSW4gZWFjaCBjYXRlZ29yeSwgYSB0eXBpY2FsIGltcGxlbWVudGF0aW9uIG9mZmVycyBtYW55IGFsZ29yaXRobXMgKGUuZy4gZm9yIHNpZ25hdHVyZXM6IFJTQS1QS0NTIzF2MS41LCBSU0EtUFNTLCBFQ0RTQSkuIFdoZW4gYnVpbGRpbmcgdGhlIGltcGxlbWVudGF0aW9uIGZvciBhIHNwZWNpZmljIHVzZSBjYXNlLCBpdCBpcyBvZnRlbiBkZXNpcmFibGUgdG8gaW5jbHVkZSBvbmx5IGEgc3Vic2V0IG9mIHRoZSBhdmFpbGFibGUgY3J5cHRvZ3JhcGhpYyBtZWNoYW5pc21zLCBwcmltYXJpbHkgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBjb2RlIGZvb3RwcmludCBvZiB0aGUgY29tcGlsZWQgc3lzdGVtLgorCitUaGUgcHJlc2VudCBkb2N1bWVudCBwcm9wb3NlcyBhIHdheSBmb3IgYW4gYXBwbGljYXRpb24gdXNpbmcgdGhlIFBTQSBjcnlwdG9ncmFwaHkgaW50ZXJmYWNlIHRvIGRlY2xhcmUgd2hpY2ggbWVjaGFuaXNtcyBpdCByZXF1aXJlcy4KKworIyMjIENvbmRpdGlvbmFsIGluY2x1c2lvbiBvZiBsZWdhY3kgY3J5cHRvZ3JhcGh5IG1vZHVsZXMKKworTWJlZCBUTFMgb2ZmZXJzIGEgd2F5IHRvIHNlbGVjdCB3aGljaCBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMgYXJlIGluY2x1ZGVkIGluIGEgYnVpbGQgdGhyb3VnaCBpdHMgY29uZmlndXJhdGlvbiBmaWxlIChgY29uZmlnLmhgKS4gVGhpcyBtZWNoYW5pc20gaXMgYmFzZWQgb24gdHdvIG1haW4gc2V0cyBvZiBzeW1ib2xzOiBgTUJFRFRMU194eHhfQ2AgY29udHJvbHMgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgbWVjaGFuaXNtIHRvIHRoZSBhcHBsaWNhdGlvbiwgYW5kIGBNQkVEVExTX3h4eF9BTFRgIGNvbnRyb2xzIHRoZSBhdmFpbGFiaWxpdHkgb2YgYW4gYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24sIHNvIHRoZSBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiBpcyBvbmx5IGluY2x1ZGVkIGlmIGBNQkVEVExTX3h4eF9DYCBpcyBkZWZpbmVkIGJ1dCBub3QgYE1CRURUTFNfeHh4X0FMVGAuCisKKyMjIyBQU0EgZXZvbHV0aW9uCisKK0luIHRoZSBQU0EgY3J5cHRvZ3JhcGh5IGludGVyZmFjZSwgdGhlICoqY29yZSoqIChidWlsdC1pbiBpbXBsZW1lbnRhdGlvbnMgb2YgY3J5cHRvZ3JhcGhpYyBtZWNoYW5pc21zKSBjYW4gYmUgYXVnbWVudGVkIHdpdGggZHJpdmVycy4gKipUcmFuc3BhcmVudCBkcml2ZXJzKiogcmVwbGFjZSB0aGUgYnVpbHQtaW4gaW1wbGVtZW50YXRpb24gb2YgYSBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbSAob3IsIHdpdGggKipmYWxsYmFjayoqLCB0aGUgYnVpbHQtaW4gaW1wbGVtZW50YXRpb24gaXMgdHJpZWQgaWYgdGhlIGRyaXZlciBvbmx5IGhhcyBwYXJ0aWFsIHN1cHBvcnQgZm9yIHRoZSBtZWNoYW5pc20pLiAqKk9wYXF1ZSBkcml2ZXJzKiogaW1wbGVtZW50IGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtcyBvbiBrZXlzIHdoaWNoIGFyZSBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBkb21haW4gc3VjaCBhcyBhIHNlY3VyZSBlbGVtZW50LCBmb3Igd2hpY2ggdGhlIGNvcmUgb25seSBkb2VzIGtleSBtYW5hZ2VtZW50IGFuZCBkaXNwYXRjaCB1c2luZyB3cmFwcGVkIGtleSBibG9icyBvciBrZXkgaWRlbnRpZmllcnMuCisKK1RoZSBjdXJyZW50IG1vZGVsIGlzIGRpZmZpY3VsdCB0byBhZGFwdCB0byB0aGUgUFNBIGludGVyZmFjZSBmb3Igc2V2ZXJhbCByZWFzb25zLiBUaGUgYE1CRURUTFNfeHh4X0FMVGAgc3ltYm9scyBhcmUgc29tZXdoYXQgaW5jb25zaXN0ZW50LCBhbmQgaW4gcGFydGljdWxhciBkbyBub3Qgd29yayB3ZWxsIGZvciBhc3ltbWV0cmljIGNyeXB0b2dyYXBoeS4gRm9yIGV4YW1wbGUsIG1hbnkgcGFydHMgb2YgdGhlIEVDQyBjb2RlIGhhdmUgbm8gYE1CRURUTFNfeHh4X0FMVGAgc3ltYm9sLCBzbyBhIHBsYXRmb3JtIHdpdGggRUNDIGFjY2VsZXJhdGlvbiB0aGF0IGNhbiBwZXJmb3JtIGFsbCBFQ0RTQSBhbmQgRUNESCBvcGVyYXRpb25zIGluIHRoZSBhY2NlbGVyYXRvciB3b3VsZCBzdGlsbCBlbWJhcmsgdGhlIGBiaWdudW1gIG1vZHVsZSBhbmQgbGFyZ2UgcGFydHMgb2YgdGhlIGBlY3BfY3VydmVzYCwgYGVjcGAgYW5kIGBlY2RzYWAgbW9kdWxlcy4gQWxzbyB0aGUgYXZhaWxhYmlsaXR5IG9mIGEgdHJhbnNwYXJlbnQgZHJpdmVyIGZvciBhIG1lY2hhbmlzbSBkb2VzIG5vdCB0cmFuc2xhdGUgZGlyZWN0bHkgdG8gYE1CRURUTFNfeHh4YCBzeW1ib2xzLgorCisjIyMgUmVxdWlyZW1lbnRzCisKK1tSZXEuaW50ZXJmYWNlXSBUaGUgYXBwbGljYXRpb24gY2FuIGRlY2xhcmUgd2hpY2ggY3J5cHRvZ3JhcGhpYyBtZWNoYW5pc21zIGl0IG5lZWRzLgorCitbUmVxLmluY2x1c2lvbl0gSWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHJlcXVpcmUgYSBtZWNoYW5pc20sIGEgc3VpdGFibHkgY29uZmlndXJlZCBNYmVkIFRMUyBidWlsZCBtdXN0IG5vdCBpbmNsdWRlIGl0LiBUaGUgZ3JhbnVsYXJpdHkgb2YgbWVjaGFuaXNtcyBtdXN0IHdvcmsgZm9yIHR5cGljYWwgdXNlIGNhc2VzIGFuZCBoYXMgW2FjY2VwdGFibGUgbGltaXRhdGlvbnNdKCNhY2NlcHRhYmxlLWxpbWl0YXRpb25zKS4KKworW1JlcS5kcml2ZXJzXSBJZiBhIFBTQSBkcml2ZXIgaXMgYXZhaWxhYmxlIGluIHRoZSBidWlsZCwgYSBzdWl0YWJseSBjb25maWd1cmVkIE1iZWQgVExTIGJ1aWxkIG11c3Qgbm90IGluY2x1ZGUgdGhlIGNvcnJlc3BvbmRpbmcgc29mdHdhcmUgY29kZSAodW5sZXNzIGEgc29mdHdhcmUgZmFsbGJhY2sgaXMgbmVlZGVkKS4KKworW1JlcS5jXSBUaGUgY29uZmlndXJhdGlvbiBtZWNoYW5pc20gY29uc2lzdHMgb2YgQyBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMsIGFuZCB0aGUgYnVpbGQgZG9lcyBub3QgcmVxdWlyZSB0b29scyBvdGhlciB0aGFuIGEgQyBjb21waWxlci4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYWxsb3cgYnVpbGRpbmcgYW4gYXBwbGljYXRpb24gYW5kIE1iZWQgVExTIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBhbGxvdyB0aGlyZC1wYXJ0eSB0b29scy4KKworW1JlcS5hZGFwdGFiaWxpdHldIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWVjaGFuaXNtIG11c3QgYmUgYWRhcHRhYmxlIHdpdGggZnV0dXJlIGV2b2x1dGlvbiBvZiB0aGUgUFNBIGNyeXB0b2dyYXBoeSBzcGVjaWZpY2F0aW9ucyBhbmQgTWJlZCBUTFMuIFRoZXJlZm9yZSB0aGUgaW50ZXJmYWNlIG11c3QgcmVtYWluIHN1ZmZpY2llbnRseSBzaW1wbGUgYW5kIGFic3RyYWN0LgorCisjIyMgQWNjZXB0YWJsZSBsaW1pdGF0aW9ucworCitbTGltaXRhdGlvbi5tYXRyaXhdIElmIGEgbWVjaGFuaXNtIGlzIGRlZmluZWQgYnkgYSBjb21iaW5hdGlvbiBvZiBhbGdvcml0aG1zIGFuZCBrZXkgdHlwZXMsIGZvciBleGFtcGxlIGEgYmxvY2sgY2lwaGVyIG1vZGUgKENCQywgQ1RSLCBDRkIsIOKApikgYW5kIGEgYmxvY2sgcGVybXV0YXRpb24gKEFFUywgQ0FNRUxMSUEsIEFSSUEsIOKApiksIHRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IHRvIGluY2x1ZGUgb25seSBzcGVjaWZpYyBjb21iaW5hdGlvbnMuCisKK1tMaW1pdGF0aW9uLmRpcmVjdGlvbl0gRm9yIG1lY2hhbmlzbXMgdGhhdCBoYXZlIG11bHRpcGxlIGRpcmVjdGlvbnMgKGZvciBleGFtcGxlIGVuY3J5cHQvZGVjcnlwdCwgc2lnbi92ZXJpZnkpLCB0aGVyZSBpcyBubyByZXF1aXJlbWVudCB0byBpbmNsdWRlIG9ubHkgb25lIGRpcmVjdGlvbi4KKworW0xpbWl0YXRpb24uc2l6ZV0gVGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgdG8gaW5jbHVkZSBvbmx5IHN1cHBvcnQgZm9yIGNlcnRhaW4ga2V5IHNpemVzLgorCitbTGltaXRhdGlvbi5tdWx0aXBhcnRdIFdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSB3YXlzIHRvIHBlcmZvcm0gYW4gb3BlcmF0aW9uLCBmb3IgZXhhbXBsZSBzaW5nbGUtcGFydCBhbmQgbXVsdGktcGFydCwgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIHRvIHNlbGVjdCBvbmx5IG9uZSBvciBhIHN1YnNldCBvZiB0aGUgcG9zc2libGUgd2F5cy4KKworIyMgSW50ZXJmYWNlCisKKyMjIyBQU0EgQ3J5cHRvIGNvbmZpZ3VyYXRpb24gZmlsZQorCitUaGUgUFNBIGNyeXB0byBjb25maWd1cmF0aW9uIGZpbGUgYHBzYS9jcnlwdG9fY29uZmlnLmhgIGRlZmluZXMgYSBzZXJpZXMgb2Ygc3ltYm9scyBvZiB0aGUgZm9ybSBgUFNBX1dBTlRfeHh4YCB3aGVyZSBgeHh4YCAuIFRoZSBzeW1ib2xzIGFyZSBkb2N1bWVudGVkIGluIHRoZSBzZWN0aW9uIFvigJxQU0EgQ3J5cHRvIGNvbmZpZ3VyYXRpb24gc3ltYm9sc+KAnV0oI3BzYS1jcnlwdG8tY29uZmlndXJhdGlvbi1zeW1ib2xzKSBiZWxvdy4KKworVGhlIHN5bWJvbCBgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJR2AgaW4gYG1iZWR0bHMvY29uZmlnLmhgIGRldGVybWluZXMgd2hldGhlciBgcHNhL2NyeXB0b19jb25maWcuaGAuIGlzIHVzZWQuCisKKyogSWYgYE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUdgIGlzIHVuc2V0LCB3aGljaCBpcyB0aGUgZGVmYXVsdCBhdCBsZWFzdCBpbiBNYmVkIFRMUyAyLnggdmVyc2lvbnMsIHRoaW5ncyBhcmUgYXMgdGhleSBhcmUgdG9kYXk6IHRoZSBQU0Egc3Vic3lzdGVtIGluY2x1ZGVzIGdlbmVyaWMgY29kZSB1bmNvbmRpdGlvbmFsbHksIGFuZCBpbmNsdWRlcyBzdXBwb3J0IGZvciBzcGVjaWZpYyBtZWNoYW5pc21zIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gdGhlIGV4aXN0aW5nIGBNQkVEVExTX3h4eF9gIHN5bWJvbHMuCisqIElmIGBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHYCBpcyBzZXQsIHRoZSBuZWNlc3Nhcnkgc29mdHdhcmUgaW1wbGVtZW50YXRpb25zIG9mIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtcyBhcmUgaW5jbHVkZWQgYmFzZWQgb24gYm90aCB0aGUgY29udGVudCBvZiB0aGUgUFNBIGNyeXB0byBjb25maWd1cmF0aW9uIGZpbGUgYW5kIHRoZSBNYmVkIFRMUyBjb25maWd1cmF0aW9uIGZpbGUuIEZvciBleGFtcGxlLCB0aGUgY29kZSBpbiBgYWVzLmNgIGlzIGVuYWJsZWQgaWYgZWl0aGVyIGBtYmVkdGxzL2NvbmZpZy5oYCBjb250YWlucyBgTUJFRFRMU19BRVNfQ2Agb3IgYHBzYS9jcnlwdG9fY29uZmlnLmhgIGNvbnRhaW5zIGBQU0FfV0FOVF9LRVlfVFlQRV9BRVNgLgorCisjIyMgUFNBIENyeXB0byBjb25maWd1cmF0aW9uIHN5bWJvbHMKKworIyMjIyBDb25maWd1cmF0aW9uIHN5bWJvbCBzeW50YXgKKworQSBQU0EgY3J5cHRvIGNvbmZpZ3VyYXRpb24gc3ltYm9sIGlzIGEgQyBwcmVwcm9jZXNzb3Igc3ltYm9sIHdob3NlIG5hbWUgc3RhcnRzIHdpdGggYFBTQV9XQU5UX2AuCisKKyogSWYgdGhlIHN5bWJvbCBpcyBub3QgZGVmaW5lZCwgdGhlIGNvcnJlc3BvbmRpbmcgZmVhdHVyZSBpcyBub3QgaW5jbHVkZWQuCisqIElmIHRoZSBzeW1ib2wgaXMgZGVmaW5lZCB0byBhIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHdpdGggdGhlIHZhbHVlIGAxYCwgdGhlIGNvcnJlc3BvbmRpbmcgZmVhdHVyZSBpcyBpbmNsdWRlZC4KKyogSWYgdGhlIHN5bWJvbCBpcyBkZWZpbmVkIHdpdGggYSBkaWZmZXJlbnQgdmFsdWUsIHRoZSBiZWhhdmlvciBpcyBjdXJyZW50bHkgdW5kZWZpbmVkIGFuZCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KKworIyMjIyBDb25maWd1cmF0aW9uIHN5bWJvbCBzZW1hbnRpY3MKKworSWYgYSBmZWF0dXJlIGlzIG5vdCByZXF1ZXN0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgUFNBIGNyeXB0byBjb25maWd1cmF0aW9uIGZpbGUsIGl0IG1heSBzdGlsbCBiZSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQsIGVpdGhlciBiZWNhdXNlIHRoZSBmZWF0dXJlIGhhcyBiZWVuIHJlcXVlc3RlZCBpbiBzb21lIG90aGVyIHdheSwgb3IgYmVjYXVzZSB0aGUgbGlicmFyeSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBleGNsdXNpb24gb2YgdGhpcyBmZWF0dXJlLiBNYmVkIFRMUyBzaG91bGQgbWFrZSBhIGJlc3QgZWZmb3J0IHRvIHN1cHBvcnQgdGhlIGV4Y2x1c2lvbiBvZiBhbGwgZmVhdHVyZXMsIGJ1dCBpbiBzb21lIGNhc2VzIHRoaXMgbWF5IGJlIGp1ZGdlZCB0b28gbXVjaCBlZmZvcnQgZm9yIHRvbyBsaXR0bGUgYmVuZWZpdC4KKworIyMjIyBDb25maWd1cmF0aW9uIHN5bWJvbHMgZm9yIGtleSB0eXBlcworCitGb3IgZWFjaCBjb25zdGFudCBvciBjb25zdHJ1Y3RvciBtYWNybyBvZiB0aGUgZm9ybSBgUFNBX0tFWV9UWVBFX3h4eGAsIHRoZSBzeW1ib2wgKipgUFNBX1dBTlRfS0VZX1RZUEVfeHh4YCoqIGluZGljYXRlcyB0aGF0IHN1cHBvcnQgZm9yIHRoaXMga2V5IHR5cGUgaXMgZGVzaXJlZC4KKworRm9yIGFzeW1tZXRyaWMgY3J5cHRvZ3JhcGh5LCBgUFNBX1dBTlRfS0VZX1RZUEVfeHh4X0tFWV9QQUlSYCBkZXRlcm1pbmVzIHdoZXRoZXIgcHJpdmF0ZS1rZXkgb3BlcmF0aW9ucyBhcmUgZGVzaXJlZCwgYW5kIGBQU0FfV0FOVF9LRVlfVFlQRV94eHhfUFVCTElDX0tFWWAgZGV0ZXJtaW5lcyB3aGV0aGVyIHB1YmxpYy1rZXkgb3BlcmF0aW9ucyBhcmUgZGVzaXJlZC4gYFBTQV9XQU5UX0tFWV9UWVBFX3h4eF9LRVlfUEFJUmAgaW1wbGljaXRseSBlbmFibGVzIGBQU0FfV0FOVF9LRVlfVFlQRV94eHhfUFVCTElDX0tFWWA6IHRoZXJlIGlzIG5vIHdheSB0byBvbmx5IGluY2x1ZGUgcHJpdmF0ZS1rZXkgb3BlcmF0aW9ucyAod2hpY2ggdHlwaWNhbGx5IHNhdmVzIGxpdHRsZSBjb2RlKS4KKworIyMjIyBDb25maWd1cmF0aW9uIHN5bWJvbHMgZm9yIGN1cnZlcworCitGb3IgZWxsaXB0aWMgY3VydmUga2V5IHR5cGVzLCBvbmx5IHRoZSBzcGVjaWZpZWQgY3VydmVzIGFyZSBpbmNsdWRlZC4gVG8gaW5jbHVkZSBhIGN1cnZlLCBpbmNsdWRlIGEgc3ltYm9sIG9mIHRoZSBmb3JtICoqYFBTQV9XQU5UX0VDQ19mYW1pbHlfc2l6ZWAqKi4gRm9yIGV4YW1wbGU6IGBQU0FfV0FOVF9FQ0NfU0VDUF9SMV8yNTZgIGZvciBzZWNwMjU2cjEsIGBQU0FfV0FOVF9FQ0NfTU9OVEdPTUVSWV9DVVJWRTI1NTE5YC4gSXQgaXMgYW4gZXJyb3IgdG8gcmVxdWlyZSBhbiBFQ0Mga2V5IHR5cGUgYnV0IG5vIGN1cnZlLCBhbmQgTWJlZCBUTFMgd2lsbCByZWplY3QgdGhpcyBhdCBjb21waWxlIHRpbWUuCisKKyMjIyMgQ29uZmlndXJhdGlvbiBzeW1ib2xzIGZvciBhbGdvcml0aG1zCisKK0ZvciBlYWNoIGNvbnN0YW50IG9yIGNvbnN0cnVjdG9yIG1hY3JvIG9mIHRoZSBmb3JtIGBQU0FfQUxHX3h4eGAsIHRoZSBzeW1ib2wgKipgUFNBX1dBTlRfQUxHX3h4eGAqKiBpbmRpY2F0ZXMgdGhhdCBzdXBwb3J0IGZvciB0aGlzIGFsZ29yaXRobSBpcyBkZXNpcmVkLgorCitGb3IgcGFyYW1ldHJpemVkIGFsZ29yaXRobXMsIHRoZSBgUFNBX1dBTlRfQUxHX3h4eGAgc3ltYm9sIGluZGljYXRlcyB3aGV0aGVyIHRoZSBiYXNlIG1lY2hhbmlzbSBpcyBzdXBwb3J0ZWQuIFBhcmFtZXRlcnMgbXVzdCB0aGVtc2VsdmVzIGJlIGluY2x1ZGVkIHRocm91Z2ggdGhlaXIgb3duIGBQU0FfV0FOVF9BTEdfeHh4YCBzeW1ib2xzLiBJdCBpcyBhbiBlcnJvciB0byBpbmNsdWRlIGEgYmFzZSBtZWNoYW5pc20gd2l0aG91dCBhdCBsZWFzdCBvbmUgcG9zc2libGUgcGFyYW1ldGVyLCBhbmQgTWJlZCBUTFMgd2lsbCByZWplY3QgdGhpcyBhdCBjb21waWxlIHRpbWUuIEZvciBleGFtcGxlLCBgUFNBX1dBTlRfQUxHX0VDRFNBYCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHJhbmRvbWl6ZWQgRUNEU0EgZm9yIGFsbCBoYXNoIGFsZ29yaXRobXMgd2hvc2UgY29ycmVzcG9uZGluZyBzeW1ib2wgYFBTQV9XQU5UX0FMR194eHhgIGlzIGVuYWJsZWQuCisKKyMjIEltcGxlbWVudGF0aW9uCisKKyMjIyBBZGRpdGlvbmFsIG5vbi1wdWJsaWMgc3ltYm9scworCisjIyMjIEFjY291bnRpbmcgZm9yIHRyYW5zcGFyZW50IGRyaXZlcnMKKworSW4gYWRkaXRpb24gdG8gdGhlIFtjb25maWd1cmF0aW9uIHN5bWJvbHNdKCNwc2EtY3J5cHRvLWNvbmZpZ3VyYXRpb24tc3ltYm9scyksIHdlIG5lZWQgdHdvIHBhcmFsbGVsIG9yIG1vc3RseSBwYXJhbGxlbCBzZXRzIG9mIHN5bWJvbHM6CisKKyogKipgTUJFRFRMU19QU0FfQUNDRUxfeHh4YCoqIGluZGljYXRlcyB3aGV0aGVyIGEgZnVsbHktZmVhdHVyZWQsIGZhbGxiYWNrLWZyZWUgdHJhbnNwYXJlbnQgZHJpdmVyIGlzIGF2YWlsYWJsZS4KKyogKipgTUJFRFRMU19QU0FfQlVJTFRJTl94eHhgKiogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uIGlzIG5lZWRlZC4KKworYE1CRURUTFNfUFNBX0FDQ0VMX3h4eGAgaXMgb25lIG9mIHRoZSBvdXRwdXRzIG9mIHRoZSB0cmFuc3BpbGF0aW9uIG9mIGEgZHJpdmVyIGRlc2NyaXB0aW9uLCBhbG9uZ3NpZGUgdGhlIGdsdWUgY29kZSBmb3IgY2FsbGluZyB0aGUgZHJpdmVycy4KKworYE1CRURUTFNfUFNBX0JVSUxUSU5feHh4YCBpcyBlbmFibGVkIHdoZW4gYFBTQV9XQU5UX3h4eGAgaXMgZW5hYmxlZCBhbmQgYE1CRURUTFNfUFNBX0FDQ0VMX3h4eGAgaXMgZGlzYWJsZWQuCisKK1RoZXNlIHN5bWJvbHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlIG9mIE1iZWQgVExTIHRvd2FyZHMgYXBwbGljYXRpb25zIG9yIHRvIGRyaXZlcnMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgc3ltYm9scyBhcmUgYWN0dWFsbHkgdmlzaWJsZS4KKworIyMjIEFyY2hpdGVjdHVyZSBvZiBzeW1ib2wgZGVmaW5pdGlvbnMKKworIyMjIyBEZWZpbml0aW9uIG9mIGludGVybmFsIGluY2x1c2lvbiBzeW1ib2xzCisKK1RoZSBoZWFkZXIgZmlsZSBgbWJlZHRscy9jb25maWcuaGAgbmVlZHMgdG8gZGVmaW5lIGFsbCB0aGUgYE1CRURUTFNfeHh4X0NgIGNvbmZpZ3VyYXRpb24gc3ltYm9scywgaW5jbHVkaW5nIHRoZSBvbmVzIGRlZHVjZWQgZnJvbSB0aGUgUFNBIGNyeXB0byBjb25maWd1cmF0aW9uLiBJdCBkb2VzIHRoaXMgYnkgaW5jbHVkaW5nIHRoZSBuZXcgaGVhZGVyIGZpbGUgKipgbWJlZHRscy9jb25maWdfcHNhLmhgKiosIHdoaWNoIGRlZmluZXMgdGhlIGBNQkVEVExTX1BTQV9CVUlMVElOX3h4eGAgc3ltYm9scyBhbmQgZGVkdWNlcyB0aGUgY29ycmVzcG9uZGluZyBgTUJFRFRMU194eHhfQ2AgKGFuZCBvdGhlcikgc3ltYm9scy4KKworIyMjIyBWaXNpYmlsaXR5IG9mIGludGVybmFsIHN5bWJvbHMKKworSWRlYWxseSwgdGhlIGBNQkVEVExTX1BTQV9BQ0NFTF94eHhgIGFuZCBgTUJFRFRMU19QU0FfQlVJTFRJTl94eHhgIHN5bWJvbHMgc2hvdWxkIG5vdCBiZSB2aXNpYmxlIHRvIGFwcGxpY2F0aW9uIGNvZGUgb3IgZHJpdmVyIGNvZGUsIHNpbmNlIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlIG9mIHRoZSBsaWJyYXJ5LiBIb3dldmVyIHRoZXNlIHN5bWJvbHMgYXJlIG5lZWRlZCB0byBkZWR1Y2Ugd2hldGhlciB0byBpbmNsdWRlIGxpYnJhcnkgbW9kdWxlcyAoZm9yIGV4YW1wbGUgYE1CRURUTFNfQUVTX0NgIGhhcyB0byBiZSBlbmFibGVkIGlmIGBNQkVEVExTX1BTQV9CVUlMVElOX0tFWV9UWVBFX0FFU2AgaXMgZW5hYmxlZCksIHdoaWNoIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBrZWVwIHRoZW0gcHJpdmF0ZS4KKworIyMjIyBDb21waWxlLXRpbWUgY2hlY2tzCisKK1RoZSBoZWFkZXIgZmlsZSAqKmBsaWJyYXJ5L3BzYV9jaGVja19jb25maWcuaGAqKiBhcHBsaWVzIHNhbml0eSBjaGVja3MgdG8gdGhlIGNvbmZpZ3VyYXRpb24sIHRocm93aW5nIGAjZXJyb3JgIGlmIHNvbWV0aGluZyBpcyB3cm9uZy4KKworQSBtZWNoYW5pc20gc2ltaWxhciB0byBgbWJlZHRscy9jaGVja19jb25maWcuaGAgZGV0ZWN0cyBlcnJvcnMgc3VjaCBhcyBlbmFibGluZyBFQ0RTQSBidXQgbm8gY3VydmUuCisKK1NpbmNlIGNvbmZpZ3VyYXRpb24gc3ltYm9scyBtdXN0IGJlIHVuZGVmaW5lZCBvciAxLCBhbnkgb3RoZXIgdmFsdWUgc2hvdWxkIHRyaWdnZXIgYW4gYCNlcnJvcmAuCisKKyMjIyMgQXV0b21hdGljIGdlbmVyYXRpb24gb2YgcHJlcHJvY2Vzc29yIHN5bWJvbCBtYW5pcHVsYXRpb25zCisKK0EgbG90IG9mIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9sIG1hbmlwdWxhdGlvbiBpcyBzeXN0ZW1hdGljIGNhbGN1bGF0aW9ucyB0aGF0IGFuYWx5emUgdGhlIGNvbmZpZ3VyYXRpb24uIGBtYmVkdGxzL2NvbmZpZ19wc2EuaGAgYW5kIGBsaWJyYXJ5L3BzYV9jaGVja19jb25maWcuaGAgc2hvdWxkIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LCBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgYHZlcnNpb25fZmVhdHVyZXMuY2AuCisKKyMjIyBTdHJ1Y3R1cmUgb2YgUFNBIGNyeXB0byBsaWJyYXJ5IGNvZGUKKworIyMjIyBDb25kaXRpb25hbCBpbmNsdXNpb24gb2YgbGlicmFyeSBlbnRyeSBwb2ludHMKKworQW4gZW50cnkgcG9pbnQgY2FuIGJlIGVsaW1pbmF0ZWQgZW50aXJlbHkgaWYgbm8gYWxnb3JpdGhtIHJlcXVpcmVzIGl0LgorCisjIyMjIENvbmRpdGlvbmFsIGluY2x1c2lvbiBvZiBtZWNoYW5pc20tc3BlY2lmaWMgY29kZQorCitDb2RlIHRoYXQgaXMgc3BlY2lmaWMgdG8gY2VydGFpbiBrZXkgdHlwZXMgb3IgdG8gY2VydGFpbiBhbGdvcml0aG1zIG11c3QgYmUgZ3VhcmRlZCBieSB0aGUgYXBwbGljYWJsZSBzeW1ib2xzOiBgUFNBX1dBTlRfeHh4YCBmb3IgY29kZSB0aGF0IGlzIGluZGVwZW5kZW50IG9mIHRoZSBhcHBsaWNhdGlvbiwgYW5kIGBNQkVEVExTX1BTQV9CVUlMVElOX3h4eGAgZm9yIGNvZGUgdGhhdCBjYWxscyBhbiBNYmVkIFRMUyBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbi4KKworIyMgUFNBIHN0YW5kYXJkaXphdGlvbgorCisjIyMgSlNPTiBjb25maWd1cmF0aW9uIG1lY2hhbmlzbQorCitBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0aGUgcHJlZmVycmVkIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtIGZvciBhIFBTQSBzZXJ2aWNlIGlzIGluIEpTT04gc3ludGF4LiBUaGUgdHJhbnNsYXRpb24gZnJvbSBKU09OIHRvIGJ1aWxkIGluc3RydWN0aW9ucyBpcyBub3Qgc3BlY2lmaWVkIGJ5IFBTQS4KKworRm9yIFBTQSBDcnlwdG8sIHRoZSBwcmVmZXJyZWQgY29uZmlndXJhdGlvbiBtZWNoYW5pc20gd291bGQgYmUgc2ltaWxhciB0byBjYXBhYmlsaXR5IHNwZWNpZmljYXRpb25zIG9mIHRyYW5zcGFyZW50IGRyaXZlcnMuIFRoZSBzYW1lIEpTT04gcHJvcGVydGllcyB0aGF0IGFyZSB1c2VkIHRvIG1lYW4g4oCcdGhpcyBkcml2ZXIgY2FuIHBlcmZvcm0gdGhhdCBtZWNoYW5pc23igJ0gaW4gYSBkcml2ZXIgZGVzY3JpcHRpb24gd291bGQgYmUgdXNlZCB0byBtZWFuIOKAnHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBwZXJmb3JtIHRoYXQgbWVjaGFuaXNt4oCdIGluIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLgorCisjIyMgRnJvbSBKU09OIHRvIEMKKworVGhlIEpTT04gY2FwYWJpbGl0eSBsYW5ndWFnZSBhbGxvd3MgYSBtb3JlIGZpbmUtZ3JhaW5lZCBzZWxlY3Rpb24gdGhhbiB0aGUgQyBtZWNoYW5pc20gcHJvcG9zZWQgaGVyZS4gRm9yIGV4YW1wbGUsIGl0IGFsbG93cyByZXF1ZXN0aW5nIG9ubHkgc2luZ2xlLXBhcnQgbWVjaGFuaXNtcywgb25seSBjZXJ0YWluIGtleSBzaXplcywgb3Igb25seSBjZXJ0YWluIGNvbWJpbmF0aW9ucyBvZiBhbGdvcml0aG1zIGFuZCBrZXkgdHlwZXMuCisKK1RoZSBKU09OIGNhcGFiaWxpdHkgbGFuZ3VhZ2UgY2FuIGJlIHRyYW5zbGF0ZWQgYXBwcm94aW1hdGVseSB0byB0aGUgYm9vbGVhbiBzeW1ib2wgbWVjaGFuaXNtIHByb3Bvc2VkIGhlcmUuIFRoZSBhcHByb3hpbWF0aW9uIGNvbnNpZGVycyBhIGZlYXR1cmUgdG8gYmUgZW5hYmxlZCBpZiBhbnkgcGFydCBvZiBpdCBpcyBlbmFibGVkLiBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgaXMgYSBjYXBhYmlsaXR5IGZvciBBRVMtQ1RSIGFuZCBvbmUgZm9yIENBTUVMTElBLUdDTSwgdGhlIHRyYW5zbGF0aW9uIHRvIGJvb2xlYW4gc3ltYm9scyB3aWxsIGFsc28gaW5jbHVkZSBBRVMtR0NNIGFuZCBDQU1FTExJQS1DVFIuIElmIHRoZXJlIGlzIGEgY2FwYWJpbGl0eSBmb3IgQUVTLTEyOCwgdGhlIHRyYW5zbGF0aW9uIHdpbGwgYWxzbyBpbmNsdWRlIEFFUy0xOTIgYW5kIEFFUy0yNTYuCisKK1RoZSBib29sZWFuIHN5bWJvbCBtZWNoYW5pc20gcHJvcG9zZWQgaGVyZSBjYW4gYmUgdHJhbnNsYXRlZCB0byBhIGxpc3Qgb2YgSlNPTiBjYXBhYmlsaXRpZXM6IGZvciBlYWNoIGluY2x1ZGVkIGFsZ29yaXRobSwgaW5jbHVkZSBhIGNhcGFiaWxpdHkgd2l0aCB0aGF0IGFsZ29yaXRobSwgdGhlIGtleSB0eXBlcyB0aGF0IGFwcGx5IHRvIHRoYXQgYWxnb3JpdGhtLCBubyBzaXplIHJlc3RyaWN0aW9uLCBhbmQgYWxsIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBhcHBseSB0byB0aGF0IGFsZ29yaXRobS4KKworIyMgT3BlbiBxdWVzdGlvbnMKKworIyMjIE9wZW4gcXVlc3Rpb25zIGFib3V0IHRoZSBpbnRlcmZhY2UKKworIyMjIyBOYW1pbmcgb2Ygc3ltYm9scworCitUaGUgbmFtZXMgb2YgW2VsbGlwdGljIGN1cnZlIHN5bWJvbHNdKCNjb25maWd1cmF0aW9uLXN5bWJvbHMtZm9yLWN1cnZlcykgYXJlIGEgYml0IHdlaXJkOiBgU0VDUF9SMV8yNTZgIGluc3RlYWQgb2YgYFNFQ1AyNTZSMWAuIFNob3VsZCB3ZSBtYWtlIHRoZW0gbW9yZSBjbGFzc2ljYWwsIGJ1dCBsZXNzIHN5c3RlbWF0aWM/CisKKyMjIyMgSW1wb3NzaWJsZSBjb21iaW5hdGlvbnMKKworV2hhdCBkb2VzIGl0IG1lYW4gdG8gaGF2ZSBgUFNBX1dBTlRfQUxHX0VDRFNBYCBlbmFibGVkIGJ1dCB3aXRoIG9ubHkgQ3VydmUyNTUxOT8gSXMgaXQgYSBtYW5kYXRvcnkgZXJyb3I/CisKKyMjIyMgRGlmZmllLUhlbGxtYW4KKworV2F5IHRvIHJlcXVlc3Qgb25seSBzcGVjaWZpYyBncm91cHM/IE5vdCBhIHByaW9yaXR5OiBjb25zdHJhaW5lZCBkZXZpY2VzIGRvbid0IGRvIEZGREguIFNwZWNpZnkgaXQgYXMgbWF5IGNoYW5nZSBpbiBmdXR1cmUgdmVyc2lvbnMuCisKKyMjIyMgQ29leGlzdGVuY2Ugd2l0aCB0aGUgY3VycmVudCBNYmVkIFRMUyBjb25maWd1cmF0aW9uCisKK1RoZSB0d28gbWVjaGFuaXNtcyBoYXZlIHZlcnkgZGlmZmVyZW50IGRlc2lnbnMuIElzIHRoZXJlIHNlcmlvdXMgcG90ZW50aWFsIGZvciBjb25mdXNpb24/IERvIHdlIHVuZGVyc3RhbmQgaG93IHRoZSBjb21iaW5hdGlvbnMgd29yaz8KKworIyMjIE9wZW4gcXVlc3Rpb25zIGFib3V0IHRoZSBkZXNpZ24KKworIyMjIyBBbGdvcml0aG1zIHdpdGhvdXQgYSBrZXkgdHlwZSBvciB2aWNlIHZlcnNhCisKK0lzIGl0IHJlYWxpc3RpYyB0byBtYW5kYXRlIGEgY29tcGlsZS10aW1lIGVycm9yIGlmIGEga2V5IHR5cGUgaXMgcmVxdWlyZWQsIGJ1dCBubyBtYXRjaGluZyBhbGdvcml0aG0sIG9yIHZpY2UgdmVyc2E/IElzIGl0IGFsd2F5cyB0aGUgcmlnaHQgdGhpbmcsIGZvciBleGFtcGxlIGlmIHRoZXJlIGlzIGFuIG9wYXF1ZSBkcml2ZXIgdGhhdCBtYW5pcHVsYXRlcyB0aGlzIGtleSB0eXBlPworCisjIyMjIE9wYXF1ZS1vbmx5IG1lY2hhbmlzbXMKKworSWYgYSBtZWNoYW5pc20gc2hvdWxkIG9ubHkgYmUgc3VwcG9ydGVkIGluIGFuIG9wYXF1ZSBkcml2ZXIsIHdoYXQgZG9lcyB0aGUgY29yZSBuZWVkIHRvIGtub3cgYWJvdXQgaXQ/IERvIHdlIGhhdmUgYWxsIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkPworCitUaGlzIGlzIGVzcGVjaWFsbHkgcmVsZXZhbnQgdG8gc3VwcHJlc3MgYSBtZWNoYW5pc20gY29tcGxldGVseSBpZiB0aGVyZSBpcyBubyBtYXRjaGluZyBhbGdvcml0aG0uIEZvciBleGFtcGxlLCBpZiB0aGVyZSBpcyBubyB0cmFuc3BhcmVudCBpbXBsZW1lbnRhdGlvbiBvZiBSU0Egb3IgRUNEU0EsIGBwc2Ffc2lnbl9oYXNoYCBhbmQgYHBzYV92ZXJpZnlfaGFzaGAgbWF5IHN0aWxsIGJlIG5lZWRlZCBpZiB0aGVyZSBpcyBhbiBvcGFxdWUgc2lnbmF0dXJlIGRyaXZlci4KKworIyMjIE9wZW4gcXVlc3Rpb25zIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbgorCisjIyMjIFRlc3RhYmlsaXR5CisKK0lzIHRoaXMgcHJvcG9zYWwgZGVjZW50bHkgdGVzdGFibGU/IFRoZXJlIGFyZSBhIGxvdCBvZiBjb21iaW5hdGlvbnMuIFdoYXQgY29tYmluYXRpb25zIHNob3VsZCB3ZSB0ZXN0PworCis8IS0tCitMb2NhbCBWYXJpYWJsZXM6Cit0aW1lLXN0YW1wLWxpbmUtbGltaXQ6IDQwCit0aW1lLXN0YW1wLXN0YXJ0OiAiVGltZS1zdGFtcDogKlwiIgordGltZS1zdGFtcC1lbmQ6ICJcIiIKK3RpbWUtc3RhbXAtZm9ybWF0OiAiJTA0WS8lMDJtLyUwMmQgJTAySDolMDJNOiUwMlMgJVoiCit0aW1lLXN0YW1wLXRpbWUtem9uZTogIkdNVCIKK0VuZDoKKy0tPgpkaWZmIC0tZ2l0IGEvZG9jcy9wcm9wb3NlZC9wc2EtZHJpdmVyLWRldmVsb3Blci1ndWlkZS5tZCBiL2RvY3MvcHJvcG9zZWQvcHNhLWRyaXZlci1kZXZlbG9wZXItZ3VpZGUubWQKaW5kZXggY2EyNDQ0MS4uYzIyMWJiMiAxMDA2NDQKLS0tIGEvZG9jcy9wcm9wb3NlZC9wc2EtZHJpdmVyLWRldmVsb3Blci1ndWlkZS5tZAorKysgYi9kb2NzL3Byb3Bvc2VkL3BzYS1kcml2ZXItZGV2ZWxvcGVyLWd1aWRlLm1kCkBAIC01LDcgKzUsNyBAQAogCiBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gd3JpdGUgZHJpdmVycyBvZiBjcnlwdG9wcm9jZXNzb3JzIHN1Y2ggYXMgYWNjZWxlcmF0b3JzIGFuZCBzZWN1cmUgZWxlbWVudHMgZm9yIHRoZSBQU0EgY3J5cHRvZ3JhcGh5IHN1YnN5c3RlbSBvZiBNYmVkIFRMUy4KIAotVGhpcyBkb2N1bWVudCBmb2N1c2VzIG9uIGJlaGF2aW9yIHRoYXQgaXMgc3BlY2lmaWMgdG8gTWJlZCBUTFMuIEZvciBhIHJlZmVyZW5jZSBvZiB0aGUgaW50ZXJmYWNlIGJldHdlZW4gTWJlZCBUTFMgYW5kIGRyaXZlcnMsIHJlZmVyIHRvIHRoZSBbUFNBIENyeXB0b3Byb2Nlc3NvciBEcml2ZXIgSW50ZXJmYWNlIHNwZWNpZmljYXRpb25dKGFyY2hpdGVjdHVyZS9wc2EtZHJpdmVyLWludGVyZmFjZS5tZCkuCitUaGlzIGRvY3VtZW50IGZvY3VzZXMgb24gYmVoYXZpb3IgdGhhdCBpcyBzcGVjaWZpYyB0byBNYmVkIFRMUy4gRm9yIGEgcmVmZXJlbmNlIG9mIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBNYmVkIFRMUyBhbmQgZHJpdmVycywgcmVmZXIgdG8gdGhlIFtQU0EgQ3J5cHRvcHJvY2Vzc29yIERyaXZlciBJbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbl0ocHNhLWRyaXZlci1pbnRlcmZhY2UuaHRtbCkuCiAKIFRoZSBpbnRlcmZhY2UgaXMgbm90IGZ1bGx5IGltcGxlbWVudGVkIGluIE1iZWQgVExTIHlldCBhbmQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gWW91IGNhbiBlbmFibGUgdGhlIGV4cGVyaW1lbnRhbCB3b3JrIGluIHByb2dyZXNzIGJ5IHNldHRpbmcgYE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTYCBpbiB0aGUgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24uIFBsZWFzZSBub3RlIHRoYXQgdGhlIGludGVyZmFjZSBtYXkgc3RpbGwgY2hhbmdlOiB1bnRpbCBmdXJ0aGVyIG5vdGljZSwgd2UgZG8gbm90IGd1YXJhbnRlZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgZHJpdmVyIGNvZGUgd2hlbiBgTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlNgIGlzIGVuYWJsZWQuCiAKQEAgLTI0LDcgKzI0LDcgQEAKIAogVG8gd3JpdGUgYSBkcml2ZXIsIHlvdSBuZWVkIHRvIGltcGxlbWVudCBzb21lIGZ1bmN0aW9ucyB3aXRoIEMgbGlua2FnZSwgYW5kIHRvIGRlY2xhcmUgdGhlc2UgZnVuY3Rpb25zIGluIGEgKipkcml2ZXIgZGVzY3JpcHRpb24gZmlsZSoqLiBUaGUgZHJpdmVyIGRlc2NyaXB0aW9uIGZpbGUgZGVjbGFyZXMgd2hpY2ggZnVuY3Rpb25zIHRoZSBkcml2ZXIgaW1wbGVtZW50cyBhbmQgd2hhdCBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMgdGhleSBzdXBwb3J0LiBEZXBlbmRpbmcgb24gdGhlIGRyaXZlciB0eXBlLCB5b3UgbWF5IGFsc28gbmVlZCB0byBkZWZpbmUgc29tZSBDIHR5cGVzIGFuZCBtYWNyb3MgaW4gYSBoZWFkZXIgZmlsZS4KIAotVGhlIGNvbmNyZXRlIHN5bnRheCBmb3IgYSBkcml2ZXIgZGVzY3JpcHRpb24gZmlsZSBpcyBKU09OLiBUaGUgc3RydWN0dXJlIG9mIHRoaXMgSlNPTiBmaWxlIGlzIHNwZWNpZmllZCBpbiB0aGUgc2VjdGlvbiBb4oCcRHJpdmVyIGRlc2NyaXB0aW9uIHN5bnRheOKAnV0oYXJjaGl0ZWN0dXJlL3BzYS1kcml2ZXItaW50ZXJmYWNlLm1kI2RyaXZlci1kZXNjcmlwdGlvbi1zeW50YXgpIG9mIHRoZSBQU0EgY3J5cHRvZ3JhcGh5IGRyaXZlciBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbi4KK1RoZSBjb25jcmV0ZSBzeW50YXggZm9yIGEgZHJpdmVyIGRlc2NyaXB0aW9uIGZpbGUgaXMgSlNPTi4gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIEpTT04gZmlsZSBpcyBzcGVjaWZpZWQgaW4gdGhlIHNlY3Rpb24gW+KAnERyaXZlciBkZXNjcmlwdGlvbiBzeW50YXjigJ1dKHBzYS1kcml2ZXItaW50ZXJmYWNlLmh0bWwjZHJpdmVyLWRlc2NyaXB0aW9uLXN5bnRheCkgb2YgdGhlIFBTQSBjcnlwdG9ncmFwaHkgZHJpdmVyIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uLgogCiBBIGRyaXZlciB0aGVyZWZvcmUgY29uc2lzdHMgb2Y6CiAKQEAgLTM0LDcgKzM0LDcgQEAKIAogIyMgRHJpdmVyIEMgaW50ZXJmYWNlcwogCi1NYmVkIFRMUyBjYWxscyBbZHJpdmVyIGZ1bmN0aW9ucyBhcyBzcGVjaWZpZWQgaW4gdGhlIFBTQSBDcnlwdG9ncmFwaHkgRHJpdmVyIEludGVyZmFjZSBzcGVjaWZpY2F0aW9uXShhcmNoaXRlY3R1cmUvcHNhLWRyaXZlci1pbnRlcmZhY2UubWQjKSBleGNlcHQgYXMgb3RoZXJ3aXNlIGluZGljYXRlZCBpbiB0aGlzIHNlY3Rpb24uCitNYmVkIFRMUyBjYWxscyBkcml2ZXIgZW50cnkgcG9pbnRzIFthcyBzcGVjaWZpZWQgaW4gdGhlIFBTQSBDcnlwdG9ncmFwaHkgRHJpdmVyIEludGVyZmFjZSBzcGVjaWZpY2F0aW9uXShwc2EtZHJpdmVyLWludGVyZmFjZS5odG1sI2RyaXZlci1lbnRyeS1wb2ludHMpIGV4Y2VwdCBhcyBvdGhlcndpc2UgaW5kaWNhdGVkIGluIHRoaXMgc2VjdGlvbi4KIAogIyMjIEtleSBoYW5kbGVzCiAKZGlmZiAtLWdpdCBhL2RvY3MvcHJvcG9zZWQvcHNhLWRyaXZlci1pbnRlcmZhY2UubWQgYi9kb2NzL3Byb3Bvc2VkL3BzYS1kcml2ZXItaW50ZXJmYWNlLm1kCmluZGV4IDhlZjk3MmEuLjU2ZTJiMjkgMTAwNjQ0Ci0tLSBhL2RvY3MvcHJvcG9zZWQvcHNhLWRyaXZlci1pbnRlcmZhY2UubWQKKysrIGIvZG9jcy9wcm9wb3NlZC9wc2EtZHJpdmVyLWludGVyZmFjZS5tZApAQCAtNSwxNSArNSwxNSBAQAogCiBUaGlzIHNwZWNpZmljYXRpb24gaXMgd29yayBpbiBwcm9ncmVzcyBhbmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gYmUgaW4gYSBiZXRhIHN0YWdlLiBUaGVyZSBpcyBvbmdvaW5nIHdvcmsgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIGluIE1iZWQgVExTLCB3aGljaCBpcyB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQU0EgQ3J5cHRvZ3JhcGh5IEFQSS4gQXQgdGhpcyBzdGFnZSwgQXJtIGRvZXMgbm90IGV4cGVjdCBtYWpvciBjaGFuZ2VzLCBidXQgbWlub3IgY2hhbmdlcyBhcmUgZXhwZWN0ZWQgYmFzZWQgb24gZXhwZXJpZW5jZSBmcm9tIHRoZSBmaXJzdCBpbXBsZW1lbnRhdGlvbiBhbmQgb24gZXh0ZXJuYWwgZmVlZGJhY2suCiAKLVRpbWUtc3RhbXA6ICIyMDIwLzA4LzA1IDIwOjM3OjI0IEdNVCIKK1RpbWUtc3RhbXA6ICIyMDIwLzA4LzE5IDE5OjQ3OjM5IEdNVCIKIAogIyMgSW50cm9kdWN0aW9uCiAKICMjIyBQdXJwb3NlIG9mIHRoZSBkcml2ZXIgaW50ZXJmYWNlCiAKLVRoZSBQU0EgQ3J5cHRvZ3JhcGh5IEFQSSBkZWZpbmVzIGFuIGludGVyZmFjZSB0aGF0IGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gcGVyZm9ybSBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgaW4gYSB1bmlmb3JtIHdheSByZWdhcmRsZXNzIG9mIGhvdyB0aGUgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkLiBVbmRlciB0aGUgaG9vZCwgZGlmZmVyZW50IGtleXMgbWF5IGJlIHByb2Nlc3NlZCBpbiBkaWZmZXJlbnQgaGFyZHdhcmUgb3IgaW4gZGlmZmVyZW50IGxvZ2ljYWwgcGFydGl0aW9ucywgYW5kIGRpZmZlcmVudCBhbGdvcml0aG1zIG1heSBpbnZvbHZlIGRpZmZlcmVudCBoYXJkd2FyZSBvciBzb2Z0d2FyZSBjb21wb25lbnRzLgorVGhlIFBTQSBDcnlwdG9ncmFwaHkgQVBJIGRlZmluZXMgYW4gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBwZXJmb3JtIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBpbiBhIHVuaWZvcm0gd2F5IHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQuIFVuZGVyIHRoZSBob29kLCBkaWZmZXJlbnQga2V5cyBtYXkgYmUgc3RvcmVkIGFuZCB1c2VkIGluIGRpZmZlcmVudCBoYXJkd2FyZSBvciBpbiBkaWZmZXJlbnQgbG9naWNhbCBwYXJ0aXRpb25zLCBhbmQgZGlmZmVyZW50IGFsZ29yaXRobXMgbWF5IGludm9sdmUgZGlmZmVyZW50IGhhcmR3YXJlIG9yIHNvZnR3YXJlIGNvbXBvbmVudHMuCiAKLVRoZSBkcml2ZXIgaW50ZXJmYWNlIGFsbG93cyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFBTQSBDcnlweXRvZ3JhcGh5IEFQSSB0byBiZSBidWlsdCBjb21wb3NpdGlvbmFsbHkuIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQU0EgQ3J5cHRvZ3JhcGh5IEFQSSBpcyBjb21wb3NlZCBvZiBhICoqY29yZSoqIGFuZCB6ZXJvIG9yIG1vcmUgKipkcml2ZXJzKiouIFRoZSBjb3JlIGhhbmRsZXMga2V5IG1hbmFnZW1lbnQsIGVuZm9yY2VzIGtleSB1c2FnZSBwb2xpY2llcywgYW5kIGRpc3BhdGNoZXMgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIGVpdGhlciB0byB0aGUgYXBwbGljYWJsZSBkcml2ZXIgb3IgdG8gYnVpbHQtaW4gY29kZS4KK1RoZSBkcml2ZXIgaW50ZXJmYWNlIGFsbG93cyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFBTQSBDcnlwdG9ncmFwaHkgQVBJIHRvIGJlIGJ1aWx0IGNvbXBvc2l0aW9uYWxseS4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFBTQSBDcnlwdG9ncmFwaHkgQVBJIGlzIGNvbXBvc2VkIG9mIGEgKipjb3JlKiogYW5kIHplcm8gb3IgbW9yZSAqKmRyaXZlcnMqKi4gVGhlIGNvcmUgaGFuZGxlcyBrZXkgbWFuYWdlbWVudCwgZW5mb3JjZXMga2V5IHVzYWdlIHBvbGljaWVzLCBhbmQgZGlzcGF0Y2hlcyBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgZWl0aGVyIHRvIHRoZSBhcHBsaWNhYmxlIGRyaXZlciBvciB0byBidWlsdC1pbiBjb2RlLgogCiBGdW5jdGlvbnMgaW4gdGhlIFBTQSBDcnlwdG9ncmFwaHkgQVBJIGludm9rZSBmdW5jdGlvbnMgaW4gdGhlIGNvcmUuIENvZGUgZnJvbSB0aGUgY29yZSBjYWxscyBkcml2ZXJzIGFzIGRlc2NyaWJlZCBpbiB0aGUgcHJlc2VudCBkb2N1bWVudC4KIApAQCAtMjEsMTIgKzIxLDEyIEBACiAKIFRoZSBQU0EgQ3J5cHRvZ3JhcGh5IGRyaXZlciBpbnRlcmZhY2Ugc3VwcG9ydHMgdHdvIHR5cGVzIG9mIGNyeXB0b3Byb2Nlc3NvcnMsIGFuZCBhY2NvcmRpbmdseSB0d28gdHlwZXMgb2YgZHJpdmVycy4KIAotKiAqKlRyYW5zcGFyZW50KiogZHJpdmVycyBpbXBsZW1lbnQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIG9uIGtleXMgdGhhdCBhcmUgcHJvdmlkZWQgaW4gY2xlYXJ0ZXh0IGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBvcGVyYXRpb24uIFRoZXkgYXJlIHR5cGljYWxseSB1c2VkIGZvciBoYXJkd2FyZSAqKmFjY2VsZXJhdG9ycyoqLiBXaGVuIGEgdHJhbnNwYXJlbnQgZHJpdmVyIGlzIGF2YWlsYWJsZSBmb3IgYSBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIG9mIHBhcmFtZXRlcnMgKGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtLCBrZXkgdHlwZSBhbmQgc2l6ZSwgZXRjLiksIGl0IGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbi4gVHJhbnNwYXJlbnQgZHJpdmVycyBjYW4gYWxzbyBiZSBwdXJlIHNvZnR3YXJlIGltcGxlbWVudGF0aW9ucyB0aGF0IGFyZSBkaXN0cmlidXRlZCBhcyBwbHVnLWlucyB0byBhIFBTQSBDcnlwdG8gaW1wbGVtZW50YXRpb24gKGZvciBleGFtcGxlLCBhbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiB3aXRoIGRpZmZlcmVudCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIG9yIGEgY2VydGlmaWVkIGltcGxlbWVudGF0aW9uKS4KKyogKipUcmFuc3BhcmVudCoqIGRyaXZlcnMgaW1wbGVtZW50IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBvbiBrZXlzIHRoYXQgYXJlIHByb3ZpZGVkIGluIGNsZWFydGV4dCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggb3BlcmF0aW9uLiBUaGV5IGFyZSB0eXBpY2FsbHkgdXNlZCBmb3IgaGFyZHdhcmUgKiphY2NlbGVyYXRvcnMqKi4gV2hlbiBhIHRyYW5zcGFyZW50IGRyaXZlciBpcyBhdmFpbGFibGUgZm9yIGEgcGFydGljdWxhciBjb21iaW5hdGlvbiBvZiBwYXJhbWV0ZXJzIChjcnlwdG9ncmFwaGljIGFsZ29yaXRobSwga2V5IHR5cGUgYW5kIHNpemUsIGV0Yy4pLCBpdCBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgc29mdHdhcmUgaW1wbGVtZW50YXRpb24uIFRyYW5zcGFyZW50IGRyaXZlcnMgY2FuIGFsc28gYmUgcHVyZSBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgZGlzdHJpYnV0ZWQgYXMgcGx1Zy1pbnMgdG8gYSBQU0EgQ3J5cHRvZ3JhcGh5IGltcGxlbWVudGF0aW9uIChmb3IgZXhhbXBsZSwgYW4gYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24gd2l0aCBkaWZmZXJlbnQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBvciBhIGNlcnRpZmllZCBpbXBsZW1lbnRhdGlvbikuCiAqICoqT3BhcXVlKiogZHJpdmVycyBpbXBsZW1lbnQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIG9uIGtleXMgdGhhdCBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIHByb3RlY3RlZCBlbnZpcm9ubWVudCBzdWNoIGFzIGEgKipzZWN1cmUgZWxlbWVudCoqLCBhIGhhcmR3YXJlIHNlY3VyaXR5IG1vZHVsZSwgYSBzbWFydGNhcmQsIGEgc2VjdXJlIGVuY2xhdmUsIGV0Yy4gQW4gb3BhcXVlIGRyaXZlciBpcyBpbnZva2VkIGZvciB0aGUgc3BlY2lmaWMgW2tleSBsb2NhdGlvbl0oI2xpZmV0aW1lcy1hbmQtbG9jYXRpb25zKSB0aGF0IHRoZSBkcml2ZXIgaXMgcmVnaXN0ZXJlZCBmb3I6IHRoZSBkaXNwYXRjaCBpcyBiYXNlZCBvbiB0aGUga2V5J3MgbGlmZXRpbWUuCiAKICMjIyBSZXF1aXJlbWVudHMKIAotVGhlIHByZXNlbnQgc3BlY2lmaWNhdGlvbiB3YXMgZGVzaWduZWQgdG8gZnVsZmlsIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCByZXF1aXJlbWVudHMuCitUaGUgcHJlc2VudCBzcGVjaWZpY2F0aW9uIHdhcyBkZXNpZ25lZCB0byBmdWxmaWxsIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCByZXF1aXJlbWVudHMuCiAKIFtSZXEucGx1Z2luc10gSXQgaXMgcG9zc2libGUgdG8gY29tYmluZSBtdWx0aXBsZSBkcml2ZXJzIGZyb20gZGlmZmVyZW50IHByb3ZpZGVycyBpbnRvIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uLCB3aXRob3V0IGFueSBwcmlvciBhcnJhbmdlbWVudCBvdGhlciB0aGFuIGNob29zaW5nIGNlcnRhaW4gbmFtZXMgYW5kIHZhbHVlcyBmcm9tIGRpc2pvaW50IG5hbWVzcGFjZXMuCiAKQEAgLTM0LDcgKzM0LDcgQEAKIAogW1JlcS50eXBlc10gU3VwcG9ydCBkcml2ZXJzIGZvciB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIGhhcmR3YXJlOiBhY2NlbGVyYXRvcnMgdGhhdCBvcGVyYXRlIG9uIGtleXMgaW4gY2xlYXJ0ZXh0OyBjcnlwdG9wcm9jZXNzb3JzIHRoYXQgY2FuIHdyYXAga2V5cyB3aXRoIGEgYnVpbHQtaW4ga2V5cyBidXQgbm90IHN0b3JlIHVzZXIga2V5czsgYW5kIGNyeXB0b3Byb2Nlc3NvcnMgdGhhdCBzdG9yZSBrZXkgbWF0ZXJpYWwuCiAKLVtSZXEucG9ydGFibGVdIFRoZSBpbnRlcmZhY2UgYmV0d2VlbiBkcml2ZXJzIGFuZCB0aGUgY29yZSBkb2VzIG5vdCBpbnZvbHZlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25zaWRlcmF0aW9uLiBEcml2ZXIgY2FsbHMgYXJlIHNpbXBsZSBDIGZ1bmN0aW9ucy4gSW50ZXJhY3Rpb25zIGJldHdlZW4gZHJpdmVyIGNvZGUgYW5kIGhhcmR3YXJlIGhhcHBlbiBpbnNpZGUgdGhlIGRyaXZlciAoYW5kIGluIGZhY3QgYSBkcml2ZXIgbmVlZCBub3QgaW52b2x2ZSBhbnkgaGFyZHdhcmUgYXQgYWxsKS4KK1tSZXEucG9ydGFibGVdIFRoZSBpbnRlcmZhY2UgYmV0d2VlbiBkcml2ZXJzIGFuZCB0aGUgY29yZSBkb2VzIG5vdCBpbnZvbHZlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25zaWRlcmF0aW9uLiBEcml2ZXIgY2FsbHMgYXJlIHNpbXBsZSBDIGZ1bmN0aW9uIGNhbGxzLiBJbnRlcmFjdGlvbnMgd2l0aCBwbGF0Zm9ybS1zcGVjaWZpYyBoYXJkd2FyZSBoYXBwZW4gb25seSBpbnNpZGUgdGhlIGRyaXZlciAoYW5kIGluIGZhY3QgYSBkcml2ZXIgbmVlZCBub3QgaW52b2x2ZSBhbnkgaGFyZHdhcmUgYXQgYWxsKS4KIAogW1JlcS5sb2NhdGlvbl0gQXBwbGljYXRpb25zIGNhbiB0ZWxsIHdoaWNoIGxvY2F0aW9uIHZhbHVlcyBjb3JyZXNwb25kIHRvIHdoaWNoIHNlY3VyZSBlbGVtZW50IGRyaXZlcnMuCiAKQEAgLTQ2LDU0ICs0Niw5NCBAQAogCiAjIyMgRGVsaXZlcmFibGVzIGZvciBhIGRyaXZlcgogCi1UbyB3cml0ZSBhIGRyaXZlciwgeW91IG5lZWQgdG8gaW1wbGVtZW50IHNvbWUgZnVuY3Rpb25zIHdpdGggQyBsaW5rYWdlLCBhbmQgdG8gZGVjbGFyZSB0aGVzZSBmdW5jdGlvbnMgaW4gYSAqKmRyaXZlciBkZXNjcmlwdGlvbiBmaWxlKiouIFRoZSBkcml2ZXIgZGVzY3JpcHRpb24gZmlsZSBkZWNsYXJlcyB3aGljaCBmdW5jdGlvbnMgdGhlIGRyaXZlciBpbXBsZW1lbnRzIGFuZCB3aGF0IGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtcyB0aGV5IHN1cHBvcnQuIERlcGVuZGluZyBvbiB0aGUgZHJpdmVyIHR5cGUsIHlvdSBtYXkgYWxzbyBuZWVkIHRvIGRlZmluZSBzb21lIEMgdHlwZXMgYW5kIG1hY3JvcyBpbiBhIGhlYWRlciBmaWxlLgorVG8gd3JpdGUgYSBkcml2ZXIsIHlvdSBuZWVkIHRvIGltcGxlbWVudCBzb21lIGZ1bmN0aW9ucyB3aXRoIEMgbGlua2FnZSwgYW5kIHRvIGRlY2xhcmUgdGhlc2UgZnVuY3Rpb25zIGluIGEgKipkcml2ZXIgZGVzY3JpcHRpb24gZmlsZSoqLiBUaGUgZHJpdmVyIGRlc2NyaXB0aW9uIGZpbGUgZGVjbGFyZXMgd2hpY2ggZnVuY3Rpb25zIHRoZSBkcml2ZXIgaW1wbGVtZW50cyBhbmQgd2hhdCBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMgdGhleSBzdXBwb3J0LiBJZiB0aGUgZHJpdmVyIGRlc2NyaXB0aW9uIHJlZmVyZW5jZXMgY3VzdG9tIHR5cGVzLCBtYWNyb3Mgb3IgY29uc3RhbnRzLCB5b3UgYWxzbyBuZWVkIHRvIHByb3ZpZGUgQyBoZWFkZXIgZmlsZXMgZGVmaW5pbmcgdGhvc2UgZWxlbWVudHMuCiAKIFRoZSBjb25jcmV0ZSBzeW50YXggZm9yIGEgZHJpdmVyIGRlc2NyaXB0aW9uIGZpbGUgaXMgSlNPTi4gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIEpTT04gZmlsZSBpcyBzcGVjaWZpZWQgaW4gdGhlIHNlY3Rpb24gW+KAnERyaXZlciBkZXNjcmlwdGlvbiBzeW50YXjigJ1dKCNkcml2ZXItZGVzY3JpcHRpb24tc3ludGF4KS4KIAogQSBkcml2ZXIgdGhlcmVmb3JlIGNvbnNpc3RzIG9mOgogCiAqIEEgZHJpdmVyIGRlc2NyaXB0aW9uIGZpbGUgKGluIEpTT04gZm9ybWF0KS4KLSogQyBoZWFkZXIgZmlsZXMgZGVmaW5pbmcgdGhlIHR5cGVzIHJlcXVpcmVkIGJ5IHRoZSBkcml2ZXIgZGVzY3JpcHRpb24uIFRoZSBuYW1lcyBvZiB0aGVzZSBoZWFkZXIgZmlsZXMgaXMgZGVjbGFyZWQgaW4gdGhlIGRyaXZlciBkZXNjcmlwdGlvbiBmaWxlLgotKiBBbiBvYmplY3QgZmlsZSBjb21waWxlZCBmb3IgdGhlIHRhcmdldCBwbGF0Zm9ybSBkZWZpbmluZyB0aGUgZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IHRoZSBkcml2ZXIgZGVzY3JpcHRpb24uIEltcGxlbWVudGF0aW9ucyBtYXkgYWxsb3cgZHJpdmVycyB0byBiZSBwcm92aWRlZCBhcyBzb3VyY2UgZmlsZXMgYW5kIGNvbXBpbGVkIHdpdGggdGhlIGNvcmUgaW5zdGVhZCBvZiBiZWluZyBwcmUtY29tcGlsZWQuCisqIEMgaGVhZGVyIGZpbGVzIGRlZmluaW5nIHRoZSB0eXBlcyByZXF1aXJlZCBieSB0aGUgZHJpdmVyIGRlc2NyaXB0aW9uLiBUaGUgbmFtZXMgb2YgdGhlc2UgaGVhZGVyIGZpbGVzIGFyZSBkZWNsYXJlZCBpbiB0aGUgZHJpdmVyIGRlc2NyaXB0aW9uIGZpbGUuCisqIEFuIG9iamVjdCBmaWxlIGNvbXBpbGVkIGZvciB0aGUgdGFyZ2V0IHBsYXRmb3JtIGRlZmluaW5nIHRoZSBlbnRyeSBwb2ludCBmdW5jdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSBkcml2ZXIgZGVzY3JpcHRpb24uIEltcGxlbWVudGF0aW9ucyBtYXkgYWxsb3cgZHJpdmVycyB0byBiZSBwcm92aWRlZCBhcyBzb3VyY2UgZmlsZXMgYW5kIGNvbXBpbGVkIHdpdGggdGhlIGNvcmUgaW5zdGVhZCBvZiBiZWluZyBwcmUtY29tcGlsZWQuCiAKIEhvdyB0byBwcm92aWRlIHRoZSBkcml2ZXIgZGVzY3JpcHRpb24gZmlsZSwgdGhlIEMgaGVhZGVyIGZpbGVzIGFuZCB0aGUgb2JqZWN0IGNvZGUgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50LgogCi1JbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHN1cHBvcnQgbXVsdGlwbGUgZHJpdmVycy4KLQogIyMjIERyaXZlciBkZXNjcmlwdGlvbiBzeW50YXgKIAogVGhlIGNvbmNyZXRlIHN5bnRheCBmb3IgYSBkcml2ZXIgZGVzY3JpcHRpb24gZmlsZSBpcyBKU09OLgogCisjIyMjIERyaXZlciBkZXNjcmlwdGlvbiBsaXN0CisKK1BTQSBDcnlwdG9ncmFwaHkgY29yZSBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHN1cHBvcnQgbXVsdGlwbGUgZHJpdmVycy4gVGhlIGRyaXZlciBkZXNjcmlwdGlvbiBmaWxlcyBhcmUgcGFzc2VkIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBhcyBhbiBvcmRlcmVkIGxpc3QgaW4gYW4gdW5zcGVjaWZpZWQgbWFubmVyLiBUaGlzIG1heSBiZSwgZm9yIGV4YW1wbGUsIGEgbGlzdCBvZiBmaWxlIG5hbWVzIHBhc3NlZCBvbiBhIGNvbW1hbmQgbGluZSwgb3IgYSBKU09OIGxpc3Qgd2hvc2UgZWxlbWVudHMgYXJlIGluZGl2aWR1YWwgZHJpdmVyIGRlc2NyaXB0aW9ucy4KKwogIyMjIyBEcml2ZXIgZGVzY3JpcHRpb24gdG9wLWxldmVsIGVsZW1lbnQKIAogQSBkcml2ZXIgZGVzY3JpcHRpb24gaXMgYSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKIAogKiBgInByZWZpeCJgIChtYW5kYXRvcnksIHN0cmluZykuIFRoaXMgbXVzdCBiZSBhIHZhbGlkIHByZWZpeCBmb3IgYSBDIGlkZW50aWZpZXIuIEFsbCB0aGUgdHlwZXMgYW5kIGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUgZHJpdmVyIGhhdmUgYSBuYW1lIHRoYXQgc3RhcnRzIHdpdGggdGhpcyBwcmVmaXggdW5sZXNzIG92ZXJyaWRkZW4gd2l0aCBhIGAibmFtZSJgIGVsZW1lbnQgaW4gdGhlIGFwcGxpY2FibGUgY2FwYWJpbGl0eSBhcyBkZXNjcmliZWQgYmVsb3cuCiAqIGAidHlwZSJgIChtYW5kYXRvcnksIHN0cmluZykuIE9uZSBvZiBgInRyYW5zcGFyZW50ImAgb3IgYCJvcGFxdWUiYC4KLSogYCJoZWFkZXJzImAgKG9wdGlvbmFsLCBhcnJheSBvZiBzdHJpbmdzKS4gQSBsaXN0IG9mIGhlYWRlciBmaWxlcy4gVGhlc2UgaGVhZGVyIGZpbGVzIG11c3QgZGVmaW5lIHRoZSB0eXBlcyBwcm92aWRlZCBieSB0aGUgZHJpdmVyIGFuZCBtYXkgZGVjbGFyZSB0aGUgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXIuIFRoZXkgbWF5IGluY2x1ZGUgb3RoZXIgUFNBIGhlYWRlcnMgYW5kIHN0YW5kYXJkIGhlYWRlcnMgb2YgdGhlIHBsYXRmb3JtLiBXaGV0aGVyIHRoZXkgbWF5IGluY2x1ZGUgb3RoZXIgaGVhZGVycyBpcyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gSWYgb21pdHRlZCwgdGhlIGxpc3Qgb2YgaGVhZGVycyBpcyBlbXB0eS4KKyogYCJoZWFkZXJzImAgKG9wdGlvbmFsLCBhcnJheSBvZiBzdHJpbmdzKS4gQSBsaXN0IG9mIGhlYWRlciBmaWxlcy4gVGhlc2UgaGVhZGVyIGZpbGVzIG11c3QgZGVmaW5lIHRoZSB0eXBlcywgbWFjcm9zIGFuZCBjb25zdGFudHMgcmVmZXJlbmNlZCBieSB0aGUgZHJpdmVyIGRlc2NyaXB0aW9uLiBUaGV5IG1heSBkZWNsYXJlIHRoZSBlbnRyeSBwb2ludCBmdW5jdGlvbnMsIGJ1dCB0aGlzIGlzIG5vdCByZXF1aXJlZC4gVGhleSBtYXkgaW5jbHVkZSBvdGhlciBQU0EgaGVhZGVycyBhbmQgc3RhbmRhcmQgaGVhZGVycyBvZiB0aGUgcGxhdGZvcm0uIFdoZXRoZXIgdGhleSBtYXkgaW5jbHVkZSBvdGhlciBoZWFkZXJzIGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLiBJZiBvbWl0dGVkLCB0aGUgbGlzdCBvZiBoZWFkZXJzIGlzIGVtcHR5LiBUaGUgaGVhZGVyIGZpbGVzIG11c3QgYmUgcHJlc2VudCBhdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uIHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5IG9uIHRoZSBjb21waWxlcidzIGluY2x1ZGUgcGF0aCB3aGVuIGNvbXBpbGluZyBnbHVlIGNvZGUgYmV0d2VlbiB0aGUgY29yZSBhbmQgdGhlIGRyaXZlcnMuCiAqIGAiY2FwYWJpbGl0aWVzImAgKG1hbmRhdG9yeSwgYXJyYXkgb2YgW2NhcGFiaWxpdGllc10oI2RyaXZlci1kZXNjcmlwdGlvbi1jYXBhYmlsaXR5KSkuCiBBIGxpc3Qgb2YgKipjYXBhYmlsaXRpZXMqKi4gRWFjaCBjYXBhYmlsaXR5IGRlc2NyaWJlcyBhIGZhbWlseSBvZiBmdW5jdGlvbnMgdGhhdCB0aGUgZHJpdmVyIGltcGxlbWVudHMgZm9yIGEgY2VydGFpbiBjbGFzcyBvZiBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMuCiAqIGAia2V5X2NvbnRleHQiYCAobm90IHBlcm1pdHRlZCBmb3IgdHJhbnNwYXJlbnQgZHJpdmVycywgbWFuZGF0b3J5IGZvciBvcGFxdWUgZHJpdmVycyk6IGluZm9ybWF0aW9uIGFib3V0IHRoZSBbcmVwcmVzZW50YXRpb24gb2Yga2V5c10oI2tleS1mb3JtYXQtZm9yLW9wYXF1ZS1kcml2ZXJzKS4KICogYCJwZXJzaXN0ZW50X3N0YXRlX3NpemUiYCAobm90IHBlcm1pdHRlZCBmb3IgdHJhbnNwYXJlbnQgZHJpdmVycywgb3B0aW9uYWwgZm9yIG9wYXF1ZSBkcml2ZXJzLCBpbnRlZ2VyIG9yIHN0cmluZykuIFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBbcGVyc2lzdGVudCBzdGF0ZSBvZiB0aGUgZHJpdmVyXSgjb3BhcXVlLWRyaXZlci1wZXJzaXN0ZW50LXN0YXRlKS4gVGhpcyBtYXkgYmUgZWl0aGVyIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgb3IgYSBDIGNvbnN0YW50IGV4cHJlc3Npb24gb2YgdHlwZSBgc2l6ZV90YC4KICogYCJsb2NhdGlvbiJgIChub3QgcGVybWl0dGVkIGZvciB0cmFuc3BhcmVudCBkcml2ZXJzLCBvcHRpb25hbCBmb3Igb3BhcXVlIGRyaXZlcnMsIGludGVnZXIgb3Igc3RyaW5nKS4gVGhlIFtsb2NhdGlvbiB2YWx1ZV0oI2xpZmV0aW1lcy1hbmQtbG9jYXRpb25zKSBmb3Igd2hpY2ggdGhpcyBkcml2ZXIgaXMgaW52b2tlZC4gSW4gb3RoZXIgd29yZHMsIHRoaXMgZGV0ZXJtaW5lcyB0aGUgbGlmZXRpbWVzIGZvciB3aGljaCB0aGUgZHJpdmVyIGlzIGludm9rZWQuIFRoaXMgbWF5IGJlIGVpdGhlciBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG9yIGEgQyBjb25zdGFudCBleHByZXNzaW9uIG9mIHR5cGUgYHBzYV9rZXlfbG9jYXRpb25fdGAuCiAKLSMjIyMgRHJpdmVyIGRlc2NyaXB0aW9uIGNhcGFiaWxpdHkKKyMjIyBEcml2ZXIgZGVzY3JpcHRpb24gY2FwYWJpbGl0eQorCisjIyMjIENhcGFiaWxpdHkgc3ludGF4CiAKIEEgY2FwYWJpbGl0eSBkZWNsYXJlcyBhIGZhbWlseSBvZiBmdW5jdGlvbnMgdGhhdCB0aGUgZHJpdmVyIGltcGxlbWVudHMgZm9yIGEgY2VydGFpbiBjbGFzcyBvZiBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMuIFRoZSBjYXBhYmlsaXR5IHNwZWNpZmllcyB3aGljaCBrZXkgdHlwZXMgYW5kIGFsZ29yaXRobXMgYXJlIGNvdmVyZWQgYW5kIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCBpdC4KIAogQSBjYXBhYmlsaXR5IGlzIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CiAKLSogYCJmdW5jdGlvbnMiYCAob3B0aW9uYWwsIGxpc3Qgb2Ygc3RyaW5ncykuIEVhY2ggZWxlbWVudCBpcyB0aGUgbmFtZSBvZiBhIFtkcml2ZXIgZnVuY3Rpb25dKCNkcml2ZXItZnVuY3Rpb25zKSBvciBkcml2ZXIgZnVuY3Rpb24gZmFtaWx5LiBJZiBzcGVjaWZpZWQsIHRoZSBjb3JlIHdpbGwgaW52b2tlIHRoaXMgY2FwYWJpbGl0eSBvZiB0aGUgZHJpdmVyIG9ubHkgd2hlbiBwZXJmb3JtaW5nIG9uZSBvZiB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbnMuIElmIG9taXR0ZWQsIHRoZSBgImFsZ29yaXRobXMiYCBwcm9wZXJ0eSBpcyBtYW5kYXRvcnkgYW5kIHRoZSBjb3JlIHdpbGwgaW52b2tlIHRoaXMgY2FwYWJpbGl0eSBvZiB0aGUgZHJpdmVyIGZvciBhbGwgb3BlcmF0aW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtcy4gVGhlIGRyaXZlciBtdXN0IGltcGxlbWVudCBhbGwgdGhlIHNwZWNpZmllZCBvciBpbXBsaWVkIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyB0aGUgdHlwZXMgaWYgYXBwbGljYWJsZS4KKyogYCJlbnRyeV9wb2ludHMiYCAobWFuZGF0b3J5LCBsaXN0IG9mIHN0cmluZ3MpLiBFYWNoIGVsZW1lbnQgaXMgdGhlIG5hbWUgb2YgYSBbZHJpdmVyIGVudHJ5IHBvaW50XSgjZHJpdmVyLWVudHJ5LXBvaW50cykgb3IgZHJpdmVyIGVudHJ5IHBvaW50IGZhbWlseS4gQW4gZW50cnkgcG9pbnQgaXMgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IHRoZSBkcml2ZXIuIElmIHNwZWNpZmllZCwgdGhlIGNvcmUgd2lsbCBpbnZva2UgdGhpcyBjYXBhYmlsaXR5IG9mIHRoZSBkcml2ZXIgb25seSB3aGVuIHBlcmZvcm1pbmcgb25lIG9mIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9ucy4gVGhlIGRyaXZlciBtdXN0IGltcGxlbWVudCBhbGwgdGhlIHNwZWNpZmllZCBlbnRyeSBwb2ludHMsIGFzIHdlbGwgYXMgdGhlIHR5cGVzIGlmIGFwcGxpY2FibGUuCiAqIGAiYWxnb3JpdGhtcyJgIChvcHRpb25hbCwgbGlzdCBvZiBzdHJpbmdzKS4gRWFjaCBlbGVtZW50IGlzIGFuIFthbGdvcml0aG0gc3BlY2lmaWNhdGlvbl0oI2FsZ29yaXRobS1zcGVjaWZpY2F0aW9ucykuIElmIHNwZWNpZmllZCwgdGhlIGNvcmUgd2lsbCBpbnZva2UgdGhpcyBjYXBhYmlsaXR5IG9mIHRoZSBkcml2ZXIgb25seSB3aGVuIHBlcmZvcm1pbmcgb25lIG9mIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtcy4gSWYgb21pdHRlZCwgdGhlIGNvcmUgd2lsbCBpbnZva2UgdGhpcyBjYXBhYmlsaXR5IGZvciBhbGwgYXBwbGljYWJsZSBhbGdvcml0aG1zLgogKiBgImtleV90eXBlcyJgIChvcHRpb25hbCwgbGlzdCBvZiBzdHJpbmdzKS4gRWFjaCBlbGVtZW50IGlzIGEgW2tleSB0eXBlIHNwZWNpZmljYXRpb25dKCNrZXktdHlwZS1zcGVjaWZpY2F0aW9ucykuIElmIHNwZWNpZmllZCwgdGhlIGNvcmUgd2lsbCBpbnZva2UgdGhpcyBjYXBhYmlsaXR5IG9mIHRoZSBkcml2ZXIgb25seSBmb3Igb3BlcmF0aW9ucyBpbnZvbHZpbmcgYSBrZXkgd2l0aCBvbmUgb2YgdGhlIHNwZWNpZmllZCBrZXkgdHlwZXMuIElmIG9taXR0ZWQsIHRoZSBjb3JlIHdpbGwgaW52b2tlIHRoaXMgY2FwYWJpbGl0eSBvZiB0aGUgZHJpdmVyIGZvciBhbGwgYXBwbGljYWJsZSBrZXkgdHlwZXMuCiAqIGAia2V5X3NpemVzImAgKG9wdGlvbmFsLCBsaXN0IG9mIGludGVnZXJzKS4gSWYgc3BlY2lmaWVkLCB0aGUgY29yZSB3aWxsIGludm9rZSB0aGlzIGNhcGFiaWxpdHkgb2YgdGhlIGRyaXZlciBvbmx5IGZvciBvcGVyYXRpb25zIGludm9sdmluZyBhIGtleSB3aXRoIG9uZSBvZiB0aGUgc3BlY2lmaWVkIGtleSBzaXplcy4gSWYgb21pdHRlZCwgdGhlIGNvcmUgd2lsbCBpbnZva2UgdGhpcyBjYXBhYmlsaXR5IG9mIHRoZSBkcml2ZXIgZm9yIGFsbCBhcHBsaWNhYmxlIGtleSBzaXplcy4gS2V5IHNpemVzIGFyZSBleHByZXNzZWQgaW4gYml0cy4KLSogYCJuYW1lcyJgIChvcHRpb25hbCwgb2JqZWN0KS4gQSBtYXBwaW5nIGZyb20gZW50cnkgcG9pbnQgbmFtZXMgZGVzY3JpYmVkIGJ5IHRoZSBgImZ1bmN0aW9ucyJgIHByb3BlcnR5LCB0byB0aGUgbmFtZSBvZiB0aGUgQyBmdW5jdGlvbiBpbiB0aGUgZHJpdmVyIHRoYXQgaW1wbGVtZW50cyB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbi4gSWYgYSBmdW5jdGlvbiBpcyBub3QgbGlzdGVkIGhlcmUsIG5hbWUgb2YgdGhlIGRyaXZlciBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgaXQgaXMgdGhlIGRyaXZlcidzIHByZWZpeCBmb2xsb3dlZCBieSBhbiB1bmRlcnNjb3JlIChgX2ApIGZvbGxvd2VkIGJ5IHRoZSBmdW5jdGlvbiBuYW1lLiBJZiB0aGlzIHByb3BlcnR5IGlzIG9taXR0ZWQsIGl0IGlzIGVxdWl2YWxlbnQgdG8gYW4gZW1wdHkgb2JqZWN0IChzbyBlYWNoIGVudHJ5IHBvaW50ICpzdWZmaXgqIGlzIGltcGxlbWVudGVkIGJ5IGEgZnVuY3Rpb24gY2FsbGVkICpwcmVmaXgqYF9gKnN1ZmZpeCopLgotKiBgImZhbGxiYWNrImAgKG9wdGlvbmFsIGZvciB0cmFuc3BhcmVudCBkcml2ZXJzLCBub3QgcGVybWl0dGVkIGZvciBvcGFxdWUgZHJpdmVycywgYm9vbGVhbikuIElmIHByZXNlbnQgYW5kIHRydWUsIHRoZSBkcml2ZXIgbWF5IHJldHVybiBgUFNBX0VSUk9SX05PVF9TVVBQT1JURURgLCBpbiB3aGljaCBjYXNlIHRoZSBjb3JlIHNob3VsZCBjYWxsIGFub3RoZXIgZHJpdmVyIG9yIHVzZSBidWlsdC1pbiBjb2RlIHRvIHBlcmZvcm0gdGhpcyBvcGVyYXRpb24uIElmIGFic2VudCBvciBmYWxzZSwgdGhlIGNvcmUgc2hvdWxkIG5vdCBpbmNsdWRlIGJ1aWx0LWluIGNvZGUgdG8gcGVyZm9ybSB0aGlzIHBhcnRpY3VsYXIgY3J5cHRvZ3JhcGhpYyBtZWNoYW5pc20uIFNlZSB0aGUgc2VjdGlvbiDigJxbRmFsbGJhY2tdKCNmYWxsYmFjaynigJ0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisqIGAibmFtZXMiYCAob3B0aW9uYWwsIG9iamVjdCkuIEEgbWFwcGluZyBmcm9tIGVudHJ5IHBvaW50IG5hbWVzIGRlc2NyaWJlZCBieSB0aGUgYCJlbnRyeV9wb2ludHMiYCBwcm9wZXJ0eSwgdG8gdGhlIG5hbWUgb2YgdGhlIEMgZnVuY3Rpb24gaW4gdGhlIGRyaXZlciB0aGF0IGltcGxlbWVudHMgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24uIElmIGEgZnVuY3Rpb24gaXMgbm90IGxpc3RlZCBoZXJlLCBuYW1lIG9mIHRoZSBkcml2ZXIgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIGl0IGlzIHRoZSBkcml2ZXIncyBwcmVmaXggZm9sbG93ZWQgYnkgYW4gdW5kZXJzY29yZSAoYF9gKSBmb2xsb3dlZCBieSB0aGUgZnVuY3Rpb24gbmFtZS4gSWYgdGhpcyBwcm9wZXJ0eSBpcyBvbWl0dGVkLCBpdCBpcyBlcXVpdmFsZW50IHRvIGFuIGVtcHR5IG9iamVjdCAoc28gZWFjaCBlbnRyeSBwb2ludCAqc3VmZml4KiBpcyBpbXBsZW1lbnRlZCBieSBhIGZ1bmN0aW9uIGNhbGxlZCAqcHJlZml4KmBfYCpzdWZmaXgqKS4KKyogYCJmYWxsYmFjayJgIChvcHRpb25hbCBmb3IgdHJhbnNwYXJlbnQgZHJpdmVycywgbm90IHBlcm1pdHRlZCBmb3Igb3BhcXVlIGRyaXZlcnMsIGJvb2xlYW4pLiBJZiBwcmVzZW50IGFuZCB0cnVlLCB0aGUgZHJpdmVyIG1heSByZXR1cm4gYFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEYCwgaW4gd2hpY2ggY2FzZSB0aGUgY29yZSBzaG91bGQgY2FsbCBhbm90aGVyIGRyaXZlciBvciB1c2UgYnVpbHQtaW4gY29kZSB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLiBJZiBhYnNlbnQgb3IgZmFsc2UsIHRoZSBkcml2ZXIgaXMgZXhwZWN0ZWQgdG8gZnVsbHkgc3VwcG9ydCB0aGUgbWVjaGFuaXNtcyBkZXNjcmliZWQgYnkgdGhpcyBjYXBhYmlsaXR5LiBTZWUgdGhlIHNlY3Rpb24g4oCcW0ZhbGxiYWNrXSgjZmFsbGJhY2sp4oCdIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCi1FeGFtcGxlOiB0aGUgZm9sbG93aW5nIGNhcGFiaWxpdHkgZGVjbGFyZXMgdGhhdCB0aGUgZHJpdmVyIGNhbiBwZXJmb3JtIGRldGVybWluaXN0aWMgRUNEU0Egc2lnbmF0dXJlcyB1c2luZyBTSEEtMjU2IG9yIFNIQS0zODQgd2l0aCBhIFNFQ1AyNTZSMSBvciBTRUNQMzg0UjEgcHJpdmF0ZSBrZXkgKHdpdGggZWl0aGVyIGhhc2ggYmVpbmcgcG9zc2libGUgaW4gY29tYmluYXRpb24gd2l0aCBlaXRoZXIgY3VydmUpLiBJZiB0aGUgcHJlZml4IG9mIHRoaXMgZHJpdmVyIGlzIGAiYWNtZSJgLCB0aGUgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyB0aGUgc2lnbmF0dXJlIGlzIGNhbGxlZCBgYWNtZV9zaWduX2hhc2hgLgorIyMjIyBDYXBhYmlsaXR5IHNlbWFudGljcworCitXaGVuIHRoZSBQU0EgQ3J5cHRvZ3JhcGh5IGltcGxlbWVudGF0aW9uIHBlcmZvcm1zIGEgY3J5cHRvZ3JhcGhpYyBtZWNoYW5pc20sIGl0IGludm9rZXMgYXZhaWxhYmxlIGRyaXZlciBlbnRyeSBwb2ludHMgYXMgZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIFvigJxEcml2ZXIgZW50cnkgcG9pbnRz4oCdXSgjZHJpdmVyLWVudHJ5LXBvaW50cykuCisKK0EgZHJpdmVyIGlzIGNvbnNpZGVyZWQgYXZhaWxhYmxlIGZvciBhIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtIHRoYXQgaW52b2tlcyBhIGdpdmVuIGVudHJ5IHBvaW50IGlmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworKiBUaGUgZHJpdmVyIHNwZWNpZmljYXRpb24gaW5jbHVkZXMgYSBjYXBhYmlsaXR5IHdob3NlIGAiZW50cnlfcG9pbnRzImAgbGlzdCBlaXRoZXIgaW5jbHVkZXMgdGhlIGVudHJ5IHBvaW50IG9yIGluY2x1ZGVzIGFuIGVudHJ5IHBvaW50IGZhbWlseSB0aGF0IGluY2x1ZGVzIHRoZSBlbnRyeSBwb2ludC4KKyogSWYgdGhlIG1lY2hhbmlzbSBpbnZvbHZlcyBhbiBhbGdvcml0aG06CisgICAgKiBlaXRoZXIgdGhlIGNhcGFiaWxpdHkgZG9lcyBub3QgaGF2ZSBhbiBgImFsZ29yaXRobXMiYCBwcm9wZXJ0eTsKKyAgICAqIG9yIHRoZSB2YWx1ZSBvZiB0aGUgY2FwYWJpbGl0eSdzIGAiYWxnb3JpdGhtcyJgIHByb3BlcnR5IGluY2x1ZGVzIGFuIFthbGdvcml0aG0gc3BlY2lmaWNhdGlvbl0oI2FsZ29yaXRobS1zcGVjaWZpY2F0aW9ucykgdGhhdCBtYXRjaGVzIHRoaXMgYWxnb3JpdGhtLgorKiBJZiB0aGUgbWVjaGFuaXNtIGludm9sdmVzIGEga2V5OgorICAgICogZWl0aGVyIHRoZSBrZXkgaXMgdHJhbnNwYXJlbnQgKGl0cyBsb2NhdGlvbiBpcyBgUFNBX0tFWV9MT0NBVElPTl9MT0NBTF9TVE9SQUdFYCkgYW5kIHRoZSBkcml2ZXIgaXMgdHJhbnNwYXJlbnQ7CisgICAgKiBvciB0aGUga2V5IGlzIG9wYXF1ZSAoaXRzIGxvY2F0aW9uIGlzIG5vdCBgUFNBX0tFWV9MT0NBVElPTl9MT0NBTF9TVE9SQUdFYCkgYW5kIHRoZSBkcml2ZXIgaXMgYW4gb3BhcXVlIGRyaXZlciB3aG9zZSBsb2NhdGlvbiBpcyB0aGUga2V5J3MgbG9jYXRpb24uCisqIElmIHRoZSBtZWNoYW5pc20gaW52b2x2ZXMgYSBrZXk6CisgICAgKiBlaXRoZXIgdGhlIGNhcGFiaWxpdHkgZG9lcyBub3QgaGF2ZSBhIGAia2V5X3R5cGVzImAgcHJvcGVydHk7CisgICAgKiBvciB0aGUgdmFsdWUgb2YgdGhlIGNhcGFiaWxpdHkncyBgImtleV90eXBlcyJgIHByb3BlcnR5IGluY2x1ZGVzIGEgW2tleSB0eXBlIHNwZWNpZmljYXRpb25dKCNrZXktdHlwZS1zcGVjaWZpY2F0aW9ucykgdGhhdCBtYXRjaGVzIHRoaXMgYWxnb3JpdGhtLgorKiBJZiB0aGUgbWVjaGFuaXNtIGludm9sdmVzIGEga2V5OgorICAgICogZWl0aGVyIHRoZSBjYXBhYmlsaXR5IGRvZXMgbm90IGhhdmUgYSBgImtleV9zaXplcyJgIHByb3BlcnR5OworICAgICogb3IgdGhlIHZhbHVlIG9mIHRoZSBjYXBhYmlsaXR5J3MgYCJrZXlfc2l6ZXMiYCBwcm9wZXJ0eSBpbmNsdWRlcyB0aGUga2V5J3Mgc2l6ZS4KKworSWYgYSBkcml2ZXIgaW5jbHVkZXMgbXVsdGlwbGUgYXBwbGljYWJsZSBjYXBhYmlsaXRpZXMgZm9yIGEgZ2l2ZW4gY29tYmluYXRpb24gb2YgZW50cnkgcG9pbnQsIGFsZ29yaXRobSwga2V5IHR5cGUgYW5kIGtleSBzaXplLCBhbmQgYWxsIHRoZSBjYXBhYmlsaXRpZXMgbWFwIHRoZSBlbnRyeSBwb2ludCB0byB0aGUgc2FtZSBmdW5jdGlvbiBuYW1lLCB0aGUgZHJpdmVyIGlzIGNvbnNpZGVyZWQgYXZhaWxhYmxlIGZvciB0aGlzIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtLiBJZiBhIGRyaXZlciBpbmNsdWRlcyBtdWx0aXBsZSBhcHBsaWNhYmxlIGNhcGFiaWxpdGllcyBmb3IgYSBnaXZlbiBjb21iaW5hdGlvbiBvZiBlbnRyeSBwb2ludCwgYWxnb3JpdGhtLCBrZXkgdHlwZSBhbmQga2V5IHNpemUsIGFuZCBhdCBsZWFzdCB0d28gb2YgdGhlc2UgY2FwYWJpbGl0aWVzIG1hcCB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIGRpZmZlcmVudCBmdW5jdGlvbiBuYW1lcywgdGhlIGRyaXZlciBzcGVjaWZpY2F0aW9uIGlzIGludmFsaWQuCisKK0lmIG11bHRpcGxlIHRyYW5zcGFyZW50IGRyaXZlcnMgaGF2ZSBhcHBsaWNhYmxlIGNhcGFiaWxpdGllcyBmb3IgYSBnaXZlbiBjb21iaW5hdGlvbiBvZiBlbnRyeSBwb2ludCwgYWxnb3JpdGhtLCBrZXkgdHlwZSBhbmQga2V5IHNpemUsIHRoZSBmaXJzdCBtYXRjaGluZyBkcml2ZXIgaW4gdGhlIFtzcGVjaWZpY2F0aW9uIGxpc3RdKCNkcml2ZXItZGVzY3JpcHRpb24tbGlzdCkgaXMgaW52b2tlZC4gSWYgdGhlIGNhcGFiaWxpdHkgaGFzIFtmYWxsYmFja10oI2ZhbGxiYWNrKSBlbmFibGVkIGFuZCB0aGUgZmlyc3QgZHJpdmVyIHJldHVybnMgYFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEYCwgdGhlIG5leHQgbWF0Y2hpbmcgZHJpdmVyIGlzIGludm9rZWQsIGFuZCBzbyBvbi4KKworSWYgbXVsdGlwbGUgb3BhcXVlIGRyaXZlcnMgaGF2ZSB0aGUgc2FtZSBsb2NhdGlvbiwgdGhlIGxpc3Qgb2YgZHJpdmVyIHNwZWNpZmljYXRpb25zIGlzIGludmFsaWQuCisKKyMjIyMgQ2FwYWJpbGl0eSBleGFtcGxlcworCitFeGFtcGxlwqAxOiB0aGUgZm9sbG93aW5nIGNhcGFiaWxpdHkgZGVjbGFyZXMgdGhhdCB0aGUgZHJpdmVyIGNhbiBwZXJmb3JtIGRldGVybWluaXN0aWMgRUNEU0Egc2lnbmF0dXJlcyAoYnV0IG5vdCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uKSB1c2luZyBhbnkgaGFzaCBhbGdvcml0aG0gYW5kIGFueSBjdXJ2ZSB0aGF0IHRoZSBjb3JlIHN1cHBvcnRzLiBJZiB0aGUgcHJlZml4IG9mIHRoaXMgZHJpdmVyIGlzIGAiYWNtZSJgLCB0aGUgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyB0aGUgc2lnbmF0dXJlIGlzIGNhbGxlZCBgYWNtZV9zaWduX2hhc2hgLgogYGBgCiB7Ci0gICAgImZ1bmN0aW9ucyI6IFsic2lnbl9oYXNoIl0sCisgICAgImVudHJ5X3BvaW50cyI6IFsic2lnbl9oYXNoIl0sCisgICAgImFsZ29yaXRobXMiOiBbIlBTQV9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQShQU0FfQUxHX0FOWV9IQVNIKSJdLAorfQorYGBgCisKK0V4YW1wbGXCoDI6IHRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0eSBkZWNsYXJlcyB0aGF0IHRoZSBkcml2ZXIgY2FuIHBlcmZvcm0gZGV0ZXJtaW5pc3RpYyBFQ0RTQSBzaWduYXR1cmVzIHVzaW5nIFNIQS0yNTYgb3IgU0hBLTM4NCB3aXRoIGEgU0VDUDI1NlIxIG9yIFNFQ1AzODRSMSBwcml2YXRlIGtleSAod2l0aCBlaXRoZXIgaGFzaCBiZWluZyBwb3NzaWJsZSBpbiBjb21iaW5hdGlvbiB3aXRoIGVpdGhlciBjdXJ2ZSkuIElmIHRoZSBwcmVmaXggb2YgdGhpcyBkcml2ZXIgaXMgYCJhY21lImAsIHRoZSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIHRoZSBzaWduYXR1cmUgaXMgY2FsbGVkIGBhY21lX3NpZ25faGFzaGAuCitgYGAKK3sKKyAgICAiZW50cnlfcG9pbnRzIjogWyJzaWduX2hhc2giXSwKICAgICAiYWxnb3JpdGhtcyI6IFsiUFNBX0FMR19ERVRFUk1JTklTVElDX0VDRFNBKFBTQV9BTEdfU0hBXzI1NikiLAogICAgICAgICAgICAgICAgICAgICJQU0FfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EoUFNBX0FMR19TSEFfMzg0KSJdLAogICAgICJrZXlfdHlwZXMiOiBbIlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19DVVJWRV9TRUNQX1IxKSJdLApAQCAtMTA1LDcgKzE0NSw3IEBACiAKICMjIyMgQWxnb3JpdGhtIHNwZWNpZmljYXRpb25zCiAKLUFuIGFsZ29yaXRobSBzcGVjaWZpY2F0aW9uIGlzIGEgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgYSBgUFNBX0FMR194eHhgIG1hY3JvIHRoYXQgc3BlY2lmaWVzIGEgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG0gZGVmaW5lZCBieSB0aGUgUFNBIENyeXB0b2dyYXBoeSBBUEkuIElmIHRoZSBtYWNybyB0YWtlcyBhcmd1bWVudHMsIHRoZSBzdHJpbmcgbXVzdCBoYXZlIHRoZSBzeW50YXggb2YgYSBDIG1hY3JvIGNhbGwgYW5kIGVhY2ggYXJndW1lbnQgbXVzdCBiZSBhbiBhbGdvcml0aG0gc3BlY2lmaWNhdGlvbiBvciBhIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwgbGl0ZXJhbCB3aXRoIG5vIHN1ZmZpeCwgZGVwZW5kaW5nIG9uIHRoZSBleHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50LgorQW4gYWxnb3JpdGhtIHNwZWNpZmljYXRpb24gaXMgYSBzdHJpbmcgY29uc2lzdGluZyBvZiBhIGBQU0FfQUxHX3h4eGAgbWFjcm8gdGhhdCBzcGVjaWZpZXMgYSBjcnlwdG9ncmFwaGljIGFsZ29yaXRobSBvciBhbiBhbGdvcml0aG0gd2lsZGNhcmQgcG9saWN5IGRlZmluZWQgYnkgdGhlIFBTQSBDcnlwdG9ncmFwaHkgQVBJLiBJZiB0aGUgbWFjcm8gdGFrZXMgYXJndW1lbnRzLCB0aGUgc3RyaW5nIG11c3QgaGF2ZSB0aGUgc3ludGF4IG9mIGEgQyBtYWNybyBjYWxsIGFuZCBlYWNoIGFyZ3VtZW50IG11c3QgYmUgYW4gYWxnb3JpdGhtIHNwZWNpZmljYXRpb24gb3IgYSBkZWNpbWFsIG9yIGhleGFkZWNpbWFsIGxpdGVyYWwgd2l0aCBubyBzdWZmaXgsIGRlcGVuZGluZyBvbiB0aGUgZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudC4KIAogU3BhY2VzIGFyZSBvcHRpb25hbCBhZnRlciBjb21tYXMuIFdoZXRoZXIgb3RoZXIgd2hpdGVzcGFjZSBpcyBwZXJtaXR0ZWQgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuCiAKQEAgLTExNCw2ICsxNTQsNyBAQAogUFNBX0FMR19TSEFfMjU2CiBQU0FfQUxHX0hNQUMoUFNBX0FMR19TSEFfMjU2KQogUFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpCitQU0FfQUxHX1JTQV9QU1MoUFNBX0FMR19BTllfSEFTSCkKIGBgYAogCiAjIyMjIEtleSB0eXBlIHNwZWNpZmljYXRpb25zCkBAIC0xMzUsOSArMTc2LDkgQEAKIAogRHJpdmVycyBkZWZpbmUgZnVuY3Rpb25zLCBlYWNoIG9mIHdoaWNoIGltcGxlbWVudHMgYW4gYXNwZWN0IG9mIGEgY2FwYWJpbGl0eSBvZiBhIGRyaXZlciwgc3VjaCBhcyBhIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uLCBhIHBhcnQgb2YgYSBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiwgb3IgYSBrZXkgbWFuYWdlbWVudCBhY3Rpb24uIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHRoZSAqKmVudHJ5IHBvaW50cyoqIG9mIHRoZSBkcml2ZXIuIE1vc3QgZHJpdmVyIGVudHJ5IHBvaW50cyBjb3JyZXNwb25kIHRvIGEgcGFydGljdWxhciBmdW5jdGlvbiBpbiB0aGUgUFNBIENyeXB0b2dyYXBoeSBBUEkuIEZvciBleGFtcGxlLCBpZiBhIGNhbGwgdG8gYHBzYV9zaWduX2hhc2goKWAgaXMgZGlzcGF0Y2hlZCB0byBhIGRyaXZlciwgaXQgaW52b2tlcyB0aGUgZHJpdmVyJ3MgYHNpZ25faGFzaGAgZnVuY3Rpb24uCiAKLUFsbCBkcml2ZXIgZW50cnkgcG9pbnRzIHJldHVybiBhIHN0YXR1cyBvZiB0eXBlIGBwc2Ffc3RhdHVzX3RgIHdoaWNoIHNob3VsZCB1c2UgdGhlIHN0YXR1cyBjb2RlcyBkb2N1bWVudGVkIGZvciBQU0Egc2VydmljZXMgaW4gZ2VuZXJhbCBhbmQgZm9yIFBTQSBDcnlwdG8gaW4gcGFydGljdWxhcjogYFBTQV9TVUNDRVNTYCBpbmRpY2F0ZXMgdGhhdCB0aGUgZnVuY3Rpb24gc3VjY2VlZGVkLCBhbmQgYFBTQV9FUlJPUl94eHhgIHZhbHVlcyBpbmRpY2F0ZSB0aGF0IGFuIGVycm9yIG9jY3VycmVkLgorQWxsIGRyaXZlciBlbnRyeSBwb2ludHMgcmV0dXJuIGEgc3RhdHVzIG9mIHR5cGUgYHBzYV9zdGF0dXNfdGAgd2hpY2ggc2hvdWxkIHVzZSB0aGUgc3RhdHVzIGNvZGVzIGRvY3VtZW50ZWQgZm9yIFBTQSBzZXJ2aWNlcyBpbiBnZW5lcmFsIGFuZCBmb3IgUFNBIENyeXB0b2dyYXBoeSBpbiBwYXJ0aWN1bGFyOiBgUFNBX1NVQ0NFU1NgIGluZGljYXRlcyB0aGF0IHRoZSBmdW5jdGlvbiBzdWNjZWVkZWQsIGFuZCBgUFNBX0VSUk9SX3h4eGAgdmFsdWVzIGluZGljYXRlIHRoYXQgYW4gZXJyb3Igb2NjdXJyZWQuCiAKLVRoZSBzaWduYXR1cmUgb2YgYSBkcml2ZXIgZW50cnkgcG9pbnQgZ2VuZXJhbGx5IGxvb2tzIGxpa2UgdGhlIHNpZ25hdHVyZSBvZiB0aGUgUFNBIENyeXB0byBBUEkgdGhhdCBpdCBpbXBsZW1lbnRzLCB3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucy4gVGhpcyBzZWN0aW9uIGdpdmVzIGFuIG92ZXJ2aWV3IG9mIG1vZGlmaWNhdGlvbnMgdGhhdCBhcHBseSB0byB3aG9sZSBjbGFzc2VzIG9mIGVudHJ5IHBvaW50cy4gUmVmZXIgdG8gdGhlIHJlZmVyZW5jZSBzZWN0aW9uIGZvciBlYWNoIGVudHJ5IHBvaW50IG9yIGVudHJ5IHBvaW50IGZhbWlseSBmb3IgZGV0YWlscy4KK1RoZSBzaWduYXR1cmUgb2YgYSBkcml2ZXIgZW50cnkgcG9pbnQgZ2VuZXJhbGx5IGxvb2tzIGxpa2UgdGhlIHNpZ25hdHVyZSBvZiB0aGUgUFNBIENyeXB0b2dyYXBoeSBBUEkgdGhhdCBpdCBpbXBsZW1lbnRzLCB3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucy4gVGhpcyBzZWN0aW9uIGdpdmVzIGFuIG92ZXJ2aWV3IG9mIG1vZGlmaWNhdGlvbnMgdGhhdCBhcHBseSB0byB3aG9sZSBjbGFzc2VzIG9mIGVudHJ5IHBvaW50cy4gUmVmZXIgdG8gdGhlIHJlZmVyZW5jZSBzZWN0aW9uIGZvciBlYWNoIGVudHJ5IHBvaW50IG9yIGVudHJ5IHBvaW50IGZhbWlseSBmb3IgZGV0YWlscy4KIAogKiBGb3IgZW50cnkgcG9pbnRzIHRoYXQgb3BlcmF0ZSBvbiBhbiBleGlzdGluZyBrZXksIHRoZSBgcHNhX2tleV9pZF90YCBwYXJhbWV0ZXIgaXMgcmVwbGFjZWQgYnkgYSBzZXF1ZW5jZSBvZiB0aHJlZSBwYXJhbWV0ZXJzIHRoYXQgZGVzY3JpYmUgdGhlIGtleToKICAgICAxLiBgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXNgOiB0aGUga2V5IGF0dHJpYnV0ZXMuCkBAIC0xNDgsMTUgKzE4OSwxNSBAQAogCiAqIEZvciBlbnRyeSBwb2ludHMgdGhhdCBpbnZvbHZlIGEgbXVsdGktcGFydCBvcGVyYXRpb24sIHRoZSBvcGVyYXRpb24gc3RhdGUgdHlwZSAoYHBzYV9YWFhfb3BlcmF0aW9uX3RgKSBpcyByZXBsYWNlZCBieSBhIGRyaXZlci1zcGVjaWZpYyBvcGVyYXRpb24gc3RhdGUgdHlwZSAoKnByZWZpeCpgX1hYWF9vcGVyYXRpb25fdGApLgogCi1Tb21lIGVudHJ5IHBvaW50cyBhcmUgZ3JvdXBlZCBpbiBmYW1pbGllcyB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgYXMgYSB3aG9sZS4gSWYgYSBkcml2ZXIgc3VwcG9ydHMgYSBlbnRyeSBwb2ludCBmYW1pbHksIGl0IG11c3QgcHJvdmlkZSBhbGwgdGhlIGVudHJ5IHBvaW50cyBpbiB0aGUgZmFtaWx5LgorU29tZSBlbnRyeSBwb2ludHMgYXJlIGdyb3VwZWQgaW4gZmFtaWxpZXMgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIGFzIGEgd2hvbGUuIElmIGEgZHJpdmVyIHN1cHBvcnRzIGFuIGVudHJ5IHBvaW50IGZhbWlseSwgaXQgbXVzdCBwcm92aWRlIGFsbCB0aGUgZW50cnkgcG9pbnRzIGluIHRoZSBmYW1pbHkuCiAKICMjIyMgR2VuZXJhbCBjb25zaWRlcmF0aW9ucyBvbiBkcml2ZXIgZW50cnkgcG9pbnQgcGFyYW1ldGVycwogCiBCdWZmZXIgcGFyYW1ldGVycyBmb3IgZHJpdmVyIGVudHJ5IHBvaW50cyBvYmV5IHRoZSBmb2xsb3dpbmcgY29udmVudGlvbnM6CiAKICogQW4gaW5wdXQgYnVmZmVyIGhhcyB0aGUgdHlwZSBgY29uc3QgdWludDhfdCAqYCBhbmQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBwYXJhbWV0ZXIgb2YgdHlwZSBgc2l6ZV90YCB0aGF0IGluZGljYXRlcyB0aGUgYnVmZmVyIHNpemUuCi0qIEFuIG91dHB1dCBidWZmZXIgaGFzIHRoZSB0eXBlIGB1aW50OF90ICpgIGFuZCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHBhcmFtZXRlciBvZiB0eXBlIGBzaXplX3RgIHRoYXQgaW5kaWNhdGVzIHRoZSBidWZmZXIgc2l6ZS4gQSB0aGlyZCBwYXJhbWV0ZXIgb2YgdHlwZSBgc2l6ZV90ICpgIGlzIHByb3ZpZGVkIHRvIHJlcG9ydCB0aGUgYWN0dWFsIGJ1ZmZlciBzaXplIGlmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcy4KLSogQW4gaW4tb3V0IGJ1ZmZlciBoYXMgdGhlIHR5cGUgYHVpbnQ4X3QgKmAgYW5kIGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgcGFyYW1ldGVyIG9mIHR5cGUgYHNpemVfdGAgdGhhdCBpbmRpY2F0ZXMgdGhlIGJ1ZmZlciBzaXplLiBOb3RlIHRoYXQgdGhlIGJ1ZmZlciBzaXplIGRvZXMgbm90IGNoYW5nZS4KKyogQW4gb3V0cHV0IGJ1ZmZlciBoYXMgdGhlIHR5cGUgYHVpbnQ4X3QgKmAgYW5kIGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgcGFyYW1ldGVyIG9mIHR5cGUgYHNpemVfdGAgdGhhdCBpbmRpY2F0ZXMgdGhlIGJ1ZmZlciBzaXplLiBBIHRoaXJkIHBhcmFtZXRlciBvZiB0eXBlIGBzaXplX3QgKmAgaXMgcHJvdmlkZWQgdG8gcmVwb3J0IHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBkYXRhIHdyaXR0ZW4gaW4gdGhlIGJ1ZmZlciBpZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMuCisqIEFuIGluLW91dCBidWZmZXIgaGFzIHRoZSB0eXBlIGB1aW50OF90ICpgIGFuZCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHBhcmFtZXRlciBvZiB0eXBlIGBzaXplX3RgIHRoYXQgaW5kaWNhdGVzIHRoZSBidWZmZXIgc2l6ZS4gSW4tb3V0IGJ1ZmZlcnMgYXJlIG9ubHkgdXNlZCB3aGVuIHRoZSBpbnB1dCBhbmQgdGhlIG91dHB1dCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4KIAogQnVmZmVycyBvZiBzaXplIDAgbWF5IGJlIHJlcHJlc2VudGVkIHdpdGggZWl0aGVyIGEgbnVsbCBwb2ludGVyIG9yIGEgbm9uLW51bGwgcG9pbnRlci4KIApAQCAtMjAxLDE1ICsyNDIsMTUgQEAKIAogVGhpcyBmYW1pbHkgYXBwbGllcyB0byB0cmFuc3BhcmVudCBkcml2ZXJzIG9ubHkuCiAKLVRoaXMgZmFtaWx5IHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgdHlwZSBhbmQgZnVuY3Rpb25zOgorVGhpcyBmYW1pbHkgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyB0eXBlIGFuZCBlbnRyeSBwb2ludHM6CiAKICogVHlwZSBgImhhc2hfb3BlcmF0aW9uX3QiYDogdGhlIHR5cGUgb2YgYSBoYXNoIG9wZXJhdGlvbiBjb250ZXh0LiBJdCBtdXN0IGJlIHBvc3NpYmxlIHRvIGNvcHkgYSBoYXNoIG9wZXJhdGlvbiBjb250ZXh0IGJ5dGUgYnkgYnl0ZSwgdGhlcmVmb3JlIGhhc2ggb3BlcmF0aW9uIGNvbnRleHRzIG11c3Qgbm90IGNvbnRhaW4gYW55IGVtYmVkZGVkIHBvaW50ZXJzIChleGNlcHQgcG9pbnRlcnMgdG8gZ2xvYmFsIGRhdGEgdGhhdCBkbyBub3QgY2hhbmdlIGFmdGVyIHRoZSBzZXR1cCBzdGVwKS4KICogYCJoYXNoX3NldHVwImA6IGNhbGxlZCBieSBgcHNhX2hhc2hfc2V0dXAoKWAuCiAqIGAiaGFzaF91cGRhdGUiYDogY2FsbGVkIGJ5IGBwc2FfaGFzaF91cGRhdGUoKWAuCiAqIGAiaGFzaF9maW5pc2giYDogY2FsbGVkIGJ5IGBwc2FfaGFzaF9maW5pc2goKWAgYW5kIGBwc2FfaGFzaF92ZXJpZnkoKWAuCi0qIGAiaGFzaF9hYm9ydCJgOiBjYWxsZWQgYnkgYWxsIG11bHRpLXBhcnQgaGFzaCBmdW5jdGlvbnMuCisqIGAiaGFzaF9hYm9ydCJgOiBjYWxsZWQgYnkgYWxsIG11bHRpLXBhcnQgaGFzaCBmdW5jdGlvbnMgb2YgdGhlIFBTQSBDcnlwdG9ncmFwaHkgQVBJLgogCi1UbyB2ZXJpZnkgYSBoYXNoIHdpdGggYHBzYV9oYXNoX3ZlcmlmeSgpYCwgdGhlIGNvcmUgY2FsbHMgdGhlIGRyaXZlcidzICpwcmVmaXhgX2hhc2hfZmluaXNoYCBlbnRyeSBwb2ludCBhbmQgY29tcGFyZXMgdGhlIHJlc3VsdCB3aXRoIHRoZSByZWZlcmVuY2UgaGFzaCB2YWx1ZS4KK1RvIHZlcmlmeSBhIGhhc2ggd2l0aCBgcHNhX2hhc2hfdmVyaWZ5KClgLCB0aGUgY29yZSBjYWxscyB0aGUgZHJpdmVyJ3MgKnByZWZpeCpgX2hhc2hfZmluaXNoYCBlbnRyeSBwb2ludCBhbmQgY29tcGFyZXMgdGhlIHJlc3VsdCB3aXRoIHRoZSByZWZlcmVuY2UgaGFzaCB2YWx1ZS4KIAogRm9yIGV4YW1wbGUsIGEgZHJpdmVyIHdpdGggdGhlIHByZWZpeCBgImFjbWUiYCB0aGF0IGltcGxlbWVudHMgdGhlIGAiaGFzaF9tdWx0aXBhcnQiYCBlbnRyeSBwb2ludCBmYW1pbHkgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyB0eXBlIGFuZCBlbnRyeSBwb2ludHMgKGFzc3VtaW5nIHRoYXQgdGhlIGNhcGFiaWxpdHkgZG9lcyBub3QgdXNlIHRoZSBgIm5hbWVzImAgcHJvcGVydHkgdG8gZGVjbGFyZSBkaWZmZXJlbnQgdHlwZSBhbmQgZW50cnkgcG9pbnQgbmFtZXMpOgogCkBAIC0yNjEsNyArMzAyLDggQEAKICogYCJrZXlfZGVyaXZhdGlvbl9pbnB1dF9ieXRlcyJgOiBjYWxsZWQgYnkgYHBzYV9rZXlfZGVyaXZhdGlvbl9pbnB1dF9ieXRlcygpYCBhbmQgYHBzYV9rZXlfZGVyaXZhdGlvbl9pbnB1dF9rZXkoKWAuIEZvciB0cmFuc3BhcmVudCBkcml2ZXJzLCB3aGVuIHByb2Nlc3NpbmcgYSBjYWxsIHRvIGBwc2Ffa2V5X2Rlcml2YXRpb25faW5wdXRfa2V5KClgLCB0aGUgY29yZSBhbHdheXMgY2FsbHMgdGhlIGFwcGxpY2FibGUgZHJpdmVyJ3MgYCJrZXlfZGVyaXZhdGlvbl9pbnB1dF9ieXRlcyJgIGVudHJ5IHBvaW50LgogKiBgImtleV9kZXJpdmF0aW9uX2lucHV0X2tleSJgIChvcGFxdWUgZHJpdmVycyBvbmx5KQogKiBgImtleV9kZXJpdmF0aW9uX291dHB1dF9ieXRlcyJgOiBjYWxsZWQgYnkgYHBzYV9rZXlfZGVyaXZhdGlvbl9vdXRwdXRfYnl0ZXMoKWA7IGFsc28gYnkgYHBzYV9rZXlfZGVyaXZhdGlvbl9vdXRwdXRfa2V5KClgIGZvciB0cmFuc3BhcmVudCBkcml2ZXJzLgotKiBgImtleV9kZXJpdmF0aW9uX2Fib3J0ImA6IGNhbGxlZCBieSBhbGwga2V5IGRlcml2YXRpb24gZnVuY3Rpb25zLgorKiBgImtleV9kZXJpdmF0aW9uX291dHB1dF9rZXkiYDogY2FsbGVkIGJ5IGBwc2Ffa2V5X2Rlcml2YXRpb25fb3V0cHV0X2tleSgpYCBmb3IgdHJhbnNwYXJlbnQgZHJpdmVycyB3aGVuIGRlcml2aW5nIGFuIGFzeW1tZXRyaWMga2V5IHBhaXIsIGFuZCBhbHNvIGZvciBvcGFxdWUgZHJpdmVycy4KKyogYCJrZXlfZGVyaXZhdGlvbl9hYm9ydCJgOiBjYWxsZWQgYnkgYWxsIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9ucyBvZiB0aGUgUFNBIENyeXB0b2dyYXBoeSBBUEkuCiAKIFRPRE86IGtleSBpbnB1dCBhbmQgb3V0cHV0IGZvciBvcGFxdWUgZHJpdmVyczsgZGV0ZXJtaW5pc3RpYyBrZXkgZ2VuZXJhdGlvbiBmb3IgdHJhbnNwYXJlbnQgZHJpdmVycwogCkBAIC0yNzUsMzkgKzMxNyw0MyBAQAogCiAjIyMjIERyaXZlciBpbml0aWFsaXphdGlvbgogCi1BIGRyaXZlciBtYXkgZGVjbGFyZSBhbiBgImluaXQiYCBlbnRyeSBwb2ludCBpbiBhIGNhcGFiaWxpdHkgd2l0aCBubyBhbGdvcml0aG0sIGtleSB0eXBlIG9yIGtleSBzaXplLiBJZiBzbywgdGhlIGRyaXZlciBjYWxscyB0aGlzIGVudHJ5IHBvaW50IG9uY2UgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgUFNBIENyeXB0byBzdWJzeXN0ZW0uIElmIHRoZSBpbml0IGVudHJ5IHBvaW50IG9mIGFueSBkcml2ZXIgZmFpbHMsIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgUFNBIENyeXB0byBzdWJzeXN0ZW0gZmFpbHMuCitBIGRyaXZlciBtYXkgZGVjbGFyZSBhbiBgImluaXQiYCBlbnRyeSBwb2ludCBpbiBhIGNhcGFiaWxpdHkgd2l0aCBubyBhbGdvcml0aG0sIGtleSB0eXBlIG9yIGtleSBzaXplLiBJZiBzbywgdGhlIGNvcmUgY2FsbHMgdGhpcyBlbnRyeSBwb2ludCBvbmNlIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFBTQSBDcnlwdG9ncmFwaHkgc3Vic3lzdGVtLiBJZiB0aGUgaW5pdCBlbnRyeSBwb2ludCBvZiBhbnkgZHJpdmVyIGZhaWxzLCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFBTQSBDcnlwdG9ncmFwaHkgc3Vic3lzdGVtIGZhaWxzLgogCi1XaGVuIG11bHRpcGxlIGRyaXZlcnMgaGF2ZSBhbiBpbml0IGVudHJ5IHBvaW50LCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgY2FsbGVkIGlzIHVuc3BlY2lmaWVkLiBJdCBpcyBhbHNvIHVuc3BlY2lmaWVkIHdoZXRoZXIgb3RoZXIgZHJpdmVycycgaW5pdCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpZiBvbmUgb3IgbW9yZSBpbml0IGZ1bmN0aW9uIGZhaWxzLgorV2hlbiBtdWx0aXBsZSBkcml2ZXJzIGhhdmUgYW4gaW5pdCBlbnRyeSBwb2ludCwgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIGNhbGxlZCBpcyB1bnNwZWNpZmllZC4gSXQgaXMgYWxzbyB1bnNwZWNpZmllZCB3aGV0aGVyIG90aGVyIGRyaXZlcnMnIGAiaW5pdCJgIGVudHJ5IHBvaW50cyBhcmUgY2FsbGVkIGlmIG9uZSBvciBtb3JlIGluaXQgZW50cnkgcG9pbnQgZmFpbHMuCiAKLU9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgUFNBIENyeXB0byBpbXBsZW1lbnRhdGlvbiBpcyBhIHN1YnN5c3RlbSBvZiBhIHNpbmdsZSBhcHBsaWNhdGlvbiwgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBQU0EgQ3J5cHRvIHN1YnN5c3RlbSB0YWtlcyBwbGFjZSBkdXJpbmcgdGhlIGNhbGwgdG8gYHBzYV9jcnlwdG9faW5pdCgpYC4gT24gcGxhdGZvcm1zIHdoZXJlIHRoZSBQU0EgQ3J5cHRvIGltcGxlbWVudGF0aW9uIGlzIHNlcGFyYXRlIGZyb20gdGhlIGFwcGxpY2F0aW9uIG9yIGFwcGxpY2F0aW9ucywgdGhlIGluaXRpYWxpemF0aW9uIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgUFNBIENyeXB0byBzdWJzeXN0ZW0gdGFrZXMgcGxhY2UgYmVmb3JlIG9yIGR1cmluZyB0aGUgZmlyc3QgdGltZSBhbiBhcHBsaWNhdGlvbiBjYWxscyBgcHNhX2NyeXB0b19pbml0KClgLgorT24gcGxhdGZvcm1zIHdoZXJlIHRoZSBQU0EgQ3J5cHRvZ3JhcGh5IGltcGxlbWVudGF0aW9uIGlzIGEgc3Vic3lzdGVtIG9mIGEgc2luZ2xlIGFwcGxpY2F0aW9uLCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFBTQSBDcnlwdG9ncmFwaHkgc3Vic3lzdGVtIHRha2VzIHBsYWNlIGR1cmluZyB0aGUgY2FsbCB0byBgcHNhX2NyeXB0b19pbml0KClgLiBPbiBwbGF0Zm9ybXMgd2hlcmUgdGhlIFBTQSBDcnlwdG9ncmFwaHkgaW1wbGVtZW50YXRpb24gaXMgc2VwYXJhdGUgZnJvbSB0aGUgYXBwbGljYXRpb24gb3IgYXBwbGljYXRpb25zLCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFBTQSBDcnlwdG9ncmFwaHkgc3Vic3lzdGVtIHRha2VzIHBsYWNlIGJlZm9yZSBvciBkdXJpbmcgdGhlIGZpcnN0IHRpbWUgYW4gYXBwbGljYXRpb24gY2FsbHMgYHBzYV9jcnlwdG9faW5pdCgpYC4KIAotVGhlIGluaXQgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBhbnkgcGFyYW1ldGVyLgorVGhlIGluaXQgZW50cnkgcG9pbnQgZG9lcyBub3QgdGFrZSBhbnkgcGFyYW1ldGVyLgogCiAjIyMgQ29tYmluaW5nIG11bHRpcGxlIGRyaXZlcnMKIAotVG8gZGVjbGFyZSBhIGNyeXB0b3Byb2Nlc3NvciBjYW4gaGFuZGxlIGJvdGggY2xlYXJ0ZXh0IGFuZCBwbGFpbnRleHQga2V5cywgeW91IG5lZWQgdG8gcHJvdmlkZSB0d28gZHJpdmVyIGRlc2NyaXB0aW9ucywgb25lIGZvciBhIHRyYW5zcGFyZW50IGRyaXZlciBhbmQgb25lIGZvciBhbiBvcGFxdWUgZHJpdmVyLiBZb3UgY2FuIHVzZSB0aGUgbWFwcGluZyBpbiBjYXBhYmlsaXRpZXMnIGAibmFtZXMiYCBwcm9wZXJ0eSB0byBhcnJhbmdlIGZvciBtdWx0aXBsZSBkcml2ZXIgZW50cnkgcG9pbnRzIHRvIG1hcCB0byB0aGUgc2FtZSBDIGZ1bmN0aW9uLgorVG8gZGVjbGFyZSBhIGNyeXB0b3Byb2Nlc3NvciBjYW4gaGFuZGxlIGJvdGggY2xlYXJ0ZXh0IGFuZCB3cmFwcGVkIGtleXMsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdHdvIGRyaXZlciBkZXNjcmlwdGlvbnMsIG9uZSBmb3IgYSB0cmFuc3BhcmVudCBkcml2ZXIgYW5kIG9uZSBmb3IgYW4gb3BhcXVlIGRyaXZlci4gWW91IGNhbiB1c2UgdGhlIG1hcHBpbmcgaW4gY2FwYWJpbGl0aWVzJyBgIm5hbWVzImAgcHJvcGVydHkgdG8gYXJyYW5nZSBmb3IgbXVsdGlwbGUgZHJpdmVyIGVudHJ5IHBvaW50cyB0byBtYXAgdG8gdGhlIHNhbWUgQyBmdW5jdGlvbi4KIAogIyMgVHJhbnNwYXJlbnQgZHJpdmVycwogCiAjIyMgS2V5IGZvcm1hdCBmb3IgdHJhbnNwYXJlbnQgZHJpdmVycwogCi1UaGUgZm9ybWF0IG9mIGEga2V5IGZvciB0cmFuc3BhcmVudCBkcml2ZXJzIGlzIHRoZSBzYW1lIGFzIGluIGFwcGxpY2F0aW9ucy4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gb2YgYHBzYV9leHBvcnRfa2V5KClgIGFuZCBgcHNhX2V4cG9ydF9wdWJsaWNfa2V5KClgLgorVGhlIGZvcm1hdCBvZiBhIGtleSBmb3IgdHJhbnNwYXJlbnQgZHJpdmVycyBpcyB0aGUgc2FtZSBhcyBpbiBhcHBsaWNhdGlvbnMuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIG9mIFtgcHNhX2V4cG9ydF9rZXkoKWBdKGh0dHBzOi8vYXJtbWJlZC5naXRodWIuaW8vbWJlZC1jcnlwdG8vaHRtbC9hcGkva2V5cy9tYW5hZ2VtZW50Lmh0bWwjYy5wc2FfZXhwb3J0X2tleSkgYW5kIFtgcHNhX2V4cG9ydF9wdWJsaWNfa2V5KClgXShodHRwczovL2FybW1iZWQuZ2l0aHViLmlvL21iZWQtY3J5cHRvL2h0bWwvYXBpL2tleXMvbWFuYWdlbWVudC5odG1sI2MucHNhX2V4cG9ydF9wdWJsaWNfa2V5KSBpbiB0aGUgUFNBIENyeXB0b2dyYXBoeSBBUEkgc3BlY2lmaWNhdGlvbi4gRm9yIGN1c3RvbSBrZXkgdHlwZXMgZGVmaW5lZCBieSBhbiBpbXBsZW1lbnRhdGlvbiwgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhhdCBpbXBsZW1lbnRhdGlvbi4KIAogIyMjIEtleSBtYW5hZ2VtZW50IHdpdGggdHJhbnNwYXJlbnQgZHJpdmVycwogCiBUcmFuc3BhcmVudCBkcml2ZXJzIG1heSBwcm92aWRlIHRoZSBmb2xsb3dpbmcga2V5IG1hbmFnZW1lbnQgZW50cnkgcG9pbnRzOgogCiAqIGAiZ2VuZXJhdGVfa2V5ImA6IGNhbGxlZCBieSBgcHNhX2dlbmVyYXRlX2tleSgpYCwgb25seSB3aGVuIGdlbmVyYXRpbmcgYSBrZXkgcGFpciAoa2V5IHN1Y2ggdGhhdCBgUFNBX0tFWV9UWVBFX0lTX0FTWU1NRVRSSUNgIGlzIHRydWUpLgotKiBgImRlcml2ZV9rZXkiYDogY2FsbGVkIGJ5IGBwc2Ffa2V5X2Rlcml2YXRpb25fb3V0cHV0X2tleSgpYCwgb25seSB3aGVuIGRlcml2aW5nIGEga2V5IHBhaXIgKGtleSBzdWNoIHRoYXQgYFBTQV9LRVlfVFlQRV9JU19BU1lNTUVUUklDYCBpcyB0cnVlKS4KKyogYCJrZXlfZGVyaXZhdGlvbl9vdXRwdXRfa2V5ImA6IGNhbGxlZCBieSBgcHNhX2tleV9kZXJpdmF0aW9uX291dHB1dF9rZXkoKWAsIG9ubHkgd2hlbiBkZXJpdmluZyBhIGtleSBwYWlyIChrZXkgc3VjaCB0aGF0IGBQU0FfS0VZX1RZUEVfSVNfQVNZTU1FVFJJQ2AgaXMgdHJ1ZSkuCiAqIGAiZXhwb3J0X3B1YmxpY19rZXkiYDogY2FsbGVkIGJ5IHRoZSBjb3JlIHRvIG9idGFpbiB0aGUgcHVibGljIGtleSBvZiBhIGtleSBwYWlyLiBUaGUgY29yZSBtYXkgY2FsbCB0aGlzIGZ1bmN0aW9uIGF0IGFueSB0aW1lIHRvIG9idGFpbiB0aGUgcHVibGljIGtleSwgd2hpY2ggY2FuIGJlIGZvciBgcHNhX2V4cG9ydF9wdWJsaWNfa2V5KClgIGJ1dCBhbHNvIGF0IG90aGVyIHRpbWVzLCBpbmNsdWRpbmcgZHVyaW5nIGEgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGhhdCByZXF1aXJlcyB0aGUgcHVibGljIGtleSBzdWNoIGFzIGEgY2FsbCB0byBgcHNhX3ZlcmlmeV9tZXNzYWdlKClgIG9uIGEga2V5IHBhaXIgb2JqZWN0LgogCiBUcmFuc3BhcmVudCBkcml2ZXJzIGFyZSBub3QgaW52b2x2ZWQgd2hlbiBpbXBvcnRpbmcsIGV4cG9ydGluZywgY29weWluZyBvciBkZXN0cm95aW5nIGtleXMsIG9yIHdoZW4gZ2VuZXJhdGluZyBvciBkZXJpdmluZyBzeW1tZXRyaWMga2V5cy4KIAogIyMjIEZhbGxiYWNrCiAKLUlmIGEgdHJhbnNwYXJlbnQgZHJpdmVyIGVudHJ5IHBvaW50IGlzIHBhcnQgb2YgYSBjYXBhYmlsaXR5IHdoaWNoIGhhcyBhIHRydWUgYCJmYWxsYmFjayJgIHByb3BlcnR5IGFuZCByZXR1cm5zIGBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRGAsIHRoZSBidWlsdC1pbiBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkLiBBbnkgb3RoZXIgdmFsdWUgKGBQU0FfU1VDQ0VTU2Agb3IgYSBkaWZmZXJlbnQgZXJyb3IgY29kZSkgaXMgcmV0dXJuZWQgdG8gdGhlIGFwcGxpY2F0aW9uLgorU29tZXRpbWVzIGNyeXB0b2dyYXBoaWMgYWNjZWxlcmF0b3JzIG9ubHkgc3VwcG9ydCBjZXJ0YWluIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtcyBwYXJ0aWFsbHkuIFRoZSBjYXBhYmlsaXR5IGRlc2NyaXB0aW9uIGxhbmd1YWdlIGFsbG93cyBzcGVjaWZ5aW5nIHNvbWUgcmVzdHJpY3Rpb25zLCBpbmNsdWRpbmcgcmVzdHJpY3Rpb25zIG9uIGtleSBzaXplcywgYnV0IGl0IGNhbm5vdCBjb3ZlciBhbGwgdGhlIHBvc3NpYmlsaXRpZXMgdGhhdCBtYXkgYXJpc2UgaW4gcHJhY3RpY2UuIEZ1cnRoZXJtb3JlLCBpdCBtYXkgYmUgZGVzaXJhYmxlIHRvIGRlcGxveSB0aGUgc2FtZSBiaW5hcnkgaW1hZ2Ugb24gZGlmZmVyZW50IGRldmljZXMsIG9ubHkgc29tZSBvZiB3aGljaCBoYXZlIGEgY3J5cHRvZ3JhcGhpYyBhY2NlbGVyYXRvcnMuCitGb3IgdGhlc2UgcHVycG9zZXMsIGEgdHJhbnNwYXJlbnQgZHJpdmVyIGNhbiBkZWNsYXJlIHRoYXQgaXQgb25seSBzdXBwb3J0cyBhIFtjYXBhYmlsaXR5XSgjZHJpdmVyLWRlc2NyaXB0aW9uLWNhcGFiaWxpdHkpIHBhcnRpYWxseSwgYnkgc2V0dGluZyB0aGUgY2FwYWJpbGl0eSdzIGAiZmFsbGJhY2siYCBwcm9wZXJ0eSB0byB0cnVlLgogCi1JZiB0aGVyZSBhcmUgbXVsdGlwbGUgYXZhaWxhYmxlIHRyYW5zcGFyZW50IGRyaXZlcnMsIHRoZSBjb3JlIHRyaWVzIHRoZW0gaW4gdHVybiB1bnRpbCBvbmUgaXMgZGVjbGFyZWQgd2l0aG91dCBhIHRydWUgYCJmYWxsYmFjayJgIHByb3BlcnR5IG9yIHJldHVybnMgYSBzdGF0dXMgb3RoZXIgdGhhbiBgUFNBX0VSUk9SX05PVF9TVVBQT1JURURgLiBUaGUgb3JkZXIgaW4gd2hpY2ggdGhlIGRyaXZlcnMgYXJlIGNhbGxlZCBpcyB1bnNwZWNpZmllZCBhbmQgbWF5IGJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGVudHJ5IHBvaW50cy4KK0lmIGEgdHJhbnNwYXJlbnQgZHJpdmVyIGVudHJ5IHBvaW50IGlzIHBhcnQgb2YgYSBjYXBhYmlsaXR5IHdoaWNoIGhhcyBhIHRydWUgYCJmYWxsYmFjayJgIHByb3BlcnR5IGFuZCByZXR1cm5zIGBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRGAsIHRoZSBjb3JlIHdpbGwgY2FsbCB0aGUgbmV4dCB0cmFuc3BhcmVudCBkcml2ZXIgdGhhdCBzdXBwb3J0cyB0aGUgbWVjaGFuaXNtLCBpZiB0aGVyZSBpcyBvbmUuIFRoZSBjb3JlIGNvbnNpZGVycyBkcml2ZXJzIGluIHRoZSBvcmRlciBnaXZlbiBieSB0aGUgW2RyaXZlciBkZXNjcmlwdGlvbiBsaXN0XSgjZHJpdmVyLWRlc2NyaXB0aW9uLWxpc3QpLgorCitJZiBhbGwgdGhlIGF2YWlsYWJsZSBkcml2ZXJzIGhhdmUgZmFsbGJhY2sgZW5hYmxlZCBhbmQgcmV0dXJuIGBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRGAsIHRoZSBjb3JlIHdpbGwgcGVyZm9ybSB0aGUgb3BlcmF0aW9uIHVzaW5nIGJ1aWx0LWluIGNvZGUuCitBcyBzb29uIGFzIGEgZHJpdmVyIHJldHVybnMgYW55IHZhbHVlIG90aGVyIHRoYW4gYFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEYCAoYFBTQV9TVUNDRVNTYCBvciBhIGRpZmZlcmVudCBlcnJvciBjb2RlKSwgdGhpcyB2YWx1ZSBpcyByZXR1cm5lZCB0byB0aGUgYXBwbGljYXRpb24sIHdpdGhvdXQgYXR0ZW1wdGluZyB0byBjYWxsIGFueSBvdGhlciBkcml2ZXIgb3IgYnVpbHQtaW4gY29kZS4KIAogSWYgYSB0cmFuc3BhcmVudCBkcml2ZXIgZW50cnkgcG9pbnQgaXMgcGFydCBvZiBhIGNhcGFiaWxpdHkgd2hlcmUgdGhlIGAiZmFsbGJhY2siYCBwcm9wZXJ0eSBpcyBmYWxzZSBvciBvbWl0dGVkLCB0aGUgY29yZSBzaG91bGQgbm90IGluY2x1ZGUgYW55IG90aGVyIGNvZGUgZm9yIHRoaXMgY2FwYWJpbGl0eSwgd2hldGhlciBidWlsdCBpbiBvciBpbiBhbm90aGVyIHRyYW5zcGFyZW50IGRyaXZlci4KIApAQCAtMzc5LDEzICs0MjUsMTMgQEAKIAogIyMjIEtleSBtYW5hZ2VtZW50IHdpdGggb3BhcXVlIGRyaXZlcnMKIAotVHJhbnNwYXJlbnQgZHJpdmVycyBtYXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGtleSBtYW5hZ2VtZW50IGVudHJ5IHBvaW50czoKK09wYXF1ZSBkcml2ZXJzIG1heSBwcm92aWRlIHRoZSBmb2xsb3dpbmcga2V5IG1hbmFnZW1lbnQgZW50cnkgcG9pbnRzOgogCiAqIGAiZXhwb3J0X2tleSJgOiBjYWxsZWQgYnkgYHBzYV9leHBvcnRfa2V5KClgLCBvciBieSBgcHNhX2NvcHlfa2V5KClgIHdoZW4gY29weWluZyBhIGtleSBmcm9tIG9yIHRvIGEgZGlmZmVyZW50IFtsb2NhdGlvbl0oI2xpZmV0aW1lcy1hbmQtbG9jYXRpb25zKS4KICogYCJleHBvcnRfcHVibGljX2tleSJgOiBjYWxsZWQgYnkgdGhlIGNvcmUgdG8gb2J0YWluIHRoZSBwdWJsaWMga2V5IG9mIGEga2V5IHBhaXIuIFRoZSBjb3JlIG1heSBjYWxsIHRoaXMgZW50cnkgcG9pbnQgYXQgYW55IHRpbWUgdG8gb2J0YWluIHRoZSBwdWJsaWMga2V5LCB3aGljaCBjYW4gYmUgZm9yIGBwc2FfZXhwb3J0X3B1YmxpY19rZXkoKWAgYnV0IGFsc28gYXQgb3RoZXIgdGltZXMsIGluY2x1ZGluZyBkdXJpbmcgYSBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0aGF0IHJlcXVpcmVzIHRoZSBwdWJsaWMga2V5IHN1Y2ggYXMgYSBjYWxsIHRvIGBwc2FfdmVyaWZ5X21lc3NhZ2UoKWAgb24gYSBrZXkgcGFpciBvYmplY3QuCiAqIGAiaW1wb3J0X2tleSJgOiBjYWxsZWQgYnkgYHBzYV9pbXBvcnRfa2V5KClgLCBvciBieSBgcHNhX2NvcHlfa2V5KClgIHdoZW4gY29weWluZyBhIGtleSBmcm9tIGFub3RoZXIgbG9jYXRpb24uCiAqIGAiZ2VuZXJhdGVfa2V5ImA6IGNhbGxlZCBieSBgcHNhX2dlbmVyYXRlX2tleSgpYC4KLSogYCJkZXJpdmVfa2V5ImA6IGNhbGxlZCBieSBgcHNhX2tleV9kZXJpdmF0aW9uX291dHB1dF9rZXkoKWAuCisqIGAia2V5X2Rlcml2YXRpb25fb3V0cHV0X2tleSJgOiBjYWxsZWQgYnkgYHBzYV9rZXlfZGVyaXZhdGlvbl9vdXRwdXRfa2V5KClgLgogKiBgImNvcHlfa2V5ImA6IGNhbGxlZCBieSBgcHNhX2NvcHlfa2V5KClgIHdoZW4gY29weWluZyBhIGtleSB3aXRoaW4gdGhlIHNhbWUgW2xvY2F0aW9uXSgjbGlmZXRpbWVzLWFuZC1sb2NhdGlvbnMpLgogCiBJbiBhZGRpdGlvbiwgc2VjdXJlIGVsZW1lbnRzIHRoYXQgc3RvcmUgdGhlIGtleSBtYXRlcmlhbCBpbnRlcm5hbGx5IG11c3QgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHR3byBlbnRyeSBwb2ludHM6CkBAIC00MDAsNyArNDQ2LDcgQEAKIFdoZW4gY3JlYXRpbmcgYSBrZXkgd2l0aCBhbiBvcGFxdWUgZHJpdmVyIHdoaWNoIGRvZXMgbm90IGhhdmUgYW4gYCJhbGxvY2F0ZV9rZXkiYCBvciBgImRlc3Ryb3lfa2V5ImAgZW50cnkgcG9pbnQ6CiAKIDEuIFRoZSBjb3JlIGFsbG9jYXRlcyBtZW1vcnkgZm9yIHRoZSBrZXkgY29udGV4dC4KLTIuIFRoZSBjb3JlIGNhbGxzIHRoZSBkcml2ZXIncyBpbXBvcnQsIGdlbmVyYXRlLCBkZXJpdmUgb3IgY29weSBmdW5jdGlvbi4KKzIuIFRoZSBjb3JlIGNhbGxzIHRoZSBkcml2ZXIncyBpbXBvcnQsIGdlbmVyYXRlLCBkZXJpdmUgb3IgY29weSBlbnRyeSBwb2ludC4KIDMuIFRoZSBjb3JlIHNhdmVzIHRoZSByZXN1bHRpbmcgd3JhcHBlZCBrZXkgbWF0ZXJpYWwgYW5kIGFueSBvdGhlciBkYXRhIHRoYXQgdGhlIGtleSBjb250ZXh0IG1heSBjb250YWluLgogCiBUbyBkZXN0cm95IGEga2V5LCB0aGUgY29yZSBzaW1wbHkgZGVzdHJveXMgdGhlIHdyYXBwZWQga2V5IG1hdGVyaWFsLCB3aXRob3V0IGludm9raW5nIGRyaXZlciBjb2RlLgpAQCAtNDEyLDcgKzQ1OCw3IEBACiAqIGAiYWxsb2NhdGVfa2V5ImA6IHRoaXMgZnVuY3Rpb24gb2J0YWlucyBhbiBpbnRlcm5hbCBpZGVudGlmaWVyIGZvciB0aGUga2V5LiBUaGlzIG1heSBiZSwgZm9yIGV4YW1wbGUsIGEgdW5pcXVlIGxhYmVsIG9yIGEgc2xvdCBudW1iZXIuCiAqIGAiZGVzdHJveV9rZXkiYDogdGhpcyBmdW5jdGlvbiBpbnZhbGlkYXRlcyB0aGUgaW50ZXJuYWwgaWRlbnRpZmllciBhbmQgZGVzdHJveXMgdGhlIGFzc29jaWF0ZWQga2V5IG1hdGVyaWFsLgogCi1UaGVzZSBmdW5jdGlvbnMgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3RvdHlwZXM6CitUaGVzZSBmdW5jdGlvbnMgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3RvdHlwZXMgZm9yIGEgZHJpdmVyIHdpdGggdGhlIHByZWZpeCBgImFjbWUiYDoKIGBgYAogcHNhX3N0YXR1c190IGFjbWVfYWxsb2NhdGVfa2V5KGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmtleV9idWZmZXIsCkBAIC00MzksNyArNDg1LDcgQEAKIAogVG8gZGVzdHJveSBhIGtleSwgdGhlIGNvcmUgY2FsbHMgdGhlIGRyaXZlcidzIGAiZGVzdHJveV9rZXkiYCBlbnRyeSBwb2ludC4KIAotTm90ZSB0aGF0IHRoZSBrZXkgYWxsb2NhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gZW50cnkgcG9pbnQgbXVzdCBub3QgcmVseSBzb2xlbHkgb24gdGhlIGtleSBpZGVudGlmaWVyIGluIHRoZSBrZXkgYXR0cmlidXRlcyB0byBpZGVudGlmeSBhIGtleS4gU29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFBTQSBDcnlwdG8gQVBJIHN0b3JlIGtleXMgb24gYmVoYWxmIG9mIG11bHRpcGxlIGNsaWVudHMsIGFuZCBkaWZmZXJlbnQgY2xpZW50cyBtYXkgdXNlIHRoZSBzYW1lIGtleSBpZGVudGlmaWVyIHRvIGRlc2lnbmF0ZSBkaWZmZXJlbnQga2V5cy4gVGhlIG1hbm5lciBpbiB3aGljaCB0aGUgY29yZSBkaXN0aW5ndWlzaGVzIGtleXMgdGhhdCBoYXZlIHRoZSBzYW1lIGlkZW50aWZpZXIgYnV0IGFyZSBwYXJ0IG9mIHRoZSBrZXkgbmFtZXNwYWNlIGZvciBkaWZmZXJlbnQgY2xpZW50cyBpcyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgYW5kIGlzIG5vdCBhY2Nlc3NpYmxlIHRvIGRyaXZlcnMuIFNvbWUgdHlwaWNhbCBzdHJhdGVnaWVzIHRvIGFsbG9jYXRlIGFuIGludGVybmFsIGtleSBpZGVudGlmaWVyIGFyZToKK05vdGUgdGhhdCB0aGUga2V5IGFsbG9jYXRpb24gYW5kIGRlc3RydWN0aW9uIGVudHJ5IHBvaW50cyBtdXN0IG5vdCByZWx5IHNvbGVseSBvbiB0aGUga2V5IGlkZW50aWZpZXIgaW4gdGhlIGtleSBhdHRyaWJ1dGVzIHRvIGlkZW50aWZ5IGEga2V5LiBTb21lIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgUFNBIENyeXB0b2dyYXBoeSBBUEkgc3RvcmUga2V5cyBvbiBiZWhhbGYgb2YgbXVsdGlwbGUgY2xpZW50cywgYW5kIGRpZmZlcmVudCBjbGllbnRzIG1heSB1c2UgdGhlIHNhbWUga2V5IGlkZW50aWZpZXIgdG8gZGVzaWduYXRlIGRpZmZlcmVudCBrZXlzLiBUaGUgbWFubmVyIGluIHdoaWNoIHRoZSBjb3JlIGRpc3Rpbmd1aXNoZXMga2V5cyB0aGF0IGhhdmUgdGhlIHNhbWUgaWRlbnRpZmllciBidXQgYXJlIHBhcnQgb2YgdGhlIGtleSBuYW1lc3BhY2UgZm9yIGRpZmZlcmVudCBjbGllbnRzIGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCBhbmQgaXMgbm90IGFjY2Vzc2libGUgdG8gZHJpdmVycy4gU29tZSB0eXBpY2FsIHN0cmF0ZWdpZXMgdG8gYWxsb2NhdGUgYW4gaW50ZXJuYWwga2V5IGlkZW50aWZpZXIgYXJlOgogCiAqIE1haW50YWluIGEgc2V0IG9mIGZyZWUgc2xvdCBudW1iZXJzIHdoaWNoIGlzIHN0b3JlZCBlaXRoZXIgaW4gdGhlIHNlY3VyZSBlbGVtZW50IG9yIGluIHRoZSBkcml2ZXIncyBwZXJzaXN0ZW50IHN0b3JhZ2UuIFRvIGFsbG9jYXRlIGEga2V5IHNsb3QsIGZpbmQgYSBmcmVlIHNsb3QgbnVtYmVyLCBtYXJrIGl0IGFzIG9jY3VwaWVkIGFuZCBzdG9yZSB0aGUgbnVtYmVyIGluIHRoZSBrZXkgY29udGV4dC4gV2hlbiB0aGUga2V5IGlzIGRlc3Ryb3llZCwgbWFyayB0aGUgc2xvdCBudW1iZXIgYXMgZnJlZS4KICogTWFpbnRhaW4gYSBtb25vdG9uaWMgY291bnRlciB3aXRoIGEgcHJhY3RpY2FsbHkgdW5ib3VuZGVkIHJhbmdlIGluIHRoZSBzZWN1cmUgZWxlbWVudCBvciBpbiB0aGUgZHJpdmVyJ3MgcGVyc2lzdGVudCBzdG9yYWdlLiBUbyBhbGxvY2F0ZSBhIGtleSBzbG90LCBpbmNyZW1lbnQgdGhlIGNvdW50ZXIgYW5kIHN0b3JlIHRoZSBjdXJyZW50IHZhbHVlIGluIHRoZSBrZXkgY29udGV4dC4gRGVzdHJveWluZyBhIGtleSBkb2VzIG5vdCBjaGFuZ2UgdGhlIGNvdW50ZXIuCkBAIC00NTAsNyArNDk2LDcgQEAKIAogIyMjIyBLZXkgY3JlYXRpb24gZW50cnkgcG9pbnRzIGluIG9wYXF1ZSBkcml2ZXJzCiAKLVRoZSBrZXkgY3JlYXRpb24gZW50cnkgcG9pbnRzIGhhdmUgdGhlIGZvbGxvd2luZyBwcm90b3R5cGVzOgorVGhlIGtleSBjcmVhdGlvbiBlbnRyeSBwb2ludHMgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3RvdHlwZXMgZm9yIGEgZHJpdmVyIHdpdGggdGhlIHByZWZpeCBgImFjbWUiYDoKIAogYGBgCiBwc2Ffc3RhdHVzX3QgYWNtZV9pbXBvcnRfa2V5KGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLApAQCAtNDYzLDEzICs1MDksMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qga2V5X2J1ZmZlcl9zaXplKTsKIGBgYAogCi1JZiB0aGUgZHJpdmVyIGhhcyBhbiBbYCJhbGxvY2F0ZV9rZXkiYCBlbnRyeSBwb2ludF0oI2tleS1tYW5hZ2VtZW50LWluLWEtc2VjdXJlLWVsZW1lbnQtd2l0aC1zdG9yYWdlKSwgdGhlIGNvcmUgY2FsbHMgdGhlIGAiYWxsb2NhdGVfa2V5ImAgZW50cnkgcG9pbnQgd2l0aCB0aGUgc2FtZSBhdHRyaWJ1dGVzIG9uIHRoZSBzYW1lIGtleSBidWZmZXIgYmVmb3JlIGNhbGxpbmcgdGhlIGtleSBjcmVhdGlvbiBmdW5jdGlvbi4KK0lmIHRoZSBkcml2ZXIgaGFzIGFuIFtgImFsbG9jYXRlX2tleSJgIGVudHJ5IHBvaW50XSgja2V5LW1hbmFnZW1lbnQtaW4tYS1zZWN1cmUtZWxlbWVudC13aXRoLXN0b3JhZ2UpLCB0aGUgY29yZSBjYWxscyB0aGUgYCJhbGxvY2F0ZV9rZXkiYCBlbnRyeSBwb2ludCB3aXRoIHRoZSBzYW1lIGF0dHJpYnV0ZXMgb24gdGhlIHNhbWUga2V5IGJ1ZmZlciBiZWZvcmUgY2FsbGluZyB0aGUga2V5IGNyZWF0aW9uIGVudHJ5IHBvaW50LgogCiBUT0RPOiBkZXJpdmF0aW9uLCBjb3B5CiAKICMjIyMgS2V5IGV4cG9ydCBlbnRyeSBwb2ludHMgaW4gb3BhcXVlIGRyaXZlcnMKIAotVGhlIGtleSBleHBvcnQgZW50cnkgcG9pbnRzIGhhdmUgdGhlIGZvbGxvd2luZyBwcm90b3R5cGVzOgorVGhlIGtleSBleHBvcnQgZW50cnkgcG9pbnRzIGhhdmUgdGhlIGZvbGxvd2luZyBwcm90b3R5cGVzIGZvciBhIGRyaXZlciB3aXRoIHRoZSBwcmVmaXggYCJhY21lImA6CiAKIGBgYAogcHNhX3N0YXR1c190IGFjbWVfZXhwb3J0X2tleShjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKQEAgLTUyNCw3ICs1NzAsNyBAQAogCiBFYWNoIG9wYXF1ZSBkcml2ZXIgaXMgYXNzaWduZWQgYSBbbG9jYXRpb25dKCNsaWZldGltZXMtYW5kLWxvY2F0aW9ucykuIFRoZSBkcml2ZXIgaXMgaW52b2tlZCBmb3IgYWxsIGFjdGlvbnMgdGhhdCB1c2UgYSBrZXkgaW4gdGhhdCBsb2NhdGlvbi4gQSBrZXkncyBsb2NhdGlvbiBpcyBpbmRpY2F0ZWQgYnkgaXRzIGxpZmV0aW1lLiBUaGUgYXBwbGljYXRpb24gY2hvb3NlcyB0aGUga2V5J3MgbGlmZXRpbWUgd2hlbiBpdCBjcmVhdGVzIHRoZSBrZXkuCiAKLUZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNuaXBwZXQgY3JlYXRlcyBhbiBBRVMtR0NNIGtleSB3aGljaCBpcyBvbmx5IGFjY2Vzc2libGUgaW5zaWRlIGEgc2VjdXJlIGVsZW1lbnQuCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzbmlwcGV0IGNyZWF0ZXMgYW4gQUVTLUdDTSBrZXkgd2hpY2ggaXMgb25seSBhY2Nlc3NpYmxlIGluc2lkZSB0aGUgc2VjdXJlIGVsZW1lbnQgZGVzaWduYXRlZCBieSB0aGUgbG9jYXRpb24gYFBTQV9LRVlfTE9DQVRJT05fYWNtZWAuCiBgYGAKIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKIHBzYV9zZXRfa2V5X2xpZmV0aW1lKCZhdHRyaWJ1dGVzLCBQU0FfS0VZX0xJRkVUSU1FX0ZST01fUEVSU0lTVEVOQ0VfQU5EX0xPQ0FUSU9OKApAQCAtNTc0LDkgKzYyMCw5IEBACiAKICMjIyBEcml2ZXIgZGVjbGFyYXRpb25zCiAKLSMjIyMgRGVjbGFyaW5nIGRyaXZlciBmdW5jdGlvbnMKKyMjIyMgRGVjbGFyaW5nIGRyaXZlciBlbnRyeSBwb2ludHMKIAotVGhlIGNvcmUgbWF5IHdhbnQgdG8gcHJvdmlkZSBkZWNsYXJhdGlvbnMgZm9yIHRoZSBkcml2ZXIgZnVuY3Rpb25zIHNvIHRoYXQgaXQgY2FuIGNvbXBpbGUgY29kZSB1c2luZyB0aGVtLiBBdCB0aGUgdGltZSBvZiB3cml0aW5nIHRoaXMgcGFyYWdyYXBoLCB0aGUgZHJpdmVyIGhlYWRlcnMgbXVzdCBkZWZpbmUgdHlwZXMgYnV0IHRoZXJlIGlzIG5vIG9ibGlnYXRpb24gZm9yIHRoZW0gdG8gZGVjbGFyZSBmdW5jdGlvbnMuIFRoZSBjb3JlIGtub3dzIHdoYXQgdGhlIGZ1bmN0aW9uIG5hbWVzIGFuZCBhcmd1bWVudCB0eXBlcyBhcmUsIHNvIGl0IGNhbiBnZW5lcmF0ZSBwcm90b3R5cGVzLgorVGhlIGNvcmUgbWF5IHdhbnQgdG8gcHJvdmlkZSBkZWNsYXJhdGlvbnMgZm9yIHRoZSBkcml2ZXIgZW50cnkgcG9pbnRzIHNvIHRoYXQgaXQgY2FuIGNvbXBpbGUgY29kZSB1c2luZyB0aGVtLiBBdCB0aGUgdGltZSBvZiB3cml0aW5nIHRoaXMgcGFyYWdyYXBoLCB0aGUgZHJpdmVyIGhlYWRlcnMgbXVzdCBkZWZpbmUgdHlwZXMgYnV0IHRoZXJlIGlzIG5vIG9ibGlnYXRpb24gZm9yIHRoZW0gdG8gZGVjbGFyZSBmdW5jdGlvbnMuIFRoZSBjb3JlIGtub3dzIHdoYXQgdGhlIGZ1bmN0aW9uIG5hbWVzIGFuZCBhcmd1bWVudCB0eXBlcyBhcmUsIHNvIGl0IGNhbiBnZW5lcmF0ZSBwcm90b3R5cGVzLgogCiBJdCBzaG91bGQgYmUgb2sgZm9yIGRyaXZlciBmdW5jdGlvbnMgdG8gYmUgZnVuY3Rpb24tbGlrZSBtYWNyb3Mgb3IgZnVuY3Rpb24gcG9pbnRlcnMuCiAKQEAgLTU4Niw2ICs2MzIsMTQgQEAKIAogQ2FuIHRoZSBkcml2ZXIgYXNzZW1ibHkgcHJvY2VzcyBnZW5lcmF0ZSBkaXN0aW5jdCBsb2NhdGlvbiB2YWx1ZXMgYXMgbmVlZGVkPyBUaGlzIGNhbiBiZSBjb252ZW5pZW50LCBidXQgaXQncyBhbHNvIHJpc2t5OiBpZiB5b3UgdXBncmFkZSBhIGRldmljZSwgeW91IG5lZWQgdGhlIGxvY2F0aW9uIHZhbHVlcyB0byBiZSB0aGUgc2FtZSBiZXR3ZWVuIGJ1aWxkcy4KIAorVGhlIGN1cnJlbnQgcGxhbiBpcyBmb3IgQXJtIHRvIG1haW50YWluIGEgcmVnaXN0cnkgb2YgdmVuZG9ycyBhbmQgYXNzaWduIGEgbG9jYXRpb24gbmFtZXNwYWNlIHRvIGVhY2ggdmVuZG9yLiBQYXJ0cyBvZiB0aGUgbmFtZXNwYWNlIHdvdWxkIGJlIHJlc2VydmVkIGZvciBpbXBsZW1lbnRhdGlvbnMgYW5kIGludGVncmF0b3JzLgorCisjIyMjIE11bHRpcGxlIHRyYW5zcGFyZW50IGRyaXZlcnMKKworV2hlbiBtdWx0aXBsZSB0cmFuc3BhcmVudCBkcml2ZXJzIGltcGxlbWVudCB0aGUgc2FtZSBtZWNoYW5pc20sIHdoaWNoIG9uZSBpcyBjYWxsZWQ/IFRoZSBmaXJzdCBvbmU/IFRoZSBsYXN0IG9uZT8gVW5zcGVjaWZpZWQ/IE9yIGlzIHRoaXMgYW4gZXJyb3IgKGV4Y2x1ZGluZyBjYXBhYmlsaXRpZXMgd2l0aCBmYWxsYmFjayBlbmFibGVkKT8KKworVGhlIGN1cnJlbnQgY2hvaWNlIGlzIHRoYXQgdGhlIGZpcnN0IG9uZSBpcyB1c2VkLCB3aGljaCBhbGxvd3MgaGF2aW5nIGEgcHJlZmVyZW5jZSBvcmRlciBvbiBkcml2ZXJzLCBidXQgbWF5IG1hc2sgaW50ZWdyYXRpb24gZXJyb3JzLgorCiAjIyMgRHJpdmVyIGZ1bmN0aW9uIGludGVyZmFjZXMKIAogIyMjIyBEcml2ZXIgZnVuY3Rpb24gcGFyYW1ldGVyIGNvbnZlbnRpb25zCmRpZmYgLS1naXQgYS9kb3h5Z2VuL2lucHV0L2RvY19tYWlucGFnZS5oIGIvZG94eWdlbi9pbnB1dC9kb2NfbWFpbnBhZ2UuaAppbmRleCAxYmI2ZjM3Li5jMTNiMjc5IDEwMDY0NAotLS0gYS9kb3h5Z2VuL2lucHV0L2RvY19tYWlucGFnZS5oCisrKyBiL2RveHlnZW4vaW5wdXQvZG9jX21haW5wYWdlLmgKQEAgLTIyLDcgKzIyLDcgQEAKICAqLwogCiAvKioKLSAqIEBtYWlucGFnZSBtYmVkIFRMUyB2Mi4yMy4wIHNvdXJjZSBjb2RlIGRvY3VtZW50YXRpb24KKyAqIEBtYWlucGFnZSBtYmVkIFRMUyB2Mi4yNC4wIHNvdXJjZSBjb2RlIGRvY3VtZW50YXRpb24KICAqCiAgKiBUaGlzIGRvY3VtZW50YXRpb24gZGVzY3JpYmVzIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgbWJlZCBUTFMuICBJdCB3YXMKICAqIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc3BlY2lhbGx5IGZvcm1hdHRlZCBjb21tZW50IGJsb2NrcyBpbgpkaWZmIC0tZ2l0IGEvZG94eWdlbi9tYmVkdGxzLmRveHlmaWxlIGIvZG94eWdlbi9tYmVkdGxzLmRveHlmaWxlCmluZGV4IGU4OTAyMWEuLmJmMzNkYWIgMTAwNjQ0Ci0tLSBhL2RveHlnZW4vbWJlZHRscy5kb3h5ZmlsZQorKysgYi9kb3h5Z2VuL21iZWR0bHMuZG94eWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKICMgaWRlbnRpZnkgdGhlIHByb2plY3QuIE5vdGUgdGhhdCBpZiB5b3UgZG8gbm90IHVzZSBEb3h5d2l6YXJkIHlvdSBuZWVkCiAjIHRvIHB1dCBxdW90ZXMgYXJvdW5kIHRoZSBwcm9qZWN0IG5hbWUgaWYgaXQgY29udGFpbnMgc3BhY2VzLgogCi1QUk9KRUNUX05BTUUgICAgICAgICAgID0gIm1iZWQgVExTIHYyLjIzLjAiCitQUk9KRUNUX05BTUUgICAgICAgICAgID0gIm1iZWQgVExTIHYyLjI0LjAiCiAKICMgVGhlIFBST0pFQ1RfTlVNQkVSIHRhZyBjYW4gYmUgdXNlZCB0byBlbnRlciBhIHByb2plY3Qgb3IgcmV2aXNpb24gbnVtYmVyLgogIyBUaGlzIGNvdWxkIGJlIGhhbmR5IGZvciBhcmNoaXZpbmcgdGhlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIG9yCmRpZmYgLS1naXQgYS9pbmNsdWRlL21iZWR0bHMvYmlnbnVtLmggYi9pbmNsdWRlL21iZWR0bHMvYmlnbnVtLmgKaW5kZXggMGQwMTliOS4uNjM3MzYwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tYmVkdGxzL2JpZ251bS5oCisrKyBiL2luY2x1ZGUvbWJlZHRscy9iaWdudW0uaApAQCAtNjEsMTIgKzYxLDEyIEBACiAgKiBNYXhpbXVtIHdpbmRvdyBzaXplIHVzZWQgZm9yIG1vZHVsYXIgZXhwb25lbnRpYXRpb24uIERlZmF1bHQ6IDYKICAqIE1pbmltdW0gdmFsdWU6IDEuIE1heGltdW0gdmFsdWU6IDYuCiAgKgotICogUmVzdWx0IGlzIGFuIGFycmF5IG9mICggMiA8PCBNQkVEVExTX01QSV9XSU5ET1dfU0laRSApIE1QSXMgdXNlZAorICogUmVzdWx0IGlzIGFuIGFycmF5IG9mICggMiAqKiBNQkVEVExTX01QSV9XSU5ET1dfU0laRSApIE1QSXMgdXNlZAogICogZm9yIHRoZSBzbGlkaW5nIHdpbmRvdyBjYWxjdWxhdGlvbi4gKFNvIDY0IGJ5IGRlZmF1bHQpCiAgKgogICogUmVkdWN0aW9uIGluIHNpemUsIHJlZHVjZXMgc3BlZWQuCiAgKi8KLSNkZWZpbmUgTUJFRFRMU19NUElfV0lORE9XX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAgICAgICAvKio8IE1heGltdW0gd2luZG93cyBzaXplIHVzZWQuICovCisjZGVmaW5lIE1CRURUTFNfTVBJX1dJTkRPV19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgICAgICAgLyoqPCBNYXhpbXVtIHdpbmRvdyBzaXplIHVzZWQuICovCiAjZW5kaWYgLyogIU1CRURUTFNfTVBJX1dJTkRPV19TSVpFICovCiAKICNpZiAhZGVmaW5lZChNQkVEVExTX01QSV9NQVhfU0laRSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWJlZHRscy9jY20uaCBiL2luY2x1ZGUvbWJlZHRscy9jY20uaAppbmRleCA4MTk2NWJhLi43MTkzODYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL21iZWR0bHMvY2NtLmgKKysrIGIvaW5jbHVkZS9tYmVkdGxzL2NjbS5oCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAqICAgICAgICAgICAgICAgICAgdGhhbiB6ZXJvLCBccCBvdXRwdXQgbXVzdCBiZSBhIHdyaXRhYmxlIGJ1ZmZlciBvZiBhdCBsZWFzdAogICogICAgICAgICAgICAgICAgICB0aGF0IGxlbmd0aC4KICAqIFxwYXJhbSB0YWcgICAgICAgVGhlIGJ1ZmZlciBob2xkaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBmaWVsZC4gVGhpcyBtdXN0IGJlIGEKLSAqICAgICAgICAgICAgICAgICAgcmVhZGFibGUgYnVmZmVyIG9mIGF0IGxlYXN0IFxwIHRhZ19sZW4gQnl0ZXMuCisgKiAgICAgICAgICAgICAgICAgIHdyaXRhYmxlIGJ1ZmZlciBvZiBhdCBsZWFzdCBccCB0YWdfbGVuIEJ5dGVzLgogICogXHBhcmFtIHRhZ19sZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBmaWVsZCB0byBnZW5lcmF0ZSBpbiBCeXRlczoKICAqICAgICAgICAgICAgICAgICAgNCwgNiwgOCwgMTAsIDEyLCAxNCBvciAxNi4KICAqCkBAIC0xOTMsNyArMTkzLDcgQEAKICAqICAgICAgICAgICAgICAgICAgdGhhbiB6ZXJvLCBccCBvdXRwdXQgbXVzdCBiZSBhIHdyaXRhYmxlIGJ1ZmZlciBvZiBhdCBsZWFzdAogICogICAgICAgICAgICAgICAgICB0aGF0IGxlbmd0aC4KICAqIFxwYXJhbSB0YWcgICAgICAgVGhlIGJ1ZmZlciBob2xkaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBmaWVsZC4gVGhpcyBtdXN0IGJlIGEKLSAqICAgICAgICAgICAgICAgICAgcmVhZGFibGUgYnVmZmVyIG9mIGF0IGxlYXN0IFxwIHRhZ19sZW4gQnl0ZXMuCisgKiAgICAgICAgICAgICAgICAgIHdyaXRhYmxlIGJ1ZmZlciBvZiBhdCBsZWFzdCBccCB0YWdfbGVuIEJ5dGVzLgogICogXHBhcmFtIHRhZ19sZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBmaWVsZCB0byBnZW5lcmF0ZSBpbiBCeXRlczoKICAqICAgICAgICAgICAgICAgICAgMCwgNCwgNiwgOCwgMTAsIDEyLCAxNCBvciAxNi4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL21iZWR0bHMvY2hlY2tfY29uZmlnLmggYi9pbmNsdWRlL21iZWR0bHMvY2hlY2tfY29uZmlnLmgKaW5kZXggODU2MDI5Ni4uZmQ5NzlkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tYmVkdGxzL2NoZWNrX2NvbmZpZy5oCisrKyBiL2luY2x1ZGUvbWJlZHRscy9jaGVja19jb25maWcuaApAQCAtMTk1LDYgKzE5NSwxNiBAQAogI2Vycm9yICJNQkVEVExTX0VOVFJPUFlfRk9SQ0VfU0hBMjU2IGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoX19oYXNfZmVhdHVyZSkKKyNpZiBfX2hhc19mZWF0dXJlKG1lbW9yeV9zYW5pdGl6ZXIpCisjZGVmaW5lIE1CRURUTFNfSEFTX01FTVNBTgorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX01FTVNBTikgJiYgICFkZWZpbmVkKE1CRURUTFNfSEFTX01FTVNBTikKKyNlcnJvciAiTUJFRFRMU19URVNUX0NPTlNUQU5UX0ZMT1dfTUVNU0FOIHJlcXVpcmVzIGJ1aWxkaW5nIHdpdGggTWVtb3J5U2FuaXRpemVyIgorI2VuZGlmCisjdW5kZWYgTUJFRFRMU19IQVNfTUVNU0FOCisKICNpZiBkZWZpbmVkKE1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkpICYmIFwKICAgICAoICFkZWZpbmVkKE1CRURUTFNfRU5UUk9QWV9DKSB8fCAhZGVmaW5lZChNQkVEVExTX05PX0RFRkFVTFRfRU5UUk9QWV9TT1VSQ0VTKSApCiAjZXJyb3IgIk1CRURUTFNfVEVTVF9OVUxMX0VOVFJPUFkgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKQEAgLTg2MSw2ICs4NzEsMTAgQEAKICNlbmRpZiAvKiBNQkVEVExTX0RFUFJFQ0FURURfUkVNT1ZFRCAqLwogI2VuZGlmIC8qIE1CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCAqLwogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApICYmICggIWRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykgKQorI2Vycm9yICJNQkVEVExTX1NTTF9EVExTX1NSVFAgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCiAvKgogICogQXZvaWQgd2FybmluZyBmcm9tIC1wZWRhbnRpYy4gVGhpcyBpcyBhIGNvbnZlbmllbnQgcGxhY2UgZm9yIHRoaXMKICAqIHdvcmthcm91bmQgc2luY2UgdGhpcyBpcyBpbmNsdWRlZCBieSBldmVyeSBzaW5nbGUgZmlsZSBiZWZvcmUgdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL21iZWR0bHMvY2lwaGVyLmggYi9pbmNsdWRlL21iZWR0bHMvY2lwaGVyLmgKaW5kZXggMDE0Nzg2YS4uODgyN2UwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tYmVkdGxzL2NpcGhlci5oCisrKyBiL2luY2x1ZGUvbWJlZHRscy9jaXBoZXIuaApAQCAtMjI3LDEwICsyMjcsMzAgQEAKIH07CiAKIC8qKiBNYXhpbXVtIGxlbmd0aCBvZiBhbnkgSVYsIGluIEJ5dGVzLiAqLworLyogVGhpcyBzaG91bGQgaWRlYWxseSBiZSBkZXJpdmVkIGF1dG9tYXRpY2FsbHkgZnJvbSBsaXN0IG9mIGNpcGhlcnMuCisgKiBUaGlzIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCBNQkVEVExTX1NTTF9NQVhfSVZfTEVOR1RIIGRlZmluZWQKKyAqIGluIHNzbF9pbnRlcm5hbC5oLiAqLwogI2RlZmluZSBNQkVEVExTX01BWF9JVl9MRU5HVEggICAgICAxNgorCiAvKiogTWF4aW11bSBibG9jayBzaXplIG9mIGFueSBjaXBoZXIsIGluIEJ5dGVzLiAqLworLyogVGhpcyBzaG91bGQgaWRlYWxseSBiZSBkZXJpdmVkIGF1dG9tYXRpY2FsbHkgZnJvbSBsaXN0IG9mIGNpcGhlcnMuCisgKiBUaGlzIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCBNQkVEVExTX1NTTF9NQVhfQkxPQ0tfTEVOR1RIIGRlZmluZWQKKyAqIGluIHNzbF9pbnRlcm5hbC5oLiAqLwogI2RlZmluZSBNQkVEVExTX01BWF9CTE9DS19MRU5HVEggICAxNgogCisvKiogTWF4aW11bSBrZXkgbGVuZ3RoLCBpbiBCeXRlcy4gKi8KKy8qIFRoaXMgc2hvdWxkIGlkZWFsbHkgYmUgZGVyaXZlZCBhdXRvbWF0aWNhbGx5IGZyb20gbGlzdCBvZiBjaXBoZXJzLgorICogRm9yIG5vdywgb25seSBjaGVjayB3aGV0aGVyIFhUUyBpcyBlbmFibGVkIHdoaWNoIHVzZXMgNjQgQnl0ZSBrZXlzLAorICogYW5kIHVzZSAzMiBCeXRlcyBhcyBhbiB1cHBlciBib3VuZCBmb3IgdGhlIG1heGltdW0ga2V5IGxlbmd0aCBvdGhlcndpc2UuCisgKiBUaGlzIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCBNQkVEVExTX1NTTF9NQVhfQkxPQ0tfTEVOR1RIIGRlZmluZWQKKyAqIGluIHNzbF9pbnRlcm5hbC5oLCB3aGljaCBob3dldmVyIGRlbGliZXJhdGVseSBpZ25vcmVzIHRoZSBjYXNlIG9mIFhUUworICogc2luY2UgdGhlIGxhdHRlciBpc24ndCB1c2VkIGluIFNTTC9UTFMuICovCisjaWYgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9NT0RFX1hUUykKKyNkZWZpbmUgTUJFRFRMU19NQVhfS0VZX0xFTkdUSCAgICAgNjQKKyNlbHNlCisjZGVmaW5lIE1CRURUTFNfTUFYX0tFWV9MRU5HVEggICAgIDMyCisjZW5kaWYgLyogTUJFRFRMU19DSVBIRVJfTU9ERV9YVFMgKi8KKwogLyoqCiAgKiBCYXNlIGNpcGhlciBpbmZvcm1hdGlvbiAob3BhcXVlIHN0cnVjdCkuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWJlZHRscy9jb25maWcuaCBiL2luY2x1ZGUvbWJlZHRscy9jb25maWcuaAppbmRleCA2ZjQ1N2RhLi4yYWMyY2M2IDEwMDY0NAotLS0gYS9pbmNsdWRlL21iZWR0bHMvY29uZmlnLmgKKysrIGIvaW5jbHVkZS9tYmVkdGxzL2NvbmZpZy5oCkBAIC04NjQsNyArODY0LDcgQEAKICAqIG1heSByZXN1bHQgaW4gYSBjb21wcm9taXNlIG9mIHRoZSBsb25nLXRlcm0gc2lnbmluZyBrZXkuIFRoaXMgaXMgYXZvaWRlZCBieQogICogdGhlIGRldGVybWluaXN0aWMgdmFyaWFudC4KICAqCi0gKiBSZXF1aXJlczogTUJFRFRMU19ITUFDX0RSQkdfQworICogUmVxdWlyZXM6IE1CRURUTFNfSE1BQ19EUkJHX0MsIE1CRURUTFNfRUNEU0FfQwogICoKICAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIGRldGVybWluaXN0aWMgRUNEU0EuCiAgKi8KQEAgLTEyNTgsMjAgKzEyNTgsMTcgQEAKICAqLwogLy8jZGVmaW5lIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVECiAKLS8qIE1CRURUTFNfUFNBX0NSWVBUT19LRVlfRklMRV9JRF9FTkNPREVTX09XTkVSCisvKiBNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIKICAqCi0gKiBJbiBQU0Ega2V5IHN0b3JhZ2UsIGVuY29kZSB0aGUgb3duZXIgb2YgdGhlIGtleS4KKyAqIEVuYWJsZSBrZXkgaWRlbnRpZmllcnMgdGhhdCBlbmNvZGUgYSBrZXkgb3duZXIgaWRlbnRpZmllci4KICAqCi0gKiBUaGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGVuIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5IGFzIHBhcnQgb2YgYQotICogbXVsdGktY2xpZW50IHNlcnZpY2UuIFdoZW4geW91IGFjdGl2YXRlIHRoaXMgb3B0aW9uLCB5b3UgbXVzdCBwcm92aWRlCi0gKiBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHlwZSBwc2Ffa2V5X293bmVyX2lkX3QgYW5kIGEgdHJhbnNsYXRpb24KLSAqIGZyb20gcHNhX2tleV9maWxlX2lkX3QgdG8gZmlsZSBuYW1lIGluIGFsbCB0aGUgc3RvcmFnZSBiYWNrZW5kcyB0aGF0Ci0gKiB5b3Ugd2lzaCB0byBzdXBwb3J0LgorICogVGhlIG93bmVyIG9mIGEga2V5IGlzIGlkZW50aWZpZWQgYnkgYSB2YWx1ZSBvZiB0eXBlIDo6bWJlZHRsc19rZXlfb3duZXJfaWRfdAorICogd2hpY2ggaXMgY3VycmVudGx5IGhhcmQtY29kZWQgdG8gYmUgaW50MzJfdC4KICAqCiAgKiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIHVzZSBvbmx5IGFuZCBtYXkgYmUgcmVtb3ZlZAogICogd2l0aG91dCBub3RpY2UuCiAgKi8KLS8vI2RlZmluZSBNQkVEVExTX1BTQV9DUllQVE9fS0VZX0ZJTEVfSURfRU5DT0RFU19PV05FUgorLy8jZGVmaW5lIE1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUgogCiAvKioKICAqIFxkZWYgTUJFRFRMU19NRU1PUllfREVCVUcKQEAgLTEzMjksNiArMTMyNiwxNyBAQAogICovCiAjZGVmaW5lIE1CRURUTFNfUEtDUzFfVjIxCiAKKy8qKiBcZGVmIE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBleHBlcmltZW50YWwgUFNBIGNyeXB0byBkcml2ZXIgaW50ZXJmYWNlLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1BTQV9DUllQVE9fQworICoKKyAqIFx3YXJuaW5nIFRoaXMgaW50ZXJmYWNlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGNoYW5nZSBvciBiZSByZW1vdmVkCisgKiB3aXRob3V0IG5vdGljZS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTCisKIC8qKgogICogXGRlZiBNQkVEVExTX1BTQV9DUllQVE9fU1BNCiAgKgpAQCAtMTgwNSw2ICsxODEzLDM3IEBACiAjZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZCiAKIC8qKgorICogXGRlZiBNQkVEVExTX1NTTF9EVExTX1NSVFAKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgbmVnb3RhdGlvbiBvZiBEVExTLVNSVFAgKFJGQyA1NzY0KQorICogdGhyb3VnaCB0aGUgdXNlX3NydHAgZXh0ZW5zaW9uLgorICoKKyAqIFxub3RlIFRoaXMgZmVhdHVyZSBwcm92aWRlcyB0aGUgbWluaW11bSBmdW5jdGlvbmFsaXR5IHJlcXVpcmVkCisgKiB0byBuZWdvdGlhdGUgdGhlIHVzZSBvZiBEVExTLVNSVFAgYW5kIHRvIGFsbG93IHRoZSBkZXJpdmF0aW9uIG9mCisgKiB0aGUgYXNzb2NpYXRlZCBTUlRQIHBhY2tldCBwcm90ZWN0aW9uIGtleSBtYXRlcmlhbC4KKyAqIEluIHBhcnRpY3VsYXIsIHRoZSBTUlRQIHBhY2tldCBwcm90ZWN0aW9uIGl0c2VsZiwgYXMgd2VsbCBhcyB0aGUKKyAqIGRlbXVsdGlwbGV4aW5nIG9mIFJUUCBhbmQgRFRMUyBwYWNrZXRzIGF0IHRoZSBkYXRhZ3JhbSBsYXllcgorICogKHNlZSBTZWN0aW9uIDUgb2YgUkZDIDU3NjQpLCBhcmUgbm90IGhhbmRsZWQgYnkgdGhpcyBmZWF0dXJlLgorICogSW5zdGVhZCwgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGEgaGFuZHNoYWtlIG5lZ290aWF0aW5nCisgKiB0aGUgdXNlIG9mIERUTFMtU1JUUCwgdGhlIGV4dGVuZGVkIGtleSBleHBvcnRlciBBUEkKKyAqIG1iZWR0bHNfc3NsX2NvbmZfZXhwb3J0X2tleXNfZXh0X2NiKCkgc2hvdWxkIGJlIHVzZWQgdG8gaW1wbGVtZW50CisgKiB0aGUga2V5IGV4cG9ydGVyIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQuMiBvZiBSRkMgNTc2NCBhbmQgUkZDIDU3MDUKKyAqICh0aGlzIGlzIGltcGxlbWVudGVkIGluIHRoZSBTU0wgZXhhbXBsZSBwcm9ncmFtcykuCisgKiBUaGUgcmVzdWx0aW5nIGtleSBzaG91bGQgdGhlbiBiZSBwYXNzZWQgdG8gYW4gU1JUUCBzdGFjay4KKyAqCisgKiBTZXR0aW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHJ1bnRpbWUgQVBJCisgKiBtYmVkdGxzX3NzbF9jb25mX2R0bHNfc3J0cF9wcm90ZWN0aW9uX3Byb2ZpbGVzKCkKKyAqIHRocm91Z2ggd2hpY2ggdGhlIHN1cHBvcnRlZCBEVExTLVNSVFAgcHJvdGVjdGlvbgorICogcHJvZmlsZXMgY2FuIGJlIGNvbmZpZ3VyZWQuIFlvdSBtdXN0IGNhbGwgdGhpcyBBUEkgYXQKKyAqIHJ1bnRpbWUgaWYgeW91IHdpc2ggdG8gbmVnb3RpYXRlIHRoZSB1c2Ugb2YgRFRMUy1TUlRQLgorICoKKyAqIFJlcXVpcmVzOiBNQkVEVExTX1NTTF9QUk9UT19EVExTCisgKgorICogVW5jb21tZW50IHRoaXMgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHVzZV9zcnRwIGV4dGVuc2lvbi4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorCisvKioKICAqIFxkZWYgTUJFRFRMU19TU0xfRFRMU19DTElFTlRfUE9SVF9SRVVTRQogICoKICAqIEVuYWJsZSBzZXJ2ZXItc2lkZSBzdXBwb3J0IGZvciBjbGllbnRzIHRoYXQgcmVjb25uZWN0IGZyb20gdGhlIHNhbWUgcG9ydC4KQEAgLTE5MDcsNiArMTk0Niw0MiBAQAogLy8jZGVmaW5lIE1CRURUTFNfU1NMX1ZBUklBQkxFX0JVRkZFUl9MRU5HVEgKIAogLyoqCisgKiBcZGVmIE1CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX01FTVNBTgorICoKKyAqIEVuYWJsZSB0ZXN0aW5nIG9mIHRoZSBjb25zdGFudC1mbG93IG5hdHVyZSBvZiBzb21lIHNlbnNpdGl2ZSBmdW5jdGlvbnMgd2l0aAorICogY2xhbmcncyBNZW1vcnlTYW5pdGl6ZXIuIFRoaXMgY2F1c2VzIHNvbWUgZXhpc3RpbmcgdGVzdHMgdG8gYWxzbyB0ZXN0CisgKiB0aGlzIG5vbi1mdW5jdGlvbmFsIHByb3BlcnR5IG9mIHRoZSBjb2RlIHVuZGVyIHRlc3QuCisgKgorICogVGhpcyBzZXR0aW5nIHJlcXVpcmVzIGNvbXBpbGluZyB3aXRoIGNsYW5nIC1mc2FuaXRpemU9bWVtb3J5LiBUaGUgdGVzdAorICogc3VpdGVzIGNhbiB0aGVuIGJlIHJ1biBub3JtYWxseS4KKyAqCisgKiBcd2FybmluZyBUaGlzIG1hY3JvIGlzIG9ubHkgdXNlZCBmb3IgZXh0ZW5kZWQgdGVzdGluZzsgaXQgaXMgbm90IGNvbnNpZGVyZWQKKyAqIHBhcnQgb2YgdGhlIGxpYnJhcnkncyBBUEksIHNvIGl0IG1heSBjaGFuZ2Ugb3IgZGlzYXBwZWFyIGF0IGFueSB0aW1lLgorICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgdGVzdGluZyBvZiB0aGUgY29uc3RhbnQtZmxvdyBuYXR1cmUgb2Ygc2VsZWN0ZWQgY29kZS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX01FTVNBTgorCisvKioKKyAqIFxkZWYgTUJFRFRMU19URVNUX0NPTlNUQU5UX0ZMT1dfVkFMR1JJTkQKKyAqCisgKiBFbmFibGUgdGVzdGluZyBvZiB0aGUgY29uc3RhbnQtZmxvdyBuYXR1cmUgb2Ygc29tZSBzZW5zaXRpdmUgZnVuY3Rpb25zIHdpdGgKKyAqIHZhbGdyaW5kJ3MgbWVtY2hlY2sgdG9vbC4gVGhpcyBjYXVzZXMgc29tZSBleGlzdGluZyB0ZXN0cyB0byBhbHNvIHRlc3QKKyAqIHRoaXMgbm9uLWZ1bmN0aW9uYWwgcHJvcGVydHkgb2YgdGhlIGNvZGUgdW5kZXIgdGVzdC4KKyAqCisgKiBUaGlzIHNldHRpbmcgcmVxdWlyZXMgdmFsZ3JpbmQgaGVhZGVycyBmb3IgYnVpbGRpbmcsIGFuZCBpcyBvbmx5IHVzZWZ1bCBmb3IKKyAqIHRlc3RpbmcgaWYgdGhlIHRlc3RzIHN1aXRlcyBhcmUgcnVuIHdpdGggdmFsZ3JpbmQncyBtZW1jaGVjay4gVGhpcyBjYW4gYmUKKyAqIGRvbmUgZm9yIGFuIGluZGl2aWR1YWwgdGVzdCBzdWl0ZSB3aXRoICd2YWxncmluZCAuL3Rlc3Rfc3VpdGVfeHh4Jywgb3Igd2hlbgorICogdXNpbmcgQ01ha2UsIHRoaXMgY2FuIGJlIGRvbmUgZm9yIGFsbCB0ZXN0IHN1aXRlcyB3aXRoICdtYWtlIG1lbWNoZWNrJy4KKyAqCisgKiBcd2FybmluZyBUaGlzIG1hY3JvIGlzIG9ubHkgdXNlZCBmb3IgZXh0ZW5kZWQgdGVzdGluZzsgaXQgaXMgbm90IGNvbnNpZGVyZWQKKyAqIHBhcnQgb2YgdGhlIGxpYnJhcnkncyBBUEksIHNvIGl0IG1heSBjaGFuZ2Ugb3IgZGlzYXBwZWFyIGF0IGFueSB0aW1lLgorICoKKyAqIFVuY29tbWVudCB0byBlbmFibGUgdGVzdGluZyBvZiB0aGUgY29uc3RhbnQtZmxvdyBuYXR1cmUgb2Ygc2VsZWN0ZWQgY29kZS4KKyAqLworLy8jZGVmaW5lIE1CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX1ZBTEdSSU5ECisKKy8qKgogICogXGRlZiBNQkVEVExTX1RFU1RfSE9PS1MKICAqCiAgKiBFbmFibGUgZmVhdHVyZXMgZm9yIGludmFzaXZlIHRlc3Rpbmcgc3VjaCBhcyBpbnRyb3NwZWN0aW9uIGZ1bmN0aW9ucyBhbmQKQEAgLTE5NzYsNiArMjA1MSwyMCBAQAogLy8jZGVmaW5lIE1CRURUTFNfVVNFX1BTQV9DUllQVE8KIAogLyoqCisgKiBcZGVmIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcKKyAqCisgKiBUaGlzIHNldHRpbmcgYWxsb3dzIHN1cHBvcnQgZm9yIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtcyB0aHJvdWdoIHRoZSBQU0EKKyAqIEFQSSB0byBiZSBjb25maWd1cmVkIHNlcGFyYXRlbHkgZnJvbSBzdXBwb3J0IHRocm91Z2ggdGhlIG1iZWR0bHMgQVBJLgorICoKKyAqIFVuY29tbWVudCB0aGlzIHRvIGVuYWJsZSB1c2Ugb2YgUFNBIENyeXB0byBjb25maWd1cmF0aW9uIHNldHRpbmdzIHdoaWNoCisgKiBjYW4gYmUgZm91bmQgaW4gaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oCisgKgorICogVGhpcyBmZWF0dXJlIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCBhbmQgaXMgbm90IHJlYWR5IGZvciBwcm9kdWN0aW9uIHNpbmNlCisgKiBpdCBpcyBub3QgY29tcGxldGVkLgorICovCisvLyNkZWZpbmUgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRworCisvKioKICAqIFxkZWYgTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTCiAgKgogICogQWxsb3cgcnVuLXRpbWUgY2hlY2tpbmcgb2YgY29tcGlsZS10aW1lIGVuYWJsZWQgZmVhdHVyZXMuIFRodXMgYWxsb3dpbmcgdXNlcnMKQEAgLTM0MTQsNyArMzUwMyw3IEBACiAgKi8KIAogLyogTVBJIC8gQklHTlVNIG9wdGlvbnMgKi8KLS8vI2RlZmluZSBNQkVEVExTX01QSV9XSU5ET1dfU0laRSAgICAgICAgICAgIDYgLyoqPCBNYXhpbXVtIHdpbmRvd3Mgc2l6ZSB1c2VkLiAqLworLy8jZGVmaW5lIE1CRURUTFNfTVBJX1dJTkRPV19TSVpFICAgICAgICAgICAgNiAvKio8IE1heGltdW0gd2luZG93IHNpemUgdXNlZC4gKi8KIC8vI2RlZmluZSBNQkVEVExTX01QSV9NQVhfU0laRSAgICAgICAgICAgIDEwMjQgLyoqPCBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBmb3IgdXNhYmxlIE1QSXMuICovCiAKIC8qIENUUl9EUkJHIG9wdGlvbnMgKi8KQEAgLTM3NjcsNiArMzg1Niw4IEBACiAjaW5jbHVkZSBNQkVEVExTX1VTRVJfQ09ORklHX0ZJTEUKICNlbmRpZgogCisjaW5jbHVkZSAibWJlZHRscy9jb25maWdfcHNhLmgiCisKICNpbmNsdWRlICJtYmVkdGxzL2NoZWNrX2NvbmZpZy5oIgogCiAjZW5kaWYgLyogTUJFRFRMU19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tYmVkdGxzL2NvbmZpZ19wc2EuaCBiL2luY2x1ZGUvbWJlZHRscy9jb25maWdfcHNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmNGQxOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWJlZHRscy9jb25maWdfcHNhLmgKQEAgLTAsMCArMSw4MiBAQAorLyoqCisgKiBcZmlsZSBtYmVkdGxzL2NvbmZpZ19wc2EuaAorICogXGJyaWVmIFBTQSBjcnlwdG8gY29uZmlndXJhdGlvbiBvcHRpb25zIChzZXQgb2YgZGVmaW5lcykKKyAqCisgKiAgVGhpcyBzZXQgb2YgY29tcGlsZS10aW1lIG9wdGlvbnMgdGFrZXMgc2V0dGluZ3MgZGVmaW5lZCBpbgorICogIGluY2x1ZGUvbWJlZHRscy9jb25maWcuaCBhbmQgaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oIGFuZCB1c2VzCisgKiAgdGhvc2UgZGVmaW5pdGlvbnMgdG8gZGVmaW5lIHN5bWJvbHMgdXNlZCBpbiB0aGUgbGlicmFyeSBjb2RlLgorICoKKyAqICBVc2VycyBhbmQgaW50ZWdyYXRvcnMgc2hvdWxkIG5vdCBlZGl0IHRoaXMgZmlsZSwgcGxlYXNlIGVkaXQKKyAqICBpbmNsdWRlL21iZWR0bHMvY29uZmlnLmggZm9yIE1CRVRMU19YWFggc2V0dGluZ3Mgb3IKKyAqICBpbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmggZm9yIFBTQV9XQU5UX1hYWCBzZXR0aW5ncy4KKyAqLworLyoKKyAqICBDb3B5cmlnaHQgVGhlIE1iZWQgVExTIENvbnRyaWJ1dG9ycworICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIE1CRURUTFNfQ09ORklHX1BTQV9ICisjZGVmaW5lIE1CRURUTFNfQ09ORklHX1BTQV9ICisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcpCisjaW5jbHVkZSAicHNhL2NyeXB0b19jb25maWcuaCIKKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcpICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRykKKworI2lmIGRlZmluZWQoUFNBX1dBTlRfQUxHX0VDRFNBKQorI2lmICFkZWZpbmVkKE1CRURUTFNfUFNBX0FDQ0VMX0FMR19FQ0RTQSkKKyNkZWZpbmUgTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfRUNEU0EgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNQkVEVExTX0VDRFNBX0MKKyNlbmRpZiAvKiAhTUJFRFRMU19QU0FfQUNDRUxfQUxHX0VDRFNBICovCisjZW5kaWYgLyogUFNBX1dBTlRfQUxHX0VDRFNBICovCisKKyNpZiBkZWZpbmVkKFBTQV9XQU5UX0FMR19ERVRFUk1JTklTVElDX0VDRFNBKQorI2lmICFkZWZpbmVkKE1CRURUTFNfUFNBX0FDQ0VMX0FMR19ERVRFUk1JTklTVElDX0VDRFNBKQorI2RlZmluZSBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19ERVRFUk1JTklTVElDX0VDRFNBICAgICAxCisjZGVmaW5lIE1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQworI2RlZmluZSBNQkVEVExTX0VDRFNBX0MKKyNkZWZpbmUgTUJFRFRMU19ITUFDX0RSQkdfQworI2RlZmluZSBNQkVEVExTX01EX0MKKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9BQ0NFTF9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSAqLworI2VuZGlmIC8qIFBTQV9XQU5UX0FMR19ERVRFUk1JTklTVElDX0VDRFNBICovCisKKyNlbHNlIC8qIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgKi8KKworLyoKKyAqIEVuc3VyZSBQU0FfV0FOVF8qIGRlZmluZXMgYXJlIHNldHVwIHByb3Blcmx5IGlmIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcKKyAqIGlzIG5vdCBkZWZpbmVkCisgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyNkZWZpbmUgTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfRUNEU0EKKworLy8gT25seSBhZGQgaW4gREVURVJNSU5JU1RJQyBzdXBwb3J0IGlmIEVDRFNBIGlzIGFsc28gZW5hYmxlZAorI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDKQorI2RlZmluZSBNQkVEVExTX1BTQV9CVUlMVElOX0FMR19ERVRFUk1JTklTVElDX0VDRFNBCisjZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDICovCisKKyNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0MgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1CRURUTFNfQ09ORklHX1BTQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21iZWR0bHMvZ2NtLmggYi9pbmNsdWRlL21iZWR0bHMvZ2NtLmgKaW5kZXggZWQyM2NiOS4uNmI2NzM2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tYmVkdGxzL2djbS5oCisrKyBiL2luY2x1ZGUvbWJlZHRscy9nY20uaApAQCAtMTU1LDcgKzE1NSw3IEBACiAgKiAgICAgICAgICAgICAgICAgIHRoYW4gemVybywgdGhpcyBtdXN0IGJlIGEgd3JpdGFibGUgYnVmZmVyIG9mIGF0IGxlYXN0IHRoYXQKICAqICAgICAgICAgICAgICAgICAgc2l6ZSBpbiBCeXRlcy4KICAqIFxwYXJhbSB0YWdfbGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgdGFnIHRvIGdlbmVyYXRlLgotICogXHBhcmFtIHRhZyAgICAgICBUaGUgYnVmZmVyIGZvciBob2xkaW5nIHRoZSB0YWcuIFRoaXMgbXVzdCBiZSBhIHJlYWRhYmxlCisgKiBccGFyYW0gdGFnICAgICAgIFRoZSBidWZmZXIgZm9yIGhvbGRpbmcgdGhlIHRhZy4gVGhpcyBtdXN0IGJlIGEgd3JpdGFibGUKICAqICAgICAgICAgICAgICAgICAgYnVmZmVyIG9mIGF0IGxlYXN0IFxwIHRhZ19sZW4gQnl0ZXMuCiAgKgogICogXHJldHVybiAgICAgICAgICBcYyAwIGlmIHRoZSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gd2FzIHBlcmZvcm1lZApAQCAtMjgzLDcgKzI4Myw3IEBACiAgKiAgICAgICAgICAgICAgICAgIHRhZy4gVGhlIHRhZyBjYW4gaGF2ZSBhIG1heGltdW0gbGVuZ3RoIG9mIDE2IEJ5dGVzLgogICoKICAqIFxwYXJhbSBjdHggICAgICAgVGhlIEdDTSBjb250ZXh0LiBUaGlzIG11c3QgYmUgaW5pdGlhbGl6ZWQuCi0gKiBccGFyYW0gdGFnICAgICAgIFRoZSBidWZmZXIgZm9yIGhvbGRpbmcgdGhlIHRhZy4gVGhpcyBtdXN0IGJlIGEgcmVhZGFibGUKKyAqIFxwYXJhbSB0YWcgICAgICAgVGhlIGJ1ZmZlciBmb3IgaG9sZGluZyB0aGUgdGFnLiBUaGlzIG11c3QgYmUgYSB3cml0YWJsZQogICogICAgICAgICAgICAgICAgICBidWZmZXIgb2YgYXQgbGVhc3QgXHAgdGFnX2xlbiBCeXRlcy4KICAqIFxwYXJhbSB0YWdfbGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgdGFnIHRvIGdlbmVyYXRlLiBUaGlzIG11c3QgYmUgYXQgbGVhc3QKICAqICAgICAgICAgICAgICAgICAgZm91ci4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWJlZHRscy9wc2FfdXRpbC5oIGIvaW5jbHVkZS9tYmVkdGxzL3BzYV91dGlsLmgKaW5kZXggM2MwMzcwNi4uZDhhMzJjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tYmVkdGxzL3BzYV91dGlsLmgKKysrIGIvaW5jbHVkZS9tYmVkdGxzL3BzYV91dGlsLmgKQEAgLTgzLDYgKzgzLDggQEAKIHsKICAgICBzd2l0Y2goIG1vZGUgKQogICAgIHsKKyAgICAgICAgY2FzZSBNQkVEVExTX01PREVfRUNCOgorICAgICAgICAgICAgcmV0dXJuKCBQU0FfQUxHX0VDQl9OT19QQURESU5HICk7CiAgICAgICAgIGNhc2UgTUJFRFRMU19NT0RFX0dDTToKICAgICAgICAgICAgIHJldHVybiggUFNBX0FMR19BRUFEX1dJVEhfVEFHX0xFTkdUSCggUFNBX0FMR19HQ00sIHRhZ2xlbiApICk7CiAgICAgICAgIGNhc2UgTUJFRFRMU19NT0RFX0NDTToKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWJlZHRscy9zc2wuaCBiL2luY2x1ZGUvbWJlZHRscy9zc2wuaAppbmRleCBmMDg2YmRmLi4xYjRlMTYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL21iZWR0bHMvc3NsLmgKKysrIGIvaW5jbHVkZS9tYmVkdGxzL3NzbC5oCkBAIC0yMTQsNiArMjE0LDkgQEAKICNkZWZpbmUgTUJFRFRMU19TU0xfQ0VSVF9SRVFfQ0FfTElTVF9FTkFCTEVEICAgICAgIDEKICNkZWZpbmUgTUJFRFRMU19TU0xfQ0VSVF9SRVFfQ0FfTElTVF9ESVNBQkxFRCAgICAgIDAKIAorI2RlZmluZSBNQkVEVExTX1NTTF9EVExTX1NSVFBfTUtJX1VOU1VQUE9SVEVEICAgIDAKKyNkZWZpbmUgTUJFRFRMU19TU0xfRFRMU19TUlRQX01LSV9TVVBQT1JURUQgICAgICAxCisKIC8qCiAgKiBEZWZhdWx0IHJhbmdlIGZvciBEVExTIHJldHJhbnNtaXNzaW9uIHRpbWVyIHZhbHVlLCBpbiBtaWxsaXNlY29uZHMuCiAgKiBSRkMgNjM0NyA0LjIuNC4xIHNheXMgZnJvbSAxIHNlY29uZCB0byA2MCBzZWNvbmRzLgpAQCAtMzkzLDYgKzM5Niw4IEBACiAKICNkZWZpbmUgTUJFRFRMU19UTFNfRVhUX1NJR19BTEcgICAgICAgICAgICAgICAgICAgICAxMwogCisjZGVmaW5lIE1CRURUTFNfVExTX0VYVF9VU0VfU1JUUCAgICAgICAgICAgICAgICAgICAgMTQKKwogI2RlZmluZSBNQkVEVExTX1RMU19FWFRfQUxQTiAgICAgICAgICAgICAgICAgICAgICAgIDE2CiAKICNkZWZpbmUgTUJFRFRMU19UTFNfRVhUX0VOQ1JZUFRfVEhFTl9NQUMgICAgICAgICAgICAyMiAvKiAweDE2ICovCkBAIC04NTEsNiArODU2LDQxIEBACiAjZW5kaWYgLyogTUJFRFRMU19LRVlfRVhDSEFOR0VfV0lUSF9DRVJUX0VOQUJMRUQgJiYKICAgICAgICAgICAhTUJFRFRMU19TU0xfS0VFUF9QRUVSX0NFUlRJRklDQVRFICovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKKworI2RlZmluZSBNQkVEVExTX1RMU19TUlRQX01BWF9NS0lfTEVOR1RIICAgICAgICAgICAgIDI1NQorI2RlZmluZSBNQkVEVExTX1RMU19TUlRQX01BWF9QUk9GSUxFX0xJU1RfTEVOR1RIICAgIDQKKy8qCisgKiBGb3IgY29kZSByZWFkYWJpbGl0eSB1c2UgYSB0eXBlZGVmIGZvciBEVExTLVNSVFAgcHJvZmlsZXMKKyAqCisgKiBVc2Vfc3J0cCBleHRlbnNpb24gcHJvdGVjdGlvbiBwcm9maWxlcyB2YWx1ZXMgYXMgZGVmaW5lZCBpbgorICogaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9zcnRwLXByb3RlY3Rpb24vc3J0cC1wcm90ZWN0aW9uLnhodG1sCisgKgorICogUmVtaW5kZXI6IGlmIHRoaXMgbGlzdCBpcyBleHBhbmRlZCBtYmVkdGxzX3NzbF9jaGVja19zcnRwX3Byb2ZpbGVfdmFsdWUKKyAqIG11c3QgYmUgdXBkYXRlZCB0b28uCisgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwICAgICAoICh1aW50MTZfdCkgMHgwMDAxKQorI2RlZmluZSBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfMzIgICAgICggKHVpbnQxNl90KSAweDAwMDIpCisjZGVmaW5lIE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfODAgICAgICAgICAgKCAodWludDE2X3QpIDB4MDAwNSkKKyNkZWZpbmUgTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV8zMiAgICAgICAgICAoICh1aW50MTZfdCkgMHgwMDA2KQorLyogVGhpcyBvbmUgaXMgbm90IGlhbmEgZGVmaW5lZCwgYnV0IGZvciBjb2RlIHJlYWRhYmlsaXR5LiAqLworI2RlZmluZSBNQkVEVExTX1RMU19TUlRQX1VOU0VUICAgICAgICAgICAgICAgICAgICAgICggKHVpbnQxNl90KSAweDAwMDApCisKK3R5cGVkZWYgdWludDE2X3QgbWJlZHRsc19zc2xfc3J0cF9wcm9maWxlOworCit0eXBlZGVmIHN0cnVjdCBtYmVkdGxzX2R0bHNfc3J0cF9pbmZvX3QKK3sKKyAgICAvKiEgVGhlIFNSVFAgcHJvZmlsZSB0aGF0IHdhcyBuZWdvdGlhdGVkLiAqLworICAgIG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSBjaG9zZW5fZHRsc19zcnRwX3Byb2ZpbGU7CisgICAgLyohIFRoZSBsZW5ndGggb2YgbWtpX3ZhbHVlLiAqLworICAgIHVpbnQxNl90IG1raV9sZW47CisgICAgLyohIFRoZSBta2lfdmFsdWUgdXNlZCwgd2l0aCBtYXggc2l6ZSBvZiAyNTYgYnl0ZXMuICovCisgICAgdW5zaWduZWQgY2hhciBta2lfdmFsdWVbTUJFRFRMU19UTFNfU1JUUF9NQVhfTUtJX0xFTkdUSF07Cit9CittYmVkdGxzX2R0bHNfc3J0cF9pbmZvOworCisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBzdG9yaW5nIGN1cnJlbnQgc2Vzc2lvbiBkYXRhLgogICoKQEAgLTEwNTcsNiArMTA5NywxMyBAQAogICAgIGNvbnN0IGNoYXIgKiphbHBuX2xpc3Q7ICAgICAgICAgLyohPCBvcmRlcmVkIGxpc3Qgb2YgcHJvdG9jb2xzICAgICAgICAgICovCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorICAgIC8qISBvcmRlcmVkIGxpc3Qgb2Ygc3VwcG9ydGVkIHNydHAgcHJvZmlsZSAqLworICAgIGNvbnN0IG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSAqZHRsc19zcnRwX3Byb2ZpbGVfbGlzdDsKKyAgICAvKiEgbnVtYmVyIG9mIHN1cHBvcnRlZCBwcm9maWxlcyAqLworICAgIHNpemVfdCBkdGxzX3NydHBfcHJvZmlsZV9saXN0X2xlbjsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKwogICAgIC8qCiAgICAgICogTnVtZXJpY2FsIHNldHRpbmdzIChpbnQgdGhlbiBjaGFyKQogICAgICAqLwpAQCAtMTEzNyw5ICsxMTg0LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcmVjb3JkIHdpdGggdW5leHBlY3RlZCBDSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBzaG91bGQgbGVhZCB0byBmYWlsdXJlLiAgICAqLwogI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfQ09OTkVDVElPTl9JRCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorICAgIHVuc2lnbmVkIGludCBkdGxzX3NydHBfbWtpX3N1cHBvcnQgOiAxOyAvKiBzdXBwb3J0IGhhdmluZyBta2lfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHVzZV9zcnRwIGV4dGVuc2lvbiAgICAgKi8KKyNlbmRpZgogfTsKIAotCiBzdHJ1Y3QgbWJlZHRsc19zc2xfY29udGV4dAogewogICAgIGNvbnN0IG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZjsgLyohPCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uICAgICAgICAgICovCkBAIC0xMjk4LDYgKzEzNDgsMTMgQEAKICAgICBjb25zdCBjaGFyICphbHBuX2Nob3NlbjsgICAgLyohPCAgbmVnb3RpYXRlZCBwcm90b2NvbCAgICAgICAgICAgICAgICAgICAqLwogI2VuZGlmIC8qIE1CRURUTFNfU1NMX0FMUE4gKi8KIAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorICAgIC8qCisgICAgICogdXNlX3NydHAgZXh0ZW5zaW9uCisgICAgICovCisgICAgbWJlZHRsc19kdGxzX3NydHBfaW5mbyBkdGxzX3NydHBfaW5mbzsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKwogICAgIC8qCiAgICAgICogSW5mb3JtYXRpb24gZm9yIERUTFMgaGVsbG8gdmVyaWZ5CiAgICAgICovCkBAIC0xNTU5LDcgKzE2MTYsNyBAQAogICogXG5vdGUgICAgICAgICAgIEZvciBEVExTLCB5b3UgbmVlZCB0byBwcm92aWRlIGVpdGhlciBhIG5vbi1OVUxMCiAgKiAgICAgICAgICAgICAgICAgZl9yZWN2X3RpbWVvdXQgY2FsbGJhY2ssIG9yIGEgZl9yZWN2IHRoYXQgZG9lc24ndCBibG9jay4KICAqCi0gKiBcbm90ZSAgICAgICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9ucyBvZiBcYyBtYmVkdGxzX3NzbF9zZW50X3QsCisgKiBcbm90ZSAgICAgICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9ucyBvZiBcYyBtYmVkdGxzX3NzbF9zZW5kX3QsCiAgKiAgICAgICAgICAgICAgICAgXGMgbWJlZHRsc19zc2xfcmVjdl90IGFuZCBcYyBtYmVkdGxzX3NzbF9yZWN2X3RpbWVvdXRfdCBmb3IKICAqICAgICAgICAgICAgICAgICB0aGUgY29udmVudGlvbnMgdGhvc2UgY2FsbGJhY2tzIG11c3QgZm9sbG93LgogICoKQEAgLTIwMzIsNiArMjA4OSw4IEBACiAgKiAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBub25lLikKICAqCiAgKiBcbm90ZSAgICAgICAgICAgIFNlZSBcYyBtYmVkdGxzX3NzbF9leHBvcnRfa2V5c19leHRfdC4KKyAqIFx3YXJuaW5nICAgICAgICAgRXhwb3J0ZWQga2V5IG1hdGVyaWFsIG11c3Qgbm90IGJlIHVzZWQgZm9yIGFueSBwdXJwb3NlCisgKiAgICAgICAgICAgICAgICAgIGJlZm9yZSB0aGUgKEQpVExTIGhhbmRzaGFrZSBpcyBjb21wbGV0ZWQKICAqCiAgKiBccGFyYW0gY29uZiAgICAgIFNTTCBjb25maWd1cmF0aW9uIGNvbnRleHQKICAqIFxwYXJhbSBmX2V4cG9ydF9rZXlzX2V4dCBDYWxsYmFjayBmb3IgZXhwb3J0aW5nIGtleXMKQEAgLTMxMjAsNiArMzE3OSwxMDUgQEAKIGNvbnN0IGNoYXIgKm1iZWR0bHNfc3NsX2dldF9hbHBuX3Byb3RvY29sKCBjb25zdCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wgKTsKICNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKKyNpZiBkZWZpbmVkKE1CRURUTFNfREVCVUdfQykKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbWJlZHRsc19zc2xfZ2V0X3NydHBfcHJvZmlsZV9hc19zdHJpbmcoIG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSBwcm9maWxlICkKK3sKKyAgICBzd2l0Y2goIHByb2ZpbGUgKQorICAgIHsKKyAgICAgICAgY2FzZSBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODA6CisgICAgICAgICAgICByZXR1cm4oICJNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODAiICk7CisgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyOgorICAgICAgICAgICAgcmV0dXJuKCAiTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiApOworICAgICAgICBjYXNlIE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfODA6CisgICAgICAgICAgICByZXR1cm4oICJNQkVEVExTX1RMU19TUlRQX05VTExfSE1BQ19TSEExXzgwIiApOworICAgICAgICBjYXNlIE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfMzI6CisgICAgICAgICAgICByZXR1cm4oICJNQkVEVExTX1RMU19TUlRQX05VTExfSE1BQ19TSEExXzMyIiApOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgcmV0dXJuKCAiIiApOworfQorI2VuZGlmIC8qIE1CRURUTFNfREVCVUdfQyAqLworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICAgICAgTWFuYWdlIHN1cHBvcnQgZm9yIG1raShtYXN0ZXIga2V5IGlkKSB2YWx1ZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGluIHVzZV9zcnRwIGV4dGVuc2lvbi4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBNS0kgaXMgYW4gb3B0aW9uYWwgcGFydCBvZiBTUlRQIHVzZWQgZm9yIGtleSBtYW5hZ2VtZW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJlLWtleWluZy4gU2VlIFJGQzM3MTEgc2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAjTUJFRFRMU19TU0xfRFRMU19TUlRQX01LSV9VTlNVUFBPUlRFRC4KKyAqCisgKiBccGFyYW0gY29uZiAgICAgICAgICAgICAgVGhlIFNTTCBjb25maWd1cmF0aW9uIHRvIG1hbmFnZSBta2kgc3VwcG9ydC4KKyAqIFxwYXJhbSBzdXBwb3J0X21raV92YWx1ZSBFbmFibGUgb3IgZGlzYWJsZSBta2kgdXNhZ2UuIFZhbHVlcyBhcmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAjTUJFRFRMU19TU0xfRFRMU19TUlRQX01LSV9VTlNVUFBPUlRFRAorICogICAgICAgICAgICAgICAgICAgICAgICAgIG9yICNNQkVEVExTX1NTTF9EVExTX1NSVFBfTUtJX1NVUFBPUlRFRC4KKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jb25mX3NydHBfbWtpX3ZhbHVlX3N1cHBvcnRlZCggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN1cHBvcnRfbWtpX3ZhbHVlICk7CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICAgICAgICAgIFNldCB0aGUgc3VwcG9ydGVkIERUTFMtU1JUUCBwcm90ZWN0aW9uIHByb2ZpbGVzLgorICoKKyAqIFxwYXJhbSBjb25mICAgICAgICAgICAgICBTU0wgY29uZmlndXJhdGlvbgorICogXHBhcmFtIHByb2ZpbGVzICAgICAgICAgIFBvaW50ZXIgdG8gYSBMaXN0IG9mIE1CRURUTFNfVExTX1NSVFBfVU5TRVQgdGVybWluYXRlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBwcm90ZWN0aW9uIHByb2ZpbGVzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gZGVjcmVhc2luZyBwcmVmZXJlbmNlIG9yZGVyLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSBsaXN0IGlzIHJlY29yZGVkIGJ5IHRoZSBsaWJyYXJ5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxhdGVyIHJlZmVyZW5jZSBhcyByZXF1aXJlZCwgc28gdGhlIGxpZmV0aW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHRhYmxlIG11c3QgYmUgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgbGlmZXRpbWUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgU1NMIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsaXN0IG11c3Qgbm90IGhvbGQgbW9yZSB0aGFuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19UTFNfU1JUUF9NQVhfUFJPRklMRV9MSVNUX0xFTkdUSCBlbGVtZW50cworICogICAgICAgICAgICAgICAgICAgICAgICAgIChleGNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE1CRURUTFNfVExTX1NSVFBfVU5TRVQpLgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MKKyAqIFxyZXR1cm4gICAgICAgICAgICAgICAgICAjTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBIHdoZW4gdGhlIGxpc3Qgb2YKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0aW9uIHByb2ZpbGVzIGlzIGluY29ycmVjdC4KKyAqLworaW50IG1iZWR0bHNfc3NsX2NvbmZfZHRsc19zcnRwX3Byb3RlY3Rpb25fcHJvZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSAqcHJvZmlsZXMgKTsKKworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICAgICBTZXQgdGhlIG1raV92YWx1ZSBmb3IgdGhlIGN1cnJlbnQgRFRMUy1TUlRQIHNlc3Npb24uCisgKgorICogXHBhcmFtIHNzbCAgICAgICAgICAgICAgU1NMIGNvbnRleHQgdG8gdXNlLgorICogXHBhcmFtIG1raV92YWx1ZSAgICAgICAgVGhlIE1LSSB2YWx1ZSB0byBzZXQuCisgKiBccGFyYW0gbWtpX2xlbiAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBNS0kgdmFsdWUuCisgKgorICogXG5vdGUgICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZWxldmFudCBvbiBjbGllbnQgc2lkZSBvbmx5LgorICogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHNlcnZlciBkaXNjb3ZlcnMgdGhlIG1raSB2YWx1ZSBkdXJpbmcgaGFuZHNoYWtlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgQSBta2kgdmFsdWUgc2V0IG9uIHNlcnZlciBzaWRlIHVzaW5nIHRoaXMgZnVuY3Rpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGlnbm9yZWQuCisgKgorICogXHJldHVybiAgICAgICAgICAgICAgICAgMCBvbiBzdWNjZXNzCisgKiBccmV0dXJuICAgICAgICAgICAgICAgICAjTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBCisgKiBccmV0dXJuICAgICAgICAgICAgICAgICAjTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUKKyAqLworaW50IG1iZWR0bHNfc3NsX2R0bHNfc3J0cF9zZXRfbWtpX3ZhbHVlKCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm1raV92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbWtpX2xlbiApOworLyoqCisgKiBcYnJpZWYgICAgICAgICAgICAgICAgICBHZXQgdGhlIG5lZ290aWF0ZWQgRFRMUy1TUlRQIGluZm9ybWF0aW9uczoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RlY3Rpb24gcHJvZmlsZSBhbmQgTUtJIHZhbHVlLgorICoKKyAqIFx3YXJuaW5nICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGhhbmRzaGFrZSBpcworICogICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkLiBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmUgdHJ1c3RlZCBvciBhY3RlZCB1cG9uIGJlZm9yZSB0aGUgaGFuZHNoYWtlIGNvbXBsZXRlcy4KKyAqCisgKiBccGFyYW0gc3NsICAgICAgICAgICAgICBUaGUgU1NMIGNvbnRleHQgdG8gcXVlcnkuCisgKiBccGFyYW0gZHRsc19zcnRwX2luZm8gICBUaGUgbmVnb3RpYXRlZCBEVExTLVNSVFAgaW5mb3JtYXRpb25zOgorICogICAgICAgICAgICAgICAgICAgICAgICAgLSBQcm90ZWN0aW9uIHByb2ZpbGUgaW4gdXNlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgQSBkaXJlY3QgbWFwcGluZyBvZiB0aGUgaWFuYSBkZWZpbmVkIHZhbHVlIGZvciBwcm90ZWN0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlIG9uIGFuIHVpbnQxNl90LgorICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvc3J0cC1wcm90ZWN0aW9uL3NydHAtcHJvdGVjdGlvbi54aHRtbAorICogICAgICAgICAgICAgICAgICAgICAgICAgI01CRURUTFNfVExTX1NSVFBfVU5TRVQgaWYgdGhlIHVzZSBvZiBTUlRQIHdhcyBub3QgbmVnb3RpYXRlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgb3IgcGVlcidzIEhlbGxvIHBhY2tldCB3YXMgbm90IHBhcnNlZCB5ZXQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIG1raSBzaXplIGFuZCB2YWx1ZSggaWYgc2l6ZSBpcyA+IDAgKS4KKyAqLwordm9pZCBtYmVkdGxzX3NzbF9nZXRfZHRsc19zcnRwX25lZ290aWF0aW9uX3Jlc3VsdCggY29uc3QgbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19kdGxzX3NydHBfaW5mbyAqZHRsc19zcnRwX2luZm8gKTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKwogLyoqCiAgKiBcYnJpZWYgICAgICAgICAgU2V0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCB2ZXJzaW9uIHNlbnQgZnJvbSB0aGUgY2xpZW50IHNpZGUKICAqICAgICAgICAgICAgICAgICBhbmQvb3IgYWNjZXB0ZWQgYXQgdGhlIHNlcnZlciBzaWRlCmRpZmYgLS1naXQgYS9pbmNsdWRlL21iZWR0bHMvc3NsX2ludGVybmFsLmggYi9pbmNsdWRlL21iZWR0bHMvc3NsX2ludGVybmFsLmgKaW5kZXggMWM0M2FmOC4uMWRjOTY0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tYmVkdGxzL3NzbF9pbnRlcm5hbC5oCisrKyBiL2luY2x1ZGUvbWJlZHRscy9zc2xfaW50ZXJuYWwuaApAQCAtMTQ0LDEyICsxNDQsMjYgQEAKICNkZWZpbmUgTUJFRFRMU19TU0xfQ09NUFJFU1NJT05fQUREICAgICAgICAgICAgIDAKICNlbmRpZgogCisvKiBUaGlzIG1hY3JvIGRldGVybWluZXMgd2hldGhlciBDQkMgaXMgc3VwcG9ydGVkLiAqLworI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoIGRlZmluZWQoTUJFRFRMU19BRVNfQykgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZGVmaW5lZChNQkVEVExTX0FSSUFfQykgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGRlZmluZWQoTUJFRFRMU19ERVNfQykgKQorI2RlZmluZSBNQkVEVExTX1NTTF9TT01FX1NVSVRFU19VU0VfQ0JDCisjZW5kaWYKKworLyogVGhpcyBtYWNybyBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIENCQyBjb25zdHJ1Y3QgdXNlZCBpbiBUTFMgMS4wLTEuMiAoYXMKKyAqIG9wcG9zZWQgdG8gdGhlIHZlcnkgZGlmZmVyZW50IENCQyBjb25zdHJ1Y3QgdXNlZCBpbiBTU0x2MykgaXMgc3VwcG9ydGVkLiAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU09NRV9TVUlURVNfVVNFX0NCQykgJiYgXAorICAgICggZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxKSB8fCAgICAgICAgXAorICAgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEpIHx8ICAgICAgXAorICAgICAgZGVmaW5lZChNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIpICkKKyNkZWZpbmUgTUJFRFRMU19TU0xfU09NRV9TVUlURVNfVVNFX1RMU19DQkMKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChNQkVEVExTX0FSQzRfQykgfHwgZGVmaW5lZChNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUikgfHwgICBcCi0gICAgKCBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoIGRlZmluZWQoTUJFRFRMU19BRVNfQykgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRlZmluZWQoTUJFRFRMU19BUklBX0MpICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRlZmluZWQoTUJFRFRMU19ERVNfQykgKSApCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9TT01FX1NVSVRFU19VU0VfQ0JDKQogI2RlZmluZSBNQkVEVExTX1NTTF9TT01FX01PREVTX1VTRV9NQUMKICNlbmRpZgogCkBAIC0zNjQsNiArMzc4LDQ5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcmFuZG9tLCBzaXplX3QgcmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkc3RidWYsIHNpemVfdCBkbGVuICk7CisKKy8qIGNpcGhlci5oIGV4cG9ydHMgdGhlIG1heGltdW0gSVYsIGtleSBhbmQgYmxvY2sgbGVuZ3RoIGZyb20KKyAqIGFsbCBjaXBoZXJzIGVuYWJsZWQgaW4gdGhlIGNvbmZpZywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRob3NlCisgKiBjaXBoZXJzIGFyZSBhY3R1YWxseSB1c2FibGUgaW4gU1NML1RMUy4gTm90YWJseSwgWFRTIGlzIGVuYWJsZWQKKyAqIGluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYW5kIHVzZXMgNjQgQnl0ZSBrZXlzLCBidXQgaXQgaXMKKyAqIG5vdCB1c2VkIGZvciByZWNvcmQgcHJvdGVjdGlvbiBpbiBTU0wvVExTLgorICoKKyAqIEluIG9yZGVyIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgaW5mbGF0aW9uIG9mIGtleSBzdHJ1Y3R1cmVzLAorICogd2UgaW50cm9kdWNlIFNTTC1zcGVjaWZpYyB2YXJpYW50cyBvZiB0aGUgbWF4LXtrZXksYmxvY2ssSVZ9CisgKiBtYWNyb3MgaGVyZSB3aGljaCBhcmUgbWVhbnQgdG8gb25seSB0YWtlIHRob3NlIGNpcGhlcnMgaW50bworICogYWNjb3VudCB3aGljaCBjYW4gYmUgbmVnb3RpYXRlZCBpbiBTU0wvVExTLgorICoKKyAqIFNpbmNlIHRoZSBjdXJyZW50IGRlZmluaXRpb25zIG9mIE1CRURUTFNfTUFYX3tLRVl8QkxPQ0t8SVZ9X0xFTkdUSAorICogaW4gY2lwaGVyLmggYXJlIHJvdWdoIG92ZXJhcHByb3hpbWF0aW9ucyBvZiB0aGUgcmVhbCBtYXhpbWEsIGhlcmUKKyAqIHdlIGNvbnRlbnQgb3Vyc2VsdmVzIHdpdGggcmVwbGljYXRpbmcgdGhvc2Ugb3ZlcmFwcHJveGltYXRpb25zCisgKiBmb3IgdGhlIG1heGltdW0gYmxvY2sgYW5kIElWIGxlbmd0aCwgYW5kIGV4Y2x1ZGluZyBYVFMgZnJvbSB0aGUKKyAqIGNvbXB1dGF0aW9uIG9mIHRoZSBtYXhpbXVtIGtleSBsZW5ndGguICovCisjZGVmaW5lIE1CRURUTFNfU1NMX01BWF9CTE9DS19MRU5HVEggMTYKKyNkZWZpbmUgTUJFRFRMU19TU0xfTUFYX0lWX0xFTkdUSCAgICAxNgorI2RlZmluZSBNQkVEVExTX1NTTF9NQVhfS0VZX0xFTkdUSCAgIDMyCisKKy8qKgorICogXGJyaWVmICAgVGhlIGRhdGEgc3RydWN0dXJlIGhvbGRpbmcgdGhlIGNyeXB0b2dyYXBoaWMgbWF0ZXJpYWwgKGtleSBhbmQgSVYpCisgKiAgICAgICAgICB1c2VkIGZvciByZWNvcmQgcHJvdGVjdGlvbiBpbiBUTFMgMS4zLgorICovCitzdHJ1Y3QgbWJlZHRsc19zc2xfa2V5X3NldAoreworICAgIC8qISBUaGUga2V5IGZvciBjbGllbnQtPnNlcnZlciByZWNvcmRzLiAqLworICAgIHVuc2lnbmVkIGNoYXIgY2xpZW50X3dyaXRlX2tleVsgTUJFRFRMU19TU0xfTUFYX0tFWV9MRU5HVEggXTsKKyAgICAvKiEgVGhlIGtleSBmb3Igc2VydmVyLT5jbGllbnQgcmVjb3Jkcy4gKi8KKyAgICB1bnNpZ25lZCBjaGFyIHNlcnZlcl93cml0ZV9rZXlbIE1CRURUTFNfU1NMX01BWF9LRVlfTEVOR1RIIF07CisgICAgLyohIFRoZSBJViAgZm9yIGNsaWVudC0+c2VydmVyIHJlY29yZHMuICovCisgICAgdW5zaWduZWQgY2hhciBjbGllbnRfd3JpdGVfaXZbIE1CRURUTFNfU1NMX01BWF9JVl9MRU5HVEggXTsKKyAgICAvKiEgVGhlIElWICBmb3Igc2VydmVyLT5jbGllbnQgcmVjb3Jkcy4gKi8KKyAgICB1bnNpZ25lZCBjaGFyIHNlcnZlcl93cml0ZV9pdlsgTUJFRFRMU19TU0xfTUFYX0lWX0xFTkdUSCBdOworCisgICAgc2l6ZV90IGtleV9sZW47IC8qITwgVGhlIGxlbmd0aCBvZiBjbGllbnRfd3JpdGVfa2V5IGFuZAorICAgICAgICAgICAgICAgICAgICAgKiAgIHNlcnZlcl93cml0ZV9rZXksIGluIEJ5dGVzLiAqLworICAgIHNpemVfdCBpdl9sZW47ICAvKiE8IFRoZSBsZW5ndGggb2YgY2xpZW50X3dyaXRlX2l2IGFuZAorICAgICAgICAgICAgICAgICAgICAgKiAgIHNlcnZlcl93cml0ZV9pdiwgaW4gQnl0ZXMuICovCit9OwordHlwZWRlZiBzdHJ1Y3QgbWJlZHRsc19zc2xfa2V5X3NldCBtYmVkdGxzX3NzbF9rZXlfc2V0OworCiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHBhcmFtZXRlcnMgb25seSBuZWVkZWQgZHVyaW5nIGhhbmRzaGFrZS4KICAqLwpAQCAtMTAzOCw2ICsxMDk1LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IG1kICk7CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorc3RhdGljIGlubGluZSBtYmVkdGxzX3NzbF9zcnRwX3Byb2ZpbGUgbWJlZHRsc19zc2xfY2hlY2tfc3J0cF9wcm9maWxlX3ZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBjb25zdCB1aW50MTZfdCBzcnRwX3Byb2ZpbGVfdmFsdWUgKQoreworICAgIHN3aXRjaCggc3J0cF9wcm9maWxlX3ZhbHVlICkKKyAgICB7CisgICAgICAgIGNhc2UgTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwOgorICAgICAgICBjYXNlIE1CRURUTFNfVExTX1NSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMjoKKyAgICAgICAgY2FzZSBNQkVEVExTX1RMU19TUlRQX05VTExfSE1BQ19TSEExXzgwOgorICAgICAgICBjYXNlIE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfMzI6CisgICAgICAgICAgICByZXR1cm4gc3J0cF9wcm9maWxlX3ZhbHVlOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgcmV0dXJuKCBNQkVEVExTX1RMU19TUlRQX1VOU0VUICk7Cit9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoTUJFRFRMU19YNTA5X0NSVF9QQVJTRV9DKQogc3RhdGljIGlubGluZSBtYmVkdGxzX3BrX2NvbnRleHQgKm1iZWR0bHNfc3NsX293bl9rZXkoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21iZWR0bHMvdmVyc2lvbi5oIGIvaW5jbHVkZS9tYmVkdGxzL3ZlcnNpb24uaAppbmRleCBkNjJkMzEyLi42NjVhMjgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL21iZWR0bHMvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvbWJlZHRscy92ZXJzaW9uLmgKQEAgLTM3LDcgKzM3LDcgQEAKICAqIE1ham9yLCBNaW5vciwgUGF0Y2hsZXZlbAogICovCiAjZGVmaW5lIE1CRURUTFNfVkVSU0lPTl9NQUpPUiAgMgotI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fTUlOT1IgIDIzCisjZGVmaW5lIE1CRURUTFNfVkVSU0lPTl9NSU5PUiAgMjQKICNkZWZpbmUgTUJFRFRMU19WRVJTSU9OX1BBVENIICAwCiAKIC8qKgpAQCAtNDUsOSArNDUsOSBAQAogICogICAgTU1OTlBQMDAKICAqICAgIE1ham9yIHZlcnNpb24gfCBNaW5vciB2ZXJzaW9uIHwgUGF0Y2ggdmVyc2lvbgogICovCi0jZGVmaW5lIE1CRURUTFNfVkVSU0lPTl9OVU1CRVIgICAgICAgICAweDAyMTcwMDAwCi0jZGVmaW5lIE1CRURUTFNfVkVSU0lPTl9TVFJJTkcgICAgICAgICAiMi4yMy4wIgotI2RlZmluZSBNQkVEVExTX1ZFUlNJT05fU1RSSU5HX0ZVTEwgICAgIm1iZWQgVExTIDIuMjMuMCIKKyNkZWZpbmUgTUJFRFRMU19WRVJTSU9OX05VTUJFUiAgICAgICAgIDB4MDIxODAwMDAKKyNkZWZpbmUgTUJFRFRMU19WRVJTSU9OX1NUUklORyAgICAgICAgICIyLjI0LjAiCisjZGVmaW5lIE1CRURUTFNfVkVSU0lPTl9TVFJJTkdfRlVMTCAgICAibWJlZCBUTFMgMi4yNC4wIgogCiAjaWYgZGVmaW5lZChNQkVEVExTX1ZFUlNJT05fQykKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wc2EvY3J5cHRvLmggYi9pbmNsdWRlL3BzYS9jcnlwdG8uaAppbmRleCBhMzE2MTY2Li41YmExNmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BzYS9jcnlwdG8uaAorKysgYi9pbmNsdWRlL3BzYS9jcnlwdG8uaApAQCAtMTQ2LDExICsxNDYsMTEgQEAKICAqIGxpbmthZ2UpLiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBwcm92aWRlZCBhcyBhIGZ1bmN0aW9uLWxpa2UgbWFjcm8sCiAgKiBidXQgaW4gdGhpcyBjYXNlIGl0IG11c3QgZXZhbHVhdGUgZWFjaCBvZiBpdHMgYXJndW1lbnRzIGV4YWN0bHkgb25jZS4KICAqCi0gKiBccGFyYW1bb3V0XSBhdHRyaWJ1dGVzICAgICAgIFRoZSBhdHRyaWJ1dGUgc3RydWN0dXJlIHRvIHdyaXRlIHRvLgotICogXHBhcmFtIGlkICAgICAgICAgICAgICAgICAgICBUaGUgcGVyc2lzdGVudCBpZGVudGlmaWVyIGZvciB0aGUga2V5LgorICogXHBhcmFtW291dF0gYXR0cmlidXRlcyAgVGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgdG8gd3JpdGUgdG8uCisgKiBccGFyYW0ga2V5ICAgICAgICAgICAgICBUaGUgcGVyc2lzdGVudCBpZGVudGlmaWVyIGZvciB0aGUga2V5LgogICovCi1zdGF0aWMgdm9pZCBwc2Ffc2V0X2tleV9pZChwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfaWRfdCBpZCk7CitzdGF0aWMgdm9pZCBwc2Ffc2V0X2tleV9pZCggcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ICk7CiAKIC8qKiBTZXQgdGhlIGxvY2F0aW9uIG9mIGEgcGVyc2lzdGVudCBrZXkuCiAgKgpAQCAtMTkyLDcgKzE5Miw4IEBACiAgKiAgICAgICAgIFRoaXMgdmFsdWUgaXMgdW5zcGVjaWZpZWQgaWYgdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgZGVjbGFyZXMKICAqICAgICAgICAgdGhlIGtleSBhcyB2b2xhdGlsZS4KICAqLwotc3RhdGljIHBzYV9rZXlfaWRfdCBwc2FfZ2V0X2tleV9pZChjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcyk7CitzdGF0aWMgbWJlZHRsc19zdmNfa2V5X2lkX3QgcHNhX2dldF9rZXlfaWQoCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMpOwogCiAvKiogUmV0cmlldmUgdGhlIGxpZmV0aW1lIGZyb20ga2V5IGF0dHJpYnV0ZXMuCiAgKgpAQCAtMzkyLDggKzM5Myw5IEBACiAgKiB3aXRoIGEgbGlmZXRpbWUgb3RoZXIgdGhhbiAjUFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRS4gQSBwZXJzaXN0ZW50IGtleQogICogYWx3YXlzIGhhcyBhIG5vbnplcm8ga2V5IGlkZW50aWZpZXIsIHNldCB3aXRoIHBzYV9zZXRfa2V5X2lkKCkgd2hlbgogICogY3JlYXRpbmcgdGhlIGtleS4gSW1wbGVtZW50YXRpb25zIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgcHJlLXByb3Zpc2lvbmVkCi0gKiBrZXlzIHRoYXQgY2FuIGJlIG9wZW5lZCB3aXRoIHBzYV9vcGVuX2tleSgpLiBTdWNoIGtleXMgaGF2ZSBhIGtleSBpZGVudGlmaWVyCi0gKiBpbiB0aGUgdmVuZG9yIHJhbmdlLCBhcyBkb2N1bWVudGVkIGluIHRoZSBkZXNjcmlwdGlvbiBvZiAjcHNhX2tleV9pZF90LgorICoga2V5cyB0aGF0IGNhbiBiZSBvcGVuZWQgd2l0aCBwc2Ffb3Blbl9rZXkoKS4gU3VjaCBrZXlzIGhhdmUgYW4gYXBwbGljYXRpb24KKyAqIGtleSBpZGVudGlmaWVyIGluIHRoZSB2ZW5kb3IgcmFuZ2UsIGFzIGRvY3VtZW50ZWQgaW4gdGhlIGRlc2NyaXB0aW9uIG9mCisgKiAjcHNhX2tleV9pZF90LgogICoKICAqIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGV2ZW50dWFsbHkgY2xvc2UgdGhlIGhhbmRsZSB3aXRoIHBzYV9jbG9zZV9rZXkoKSBvcgogICogcHNhX2Rlc3Ryb3lfa2V5KCkgdG8gcmVsZWFzZSBhc3NvY2lhdGVkIHJlc291cmNlcy4gSWYgdGhlIGFwcGxpY2F0aW9uIGRpZXMKQEAgLTQwOCw3ICs0MTAsNyBAQAogICogcG9ydGFibGUgdG8gaW1wbGVtZW50YXRpb25zIHRoYXQgb25seSBwZXJtaXQgYSBzaW5nbGUga2V5IGhhbmRsZSB0byBiZQogICogb3BlbmVkLiBTZWUgYWxzbyA6cmVmOlxga2V5LWhhbmRsZXNcYC4KICAqCi0gKiBccGFyYW0gaWQgICAgICAgICAgICBUaGUgcGVyc2lzdGVudCBpZGVudGlmaWVyIG9mIHRoZSBrZXkuCisgKiBccGFyYW0ga2V5ICAgICAgICAgICBUaGUgcGVyc2lzdGVudCBpZGVudGlmaWVyIG9mIHRoZSBrZXkuCiAgKiBccGFyYW1bb3V0XSBoYW5kbGUgICBPbiBzdWNjZXNzLCBhIGhhbmRsZSB0byB0aGUga2V5LgogICoKICAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCkBAIC00MzYsOSArNDM4LDggQEAKICAqICAgICAgICAgSXQgaXMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IHdoZXRoZXIgYSBmYWlsdXJlIHRvIGluaXRpYWxpemUKICAqICAgICAgICAgcmVzdWx0cyBpbiB0aGlzIGVycm9yIGNvZGUuCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2Ffb3Blbl9rZXkocHNhX2tleV9pZF90IGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90ICpoYW5kbGUpOwotCitwc2Ffc3RhdHVzX3QgcHNhX29wZW5fa2V5KCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90ICpoYW5kbGUgKTsKIAogLyoqIENsb3NlIGEga2V5IGhhbmRsZS4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmggYi9pbmNsdWRlL3BzYS9jcnlwdG9fY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiYjE4ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvcHNhL2NyeXB0b19jb25maWcuaApAQCAtMCwwICsxLDU2IEBACisvKioKKyAqIFxmaWxlIHBzYS9jcnlwdG9fY29uZmlnLmgKKyAqIFxicmllZiBQU0EgY3J5cHRvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoc2V0IG9mIGRlZmluZXMpCisgKgorICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHKQorLyoqCisgKiBXaGVuICNNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHIGlzIGVuYWJsZWQgaW4gY29uZmlnLmgsCisgKiB0aGlzIGZpbGUgZGV0ZXJtaW5lcyB3aGljaCBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbXMgYXJlIGVuYWJsZWQKKyAqIHRocm91Z2ggdGhlIFBTQSBDcnlwdG9ncmFwaHkgQVBJIChcYyBwc2FfeHh4KCkgZnVuY3Rpb25zKS4KKyAqCisgKiBUbyBlbmFibGUgYSBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbSwgdW5jb21tZW50IHRoZSBkZWZpbml0aW9uIG9mCisgKiB0aGUgY29ycmVzcG9uZGluZyBcYyBQU0FfV0FOVF94eHggcHJlcHJvY2Vzc29yIHN5bWJvbC4KKyAqIFRvIGRpc2FibGUgYSBjcnlwdG9ncmFwaGljIG1lY2hhbmlzbSwgY29tbWVudCBvdXQgdGhlIGRlZmluaXRpb24gb2YKKyAqIHRoZSBjb3JyZXNwb25kaW5nIFxjIFBTQV9XQU5UX3h4eCBwcmVwcm9jZXNzb3Igc3ltYm9sLgorICogVGhlIG5hbWVzIG9mIGNyeXB0b2dyYXBoaWMgbWVjaGFuaXNtcyBjb3JyZXNwb25kIHRvIHZhbHVlcworICogZGVmaW5lZCBpbiBwc2EvY3J5cHRvX3ZhbHVlcy5oLCB3aXRoIHRoZSBwcmVmaXggXGMgUFNBX1dBTlRfIGluc3RlYWQKKyAqIG9mIFxjIFBTQV8uCisgKgorICogTm90ZSB0aGF0IG1hbnkgY3J5cHRvZ3JhcGhpYyBtZWNoYW5pc21zIGludm9sdmUgdHdvIHN5bWJvbHM6IG9uZSBmb3IKKyAqIHRoZSBrZXkgdHlwZSAoXGMgUFNBX1dBTlRfS0VZX1RZUEVfeHh4KSBhbmQgb25lIGZvciB0aGUgYWxnb3JpdGhtCisgKiAoXGMgUFNBX1dBTlRfQUxHX3h4eCkuIE1lY2hhbmlzbXMgd2l0aCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgbWF5IGludm9sdmUKKyAqIGFkZGl0aW9uYWwgc3ltYm9scy4KKyAqLworI2Vsc2UKKy8qKgorICogV2hlbiBcYyBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHIGlzIGRpc2FibGVkIGluIGNvbmZpZy5oLAorICogdGhpcyBmaWxlIGlzIG5vdCB1c2VkLCBhbmQgY3J5cHRvZ3JhcGhpYyBtZWNoYW5pc21zIGFyZSBzdXBwb3J0ZWQKKyAqIHRocm91Z2ggdGhlIFBTQSBBUEkgaWYgYW5kIG9ubHkgaWYgdGhleSBhcmUgc3VwcG9ydGVkIHRocm91Z2ggdGhlCisgKiBtYmVkdGxzX3h4eCBBUEkuCisgKi8KKyNlbmRpZgorLyoKKyAqICBDb3B5cmlnaHQgVGhlIE1iZWQgVExTIENvbnRyaWJ1dG9ycworICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIFBTQV9DUllQVE9fQ09ORklHX0gKKyNkZWZpbmUgUFNBX0NSWVBUT19DT05GSUdfSAorCisjZGVmaW5lIFBTQV9XQU5UX0FMR19FQ0RTQSAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBTQV9XQU5UX0FMR19ERVRFUk1JTklTVElDX0VDRFNBICAgICAgICAxCisKKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BzYS9jcnlwdG9fZXh0cmEuaCBiL2luY2x1ZGUvcHNhL2NyeXB0b19leHRyYS5oCmluZGV4IGYwYzc5NzkuLjcxYWRiOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHNhL2NyeXB0b19leHRyYS5oCisrKyBiL2luY2x1ZGUvcHNhL2NyeXB0b19leHRyYS5oCkBAIC0yMzIsOSArMjMyLDkgQEAKICAgICAvKiogTnVtYmVyIG9mIHNsb3RzIHRoYXQgYXJlIG5vdCB1c2VkIGZvciBhbnl0aGluZy4gKi8KICAgICBzaXplX3QgZW1wdHlfc2xvdHM7CiAgICAgLyoqIExhcmdlc3Qga2V5IGlkIHZhbHVlIGFtb25nIG9wZW4ga2V5cyBpbiBpbnRlcm5hbCBwZXJzaXN0ZW50IHN0b3JhZ2UuICovCi0gICAgcHNhX2FwcF9rZXlfaWRfdCBtYXhfb3Blbl9pbnRlcm5hbF9rZXlfaWQ7CisgICAgcHNhX2tleV9pZF90IG1heF9vcGVuX2ludGVybmFsX2tleV9pZDsKICAgICAvKiogTGFyZ2VzdCBrZXkgaWQgdmFsdWUgYW1vbmcgb3BlbiBrZXlzIGluIHNlY3VyZSBlbGVtZW50cy4gKi8KLSAgICBwc2FfYXBwX2tleV9pZF90IG1heF9vcGVuX2V4dGVybmFsX2tleV9pZDsKKyAgICBwc2Ffa2V5X2lkX3QgbWF4X29wZW5fZXh0ZXJuYWxfa2V5X2lkOwogfSBtYmVkdGxzX3BzYV9zdGF0c190OwogCiAvKiogXGJyaWVmIEdldCBzdGF0aXN0aWNzIGFib3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL3BzYS9jcnlwdG9fcGxhdGZvcm0uaCBiL2luY2x1ZGUvcHNhL2NyeXB0b19wbGF0Zm9ybS5oCmluZGV4IDc3YzBlNWIuLmM2NGY2MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHNhL2NyeXB0b19wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvcHNhL2NyeXB0b19wbGF0Zm9ybS5oCkBAIC00NCw1NyArNDQsNDAgQEAKIC8qIFBTQSByZXF1aXJlcyBzZXZlcmFsIHR5cGVzIHdoaWNoIEM5OSBwcm92aWRlcyBpbiBzdGRpbnQuaC4gKi8KICNpbmNsdWRlIDxzdGRpbnQuaD4KIAorI2lmICggZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pIHx8IGRlZmluZWQoX01TQ19WRVIpICkgJiYgXAorICAgICFkZWZpbmVkKGlubGluZSkgJiYgIWRlZmluZWQoX19jcGx1c3BsdXMpCisjZGVmaW5lIGlubGluZSBfX2lubGluZQorI2VuZGlmCisKIC8qIEludGVncmFsIHR5cGUgcmVwcmVzZW50aW5nIGEga2V5IGhhbmRsZS4gKi8KIHR5cGVkZWYgdWludDE2X3QgcHNhX2tleV9oYW5kbGVfdDsKIAotLyogVGhpcyBpbXBsZW1lbnRhdGlvbiBkaXN0aW5ndWlzaGVzICphcHBsaWNhdGlvbiBrZXkgaWRlbnRpZmllcnMqLCB3aGljaAotICogYXJlIHRoZSBrZXkgaWRlbnRpZmllcnMgc3BlY2lmaWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiwgZnJvbQotICogKmtleSBmaWxlIGlkZW50aWZpZXJzKiwgd2hpY2ggYXJlIHRoZSBrZXkgaWRlbnRpZmllcnMgdGhhdCB0aGUgbGlicmFyeQotICogc2VlcyBpbnRlcm5hbGx5LiBUaGUgdHdvIHR5cGVzIGNhbiBiZSBkaWZmZXJlbnQgaWYgdGhlcmUgaXMgYSByZW1vdGUKLSAqIGNhbGwgbGF5ZXIgYmV0d2VlbiB0aGUgYXBwbGljYXRpb24gYW5kIHRoZSBsaWJyYXJ5IHdoaWNoIHN1cHBvcnRzCi0gKiBtdWx0aXBsZSBjbGllbnQgYXBwbGljYXRpb25zIHRoYXQgZG8gbm90IGhhdmUgYWNjZXNzIHRvIGVhY2ggb3RoZXJzJwotICoga2V5cy4gVGhlIHBvaW50IG9mIGhhdmluZyBkaWZmZXJlbnQgdHlwZXMgaXMgdGhhdCB0aGUga2V5IGZpbGUKLSAqIGlkZW50aWZpZXIgbWF5IGVuY29kZSBub3Qgb25seSB0aGUga2V5IGlkZW50aWZpZXIgc3BlY2lmaWVkIGJ5IHRoZQotICogYXBwbGljYXRpb24sIGJ1dCBhbHNvIHRoZSB0aGUgaWRlbnRpdHkgb2YgdGhlIGFwcGxpY2F0aW9uLgorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSKQorCisvKiBCdWlsZGluZyBmb3IgdGhlIFBTQSBDcnlwdG8gc2VydmljZSBvbiBhIFBTQSBwbGF0Zm9ybSwgYSBrZXkgb3duZXIgaXMgYSBQU0EKKyAqIHBhcnRpdGlvbiBpZGVudGlmaWVyLgogICoKLSAqIE5vdGUgdGhhdCB0aGlzIGlzIGFuIGludGVybmFsIGNvbmNlcHQgb2YgdGhlIGxpYnJhcnkgYW5kIHRoZSByZW1vdGUKLSAqIGNhbGwgbGF5ZXIuIFRoZSBhcHBsaWNhdGlvbiBpdHNlbGYgbmV2ZXIgc2VlcyBhbnl0aGluZyBvdGhlciB0aGFuCi0gKiAjcHNhX2FwcF9rZXlfaWRfdCB3aXRoIGl0cyBzdGFuZGFyZCBkZWZpbml0aW9uLgorICogVGhlIGZ1bmN0aW9uIHBzYV9pdHNfaWRlbnRpZmllcl9vZl9zbG90KCkgaW4gcHNhX2NyeXB0b19zdG9yYWdlLmMgdGhhdAorICogdHJhbnNsYXRlcyBhIGtleSBpZGVudGlmaWVyIHRvIGEga2V5IHN0b3JhZ2UgZmlsZSBuYW1lIGFzc3VtZXMgdGhhdAorICogbWJlZHRsc19rZXlfb3duZXJfaWRfdCBpcyBhbiAzMiBiaXRzIGludGVnZXIuIFRoaXMgZnVuY3Rpb24gdGh1cyBuZWVkcworICogcmV3b3JraW5nIGlmIG1iZWR0bHNfa2V5X293bmVyX2lkX3QgaXMgbm90IGRlZmluZWQgYXMgYSAzMiBiaXRzIGludGVnZXIKKyAqIGhlcmUgYW55bW9yZS4KICAqLwordHlwZWRlZiBpbnQzMl90IG1iZWR0bHNfa2V5X293bmVyX2lkX3Q7CiAKLS8qIFRoZSBhcHBsaWNhdGlvbiBrZXkgaWRlbnRpZmllciBpcyBhbHdheXMgd2hhdCB0aGUgYXBwbGljYXRpb24gc2VlcyBhcwotICogI3BzYV9rZXlfaWRfdC4gKi8KLXR5cGVkZWYgdWludDMyX3QgcHNhX2FwcF9rZXlfaWRfdDsKLQotI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9GSUxFX0lEX0VOQ09ERVNfT1dORVIpCi0KLSNpZiBkZWZpbmVkKFBTQV9DUllQVE9fU0VDVVJFKQotLyogQnVpbGRpbmcgZm9yIHRoZSBQU0EgQ3J5cHRvIHNlcnZpY2Ugb24gYSBQU0EgcGxhdGZvcm0uICovCi0vKiBBIGtleSBvd25lciBpcyBhIFBTQSBwYXJ0aXRpb24gaWRlbnRpZmllci4gKi8KLXR5cGVkZWYgaW50MzJfdCBwc2Ffa2V5X293bmVyX2lkX3Q7Ci0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QKKy8qKiBDb21wYXJlIHR3byBrZXkgb3duZXIgaWRlbnRpZmllcnMuCisgKgorICogXHBhcmFtIGlkMSBGaXJzdCBrZXkgb3duZXIgaWRlbnRpZmllci4KKyAqIFxwYXJhbSBpZDIgU2Vjb25kIGtleSBvd25lciBpZGVudGlmaWVyLgorICoKKyAqIFxyZXR1cm4gTm9uLXplcm8gaWYgdGhlIHR3byBrZXkgb3duZXIgaWRlbnRpZmllcnMgYXJlIGVxdWFsLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbWJlZHRsc19rZXlfb3duZXJfaWRfZXF1YWwoIG1iZWR0bHNfa2V5X293bmVyX2lkX3QgaWQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfa2V5X293bmVyX2lkX3QgaWQyICkKIHsKLSAgICB1aW50MzJfdCBrZXlfaWQ7Ci0gICAgcHNhX2tleV9vd25lcl9pZF90IG93bmVyOwotfSBwc2Ffa2V5X2ZpbGVfaWRfdDsKLSNkZWZpbmUgUFNBX0tFWV9GSUxFX0dFVF9LRVlfSUQoIGZpbGVfaWQgKSAoICggZmlsZV9pZCApLmtleV9pZCApCisgICAgcmV0dXJuKCBpZDEgPT0gaWQyICk7Cit9CiAKLS8qIFNpbmNlIGNyeXB0by5oIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUgUFNBIENyeXB0b2dyYXBoeSBBUEkgc3BlY2lmaWNhdGlvbiwKLSAqIGl0IG11c3QgdXNlIHN0YW5kYXJkIHR5cGVzIGZvciB0aGluZ3MgbGlrZSB0aGUgYXJndW1lbnQgb2YgcHNhX29wZW5fa2V5KCkuCi0gKiBJZiBpdCB3YXNuJ3QgZm9yIHRoYXQgY29uc3RyYWludCwgcHNhX29wZW5fa2V5KCkgd291bGQgdGFrZSBhCi0gKiBgcHNhX2tleV9maWxlX2lkX3RgIGFyZ3VtZW50LiBBcyBhIHdvcmthcm91bmQsIG1ha2UgYHBzYV9rZXlfaWRfdGAgYW4KLSAqIGFsaWFzIGZvciBgcHNhX2tleV9maWxlX2lkX3RgIHdoZW4gYnVpbGRpbmcgZm9yIGEgbXVsdGktY2xpZW50IHNlcnZpY2UuICovCi10eXBlZGVmIHBzYV9rZXlfZmlsZV9pZF90IHBzYV9rZXlfaWRfdDsKLSNkZWZpbmUgUFNBX0tFWV9JRF9JTklUIHswLCAwfQotCi0jZWxzZSAvKiAhTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9GSUxFX0lEX0VOQ09ERVNfT1dORVIgKi8KLQotLyogQnkgZGVmYXVsdCwgYSBrZXkgZmlsZSBpZGVudGlmaWVyIGlzIGp1c3QgdGhlIGFwcGxpY2F0aW9uIGtleSBpZGVudGlmaWVyLiAqLwotdHlwZWRlZiBwc2FfYXBwX2tleV9pZF90IHBzYV9rZXlfZmlsZV9pZF90OwotI2RlZmluZSBQU0FfS0VZX0ZJTEVfR0VUX0tFWV9JRCggaWQgKSAoIGlkICkKLQotI2VuZGlmIC8qICFNQkVEVExTX1BTQV9DUllQVE9fS0VZX0ZJTEVfSURfRU5DT0RFU19PV05FUiAqLworI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUiAqLwogCiAjZW5kaWYgLyogUFNBX0NSWVBUT19QTEFURk9STV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BzYS9jcnlwdG9fc2l6ZXMuaCBiL2luY2x1ZGUvcHNhL2NyeXB0b19zaXplcy5oCmluZGV4IGY2MzczYjguLjRkYzhhZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHNhL2NyeXB0b19zaXplcy5oCisrKyBiL2luY2x1ZGUvcHNhL2NyeXB0b19zaXplcy5oCkBAIC02NTcsNCArNjU3LDkxIEBACiAgICAgIFBTQV9LRVlfVFlQRV9JU19FQ0NfUFVCTElDX0tFWShrZXlfdHlwZSkgPyBQU0FfS0VZX0VYUE9SVF9FQ0NfUFVCTElDX0tFWV9NQVhfU0laRShrZXlfYml0cykgOiBcCiAgICAgIDApCiAKKy8qKiBUaGUgZGVmYXVsdCBub25jZSBzaXplIGZvciBhbiBBRUFEIGFsZ29yaXRobSwgaW4gYnl0ZXMuCisgKgorICogVGhpcyBtYWNybyBjYW4gYmUgdXNlZCB0byBhbGxvY2F0ZSBhIGJ1ZmZlciBvZiBzdWZmaWNpZW50IHNpemUgdG8KKyAqIHN0b3JlIHRoZSBub25jZSBvdXRwdXQgZnJvbSAjcHNhX2FlYWRfZ2VuZXJhdGVfbm9uY2UoKS4KKyAqCisgKiBTZWUgYWxzbyAjUFNBX0FFQURfTk9OQ0VfTUFYX1NJWkUuCisgKgorICogXG5vdGUgVGhpcyBpcyBub3QgdGhlIG1heGltdW0gc2l6ZSBvZiBub25jZSBzdXBwb3J0ZWQgYXMgaW5wdXQgdG8gI3BzYV9hZWFkX3NldF9ub25jZSgpLAorICogICAgICAgI3BzYV9hZWFkX2VuY3J5cHQoKSBvciAjcHNhX2FlYWRfZGVjcnlwdCgpLCBqdXN0IHRoZSBkZWZhdWx0IHNpemUgdGhhdCBpcyBnZW5lcmF0ZWQgYnkKKyAqICAgICAgICNwc2FfYWVhZF9nZW5lcmF0ZV9ub25jZSgpLgorICoKKyAqIFx3YXJuaW5nIFRoaXMgbWFjcm8gbWF5IGV2YWx1YXRlIGl0cyBhcmd1bWVudHMgbXVsdGlwbGUgdGltZXMgb3IKKyAqICAgICAgICAgIHplcm8gdGltZXMsIHNvIHlvdSBzaG91bGQgbm90IHBhc3MgYXJndW1lbnRzIHRoYXQgY29udGFpbgorICogICAgICAgICAgc2lkZSBlZmZlY3RzLgorICoKKyAqIFxwYXJhbSBrZXlfdHlwZSAgQSBzeW1tZXRyaWMga2V5IHR5cGUgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggYWxnb3JpdGhtIFxwIGFsZy4KKyAqCisgKiBccGFyYW0gYWxnICAgICAgIEFuIEFFQUQgYWxnb3JpdGhtIChcYyBQU0FfQUxHX1hYWCB2YWx1ZSBzdWNoIHRoYXQgI1BTQV9BTEdfSVNfQUVBRChccCBhbGcpIGlzIHRydWUpLgorICoKKyAqIFxyZXR1cm4gVGhlIGRlZmF1bHQgbm9uY2Ugc2l6ZSBmb3IgdGhlIHNwZWNpZmllZCBrZXkgdHlwZSBhbmQgYWxnb3JpdGhtLgorICogICAgICAgICBJZiB0aGUga2V5IHR5cGUgb3IgQUVBRCBhbGdvcml0aG0gaXMgbm90IHJlY29nbml6ZWQsCisgKiAgICAgICAgIG9yIHRoZSBwYXJhbWV0ZXJzIGFyZSBpbmNvbXBhdGlibGUsIHJldHVybiAwLgorICogICAgICAgICBBbiBpbXBsZW1lbnRhdGlvbiBjYW4gcmV0dXJuIGVpdGhlciAwIG9yIGEgY29ycmVjdCBzaXplIGZvciBhIGtleSB0eXBlCisgKiAgICAgICAgIGFuZCBBRUFEIGFsZ29yaXRobSB0aGF0IGl0IHJlY29nbml6ZXMsIGJ1dCBkb2VzIG5vdCBzdXBwb3J0LgorICovCisjZGVmaW5lIFBTQV9BRUFEX05PTkNFX0xFTkdUSChrZXlfdHlwZSwgYWxnKSBcCisgICAgKFBTQV9CTE9DS19DSVBIRVJfQkxPQ0tfU0laRShrZXlfdHlwZSkgPT0gMTYgJiYgXAorICAgICAgICAgKFBTQV9BTEdfQUVBRF9XSVRIX0RFRkFVTFRfVEFHX0xFTkdUSChhbGcpID09IFBTQV9BTEdfQ0NNIHx8IFwKKyAgICAgICAgICBQU0FfQUxHX0FFQURfV0lUSF9ERUZBVUxUX1RBR19MRU5HVEgoYWxnKSA9PSBQU0FfQUxHX0dDTSkgPyAxMiA6IFwKKyAgICAgKGtleV90eXBlKSA9PSBQU0FfS0VZX1RZUEVfQ0hBQ0hBMjAgJiYgXAorICAgICAgICAgIFBTQV9BTEdfQUVBRF9XSVRIX0RFRkFVTFRfVEFHX0xFTkdUSChhbGcpID09IFBTQV9BTEdfQ0hBQ0hBMjBfUE9MWTEzMDUgPyAxMiA6IFwKKyAgICAgMCkKKworLyoqIFRoZSBtYXhpbXVtIGRlZmF1bHQgbm9uY2Ugc2l6ZSBhbW9uZyBhbGwgc3VwcG9ydGVkIHBhaXJzIG9mIGtleSB0eXBlcyBhbmQgQUVBRCBhbGdvcml0aG1zLCBpbiBieXRlcy4KKyAqCisgKiBUaGlzIGlzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiBhbnkgdmFsdWUgdGhhdCAjUFNBX0FFQURfTk9OQ0VfTEVOR1RIKCkgbWF5IHJldHVybi4KKyAqCisgKiBcbm90ZSBUaGlzIGlzIG5vdCB0aGUgbWF4aW11bSBzaXplIG9mIG5vbmNlIHN1cHBvcnRlZCBhcyBpbnB1dCB0byAjcHNhX2FlYWRfc2V0X25vbmNlKCksCisgKiAgICAgICAjcHNhX2FlYWRfZW5jcnlwdCgpIG9yICNwc2FfYWVhZF9kZWNyeXB0KCksIGp1c3QgdGhlIGxhcmdlc3Qgc2l6ZSB0aGF0IG1heSBiZSBnZW5lcmF0ZWQgYnkKKyAqICAgICAgICNwc2FfYWVhZF9nZW5lcmF0ZV9ub25jZSgpLgorICovCisjZGVmaW5lIFBTQV9BRUFEX05PTkNFX01BWF9TSVpFIDEyCisKKy8qKiBUaGUgZGVmYXVsdCBJViBzaXplIGZvciBhIGNpcGhlciBhbGdvcml0aG0sIGluIGJ5dGVzLgorICoKKyAqIFRoZSBJViB0aGF0IGlzIGdlbmVyYXRlZCBhcyBwYXJ0IG9mIGEgY2FsbCB0byAjcHNhX2NpcGhlcl9lbmNyeXB0KCkgaXMgYWx3YXlzCisgKiB0aGUgZGVmYXVsdCBJViBsZW5ndGggZm9yIHRoZSBhbGdvcml0aG0uCisgKgorICogVGhpcyBtYWNybyBjYW4gYmUgdXNlZCB0byBhbGxvY2F0ZSBhIGJ1ZmZlciBvZiBzdWZmaWNpZW50IHNpemUgdG8KKyAqIHN0b3JlIHRoZSBJViBvdXRwdXQgZnJvbSAjcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdigpIHdoZW4gdXNpbmcKKyAqIGEgbXVsdGktcGFydCBjaXBoZXIgb3BlcmF0aW9uLgorICoKKyAqIFNlZSBhbHNvICNQU0FfQ0lQSEVSX0lWX01BWF9TSVpFLgorICoKKyAqIFx3YXJuaW5nIFRoaXMgbWFjcm8gbWF5IGV2YWx1YXRlIGl0cyBhcmd1bWVudHMgbXVsdGlwbGUgdGltZXMgb3IKKyAqICAgICAgICAgIHplcm8gdGltZXMsIHNvIHlvdSBzaG91bGQgbm90IHBhc3MgYXJndW1lbnRzIHRoYXQgY29udGFpbgorICogICAgICAgICAgc2lkZSBlZmZlY3RzLgorICoKKyAqIFxwYXJhbSBrZXlfdHlwZSAgQSBzeW1tZXRyaWMga2V5IHR5cGUgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggYWxnb3JpdGhtIFxwIGFsZy4KKyAqCisgKiBccGFyYW0gYWxnICAgICAgIEEgY2lwaGVyIGFsZ29yaXRobSAoXGMgUFNBX0FMR19YWFggdmFsdWUgc3VjaCB0aGF0ICNQU0FfQUxHX0lTX0NJUEhFUihccCBhbGcpIGlzIHRydWUpLgorICoKKyAqIFxyZXR1cm4gVGhlIGRlZmF1bHQgSVYgc2l6ZSBmb3IgdGhlIHNwZWNpZmllZCBrZXkgdHlwZSBhbmQgYWxnb3JpdGhtLgorICogICAgICAgICBJZiB0aGUgYWxnb3JpdGhtIGRvZXMgbm90IHVzZSBhbiBJViwgcmV0dXJuIDAuCisgKiAgICAgICAgIElmIHRoZSBrZXkgdHlwZSBvciBjaXBoZXIgYWxnb3JpdGhtIGlzIG5vdCByZWNvZ25pemVkLAorICogICAgICAgICBvciB0aGUgcGFyYW1ldGVycyBhcmUgaW5jb21wYXRpYmxlLCByZXR1cm4gMC4KKyAqICAgICAgICAgQW4gaW1wbGVtZW50YXRpb24gY2FuIHJldHVybiBlaXRoZXIgMCBvciBhIGNvcnJlY3Qgc2l6ZSBmb3IgYSBrZXkgdHlwZQorICogICAgICAgICBhbmQgY2lwaGVyIGFsZ29yaXRobSB0aGF0IGl0IHJlY29nbml6ZXMsIGJ1dCBkb2VzIG5vdCBzdXBwb3J0LgorICovCisjZGVmaW5lIFBTQV9DSVBIRVJfSVZfTEVOR1RIKGtleV90eXBlLCBhbGcpIFwKKyAgICAoUFNBX0JMT0NLX0NJUEhFUl9CTE9DS19TSVpFKGtleV90eXBlKSA+IDEgJiYgXAorICAgICAgICAoKGFsZykgPT0gUFNBX0FMR19DVFIgfHwgXAorICAgICAgICAgKGFsZykgPT0gUFNBX0FMR19DRkIgfHwgXAorICAgICAgICAgKGFsZykgPT0gUFNBX0FMR19PRkIgfHwgXAorICAgICAgICAgKGFsZykgPT0gUFNBX0FMR19YVFMgfHwgXAorICAgICAgICAgKGFsZykgPT0gUFNBX0FMR19DQkNfTk9fUEFERElORyB8fCBcCisgICAgICAgICAoYWxnKSA9PSBQU0FfQUxHX0NCQ19QS0NTNykgPyBQU0FfQkxPQ0tfQ0lQSEVSX0JMT0NLX1NJWkUoa2V5X3R5cGUpIDogXAorICAgICAoa2V5X3R5cGUpID09IFBTQV9LRVlfVFlQRV9DSEFDSEEyMCAmJiBcCisgICAgICAgICAoYWxnKSA9PSBQU0FfQUxHX0NIQUNIQTIwID8gMTIgOiBcCisgICAgIDApCisKKy8qKiBUaGUgbWF4aW11bSBJViBzaXplIGZvciBhbGwgc3VwcG9ydGVkIGNpcGhlciBhbGdvcml0aG1zLCBpbiBieXRlcy4KKyAqCisgKiBTZWUgYWxzbyAjUFNBX0NJUEhFUl9JVl9MRU5HVEgoKS4KKyAqLworI2RlZmluZSBQU0FfQ0lQSEVSX0lWX01BWF9TSVpFIDE2CisKICNlbmRpZiAvKiBQU0FfQ1JZUFRPX1NJWkVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHNhL2NyeXB0b19zdHJ1Y3QuaCBiL2luY2x1ZGUvcHNhL2NyeXB0b19zdHJ1Y3QuaAppbmRleCA2N2M1M2RiLi5iZTBlMjgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BzYS9jcnlwdG9fc3RydWN0LmgKKysrIGIvaW5jbHVkZS9wc2EvY3J5cHRvX3N0cnVjdC5oCkBAIC03Nyw2ICs3NywxNiBAQAogI2luY2x1ZGUgIm1iZWR0bHMvc2hhMjU2LmgiCiAjaW5jbHVkZSAibWJlZHRscy9zaGE1MTIuaCIKIAordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qKiBVbmlxdWUgSUQgaW5kaWNhdGluZyB3aGljaCBkcml2ZXIgZ290IGFzc2lnbmVkIHRvIGRvIHRoZQorICAgICAqIG9wZXJhdGlvbi4gU2luY2UgZHJpdmVyIGNvbnRleHRzIGFyZSBkcml2ZXItc3BlY2lmaWMsIHN3YXBwaW5nCisgICAgICogZHJpdmVycyBoYWxmd2F5IHRocm91Z2ggdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAqIElEIHZhbHVlcyBhcmUgYXV0by1nZW5lcmF0ZWQgaW4gcHNhX2RyaXZlcl93cmFwcGVycy5oICovCisgICAgdW5zaWduZWQgaW50IGlkOworICAgIC8qKiBDb250ZXh0IHN0cnVjdHVyZSBmb3IgdGhlIGFzc2lnbmVkIGRyaXZlciwgd2hlbiBpZCBpcyBub3QgemVyby4gKi8KKyAgICB2b2lkKiBjdHg7Cit9IHBzYV9vcGVyYXRpb25fZHJpdmVyX2NvbnRleHRfdDsKKwogc3RydWN0IHBzYV9oYXNoX29wZXJhdGlvbl9zCiB7CiAgICAgcHNhX2FsZ29yaXRobV90IGFsZzsKQEAgLTE1OCwxNiArMTY4LDE4IEBACiAgICAgdW5zaWduZWQgaW50IGtleV9zZXQgOiAxOwogICAgIHVuc2lnbmVkIGludCBpdl9yZXF1aXJlZCA6IDE7CiAgICAgdW5zaWduZWQgaW50IGl2X3NldCA6IDE7CisgICAgdW5zaWduZWQgaW50IG1iZWR0bHNfaW5fdXNlIDogMTsgLyogSW5kaWNhdGVzIG1iZWQgVExTIGlzIGhhbmRsaW5nIHRoZSBvcGVyYXRpb24uICovCiAgICAgdWludDhfdCBpdl9zaXplOwogICAgIHVpbnQ4X3QgYmxvY2tfc2l6ZTsKICAgICB1bmlvbgogICAgIHsKICAgICAgICAgdW5zaWduZWQgZHVtbXk7IC8qIEVuYWJsZSBlYXNpZXIgaW5pdGlhbGl6aW5nIG9mIHRoZSB1bmlvbi4gKi8KICAgICAgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGNpcGhlcjsKKyAgICAgICAgcHNhX29wZXJhdGlvbl9kcml2ZXJfY29udGV4dF90IGRyaXZlcjsKICAgICB9IGN0eDsKIH07CiAKLSNkZWZpbmUgUFNBX0NJUEhFUl9PUEVSQVRJT05fSU5JVCB7MCwgMCwgMCwgMCwgMCwgMCwgezB9fQorI2RlZmluZSBQU0FfQ0lQSEVSX09QRVJBVElPTl9JTklUIHswLCAwLCAwLCAwLCAwLCAwLCAwLCB7MH19CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwc2FfY2lwaGVyX29wZXJhdGlvbl9zIHBzYV9jaXBoZXJfb3BlcmF0aW9uX2luaXQoIHZvaWQgKQogewogICAgIGNvbnN0IHN0cnVjdCBwc2FfY2lwaGVyX29wZXJhdGlvbl9zIHYgPSBQU0FfQ0lQSEVSX09QRVJBVElPTl9JTklUOwpAQCAtMzMwLDEyICszNDIsMTIgQEAKICAgICBwc2Ffa2V5X3R5cGVfdCB0eXBlOwogICAgIHBzYV9rZXlfYml0c190IGJpdHM7CiAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lOwotICAgIHBzYV9rZXlfaWRfdCBpZDsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBpZDsKICAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeTsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfZmxhZ190IGZsYWdzOwogfSBwc2FfY29yZV9rZXlfYXR0cmlidXRlc190OwogCi0jZGVmaW5lIFBTQV9DT1JFX0tFWV9BVFRSSUJVVEVTX0lOSVQge1BTQV9LRVlfVFlQRV9OT05FLCAwLCBQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFLCBQU0FfS0VZX0lEX0lOSVQsIFBTQV9LRVlfUE9MSUNZX0lOSVQsIDB9CisjZGVmaW5lIFBTQV9DT1JFX0tFWV9BVFRSSUJVVEVTX0lOSVQge1BTQV9LRVlfVFlQRV9OT05FLCAwLCBQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFLCBNQkVEVExTX1NWQ19LRVlfSURfSU5JVCwgUFNBX0tFWV9QT0xJQ1lfSU5JVCwgMH0KIAogc3RydWN0IHBzYV9rZXlfYXR0cmlidXRlc19zCiB7CkBAIC0zNTksMTUgKzM3MSwxNSBAQAogICAgIHJldHVybiggdiApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHNhX3NldF9rZXlfaWQocHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9pZF90IGlkKQorc3RhdGljIGlubGluZSB2b2lkIHBzYV9zZXRfa2V5X2lkKCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ICkKIHsKLSAgICBhdHRyaWJ1dGVzLT5jb3JlLmlkID0gaWQ7CisgICAgYXR0cmlidXRlcy0+Y29yZS5pZCA9IGtleTsKICAgICBpZiggYXR0cmlidXRlcy0+Y29yZS5saWZldGltZSA9PSBQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFICkKICAgICAgICAgYXR0cmlidXRlcy0+Y29yZS5saWZldGltZSA9IFBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDsKIH0KIAotc3RhdGljIGlubGluZSBwc2Ffa2V5X2lkX3QgcHNhX2dldF9rZXlfaWQoCitzdGF0aWMgaW5saW5lIG1iZWR0bHNfc3ZjX2tleV9pZF90IHBzYV9nZXRfa2V5X2lkKAogICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzKQogewogICAgIHJldHVybiggYXR0cmlidXRlcy0+Y29yZS5pZCApOwpAQCAtMzc5LDkgKzM5MSw4IEBACiAgICAgYXR0cmlidXRlcy0+Y29yZS5saWZldGltZSA9IGxpZmV0aW1lOwogICAgIGlmKCBsaWZldGltZSA9PSBQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFICkKICAgICB7Ci0jaWZkZWYgTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9GSUxFX0lEX0VOQ09ERVNfT1dORVIKKyNpZmRlZiBNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIKICAgICAgICAgYXR0cmlidXRlcy0+Y29yZS5pZC5rZXlfaWQgPSAwOwotICAgICAgICBhdHRyaWJ1dGVzLT5jb3JlLmlkLm93bmVyID0gMDsKICNlbHNlCiAgICAgICAgIGF0dHJpYnV0ZXMtPmNvcmUuaWQgPSAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BzYS9jcnlwdG9fdHlwZXMuaCBiL2luY2x1ZGUvcHNhL2NyeXB0b190eXBlcy5oCmluZGV4IDE3NzE4ZWIuLjkyM2IwMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHNhL2NyeXB0b190eXBlcy5oCisrKyBiL2luY2x1ZGUvcHNhL2NyeXB0b190eXBlcy5oCkBAIC0zMyw2ICszMyw4IEBACiAjaWZuZGVmIFBTQV9DUllQVE9fVFlQRVNfSAogI2RlZmluZSBQU0FfQ1JZUFRPX1RZUEVTX0gKIAorI2luY2x1ZGUgImNyeXB0b19wbGF0Zm9ybS5oIgorCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAKIC8qKiBcZGVmZ3JvdXAgZXJyb3IgRXJyb3IgY29kZXMKQEAgLTEyMyw3ICsxMjUsNyBAQAogICogaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgZGV2aWNlIG1hbmFnZW1lbnQgZXZlbnQgb2NjdXJzIChmb3IgZXhhbXBsZSwKICAqIGEgZmFjdG9yeSByZXNldCkuCiAgKgotICogUGVyc2lzdGVudCBrZXlzIGhhdmUgYSBrZXkgaWRlbnRpZmllciBvZiB0eXBlICNwc2Ffa2V5X2lkX3QuCisgKiBQZXJzaXN0ZW50IGtleXMgaGF2ZSBhIGtleSBpZGVudGlmaWVyIG9mIHR5cGUgI21iZWR0bHNfc3ZjX2tleV9pZF90LgogICogVGhpcyBpZGVudGlmaWVyIHJlbWFpbnMgdmFsaWQgdGhyb3VnaG91dCB0aGUgbGlmZXRpbWUgb2YgdGhlIGtleSwKICAqIGV2ZW4gaWYgdGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGUga2V5IHRlcm1pbmF0ZXMuCiAgKiBUaGUgYXBwbGljYXRpb24gY2FuIGNhbGwgcHNhX29wZW5fa2V5KCkgdG8gb3BlbiBhIHBlcnNpc3RlbnQga2V5IHRoYXQKQEAgLTIyNiwxNSArMjI4LDI0IEBACiAgKiAtIDAgaXMgcmVzZXJ2ZWQgYXMgYW4gaW52YWxpZCBrZXkgaWRlbnRpZmllci4KICAqIC0gS2V5IGlkZW50aWZpZXJzIG91dHNpZGUgdGhlc2UgcmFuZ2VzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KICAqLwotLyogSW1wbGVtZW50YXRpb24tc3BlY2lmaWMgcXVpcms6IFRoZSBNYmVkIENyeXB0byBsaWJyYXJ5IGNhbiBiZSBidWlsdCBhcwotICogcGFydCBvZiBhIG11bHRpLWNsaWVudCBzZXJ2aWNlIHRoYXQgZXhwb3NlcyB0aGUgUFNBIENyeXB0byBBUEkgaW4gZWFjaAotICogY2xpZW50IGFuZCBlbmNvZGVzIHRoZSBjbGllbnQgaWRlbnRpdHkgaW4gdGhlIGtleSBpZCBhcmd1bWVudCBvZiBmdW5jdGlvbnMKLSAqIHN1Y2ggYXMgcHNhX29wZW5fa2V5KCkuIEluIHRoaXMgYnVpbGQgY29uZmlndXJhdGlvbiwgd2UgZGVmaW5lCi0gKiBwc2Ffa2V5X2lkX3QgaW4gY3J5cHRvX3BsYXRmb3JtLmggaW5zdGVhZCBvZiBoZXJlLiAqLwotI2lmICFkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19LRVlfRklMRV9JRF9FTkNPREVTX09XTkVSKQogdHlwZWRlZiB1aW50MzJfdCBwc2Ffa2V5X2lkX3Q7Ci0jZGVmaW5lIFBTQV9LRVlfSURfSU5JVCAwCi0jZW5kaWYKKworI2lmICFkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUikKK3R5cGVkZWYgcHNhX2tleV9pZF90IG1iZWR0bHNfc3ZjX2tleV9pZF90OworCisjZWxzZSAvKiBNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIgKi8KKy8qIEltcGxlbWVudGF0aW9uLXNwZWNpZmljOiBUaGUgTWJlZCBDcnlwdG9ncmFwaHkgbGlicmFyeSBjYW4gYmUgYnVpbHQgYXMKKyAqIHBhcnQgb2YgYSBtdWx0aS1jbGllbnQgc2VydmljZSB0aGF0IGV4cG9zZXMgdGhlIFBTQSBDcnlwdG9ncmFweSBBUEkgaW4gZWFjaAorICogY2xpZW50IGFuZCBlbmNvZGVzIHRoZSBjbGllbnQgaWRlbnRpdHkgaW4gdGhlIGtleSBpZGVudGlmaWVyIGFyZ3VtZW50IG9mCisgKiBmdW5jdGlvbnMgc3VjaCBhcyBwc2Ffb3Blbl9rZXkoKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBwc2Ffa2V5X2lkX3Qga2V5X2lkOworICAgIG1iZWR0bHNfa2V5X293bmVyX2lkX3Qgb3duZXI7Cit9IG1iZWR0bHNfc3ZjX2tleV9pZF90OworCisjZW5kaWYgLyogIU1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUiAqLwogCiAvKipAfSovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcHNhL2NyeXB0b192YWx1ZXMuaCBiL2luY2x1ZGUvcHNhL2NyeXB0b192YWx1ZXMuaAppbmRleCBhOTQwNzExLi4zZWI2NGQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BzYS9jcnlwdG9fdmFsdWVzLmgKKysrIGIvaW5jbHVkZS9wc2EvY3J5cHRvX3ZhbHVlcy5oCkBAIC05NzgsNiArOTc4LDI2IEBACiAgKi8KICNkZWZpbmUgUFNBX0FMR19YVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocHNhX2FsZ29yaXRobV90KTB4MDQ0MDAwZmYpCiAKKy8qKiBUaGUgRWxlY3Ryb25pYyBDb2RlIEJvb2sgKEVDQikgbW9kZSBvZiBhIGJsb2NrIGNpcGhlciwgd2l0aCBubyBwYWRkaW5nLgorICoKKyAqIFx3YXJuaW5nIEVDQiBtb2RlIGRvZXMgbm90IHByb3RlY3QgdGhlIGNvbmZpZGVudGlhbGl0eSBvZiB0aGUgZW5jcnlwdGVkIGRhdGEKKyAqIGV4Y2VwdCBpbiBleHRyZW1lbHkgbmFycm93IGNpcmN1bXN0YW5jZXMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYXBwbGljYXRpb25zCisgKiBvbmx5IHVzZSBFQ0IgaWYgdGhleSBuZWVkIHRvIGNvbnN0cnVjdCBhbiBvcGVyYXRpbmcgbW9kZSB0aGF0IHRoZQorICogaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcHJvdmlkZS4gSW1wbGVtZW50YXRpb25zIGFyZSBlbmNvdXJhZ2VkIHRvIHByb3ZpZGUKKyAqIHRoZSBtb2RlcyB0aGF0IGFwcGxpY2F0aW9ucyBuZWVkIGluIHByZWZlcmVuY2UgdG8gc3VwcG9ydGluZyBkaXJlY3QgYWNjZXNzCisgKiB0byBFQ0IuCisgKgorICogVGhlIHVuZGVybHlpbmcgYmxvY2sgY2lwaGVyIGlzIGRldGVybWluZWQgYnkgdGhlIGtleSB0eXBlLgorICoKKyAqIFRoaXMgc3ltbWV0cmljIGNpcGhlciBtb2RlIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBtZXNzYWdlcyB3aG9zZSBsZW5ndGhzIGFyZSBhCisgKiBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgY2hvc2VuIGJsb2NrIGNpcGhlci4KKyAqCisgKiBFQ0IgbW9kZSBkb2VzIG5vdCBhY2NlcHQgYW4gaW5pdGlhbGl6YXRpb24gdmVjdG9yIChJVikuIFdoZW4gdXNpbmcgYQorICogbXVsdGktcGFydCBjaXBoZXIgb3BlcmF0aW9uIHdpdGggdGhpcyBhbGdvcml0aG0sIHBzYV9jaXBoZXJfZ2VuZXJhdGVfaXYoKQorICogYW5kIHBzYV9jaXBoZXJfc2V0X2l2KCkgbXVzdCBub3QgYmUgY2FsbGVkLgorICovCisjZGVmaW5lIFBTQV9BTEdfRUNCX05PX1BBRERJTkcgICAgICAgICAgICAgICAgICAoKHBzYV9hbGdvcml0aG1fdCkweDA0NDA0NDAwKQorCiAvKiogVGhlIENCQyBibG9jayBjaXBoZXIgY2hhaW5pbmcgbW9kZSwgd2l0aCBubyBwYWRkaW5nLgogICoKICAqIFRoZSB1bmRlcmx5aW5nIGJsb2NrIGNpcGhlciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBrZXkgdHlwZS4KQEAgLTE2MzYsMTYgKzE2NTYsODMgQEAKIAogLyoqIFRoZSBtaW5pbXVtIHZhbHVlIGZvciBhIGtleSBpZGVudGlmaWVyIGNob3NlbiBieSB0aGUgYXBwbGljYXRpb24uCiAgKi8KLSNkZWZpbmUgUFNBX0tFWV9JRF9VU0VSX01JTiAgICAgICAgICAgICAgICAgICAgICgocHNhX2FwcF9rZXlfaWRfdCkweDAwMDAwMDAxKQorI2RlZmluZSBQU0FfS0VZX0lEX1VTRVJfTUlOICAgICAgICAgICAgICAgICAgICAgKChwc2Ffa2V5X2lkX3QpMHgwMDAwMDAwMSkKIC8qKiBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYSBrZXkgaWRlbnRpZmllciBjaG9zZW4gYnkgdGhlIGFwcGxpY2F0aW9uLgogICovCi0jZGVmaW5lIFBTQV9LRVlfSURfVVNFUl9NQVggICAgICAgICAgICAgICAgICAgICAoKHBzYV9hcHBfa2V5X2lkX3QpMHgzZmZmZmZmZikKKyNkZWZpbmUgUFNBX0tFWV9JRF9VU0VSX01BWCAgICAgICAgICAgICAgICAgICAgICgocHNhX2tleV9pZF90KTB4M2ZmZmZmZmYpCiAvKiogVGhlIG1pbmltdW0gdmFsdWUgZm9yIGEga2V5IGlkZW50aWZpZXIgY2hvc2VuIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbi4KICAqLwotI2RlZmluZSBQU0FfS0VZX0lEX1ZFTkRPUl9NSU4gICAgICAgICAgICAgICAgICAgKChwc2FfYXBwX2tleV9pZF90KTB4NDAwMDAwMDApCisjZGVmaW5lIFBTQV9LRVlfSURfVkVORE9SX01JTiAgICAgICAgICAgICAgICAgICAoKHBzYV9rZXlfaWRfdCkweDQwMDAwMDAwKQogLyoqIFRoZSBtYXhpbXVtIHZhbHVlIGZvciBhIGtleSBpZGVudGlmaWVyIGNob3NlbiBieSB0aGUgaW1wbGVtZW50YXRpb24uCiAgKi8KLSNkZWZpbmUgUFNBX0tFWV9JRF9WRU5ET1JfTUFYICAgICAgICAgICAgICAgICAgICgocHNhX2FwcF9rZXlfaWRfdCkweDdmZmZmZmZmKQorI2RlZmluZSBQU0FfS0VZX0lEX1ZFTkRPUl9NQVggICAgICAgICAgICAgICAgICAgKChwc2Ffa2V5X2lkX3QpMHg3ZmZmZmZmZikKKworCisjaWYgIWRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSKQorCisjZGVmaW5lIE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUICggKHBzYV9rZXlfaWRfdCkwICkKKyNkZWZpbmUgTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9LRVlfSUQoIGlkICkgKCBpZCApCisjZGVmaW5lIE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfT1dORVJfSUQoIGlkICkgKCAwICkKKworLyoqIFV0aWxpdHkgdG8gaW5pdGlhbGl6ZSBhIGtleSBpZGVudGlmaWVyIGF0IHJ1bnRpbWUuCisgKgorICogXHBhcmFtIHVudXNlZCAgVW51c2VkIHBhcmFtZXRlci4KKyAqIFxwYXJhbSBrZXlfaWQgIElkZW50aWZpZXIgb2YgdGhlIGtleS4KKyAqLworc3RhdGljIGlubGluZSBtYmVkdGxzX3N2Y19rZXlfaWRfdCBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSgKKyAgICB1bnNpZ25lZCBpbnQgdW51c2VkLCBwc2Ffa2V5X2lkX3Qga2V5X2lkICkKK3sKKyAgICAodm9pZCl1bnVzZWQ7CisKKyAgICByZXR1cm4oIGtleV9pZCApOworfQorCisvKiogQ29tcGFyZSB0d28ga2V5IGlkZW50aWZpZXJzLgorICoKKyAqIFxwYXJhbSBpZDEgRmlyc3Qga2V5IGlkZW50aWZpZXIuCisgKiBccGFyYW0gaWQyIFNlY29uZCBrZXkgaWRlbnRpZmllci4KKyAqCisgKiBccmV0dXJuIE5vbi16ZXJvIGlmIHRoZSB0d28ga2V5IGlkZW50aWZpZXIgYXJlIGVxdWFsLCB6ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBpZDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGlkMiApCit7CisgICAgcmV0dXJuKCBpZDEgPT0gaWQyICk7Cit9CisKKyNlbHNlIC8qIE1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUiAqLworCisjZGVmaW5lIE1CRURUTFNfU1ZDX0tFWV9JRF9JTklUICggKG1iZWR0bHNfc3ZjX2tleV9pZF90KXsgMCwgMCB9ICkKKyNkZWZpbmUgTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9LRVlfSUQoIGlkICkgKCAoIGlkICkua2V5X2lkICkKKyNkZWZpbmUgTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9PV05FUl9JRCggaWQgKSAoICggaWQgKS5vd25lciApCisKKy8qKiBVdGlsaXR5IHRvIGluaXRpYWxpemUgYSBrZXkgaWRlbnRpZmllciBhdCBydW50aW1lLgorICoKKyAqIFxwYXJhbSBvd25lcl9pZCBJZGVudGlmaWVyIG9mIHRoZSBrZXkgb3duZXIuCisgKiBccGFyYW0ga2V5X2lkICAgSWRlbnRpZmllciBvZiB0aGUga2V5LgorICovCitzdGF0aWMgaW5saW5lIG1iZWR0bHNfc3ZjX2tleV9pZF90IG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKAorICAgIG1iZWR0bHNfa2V5X293bmVyX2lkX3Qgb3duZXJfaWQsIHBzYV9rZXlfaWRfdCBrZXlfaWQgKQoreworICAgIHJldHVybiggKG1iZWR0bHNfc3ZjX2tleV9pZF90KXsgLmtleV9pZCA9IGtleV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vd25lciA9IG93bmVyX2lkIH0gKTsKK30KKworLyoqIENvbXBhcmUgdHdvIGtleSBpZGVudGlmaWVycy4KKyAqCisgKiBccGFyYW0gaWQxIEZpcnN0IGtleSBpZGVudGlmaWVyLgorICogXHBhcmFtIGlkMiBTZWNvbmQga2V5IGlkZW50aWZpZXIuCisgKgorICogXHJldHVybiBOb24temVybyBpZiB0aGUgdHdvIGtleSBpZGVudGlmaWVyIGFyZSBlcXVhbCwgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1iZWR0bHNfc3ZjX2tleV9pZF9lcXVhbCggbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBpZDIgKQoreworICAgIHJldHVybiggKCBpZDEua2V5X2lkID09IGlkMi5rZXlfaWQgKSAmJgorICAgICAgICAgICAgbWJlZHRsc19rZXlfb3duZXJfaWRfZXF1YWwoIGlkMS5vd25lciwgaWQyLm93bmVyICkgKTsKK30KKworI2VuZGlmIC8qICFNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIgKi8KIAogLyoqQH0qLwogCmRpZmYgLS1naXQgYS9saWJyYXJ5L0NNYWtlTGlzdHMudHh0IGIvbGlicmFyeS9DTWFrZUxpc3RzLnR4dAppbmRleCAxYmRjNTllLi44OTYyNTU1IDEwMDY0NAotLS0gYS9saWJyYXJ5L0NNYWtlTGlzdHMudHh0CisrKyBiL2xpYnJhcnkvQ01ha2VMaXN0cy50eHQKQEAgLTYxLDYgKzYxLDcgQEAKICAgICBwbGF0Zm9ybV91dGlsLmMKICAgICBwb2x5MTMwNS5jCiAgICAgcHNhX2NyeXB0by5jCisgICAgcHNhX2NyeXB0b19kcml2ZXJfd3JhcHBlcnMuYwogICAgIHBzYV9jcnlwdG9fc2UuYwogICAgIHBzYV9jcnlwdG9fc2xvdF9tYW5hZ2VtZW50LmMKICAgICBwc2FfY3J5cHRvX3N0b3JhZ2UuYwpAQCAtMTAzLDYgKzEwNCw3IEBACiAgICAgc3NsX3Nydi5jCiAgICAgc3NsX3RpY2tldC5jCiAgICAgc3NsX3Rscy5jCisgICAgc3NsX3RsczEzX2tleXMuYwogKQogCiBpZihDTUFLRV9DT01QSUxFUl9JU19HTlVDQykKQEAgLTE0OCw0NiArMTUwLDU5IEBACiAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTmVlZCB0byBjaG9vc2Ugc3RhdGljIG9yIHNoYXJlZCBtYmVkdGxzIGJ1aWxkISIpCiBlbmRpZihOT1QgVVNFX1NUQVRJQ19NQkVEVExTX0xJQlJBUlkgQU5EIE5PVCBVU0VfU0hBUkVEX01CRURUTFNfTElCUkFSWSkKIAotc2V0KHRhcmdldF9saWJyYXJpZXMgIm1iZWRjcnlwdG8iICJtYmVkeDUwOSIgIm1iZWR0bHMiKQorc2V0KG1iZWR0bHNfdGFyZ2V0ICAgICIke01CRURUTFNfVEFSR0VUX1BSRUZJWH1tYmVkdGxzIikKK3NldChtYmVkeDUwOV90YXJnZXQgICAiJHtNQkVEVExTX1RBUkdFVF9QUkVGSVh9bWJlZHg1MDkiKQorc2V0KG1iZWRjcnlwdG9fdGFyZ2V0ICIke01CRURUTFNfVEFSR0VUX1BSRUZJWH1tYmVkY3J5cHRvIikKKworc2V0KG1iZWR0bHNfdGFyZ2V0ICAgICR7bWJlZHRsc190YXJnZXR9ICAgIFBBUkVOVF9TQ09QRSkKK3NldChtYmVkeDUwOV90YXJnZXQgICAke21iZWR4NTA5X3RhcmdldH0gICBQQVJFTlRfU0NPUEUpCitzZXQobWJlZGNyeXB0b190YXJnZXQgJHttYmVkY3J5cHRvX3RhcmdldH0gUEFSRU5UX1NDT1BFKQorCitpZiAoVVNFX1NUQVRJQ19NQkVEVExTX0xJQlJBUlkpCisgICAgc2V0KG1iZWR0bHNfc3RhdGljX3RhcmdldCAgICAke21iZWR0bHNfdGFyZ2V0fSkKKyAgICBzZXQobWJlZHg1MDlfc3RhdGljX3RhcmdldCAgICR7bWJlZHg1MDlfdGFyZ2V0fSkKKyAgICBzZXQobWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0ICR7bWJlZGNyeXB0b190YXJnZXR9KQorZW5kaWYoKQorCitzZXQodGFyZ2V0X2xpYnJhcmllcyAke21iZWRjcnlwdG9fdGFyZ2V0fSAke21iZWR4NTA5X3RhcmdldH0gJHttYmVkdGxzX3RhcmdldH0pCiAKIGlmKFVTRV9TVEFUSUNfTUJFRFRMU19MSUJSQVJZIEFORCBVU0VfU0hBUkVEX01CRURUTFNfTElCUkFSWSkKLSAgICBzZXQobWJlZHRsc19zdGF0aWNfdGFyZ2V0ICJtYmVkdGxzX3N0YXRpYyIpCi0gICAgc2V0KG1iZWR4NTA5X3N0YXRpY190YXJnZXQgIm1iZWR4NTA5X3N0YXRpYyIpCi0gICAgc2V0KG1iZWRjcnlwdG9fc3RhdGljX3RhcmdldCAibWJlZGNyeXB0b19zdGF0aWMiKQorICAgIHN0cmluZyhBUFBFTkQgbWJlZHRsc19zdGF0aWNfdGFyZ2V0ICAgICJfc3RhdGljIikKKyAgICBzdHJpbmcoQVBQRU5EIG1iZWR4NTA5X3N0YXRpY190YXJnZXQgICAiX3N0YXRpYyIpCisgICAgc3RyaW5nKEFQUEVORCBtYmVkY3J5cHRvX3N0YXRpY190YXJnZXQgIl9zdGF0aWMiKQorCiAgICAgbGlzdChBUFBFTkQgdGFyZ2V0X2xpYnJhcmllcwotICAgICAgICAibWJlZGNyeXB0b19zdGF0aWMiICJtYmVkeDUwOV9zdGF0aWMiICJtYmVkdGxzX3N0YXRpYyIpCi1lbHNlaWYoVVNFX1NUQVRJQ19NQkVEVExTX0xJQlJBUlkpCi0gICAgc2V0KG1iZWR0bHNfc3RhdGljX3RhcmdldCAibWJlZHRscyIpCi0gICAgc2V0KG1iZWR4NTA5X3N0YXRpY190YXJnZXQgIm1iZWR4NTA5IikKLSAgICBzZXQobWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0ICJtYmVkY3J5cHRvIikKKyAgICAgICAgJHttYmVkY3J5cHRvX3N0YXRpY190YXJnZXR9CisgICAgICAgICR7bWJlZHg1MDlfc3RhdGljX3RhcmdldH0KKyAgICAgICAgJHttYmVkdGxzX3N0YXRpY190YXJnZXR9KQogZW5kaWYoKQogCiBpZihVU0VfU1RBVElDX01CRURUTFNfTElCUkFSWSkKICAgICBhZGRfbGlicmFyeSgke21iZWRjcnlwdG9fc3RhdGljX3RhcmdldH0gU1RBVElDICR7c3JjX2NyeXB0b30pCiAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7bWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0fSBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FIG1iZWRjcnlwdG8pCi0gICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7bWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0fSAke2xpYnN9KQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke21iZWRjcnlwdG9fc3RhdGljX3RhcmdldH0gUFVCTElDICR7bGlic30pCiAKICAgICBhZGRfbGlicmFyeSgke21iZWR4NTA5X3N0YXRpY190YXJnZXR9IFNUQVRJQyAke3NyY194NTA5fSkKICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHttYmVkeDUwOV9zdGF0aWNfdGFyZ2V0fSBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FIG1iZWR4NTA5KQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke21iZWR4NTA5X3N0YXRpY190YXJnZXR9ICR7bGlic30gJHttYmVkY3J5cHRvX3N0YXRpY190YXJnZXR9KQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke21iZWR4NTA5X3N0YXRpY190YXJnZXR9IFBVQkxJQyAke2xpYnN9ICR7bWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0fSkKIAogICAgIGFkZF9saWJyYXJ5KCR7bWJlZHRsc19zdGF0aWNfdGFyZ2V0fSBTVEFUSUMgJHtzcmNfdGxzfSkKICAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHttYmVkdGxzX3N0YXRpY190YXJnZXR9IFBST1BFUlRJRVMgT1VUUFVUX05BTUUgbWJlZHRscykKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHttYmVkdGxzX3N0YXRpY190YXJnZXR9ICR7bGlic30gJHttYmVkeDUwOV9zdGF0aWNfdGFyZ2V0fSkKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHttYmVkdGxzX3N0YXRpY190YXJnZXR9IFBVQkxJQyAke2xpYnN9ICR7bWJlZHg1MDlfc3RhdGljX3RhcmdldH0pCiBlbmRpZihVU0VfU1RBVElDX01CRURUTFNfTElCUkFSWSkKIAogaWYoVVNFX1NIQVJFRF9NQkVEVExTX0xJQlJBUlkpCi0gICAgYWRkX2xpYnJhcnkobWJlZGNyeXB0byBTSEFSRUQgJHtzcmNfY3J5cHRvfSkKLSAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMobWJlZGNyeXB0byBQUk9QRVJUSUVTIFZFUlNJT04gMi4yMy4wIFNPVkVSU0lPTiA1KQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhtYmVkY3J5cHRvICR7bGlic30pCisgICAgYWRkX2xpYnJhcnkoJHttYmVkY3J5cHRvX3RhcmdldH0gU0hBUkVEICR7c3JjX2NyeXB0b30pCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7bWJlZGNyeXB0b190YXJnZXR9IFBST1BFUlRJRVMgVkVSU0lPTiAyLjI0LjAgU09WRVJTSU9OIDUpCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7bWJlZGNyeXB0b190YXJnZXR9IFBVQkxJQyAke2xpYnN9KQogCi0gICAgYWRkX2xpYnJhcnkobWJlZHg1MDkgU0hBUkVEICR7c3JjX3g1MDl9KQotICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhtYmVkeDUwOSBQUk9QRVJUSUVTIFZFUlNJT04gMi4yMy4wIFNPVkVSU0lPTiAxKQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhtYmVkeDUwOSAke2xpYnN9IG1iZWRjcnlwdG8pCisgICAgYWRkX2xpYnJhcnkoJHttYmVkeDUwOV90YXJnZXR9IFNIQVJFRCAke3NyY194NTA5fSkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHttYmVkeDUwOV90YXJnZXR9IFBST1BFUlRJRVMgVkVSU0lPTiAyLjI0LjAgU09WRVJTSU9OIDEpCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7bWJlZHg1MDlfdGFyZ2V0fSBQVUJMSUMgJHtsaWJzfSAke21iZWRjcnlwdG9fdGFyZ2V0fSkKIAotICAgIGFkZF9saWJyYXJ5KG1iZWR0bHMgU0hBUkVEICR7c3JjX3Rsc30pCi0gICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKG1iZWR0bHMgUFJPUEVSVElFUyBWRVJTSU9OIDIuMjMuMCBTT1ZFUlNJT04gMTMpCi0gICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKG1iZWR0bHMgJHtsaWJzfSBtYmVkeDUwOSkKKyAgICBhZGRfbGlicmFyeSgke21iZWR0bHNfdGFyZ2V0fSBTSEFSRUQgJHtzcmNfdGxzfSkKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHttYmVkdGxzX3RhcmdldH0gUFJPUEVSVElFUyBWRVJTSU9OIDIuMjQuMCBTT1ZFUlNJT04gMTMpCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7bWJlZHRsc190YXJnZXR9IFBVQkxJQyAke2xpYnN9ICR7bWJlZHg1MDlfdGFyZ2V0fSkKIGVuZGlmKFVTRV9TSEFSRURfTUJFRFRMU19MSUJSQVJZKQogCiBmb3JlYWNoKHRhcmdldCBJTiBMSVNUUyB0YXJnZXRfbGlicmFyaWVzKQpAQCAtMjA4LDcgKzIyMyw5IEBACiAgICAgICAgICAgICBQRVJNSVNTSU9OUyBPV05FUl9SRUFEIE9XTkVSX1dSSVRFIEdST1VQX1JFQUQgV09STERfUkVBRCkKIGVuZGZvcmVhY2godGFyZ2V0KQogCi1hZGRfY3VzdG9tX3RhcmdldChsaWIgREVQRU5EUyBtYmVkY3J5cHRvIG1iZWR4NTA5IG1iZWR0bHMpCitzZXQobGliX3RhcmdldCAiJHtNQkVEVExTX1RBUkdFVF9QUkVGSVh9bGliIikKKworYWRkX2N1c3RvbV90YXJnZXQoJHtsaWJfdGFyZ2V0fSBERVBFTkRTICR7bWJlZGNyeXB0b190YXJnZXR9ICR7bWJlZHg1MDlfdGFyZ2V0fSAke21iZWR0bHNfdGFyZ2V0fSkKIGlmKFVTRV9TVEFUSUNfTUJFRFRMU19MSUJSQVJZIEFORCBVU0VfU0hBUkVEX01CRURUTFNfTElCUkFSWSkKLSAgICBhZGRfZGVwZW5kZW5jaWVzKGxpYiBtYmVkY3J5cHRvX3N0YXRpYyBtYmVkeDUwOV9zdGF0aWMgbWJlZHRsc19zdGF0aWMpCisgICAgYWRkX2RlcGVuZGVuY2llcygke2xpYl90YXJnZXR9ICR7bWJlZGNyeXB0b19zdGF0aWNfdGFyZ2V0fSAke21iZWR4NTA5X3N0YXRpY190YXJnZXR9ICR7bWJlZHRsc19zdGF0aWNfdGFyZ2V0fSkKIGVuZGlmKCkKZGlmZiAtLWdpdCBhL2xpYnJhcnkvTWFrZWZpbGUgYi9saWJyYXJ5L01ha2VmaWxlCmluZGV4IGI3NmE4NGIuLmE2ZGI5YjMgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvTWFrZWZpbGUKKysrIGIvbGlicmFyeS9NYWtlZmlsZQpAQCAtMTE4LDYgKzExOCw3IEBACiAJICAgICBwbGF0Zm9ybV91dGlsLm8gXAogCSAgICAgcG9seTEzMDUubyBcCiAJICAgICBwc2FfY3J5cHRvLm8gXAorCSAgICAgcHNhX2NyeXB0b19kcml2ZXJfd3JhcHBlcnMubyBcCiAJICAgICBwc2FfY3J5cHRvX3NlLm8gXAogCSAgICAgcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQubyBcCiAJICAgICBwc2FfY3J5cHRvX3N0b3JhZ2UubyBcCkBAIC0xNjIsNiArMTYzLDcgQEAKIAkgIHNzbF9zcnYubyBcCiAJICBzc2xfdGlja2V0Lm8gXAogCSAgc3NsX3Rscy5vIFwKKwkgIHNzbF90bHMxM19rZXlzLm8gXAogCSAgIyBUaGlzIGxpbmUgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rCiAKIC5TSUxFTlQ6CmRpZmYgLS1naXQgYS9saWJyYXJ5L2JpZ251bS5jIGIvbGlicmFyeS9iaWdudW0uYwppbmRleCA5MzI1NjMyLi5mYTk3ZDE5IDEwMDY0NAotLS0gYS9saWJyYXJ5L2JpZ251bS5jCisrKyBiL2xpYnJhcnkvYmlnbnVtLmMKQEAgLTIxMDEsNyArMjEwMSw3IEBACiAgICAgc2l6ZV90IGksIGosIG5ibGltYnM7CiAgICAgc2l6ZV90IGJ1ZnNpemUsIG5iaXRzOwogICAgIG1iZWR0bHNfbXBpX3VpbnQgZWksIG1tLCBzdGF0ZTsKLSAgICBtYmVkdGxzX21waSBSUiwgVCwgV1sgMiA8PCBNQkVEVExTX01QSV9XSU5ET1dfU0laRSBdLCBBcG9zOworICAgIG1iZWR0bHNfbXBpIFJSLCBULCBXWyAxIDw8IE1CRURUTFNfTVBJX1dJTkRPV19TSVpFIF0sIEFwb3M7CiAgICAgaW50IG5lZzsKIAogICAgIE1QSV9WQUxJREFURV9SRVQoIFggIT0gTlVMTCApOwpkaWZmIC0tZ2l0IGEvbGlicmFyeS9jY20uYyBiL2xpYnJhcnkvY2NtLmMKaW5kZXggZTZjYTU4OC4uNDI0ZWU3NyAxMDA2NDQKLS0tIGEvbGlicmFyeS9jY20uYworKysgYi9saWJyYXJ5L2NjbS5jCkBAIC0xNzUsNyArMTc1LDcgQEAKICAgICBpZiggaXZfbGVuIDwgNyB8fCBpdl9sZW4gPiAxMyApCiAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVCApOwogCi0gICAgaWYoIGFkZF9sZW4gPiAweEZGMDAgKQorICAgIGlmKCBhZGRfbGVuID49IDB4RkYwMCApCiAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVCApOwogCiAgICAgcSA9IDE2IC0gMSAtICh1bnNpZ25lZCBjaGFyKSBpdl9sZW47CmRpZmYgLS1naXQgYS9saWJyYXJ5L2RobS5jIGIvbGlicmFyeS9kaG0uYwppbmRleCBmNWFkNTBhLi5mNzk2ODEyIDEwMDY0NAotLS0gYS9saWJyYXJ5L2RobS5jCisrKyBiL2xpYnJhcnkvZGhtLmMKQEAgLTMxOSw2ICszMTksMzIgQEAKIH0KIAogLyoKKyAqIFBpY2sgYSByYW5kb20gUiBpbiB0aGUgcmFuZ2UgWzIsIE0pIGZvciBibGluZGluZyBwdXJwb3NlcworICovCitzdGF0aWMgaW50IGRobV9yYW5kb21fYmVsb3coIG1iZWR0bHNfbXBpICpSLCBjb25zdCBtYmVkdGxzX21waSAqTSwKKyAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICkKK3sKKyAgICBpbnQgcmV0LCBjb3VudDsKKworICAgIGNvdW50ID0gMDsKKyAgICBkbworICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9maWxsX3JhbmRvbSggUiwgbWJlZHRsc19tcGlfc2l6ZSggTSApLCBmX3JuZywgcF9ybmcgKSApOworCisgICAgICAgIHdoaWxlKCBtYmVkdGxzX21waV9jbXBfbXBpKCBSLCBNICkgPj0gMCApCisgICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoIFIsIDEgKSApOworCisgICAgICAgIGlmKCBjb3VudCsrID4gMTAgKQorICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUgKTsKKyAgICB9CisgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9pbnQoIFIsIDEgKSA8PSAwICk7CisKK2NsZWFudXA6CisgICAgcmV0dXJuKCByZXQgKTsKK30KKworCisvKgogICogVXNlIHRoZSBibGluZGluZyBtZXRob2QgYW5kIG9wdGltaXNhdGlvbiBzdWdnZXN0ZWQgaW4gc2VjdGlvbiAxMCBvZjoKICAqICBLT0NIRVIsIFBhdWwgQy4gVGltaW5nIGF0dGFja3Mgb24gaW1wbGVtZW50YXRpb25zIG9mIERpZmZpZS1IZWxsbWFuLCBSU0EsCiAgKiAgRFNTLCBhbmQgb3RoZXIgc3lzdGVtcy4gSW4gOiBBZHZhbmNlcyBpbiBDcnlwdG9sb2d5LUNSWVBUTyc5Ni4gU3ByaW5nZXIKQEAgLTMyNyw3ICszNTMsMTAgQEAKIHN0YXRpYyBpbnQgZGhtX3VwZGF0ZV9ibGluZGluZyggbWJlZHRsc19kaG1fY29udGV4dCAqY3R4LAogICAgICAgICAgICAgICAgICAgICBpbnQgKCpmX3JuZykodm9pZCAqLCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCksIHZvaWQgKnBfcm5nICkKIHsKLSAgICBpbnQgcmV0LCBjb3VudDsKKyAgICBpbnQgcmV0OworICAgIG1iZWR0bHNfbXBpIFI7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUiApOwogCiAgICAgLyoKICAgICAgKiBEb24ndCB1c2UgYW55IGJsaW5kaW5nIHRoZSBmaXJzdCB0aW1lIGEgcGFydGljdWxhciBYIGlzIHVzZWQsCkBAIC0zNjIsMjQgKzM5MSwyMyBAQAogICAgICAqLwogCiAgICAgLyogVmkgPSByYW5kb20oIDIsIFAtMSApICovCi0gICAgY291bnQgPSAwOwotICAgIGRvCi0gICAgewotICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2ZpbGxfcmFuZG9tKCAmY3R4LT5WaSwgbWJlZHRsc19tcGlfc2l6ZSggJmN0eC0+UCApLCBmX3JuZywgcF9ybmcgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggZGhtX3JhbmRvbV9iZWxvdyggJmN0eC0+VmksICZjdHgtPlAsIGZfcm5nLCBwX3JuZyApICk7CiAKLSAgICAgICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9tcGkoICZjdHgtPlZpLCAmY3R4LT5QICkgPj0gMCApCi0gICAgICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3NoaWZ0X3IoICZjdHgtPlZpLCAxICkgKTsKKyAgICAvKiBWZiA9IFZpXi1YIG1vZCBQCisgICAgICogRmlyc3QgY29tcHV0ZSBWaV4tMSA9IFIgKiAoUiBWaSleLTEsIChhdm9pZGluZyBsZWFrcyBmcm9tIGludl9tb2QpLAorICAgICAqIHRoZW4gZWxldmF0ZSB0byB0aGUgWHRoIHBvd2VyLiAqLworICAgIE1CRURUTFNfTVBJX0NISyggZGhtX3JhbmRvbV9iZWxvdyggJlIsICZjdHgtPlAsIGZfcm5nLCBwX3JuZyApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmY3R4LT5WZiwgJmN0eC0+VmksICZSICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHgtPlZmLCAmY3R4LT5WZiwgJmN0eC0+UCApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9pbnZfbW9kKCAmY3R4LT5WZiwgJmN0eC0+VmYsICZjdHgtPlAgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfbXVsX21waSggJmN0eC0+VmYsICZjdHgtPlZmLCAmUiApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LT5WZiwgJmN0eC0+VmYsICZjdHgtPlAgKSApOwogCi0gICAgICAgIGlmKCBjb3VudCsrID4gMTAgKQotICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUgKTsKLSAgICB9Ci0gICAgd2hpbGUoIG1iZWR0bHNfbXBpX2NtcF9pbnQoICZjdHgtPlZpLCAxICkgPD0gMCApOwotCi0gICAgLyogVmYgPSBWaV4tWCBtb2QgUCAqLwotICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC0+VmYsICZjdHgtPlZpLCAmY3R4LT5QICkgKTsKICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2V4cF9tb2QoICZjdHgtPlZmLCAmY3R4LT5WZiwgJmN0eC0+WCwgJmN0eC0+UCwgJmN0eC0+UlAgKSApOwogCiBjbGVhbnVwOgorICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZSICk7CisKICAgICByZXR1cm4oIHJldCApOwogfQogCmRpZmYgLS1naXQgYS9saWJyYXJ5L2VjcC5jIGIvbGlicmFyeS9lY3AuYwppbmRleCA1ZDAwZGU1Li4wNWEwYjAxIDEwMDY0NAotLS0gYS9saWJyYXJ5L2VjcC5jCisrKyBiL2xpYnJhcnkvZWNwLmMKQEAgLTU0Niw5ICs1NDYsMTIgQEAKICNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0RQX1NFQ1AxOTJLMV9FTkFCTEVEKQogICAgIHsgTUJFRFRMU19FQ1BfRFBfU0VDUDE5MksxLCAgICAxOCwgICAgIDE5MiwgICAgInNlY3AxOTJrMSIgICAgICAgICB9LAogI2VuZGlmCi0jaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9DVVJWRTI1NTE5X0VOQUJMRUQpICYmIGRlZmluZWQoTUJFRFRMU19FQ0RIX1ZBUklBTlRfRVZFUkVTVF9FTkFCTEVEKQorI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEKQogICAgIHsgTUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOSwgICAyOSwgICAgIDI1NiwgICAgIngyNTUxOSIgICAgICAgICAgICB9LAogI2VuZGlmCisjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9EUF9DVVJWRTQ0OF9FTkFCTEVEKQorICAgIHsgTUJFRFRMU19FQ1BfRFBfQ1VSVkU0NDgsICAgICAzMCwgICAgIDQ0OCwgICAgIng0NDgiICAgICAgICAgICAgICB9LAorI2VuZGlmCiAgICAgeyBNQkVEVExTX0VDUF9EUF9OT05FLCAgICAgICAgICAwLCAgICAgMCwgICAgICBOVUxMICAgICAgICAgICAgICAgIH0sCiB9OwogCmRpZmYgLS1naXQgYS9saWJyYXJ5L2VudHJvcHlfcG9sbC5jIGIvbGlicmFyeS9lbnRyb3B5X3BvbGwuYwppbmRleCA0YmY2NjBlLi41MjUwYTdiIDEwMDY0NAotLS0gYS9saWJyYXJ5L2VudHJvcHlfcG9sbC5jCisrKyBiL2xpYnJhcnkvZW50cm9weV9wb2xsLmMKQEAgLTE3LDcgKzE3LDcgQEAKICAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0jaWYgZGVmaW5lZChfX2xpbnV4X18pCisjaWYgZGVmaW5lZChfX2xpbnV4X18pICYmICFkZWZpbmVkKF9HTlVfU09VUkNFKQogLyogRW5zdXJlIHRoYXQgc3lzY2FsbCgpIGlzIGF2YWlsYWJsZSBldmVuIHdoZW4gY29tcGlsaW5nIHdpdGggLXN0ZD1jOTkgKi8KICNkZWZpbmUgX0dOVV9TT1VSQ0UKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicmFyeS9tZDIuYyBiL2xpYnJhcnkvbWQyLmMKaW5kZXggNWViZjA3Mi4uYjRmN2NjNiAxMDA2NDQKLS0tIGEvbGlicmFyeS9tZDIuYworKysgYi9saWJyYXJ5L21kMi5jCkBAIC0yODcsOCArMjg3LDcgQEAKICAgICB7ICJtZXNzYWdlIGRpZ2VzdCIgfSwKICAgICB7ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIgfSwKICAgICB7ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIgfSwKLSAgICB7ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMiIKLSAgICAgICIzNDU2Nzg5MDEyMzQ1Njc4OTAiIH0KKyAgICB7ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIgfQogfTsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBtZDJfdGVzdF9zdHJsZW5bN10gPQpkaWZmIC0tZ2l0IGEvbGlicmFyeS9tZDQuYyBiL2xpYnJhcnkvbWQ0LmMKaW5kZXggYWM5NTA3NC4uMWNhYzBhNCAxMDA2NDQKLS0tIGEvbGlicmFyeS9tZDQuYworKysgYi9saWJyYXJ5L21kNC5jCkBAIC00MDgsOCArNDA4LDcgQEAKICAgICB7ICJtZXNzYWdlIGRpZ2VzdCIgfSwKICAgICB7ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIgfSwKICAgICB7ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIgfSwKLSAgICB7ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMiIKLSAgICAgICIzNDU2Nzg5MDEyMzQ1Njc4OTAiIH0KKyAgICB7ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIgfQogfTsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBtZDRfdGVzdF9zdHJsZW5bN10gPQpkaWZmIC0tZ2l0IGEvbGlicmFyeS9tZDUuYyBiL2xpYnJhcnkvbWQ1LmMKaW5kZXggOGNlYTkwMi4uMWU3MDJiNCAxMDA2NDQKLS0tIGEvbGlicmFyeS9tZDUuYworKysgYi9saWJyYXJ5L21kNS5jCkBAIC00MjIsOCArNDIyLDcgQEAKICAgICB7ICJtZXNzYWdlIGRpZ2VzdCIgfSwKICAgICB7ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIgfSwKICAgICB7ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIgfSwKLSAgICB7ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMiIKLSAgICAgICIzNDU2Nzg5MDEyMzQ1Njc4OTAiIH0KKyAgICB7ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIgfQogfTsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBtZDVfdGVzdF9idWZsZW5bN10gPQpkaWZmIC0tZ2l0IGEvbGlicmFyeS9uZXRfc29ja2V0cy5jIGIvbGlicmFyeS9uZXRfc29ja2V0cy5jCmluZGV4IDNmOTZjYWIuLjU0YzJiNDcgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvbmV0X3NvY2tldHMuYworKysgYi9saWJyYXJ5L25ldF9zb2NrZXRzLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCiAjaWYgZGVmaW5lZChfX3NvY2tsZW5fdF9kZWZpbmVkKSB8fCBkZWZpbmVkKF9TT0NLTEVOX1QpIHx8ICBcCiAgICAgZGVmaW5lZChfU09DS0xFTl9UX0RFQ0xBUkVEKSB8fCBkZWZpbmVkKF9fREVGSU5FRF9zb2NrbGVuX3QpIHx8IFwKLSAgICBkZWZpbmVkKHNvY2tsZW5fdCkKKyAgICBkZWZpbmVkKHNvY2tsZW5fdCkgfHwgKGRlZmluZWQoX1BPU0lYX1ZFUlNJT04pICYmIF9QT1NJWF9WRVJTSU9OID49IDIwMDExMkwpCiAgICAgc29ja2xlbl90IG4gPSAoc29ja2xlbl90KSBzaXplb2YoIGNsaWVudF9hZGRyICk7CiAgICAgc29ja2xlbl90IHR5cGVfbGVuID0gKHNvY2tsZW5fdCkgc2l6ZW9mKCB0eXBlICk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvbGlicmFyeS9way5jIGIvbGlicmFyeS9way5jCmluZGV4IDhmZmJlZDIuLjlhM2JjYjAgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvcGsuYworKysgYi9saWJyYXJ5L3BrLmMKQEAgLTU5MSw2ICs1OTEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBoYXNoX2FsZyApCiB7CiAjaWYgIWRlZmluZWQoTUJFRFRMU19FQ1BfQykKKyAgICAoKHZvaWQpIHBrKTsKKyAgICAoKHZvaWQpIGhhbmRsZSk7CisgICAgKCh2b2lkKSBoYXNoX2FsZyk7CiAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19UWVBFX01JU01BVENIICk7CiAjZWxzZQogICAgIGNvbnN0IG1iZWR0bHNfZWNwX2tleXBhaXIgKmVjOwpkaWZmIC0tZ2l0IGEvbGlicmFyeS9wa193cmFwLmMgYi9saWJyYXJ5L3BrX3dyYXAuYwppbmRleCA2YmYzMTY5Li45MDNjNTNiIDEwMDY0NAotLS0gYS9saWJyYXJ5L3BrX3dyYXAuYworKysgYi9saWJyYXJ5L3BrX3dyYXAuYwpAQCAtNTUxLDExICs1NTEsMTIgQEAKICAgICB1bnNpZ25lZCBjaGFyIGJ1ZlszMCArIDIgKiBNQkVEVExTX0VDUF9NQVhfQllURVNdOwogICAgIHVuc2lnbmVkIGNoYXIgKnA7CiAgICAgbWJlZHRsc19wa19pbmZvX3QgcGtfaW5mbyA9IG1iZWR0bHNfZWNrZXlfaW5mbzsKLSAgICBwc2FfYWxnb3JpdGhtX3QgcHNhX3NpZ19tZCwgcHNhX21kOworICAgIHBzYV9hbGdvcml0aG1fdCBwc2Ffc2lnX21kID0gUFNBX0FMR19FQ0RTQV9BTlk7CiAgICAgc2l6ZV90IGN1cnZlX2JpdHM7CiAgICAgcHNhX2VjY19mYW1pbHlfdCBjdXJ2ZSA9CiAgICAgICAgIG1iZWR0bHNfZWNjX2dyb3VwX3RvX3BzYSggY3R4LT5ncnAuaWQsICZjdXJ2ZV9iaXRzICk7CiAgICAgY29uc3Qgc2l6ZV90IHNpZ25hdHVyZV9wYXJ0X3NpemUgPSAoIGN0eC0+Z3JwLm5iaXRzICsgNyApIC8gODsKKyAgICAoKHZvaWQpIG1kX2FsZyk7CiAKICAgICBpZiggY3VydmUgPT0gMCApCiAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfUEtfQkFEX0lOUFVUX0RBVEEgKTsKQEAgLTU2OSwxMSArNTcwLDYgQEAKICAgICBpZigga2V5X2xlbiA8PSAwICkKICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19CQURfSU5QVVRfREFUQSApOwogCi0gICAgcHNhX21kID0gbWJlZHRsc19wc2FfdHJhbnNsYXRlX21kKCBtZF9hbGcgKTsKLSAgICBpZiggcHNhX21kID09IDAgKQotICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1BLX0JBRF9JTlBVVF9EQVRBICk7Ci0gICAgcHNhX3NpZ19tZCA9IFBTQV9BTEdfRUNEU0EoIHBzYV9tZCApOwotCiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWSggY3VydmUgKSApOwogICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSCApOwogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIHBzYV9zaWdfbWQgKTsKQEAgLTkxMCw2ICs5MDYsOCBAQAogICAgICAgICAgICAgdHlwZSA9PSBNQkVEVExTX1BLX0VDRFNBICk7CiB9CiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKwogLyoKICAqIFNpbXVsdGFuZW91c2x5IGNvbnZlcnQgYW5kIG1vdmUgcmF3IE1QSSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYSBidWZmZXIKICAqIHRvIGFuIEFTTi4xIE1QSSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCkBAIC05OTIsMTEgKzk5MCwyNCBAQAogICAgIHJldHVybiggMCApOwogfQogCisjZW5kaWYgLyogTUJFRFRMU19FQ0RTQV9DICovCisKIHN0YXRpYyBpbnQgcGtfb3BhcXVlX3NpZ25fd3JhcCggdm9pZCAqY3R4LCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuLAogICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNpZywgc2l6ZV90ICpzaWdfbGVuLAogICAgICAgICAgICAgICAgICAgIGludCAoKmZfcm5nKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KSwgdm9pZCAqcF9ybmcgKQogeworI2lmICFkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyAgICAoKHZvaWQpIGN0eCk7CisgICAgKCh2b2lkKSBtZF9hbGcpOworICAgICgodm9pZCkgaGFzaCk7CisgICAgKCh2b2lkKSBoYXNoX2xlbik7CisgICAgKCh2b2lkKSBzaWcpOworICAgICgodm9pZCkgc2lnX2xlbik7CisgICAgKCh2b2lkKSBmX3JuZyk7CisgICAgKCh2b2lkKSBwX3JuZyk7CisgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9QS19GRUFUVVJFX1VOQVZBSUxBQkxFICk7CisjZWxzZSAvKiAhTUJFRFRMU19FQ0RTQV9DICovCiAgICAgY29uc3QgcHNhX2tleV9oYW5kbGVfdCAqa2V5ID0gKGNvbnN0IHBzYV9rZXlfaGFuZGxlX3QgKikgY3R4OwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gUFNBX0FMR19FQ0RTQSggbWJlZHRsc19wc2FfdHJhbnNsYXRlX21kKCBtZF9hbGcgKSApOwpAQCAtMTAyNyw2ICsxMDM4LDcgQEAKIAogICAgIC8qIHRyYW5zY29kZSBpdCB0byBBU04uMSBzZXF1ZW5jZSAqLwogICAgIHJldHVybiggcGtfZWNkc2Ffc2lnX2FzbjFfZnJvbV9wc2EoIHNpZywgc2lnX2xlbiwgYnVmX2xlbiApICk7CisjZW5kaWYgLyogIU1CRURUTFNfRUNEU0FfQyAqLwogfQogCiBjb25zdCBtYmVkdGxzX3BrX2luZm9fdCBtYmVkdGxzX3BrX29wYXF1ZV9pbmZvID0gewpkaWZmIC0tZ2l0IGEvbGlicmFyeS9wa3BhcnNlLmMgYi9saWJyYXJ5L3BrcGFyc2UuYwppbmRleCBhMTA2ZGJlLi4wNTkwZjJiIDEwMDY0NAotLS0gYS9saWJyYXJ5L3BrcGFyc2UuYworKysgYi9saWJyYXJ5L3BrcGFyc2UuYwpAQCAtNjYyLDcgKzY2Miw3IEBACiAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BLX1VOS05PV05fUEtfQUxHOwogCiAgICAgaWYoIHJldCA9PSAwICYmICpwICE9IGVuZCApCi0gICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZCisgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1BLX0lOVkFMSURfUFVCS0VZICsKICAgICAgICAgICAgICAgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0g7CiAKICAgICBpZiggcmV0ICE9IDAgKQpkaWZmIC0tZ2l0IGEvbGlicmFyeS9wc2FfY3J5cHRvLmMgYi9saWJyYXJ5L3BzYV9jcnlwdG8uYwppbmRleCBiZmZkZGM5Li5hYjRlNDdhIDEwMDY0NAotLS0gYS9saWJyYXJ5L3BzYV9jcnlwdG8uYworKysgYi9saWJyYXJ5L3BzYV9jcnlwdG8uYwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAicHNhX2NyeXB0b19jb3JlLmgiCiAjaW5jbHVkZSAicHNhX2NyeXB0b19pbnZhc2l2ZS5oIgorI2luY2x1ZGUgInBzYV9jcnlwdG9fZHJpdmVyX3dyYXBwZXJzLmgiCiAjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fU0VfQykKICNpbmNsdWRlICJwc2FfY3J5cHRvX3NlLmgiCiAjZW5kaWYKQEAgLTEyNCw3ICsxMjUsNyBAQAogICAgIGlmKCBnbG9iYWxfZGF0YS5pbml0aWFsaXplZCA9PSAwICkgIFwKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CiAKLXN0YXRpYyBwc2Ffc3RhdHVzX3QgbWJlZHRsc190b19wc2FfZXJyb3IoIGludCByZXQgKQorcHNhX3N0YXR1c190IG1iZWR0bHNfdG9fcHNhX2Vycm9yKCBpbnQgcmV0ICkKIHsKICAgICAvKiBJZiB0aGVyZSdzIGJvdGggYSBoaWdoLWxldmVsIGNvZGUgYW5kIGxvdy1sZXZlbCBjb2RlLCBkaXNwYXRjaCBvbgogICAgICAqIHRoZSBoaWdoLWxldmVsIGNvZGUuICovCkBAIC0xOTgsNyArMTk5LDcgQEAKICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9DSVBIRVJfSU5WQUxJRF9QQURESU5HOgogICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9QQURESU5HICk7CiAgICAgICAgIGNhc2UgTUJFRFRMU19FUlJfQ0lQSEVSX0ZVTExfQkxPQ0tfRVhQRUNURUQ6Ci0gICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9CQURfU1RBVEUgKTsKKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKICAgICAgICAgY2FzZSBNQkVEVExTX0VSUl9DSVBIRVJfQVVUSF9GQUlMRUQ6CiAgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX1NJR05BVFVSRSApOwogICAgICAgICBjYXNlIE1CRURUTFNfRVJSX0NJUEhFUl9JTlZBTElEX0NPTlRFWFQ6CkBAIC03MzgsNyArNzM5LDcgQEAKICAgICAgICAgICogLSBUaGUgYnl0ZSAweDA0OwogICAgICAgICAgKiAtIGB4X1BgIGFzIGEgYGNlaWxpbmcobS84KWAtYnl0ZSBzdHJpbmcsIGJpZy1lbmRpYW47CiAgICAgICAgICAqIC0gYHlfUGAgYXMgYSBgY2VpbGluZyhtLzgpYC1ieXRlIHN0cmluZywgYmlnLWVuZGlhbi4KLSAgICAgICAgICogU28gaXRzIGRhdGEgbGVuZ3RoIGlzIDJtKzEgd2hlcmUgbiBpcyB0aGUga2V5IHNpemUgaW4gYml0cy4KKyAgICAgICAgICogU28gaXRzIGRhdGEgbGVuZ3RoIGlzIDJtKzEgd2hlcmUgbSBpcyB0aGUgY3VydmUgc2l6ZSBpbiBiaXRzLgogICAgICAgICAgKi8KICAgICAgICAgaWYoICggZGF0YV9sZW5ndGggJiAxICkgPT0gMCApCiAgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CkBAIC05NjgsMTQgKzk2OSw0NSBAQAogICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKIH0KIAotLyoqIEltcG9ydCBrZXkgZGF0YSBpbnRvIGEgc2xvdC4gYHNsb3QtPmF0dHIudHlwZWAgbXVzdCBoYXZlIGJlZW4gc2V0Ci0gKiBwcmV2aW91c2x5LiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgc2xvdCBkb2VzIG5vdCBjb250YWluCi0gKiBhbnkga2V5IG1hdGVyaWFsIHlldC4gT24gZmFpbHVyZSwgdGhlIHNsb3QgY29udGVudCBpcyB1bmNoYW5nZWQuICovCi1wc2Ffc3RhdHVzX3QgcHNhX2ltcG9ydF9rZXlfaW50b19zbG90KCBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9sZW5ndGggKQorcHNhX3N0YXR1c190IHBzYV9jb3B5X2tleV9tYXRlcmlhbF9pbnRvX3Nsb3QoIHBzYV9rZXlfc2xvdF90ICpzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFfbGVuZ3RoICkKK3sKKyAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gcHNhX2FsbG9jYXRlX2J1ZmZlcl90b19zbG90KCBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbGVuZ3RoICk7CisgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgIHJldHVybiggc3RhdHVzICk7CisKKyAgICBtZW1jcHkoIHNsb3QtPmRhdGEua2V5LmRhdGEsIGRhdGEsIGRhdGFfbGVuZ3RoICk7CisgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOworfQorCisvKiogSW1wb3J0IGtleSBkYXRhIGludG8gYSBzbG90LgorICoKKyAqIGBzbG90LT50eXBlYCBtdXN0IGhhdmUgYmVlbiBzZXQgcHJldmlvdXNseS4KKyAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBzbG90IGRvZXMgbm90IGNvbnRhaW4gYW55IGtleSBtYXRlcmlhbCB5ZXQuCisgKiBPbiBmYWlsdXJlLCB0aGUgc2xvdCBjb250ZW50IGlzIHVuY2hhbmdlZC4KKyAqCisgKiBQZXJzaXN0ZW50IHN0b3JhZ2UgaXMgbm90IGFmZmVjdGVkLgorICoKKyAqIFxwYXJhbVtpbixvdXRdIHNsb3QgIFRoZSBrZXkgc2xvdCB0byBpbXBvcnQgZGF0YSBpbnRvLgorICogICAgICAgICAgICAgICAgICAgICAgSXRzIGB0eXBlYCBmaWVsZCBtdXN0IGhhdmUgcHJldmlvdXNseSBiZWVuIHNldCB0bworICogICAgICAgICAgICAgICAgICAgICAgdGhlIGRlc2lyZWQga2V5IHR5cGUuCisgKiAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IG5vdCBjb250YWluIGFueSBrZXkgbWF0ZXJpYWwgeWV0LgorICogXHBhcmFtW2luXSBkYXRhICAgICAgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIGtleSBtYXRlcmlhbCB0byBwYXJzZSBhbmQgaW1wb3J0LgorICogXHBhcmFtIGRhdGFfbGVuZ3RoICAgU2l6ZSBvZiBccCBkYXRhIGluIGJ5dGVzLgorICoKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCisgKiBccmV0dmFsICNQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorICogXHJldHZhbCAjUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZCisgKi8KK3N0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX2ltcG9ydF9rZXlfaW50b19zbG90KCBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhX2xlbmd0aCApCiB7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9TVUNDRVNTOworICAgIHNpemVfdCBiaXRfc2l6ZTsKIAogICAgIC8qIHplcm8tbGVuZ3RoIGtleXMgYXJlIG5ldmVyIHN1cHBvcnRlZC4gKi8KICAgICBpZiggZGF0YV9sZW5ndGggPT0gMCApCkBAIC05ODMsNyArMTAxNSw3IEBACiAKICAgICBpZigga2V5X3R5cGVfaXNfcmF3X2J5dGVzKCBzbG90LT5hdHRyLnR5cGUgKSApCiAgICAgewotICAgICAgICBzaXplX3QgYml0X3NpemUgPSBQU0FfQllURVNfVE9fQklUUyggZGF0YV9sZW5ndGggKTsKKyAgICAgICAgYml0X3NpemUgPSBQU0FfQllURVNfVE9fQklUUyggZGF0YV9sZW5ndGggKTsKIAogICAgICAgICAvKiBFbnN1cmUgdGhhdCB0aGUgYnl0ZXMtdG8tYml0cyBjb252ZXJzaW9uIGhhc24ndCBvdmVyZmxvd24uICovCiAgICAgICAgIGlmKCBkYXRhX2xlbmd0aCA+IFNJWkVfTUFYIC8gOCApCkBAIC05OTksNDcgKzEwMzEsNjUgQEAKICAgICAgICAgICAgIHJldHVybiggc3RhdHVzICk7CiAKICAgICAgICAgLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUga2V5ICovCi0gICAgICAgIHN0YXR1cyA9IHBzYV9hbGxvY2F0ZV9idWZmZXJfdG9fc2xvdCggc2xvdCwgZGF0YV9sZW5ndGggKTsKKyAgICAgICAgc3RhdHVzID0gcHNhX2NvcHlfa2V5X21hdGVyaWFsX2ludG9fc2xvdCggc2xvdCwgZGF0YSwgZGF0YV9sZW5ndGggKTsKICAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgICAgICByZXR1cm4oIHN0YXR1cyApOwogCi0gICAgICAgIC8qIGNvcHkga2V5IGludG8gYWxsb2NhdGVkIGJ1ZmZlciAqLwotICAgICAgICBtZW1jcHkoIHNsb3QtPmRhdGEua2V5LmRhdGEsIGRhdGEsIGRhdGFfbGVuZ3RoICk7Ci0KICAgICAgICAgLyogV3JpdGUgdGhlIGFjdHVhbCBrZXkgc2l6ZSB0byB0aGUgc2xvdC4KICAgICAgICAgICogcHNhX3N0YXJ0X2tleV9jcmVhdGlvbigpIHdyb3RlIHRoZSBzaXplIGRlY2xhcmVkIGJ5IHRoZQogICAgICAgICAgKiBjYWxsZXIsIHdoaWNoIG1heSBiZSAwIChtZWFuaW5nIHVuc3BlY2lmaWVkKSBvciB3cm9uZy4gKi8KICAgICAgICAgc2xvdC0+YXR0ci5iaXRzID0gKHBzYV9rZXlfYml0c190KSBiaXRfc2l6ZTsKKworICAgICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CiAgICAgfQotICAgIGVsc2UgaWYoIFBTQV9LRVlfVFlQRV9JU19FQ0MoIHNsb3QtPmF0dHIudHlwZSApICkKKyAgICBlbHNlIGlmKCBQU0FfS0VZX1RZUEVfSVNfQVNZTU1FVFJJQyggc2xvdC0+YXR0ci50eXBlICkgKQogICAgIHsKKyAgICAgICAgLyogVHJ5IHZhbGlkYXRpb24gdGhyb3VnaCBhY2NlbGVyYXRvcnMgZmlyc3QuICovCisgICAgICAgIGJpdF9zaXplID0gc2xvdC0+YXR0ci5iaXRzOworICAgICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0geworICAgICAgICAgIC5jb3JlID0gc2xvdC0+YXR0cgorICAgICAgICB9OworICAgICAgICBzdGF0dXMgPSBwc2FfZHJpdmVyX3dyYXBwZXJfdmFsaWRhdGVfa2V5KCAmYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiaXRfc2l6ZSApOworICAgICAgICBpZiggc3RhdHVzID09IFBTQV9TVUNDRVNTICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogS2V5IGhhcyBiZWVuIHZhbGlkYXRlZCBzdWNjZXNzZnVsbHkgYnkgYW4gYWNjZWxlcmF0b3IuCisgICAgICAgICAgICAgKiBDb3B5IGtleSBtYXRlcmlhbCBpbnRvIHNsb3QuICovCisgICAgICAgICAgICBzdGF0dXMgPSBwc2FfY29weV9rZXlfbWF0ZXJpYWxfaW50b19zbG90KCBzbG90LCBkYXRhLCBkYXRhX2xlbmd0aCApOworICAgICAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKworICAgICAgICAgICAgc2xvdC0+YXR0ci5iaXRzID0gKHBzYV9rZXlfYml0c190KSBiaXRfc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdGF0dXMgIT0gUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKQorICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKworICAgICAgICAvKiBLZXkgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IGFjY2VsZXJhdG9yLCB0cnkgc29mdHdhcmUgZmFsbGJhY2sKKyAgICAgICAgICogaWYgcHJlc2VudC4gKi8KICNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCi0gICAgICAgIHN0YXR1cyA9IHBzYV9pbXBvcnRfZWNwX2tleSggc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCBkYXRhX2xlbmd0aCApOwotI2Vsc2UKLSAgICAgICAgLyogTm8gZHJpdmVycyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgeWV0LCBzbyB3aXRob3V0IG1iZWQgVExTIGJhY2tpbmcKLSAgICAgICAgICogdGhlcmUncyBubyB3YXkgdG8gZG8gRUNQIHdpdGggdGhlIGN1cnJlbnQgbGlicmFyeS4gKi8KLSAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworICAgICAgICBpZiggUFNBX0tFWV9UWVBFX0lTX0VDQyggc2xvdC0+YXR0ci50eXBlICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4oIHBzYV9pbXBvcnRfZWNwX2tleSggc2xvdCwgZGF0YSwgZGF0YV9sZW5ndGggKSApOworICAgICAgICB9CiAjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX0VDUF9DKSAqLwotICAgIH0KLSAgICBlbHNlIGlmKCBQU0FfS0VZX1RZUEVfSVNfUlNBKCBzbG90LT5hdHRyLnR5cGUgKSApCi0gICAgewogI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKLSAgICAgICAgc3RhdHVzID0gcHNhX2ltcG9ydF9yc2Ffa2V5KCBzbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGRhdGFfbGVuZ3RoICk7Ci0jZWxzZQotICAgICAgICAvKiBObyBkcml2ZXJzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCB5ZXQsIHNvIHdpdGhvdXQgbWJlZCBUTFMgYmFja2luZwotICAgICAgICAgKiB0aGVyZSdzIG5vIHdheSB0byBkbyBSU0Egd2l0aCB0aGUgY3VycmVudCBsaWJyYXJ5LiAqLwotICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgaWYoIFBTQV9LRVlfVFlQRV9JU19SU0EoIHNsb3QtPmF0dHIudHlwZSApICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuKCBwc2FfaW1wb3J0X3JzYV9rZXkoIHNsb3QsIGRhdGEsIGRhdGFfbGVuZ3RoICkgKTsKKyAgICAgICAgfQogI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19SU0FfQykgKi8KKworICAgICAgICAvKiBGZWxsIHRocm91Z2ggdGhlIGZhbGxiYWNrIGFzIHdlbGwsIHNvIGhhdmUgbm90aGluZyBlbHNlIHRvIHRyeS4gKi8KKyAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAvKiBVbmtub3duIGtleSB0eXBlICovCiAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKICAgICB9Ci0KLSAgICByZXR1cm4oIHN0YXR1cyApOwogfQogCiAvKiogQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gb2YgdHdvIGFsZ29yaXRobSB1c2FnZSBwb2xpY2llcy4KQEAgLTEwODMsNiArMTEzMywxNSBAQAogICAgICAgICByZXR1cm4oICggcG9saWN5X2FsZyAmIH5QU0FfQUxHX0hBU0hfTUFTSyApID09CiAgICAgICAgICAgICAgICAgKCByZXF1ZXN0ZWRfYWxnICYgflBTQV9BTEdfSEFTSF9NQVNLICkgKTsKICAgICB9CisgICAgLyogSWYgcG9saWN5X2FsZyBpcyBhIGdlbmVyaWMga2V5IGFncmVlbWVudCBvcGVyYXRpb24sIHRoZW4gdXNpbmcgaXQgZm9yCisgICAgICogYSBrZXkgZGVyaXZhdGlvbiB3aXRoIHRoYXQga2V5IGFncmVlbWVudCBzaG91bGQgYWxzbyBiZSBhbGxvd2VkLiBUaGlzCisgICAgICogYmVoYXZpb3VyIGlzIGV4cGVjdGVkIHRvIGJlIGRlZmluZWQgaW4gYSBmdXR1cmUgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uLiAqLworICAgIGlmKCBQU0FfQUxHX0lTX1JBV19LRVlfQUdSRUVNRU5UKCBwb2xpY3lfYWxnICkgJiYKKyAgICAgICAgUFNBX0FMR19JU19LRVlfQUdSRUVNRU5UKCByZXF1ZXN0ZWRfYWxnICkgKQorICAgIHsKKyAgICAgICAgcmV0dXJuKCBQU0FfQUxHX0tFWV9BR1JFRU1FTlRfR0VUX0JBU0UoIHJlcXVlc3RlZF9hbGcgKSA9PQorICAgICAgICAgICAgICAgIHBvbGljeV9hbGcgKTsKKyAgICB9CiAgICAgLyogSWYgaXQgaXNuJ3QgcGVybWl0dGVkLCBpdCdzIGZvcmJpZGRlbi4gKi8KICAgICByZXR1cm4oIDAgKTsKIH0KQEAgLTE4OTYsMTMgKzE5NTUsOSBAQAogICAgICAgICAgICAgc3RhdGljX2Fzc2VydCggc2l6ZW9mKCBzbG90LT5kYXRhLnNlLnNsb3RfbnVtYmVyICkgPT0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggZGF0YS5zbG90X251bWJlciApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNsb3QgbnVtYmVyIHNpemUgZG9lcyBub3QgbWF0Y2ggcHNhX3NlX2tleV9kYXRhX3N0b3JhZ2VfdCIgKTsKLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoIHNpemVvZiggc2xvdC0+YXR0ci5iaXRzICkgPT0gc2l6ZW9mKCBkYXRhLmJpdHMgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJCaXQtc2l6ZSBzaXplIGRvZXMgbm90IG1hdGNoIHBzYV9zZV9rZXlfZGF0YV9zdG9yYWdlX3QiICk7CiAjZW5kaWYKICAgICAgICAgICAgIG1lbWNweSggJmRhdGEuc2xvdF9udW1iZXIsICZzbG90LT5kYXRhLnNlLnNsb3RfbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICBzaXplb2YoIHNsb3QtPmRhdGEuc2Uuc2xvdF9udW1iZXIgKSApOwotICAgICAgICAgICAgbWVtY3B5KCAmZGF0YS5iaXRzLCAmc2xvdC0+YXR0ci5iaXRzLAotICAgICAgICAgICAgICAgICAgICBzaXplb2YoIHNsb3QtPmF0dHIuYml0cyApICk7CiAgICAgICAgICAgICBzdGF0dXMgPSBwc2Ffc2F2ZV9wZXJzaXN0ZW50X2tleSggJnNsb3QtPmF0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKSAmZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGRhdGEgKSApOwpAQCAtMTkxMCwyMiArMTk2NSwxMSBAQAogICAgICAgICBlbHNlCiAjZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MgKi8KICAgICAgICAgewotICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcl9zaXplID0KLSAgICAgICAgICAgICAgICBQU0FfS0VZX0VYUE9SVF9NQVhfU0laRSggc2xvdC0+YXR0ci50eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5hdHRyLmJpdHMgKTsKLSAgICAgICAgICAgIHVpbnQ4X3QgKmJ1ZmZlciA9IG1iZWR0bHNfY2FsbG9jKCAxLCBidWZmZXJfc2l6ZSApOwotICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IDA7Ci0gICAgICAgICAgICBpZiggYnVmZmVyID09IE5VTEwgKQotICAgICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlkgKTsKLSAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9pbnRlcm5hbF9leHBvcnRfa2V5KCBzbG90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCApOwotICAgICAgICAgICAgaWYoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApCi0gICAgICAgICAgICAgICAgc3RhdHVzID0gcHNhX3NhdmVfcGVyc2lzdGVudF9rZXkoICZzbG90LT5hdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCApOwotCi0gICAgICAgICAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoIGJ1ZmZlciwgYnVmZmVyX3NpemUgKTsKLSAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggYnVmZmVyICk7CisgICAgICAgICAgICAvKiBLZXkgbWF0ZXJpYWwgaXMgc2F2ZWQgaW4gZXhwb3J0IHJlcHJlc2VudGF0aW9uIGluIHRoZSBzbG90LCBzbworICAgICAgICAgICAgICoganVzdCBwYXNzIHRoZSBzbG90IGJ1ZmZlciBmb3Igc3RvcmFnZS4gKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9zYXZlX3BlcnNpc3RlbnRfa2V5KCAmc2xvdC0+YXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5kYXRhLmtleS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzICk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DKSAqLwpAQCAtMjE3MywyNiArMjIxNywxNiBAQAogc3RhdGljIHBzYV9zdGF0dXNfdCBwc2FfY29weV9rZXlfbWF0ZXJpYWwoIGNvbnN0IHBzYV9rZXlfc2xvdF90ICpzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9zbG90X3QgKnRhcmdldCApCiB7Ci0gICAgcHNhX3N0YXR1c190IHN0YXR1czsKLSAgICB1aW50OF90ICpidWZmZXIgPSBOVUxMOwotICAgIHNpemVfdCBidWZmZXJfc2l6ZSA9IDA7Ci0gICAgc2l6ZV90IGxlbmd0aDsKLQotICAgIGJ1ZmZlcl9zaXplID0gUFNBX0tFWV9FWFBPUlRfTUFYX1NJWkUoIHNvdXJjZS0+YXR0ci50eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X3Nsb3RfYml0cyggc291cmNlICkgKTsKLSAgICBidWZmZXIgPSBtYmVkdGxzX2NhbGxvYyggMSwgYnVmZmVyX3NpemUgKTsKLSAgICBpZiggYnVmZmVyID09IE5VTEwgKQotICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZICk7Ci0gICAgc3RhdHVzID0gcHNhX2ludGVybmFsX2V4cG9ydF9rZXkoIHNvdXJjZSwgYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbmd0aCwgMCApOworICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBwc2FfY29weV9rZXlfbWF0ZXJpYWxfaW50b19zbG90KCB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS0+ZGF0YS5rZXkuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5kYXRhLmtleS5ieXRlcyApOwogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgdGFyZ2V0LT5hdHRyLnR5cGUgPSBzb3VyY2UtPmF0dHIudHlwZTsKLSAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleV9pbnRvX3Nsb3QoIHRhcmdldCwgYnVmZmVyLCBsZW5ndGggKTsKKyAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIAotZXhpdDoKLSAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoIGJ1ZmZlciwgYnVmZmVyX3NpemUgKTsKLSAgICBtYmVkdGxzX2ZyZWUoIGJ1ZmZlciApOwotICAgIHJldHVybiggc3RhdHVzICk7CisgICAgdGFyZ2V0LT5hdHRyLnR5cGUgPSBzb3VyY2UtPmF0dHIudHlwZTsKKyAgICB0YXJnZXQtPmF0dHIuYml0cyA9IHNvdXJjZS0+YXR0ci5iaXRzOworCisgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOwogfQogCiBwc2Ffc3RhdHVzX3QgcHNhX2NvcHlfa2V5KCBwc2Ffa2V5X2hhbmRsZV90IHNvdXJjZV9oYW5kbGUsCkBAIC0yMjU1LDcgKzIyODksNyBAQAogLyogTWVzc2FnZSBkaWdlc3RzICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpCisjaWYgZGVmaW5lZChNQkVEVExTX1JTQV9DKSB8fCBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EpCiBzdGF0aWMgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1iZWR0bHNfbWRfaW5mb19mcm9tX3BzYSggcHNhX2FsZ29yaXRobV90IGFsZyApCiB7CiAgICAgc3dpdGNoKCBhbGcgKQpAQCAtMjI5OCw3ICsyMzMyLDcgQEAKICAgICAgICAgICAgIHJldHVybiggTlVMTCApOwogICAgIH0KIH0KLSNlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19SU0FfQykgfHwgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19ERVRFUk1JTklTVElDX0VDRFNBKSAqLwogCiBwc2Ffc3RhdHVzX3QgcHNhX2hhc2hfYWJvcnQoIHBzYV9oYXNoX29wZXJhdGlvbl90ICpvcGVyYXRpb24gKQogewpAQCAtMjc1MSw2ICsyNzg1LDkgQEAKICAgICAgICAgICAgIGNhc2UgUFNBX0FMR19PRkI6CiAgICAgICAgICAgICAgICAgbW9kZSA9IE1CRURUTFNfTU9ERV9PRkI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFBTQV9BTEdfRUNCX05PX1BBRERJTkc6CisgICAgICAgICAgICAgICAgbW9kZSA9IE1CRURUTFNfTU9ERV9FQ0I7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFBTQV9BTEdfQ0JDX05PX1BBRERJTkc6CiAgICAgICAgICAgICAgICAgbW9kZSA9IE1CRURUTFNfTU9ERV9DQkM7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTI2LDcgKzM1NjMsNyBAQAogfQogI2VuZGlmIC8qIE1CRURUTFNfUlNBX0MgKi8KIAotI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfRUNEU0EpIHx8IGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSkKIC8qIGBlY3BgIGNhbm5vdCBiZSBjb25zdCBiZWNhdXNlIGBlY3AtPmdycGAgbmVlZHMgdG8gYmUgbm9uLWNvbnN0CiAgKiBmb3IgbWJlZHRsc19lY2RzYV9zaWduKCkgYW5kIG1iZWR0bHNfZWNkc2Ffc2lnbl9kZXQoKQogICogKGV2ZW4gdGhvdWdoIHRoZXNlIGZ1bmN0aW9ucyBkb24ndCBtb2RpZnkgaXQpLiAqLwpAQCAtMzU1MCw3ICszNTg3LDcgQEAKICAgICAgICAgZ290byBjbGVhbnVwOwogICAgIH0KIAotI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSkKICAgICBpZiggUFNBX0FMR19EU0FfSVNfREVURVJNSU5JU1RJQyggYWxnICkgKQogICAgIHsKICAgICAgICAgcHNhX2FsZ29yaXRobV90IGhhc2hfYWxnID0gUFNBX0FMR19TSUdOX0dFVF9IQVNIKCBhbGcgKTsKQEAgLTM1NjMsNyArMzYwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbG9iYWxfZGF0YS5jdHJfZHJiZyApICk7CiAgICAgfQogICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EpICovCiAgICAgewogICAgICAgICAodm9pZCkgYWxnOwogICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNkc2Ffc2lnbiggJmVjcC0+Z3JwLCAmciwgJnMsICZlY3AtPmQsCkBAIC0zNjI1LDcgKzM2NjIsNyBAQAogICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZzICk7CiAgICAgcmV0dXJuKCBtYmVkdGxzX3RvX3BzYV9lcnJvciggcmV0ICkgKTsKIH0KLSNlbmRpZiAvKiBNQkVEVExTX0VDRFNBX0MgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0VDRFNBKSB8fCBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EgKi8KIAogcHNhX3N0YXR1c190IHBzYV9zaWduX2hhc2goIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcsCkBAIC0zNjM3LDEwICszNjc0LDYgQEAKIHsKICAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdDsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwotI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MpCi0gICAgY29uc3QgcHNhX2Rydl9zZV90ICpkcnY7Ci0gICAgcHNhX2Rydl9zZV9jb250ZXh0X3QgKmRydl9jb250ZXh0OwotI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19TRV9DICovCiAKICAgICAqc2lnbmF0dXJlX2xlbmd0aCA9IHNpZ25hdHVyZV9zaXplOwogICAgIC8qIEltbWVkaWF0ZWx5IHJlamVjdCBhIHplcm8tbGVuZ3RoIHNpZ25hdHVyZSBidWZmZXIuIFRoaXMgZ3VhcmFudGVlcwpAQCAtMzY1OSwyNCArMzY5MiwxOSBAQAogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCi0jaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fU0VfQykKLSAgICBpZiggcHNhX2dldF9zZV9kcml2ZXIoIHNsb3QtPmF0dHIubGlmZXRpbWUsICZkcnYsICZkcnZfY29udGV4dCApICkKLSAgICB7Ci0gICAgICAgIGlmKCBkcnYtPmFzeW1tZXRyaWMgPT0gTlVMTCB8fAotICAgICAgICAgICAgZHJ2LT5hc3ltbWV0cmljLT5wX3NpZ24gPT0gTlVMTCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEOwotICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9Ci0gICAgICAgIHN0YXR1cyA9IGRydi0+YXN5bW1ldHJpYy0+cF9zaWduKCBkcnZfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEuc2Uuc2xvdF9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBoYXNoX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgc2lnbmF0dXJlX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfbGVuZ3RoICk7Ci0gICAgfQotICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX1BTQV9DUllQVE9fU0VfQyAqLworICAgIC8qIFRyeSBhbnkgb2YgdGhlIGF2YWlsYWJsZSBhY2NlbGVyYXRvcnMgZmlyc3QgKi8KKyAgICBzdGF0dXMgPSBwc2FfZHJpdmVyX3dyYXBwZXJfc2lnbl9oYXNoKCBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfbGVuZ3RoICk7CisgICAgaWYoIHN0YXR1cyAhPSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCB8fAorICAgICAgICBwc2Ffa2V5X2xpZmV0aW1lX2lzX2V4dGVybmFsKCBzbG90LT5hdHRyLmxpZmV0aW1lICkgKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAvKiBJZiB0aGUgb3BlcmF0aW9uIHdhcyBub3Qgc3VwcG9ydGVkIGJ5IGFueSBhY2NlbGVyYXRvciwgdHJ5IGZhbGxiYWNrLiAqLwogI2lmIGRlZmluZWQoTUJFRFRMU19SU0FfQykKICAgICBpZiggc2xvdC0+YXR0ci50eXBlID09IFBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVIgKQogICAgIHsKQEAgLTM3MDMsOSArMzczMSw5IEBACiAjaWYgZGVmaW5lZChNQkVEVExTX0VDUF9DKQogICAgIGlmKCBQU0FfS0VZX1RZUEVfSVNfRUNDKCBzbG90LT5hdHRyLnR5cGUgKSApCiAgICAgewotI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfRUNEU0EpCiAgICAgICAgIGlmKAotI2lmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSkKICAgICAgICAgICAgIFBTQV9BTEdfSVNfRUNEU0EoIGFsZyApCiAjZWxzZQogICAgICAgICAgICAgUFNBX0FMR19JU19SQU5ET01JWkVEX0VDRFNBKCBhbGcgKQpAQCAtMzcyOCw3ICszNzU2LDcgQEAKICAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggZWNwICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQotI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9DKSAqLworI2VuZGlmIC8qIGRlZmluZWQoTUJFRFRMU19QU0FfQlVJTFRJTl9BTEdfRUNEU0EpICovCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UOwogICAgICAgICB9CkBAIC0zNzYzLDI5ICszNzkxLDIyIEBACiB7CiAgICAgcHNhX2tleV9zbG90X3QgKnNsb3Q7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1czsKLSNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19TRV9DKQotICAgIGNvbnN0IHBzYV9kcnZfc2VfdCAqZHJ2OwotICAgIHBzYV9kcnZfc2VfY29udGV4dF90ICpkcnZfY29udGV4dDsKLSNlbmRpZiAvKiBNQkVEVExTX1BTQV9DUllQVE9fU0VfQyAqLwogCiAgICAgc3RhdHVzID0gcHNhX2dldF9rZXlfZnJvbV9zbG90KCBoYW5kbGUsICZzbG90LCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNILCBhbGcgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIAotI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MpCi0gICAgaWYoIHBzYV9nZXRfc2VfZHJpdmVyKCBzbG90LT5hdHRyLmxpZmV0aW1lLCAmZHJ2LCAmZHJ2X2NvbnRleHQgKSApCi0gICAgewotICAgICAgICBpZiggZHJ2LT5hc3ltbWV0cmljID09IE5VTEwgfHwKLSAgICAgICAgICAgIGRydi0+YXN5bW1ldHJpYy0+cF92ZXJpZnkgPT0gTlVMTCApCi0gICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7Ci0gICAgICAgIHJldHVybiggZHJ2LT5hc3ltbWV0cmljLT5wX3ZlcmlmeSggZHJ2X2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5zZS5zbG90X251bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgaGFzaF9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLCBzaWduYXR1cmVfbGVuZ3RoICkgKTsKLSAgICB9Ci0gICAgZWxzZQotI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19TRV9DICovCisgICAgLyogVHJ5IGFueSBvZiB0aGUgYXZhaWxhYmxlIGFjY2VsZXJhdG9ycyBmaXJzdCAqLworICAgIHN0YXR1cyA9IHBzYV9kcml2ZXJfd3JhcHBlcl92ZXJpZnlfaGFzaCggc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZV9sZW5ndGggKTsKKyAgICBpZiggc3RhdHVzICE9IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEIHx8CisgICAgICAgIHBzYV9rZXlfbGlmZXRpbWVfaXNfZXh0ZXJuYWwoIHNsb3QtPmF0dHIubGlmZXRpbWUgKSApCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKICNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCiAgICAgaWYoIFBTQV9LRVlfVFlQRV9JU19SU0EoIHNsb3QtPmF0dHIudHlwZSApICkKICAgICB7CkBAIC0zODExLDcgKzM4MzIsNyBAQAogI2lmIGRlZmluZWQoTUJFRFRMU19FQ1BfQykKICAgICBpZiggUFNBX0tFWV9UWVBFX0lTX0VDQyggc2xvdC0+YXR0ci50eXBlICkgKQogICAgIHsKLSNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0VDRFNBKSB8fCBkZWZpbmVkKE1CRURUTFNfUFNBX0JVSUxUSU5fQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EpCiAgICAgICAgIGlmKCBQU0FfQUxHX0lTX0VDRFNBKCBhbGcgKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgKmVjcCA9IE5VTEw7CkBAIC0zODI5LDcgKzM4NTAsNyBAQAogICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCi0jZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpICovCisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19FQ0RTQSkgfHwgZGVmaW5lZChNQkVEVExTX1BTQV9CVUlMVElOX0FMR19ERVRFUk1JTklTVElDX0VDRFNBKSAqLwogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CiAgICAgICAgIH0KQEAgLTQwNDksMjcgKzQwNzAsNiBAQAogLyogU3ltbWV0cmljIGNyeXB0b2dyYXBoeSAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIEluaXRpYWxpemUgdGhlIGNpcGhlciBvcGVyYXRpb24gc3RydWN0dXJlLiBPbmNlIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4KLSAqIGNhbGxlZCwgcHNhX2NpcGhlcl9hYm9ydCBjYW4gcnVuIGFuZCB3aWxsIGRvIHRoZSByaWdodCB0aGluZy4gKi8KLXN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX2NpcGhlcl9pbml0KCBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZyApCi17Ci0gICAgaWYoICEgUFNBX0FMR19JU19DSVBIRVIoIGFsZyApICkKLSAgICB7Ci0gICAgICAgIG1lbXNldCggb3BlcmF0aW9uLCAwLCBzaXplb2YoICpvcGVyYXRpb24gKSApOwotICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7Ci0gICAgfQotCi0gICAgb3BlcmF0aW9uLT5hbGcgPSBhbGc7Ci0gICAgb3BlcmF0aW9uLT5rZXlfc2V0ID0gMDsKLSAgICBvcGVyYXRpb24tPml2X3NldCA9IDA7Ci0gICAgb3BlcmF0aW9uLT5pdl9yZXF1aXJlZCA9IDE7Ci0gICAgb3BlcmF0aW9uLT5pdl9zaXplID0gMDsKLSAgICBvcGVyYXRpb24tPmJsb2NrX3NpemUgPSAwOwotICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZvcGVyYXRpb24tPmN0eC5jaXBoZXIgKTsKLSAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7Ci19Ci0KIHN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX2NpcGhlcl9zZXR1cCggcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZywKQEAgLTQwODYsMTkgKzQwODYsNjMgQEAKIAogICAgIC8qIEEgY29udGV4dCBtdXN0IGJlIGZyZXNobHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0IGNhbiBiZSBzZXQgdXAuICovCiAgICAgaWYoIG9wZXJhdGlvbi0+YWxnICE9IDAgKQotICAgIHsKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQkFEX1NUQVRFICk7Ci0gICAgfQogCi0gICAgc3RhdHVzID0gcHNhX2NpcGhlcl9pbml0KCBvcGVyYXRpb24sIGFsZyApOwotICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQotICAgICAgICByZXR1cm4oIHN0YXR1cyApOworICAgIC8qIFRoZSByZXF1ZXN0ZWQgYWxnb3JpdGhtIG11c3QgYmUgb25lIHRoYXQgY2FuIGJlIHByb2Nlc3NlZCBieSBjaXBoZXIuICovCisgICAgaWYoICEgUFNBX0FMR19JU19DSVBIRVIoIGFsZyApICkKKyAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCApOwogCi0gICAgc3RhdHVzID0gcHNhX2dldF90cmFuc3BhcmVudF9rZXkoIGhhbmRsZSwgJnNsb3QsIHVzYWdlLCBhbGcpOworICAgIC8qIEZldGNoIGtleSBtYXRlcmlhbCBmcm9tIGtleSBzdG9yYWdlLiAqLworICAgIHN0YXR1cyA9IHBzYV9nZXRfa2V5X2Zyb21fc2xvdCggaGFuZGxlLCAmc2xvdCwgdXNhZ2UsIGFsZyApOwogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICBnb3RvIGV4aXQ7Ci0gICAga2V5X2JpdHMgPSBwc2FfZ2V0X2tleV9zbG90X2JpdHMoIHNsb3QgKTsKIAorICAgIC8qIEluaXRpYWxpemUgdGhlIG9wZXJhdGlvbiBzdHJ1Y3QgbWVtYmVycywgZXhjZXB0IGZvciBhbGcuIFRoZSBhbGcgbWVtYmVyCisgICAgICogaXMgdXNlZCB0byBpbmRpY2F0ZSB0byBwc2FfY2lwaGVyX2Fib3J0IHRoYXQgdGhlcmUgYXJlIHJlc291cmNlcyB0byBmcmVlLAorICAgICAqIHNvIHdlIG9ubHkgc2V0IGl0IGFmdGVyIHJlc291cmNlcyBoYXZlIGJlZW4gYWxsb2NhdGVkL2luaXRpYWxpemVkLiAqLworICAgIG9wZXJhdGlvbi0+a2V5X3NldCA9IDA7CisgICAgb3BlcmF0aW9uLT5pdl9zZXQgPSAwOworICAgIG9wZXJhdGlvbi0+bWJlZHRsc19pbl91c2UgPSAwOworICAgIG9wZXJhdGlvbi0+aXZfc2l6ZSA9IDA7CisgICAgb3BlcmF0aW9uLT5ibG9ja19zaXplID0gMDsKKyAgICBpZiggYWxnID09IFBTQV9BTEdfRUNCX05PX1BBRERJTkcgKQorICAgICAgICBvcGVyYXRpb24tPml2X3JlcXVpcmVkID0gMDsKKyAgICBlbHNlCisgICAgICAgIG9wZXJhdGlvbi0+aXZfcmVxdWlyZWQgPSAxOworCisgICAgLyogVHJ5IGRvaW5nIHRoZSBvcGVyYXRpb24gdGhyb3VnaCBhIGRyaXZlciBiZWZvcmUgdXNpbmcgc29mdHdhcmUgZmFsbGJhY2suICovCisgICAgaWYoIGNpcGhlcl9vcGVyYXRpb24gPT0gTUJFRFRMU19FTkNSWVBUICkKKyAgICAgICAgc3RhdHVzID0gcHNhX2RyaXZlcl93cmFwcGVyX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLT5jdHguZHJpdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnICk7CisgICAgZWxzZQorICAgICAgICBzdGF0dXMgPSBwc2FfZHJpdmVyX3dyYXBwZXJfY2lwaGVyX2RlY3J5cHRfc2V0dXAoICZvcGVyYXRpb24tPmN0eC5kcml2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGcgKTsKKworICAgIGlmKCBzdGF0dXMgPT0gUFNBX1NVQ0NFU1MgKQorICAgIHsKKyAgICAgICAgLyogT25jZSB0aGUgZHJpdmVyIGNvbnRleHQgaXMgaW5pdGlhbGlzZWQsIGl0IG5lZWRzIHRvIGJlIGZyZWVkIHVzaW5nCisgICAgICAgICogcHNhX2NpcGhlcl9hYm9ydC4gSW5kaWNhdGUgdGhpcyB0aHJvdWdoIHNldHRpbmcgYWxnLiAqLworICAgICAgICBvcGVyYXRpb24tPmFsZyA9IGFsZzsKKyAgICB9CisKKyAgICBpZiggc3RhdHVzICE9IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEIHx8CisgICAgICAgIHBzYV9rZXlfbGlmZXRpbWVfaXNfZXh0ZXJuYWwoIHNsb3QtPmF0dHIubGlmZXRpbWUgKSApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIC8qIFByb2NlZWQgd2l0aCBpbml0aWFsaXppbmcgYW4gbWJlZCBUTFMgY2lwaGVyIGNvbnRleHQgaWYgbm8gZHJpdmVyIGlzCisgICAgICogYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gYWxnb3JpdGhtICYga2V5LiAqLworICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZvcGVyYXRpb24tPmN0eC5jaXBoZXIgKTsKKworICAgIC8qIE9uY2UgdGhlIGNpcGhlciBjb250ZXh0IGlzIGluaXRpYWxpc2VkLCBpdCBuZWVkcyB0byBiZSBmcmVlZCB1c2luZworICAgICAqIHBzYV9jaXBoZXJfYWJvcnQuIEluZGljYXRlIHRoZXJlIGlzIHNvbWV0aGluZyB0byBiZSBmcmVlZCB0aHJvdWdoIHNldHRpbmcKKyAgICAgKiBhbGcsIGFuZCBpbmRpY2F0ZSB0aGUgb3BlcmF0aW9uIGlzIGJlaW5nIGRvbmUgdXNpbmcgbWJlZHRscyBjcnlwdG8gdGhyb3VnaAorICAgICAqIHNldHRpbmcgbWJlZHRsc19pbl91c2UuICovCisgICAgb3BlcmF0aW9uLT5hbGcgPSBhbGc7CisgICAgb3BlcmF0aW9uLT5tYmVkdGxzX2luX3VzZSA9IDE7CisKKyAgICBrZXlfYml0cyA9IHBzYV9nZXRfa2V5X3Nsb3RfYml0cyggc2xvdCApOwogICAgIGNpcGhlcl9pbmZvID0gbWJlZHRsc19jaXBoZXJfaW5mb19mcm9tX3BzYSggYWxnLCBzbG90LT5hdHRyLnR5cGUsIGtleV9iaXRzLCBOVUxMICk7CiAgICAgaWYoIGNpcGhlcl9pbmZvID09IE5VTEwgKQogICAgIHsKQEAgLTQxNTEsMTAgKzQxOTUsMTAgQEAKICAgICAgICAgZ290byBleGl0OwogI2VuZGlmIC8vTUJFRFRMU19DSVBIRVJfTU9ERV9XSVRIX1BBRERJTkcKIAotICAgIG9wZXJhdGlvbi0+a2V5X3NldCA9IDE7CiAgICAgb3BlcmF0aW9uLT5ibG9ja19zaXplID0gKCBQU0FfQUxHX0lTX1NUUkVBTV9DSVBIRVIoIGFsZyApID8gMSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQkxPQ0tfQ0lQSEVSX0JMT0NLX1NJWkUoIHNsb3QtPmF0dHIudHlwZSApICk7Ci0gICAgaWYoIGFsZyAmIFBTQV9BTEdfQ0lQSEVSX0ZST01fQkxPQ0tfRkxBRyApCisgICAgaWYoICggYWxnICYgUFNBX0FMR19DSVBIRVJfRlJPTV9CTE9DS19GTEFHICkgIT0gMCAmJgorICAgICAgICBhbGcgIT0gUFNBX0FMR19FQ0JfTk9fUEFERElORyApCiAgICAgewogICAgICAgICBvcGVyYXRpb24tPml2X3NpemUgPSBQU0FfQkxPQ0tfQ0lQSEVSX0JMT0NLX1NJWkUoIHNsb3QtPmF0dHIudHlwZSApOwogICAgIH0KQEAgLTQxNjQsMTAgKzQyMDgsMTcgQEAKICAgICAgICAgb3BlcmF0aW9uLT5pdl9zaXplID0gMTI7CiAjZW5kaWYKIAorICAgIHN0YXR1cyA9IFBTQV9TVUNDRVNTOworCiBleGl0OgotICAgIGlmKCBzdGF0dXMgPT0gMCApCisgICAgaWYoIHJldCAhPSAwICkKICAgICAgICAgc3RhdHVzID0gbWJlZHRsc190b19wc2FfZXJyb3IoIHJldCApOwotICAgIGlmKCBzdGF0dXMgIT0gMCApCisgICAgaWYoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApCisgICAgeworICAgICAgICAvKiBVcGRhdGUgb3BlcmF0aW9uIGZsYWdzIGZvciBib3RoIGRyaXZlciBhbmQgc29mdHdhcmUgaW1wbGVtZW50YXRpb25zICovCisgICAgICAgIG9wZXJhdGlvbi0+a2V5X3NldCA9IDE7CisgICAgfQorICAgIGVsc2UKICAgICAgICAgcHNhX2NpcGhlcl9hYm9ydCggb3BlcmF0aW9uICk7CiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KQEAgLTQxOTcsNiArNDI0OCwxNiBAQAogICAgIHsKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CiAgICAgfQorCisgICAgaWYoIG9wZXJhdGlvbi0+bWJlZHRsc19pbl91c2UgPT0gMCApCisgICAgeworICAgICAgICBzdGF0dXMgPSBwc2FfZHJpdmVyX3dyYXBwZXJfY2lwaGVyX2dlbmVyYXRlX2l2KCAmb3BlcmF0aW9uLT5jdHguZHJpdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZfbGVuZ3RoICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKICAgICBpZiggaXZfc2l6ZSA8IG9wZXJhdGlvbi0+aXZfc2l6ZSApCiAgICAgewogICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTDsKQEAgLTQyMTQsNyArNDI3NSw5IEBACiAgICAgc3RhdHVzID0gcHNhX2NpcGhlcl9zZXRfaXYoIG9wZXJhdGlvbiwgaXYsICppdl9sZW5ndGggKTsKIAogZXhpdDoKLSAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICBpZiggc3RhdHVzID09IFBTQV9TVUNDRVNTICkKKyAgICAgICAgb3BlcmF0aW9uLT5pdl9zZXQgPSAxOworICAgIGVsc2UKICAgICAgICAgcHNhX2NpcGhlcl9hYm9ydCggb3BlcmF0aW9uICk7CiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KQEAgLTQyMjksNiArNDI5MiwxNSBAQAogICAgIHsKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CiAgICAgfQorCisgICAgaWYoIG9wZXJhdGlvbi0+bWJlZHRsc19pbl91c2UgPT0gMCApCisgICAgeworICAgICAgICBzdGF0dXMgPSBwc2FfZHJpdmVyX3dyYXBwZXJfY2lwaGVyX3NldF9pdiggJm9wZXJhdGlvbi0+Y3R4LmRyaXZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZfbGVuZ3RoICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKICAgICBpZiggaXZfbGVuZ3RoICE9IG9wZXJhdGlvbi0+aXZfc2l6ZSApCiAgICAgewogICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVDsKQEAgLTQyNDQsNiArNDMxNiw5NCBAQAogICAgIHJldHVybiggc3RhdHVzICk7CiB9CiAKKy8qIFByb2Nlc3MgaW5wdXQgZm9yIHdoaWNoIHRoZSBhbGdvcml0aG0gaXMgc2V0IHRvIEVDQiBtb2RlLiBUaGlzIHJlcXVpcmVzCisgKiBtYW51YWwgcHJvY2Vzc2luZywgc2luY2UgdGhlIFBTQSBBUEkgaXMgZGVmaW5lZCBhcyBiZWluZyBhYmxlIHRvIHByb2Nlc3MKKyAqIGFyYml0cmFyeS1sZW5ndGggY2FsbHMgdG8gcHNhX2NpcGhlcl91cGRhdGUoKSB3aXRoIEVDQiBtb2RlLCBidXQgdGhlCisgKiB1bmRlcmx5aW5nIG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSBvbmx5IHRha2VzIGZ1bGwgYmxvY2tzLiAqLworc3RhdGljIHBzYV9zdGF0dXNfdCBwc2FfY2lwaGVyX3VwZGF0ZV9lY2JfaW50ZXJuYWwoCisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90ICpjdHgsCisgICAgY29uc3QgdWludDhfdCAqaW5wdXQsCisgICAgc2l6ZV90IGlucHV0X2xlbmd0aCwKKyAgICB1aW50OF90ICpvdXRwdXQsCisgICAgc2l6ZV90IG91dHB1dF9zaXplLAorICAgIHNpemVfdCAqb3V0cHV0X2xlbmd0aCApCit7CisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOworICAgIHNpemVfdCBibG9ja19zaXplID0gY3R4LT5jaXBoZXJfaW5mby0+YmxvY2tfc2l6ZTsKKyAgICBzaXplX3QgaW50ZXJuYWxfb3V0cHV0X2xlbmd0aCA9IDA7CisgICAgKm91dHB1dF9sZW5ndGggPSAwOworCisgICAgaWYoIGlucHV0X2xlbmd0aCA9PSAwICkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IFBTQV9TVUNDRVNTOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYoIGN0eC0+dW5wcm9jZXNzZWRfbGVuID4gMCApCisgICAgeworICAgICAgICAvKiBGaWxsIHVwIHRvIGJsb2NrIHNpemUsIGFuZCBydW4gdGhlIGJsb2NrIGlmIHRoZXJlJ3MgYSBmdWxsIG9uZS4gKi8KKyAgICAgICAgc2l6ZV90IGJ5dGVzX3RvX2NvcHkgPSBibG9ja19zaXplIC0gY3R4LT51bnByb2Nlc3NlZF9sZW47CisKKyAgICAgICAgaWYoIGlucHV0X2xlbmd0aCA8IGJ5dGVzX3RvX2NvcHkgKQorICAgICAgICAgICAgYnl0ZXNfdG9fY29weSA9IGlucHV0X2xlbmd0aDsKKworICAgICAgICBtZW1jcHkoICYoIGN0eC0+dW5wcm9jZXNzZWRfZGF0YVtjdHgtPnVucHJvY2Vzc2VkX2xlbl0gKSwKKyAgICAgICAgICAgICAgICBpbnB1dCwgYnl0ZXNfdG9fY29weSApOworICAgICAgICBpbnB1dF9sZW5ndGggLT0gYnl0ZXNfdG9fY29weTsKKyAgICAgICAgaW5wdXQgKz0gYnl0ZXNfdG9fY29weTsKKyAgICAgICAgY3R4LT51bnByb2Nlc3NlZF9sZW4gKz0gYnl0ZXNfdG9fY29weTsKKworICAgICAgICBpZiggY3R4LT51bnByb2Nlc3NlZF9sZW4gPT0gYmxvY2tfc2l6ZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKAorICAgICAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51bnByb2Nlc3NlZF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgJmludGVybmFsX291dHB1dF9sZW5ndGggKSApOworCisgICAgICAgICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgICAgIG91dHB1dCArPSBpbnRlcm5hbF9vdXRwdXRfbGVuZ3RoOworICAgICAgICAgICAgb3V0cHV0X3NpemUgLT0gaW50ZXJuYWxfb3V0cHV0X2xlbmd0aDsKKyAgICAgICAgICAgICpvdXRwdXRfbGVuZ3RoICs9IGludGVybmFsX291dHB1dF9sZW5ndGg7CisgICAgICAgICAgICBjdHgtPnVucHJvY2Vzc2VkX2xlbiA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSggaW5wdXRfbGVuZ3RoID49IGJsb2NrX3NpemUgKQorICAgIHsKKyAgICAgICAgLyogUnVuIGFsbCBmdWxsIGJsb2NrcyB3ZSBoYXZlLCBvbmUgYnkgb25lICovCisgICAgICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKAorICAgICAgICAgICAgbWJlZHRsc19jaXBoZXJfdXBkYXRlKCBjdHgsIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZpbnRlcm5hbF9vdXRwdXRfbGVuZ3RoICkgKTsKKworICAgICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBpbnB1dF9sZW5ndGggLT0gYmxvY2tfc2l6ZTsKKyAgICAgICAgaW5wdXQgKz0gYmxvY2tfc2l6ZTsKKworICAgICAgICBvdXRwdXQgKz0gaW50ZXJuYWxfb3V0cHV0X2xlbmd0aDsKKyAgICAgICAgb3V0cHV0X3NpemUgLT0gaW50ZXJuYWxfb3V0cHV0X2xlbmd0aDsKKyAgICAgICAgKm91dHB1dF9sZW5ndGggKz0gaW50ZXJuYWxfb3V0cHV0X2xlbmd0aDsKKyAgICB9CisKKyAgICBpZiggaW5wdXRfbGVuZ3RoID4gMCApCisgICAgeworICAgICAgICAvKiBTYXZlIHVucHJvY2Vzc2VkIGJ5dGVzIGZvciBsYXRlciBwcm9jZXNzaW5nICovCisgICAgICAgIG1lbWNweSggJiggY3R4LT51bnByb2Nlc3NlZF9kYXRhW2N0eC0+dW5wcm9jZXNzZWRfbGVuXSApLAorICAgICAgICAgICAgICAgIGlucHV0LCBpbnB1dF9sZW5ndGggKTsKKyAgICAgICAgY3R4LT51bnByb2Nlc3NlZF9sZW4gKz0gaW5wdXRfbGVuZ3RoOworICAgIH0KKworICAgIHN0YXR1cyA9IFBTQV9TVUNDRVNTOworCitleGl0OgorICAgIHJldHVybiggc3RhdHVzICk7Cit9CisKIHBzYV9zdGF0dXNfdCBwc2FfY2lwaGVyX3VwZGF0ZSggcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0X2xlbmd0aCwKQEAgLTQyNTEsMTQgKzQ0MTEsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG91dHB1dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm91dHB1dF9sZW5ndGggKQogewotICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7Ci0gICAgaW50IHJldCA9IE1CRURUTFNfRVJSX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQ7CisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOwogICAgIHNpemVfdCBleHBlY3RlZF9vdXRwdXRfc2l6ZTsKLQogICAgIGlmKCBvcGVyYXRpb24tPmFsZyA9PSAwICkKICAgICB7CiAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JBRF9TVEFURSApOwogICAgIH0KKyAgICBpZiggb3BlcmF0aW9uLT5pdl9yZXF1aXJlZCAmJiAhIG9wZXJhdGlvbi0+aXZfc2V0ICkKKyAgICB7CisgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JBRF9TVEFURSApOworICAgIH0KKworICAgIGlmKCBvcGVyYXRpb24tPm1iZWR0bHNfaW5fdXNlID09IDAgKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gcHNhX2RyaXZlcl93cmFwcGVyX2NpcGhlcl91cGRhdGUoICZvcGVyYXRpb24tPmN0eC5kcml2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2xlbmd0aCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQogCiAgICAgaWYoICEgUFNBX0FMR19JU19TVFJFQU1fQ0lQSEVSKCBvcGVyYXRpb24tPmFsZyApICkKICAgICB7CkBAIC00MjgxLDkgKzQ0NTQsMjQgQEAKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAotICAgIHJldCA9IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJm9wZXJhdGlvbi0+Y3R4LmNpcGhlciwgaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9sZW5ndGgsIG91dHB1dCwgb3V0cHV0X2xlbmd0aCApOwotICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKCByZXQgKTsKKyAgICBpZiggb3BlcmF0aW9uLT5hbGcgPT0gUFNBX0FMR19FQ0JfTk9fUEFERElORyApCisgICAgeworICAgICAgICAvKiBtYmVkdGxzX2NpcGhlcl91cGRhdGUgaGFzIGFuIEFQSSBpbmNvbnNpc3RlbmN5OiBpdCB3aWxsIG9ubHkKKyAgICAgICAgKiBwcm9jZXNzIGEgc2luZ2xlIGJsb2NrIGF0IGEgdGltZSBpbiBFQ0IgbW9kZS4gQWJzdHJhY3QgYXdheSB0aGF0CisgICAgICAgICogaW5jb25zaXN0ZW5jeSBoZXJlIHRvIG1hdGNoIHRoZSBQU0EgQVBJIGJlaGF2aW91ci4gKi8KKyAgICAgICAgc3RhdHVzID0gcHNhX2NpcGhlcl91cGRhdGVfZWNiX2ludGVybmFsKCAmb3BlcmF0aW9uLT5jdHguY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2xlbmd0aCApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdGF0dXMgPSBtYmVkdGxzX3RvX3BzYV9lcnJvcigKKyAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJm9wZXJhdGlvbi0+Y3R4LmNpcGhlciwgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2xlbmd0aCwgb3V0cHV0LCBvdXRwdXRfbGVuZ3RoICkgKTsKKyAgICB9CiBleGl0OgogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQogICAgICAgICBwc2FfY2lwaGVyX2Fib3J0KCBvcGVyYXRpb24gKTsKQEAgLTQyOTYsMTAgKzQ0ODQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm91dHB1dF9sZW5ndGggKQogewogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfR0VORVJJQ19FUlJPUjsKLSAgICBpbnQgY2lwaGVyX3JldCA9IE1CRURUTFNfRVJSX0NJUEhFUl9GRUFUVVJFX1VOQVZBSUxBQkxFOwogICAgIHVpbnQ4X3QgdGVtcF9vdXRwdXRfYnVmZmVyW01CRURUTFNfTUFYX0JMT0NLX0xFTkdUSF07Ci0KLSAgICBpZiggISBvcGVyYXRpb24tPmtleV9zZXQgKQorICAgIGlmKCBvcGVyYXRpb24tPmFsZyA9PSAwICkKICAgICB7CiAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JBRF9TVEFURSApOwogICAgIH0KQEAgLTQzMDgsNTMgKzQ0OTQsNTkgQEAKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CiAgICAgfQogCi0gICAgaWYoIG9wZXJhdGlvbi0+Y3R4LmNpcGhlci5vcGVyYXRpb24gPT0gTUJFRFRMU19FTkNSWVBUICYmCi0gICAgICAgIG9wZXJhdGlvbi0+YWxnID09IFBTQV9BTEdfQ0JDX05PX1BBRERJTkcgJiYKLSAgICAgICAgb3BlcmF0aW9uLT5jdHguY2lwaGVyLnVucHJvY2Vzc2VkX2xlbiAhPSAwICkKKyAgICBpZiggb3BlcmF0aW9uLT5tYmVkdGxzX2luX3VzZSA9PSAwICkKICAgICB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVDsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHN0YXR1cyA9IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfZmluaXNoKCAmb3BlcmF0aW9uLT5jdHguZHJpdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfbGVuZ3RoICk7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKLSAgICBjaXBoZXJfcmV0ID0gbWJlZHRsc19jaXBoZXJfZmluaXNoKCAmb3BlcmF0aW9uLT5jdHguY2lwaGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfb3V0cHV0X2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfbGVuZ3RoICk7Ci0gICAgaWYoIGNpcGhlcl9yZXQgIT0gMCApCisgICAgaWYoIG9wZXJhdGlvbi0+Y3R4LmNpcGhlci51bnByb2Nlc3NlZF9sZW4gIT0gMCApCiAgICAgewotICAgICAgICBzdGF0dXMgPSBtYmVkdGxzX3RvX3BzYV9lcnJvciggY2lwaGVyX3JldCApOwotICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiggb3BlcmF0aW9uLT5hbGcgPT0gUFNBX0FMR19FQ0JfTk9fUEFERElORyB8fAorICAgICAgICAgICAgb3BlcmF0aW9uLT5hbGcgPT0gUFNBX0FMR19DQkNfTk9fUEFERElORyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CiAgICAgfQogCisgICAgc3RhdHVzID0gbWJlZHRsc190b19wc2FfZXJyb3IoCisgICAgICAgIG1iZWR0bHNfY2lwaGVyX2ZpbmlzaCggJm9wZXJhdGlvbi0+Y3R4LmNpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX291dHB1dF9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2xlbmd0aCApICk7CisgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgIGdvdG8gZXhpdDsKKwogICAgIGlmKCAqb3V0cHV0X2xlbmd0aCA9PSAwICkKICAgICAgICAgOyAvKiBOb3RoaW5nIHRvIGNvcHkuIE5vdGUgdGhhdCBvdXRwdXQgbWF5IGJlIE5VTEwgaW4gdGhpcyBjYXNlLiAqLwogICAgIGVsc2UgaWYoIG91dHB1dF9zaXplID49ICpvdXRwdXRfbGVuZ3RoICkKICAgICAgICAgbWVtY3B5KCBvdXRwdXQsIHRlbXBfb3V0cHV0X2J1ZmZlciwgKm91dHB1dF9sZW5ndGggKTsKICAgICBlbHNlCi0gICAgewogICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTDsKLSAgICAgICAgZ290byBlcnJvcjsKKworZXhpdDoKKyAgICBpZiggb3BlcmF0aW9uLT5tYmVkdGxzX2luX3VzZSA9PSAxICkKKyAgICAgICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKCB0ZW1wX291dHB1dF9idWZmZXIsIHNpemVvZiggdGVtcF9vdXRwdXRfYnVmZmVyICkgKTsKKworICAgIGlmKCBzdGF0dXMgPT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICByZXR1cm4oIHBzYV9jaXBoZXJfYWJvcnQoIG9wZXJhdGlvbiApICk7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKm91dHB1dF9sZW5ndGggPSAwOworICAgICAgICAodm9pZCkgcHNhX2NpcGhlcl9hYm9ydCggb3BlcmF0aW9uICk7CisKKyAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKICAgICB9Ci0KLSAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoIHRlbXBfb3V0cHV0X2J1ZmZlciwgc2l6ZW9mKCB0ZW1wX291dHB1dF9idWZmZXIgKSApOwotICAgIHN0YXR1cyA9IHBzYV9jaXBoZXJfYWJvcnQoIG9wZXJhdGlvbiApOwotCi0gICAgcmV0dXJuKCBzdGF0dXMgKTsKLQotZXJyb3I6Ci0KLSAgICAqb3V0cHV0X2xlbmd0aCA9IDA7Ci0KLSAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoIHRlbXBfb3V0cHV0X2J1ZmZlciwgc2l6ZW9mKCB0ZW1wX291dHB1dF9idWZmZXIgKSApOwotICAgICh2b2lkKSBwc2FfY2lwaGVyX2Fib3J0KCBvcGVyYXRpb24gKTsKLQotICAgIHJldHVybiggc3RhdHVzICk7CiB9CiAKIHBzYV9zdGF0dXNfdCBwc2FfY2lwaGVyX2Fib3J0KCBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICpvcGVyYXRpb24gKQogewogICAgIGlmKCBvcGVyYXRpb24tPmFsZyA9PSAwICkKICAgICB7Ci0gICAgICAgIC8qIFRoZSBvYmplY3QgaGFzIChhcHBhcmVudGx5KSBiZWVuIGluaXRpYWxpemVkIGJ1dCBpdCBpcyBub3QKKyAgICAgICAgLyogVGhlIG9iamVjdCBoYXMgKGFwcGFyZW50bHkpIGJlZW4gaW5pdGlhbGl6ZWQgYnV0IGl0IGlzIG5vdCAoeWV0KQogICAgICAgICAgKiBpbiB1c2UuIEl0J3Mgb2sgdG8gY2FsbCBhYm9ydCBvbiBzdWNoIGFuIG9iamVjdCwgYW5kIHRoZXJlJ3MKICAgICAgICAgICogbm90aGluZyB0byBkby4gKi8KICAgICAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOwpAQCAtNDM2NSwxMSArNDU1NywxNSBAQAogICAgIGlmKCAhIFBTQV9BTEdfSVNfQ0lQSEVSKCBvcGVyYXRpb24tPmFsZyApICkKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CiAKLSAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmb3BlcmF0aW9uLT5jdHguY2lwaGVyICk7CisgICAgaWYoIG9wZXJhdGlvbi0+bWJlZHRsc19pbl91c2UgPT0gMCApCisgICAgICAgIHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfYWJvcnQoICZvcGVyYXRpb24tPmN0eC5kcml2ZXIgKTsKKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZvcGVyYXRpb24tPmN0eC5jaXBoZXIgKTsKIAogICAgIG9wZXJhdGlvbi0+YWxnID0gMDsKICAgICBvcGVyYXRpb24tPmtleV9zZXQgPSAwOwogICAgIG9wZXJhdGlvbi0+aXZfc2V0ID0gMDsKKyAgICBvcGVyYXRpb24tPm1iZWR0bHNfaW5fdXNlID0gMDsKICAgICBvcGVyYXRpb24tPml2X3NpemUgPSAwOwogICAgIG9wZXJhdGlvbi0+YmxvY2tfc2l6ZSA9IDA7CiAgICAgb3BlcmF0aW9uLT5pdl9yZXF1aXJlZCA9IDA7CkBAIC01NzA0LDcgKzU5MDAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0tFWV9UWVBFX0RFUklWRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9zZWNyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfc2VjcmV0X2xlbmd0aCApOwotCiBleGl0OgogICAgIG1iZWR0bHNfcGxhdGZvcm1femVyb2l6ZSggc2hhcmVkX3NlY3JldCwgc2hhcmVkX3NlY3JldF9sZW5ndGggKTsKICAgICByZXR1cm4oIHN0YXR1cyApOwpAQCAtNTcyOSw2ICs1OTI0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJfa2V5LCBwZWVyX2tleV9sZW5ndGggKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKICAgICAgICAgcHNhX2tleV9kZXJpdmF0aW9uX2Fib3J0KCBvcGVyYXRpb24gKTsKKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBJZiBhIHByaXZhdGUga2V5IGhhcyBiZWVuIGFkZGVkIGFzIFNFQ1JFVCwgd2UgYWxsb3cgdGhlIGRlcml2ZWQKKyAgICAgICAgICoga2V5IG1hdGVyaWFsIHRvIGJlIHVzZWQgYXMgYSBrZXkgaW4gUFNBIENyeXB0by4gKi8KKyAgICAgICAgaWYoIHN0ZXAgPT0gUFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NFQ1JFVCApCisgICAgICAgICAgICBvcGVyYXRpb24tPmNhbl9vdXRwdXRfa2V5ID0gMTsKKyAgICB9CiAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIH0KIApAQCAtNTk0Niw4ICs2MTQ4LDYgQEAKICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKICAgICAgICAgaWYoIGdycF9pZCA9PSBNQkVEVExTX0VDUF9EUF9OT05FIHx8IGN1cnZlX2luZm8gPT0gTlVMTCApCiAgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7Ci0gICAgICAgIGlmKCBjdXJ2ZV9pbmZvLT5iaXRfc2l6ZSAhPSBiaXRzICkKLSAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKICAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9pbml0KCAmZWNwICk7CiAgICAgICAgIHJldCA9IG1iZWR0bHNfZWNwX2dlbl9rZXkoIGdycF9pZCwgJmVjcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19jdHJfZHJiZ19yYW5kb20sCkBAIC02MDA0LDI5ICs2MjA0LDE1IEBACiAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCiAgICAgICAgIGdvdG8gZXhpdDsKIAotI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MpCi0gICAgaWYoIGRyaXZlciAhPSBOVUxMICkKLSAgICB7Ci0gICAgICAgIGNvbnN0IHBzYV9kcnZfc2VfdCAqZHJ2ID0gcHNhX2dldF9zZV9kcml2ZXJfbWV0aG9kcyggZHJpdmVyICk7Ci0gICAgICAgIHNpemVfdCBwdWJrZXlfbGVuZ3RoID0gMDsgLyogV2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUgeWV0ICovCi0gICAgICAgIGlmKCBkcnYtPmtleV9tYW5hZ2VtZW50ID09IE5VTEwgfHwKLSAgICAgICAgICAgIGRydi0+a2V5X21hbmFnZW1lbnQtPnBfZ2VuZXJhdGUgPT0gTlVMTCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEOwotICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9Ci0gICAgICAgIHN0YXR1cyA9IGRydi0+a2V5X21hbmFnZW1lbnQtPnBfZ2VuZXJhdGUoCi0gICAgICAgICAgICBwc2FfZ2V0X3NlX2RyaXZlcl9jb250ZXh0KCBkcml2ZXIgKSwKLSAgICAgICAgICAgIHNsb3QtPmRhdGEuc2Uuc2xvdF9udW1iZXIsIGF0dHJpYnV0ZXMsCi0gICAgICAgICAgICBOVUxMLCAwLCAmcHVia2V5X2xlbmd0aCApOwotICAgIH0KLSAgICBlbHNlCi0jZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MgKi8KLSAgICB7Ci0gICAgICAgIHN0YXR1cyA9IHBzYV9nZW5lcmF0ZV9rZXlfaW50ZXJuYWwoCi0gICAgICAgICAgICBzbG90LCBhdHRyaWJ1dGVzLT5jb3JlLmJpdHMsCi0gICAgICAgICAgICBhdHRyaWJ1dGVzLT5kb21haW5fcGFyYW1ldGVycywgYXR0cmlidXRlcy0+ZG9tYWluX3BhcmFtZXRlcnNfc2l6ZSApOwotICAgIH0KKyAgICBzdGF0dXMgPSBwc2FfZHJpdmVyX3dyYXBwZXJfZ2VuZXJhdGVfa2V5KCBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QgKTsKKyAgICBpZiggc3RhdHVzICE9IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEIHx8CisgICAgICAgIHBzYV9rZXlfbGlmZXRpbWVfaXNfZXh0ZXJuYWwoIGF0dHJpYnV0ZXMtPmNvcmUubGlmZXRpbWUgKSApCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIHN0YXR1cyA9IHBzYV9nZW5lcmF0ZV9rZXlfaW50ZXJuYWwoCisgICAgICAgIHNsb3QsIGF0dHJpYnV0ZXMtPmNvcmUuYml0cywKKyAgICAgICAgYXR0cmlidXRlcy0+ZG9tYWluX3BhcmFtZXRlcnMsIGF0dHJpYnV0ZXMtPmRvbWFpbl9wYXJhbWV0ZXJzX3NpemUgKTsKIAogZXhpdDoKICAgICBpZiggc3RhdHVzID09IFBTQV9TVUNDRVNTICkKZGlmZiAtLWdpdCBhL2xpYnJhcnkvcHNhX2NyeXB0b19jb3JlLmggYi9saWJyYXJ5L3BzYV9jcnlwdG9fY29yZS5oCmluZGV4IDlhNjFiYWIuLjhkMWYxYmIgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvcHNhX2NyeXB0b19jb3JlLmgKKysrIGIvbGlicmFyeS9wc2FfY3J5cHRvX2NvcmUuaApAQCAtMTM3LDI4ICsxMzcsMzYgQEAKICAqLwogcHNhX3N0YXR1c190IHBzYV93aXBlX2tleV9zbG90KCBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCApOwogCi0vKiogSW1wb3J0IGtleSBkYXRhIGludG8gYSBzbG90LgorLyoqIENvcHkga2V5IGRhdGEgKGluIGV4cG9ydCBmb3JtYXQpIGludG8gYW4gZW1wdHkga2V5IHNsb3QuCiAgKgotICogYHNsb3QtPnR5cGVgIG11c3QgaGF2ZSBiZWVuIHNldCBwcmV2aW91c2x5LgotICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIHNsb3QgZG9lcyBub3QgY29udGFpbiBhbnkga2V5IG1hdGVyaWFsIHlldC4KLSAqIE9uIGZhaWx1cmUsIHRoZSBzbG90IGNvbnRlbnQgaXMgdW5jaGFuZ2VkLgorICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIHNsb3QgZG9lcyBub3QgY29udGFpbgorICogYW55IGtleSBtYXRlcmlhbCB5ZXQuIE9uIGZhaWx1cmUsIHRoZSBzbG90IGNvbnRlbnQgaXMgdW5jaGFuZ2VkLgogICoKLSAqIFBlcnNpc3RlbnQgc3RvcmFnZSBpcyBub3QgYWZmZWN0ZWQuCisgKiBccGFyYW1baW4sb3V0XSBzbG90ICAgICAgICAgIEtleSBzbG90IHRvIGNvcHkgdGhlIGtleSBpbnRvLgorICogXHBhcmFtW2luXSBkYXRhICAgICAgICAgICAgICBCdWZmZXIgY29udGFpbmluZyB0aGUga2V5IG1hdGVyaWFsLgorICogXHBhcmFtIGRhdGFfbGVuZ3RoICAgICAgICAgICBTaXplIG9mIHRoZSBrZXkgYnVmZmVyLgogICoKLSAqIFxwYXJhbVtpbixvdXRdIHNsb3QgIFRoZSBrZXkgc2xvdCB0byBpbXBvcnQgZGF0YSBpbnRvLgotICogICAgICAgICAgICAgICAgICAgICAgSXRzIGB0eXBlYCBmaWVsZCBtdXN0IGhhdmUgcHJldmlvdXNseSBiZWVuIHNldCB0bwotICogICAgICAgICAgICAgICAgICAgICAgdGhlIGRlc2lyZWQga2V5IHR5cGUuCi0gKiAgICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IG5vdCBjb250YWluIGFueSBrZXkgbWF0ZXJpYWwgeWV0LgotICogXHBhcmFtW2luXSBkYXRhICAgICAgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIGtleSBtYXRlcmlhbCB0byBwYXJzZSBhbmQgaW1wb3J0LgotICogXHBhcmFtIGRhdGFfbGVuZ3RoICAgU2l6ZSBvZiBccCBkYXRhIGluIGJ5dGVzLgotICoKLSAqIFxyZXR2YWwgUFNBX1NVQ0NFU1MKLSAqIFxyZXR2YWwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKLSAqIFxyZXR2YWwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKLSAqIFxyZXR2YWwgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlkKKyAqIFxyZXR2YWwgI1BTQV9TVUNDRVNTCisgKiAgICAgICAgIFRoZSBrZXkgaGFzIGJlZW4gY29waWVkIHN1Y2Nlc3NmdWxseS4KKyAqIFxyZXR2YWwgI1BTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZCisgKiAgICAgICAgIE5vdCBlbm91Z2ggbWVtb3J5IHdhcyBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24gb2YgdGhlCisgKiAgICAgICAgIGNvcHkgYnVmZmVyLgorICogXHJldHZhbCAjUFNBX0VSUk9SX0FMUkVBRFlfRVhJU1RTCisgKiAgICAgICAgIFRoZXJlIHdhcyBvdGhlciBrZXkgbWF0ZXJpYWwgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBzbG90LgogICovCi1wc2Ffc3RhdHVzX3QgcHNhX2ltcG9ydF9rZXlfaW50b19zbG90KCBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9sZW5ndGggKTsKK3BzYV9zdGF0dXNfdCBwc2FfY29weV9rZXlfbWF0ZXJpYWxfaW50b19zbG90KCBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhX2xlbmd0aCApOworCisvKiogQ29udmVydCBhbiBtYmVkIFRMUyBlcnJvciBjb2RlIHRvIGEgUFNBIGVycm9yIGNvZGUKKyAqCisgKiBcbm90ZSBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHNvbGVseSBmb3IgdGhlIGNvbnZlbmllbmNlIG9mCisgKiAgICAgICBNYmVkIFRMUyBhbmQgbWF5IGJlIHJlbW92ZWQgYXQgYW55IHRpbWUgd2l0aG91dCBub3RpY2UuCisgKgorICogXHBhcmFtIHJldCAgICAgICAgICAgQW4gbWJlZCBUTFMtdGhyb3duIGVycm9yIGNvZGUKKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICBUaGUgY29ycmVzcG9uZGluZyBQU0EgZXJyb3IgY29kZQorICovCitwc2Ffc3RhdHVzX3QgbWJlZHRsc190b19wc2FfZXJyb3IoIGludCByZXQgKTsKIAogI2VuZGlmIC8qIFBTQV9DUllQVE9fQ09SRV9IICovCmRpZmYgLS1naXQgYS9saWJyYXJ5L3BzYV9jcnlwdG9fZHJpdmVyX3dyYXBwZXJzLmMgYi9saWJyYXJ5L3BzYV9jcnlwdG9fZHJpdmVyX3dyYXBwZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA0MGIzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnJhcnkvcHNhX2NyeXB0b19kcml2ZXJfd3JhcHBlcnMuYwpAQCAtMCwwICsxLDk0MCBAQAorLyoKKyAqICBGdW5jdGlvbnMgdG8gZGVsZWdhdGUgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIHRvIGFuIGF2YWlsYWJsZQorICogIGFuZCBhcHByb3ByaWF0ZSBhY2NlbGVyYXRvci4KKyAqICBXYXJuaW5nOiBUaGlzIGZpbGUgd2lsbCBiZSBhdXRvLWdlbmVyYXRlZCBpbiB0aGUgZnV0dXJlLgorICovCisvKiAgQ29weXJpZ2h0IFRoZSBNYmVkIFRMUyBDb250cmlidXRvcnMKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgInBzYV9jcnlwdG9fY29yZS5oIgorI2luY2x1ZGUgInBzYV9jcnlwdG9fZHJpdmVyX3dyYXBwZXJzLmgiCisjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUykKKworLyogSW5jbHVkZSB0ZXN0IGRyaXZlciBkZWZpbml0aW9uIHdoZW4gcnVubmluZyB0ZXN0cyAqLworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyNpZm5kZWYgUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVAorI2RlZmluZSBQU0FfQ1JZUFRPX0RSSVZFUl9QUkVTRU5UCisjZW5kaWYKKyNpZm5kZWYgUFNBX0NSWVBUT19BQ0NFTEVSQVRPUl9EUklWRVJfUFJFU0VOVAorI2RlZmluZSBQU0FfQ1JZUFRPX0FDQ0VMRVJBVE9SX0RSSVZFUl9QUkVTRU5UCisjZW5kaWYKKyNpbmNsdWRlICJ0ZXN0L2RyaXZlcnMvdGVzdF9kcml2ZXIuaCIKKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCisKKy8qIFJlcGVhdCBhYm92ZSBibG9jayBmb3IgZWFjaCBKU09OLWRlY2xhcmVkIGRyaXZlciBkdXJpbmcgYXV0b2dlbmVyYXRpb24gKi8KKworLyogQXV0by1nZW5lcmF0ZWQgdmFsdWVzIGRlcGVuZGluZyBvbiB3aGljaCBkcml2ZXJzIGFyZSByZWdpc3RlcmVkLiBJRCAwIGlzCisgKiByZXNlcnZlZCBmb3IgdW5hbGxvY2F0ZWQgb3BlcmF0aW9ucy4gKi8KKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisjZGVmaW5lIFBTQV9DUllQVE9fVFJBTlNQQVJFTlRfVEVTVF9EUklWRVJfSUQgKDEpCisjZGVmaW5lIFBTQV9DUllQVE9fT1BBUVVFX1RFU1RfRFJJVkVSX0lEICgyKQorI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUyAqLworCisvKiBTdXBwb3J0IHRoZSAnb2xkJyBTRSBpbnRlcmZhY2Ugd2hlbiBhc2tlZCB0byAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MpCisvKiBQU0FfQ1JZUFRPX0RSSVZFUl9QUkVTRU5UIGlzIGRlZmluZWQgd2hlbiBlaXRoZXIgYSBuZXctc3R5bGUgb3Igb2xkLXN0eWxlCisgKiBTRSBkcml2ZXIgaXMgcHJlc2VudCwgdG8gYXZvaWQgdW51c2VkIGFyZ3VtZW50IGVycm9ycyBhdCBjb21waWxlIHRpbWUuICovCisjaWZuZGVmIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQKKyNkZWZpbmUgUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVAorI2VuZGlmCisjaW5jbHVkZSAicHNhX2NyeXB0b19zZS5oIgorI2VuZGlmCisKKy8qIFN0YXJ0IGRlbGVnYXRpb24gZnVuY3Rpb25zICovCitwc2Ffc3RhdHVzX3QgcHNhX2RyaXZlcl93cmFwcGVyX3NpZ25faGFzaCggcHNhX2tleV9zbG90X3QgKnNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBoYXNoX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpzaWduYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpZ25hdHVyZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqc2lnbmF0dXJlX2xlbmd0aCApCit7CisjaWYgZGVmaW5lZChQU0FfQ1JZUFRPX0RSSVZFUl9QUkVTRU5UKQorICAgIC8qIFRyeSBkeW5hbWljYWxseS1yZWdpc3RlcmVkIFNFIGludGVyZmFjZSBmaXJzdCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MpCisgICAgY29uc3QgcHNhX2Rydl9zZV90ICpkcnY7CisgICAgcHNhX2Rydl9zZV9jb250ZXh0X3QgKmRydl9jb250ZXh0OworCisgICAgaWYoIHBzYV9nZXRfc2VfZHJpdmVyKCBzbG90LT5hdHRyLmxpZmV0aW1lLCAmZHJ2LCAmZHJ2X2NvbnRleHQgKSApCisgICAgeworICAgICAgICBpZiggZHJ2LT5hc3ltbWV0cmljID09IE5VTEwgfHwKKyAgICAgICAgICAgIGRydi0+YXN5bW1ldHJpYy0+cF9zaWduID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBLZXkgaXMgZGVmaW5lZCBpbiBTRSwgYnV0IHdlIGhhdmUgbm8gd2F5IHRvIGV4ZXJjaXNlIGl0ICovCisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKCBkcnYtPmFzeW1tZXRyaWMtPnBfc2lnbiggZHJ2X2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEuc2Uuc2xvdF9udW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgaGFzaF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgc2lnbmF0dXJlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZV9sZW5ndGggKSApOworICAgIH0KKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX1NFX0MgKi8KKworICAgIC8qIFRoZW4gdHJ5IGFjY2VsZXJhdG9yIEFQSSAqLworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19BQ0NFTEVSQVRPUl9EUklWRVJfUFJFU0VOVCkKKyAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQ7CisgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oc2xvdC0+YXR0ci5saWZldGltZSk7CisgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IHsKKyAgICAgIC5jb3JlID0gc2xvdC0+YXR0cgorICAgIH07CisKKyAgICBzd2l0Y2goIGxvY2F0aW9uICkKKyAgICB7CisgICAgICAgIGNhc2UgUFNBX0tFWV9MT0NBVElPTl9MT0NBTF9TVE9SQUdFOgorICAgICAgICAgICAgLyogS2V5IGlzIHN0b3JlZCBpbiB0aGUgc2xvdCBpbiBleHBvcnQgcmVwcmVzZW50YXRpb24sIHNvCisgICAgICAgICAgICAgKiBjeWNsZSB0aHJvdWdoIGFsbCBrbm93biB0cmFuc3BhcmVudCBhY2NlbGVyYXRvcnMgKi8KKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisgICAgICAgICAgICBzdGF0dXMgPSB0ZXN0X3RyYW5zcGFyZW50X3NpZ25hdHVyZV9zaWduX2hhc2goICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5kYXRhLmtleS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5kYXRhLmtleS5ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlX2xlbmd0aCApOworICAgICAgICAgICAgLyogRGVjbGFyZWQgd2l0aCBmYWxsYmFjayA9PSB0cnVlICovCisgICAgICAgICAgICBpZiggc3RhdHVzICE9IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHN0YXR1cyApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyAgICAgICAgICAgIC8qIEZlbGwgdGhyb3VnaCwgbWVhbmluZyBubyBhY2NlbGVyYXRvciBzdXBwb3J0cyB0aGlzIG9wZXJhdGlvbiAqLworICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworICAgICAgICAvKiBBZGQgY2FzZXMgZm9yIG9wYXF1ZSBkcml2ZXIgaGVyZSAqLworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyAgICAgICAgY2FzZSBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSX0xJRkVUSU1FOgorICAgICAgICAgICAgcmV0dXJuKCB0ZXN0X29wYXF1ZV9zaWduYXR1cmVfc2lnbl9oYXNoKCAmYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZV9sZW5ndGggKSApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIEtleSBpcyBkZWNsYXJlZCB3aXRoIGEgbGlmZXRpbWUgbm90IGtub3duIHRvIHVzICovCisgICAgICAgICAgICByZXR1cm4oIHN0YXR1cyApOworICAgIH0KKyNlbHNlIC8qIFBTQV9DUllQVE9fQUNDRUxFUkFUT1JfRFJJVkVSX1BSRVNFTlQgKi8KKyAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisjZW5kaWYgLyogUFNBX0NSWVBUT19BQ0NFTEVSQVRPUl9EUklWRVJfUFJFU0VOVCAqLworI2Vsc2UgLyogUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVCAqLworICAgICh2b2lkKXNsb3Q7CisgICAgKHZvaWQpYWxnOworICAgICh2b2lkKWhhc2g7CisgICAgKHZvaWQpaGFzaF9sZW5ndGg7CisgICAgKHZvaWQpc2lnbmF0dXJlOworICAgICh2b2lkKXNpZ25hdHVyZV9zaXplOworICAgICh2b2lkKXNpZ25hdHVyZV9sZW5ndGg7CisKKyAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVCAqLworfQorCitwc2Ffc3RhdHVzX3QgcHNhX2RyaXZlcl93cmFwcGVyX3ZlcmlmeV9oYXNoKCBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9hbGdvcml0aG1fdCBhbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGhhc2hfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc2lnbmF0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpZ25hdHVyZV9sZW5ndGggKQoreworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVCkKKyAgICAvKiBUcnkgZHluYW1pY2FsbHktcmVnaXN0ZXJlZCBTRSBpbnRlcmZhY2UgZmlyc3QgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19TRV9DKQorICAgIGNvbnN0IHBzYV9kcnZfc2VfdCAqZHJ2OworICAgIHBzYV9kcnZfc2VfY29udGV4dF90ICpkcnZfY29udGV4dDsKKworICAgIGlmKCBwc2FfZ2V0X3NlX2RyaXZlciggc2xvdC0+YXR0ci5saWZldGltZSwgJmRydiwgJmRydl9jb250ZXh0ICkgKQorICAgIHsKKyAgICAgICAgaWYoIGRydi0+YXN5bW1ldHJpYyA9PSBOVUxMIHx8CisgICAgICAgICAgICBkcnYtPmFzeW1tZXRyaWMtPnBfdmVyaWZ5ID09IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBLZXkgaXMgZGVmaW5lZCBpbiBTRSwgYnV0IHdlIGhhdmUgbm8gd2F5IHRvIGV4ZXJjaXNlIGl0ICovCisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKCBkcnYtPmFzeW1tZXRyaWMtPnBfdmVyaWZ5KCBkcnZfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5kYXRhLnNlLnNsb3RfbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLCBoYXNoX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIHNpZ25hdHVyZV9sZW5ndGggKSApOworICAgIH0KKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX1NFX0MgKi8KKworICAgIC8qIFRoZW4gdHJ5IGFjY2VsZXJhdG9yIEFQSSAqLworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19BQ0NFTEVSQVRPUl9EUklWRVJfUFJFU0VOVCkKKyAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQ7CisgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oc2xvdC0+YXR0ci5saWZldGltZSk7CisgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IHsKKyAgICAgIC5jb3JlID0gc2xvdC0+YXR0cgorICAgIH07CisKKyAgICBzd2l0Y2goIGxvY2F0aW9uICkKKyAgICB7CisgICAgICAgIGNhc2UgUFNBX0tFWV9MT0NBVElPTl9MT0NBTF9TVE9SQUdFOgorICAgICAgICAgICAgLyogS2V5IGlzIHN0b3JlZCBpbiB0aGUgc2xvdCBpbiBleHBvcnQgcmVwcmVzZW50YXRpb24sIHNvCisgICAgICAgICAgICAgKiBjeWNsZSB0aHJvdWdoIGFsbCBrbm93biB0cmFuc3BhcmVudCBhY2NlbGVyYXRvcnMgKi8KKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisgICAgICAgICAgICBzdGF0dXMgPSB0ZXN0X3RyYW5zcGFyZW50X3NpZ25hdHVyZV92ZXJpZnlfaGFzaCggJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5kYXRhLmtleS5ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlX2xlbmd0aCApOworICAgICAgICAgICAgLyogRGVjbGFyZWQgd2l0aCBmYWxsYmFjayA9PSB0cnVlICovCisgICAgICAgICAgICBpZiggc3RhdHVzICE9IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHN0YXR1cyApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyAgICAgICAgICAgIC8qIEZlbGwgdGhyb3VnaCwgbWVhbmluZyBubyBhY2NlbGVyYXRvciBzdXBwb3J0cyB0aGlzIG9wZXJhdGlvbiAqLworICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworICAgICAgICAvKiBBZGQgY2FzZXMgZm9yIG9wYXF1ZSBkcml2ZXIgaGVyZSAqLworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyAgICAgICAgY2FzZSBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSX0xJRkVUSU1FOgorICAgICAgICAgICAgcmV0dXJuKCB0ZXN0X29wYXF1ZV9zaWduYXR1cmVfdmVyaWZ5X2hhc2goICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZV9sZW5ndGggKSApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIEtleSBpcyBkZWNsYXJlZCB3aXRoIGEgbGlmZXRpbWUgbm90IGtub3duIHRvIHVzICovCisgICAgICAgICAgICByZXR1cm4oIHN0YXR1cyApOworICAgIH0KKyNlbHNlIC8qIFBTQV9DUllQVE9fQUNDRUxFUkFUT1JfRFJJVkVSX1BSRVNFTlQgKi8KKyAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisjZW5kaWYgLyogUFNBX0NSWVBUT19BQ0NFTEVSQVRPUl9EUklWRVJfUFJFU0VOVCAqLworI2Vsc2UgLyogUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVCAqLworICAgICh2b2lkKXNsb3Q7CisgICAgKHZvaWQpYWxnOworICAgICh2b2lkKWhhc2g7CisgICAgKHZvaWQpaGFzaF9sZW5ndGg7CisgICAgKHZvaWQpc2lnbmF0dXJlOworICAgICh2b2lkKXNpZ25hdHVyZV9sZW5ndGg7CisKKyAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVCAqLworfQorCisjaWYgZGVmaW5lZChQU0FfQ1JZUFRPX0FDQ0VMRVJBVE9SX0RSSVZFUl9QUkVTRU5UKQorLyoqIENhbGN1bGF0ZSB0aGUgc2l6ZSB0byBhbGxvY2F0ZSBmb3IgYnVmZmVyaW5nIGEga2V5IHdpdGggZ2l2ZW4gYXR0cmlidXRlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgd2F5IHRvIGdldCB0aGUgZXhwZWN0ZWQgc2l6ZSBmb3Igc3RvcmluZyBhIGtleSB3aXRoCisgKiB0aGUgZ2l2ZW4gYXR0cmlidXRlcy4gVGhpcyB3aWxsIGJlIHRoZSBzaXplIG9mIHRoZSBleHBvcnQgcmVwcmVzZW50YXRpb24gZm9yCisgKiBjbGVhcnRleHQga2V5cywgYW5kIGEgZHJpdmVyLWRlZmluZWQgc2l6ZSBmb3Iga2V5cyBzdG9yZWQgYnkgb3BhcXVlIGRyaXZlcnMuCisgKgorICogXHBhcmFtW2luXSBhdHRyaWJ1dGVzICAgICAgICBUaGUga2V5IGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgb2YgdGhlIGtleSB0byBzdG9yZS4KKyAqIFxwYXJhbVtvdXRdIGV4cGVjdGVkX3NpemUgICAgT24gc3VjY2VzcywgYSBieXRlIHNpemUgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRlY2xhcmVkIGtleS4KKyAqCisgKiBccmV0dmFsICNQU0FfU1VDQ0VTUworICogXHJldHZhbCAjUFNBX0VSUk9SX05PVF9TVVBQT1JURUQKKyAqLworc3RhdGljIHBzYV9zdGF0dXNfdCBnZXRfZXhwZWN0ZWRfa2V5X3NpemUoIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZXhwZWN0ZWRfc2l6ZSApCit7CisgICAgc2l6ZV90IGJ1ZmZlcl9zaXplID0gMDsKKyAgICBwc2Ffa2V5X2xvY2F0aW9uX3QgbG9jYXRpb24gPSBQU0FfS0VZX0xJRkVUSU1FX0dFVF9MT0NBVElPTiggYXR0cmlidXRlcy0+Y29yZS5saWZldGltZSApOworICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0gYXR0cmlidXRlcy0+Y29yZS50eXBlOworICAgIHNpemVfdCBrZXlfYml0cyA9IGF0dHJpYnV0ZXMtPmNvcmUuYml0czsKKworICAgIHN3aXRjaCggbG9jYXRpb24gKQorICAgIHsKKyAgICAgICAgY2FzZSBQU0FfS0VZX0xPQ0FUSU9OX0xPQ0FMX1NUT1JBR0U6CisgICAgICAgICAgICBidWZmZXJfc2l6ZSA9IFBTQV9LRVlfRVhQT1JUX01BWF9TSVpFKCBrZXlfdHlwZSwga2V5X2JpdHMgKTsKKworICAgICAgICAgICAgaWYoIGJ1ZmZlcl9zaXplID09IDAgKQorICAgICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKworICAgICAgICAgICAgKmV4cGVjdGVkX3NpemUgPSBidWZmZXJfc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKKworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyAgICAgICAgY2FzZSBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSX0xJRkVUSU1FOgorI2lmZGVmIFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX1NJWkVfRlVOQ1RJT04KKyAgICAgICAgICAgICpleHBlY3RlZF9zaXplID0gdGVzdF9zaXplX2Z1bmN0aW9uKCBrZXlfdHlwZSwga2V5X2JpdHMgKTsKKyAgICAgICAgICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKKyNlbHNlIC8qIFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX1NJWkVfRlVOQ1RJT04gKi8KKyAgICAgICAgICAgIGlmKCBQU0FfS0VZX1RZUEVfSVNfS0VZX1BBSVIoIGtleV90eXBlICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBwdWJsaWNfa2V5X292ZXJoZWFkID0gKCAoIFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX1NUT1JFX1BVQkxJQ19LRVkgPT0gMSApID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfS0VZX0VYUE9SVF9NQVhfU0laRSgga2V5X3R5cGUsIGtleV9iaXRzICkgOiAwICk7CisgICAgICAgICAgICAgICAgKmV4cGVjdGVkX3NpemUgPSBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9CQVNFX1NJWkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfUFVCTElDX0tFWV9TSVpFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHB1YmxpY19rZXlfb3ZlcmhlYWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCBQU0FfS0VZX1RZUEVfSVNfUFVCTElDX0tFWSggYXR0cmlidXRlcy0+Y29yZS50eXBlICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpleHBlY3RlZF9zaXplID0gVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfQkFTRV9TSVpFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX1BVQkxJQ19LRVlfU0laRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCAhUFNBX0tFWV9UWVBFX0lTX0tFWV9QQUlSKCBrZXlfdHlwZSApICYmCisgICAgICAgICAgICAgICAgICAgICAgIVBTQV9LRVlfVFlQRV9JU19QVUJMSUNfS0VZICggYXR0cmlidXRlcy0+Y29yZS50eXBlICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpleHBlY3RlZF9zaXplID0gVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfQkFTRV9TSVpFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX1NZTU1FVFJJQ19GQUNUT1IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKCAoIGtleV9iaXRzICsgNyApIC8gOCApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKKyNlbmRpZiAvKiBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9TSVpFX0ZVTkNUSU9OICovCisjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisgICAgfQorfQorI2VuZGlmIC8qIFBTQV9DUllQVE9fQUNDRUxFUkFUT1JfRFJJVkVSX1BSRVNFTlQgKi8KKworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9nZW5lcmF0ZV9rZXkoIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9rZXlfc2xvdF90ICpzbG90ICkKK3sKKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQpCisgICAgLyogVHJ5IGR5bmFtaWNhbGx5LXJlZ2lzdGVyZWQgU0UgaW50ZXJmYWNlIGZpcnN0ICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fU0VfQykKKyAgICBjb25zdCBwc2FfZHJ2X3NlX3QgKmRydjsKKyAgICBwc2FfZHJ2X3NlX2NvbnRleHRfdCAqZHJ2X2NvbnRleHQ7CisKKyAgICBpZiggcHNhX2dldF9zZV9kcml2ZXIoIHNsb3QtPmF0dHIubGlmZXRpbWUsICZkcnYsICZkcnZfY29udGV4dCApICkKKyAgICB7CisgICAgICAgIHNpemVfdCBwdWJrZXlfbGVuZ3RoID0gMDsgLyogV2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUgeWV0ICovCisgICAgICAgIGlmKCBkcnYtPmtleV9tYW5hZ2VtZW50ID09IE5VTEwgfHwKKyAgICAgICAgICAgIGRydi0+a2V5X21hbmFnZW1lbnQtPnBfZ2VuZXJhdGUgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEtleSBpcyBkZWZpbmVkIGFzIGJlaW5nIGluIFNFLCBidXQgd2UgaGF2ZSBubyB3YXkgdG8gZ2VuZXJhdGUgaXQgKi8KKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4oIGRydi0+a2V5X21hbmFnZW1lbnQtPnBfZ2VuZXJhdGUoCisgICAgICAgICAgICBkcnZfY29udGV4dCwKKyAgICAgICAgICAgIHNsb3QtPmRhdGEuc2Uuc2xvdF9udW1iZXIsIGF0dHJpYnV0ZXMsCisgICAgICAgICAgICBOVUxMLCAwLCAmcHVia2V5X2xlbmd0aCApICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19TRV9DICovCisKKyAgICAvKiBUaGVuIHRyeSBhY2NlbGVyYXRvciBBUEkgKi8KKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fQUNDRUxFUkFUT1JfRFJJVkVSX1BSRVNFTlQpCisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UOworICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbiA9IFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKHNsb3QtPmF0dHIubGlmZXRpbWUpOworICAgIHNpemVfdCBleHBvcnRfc2l6ZSA9IDA7CisKKyAgICBzdGF0dXMgPSBnZXRfZXhwZWN0ZWRfa2V5X3NpemUoIGF0dHJpYnV0ZXMsICZleHBvcnRfc2l6ZSApOworICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICByZXR1cm4oIHN0YXR1cyApOworCisgICAgc2xvdC0+ZGF0YS5rZXkuZGF0YSA9IG1iZWR0bHNfY2FsbG9jKDEsIGV4cG9ydF9zaXplKTsKKyAgICBpZiggc2xvdC0+ZGF0YS5rZXkuZGF0YSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWSApOworICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzID0gZXhwb3J0X3NpemU7CisKKyAgICBzd2l0Y2goIGxvY2F0aW9uICkKKyAgICB7CisgICAgICAgIGNhc2UgUFNBX0tFWV9MT0NBVElPTl9MT0NBTF9TVE9SQUdFOgorICAgICAgICAgICAgLyogS2V5IGlzIHN0b3JlZCBpbiB0aGUgc2xvdCBpbiBleHBvcnQgcmVwcmVzZW50YXRpb24sIHNvCisgICAgICAgICAgICAgKiBjeWNsZSB0aHJvdWdoIGFsbCBrbm93biB0cmFuc3BhcmVudCBhY2NlbGVyYXRvcnMgKi8KKworICAgICAgICAgICAgLyogVHJhbnNwYXJlbnQgZHJpdmVycyBhcmUgbGltaXRlZCB0byBnZW5lcmF0aW5nIGFzeW1tZXRyaWMga2V5cyAqLworICAgICAgICAgICAgaWYoICEgUFNBX0tFWV9UWVBFX0lTX0FTWU1NRVRSSUMoIHNsb3QtPmF0dHIudHlwZSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisgICAgICAgICAgICBzdGF0dXMgPSB0ZXN0X3RyYW5zcGFyZW50X2dlbmVyYXRlX2tleSggYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LT5kYXRhLmtleS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzbG90LT5kYXRhLmtleS5ieXRlcyApOworICAgICAgICAgICAgLyogRGVjbGFyZWQgd2l0aCBmYWxsYmFjayA9PSB0cnVlICovCisgICAgICAgICAgICBpZiggc3RhdHVzICE9IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCisgICAgICAgICAgICAvKiBGZWxsIHRocm91Z2gsIG1lYW5pbmcgbm8gYWNjZWxlcmF0b3Igc3VwcG9ydHMgdGhpcyBvcGVyYXRpb24gKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qIEFkZCBjYXNlcyBmb3Igb3BhcXVlIGRyaXZlciBoZXJlICovCisjaWYgZGVmaW5lZChQU0FfQ1JZUFRPX0RSSVZFUl9URVNUKQorICAgICAgICBjYXNlIFBTQV9DUllQVE9fVEVTVF9EUklWRVJfTElGRVRJTUU6CisgICAgICAgICAgICBzdGF0dXMgPSB0ZXN0X29wYXF1ZV9nZW5lcmF0ZV9rZXkoIGF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2xvdC0+ZGF0YS5rZXkuYnl0ZXMgKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIEtleSBpcyBkZWNsYXJlZCB3aXRoIGEgbGlmZXRpbWUgbm90IGtub3duIHRvIHVzICovCisgICAgICAgICAgICBzdGF0dXMgPSBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgIHsKKyAgICAgICAgLyogZnJlZSBhbGxvY2F0ZWQgYnVmZmVyICovCisgICAgICAgIG1iZWR0bHNfZnJlZSggc2xvdC0+ZGF0YS5rZXkuZGF0YSApOworICAgICAgICBzbG90LT5kYXRhLmtleS5kYXRhID0gTlVMTDsKKyAgICAgICAgc2xvdC0+ZGF0YS5rZXkuYnl0ZXMgPSAwOworICAgIH0KKworICAgIHJldHVybiggc3RhdHVzICk7CisjZWxzZSAvKiBQU0FfQ1JZUFRPX0FDQ0VMRVJBVE9SX0RSSVZFUl9QUkVTRU5UICovCisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fQUNDRUxFUkFUT1JfRFJJVkVSX1BSRVNFTlQgKi8KKyNlbHNlIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KKyAgICAodm9pZCkgYXR0cmlidXRlczsKKyAgICAodm9pZCkgc2xvdDsKKworICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9QUkVTRU5UICovCit9CisKK3BzYV9zdGF0dXNfdCBwc2FfZHJpdmVyX3dyYXBwZXJfdmFsaWRhdGVfa2V5KCBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJpdHMgKQoreworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19BQ0NFTEVSQVRPUl9EUklWRVJfUFJFU0VOVCkKKyAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gUFNBX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQ7CisgICAgLyogVHJ5IGFjY2VsZXJhdG9ycyBpbiB0dXJuICovCisjaWYgZGVmaW5lZChQU0FfQ1JZUFRPX0RSSVZFUl9URVNUKQorICAgIHN0YXR1cyA9IHRlc3RfdHJhbnNwYXJlbnRfdmFsaWRhdGVfa2V5KCBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyApOworICAgIC8qIERlY2xhcmVkIHdpdGggZmFsbGJhY2sgPT0gdHJ1ZSAqLworICAgIGlmKCBzdGF0dXMgIT0gUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKQorICAgICAgICByZXR1cm4oIHN0YXR1cyApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKworICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyNlbHNlIC8qIFBTQV9DUllQVE9fQUNDRUxFUkFUT1JfRFJJVkVSX1BSRVNFTlQgKi8KKyAgICAodm9pZCkgYXR0cmlidXRlczsKKyAgICAodm9pZCkgZGF0YTsKKyAgICAodm9pZCkgZGF0YV9sZW5ndGg7CisgICAgKHZvaWQpIGJpdHM7CisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KK30KKworLyoKKyAqIENpcGhlciBmdW5jdGlvbnMKKyAqLworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfZW5jcnlwdCgKKyAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAorICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgIHNpemVfdCBpbnB1dF9sZW5ndGgsCisgICAgdWludDhfdCAqb3V0cHV0LAorICAgIHNpemVfdCBvdXRwdXRfc2l6ZSwKKyAgICBzaXplX3QgKm91dHB1dF9sZW5ndGggKQoreworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVCkgJiYgZGVmaW5lZChQU0FfQ1JZUFRPX0FDQ0VMRVJBVE9SX0RSSVZFUl9QUkVTRU5UKQorICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVDsKKyAgICBwc2Ffa2V5X2xvY2F0aW9uX3QgbG9jYXRpb24gPSBQU0FfS0VZX0xJRkVUSU1FX0dFVF9MT0NBVElPTihzbG90LT5hdHRyLmxpZmV0aW1lKTsKKyAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0geworICAgICAgLmNvcmUgPSBzbG90LT5hdHRyCisgICAgfTsKKworICAgIHN3aXRjaCggbG9jYXRpb24gKQorICAgIHsKKyAgICAgICAgY2FzZSBQU0FfS0VZX0xPQ0FUSU9OX0xPQ0FMX1NUT1JBR0U6CisgICAgICAgICAgICAvKiBLZXkgaXMgc3RvcmVkIGluIHRoZSBzbG90IGluIGV4cG9ydCByZXByZXNlbnRhdGlvbiwgc28KKyAgICAgICAgICAgICAqIGN5Y2xlIHRocm91Z2ggYWxsIGtub3duIHRyYW5zcGFyZW50IGFjY2VsZXJhdG9ycyAqLworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyAgICAgICAgICAgIHN0YXR1cyA9IHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX2VuY3J5cHQoICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9sZW5ndGggKTsKKyAgICAgICAgICAgIC8qIERlY2xhcmVkIHdpdGggZmFsbGJhY2sgPT0gdHJ1ZSAqLworICAgICAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCisgICAgICAgICAgICAvKiBGZWxsIHRocm91Z2gsIG1lYW5pbmcgbm8gYWNjZWxlcmF0b3Igc3VwcG9ydHMgdGhpcyBvcGVyYXRpb24gKi8KKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyAgICAgICAgLyogQWRkIGNhc2VzIGZvciBvcGFxdWUgZHJpdmVyIGhlcmUgKi8KKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisgICAgICAgIGNhc2UgUFNBX0NSWVBUT19URVNUX0RSSVZFUl9MSUZFVElNRToKKyAgICAgICAgICAgIHJldHVybiggdGVzdF9vcGFxdWVfY2lwaGVyX2VuY3J5cHQoICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9sZW5ndGggKSApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIEtleSBpcyBkZWNsYXJlZCB3aXRoIGEgbGlmZXRpbWUgbm90IGtub3duIHRvIHVzICovCisgICAgICAgICAgICByZXR1cm4oIHN0YXR1cyApOworICAgIH0KKyNlbHNlIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KKyAgICAodm9pZCkgc2xvdDsKKyAgICAodm9pZCkgYWxnOworICAgICh2b2lkKSBpbnB1dDsKKyAgICAodm9pZCkgaW5wdXRfbGVuZ3RoOworICAgICh2b2lkKSBvdXRwdXQ7CisgICAgKHZvaWQpIG91dHB1dF9zaXplOworICAgICh2b2lkKSBvdXRwdXRfbGVuZ3RoOworCisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KK30KKworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfZGVjcnlwdCgKKyAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAorICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgIHNpemVfdCBpbnB1dF9sZW5ndGgsCisgICAgdWludDhfdCAqb3V0cHV0LAorICAgIHNpemVfdCBvdXRwdXRfc2l6ZSwKKyAgICBzaXplX3QgKm91dHB1dF9sZW5ndGggKQoreworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVCkgJiYgZGVmaW5lZChQU0FfQ1JZUFRPX0FDQ0VMRVJBVE9SX0RSSVZFUl9QUkVTRU5UKQorICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVDsKKyAgICBwc2Ffa2V5X2xvY2F0aW9uX3QgbG9jYXRpb24gPSBQU0FfS0VZX0xJRkVUSU1FX0dFVF9MT0NBVElPTihzbG90LT5hdHRyLmxpZmV0aW1lKTsKKyAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0geworICAgICAgLmNvcmUgPSBzbG90LT5hdHRyCisgICAgfTsKKworICAgIHN3aXRjaCggbG9jYXRpb24gKQorICAgIHsKKyAgICAgICAgY2FzZSBQU0FfS0VZX0xPQ0FUSU9OX0xPQ0FMX1NUT1JBR0U6CisgICAgICAgICAgICAvKiBLZXkgaXMgc3RvcmVkIGluIHRoZSBzbG90IGluIGV4cG9ydCByZXByZXNlbnRhdGlvbiwgc28KKyAgICAgICAgICAgICAqIGN5Y2xlIHRocm91Z2ggYWxsIGtub3duIHRyYW5zcGFyZW50IGFjY2VsZXJhdG9ycyAqLworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyAgICAgICAgICAgIHN0YXR1cyA9IHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX2RlY3J5cHQoICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9sZW5ndGggKTsKKyAgICAgICAgICAgIC8qIERlY2xhcmVkIHdpdGggZmFsbGJhY2sgPT0gdHJ1ZSAqLworICAgICAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCisgICAgICAgICAgICAvKiBGZWxsIHRocm91Z2gsIG1lYW5pbmcgbm8gYWNjZWxlcmF0b3Igc3VwcG9ydHMgdGhpcyBvcGVyYXRpb24gKi8KKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyAgICAgICAgLyogQWRkIGNhc2VzIGZvciBvcGFxdWUgZHJpdmVyIGhlcmUgKi8KKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisgICAgICAgIGNhc2UgUFNBX0NSWVBUT19URVNUX0RSSVZFUl9MSUZFVElNRToKKyAgICAgICAgICAgIHJldHVybiggdGVzdF9vcGFxdWVfY2lwaGVyX2RlY3J5cHQoICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9sZW5ndGggKSApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIEtleSBpcyBkZWNsYXJlZCB3aXRoIGEgbGlmZXRpbWUgbm90IGtub3duIHRvIHVzICovCisgICAgICAgICAgICByZXR1cm4oIHN0YXR1cyApOworICAgIH0KKyNlbHNlIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KKyAgICAodm9pZCkgc2xvdDsKKyAgICAodm9pZCkgYWxnOworICAgICh2b2lkKSBpbnB1dDsKKyAgICAodm9pZCkgaW5wdXRfbGVuZ3RoOworICAgICh2b2lkKSBvdXRwdXQ7CisgICAgKHZvaWQpIG91dHB1dF9zaXplOworICAgICh2b2lkKSBvdXRwdXRfbGVuZ3RoOworCisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KK30KKworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfZW5jcnlwdF9zZXR1cCgKKyAgICBwc2Ffb3BlcmF0aW9uX2RyaXZlcl9jb250ZXh0X3QgKm9wZXJhdGlvbiwKKyAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnICkKK3sKKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQpICYmIGRlZmluZWQoUFNBX0NSWVBUT19BQ0NFTEVSQVRPUl9EUklWRVJfUFJFU0VOVCkKKyAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQ7CisgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oc2xvdC0+YXR0ci5saWZldGltZSk7CisgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IHsKKyAgICAgIC5jb3JlID0gc2xvdC0+YXR0cgorICAgIH07CisKKyAgICBzd2l0Y2goIGxvY2F0aW9uICkKKyAgICB7CisgICAgICAgIGNhc2UgUFNBX0tFWV9MT0NBVElPTl9MT0NBTF9TVE9SQUdFOgorICAgICAgICAgICAgLyogS2V5IGlzIHN0b3JlZCBpbiB0aGUgc2xvdCBpbiBleHBvcnQgcmVwcmVzZW50YXRpb24sIHNvCisgICAgICAgICAgICAgKiBjeWNsZSB0aHJvdWdoIGFsbCBrbm93biB0cmFuc3BhcmVudCBhY2NlbGVyYXRvcnMgKi8KKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisgICAgICAgICAgICBvcGVyYXRpb24tPmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YodGVzdF90cmFuc3BhcmVudF9jaXBoZXJfb3BlcmF0aW9uX3QpICk7CisgICAgICAgICAgICBpZiggb3BlcmF0aW9uLT5jdHggPT0gTlVMTCApCisgICAgICAgICAgICAgICAgcmV0dXJuIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZOworCisgICAgICAgICAgICBzdGF0dXMgPSB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9lbmNyeXB0X3NldHVwKCBvcGVyYXRpb24tPmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnICk7CisgICAgICAgICAgICAvKiBEZWNsYXJlZCB3aXRoIGZhbGxiYWNrID09IHRydWUgKi8KKyAgICAgICAgICAgIGlmKCBzdGF0dXMgPT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+aWQgPSBQU0FfQ1JZUFRPX1RSQU5TUEFSRU5UX1RFU1RfRFJJVkVSX0lEOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcGxhdGZvcm1femVyb2l6ZSgKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLT5jdHgsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZiggdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfb3BlcmF0aW9uX3QgKSApOworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggb3BlcmF0aW9uLT5jdHggKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24tPmN0eCA9IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiggc3RhdHVzICk7CisjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLworICAgICAgICAgICAgLyogRmVsbCB0aHJvdWdoLCBtZWFuaW5nIG5vIGFjY2VsZXJhdG9yIHN1cHBvcnRzIHRoaXMgb3BlcmF0aW9uICovCisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisgICAgICAgIC8qIEFkZCBjYXNlcyBmb3Igb3BhcXVlIGRyaXZlciBoZXJlICovCisjaWYgZGVmaW5lZChQU0FfQ1JZUFRPX0RSSVZFUl9URVNUKQorICAgICAgICBjYXNlIFBTQV9DUllQVE9fVEVTVF9EUklWRVJfTElGRVRJTUU6CisgICAgICAgICAgICBvcGVyYXRpb24tPmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YodGVzdF9vcGFxdWVfY2lwaGVyX29wZXJhdGlvbl90KSApOworICAgICAgICAgICAgaWYoIG9wZXJhdGlvbi0+Y3R4ID09IE5VTEwgKQorICAgICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlkgKTsKKworICAgICAgICAgICAgc3RhdHVzID0gdGVzdF9vcGFxdWVfY2lwaGVyX2VuY3J5cHRfc2V0dXAoIG9wZXJhdGlvbi0+Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnICk7CisgICAgICAgICAgICBpZiggc3RhdHVzID09IFBTQV9TVUNDRVNTICkKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24tPmlkID0gUFNBX0NSWVBUT19PUEFRVUVfVEVTVF9EUklWRVJfSUQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24tPmN0eCwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCB0ZXN0X29wYXF1ZV9jaXBoZXJfb3BlcmF0aW9uX3QgKSApOworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggb3BlcmF0aW9uLT5jdHggKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24tPmN0eCA9IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiggc3RhdHVzICk7CisjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogS2V5IGlzIGRlY2xhcmVkIHdpdGggYSBsaWZldGltZSBub3Qga25vd24gdG8gdXMgKi8KKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyAgICB9CisjZWxzZSAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9QUkVTRU5UICovCisgICAgKHZvaWQpc2xvdDsKKyAgICAodm9pZClhbGc7CisgICAgKHZvaWQpb3BlcmF0aW9uOworCisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KK30KKworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfZGVjcnlwdF9zZXR1cCgKKyAgICBwc2Ffb3BlcmF0aW9uX2RyaXZlcl9jb250ZXh0X3QgKm9wZXJhdGlvbiwKKyAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnICkKK3sKKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQpICYmIGRlZmluZWQoUFNBX0NSWVBUT19BQ0NFTEVSQVRPUl9EUklWRVJfUFJFU0VOVCkKKyAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQ7CisgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oc2xvdC0+YXR0ci5saWZldGltZSk7CisgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IHsKKyAgICAgIC5jb3JlID0gc2xvdC0+YXR0cgorICAgIH07CisKKyAgICBzd2l0Y2goIGxvY2F0aW9uICkKKyAgICB7CisgICAgICAgIGNhc2UgUFNBX0tFWV9MT0NBVElPTl9MT0NBTF9TVE9SQUdFOgorICAgICAgICAgICAgLyogS2V5IGlzIHN0b3JlZCBpbiB0aGUgc2xvdCBpbiBleHBvcnQgcmVwcmVzZW50YXRpb24sIHNvCisgICAgICAgICAgICAgKiBjeWNsZSB0aHJvdWdoIGFsbCBrbm93biB0cmFuc3BhcmVudCBhY2NlbGVyYXRvcnMgKi8KKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisgICAgICAgICAgICBvcGVyYXRpb24tPmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YodGVzdF90cmFuc3BhcmVudF9jaXBoZXJfb3BlcmF0aW9uX3QpICk7CisgICAgICAgICAgICBpZiggb3BlcmF0aW9uLT5jdHggPT0gTlVMTCApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWSApOworCisgICAgICAgICAgICBzdGF0dXMgPSB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9kZWNyeXB0X3NldHVwKCBvcGVyYXRpb24tPmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnICk7CisgICAgICAgICAgICAvKiBEZWNsYXJlZCB3aXRoIGZhbGxiYWNrID09IHRydWUgKi8KKyAgICAgICAgICAgIGlmKCBzdGF0dXMgPT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+aWQgPSBQU0FfQ1JZUFRPX1RSQU5TUEFSRU5UX1RFU1RfRFJJVkVSX0lEOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcGxhdGZvcm1femVyb2l6ZSgKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLT5jdHgsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZiggdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfb3BlcmF0aW9uX3QgKSApOworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggb3BlcmF0aW9uLT5jdHggKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24tPmN0eCA9IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiggc3RhdHVzICk7CisjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLworICAgICAgICAgICAgLyogRmVsbCB0aHJvdWdoLCBtZWFuaW5nIG5vIGFjY2VsZXJhdG9yIHN1cHBvcnRzIHRoaXMgb3BlcmF0aW9uICovCisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisgICAgICAgIC8qIEFkZCBjYXNlcyBmb3Igb3BhcXVlIGRyaXZlciBoZXJlICovCisjaWYgZGVmaW5lZChQU0FfQ1JZUFRPX0RSSVZFUl9URVNUKQorICAgICAgICBjYXNlIFBTQV9DUllQVE9fVEVTVF9EUklWRVJfTElGRVRJTUU6CisgICAgICAgICAgICBvcGVyYXRpb24tPmN0eCA9IG1iZWR0bHNfY2FsbG9jKCAxLCBzaXplb2YodGVzdF9vcGFxdWVfY2lwaGVyX29wZXJhdGlvbl90KSApOworICAgICAgICAgICAgaWYoIG9wZXJhdGlvbi0+Y3R4ID09IE5VTEwgKQorICAgICAgICAgICAgICAgIHJldHVybiBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX01FTU9SWTsKKworICAgICAgICAgICAgc3RhdHVzID0gdGVzdF9vcGFxdWVfY2lwaGVyX2RlY3J5cHRfc2V0dXAoIG9wZXJhdGlvbi0+Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QtPmRhdGEua2V5LmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+ZGF0YS5rZXkuYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnICk7CisgICAgICAgICAgICBpZiggc3RhdHVzID09IFBTQV9TVUNDRVNTICkKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24tPmlkID0gUFNBX0NSWVBUT19PUEFRVUVfVEVTVF9EUklWRVJfSUQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24tPmN0eCwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCB0ZXN0X29wYXF1ZV9jaXBoZXJfb3BlcmF0aW9uX3QgKSApOworICAgICAgICAgICAgICAgIG1iZWR0bHNfZnJlZSggb3BlcmF0aW9uLT5jdHggKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24tPmN0eCA9IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiggc3RhdHVzICk7CisjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogS2V5IGlzIGRlY2xhcmVkIHdpdGggYSBsaWZldGltZSBub3Qga25vd24gdG8gdXMgKi8KKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyAgICB9CisjZWxzZSAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9QUkVTRU5UICovCisgICAgKHZvaWQpc2xvdDsKKyAgICAodm9pZClhbGc7CisgICAgKHZvaWQpb3BlcmF0aW9uOworCisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KK30KKworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfZ2VuZXJhdGVfaXYoCisgICAgcHNhX29wZXJhdGlvbl9kcml2ZXJfY29udGV4dF90ICpvcGVyYXRpb24sCisgICAgdWludDhfdCAqaXYsCisgICAgc2l6ZV90IGl2X3NpemUsCisgICAgc2l6ZV90ICppdl9sZW5ndGggKQoreworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVCkgJiYgZGVmaW5lZChQU0FfQ1JZUFRPX0FDQ0VMRVJBVE9SX0RSSVZFUl9QUkVTRU5UKQorICAgIHN3aXRjaCggb3BlcmF0aW9uLT5pZCApCisgICAgeworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyAgICAgICAgY2FzZSBQU0FfQ1JZUFRPX1RSQU5TUEFSRU5UX1RFU1RfRFJJVkVSX0lEOgorICAgICAgICAgICAgcmV0dXJuKCB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9nZW5lcmF0ZV9pdiggb3BlcmF0aW9uLT5jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdl9sZW5ndGggKSApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisgICAgICAgIGNhc2UgUFNBX0NSWVBUT19PUEFRVUVfVEVTVF9EUklWRVJfSUQ6CisgICAgICAgICAgICByZXR1cm4oIHRlc3Rfb3BhcXVlX2NpcGhlcl9nZW5lcmF0ZV9pdiggb3BlcmF0aW9uLT5jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdl9sZW5ndGggKSApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIEtleSBpcyBhdHRhY2hlZCB0byBhIGRyaXZlciBub3Qga25vd24gdG8gdXMgKi8KKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JBRF9TVEFURSApOworICAgIH0KKyNlbHNlIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KKyAgICAodm9pZCkgb3BlcmF0aW9uOworICAgICh2b2lkKSBpdjsKKyAgICAodm9pZCkgaXZfc2l6ZTsKKyAgICAodm9pZCkgaXZfbGVuZ3RoOworCisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KK30KKworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfc2V0X2l2KAorICAgIHBzYV9vcGVyYXRpb25fZHJpdmVyX2NvbnRleHRfdCAqb3BlcmF0aW9uLAorICAgIGNvbnN0IHVpbnQ4X3QgKml2LAorICAgIHNpemVfdCBpdl9sZW5ndGggKQoreworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVCkgJiYgZGVmaW5lZChQU0FfQ1JZUFRPX0FDQ0VMRVJBVE9SX0RSSVZFUl9QUkVTRU5UKQorICAgIHN3aXRjaCggb3BlcmF0aW9uLT5pZCApCisgICAgeworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyAgICAgICAgY2FzZSBQU0FfQ1JZUFRPX1RSQU5TUEFSRU5UX1RFU1RfRFJJVkVSX0lEOgorICAgICAgICAgICAgcmV0dXJuKCB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9zZXRfaXYoIG9wZXJhdGlvbi0+Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2X2xlbmd0aCApICk7CisjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyAgICAgICAgY2FzZSBQU0FfQ1JZUFRPX09QQVFVRV9URVNUX0RSSVZFUl9JRDoKKyAgICAgICAgICAgIHJldHVybiggdGVzdF9vcGFxdWVfY2lwaGVyX3NldF9pdiggb3BlcmF0aW9uLT5jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdl9sZW5ndGggKSApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIEtleSBpcyBhdHRhY2hlZCB0byBhIGRyaXZlciBub3Qga25vd24gdG8gdXMgKi8KKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JBRF9TVEFURSApOworICAgIH0KKyNlbHNlIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KKyAgICAodm9pZCkgb3BlcmF0aW9uOworICAgICh2b2lkKSBpdjsKKyAgICAodm9pZCkgaXZfbGVuZ3RoOworCisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KK30KKworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfdXBkYXRlKAorICAgIHBzYV9vcGVyYXRpb25fZHJpdmVyX2NvbnRleHRfdCAqb3BlcmF0aW9uLAorICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgIHNpemVfdCBpbnB1dF9sZW5ndGgsCisgICAgdWludDhfdCAqb3V0cHV0LAorICAgIHNpemVfdCBvdXRwdXRfc2l6ZSwKKyAgICBzaXplX3QgKm91dHB1dF9sZW5ndGggKQoreworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVCkgJiYgZGVmaW5lZChQU0FfQ1JZUFRPX0FDQ0VMRVJBVE9SX0RSSVZFUl9QUkVTRU5UKQorICAgIHN3aXRjaCggb3BlcmF0aW9uLT5pZCApCisgICAgeworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyAgICAgICAgY2FzZSBQU0FfQ1JZUFRPX1RSQU5TUEFSRU5UX1RFU1RfRFJJVkVSX0lEOgorICAgICAgICAgICAgcmV0dXJuKCB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl91cGRhdGUoIG9wZXJhdGlvbi0+Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2xlbmd0aCApICk7CisjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyAgICAgICAgY2FzZSBQU0FfQ1JZUFRPX09QQVFVRV9URVNUX0RSSVZFUl9JRDoKKyAgICAgICAgICAgIHJldHVybiggdGVzdF9vcGFxdWVfY2lwaGVyX3VwZGF0ZSggb3BlcmF0aW9uLT5jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9sZW5ndGggKSApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIEtleSBpcyBhdHRhY2hlZCB0byBhIGRyaXZlciBub3Qga25vd24gdG8gdXMgKi8KKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JBRF9TVEFURSApOworICAgIH0KKyNlbHNlIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KKyAgICAodm9pZCkgb3BlcmF0aW9uOworICAgICh2b2lkKSBpbnB1dDsKKyAgICAodm9pZCkgaW5wdXRfbGVuZ3RoOworICAgICh2b2lkKSBvdXRwdXQ7CisgICAgKHZvaWQpIG91dHB1dF9sZW5ndGg7CisgICAgKHZvaWQpIG91dHB1dF9zaXplOworCisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KK30KKworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfZmluaXNoKAorICAgIHBzYV9vcGVyYXRpb25fZHJpdmVyX2NvbnRleHRfdCAqb3BlcmF0aW9uLAorICAgIHVpbnQ4X3QgKm91dHB1dCwKKyAgICBzaXplX3Qgb3V0cHV0X3NpemUsCisgICAgc2l6ZV90ICpvdXRwdXRfbGVuZ3RoICkKK3sKKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQpICYmIGRlZmluZWQoUFNBX0NSWVBUT19BQ0NFTEVSQVRPUl9EUklWRVJfUFJFU0VOVCkKKyAgICBzd2l0Y2goIG9wZXJhdGlvbi0+aWQgKQorICAgIHsKKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisgICAgICAgIGNhc2UgUFNBX0NSWVBUT19UUkFOU1BBUkVOVF9URVNUX0RSSVZFUl9JRDoKKyAgICAgICAgICAgIHJldHVybiggdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfZmluaXNoKCBvcGVyYXRpb24tPmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2xlbmd0aCApICk7CisjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyAgICAgICAgY2FzZSBQU0FfQ1JZUFRPX09QQVFVRV9URVNUX0RSSVZFUl9JRDoKKyAgICAgICAgICAgIHJldHVybiggdGVzdF9vcGFxdWVfY2lwaGVyX2ZpbmlzaCggb3BlcmF0aW9uLT5jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9sZW5ndGggKSApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIEtleSBpcyBhdHRhY2hlZCB0byBhIGRyaXZlciBub3Qga25vd24gdG8gdXMgKi8KKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JBRF9TVEFURSApOworICAgIH0KKyNlbHNlIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KKyAgICAodm9pZCkgb3BlcmF0aW9uOworICAgICh2b2lkKSBvdXRwdXQ7CisgICAgKHZvaWQpIG91dHB1dF9zaXplOworICAgICh2b2lkKSBvdXRwdXRfbGVuZ3RoOworCisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KK30KKworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfYWJvcnQoCisgICAgcHNhX29wZXJhdGlvbl9kcml2ZXJfY29udGV4dF90ICpvcGVyYXRpb24gKQoreworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfUFJFU0VOVCkgJiYgZGVmaW5lZChQU0FfQ1JZUFRPX0FDQ0VMRVJBVE9SX0RSSVZFUl9QUkVTRU5UKQorICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVDsKKworICAgIC8qIFRoZSBvYmplY3QgaGFzIChhcHBhcmVudGx5KSBiZWVuIGluaXRpYWxpemVkIGJ1dCBpdCBpcyBub3QgaW4gdXNlLiBJdCdzCisgICAgICogb2sgdG8gY2FsbCBhYm9ydCBvbiBzdWNoIGFuIG9iamVjdCwgYW5kIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KKyAgICBpZiggb3BlcmF0aW9uLT5jdHggPT0gTlVMTCAmJiBvcGVyYXRpb24tPmlkID09IDAgKQorICAgICAgICByZXR1cm4oIFBTQV9TVUNDRVNTICk7CisKKyAgICBzd2l0Y2goIG9wZXJhdGlvbi0+aWQgKQorICAgIHsKKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisgICAgICAgIGNhc2UgUFNBX0NSWVBUT19UUkFOU1BBUkVOVF9URVNUX0RSSVZFUl9JRDoKKyAgICAgICAgICAgIHN0YXR1cyA9IHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX2Fib3J0KCBvcGVyYXRpb24tPmN0eCApOworICAgICAgICAgICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKAorICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+Y3R4LAorICAgICAgICAgICAgICAgIHNpemVvZiggdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfb3BlcmF0aW9uX3QgKSApOworICAgICAgICAgICAgbWJlZHRsc19mcmVlKCBvcGVyYXRpb24tPmN0eCApOworICAgICAgICAgICAgb3BlcmF0aW9uLT5jdHggPSBOVUxMOworICAgICAgICAgICAgb3BlcmF0aW9uLT5pZCA9IDA7CisKKyAgICAgICAgICAgIHJldHVybiggc3RhdHVzICk7CisjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyAgICAgICAgY2FzZSBQU0FfQ1JZUFRPX09QQVFVRV9URVNUX0RSSVZFUl9JRDoKKyAgICAgICAgICAgIHN0YXR1cyA9IHRlc3Rfb3BhcXVlX2NpcGhlcl9hYm9ydCggb3BlcmF0aW9uLT5jdHggKTsKKyAgICAgICAgICAgIG1iZWR0bHNfcGxhdGZvcm1femVyb2l6ZSgKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24tPmN0eCwKKyAgICAgICAgICAgICAgICBzaXplb2YoIHRlc3Rfb3BhcXVlX2NpcGhlcl9vcGVyYXRpb25fdCApICk7CisgICAgICAgICAgICBtYmVkdGxzX2ZyZWUoIG9wZXJhdGlvbi0+Y3R4ICk7CisgICAgICAgICAgICBvcGVyYXRpb24tPmN0eCA9IE5VTEw7CisgICAgICAgICAgICBvcGVyYXRpb24tPmlkID0gMDsKKworICAgICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBPcGVyYXRpb24gaXMgYXR0YWNoZWQgdG8gYSBkcml2ZXIgbm90IGtub3duIHRvIHVzICovCisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9CQURfU1RBVEUgKTsKKyAgICB9CisjZWxzZSAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9QUkVTRU5UICovCisgICAgKHZvaWQpb3BlcmF0aW9uOworCisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1BSRVNFTlQgKi8KK30KKworLyogRW5kIG9mIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGUuICovCmRpZmYgLS1naXQgYS9saWJyYXJ5L3BzYV9jcnlwdG9fZHJpdmVyX3dyYXBwZXJzLmggYi9saWJyYXJ5L3BzYV9jcnlwdG9fZHJpdmVyX3dyYXBwZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBiNDgzYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnJhcnkvcHNhX2NyeXB0b19kcml2ZXJfd3JhcHBlcnMuaApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqICBGdW5jdGlvbiBzaWduYXR1cmVzIGZvciBmdW5jdGlvbmFsaXR5IHRoYXQgY2FuIGJlIHByb3ZpZGVkIGJ5CisgKiAgY3J5cHRvZ3JhcGhpYyBhY2NlbGVyYXRvcnMuCisgKiAgV2FybmluZzogVGhpcyBmaWxlIHdpbGwgYmUgYXV0by1nZW5lcmF0ZWQgaW4gdGhlIGZ1dHVyZS4KKyAqLworLyogIENvcHlyaWdodCBUaGUgTWJlZCBUTFMgQ29udHJpYnV0b3JzCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgUFNBX0NSWVBUT19EUklWRVJfV1JBUFBFUlNfSAorI2RlZmluZSBQU0FfQ1JZUFRPX0RSSVZFUl9XUkFQUEVSU19ICisKKyNpbmNsdWRlICJwc2EvY3J5cHRvLmgiCisjaW5jbHVkZSAicHNhL2NyeXB0b19kcml2ZXJfY29tbW9uLmgiCisKKy8qCisgKiBTaWduYXR1cmUgZnVuY3Rpb25zCisgKi8KK3BzYV9zdGF0dXNfdCBwc2FfZHJpdmVyX3dyYXBwZXJfc2lnbl9oYXNoKCBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGhhc2hfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnNpZ25hdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2lnbmF0dXJlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpzaWduYXR1cmVfbGVuZ3RoICk7CisKK3BzYV9zdGF0dXNfdCBwc2FfZHJpdmVyX3dyYXBwZXJfdmVyaWZ5X2hhc2goIHBzYV9rZXlfc2xvdF90ICpzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2FsZ29yaXRobV90IGFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaGFzaF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpzaWduYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2lnbmF0dXJlX2xlbmd0aCApOworCisvKgorICogS2V5IGhhbmRsaW5nIGZ1bmN0aW9ucworICovCisKK3BzYV9zdGF0dXNfdCBwc2FfZHJpdmVyX3dyYXBwZXJfZ2VuZXJhdGVfa2V5KCBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X3Nsb3RfdCAqc2xvdCApOworCitwc2Ffc3RhdHVzX3QgcHNhX2RyaXZlcl93cmFwcGVyX3ZhbGlkYXRlX2tleSggY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpiaXRzICk7CisKKy8qCisgKiBDaXBoZXIgZnVuY3Rpb25zCisgKi8KK3BzYV9zdGF0dXNfdCBwc2FfZHJpdmVyX3dyYXBwZXJfY2lwaGVyX2VuY3J5cHQoCisgICAgcHNhX2tleV9zbG90X3QgKnNsb3QsCisgICAgcHNhX2FsZ29yaXRobV90IGFsZywKKyAgICBjb25zdCB1aW50OF90ICppbnB1dCwKKyAgICBzaXplX3QgaW5wdXRfbGVuZ3RoLAorICAgIHVpbnQ4X3QgKm91dHB1dCwKKyAgICBzaXplX3Qgb3V0cHV0X3NpemUsCisgICAgc2l6ZV90ICpvdXRwdXRfbGVuZ3RoICk7CisKK3BzYV9zdGF0dXNfdCBwc2FfZHJpdmVyX3dyYXBwZXJfY2lwaGVyX2RlY3J5cHQoCisgICAgcHNhX2tleV9zbG90X3QgKnNsb3QsCisgICAgcHNhX2FsZ29yaXRobV90IGFsZywKKyAgICBjb25zdCB1aW50OF90ICppbnB1dCwKKyAgICBzaXplX3QgaW5wdXRfbGVuZ3RoLAorICAgIHVpbnQ4X3QgKm91dHB1dCwKKyAgICBzaXplX3Qgb3V0cHV0X3NpemUsCisgICAgc2l6ZV90ICpvdXRwdXRfbGVuZ3RoICk7CisKK3BzYV9zdGF0dXNfdCBwc2FfZHJpdmVyX3dyYXBwZXJfY2lwaGVyX2VuY3J5cHRfc2V0dXAoCisgICAgcHNhX29wZXJhdGlvbl9kcml2ZXJfY29udGV4dF90ICpvcGVyYXRpb24sCisgICAgcHNhX2tleV9zbG90X3QgKnNsb3QsCisgICAgcHNhX2FsZ29yaXRobV90IGFsZyApOworCitwc2Ffc3RhdHVzX3QgcHNhX2RyaXZlcl93cmFwcGVyX2NpcGhlcl9kZWNyeXB0X3NldHVwKAorICAgIHBzYV9vcGVyYXRpb25fZHJpdmVyX2NvbnRleHRfdCAqb3BlcmF0aW9uLAorICAgIHBzYV9rZXlfc2xvdF90ICpzbG90LAorICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgKTsKKworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfZ2VuZXJhdGVfaXYoCisgICAgcHNhX29wZXJhdGlvbl9kcml2ZXJfY29udGV4dF90ICpvcGVyYXRpb24sCisgICAgdWludDhfdCAqaXYsCisgICAgc2l6ZV90IGl2X3NpemUsCisgICAgc2l6ZV90ICppdl9sZW5ndGggKTsKKworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfc2V0X2l2KAorICAgIHBzYV9vcGVyYXRpb25fZHJpdmVyX2NvbnRleHRfdCAqb3BlcmF0aW9uLAorICAgIGNvbnN0IHVpbnQ4X3QgKml2LAorICAgIHNpemVfdCBpdl9sZW5ndGggKTsKKworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfdXBkYXRlKAorICAgIHBzYV9vcGVyYXRpb25fZHJpdmVyX2NvbnRleHRfdCAqb3BlcmF0aW9uLAorICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgIHNpemVfdCBpbnB1dF9sZW5ndGgsCisgICAgdWludDhfdCAqb3V0cHV0LAorICAgIHNpemVfdCBvdXRwdXRfc2l6ZSwKKyAgICBzaXplX3QgKm91dHB1dF9sZW5ndGggKTsKKworcHNhX3N0YXR1c190IHBzYV9kcml2ZXJfd3JhcHBlcl9jaXBoZXJfZmluaXNoKAorICAgIHBzYV9vcGVyYXRpb25fZHJpdmVyX2NvbnRleHRfdCAqb3BlcmF0aW9uLAorICAgIHVpbnQ4X3QgKm91dHB1dCwKKyAgICBzaXplX3Qgb3V0cHV0X3NpemUsCisgICAgc2l6ZV90ICpvdXRwdXRfbGVuZ3RoICk7CisKK3BzYV9zdGF0dXNfdCBwc2FfZHJpdmVyX3dyYXBwZXJfY2lwaGVyX2Fib3J0KAorICAgIHBzYV9vcGVyYXRpb25fZHJpdmVyX2NvbnRleHRfdCAqb3BlcmF0aW9uICk7CisKKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9XUkFQUEVSU19IICovCisKKy8qIEVuZCBvZiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmaWxlLiAqLwpkaWZmIC0tZ2l0IGEvbGlicmFyeS9wc2FfY3J5cHRvX2l0cy5oIGIvbGlicmFyeS9wc2FfY3J5cHRvX2l0cy5oCmluZGV4IDkzYzRjZTkuLmI2NzFkNjMgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvcHNhX2NyeXB0b19pdHMuaAorKysgYi9saWJyYXJ5L3BzYV9jcnlwdG9faXRzLmgKQEAgLTE0Miw0ICsxNDIsOCBAQAogICovCiBwc2Ffc3RhdHVzX3QgcHNhX2l0c19yZW1vdmUocHNhX3N0b3JhZ2VfdWlkX3QgdWlkKTsKIAorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKwogI2VuZGlmIC8qIFBTQV9DUllQVE9fSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnJhcnkvcHNhX2NyeXB0b19zZS5oIGIvbGlicmFyeS9wc2FfY3J5cHRvX3NlLmgKaW5kZXggYTQ2NDIzMi4uNjdmYWRmOCAxMDA2NDQKLS0tIGEvbGlicmFyeS9wc2FfY3J5cHRvX3NlLmgKKysrIGIvbGlicmFyeS9wc2FfY3J5cHRvX3NlLmgKQEAgLTQ1LDcgKzQ1LDcgQEAKIC8qKiBUaGUgYmFzZSBvZiB0aGUgcmFuZ2Ugb2YgSVRTIGZpbGUgaWRlbnRpZmllcnMgZm9yIHNlY3VyZSBlbGVtZW50CiAgKiBkcml2ZXIgcGVyc2lzdGVudCBkYXRhLgogICoKLSAqIFdlIHVzZSBhIHNsaWNlIG9mIHRoZSBpbXBsZW1lbmF0aW9uIHJlc2VydmVkIHJhbmdlIDB4ZmZmZjAwMDAuLjB4ZmZmZmZmZmYsCisgKiBXZSB1c2UgYSBzbGljZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gcmVzZXJ2ZWQgcmFuZ2UgMHhmZmZmMDAwMC4uMHhmZmZmZmZmZiwKICAqIHNwZWNpZmljYWxseSB0aGUgcmFuZ2UgMHhmZmZmZmUwMC4uMHhmZmZmZmVmZi4gVGhlIGxlbmd0aCBvZiB0aGlzIHJhbmdlCiAgKiBkcml2ZXMgdGhlIHZhbHVlIG9mICNQU0FfTUFYX1NFX0xPQ0FUSU9OLiBUaGUgaWRlbnRpZmllciAweGZmZmZmZTAwIGlzCiAgKiBhY3R1YWxseSBub3QgdXNlZCBzaW5jZSBpdCBjb3JyZXNwb25kcyB0byAjUFNBX0tFWV9MT0NBVElPTl9MT0NBTF9TVE9SQUdFCkBAIC0xODIsNyArMTgyLDYgQEAKIHR5cGVkZWYgc3RydWN0CiB7CiAgICAgdWludDhfdCBzbG90X251bWJlcltzaXplb2YoIHBzYV9rZXlfc2xvdF9udW1iZXJfdCApXTsKLSAgICB1aW50OF90IGJpdHNbc2l6ZW9mKCBwc2Ffa2V5X2JpdHNfdCApXTsKIH0gcHNhX3NlX2tleV9kYXRhX3N0b3JhZ2VfdDsKIAogI2VuZGlmIC8qIFBTQV9DUllQVE9fU0VfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicmFyeS9wc2FfY3J5cHRvX3Nsb3RfbWFuYWdlbWVudC5jIGIvbGlicmFyeS9wc2FfY3J5cHRvX3Nsb3RfbWFuYWdlbWVudC5jCmluZGV4IGEzMmEwMjcuLjUxNDA3NzIgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuYworKysgYi9saWJyYXJ5L3BzYV9jcnlwdG9fc2xvdF9tYW5hZ2VtZW50LmMKQEAgLTEzNywxMyArMTM3LDEzIEBACiAgICAgICAgIGRhdGEgPSAocHNhX3NlX2tleV9kYXRhX3N0b3JhZ2VfdCAqKSBrZXlfZGF0YTsKICAgICAgICAgbWVtY3B5KCAmc2xvdC0+ZGF0YS5zZS5zbG90X251bWJlciwgJmRhdGEtPnNsb3RfbnVtYmVyLAogICAgICAgICAgICAgICAgIHNpemVvZiggc2xvdC0+ZGF0YS5zZS5zbG90X251bWJlciApICk7Ci0gICAgICAgIG1lbWNweSggJnNsb3QtPmF0dHIuYml0cywgJmRhdGEtPmJpdHMsCi0gICAgICAgICAgICAgICAgc2l6ZW9mKCBzbG90LT5hdHRyLmJpdHMgKSApOwogICAgIH0KICAgICBlbHNlCiAjZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX1NFX0MgKi8KICAgICB7Ci0gICAgICAgIHN0YXR1cyA9IHBzYV9pbXBvcnRfa2V5X2ludG9fc2xvdCggc2xvdCwga2V5X2RhdGEsIGtleV9kYXRhX2xlbmd0aCApOworICAgICAgICBzdGF0dXMgPSBwc2FfY29weV9rZXlfbWF0ZXJpYWxfaW50b19zbG90KCBzbG90LCBrZXlfZGF0YSwga2V5X2RhdGFfbGVuZ3RoICk7CisgICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAogZXhpdDoKQEAgLTE1NywxNiArMTU3LDE1IEBACiAgKiBwYXN0IHJlbGVhc2VkIHZlcnNpb24gbXVzdCByZW1haW4gdmFsaWQsIHVubGVzcyBhIG1pZ3JhdGlvbiBwYXRoCiAgKiBpcyBwcm92aWRlZC4KICAqCi0gKiBccGFyYW0gZmlsZV9pZCAgICAgICBUaGUga2V5IGlkZW50aWZpZXIgdG8gY2hlY2suCi0gKiBccGFyYW0gdmVuZG9yX29rICAgICBOb256ZXJvIHRvIGFsbG93IGtleSBpZHMgaW4gdGhlIHZlbmRvciByYW5nZS4KLSAqICAgICAgICAgICAgICAgICAgICAgIDAgdG8gYWxsb3cgb25seSBrZXkgaWRzIGluIHRoZSBhcHBsaWNhdGlvbiByYW5nZS4KKyAqIFxwYXJhbSBrZXkgICAgICAgIFRoZSBrZXkgaWRlbnRpZmllciB0byBjaGVjay4KKyAqIFxwYXJhbSB2ZW5kb3Jfb2sgIE5vbnplcm8gdG8gYWxsb3cga2V5IGlkcyBpbiB0aGUgdmVuZG9yIHJhbmdlLgorICogICAgICAgICAgICAgICAgICAgMCB0byBhbGxvdyBvbmx5IGtleSBpZHMgaW4gdGhlIGFwcGxpY2F0aW9uIHJhbmdlLgogICoKLSAqIFxyZXR1cm4gICAgICAgICAgICAgIDEgaWYgXHAgZmlsZV9pZCBpcyBhY2NlcHRhYmxlLCBvdGhlcndpc2UgMC4KKyAqIFxyZXR1cm4gICAgICAgICAgIDEgaWYgXHAga2V5IGlzIGFjY2VwdGFibGUsIG90aGVyd2lzZSAwLgogICovCi1zdGF0aWMgaW50IHBzYV9pc19rZXlfaWRfdmFsaWQoIHBzYV9rZXlfZmlsZV9pZF90IGZpbGVfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZW5kb3Jfb2sgKQorc3RhdGljIGludCBwc2FfaXNfa2V5X2lkX3ZhbGlkKCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksIGludCB2ZW5kb3Jfb2sgKQogewotICAgIHBzYV9hcHBfa2V5X2lkX3Qga2V5X2lkID0gUFNBX0tFWV9GSUxFX0dFVF9LRVlfSUQoIGZpbGVfaWQgKTsKKyAgICBwc2Ffa2V5X2lkX3Qga2V5X2lkID0gTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9LRVlfSUQoIGtleSApOwogICAgIGlmKCBQU0FfS0VZX0lEX1VTRVJfTUlOIDw9IGtleV9pZCAmJiBrZXlfaWQgPD0gUFNBX0tFWV9JRF9VU0VSX01BWCApCiAgICAgICAgIHJldHVybiggMSApOwogICAgIGVsc2UgaWYoIHZlbmRvcl9vayAmJgpAQCAtMjA0LDcgKzIwMyw3IEBACiB9CiAKIHBzYV9zdGF0dXNfdCBwc2FfdmFsaWRhdGVfa2V5X3BlcnNpc3RlbmNlKCBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV9pZF90IGtleV9pZCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ICkKIHsKICAgICBpZiAoIFBTQV9LRVlfTElGRVRJTUVfSVNfVk9MQVRJTEUoIGxpZmV0aW1lICkgKQogICAgIHsKQEAgLTIxNSwxOSArMjE0LDE5IEBACiAgICAgewogICAgICAgICAvKiBQZXJzaXN0ZW50IGtleXMgcmVxdWlyZSBzdG9yYWdlIHN1cHBvcnQgKi8KICNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19TVE9SQUdFX0MpCi0gICAgICAgIGlmKCBwc2FfaXNfa2V5X2lkX3ZhbGlkKCBrZXlfaWQsCisgICAgICAgIGlmKCBwc2FfaXNfa2V5X2lkX3ZhbGlkKCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2xpZmV0aW1lX2lzX2V4dGVybmFsKCBsaWZldGltZSApICkgKQogICAgICAgICAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CiAjZWxzZSAvKiBNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DICovCi0gICAgICAgICh2b2lkKSBrZXlfaWQ7CisgICAgICAgICh2b2lkKSBrZXk7CiAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKICNlbmRpZiAvKiAhTUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQyAqLwogICAgIH0KIH0KIAotcHNhX3N0YXR1c190IHBzYV9vcGVuX2tleSggcHNhX2tleV9maWxlX2lkX3QgaWQsIHBzYV9rZXlfaGFuZGxlX3QgKmhhbmRsZSApCitwc2Ffc3RhdHVzX3QgcHNhX29wZW5fa2V5KCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXksIHBzYV9rZXlfaGFuZGxlX3QgKmhhbmRsZSApCiB7CiAjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DKQogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CkBAIC0yMzUsNyArMjM0LDcgQEAKIAogICAgICpoYW5kbGUgPSAwOwogCi0gICAgaWYoICEgcHNhX2lzX2tleV9pZF92YWxpZCggaWQsIDEgKSApCisgICAgaWYoICEgcHNhX2lzX2tleV9pZF92YWxpZCgga2V5LCAxICkgKQogICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CiAKICAgICBzdGF0dXMgPSBwc2FfZ2V0X2VtcHR5X2tleV9zbG90KCBoYW5kbGUsICZzbG90ICk7CkBAIC0yNDMsNyArMjQyLDcgQEAKICAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKIAogICAgIHNsb3QtPmF0dHIubGlmZXRpbWUgPSBQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ7Ci0gICAgc2xvdC0+YXR0ci5pZCA9IGlkOworICAgIHNsb3QtPmF0dHIuaWQgPSBrZXk7CiAKICAgICBzdGF0dXMgPSBwc2FfbG9hZF9wZXJzaXN0ZW50X2tleV9pbnRvX3Nsb3QoIHNsb3QgKTsKICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKQEAgLTI1NCw3ICsyNTMsNyBAQAogICAgIHJldHVybiggc3RhdHVzICk7CiAKICNlbHNlIC8qIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQykgKi8KLSAgICAodm9pZCkgaWQ7CisgICAgKHZvaWQpIGtleTsKICAgICAqaGFuZGxlID0gMDsKICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CiAjZW5kaWYgLyogIWRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQykgKi8KQEAgLTI5MSwxNCArMjkwLDE0IEBACiAgICAgICAgICAgICArK3N0YXRzLT52b2xhdGlsZV9zbG90czsKICAgICAgICAgZWxzZSBpZiggc2xvdC0+YXR0ci5saWZldGltZSA9PSBQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQgKQogICAgICAgICB7Ci0gICAgICAgICAgICBwc2FfYXBwX2tleV9pZF90IGlkID0gUFNBX0tFWV9GSUxFX0dFVF9LRVlfSUQoc2xvdC0+YXR0ci5pZCk7CisgICAgICAgICAgICBwc2Ffa2V5X2lkX3QgaWQgPSBNQkVEVExTX1NWQ19LRVlfSURfR0VUX0tFWV9JRCggc2xvdC0+YXR0ci5pZCApOwogICAgICAgICAgICAgKytzdGF0cy0+cGVyc2lzdGVudF9zbG90czsKICAgICAgICAgICAgIGlmKCBpZCA+IHN0YXRzLT5tYXhfb3Blbl9pbnRlcm5hbF9rZXlfaWQgKQogICAgICAgICAgICAgICAgIHN0YXRzLT5tYXhfb3Blbl9pbnRlcm5hbF9rZXlfaWQgPSBpZDsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHBzYV9hcHBfa2V5X2lkX3QgaWQgPSBQU0FfS0VZX0ZJTEVfR0VUX0tFWV9JRChzbG90LT5hdHRyLmlkKTsKKyAgICAgICAgICAgIHBzYV9rZXlfaWRfdCBpZCA9IE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfS0VZX0lEKCBzbG90LT5hdHRyLmlkICk7CiAgICAgICAgICAgICArK3N0YXRzLT5leHRlcm5hbF9zbG90czsKICAgICAgICAgICAgIGlmKCBpZCA+IHN0YXRzLT5tYXhfb3Blbl9leHRlcm5hbF9rZXlfaWQgKQogICAgICAgICAgICAgICAgIHN0YXRzLT5tYXhfb3Blbl9leHRlcm5hbF9rZXlfaWQgPSBpZDsKZGlmZiAtLWdpdCBhL2xpYnJhcnkvcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuaCBiL2xpYnJhcnkvcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuaAppbmRleCA2NzZhNzdlLi5jNmZlY2JiIDEwMDY0NAotLS0gYS9saWJyYXJ5L3BzYV9jcnlwdG9fc2xvdF9tYW5hZ2VtZW50LmgKKysrIGIvbGlicmFyeS9wc2FfY3J5cHRvX3Nsb3RfbWFuYWdlbWVudC5oCkBAIC0xMTMsMTQgKzExMywxMyBAQAogICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBhIGtleSdzIGRlY2xhcmVkIHBlcnNpc3RlbmNlIGxldmVsIGFuZCBrZXkgSUQKICAqIGF0dHJpYnV0ZXMgYXJlIHZhbGlkIGFuZCBrbm93biB0byB0aGUgUFNBIENvcmUgaW4gaXRzIGFjdHVhbCBjb25maWd1cmF0aW9uLgogICoKLSAqIFxwYXJhbVtpbl0gbGlmZXRpbWUgICAgVGhlIGtleSBsaWZldGltZSBhdHRyaWJ1dGUuCi0gKiBccGFyYW1baW5dIGtleV9pZCAgICAgIFRoZSBrZXkgSUQgYXR0cmlidXRlCisgKiBccGFyYW1baW5dIGxpZmV0aW1lICBUaGUga2V5IGxpZmV0aW1lIGF0dHJpYnV0ZS4KKyAqIFxwYXJhbVtpbl0ga2V5ICAgICAgIFRoZSBrZXkgaWRlbnRpZmllci4KICAqCiAgKiBccmV0dmFsICNQU0FfU1VDQ0VTUwogICogXHJldHZhbCAjUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKICAqLwogcHNhX3N0YXR1c190IHBzYV92YWxpZGF0ZV9rZXlfcGVyc2lzdGVuY2UoIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2Ffa2V5X2lkX3Qga2V5X2lkICk7Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgKTsKIAogI2VuZGlmIC8qIFBTQV9DUllQVE9fU0xPVF9NQU5BR0VNRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2xpYnJhcnkvcHNhX2NyeXB0b19zdG9yYWdlLmMgYi9saWJyYXJ5L3BzYV9jcnlwdG9fc3RvcmFnZS5jCmluZGV4IDEwM2M5YmIuLjJhYjU5MDMgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvcHNhX2NyeXB0b19zdG9yYWdlLmMKKysrIGIvbGlicmFyeS9wc2FfY3J5cHRvX3N0b3JhZ2UuYwpAQCAtNTUsMjcgKzU1LDI3IEBACiAvKiBLZXkgc3RvcmFnZSAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIERldGVybWluZSBhIGZpbGUgbmFtZSAoSVRTIGZpbGUgaWRlbnRpZmllcikgZm9yIHRoZSBnaXZlbiBrZXkgZmlsZQotICogaWRlbnRpZmllci4gVGhlIGZpbGUgbmFtZSBtdXN0IGJlIGRpc3RpbmN0IGZyb20gYW55IGZpbGUgdGhhdCBpcyB1c2VkCi0gKiBmb3IgYSBwdXJwb3NlIG90aGVyIHRoYW4gc3RvcmluZyBhIGtleS4gQ3VycmVudGx5LCB0aGUgb25seSBzdWNoIGZpbGUKLSAqIGlzIHRoZSByYW5kb20gc2VlZCBmaWxlIHdob3NlIG5hbWUgaXMgUFNBX0NSWVBUT19JVFNfUkFORE9NX1NFRURfVUlECi0gKiBhbmQgd2hvc2UgdmFsdWUgaXMgMHhGRkZGRkY1Mi4gKi8KLXN0YXRpYyBwc2Ffc3RvcmFnZV91aWRfdCBwc2FfaXRzX2lkZW50aWZpZXJfb2Zfc2xvdCggcHNhX2tleV9maWxlX2lkX3QgZmlsZV9pZCApCisvKiBEZXRlcm1pbmUgYSBmaWxlIG5hbWUgKElUUyBmaWxlIGlkZW50aWZpZXIpIGZvciB0aGUgZ2l2ZW4ga2V5IGlkZW50aWZpZXIuCisgKiBUaGUgZmlsZSBuYW1lIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbnkgZmlsZSB0aGF0IGlzIHVzZWQgZm9yIGEgcHVycG9zZQorICogb3RoZXIgdGhhbiBzdG9yaW5nIGEga2V5LiBDdXJyZW50bHksIHRoZSBvbmx5IHN1Y2ggZmlsZSBpcyB0aGUgcmFuZG9tIHNlZWQKKyAqIGZpbGUgd2hvc2UgbmFtZSBpcyBQU0FfQ1JZUFRPX0lUU19SQU5ET01fU0VFRF9VSUQgYW5kIHdob3NlIHZhbHVlIGlzCisgKiAweEZGRkZGRjUyLiAqLworc3RhdGljIHBzYV9zdG9yYWdlX3VpZF90IHBzYV9pdHNfaWRlbnRpZmllcl9vZl9zbG90KCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXkgKQogewotI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9GSUxFX0lEX0VOQ09ERVNfT1dORVIpICYmIFwKLSAgICBkZWZpbmVkKFBTQV9DUllQVE9fU0VDVVJFKQorI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSKQogICAgIC8qIEVuY29kZSB0aGUgb3duZXIgaW4gdGhlIHVwcGVyIDMyIGJpdHMuIFRoaXMgbWVhbnMgdGhhdCBpZgogICAgICAqIG93bmVyIHZhbHVlcyBhcmUgbm9uemVybyAoYXMgdGhleSBhcmUgb24gYSBQU0EgcGxhdGZvcm0pLAogICAgICAqIG5vIGtleSBmaWxlIHdpbGwgZXZlciBoYXZlIGEgdmFsdWUgbGVzcyB0aGFuIDB4MTAwMDAwMDAwLCBzbwogICAgICAqIHRoZSB3aG9sZSByYW5nZSAwLi4weGZmZmZmZmZmIGlzIGF2YWlsYWJsZSBmb3Igbm9uLWtleSBmaWxlcy4gKi8KLSAgICB1aW50MzJfdCB1bnNpZ25lZF9vd25lciA9ICh1aW50MzJfdCkgZmlsZV9pZC5vd25lcjsKLSAgICByZXR1cm4oICh1aW50NjRfdCkgdW5zaWduZWRfb3duZXIgPDwgMzIgfCBmaWxlX2lkLmtleV9pZCApOworICAgIHVpbnQzMl90IHVuc2lnbmVkX293bmVyX2lkID0gTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9PV05FUl9JRCgga2V5ICk7CisgICAgcmV0dXJuKCAgKCAodWludDY0X3QpIHVuc2lnbmVkX293bmVyX2lkIDw8IDMyICkgfAorICAgICAgICAgICAgIE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfS0VZX0lEKCBrZXkgKSApOwogI2Vsc2UKICAgICAvKiBVc2UgdGhlIGtleSBpZCBkaXJlY3RseSBhcyBhIGZpbGUgbmFtZS4KLSAgICAgKiBwc2FfaXNfa2V5X2ZpbGVfaWRfdmFsaWQoKSBpbiBwc2FfY3J5cHRvX3Nsb3RfbWFuYWdlbWVudC5jCisgICAgICogcHNhX2lzX2tleV9pZF92YWxpZCgpIGluIHBzYV9jcnlwdG9fc2xvdF9tYW5hZ2VtZW50LmMKICAgICAgKiBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCBrZXkgaWRlbnRpZmllcnMgZG8gbm90IGhhdmUgYQogICAgICAqIHZhbHVlIHRoYXQgaXMgcmVzZXJ2ZWQgZm9yIG5vbi1rZXkgZmlsZXMuICovCi0gICAgcmV0dXJuKCBmaWxlX2lkICk7CisgICAgcmV0dXJuKCBrZXkgKTsKICNlbmRpZgogfQogCkBAIC05NCw5ICs5NCw4IEBACiAgKiBccmV0dmFsIFBTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkUKICAqIFxyZXR2YWwgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUCiAgKi8KLXN0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX2NyeXB0b19zdG9yYWdlX2xvYWQoIGNvbnN0IHBzYV9rZXlfZmlsZV9pZF90IGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9zaXplICkKK3N0YXRpYyBwc2Ffc3RhdHVzX3QgcHNhX2NyeXB0b19zdG9yYWdlX2xvYWQoCisgICAgY29uc3QgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5LCB1aW50OF90ICpkYXRhLCBzaXplX3QgZGF0YV9zaXplICkKIHsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwogICAgIHBzYV9zdG9yYWdlX3VpZF90IGRhdGFfaWRlbnRpZmllciA9IHBzYV9pdHNfaWRlbnRpZmllcl9vZl9zbG90KCBrZXkgKTsKQEAgLTExNCw3ICsxMTMsNyBAQAogICAgIHJldHVybiggc3RhdHVzICk7CiB9CiAKLWludCBwc2FfaXNfa2V5X3ByZXNlbnRfaW5fc3RvcmFnZSggY29uc3QgcHNhX2tleV9maWxlX2lkX3Qga2V5ICkKK2ludCBwc2FfaXNfa2V5X3ByZXNlbnRfaW5fc3RvcmFnZSggY29uc3QgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5ICkKIHsKICAgICBwc2Ffc3RhdHVzX3QgcmV0OwogICAgIHBzYV9zdG9yYWdlX3VpZF90IGRhdGFfaWRlbnRpZmllciA9IHBzYV9pdHNfaWRlbnRpZmllcl9vZl9zbG90KCBrZXkgKTsKQEAgLTE0Myw3ICsxNDIsNyBAQAogICogXHJldHZhbCBQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCiAgKiBccmV0dmFsIFBTQV9FUlJPUl9BTFJFQURZX0VYSVNUUwogICovCi1zdGF0aWMgcHNhX3N0YXR1c190IHBzYV9jcnlwdG9fc3RvcmFnZV9zdG9yZSggY29uc3QgcHNhX2tleV9maWxlX2lkX3Qga2V5LAorc3RhdGljIHBzYV9zdGF0dXNfdCBwc2FfY3J5cHRvX3N0b3JhZ2Vfc3RvcmUoIGNvbnN0IG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhX2xlbmd0aCApCiB7CkBAIC0xODQsNyArMTgzLDcgQEAKICAgICByZXR1cm4oIHN0YXR1cyApOwogfQogCi1wc2Ffc3RhdHVzX3QgcHNhX2Rlc3Ryb3lfcGVyc2lzdGVudF9rZXkoIGNvbnN0IHBzYV9rZXlfZmlsZV9pZF90IGtleSApCitwc2Ffc3RhdHVzX3QgcHNhX2Rlc3Ryb3lfcGVyc2lzdGVudF9rZXkoIGNvbnN0IG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSApCiB7CiAgICAgcHNhX3N0YXR1c190IHJldDsKICAgICBwc2Ffc3RvcmFnZV91aWRfdCBkYXRhX2lkZW50aWZpZXIgPSBwc2FfaXRzX2lkZW50aWZpZXJfb2Zfc2xvdCgga2V5ICk7CkBAIC0yMTUsNyArMjE0LDcgQEAKICAqIFxyZXR2YWwgUFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQogICovCiBzdGF0aWMgcHNhX3N0YXR1c190IHBzYV9jcnlwdG9fc3RvcmFnZV9nZXRfZGF0YV9sZW5ndGgoCi0gICAgY29uc3QgcHNhX2tleV9maWxlX2lkX3Qga2V5LAorICAgIGNvbnN0IG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSwKICAgICBzaXplX3QgKmRhdGFfbGVuZ3RoICkKIHsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwpAQCAtMjU0LDYgKzI1MywyNSBAQAogfQogI2VuZGlmCiAKKy8qCisgKiAxNi1iaXQgaW50ZWdlciBtYW5pcHVsYXRpb24gbWFjcm9zIChsaXR0bGUgZW5kaWFuKQorICovCisjaWZuZGVmIEdFVF9VSU5UMTZfTEUKKyNkZWZpbmUgR0VUX1VJTlQxNl9MRSggbiwgYiwgaSApICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKG4pID0gKCAodWludDE2X3QpIChiKVsoaSkgICAgXSAgICAgICApICAgICAgICAgICAgIFwKKyAgICAgICAgfCAoICh1aW50MTZfdCkgKGIpWyhpKSArIDFdIDw8ICA4ICk7ICAgICAgICAgICAgXAorfQorI2VuZGlmCisKKyNpZm5kZWYgUFVUX1VJTlQxNl9MRQorI2RlZmluZSBQVVRfVUlOVDE2X0xFKCBuLCBiLCBpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGIpWyhpKSAgICBdID0gKHVuc2lnbmVkIGNoYXIpICggKCAobikgICAgICAgKSAmIDB4RkYgKTsgICAgXAorICAgIChiKVsoaSkgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSAoICggKG4pID4+ICA4ICkgJiAweEZGICk7ICAgIFwKK30KKyNlbmRpZgorCiAvKioKICAqIFBlcnNpc3RlbnQga2V5IHN0b3JhZ2UgbWFnaWMgaGVhZGVyLgogICovCkBAIC0yNjQsOSArMjgyLDggQEAKICAgICB1aW50OF90IG1hZ2ljW1BTQV9LRVlfU1RPUkFHRV9NQUdJQ19IRUFERVJfTEVOR1RIXTsKICAgICB1aW50OF90IHZlcnNpb25bNF07CiAgICAgdWludDhfdCBsaWZldGltZVtzaXplb2YoIHBzYV9rZXlfbGlmZXRpbWVfdCApXTsKLSAgICB1aW50OF90IHR5cGVbNF07IC8qIFNpemU9NCBmb3IgYSAyLWJ5dGUgdHlwZSB0byBrZWVwIHRoZSBzdHJ1Y3R1cmUgbW9yZQotICAgICAgICAgICAgICAgICAgICAgICogcmVndWxhciBhbmQgYWxpZ25lZCBhbmQgdG8gbWFrZSBwb3RlbnRpYWwgZnV0dXJlCi0gICAgICAgICAgICAgICAgICAgICAgKiBleHRlbnNpYmlsaXR5IGVhc2llci4gKi8KKyAgICB1aW50OF90IHR5cGVbMl07CisgICAgdWludDhfdCBiaXRzWzJdOwogICAgIHVpbnQ4X3QgcG9saWN5W3NpemVvZiggcHNhX2tleV9wb2xpY3lfdCApXTsKICAgICB1aW50OF90IGRhdGFfbGVuWzRdOwogICAgIHVpbnQ4X3Qga2V5X2RhdGFbXTsKQEAgLTI4Myw3ICszMDAsOCBAQAogICAgIG1lbWNweSggc3RvcmFnZV9mb3JtYXQtPm1hZ2ljLCBQU0FfS0VZX1NUT1JBR0VfTUFHSUNfSEVBREVSLCBQU0FfS0VZX1NUT1JBR0VfTUFHSUNfSEVBREVSX0xFTkdUSCApOwogICAgIFBVVF9VSU5UMzJfTEUoIDAsIHN0b3JhZ2VfZm9ybWF0LT52ZXJzaW9uLCAwICk7CiAgICAgUFVUX1VJTlQzMl9MRSggYXR0ci0+bGlmZXRpbWUsIHN0b3JhZ2VfZm9ybWF0LT5saWZldGltZSwgMCApOwotICAgIFBVVF9VSU5UMzJfTEUoICh1aW50MzJfdCkgYXR0ci0+dHlwZSwgc3RvcmFnZV9mb3JtYXQtPnR5cGUsIDAgKTsKKyAgICBQVVRfVUlOVDE2X0xFKCAodWludDE2X3QpIGF0dHItPnR5cGUsIHN0b3JhZ2VfZm9ybWF0LT50eXBlLCAwICk7CisgICAgUFVUX1VJTlQxNl9MRSggKHVpbnQxNl90KSBhdHRyLT5iaXRzLCBzdG9yYWdlX2Zvcm1hdC0+Yml0cywgMCApOwogICAgIFBVVF9VSU5UMzJfTEUoIGF0dHItPnBvbGljeS51c2FnZSwgc3RvcmFnZV9mb3JtYXQtPnBvbGljeSwgMCApOwogICAgIFBVVF9VSU5UMzJfTEUoIGF0dHItPnBvbGljeS5hbGcsIHN0b3JhZ2VfZm9ybWF0LT5wb2xpY3ksIHNpemVvZiggdWludDMyX3QgKSApOwogICAgIFBVVF9VSU5UMzJfTEUoIGF0dHItPnBvbGljeS5hbGcyLCBzdG9yYWdlX2Zvcm1hdC0+cG9saWN5LCAyICogc2l6ZW9mKCB1aW50MzJfdCApICk7CkBAIC0zMDksNyArMzI3LDYgQEAKICAgICBjb25zdCBwc2FfcGVyc2lzdGVudF9rZXlfc3RvcmFnZV9mb3JtYXQgKnN0b3JhZ2VfZm9ybWF0ID0KICAgICAgICAgKGNvbnN0IHBzYV9wZXJzaXN0ZW50X2tleV9zdG9yYWdlX2Zvcm1hdCAqKXN0b3JhZ2VfZGF0YTsKICAgICB1aW50MzJfdCB2ZXJzaW9uOwotICAgIHVpbnQzMl90IHR5cGU7CiAKICAgICBpZiggc3RvcmFnZV9kYXRhX2xlbmd0aCA8IHNpemVvZigqc3RvcmFnZV9mb3JtYXQpICkKICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFICk7CkBAIC0zNDAsMTEgKzM1Nyw4IEBACiAgICAgfQogCiAgICAgR0VUX1VJTlQzMl9MRSggYXR0ci0+bGlmZXRpbWUsIHN0b3JhZ2VfZm9ybWF0LT5saWZldGltZSwgMCApOwotICAgIEdFVF9VSU5UMzJfTEUoIHR5cGUsIHN0b3JhZ2VfZm9ybWF0LT50eXBlLCAwICk7Ci0gICAgaWYoIHR5cGUgPD0gKHBzYV9rZXlfdHlwZV90KSAtMSApCi0gICAgICAgIGF0dHItPnR5cGUgPSAocHNhX2tleV90eXBlX3QpIHR5cGU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkUgKTsKKyAgICBHRVRfVUlOVDE2X0xFKCBhdHRyLT50eXBlLCBzdG9yYWdlX2Zvcm1hdC0+dHlwZSwgMCApOworICAgIEdFVF9VSU5UMTZfTEUoIGF0dHItPmJpdHMsIHN0b3JhZ2VfZm9ybWF0LT5iaXRzLCAwICk7CiAgICAgR0VUX1VJTlQzMl9MRSggYXR0ci0+cG9saWN5LnVzYWdlLCBzdG9yYWdlX2Zvcm1hdC0+cG9saWN5LCAwICk7CiAgICAgR0VUX1VJTlQzMl9MRSggYXR0ci0+cG9saWN5LmFsZywgc3RvcmFnZV9mb3JtYXQtPnBvbGljeSwgc2l6ZW9mKCB1aW50MzJfdCApICk7CiAgICAgR0VUX1VJTlQzMl9MRSggYXR0ci0+cG9saWN5LmFsZzIsIHN0b3JhZ2VfZm9ybWF0LT5wb2xpY3ksIDIgKiBzaXplb2YoIHVpbnQzMl90ICkgKTsKQEAgLTM5NCw3ICs0MDgsNyBAQAogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXMgPSBQU0FfU1VDQ0VTUzsKICAgICB1aW50OF90ICpsb2FkZWRfZGF0YTsKICAgICBzaXplX3Qgc3RvcmFnZV9kYXRhX2xlbmd0aCA9IDA7Ci0gICAgcHNhX2tleV9pZF90IGtleSA9IGF0dHItPmlkOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSA9IGF0dHItPmlkOwogCiAgICAgc3RhdHVzID0gcHNhX2NyeXB0b19zdG9yYWdlX2dldF9kYXRhX2xlbmd0aCgga2V5LCAmc3RvcmFnZV9kYXRhX2xlbmd0aCApOwogICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQpkaWZmIC0tZ2l0IGEvbGlicmFyeS9wc2FfY3J5cHRvX3N0b3JhZ2UuaCBiL2xpYnJhcnkvcHNhX2NyeXB0b19zdG9yYWdlLmgKaW5kZXggZGViYzc0Mi4uM2RlZjFiNSAxMDA2NDQKLS0tIGEvbGlicmFyeS9wc2FfY3J5cHRvX3N0b3JhZ2UuaAorKysgYi9saWJyYXJ5L3BzYV9jcnlwdG9fc3RvcmFnZS5oCkBAIC03Miw3ICs3Miw3IEBACiAgKiBccmV0dmFsIDEKICAqICAgICAgICAgUGVyc2lzdGVudCBkYXRhIHByZXNlbnQgZm9yIHNsb3QgbnVtYmVyCiAgKi8KLWludCBwc2FfaXNfa2V5X3ByZXNlbnRfaW5fc3RvcmFnZSggY29uc3QgcHNhX2tleV9maWxlX2lkX3Qga2V5ICk7CitpbnQgcHNhX2lzX2tleV9wcmVzZW50X2luX3N0b3JhZ2UoIGNvbnN0IG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSApOwogCiAvKioKICAqIFxicmllZiBGb3JtYXQga2V5IGRhdGEgYW5kIG1ldGFkYXRhIGFuZCBzYXZlIHRvIGEgbG9jYXRpb24gZm9yIGdpdmVuIGtleQpAQCAtODEsOSArODEsMTAgQEAKICAqIFRoaXMgZnVuY3Rpb24gZm9ybWF0cyB0aGUga2V5IGRhdGEgYW5kIG1ldGFkYXRhIGFuZCBzYXZlcyBpdCB0byBhCiAgKiBwZXJzaXN0ZW50IHN0b3JhZ2UgYmFja2VuZC4gVGhlIHN0b3JhZ2UgbG9jYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGUKICAqIGtleSBzbG90IG11c3QgYmUgZW1wdHksIG90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIHdpbGwgZmFpbC4gVGhpcyBmdW5jdGlvbgotICogc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBwc2FfaW1wb3J0X2tleV9pbnRvX3Nsb3QoKSB0byBlbnN1cmUgdGhlCisgKiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGxvYWRpbmcgdGhlIGtleSBpbnRvIGFuIGludGVybmFsIHNsb3QgdG8gZW5zdXJlIHRoZQogICogcGVyc2lzdGVudCBrZXkgaXMgbm90IHNhdmVkIGludG8gYSBzdG9yYWdlIGxvY2F0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYW4KLSAqIGFscmVhZHkgb2NjdXBpZWQgbm9uLXBlcnNpc3RlbnQga2V5LCBhcyB3ZWxsIGFzIHZhbGlkYXRpbmcgdGhlIGtleSBkYXRhLgorICogYWxyZWFkeSBvY2N1cGllZCBub24tcGVyc2lzdGVudCBrZXksIGFzIHdlbGwgYXMgZW5zdXJpbmcgdGhlIGtleSBkYXRhIGlzCisgKiB2YWxpZGF0ZWQuCiAgKgogICoKICAqIFxwYXJhbVtpbl0gYXR0ciAgICAgICAgICBUaGUgYXR0cmlidXRlcyBvZiB0aGUga2V5IHRvIHNhdmUuCkBAIC0xNDEsNyArMTQyLDcgQEAKICAqICAgICAgICAgb3IgdGhlIGtleSBkaWQgbm90IGV4aXN0LgogICogXHJldHZhbCBQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCiAgKi8KLXBzYV9zdGF0dXNfdCBwc2FfZGVzdHJveV9wZXJzaXN0ZW50X2tleSggY29uc3QgcHNhX2tleV9maWxlX2lkX3Qga2V5ICk7Citwc2Ffc3RhdHVzX3QgcHNhX2Rlc3Ryb3lfcGVyc2lzdGVudF9rZXkoIGNvbnN0IG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleSApOwogCiAvKioKICAqIFxicmllZiBGcmVlIHRoZSB0ZW1wb3JhcnkgYnVmZmVyIGFsbG9jYXRlZCBieSBwc2FfbG9hZF9wZXJzaXN0ZW50X2tleSgpLgpAQCAtMjkyLDcgKzI5Myw3IEBACiAgICAgICAgIHVpbnQxNl90IHVudXNlZDE7CiAgICAgICAgIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZTsKICAgICAgICAgcHNhX2tleV9zbG90X251bWJlcl90IHNsb3Q7Ci0gICAgICAgIHBzYV9rZXlfaWRfdCBpZDsKKyAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQ7CiAgICAgfSBrZXk7CiB9IHBzYV9jcnlwdG9fdHJhbnNhY3Rpb25fdDsKIApkaWZmIC0tZ2l0IGEvbGlicmFyeS9yaXBlbWQxNjAuYyBiL2xpYnJhcnkvcmlwZW1kMTYwLmMKaW5kZXggODMwZjYxYi4uNjAzYjZiYSAxMDA2NDQKLS0tIGEvbGlicmFyeS9yaXBlbWQxNjAuYworKysgYi9saWJyYXJ5L3JpcGVtZDE2MC5jCkBAIC00NzgsOCArNDc4LDcgQEAKICAgICB7ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIgfSwKICAgICB7ICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIgfSwKICAgICB7ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIgfSwKLSAgICB7ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMiIKLSAgICAgICIzNDU2Nzg5MDEyMzQ1Njc4OTAiIH0sCisgICAgeyAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiIH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IHJpcGVtZDE2MF90ZXN0X3N0cmxlbltURVNUU10gPQpkaWZmIC0tZ2l0IGEvbGlicmFyeS9yc2EuYyBiL2xpYnJhcnkvcnNhLmMKaW5kZXggYWNjYzViMi4uZDZhYmQ2NSAxMDA2NDQKLS0tIGEvbGlicmFyeS9yc2EuYworKysgYi9saWJyYXJ5L3JzYS5jCkBAIC03NzYsNiArNzc2LDkgQEAKICAgICAgICAgICAgICAgICAgaW50ICgqZl9ybmcpKHZvaWQgKiwgdW5zaWduZWQgY2hhciAqLCBzaXplX3QpLCB2b2lkICpwX3JuZyApCiB7CiAgICAgaW50IHJldCwgY291bnQgPSAwOworICAgIG1iZWR0bHNfbXBpIFI7CisKKyAgICBtYmVkdGxzX21waV9pbml0KCAmUiApOwogCiAgICAgaWYoIGN0eC0+VmYucCAhPSBOVUxMICkKICAgICB7CkBAIC03OTEsMTggKzc5NCw0MCBAQAogICAgIC8qIFVuYmxpbmRpbmcgdmFsdWU6IFZmID0gcmFuZG9tIG51bWJlciwgaW52ZXJ0aWJsZSBtb2QgTiAqLwogICAgIGRvIHsKICAgICAgICAgaWYoIGNvdW50KysgPiAxMCApCi0gICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1JTQV9STkdfRkFJTEVEICk7CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldCA9IE1CRURUTFNfRVJSX1JTQV9STkdfRkFJTEVEOworICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9CiAKICAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9maWxsX3JhbmRvbSggJmN0eC0+VmYsIGN0eC0+bGVuIC0gMSwgZl9ybmcsIHBfcm5nICkgKTsKLSAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9nY2QoICZjdHgtPlZpLCAmY3R4LT5WZiwgJmN0eC0+TiApICk7Ci0gICAgfSB3aGlsZSggbWJlZHRsc19tcGlfY21wX2ludCggJmN0eC0+VmksIDEgKSAhPSAwICk7CiAKLSAgICAvKiBCbGluZGluZyB2YWx1ZTogVmkgPSAgVmZeKC1lKSBtb2QgTiAqLwotICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC0+VmksICZjdHgtPlZmLCAmY3R4LT5OICkgKTsKKyAgICAgICAgLyogQ29tcHV0ZSBWZl4tMSBhcyBSICogKFIgVmYpXi0xIHRvIGF2b2lkIGxlYWtzIGZyb20gaW52X21vZC4gKi8KKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9maWxsX3JhbmRvbSggJlIsIGN0eC0+bGVuIC0gMSwgZl9ybmcsIHBfcm5nICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmY3R4LT5WaSwgJmN0eC0+VmYsICZSICkgKTsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tb2RfbXBpKCAmY3R4LT5WaSwgJmN0eC0+VmksICZjdHgtPk4gKSApOworCisgICAgICAgIC8qIEF0IHRoaXMgcG9pbnQsIFZpIGlzIGludmVydGlibGUgbW9kIE4gaWYgYW5kIG9ubHkgaWYgYm90aCBWZiBhbmQgUgorICAgICAgICAgKiBhcmUgaW52ZXJ0aWJsZSBtb2QgTi4gSWYgb25lIG9mIHRoZW0gaXNuJ3QsIHdlIGRvbid0IG5lZWQgdG8ga25vdworICAgICAgICAgKiB3aGljaCBvbmUsIHdlIGp1c3QgbG9vcCBhbmQgY2hvb3NlIG5ldyB2YWx1ZXMgZm9yIGJvdGggb2YgdGhlbS4KKyAgICAgICAgICogKEVhY2ggaXRlcmF0aW9uIHN1Y2NlZWRzIHdpdGggb3ZlcndoZWxtaW5nIHByb2JhYmlsaXR5LikgKi8KKyAgICAgICAgcmV0ID0gbWJlZHRsc19tcGlfaW52X21vZCggJmN0eC0+VmksICZjdHgtPlZpLCAmY3R4LT5OICk7CisgICAgICAgIGlmKCByZXQgIT0gMCAmJiByZXQgIT0gTUJFRFRMU19FUlJfTVBJX05PVF9BQ0NFUFRBQkxFICkKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIH0gd2hpbGUoIHJldCA9PSBNQkVEVExTX0VSUl9NUElfTk9UX0FDQ0VQVEFCTEUgKTsKKworICAgIC8qIEZpbmlzaCB0aGUgY29tcHV0YXRpb24gb2YgVmZeLTEgPSBSICogKFIgVmYpXi0xICovCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9tdWxfbXBpKCAmY3R4LT5WaSwgJmN0eC0+VmksICZSICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX21vZF9tcGkoICZjdHgtPlZpLCAmY3R4LT5WaSwgJmN0eC0+TiApICk7CisKKyAgICAvKiBCbGluZGluZyB2YWx1ZTogVmkgPSBWZl4oLWUpIG1vZCBOCisgICAgICogKFZpIGFscmVhZHkgY29udGFpbnMgVmZeLTEgYXQgdGhpcyBwb2ludCkgKi8KICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX2V4cF9tb2QoICZjdHgtPlZpLCAmY3R4LT5WaSwgJmN0eC0+RSwgJmN0eC0+TiwgJmN0eC0+Uk4gKSApOwogCiAKIGNsZWFudXA6CisgICAgbWJlZHRsc19tcGlfZnJlZSggJlIgKTsKKwogICAgIHJldHVybiggcmV0ICk7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYnJhcnkvc2hhNTEyLmMgYi9saWJyYXJ5L3NoYTUxMi5jCmluZGV4IDgwMjE5ZDQuLmU4ODExOTggMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvc2hhNTEyLmMKKysrIGIvbGlicmFyeS9zaGE1MTIuYwpAQCAtNTE2LDggKzUxNiw3IEBACiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfdGVzdF9idWZbM11bMTEzXSA9CiB7CiAgICAgeyAiYWJjIiB9LAotICAgIHsgImFiY2RlZmdoYmNkZWZnaGljZGVmZ2hpamRlZmdoaWprZWZnaGlqa2xmZ2hpamtsbWdoaWprbG1uIgotICAgICAgImhpamtsbW5vaWprbG1ub3Bqa2xtbm9wcWtsbW5vcHFybG1ub3BxcnNtbm9wcXJzdG5vcHFyc3R1IiB9LAorICAgIHsgImFiY2RlZmdoYmNkZWZnaGljZGVmZ2hpamRlZmdoaWprZWZnaGlqa2xmZ2hpamtsbWdoaWprbG1uaGlqa2xtbm9pamtsbW5vcGprbG1ub3Bxa2xtbm9wcXJsbW5vcHFyc21ub3BxcnN0bm9wcXJzdHUiIH0sCiAgICAgeyAiIiB9CiB9OwogCmRpZmYgLS1naXQgYS9saWJyYXJ5L3NzbF9jbGkuYyBiL2xpYnJhcnkvc3NsX2NsaS5jCmluZGV4IDA4M2I3MjAuLjc2YmU4YWIgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvc3NsX2NsaS5jCisrKyBiL2xpYnJhcnkvc3NsX2NsaS5jCkBAIC03NTYsNiArNzU2LDEyNiBAQAogfQogI2VuZGlmIC8qIE1CRURUTFNfU1NMX0FMUE4gKi8KIAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorc3RhdGljIGludCBzc2xfd3JpdGVfdXNlX3NydHBfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4gKQoreworICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisgICAgc2l6ZV90IHByb3RlY3Rpb25fcHJvZmlsZXNfaW5kZXggPSAwLCBleHRfbGVuID0gMDsKKyAgICB1aW50MTZfdCBta2lfbGVuID0gMCwgcHJvZmlsZV92YWx1ZSA9IDA7CisKKyAgICAqb2xlbiA9IDA7CisKKyAgICBpZiggKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCAhPSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKSB8fAorICAgICAgICAoIHNzbC0+Y29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdCA9PSBOVUxMICkgfHwKKyAgICAgICAgKCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RfbGVuID09IDAgKSApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICAvKiBSRkMgNTc2NCBzZWN0aW9uIDQuMS4xCisgICAgICogdWludDggU1JUUFByb3RlY3Rpb25Qcm9maWxlWzJdOworICAgICAqCisgICAgICogc3RydWN0IHsKKyAgICAgKiAgIFNSVFBQcm90ZWN0aW9uUHJvZmlsZXMgU1JUUFByb3RlY3Rpb25Qcm9maWxlczsKKyAgICAgKiAgIG9wYXF1ZSBzcnRwX21raTwwLi4yNTU+OworICAgICAqIH0gVXNlU1JUUERhdGE7CisgICAgICogU1JUUFByb3RlY3Rpb25Qcm9maWxlIFNSVFBQcm90ZWN0aW9uUHJvZmlsZXM8Mi4uMl4xNi0xPjsKKyAgICAgKi8KKyAgICBpZiggc3NsLT5jb25mLT5kdGxzX3NydHBfbWtpX3N1cHBvcnQgPT0gTUJFRFRMU19TU0xfRFRMU19TUlRQX01LSV9TVVBQT1JURUQgKQorICAgIHsKKyAgICAgICAgbWtpX2xlbiA9IHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX2xlbjsKKyAgICB9CisgICAgLyogRXh0ZW5zaW9uIGxlbmd0aCA9IDIgYnl0ZXMgZm9yIHByb2ZpbGVzIGxlbmd0aCwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5kdGxzX3NydHBfcHJvZmlsZV9saXN0X2xlbiAqIDIgKGVhY2ggcHJvZmlsZSBpcyAyIGJ5dGVzIGxlbmd0aCApLAorICAgICAqICAgICAgICAgICAgICAgICAgICAxIGJ5dGUgZm9yIHNydHBfbWtpIHZlY3RvciBsZW5ndGggYW5kIHRoZSBta2lfbGVuIHZhbHVlCisgICAgICovCisgICAgZXh0X2xlbiA9IDIgKyAyICogKCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RfbGVuICkgKyAxICsgbWtpX2xlbjsKKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiApICk7CisKKyAgICAvKiBDaGVjayB0aGVyZSBpcyByb29tIGluIHRoZSBidWZmZXIgZm9yIHRoZSBleHRlbnNpb24gKyA0IGJ5dGVzCisgICAgICogLSB0aGUgZXh0ZW5zaW9uIHRhZyAoMiBieXRlcykKKyAgICAgKiAtIHRoZSBleHRlbnNpb24gbGVuZ3RoICgyIGJ5dGVzKQorICAgICAqLworICAgIE1CRURUTFNfU1NMX0NIS19CVUZfUFRSKCBwLCBlbmQsIGV4dF9sZW4gKyA0ICk7CisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoIE1CRURUTFNfVExTX0VYVF9VU0VfU1JUUCA+PiA4ICkgJiAweEZGICk7CisgICAgKnArKyA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfVVNFX1NSVFAgICAgICApICYgMHhGRiApOworCisKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoICggZXh0X2xlbiAmIDB4RkYwMCApID4+IDggKSAmIDB4RkYgKTsKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCBleHRfbGVuICYgMHhGRiApOworCisgICAgLyogcHJvdGVjdGlvbiBwcm9maWxlIGxlbmd0aDogMiooc3NsLT5jb25mLT5kdGxzX3NydHBfcHJvZmlsZV9saXN0X2xlbikgKi8KKyAgICAvKiBtaWNyby1vcHRpbWl6YXRpb246CisgICAgICogdGhlIGxpc3Qgc2l6ZSBpcyBsaW1pdGVkIHRvIE1CRURUTFNfVExTX1NSVFBfTUFYX1BST0ZJTEVfTElTVF9MRU5HVEgKKyAgICAgKiB3aGljaCBpcyBsb3dlciB0aGFuIDEyNywgc28gdGhlIHVwcGVyIGJ5dGUgb2YgdGhlIGxlbmd0aCBpcyBhbHdheXMgMAorICAgICAqIEZvciB0aGUgZG9jdW1lbnRhdGlvbiwgdGhlIG1vcmUgZ2VuZXJpYyBjb2RlIGlzIGxlZnQgaW4gY29tbWVudHMKKyAgICAgKiAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCAoICggMiAqIHNzbC0+Y29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdF9sZW4gKQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgPj4gOCApICYgMHhGRiApOworICAgICAqLworICAgICpwKysgPSAwOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggMiAqIHNzbC0+Y29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdF9sZW4gKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgMHhGRiApOworCisgICAgZm9yKCBwcm90ZWN0aW9uX3Byb2ZpbGVzX2luZGV4PTA7CisgICAgICAgICBwcm90ZWN0aW9uX3Byb2ZpbGVzX2luZGV4IDwgc3NsLT5jb25mLT5kdGxzX3NydHBfcHJvZmlsZV9saXN0X2xlbjsKKyAgICAgICAgIHByb3RlY3Rpb25fcHJvZmlsZXNfaW5kZXgrKyApCisgICAgeworICAgICAgICBwcm9maWxlX3ZhbHVlID0gbWJlZHRsc19zc2xfY2hlY2tfc3J0cF9wcm9maWxlX3ZhbHVlCisgICAgICAgICAgICAgICAgKCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RbcHJvdGVjdGlvbl9wcm9maWxlc19pbmRleF0gKTsKKyAgICAgICAgaWYoIHByb2ZpbGVfdmFsdWUgIT0gTUJFRFRMU19UTFNfU1JUUF9VTlNFVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic3NsX3dyaXRlX3VzZV9zcnRwX2V4dCwgYWRkIHByb2ZpbGU6ICUwNHgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVfdmFsdWUgKSApOworICAgICAgICAgICAgKnArKyA9ICggKCBwcm9maWxlX3ZhbHVlID4+IDggKSAmIDB4RkYgKTsKKyAgICAgICAgICAgICpwKysgPSAoIHByb2ZpbGVfdmFsdWUgJiAweEZGICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTm90ZTogd2Ugc2hhbGwgbmV2ZXIgYXJyaXZlIGhlcmUgYXMgcHJvdGVjdGlvbiBwcm9maWxlcworICAgICAgICAgICAgICogaXMgY2hlY2tlZCBieSBtYmVkdGxzX3NzbF9jb25mX2R0bHNfc3J0cF9wcm90ZWN0aW9uX3Byb2ZpbGVzIGZ1bmN0aW9uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywKKyAgICAgICAgICAgICAgICAgICAgKCAiY2xpZW50IGhlbGxvLCAiCisgICAgICAgICAgICAgICAgICAgICAgImlsbGVnYWwgRFRMUy1TUlRQIHByb3RlY3Rpb24gcHJvZmlsZSAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgc3NsLT5jb25mLT5kdGxzX3NydHBfcHJvZmlsZV9saXN0W3Byb3RlY3Rpb25fcHJvZmlsZXNfaW5kZXhdCisgICAgICAgICAgICAgICAgICAgICkgKTsKKyAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRCApOworICAgICAgICB9CisgICAgfQorCisgICAgKnArKyA9IG1raV9sZW4gJiAweEZGOworCisgICAgaWYoIG1raV9sZW4gIT0gMCApCisgICAgeworICAgICAgICBtZW1jcHkoIHAsIHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX3ZhbHVlLCBta2lfbGVuICk7CisgICAgICAgIC8qCisgICAgICAgICAqIEluY3JlbWVudCBwIHRvIHBvaW50IHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgcCArPSBta2lfbGVuOworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDMsICJzZW5kaW5nIG1raSIsICBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV9sZW4gKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHRvdGFsIGV4dGVuc2lvbiBsZW5ndGg6IGV4dGVuc2lvbiB0eXBlICgyIGJ5dGVzKQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICsgZXh0ZW5zaW9uIGxlbmd0aCAoMiBieXRlcykKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICArIHByb3RlY3Rpb24gcHJvZmlsZSBsZW5ndGggKDIgYnl0ZXMpCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgKyAyICogbnVtYmVyIG9mIHByb3RlY3Rpb24gcHJvZmlsZXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICArIHNydHBfbWtpIHZlY3RvciBsZW5ndGgoMSBieXRlKQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICsgbWtpIHZhbHVlCisgICAgICovCisgICAgKm9sZW4gPSBwIC0gYnVmOworCisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisKIC8qCiAgKiBHZW5lcmF0ZSByYW5kb20gYnl0ZXMgZm9yIENsaWVudEhlbGxvCiAgKi8KQEAgLTEyNzcsNiArMTM5NywxNiBAQAogICAgIGV4dF9sZW4gKz0gb2xlbjsKICNlbmRpZgogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCisgICAgaWYoICggcmV0ID0gc3NsX3dyaXRlX3VzZV9zcnRwX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLCAmb2xlbiApICkgIT0gMCApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19SRVQoIDEsICJzc2xfd3JpdGVfdXNlX3NydHBfZXh0IiwgcmV0ICk7CisgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgfQorICAgIGV4dF9sZW4gKz0gb2xlbjsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9TRVNTSU9OX1RJQ0tFVFMpCiAgICAgaWYoICggcmV0ID0gc3NsX3dyaXRlX3Nlc3Npb25fdGlja2V0X2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLCAmb2xlbiApICkgIT0gMCApCkBAIC0xNzEwLDYgKzE4NDAsMTIzIEBACiB9CiAjZW5kaWYgLyogTUJFRFRMU19TU0xfQUxQTiAqLwogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCitzdGF0aWMgaW50IHNzbF9wYXJzZV91c2Vfc3J0cF9leHQoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICkKK3sKKyAgICBtYmVkdGxzX3NzbF9zcnRwX3Byb2ZpbGUgc2VydmVyX3Byb3RlY3Rpb24gPSBNQkVEVExTX1RMU19TUlRQX1VOU0VUOworICAgIHNpemVfdCBpLCBta2lfbGVuID0gMDsKKyAgICB1aW50MTZfdCBzZXJ2ZXJfcHJvdGVjdGlvbl9wcm9maWxlX3ZhbHVlID0gMDsKKworICAgIC8qIElmIHVzZV9zcnRwIGlzIG5vdCBjb25maWd1cmVkLCBqdXN0IGlnbm9yZSB0aGUgZXh0ZW5zaW9uICovCisgICAgaWYoICggc3NsLT5jb25mLT50cmFuc3BvcnQgIT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkgfHwKKyAgICAgICAgKCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3QgPT0gTlVMTCApIHx8CisgICAgICAgICggc3NsLT5jb25mLT5kdGxzX3NydHBfcHJvZmlsZV9saXN0X2xlbiA9PSAwICkgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIC8qIFJGQyA1NzY0IHNlY3Rpb24gNC4xLjEKKyAgICAgKiB1aW50OCBTUlRQUHJvdGVjdGlvblByb2ZpbGVbMl07CisgICAgICoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgU1JUUFByb3RlY3Rpb25Qcm9maWxlcyBTUlRQUHJvdGVjdGlvblByb2ZpbGVzOworICAgICAqICAgb3BhcXVlIHNydHBfbWtpPDAuLjI1NT47CisgICAgICogfSBVc2VTUlRQRGF0YTsKKworICAgICAqIFNSVFBQcm90ZWN0aW9uUHJvZmlsZSBTUlRQUHJvdGVjdGlvblByb2ZpbGVzPDIuLjJeMTYtMT47CisgICAgICoKKyAgICAgKi8KKyAgICBpZiggc3NsLT5jb25mLT5kdGxzX3NydHBfbWtpX3N1cHBvcnQgPT0gTUJFRFRMU19TU0xfRFRMU19TUlRQX01LSV9TVVBQT1JURUQgKQorICAgIHsKKyAgICAgICAgbWtpX2xlbiA9IHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX2xlbjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIExlbmd0aCBpcyA1ICsgb3B0aW9uYWwgbWtpX3ZhbHVlIDogb25lIHByb3RlY3Rpb24gcHJvZmlsZSBsZW5ndGggKDIgYnl0ZXMpCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcHJvdGVjdGlvbiBwcm9maWxlICgyIGJ5dGVzKQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1raV9sZW4oMSBieXRlKQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb3B0aW9uYWwgc3J0cF9ta2kKKyAgICAgKi8KKyAgICBpZiggKCBsZW4gPCA1ICkgfHwgKCBsZW4gIT0gKCBidWZbNF0gKyA1dSApICkgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisKKyAgICAvKgorICAgICAqIGdldCB0aGUgc2VydmVyIHByb3RlY3Rpb24gcHJvZmlsZQorICAgICAqLworCisgICAgLyoKKyAgICAgKiBwcm90ZWN0aW9uIHByb2ZpbGUgbGVuZ3RoIG11c3QgYmUgMHgwMDAyIGFzIHdlIG11c3QgaGF2ZSBvbmx5CisgICAgICogb25lIHByb3RlY3Rpb24gcHJvZmlsZSBpbiBzZXJ2ZXIgSGVsbG8KKyAgICAgKi8KKyAgICBpZiggKCAgYnVmWzBdICE9IDAgKSB8fCAoIGJ1ZlsxXSAhPSAyICkgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfU0VSVkVSX0hFTExPICk7CisKKyAgICBzZXJ2ZXJfcHJvdGVjdGlvbl9wcm9maWxlX3ZhbHVlID0gKCBidWZbMl0gPDwgOCApIHwgYnVmWzNdOworICAgIHNlcnZlcl9wcm90ZWN0aW9uID0gbWJlZHRsc19zc2xfY2hlY2tfc3J0cF9wcm9maWxlX3ZhbHVlKAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfcHJvdGVjdGlvbl9wcm9maWxlX3ZhbHVlICk7CisgICAgaWYoIHNlcnZlcl9wcm90ZWN0aW9uICE9IE1CRURUTFNfVExTX1NSVFBfVU5TRVQgKQorICAgIHsKKyAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBzcnRwIHByb2ZpbGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfZ2V0X3NydHBfcHJvZmlsZV9hc19zdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3Byb3RlY3Rpb24gKSApICk7CisgICAgfQorCisgICAgc3NsLT5kdGxzX3NydHBfaW5mby5jaG9zZW5fZHRsc19zcnRwX3Byb2ZpbGUgPSBNQkVEVExTX1RMU19TUlRQX1VOU0VUOworCisgICAgLyoKKyAgICAgKiBDaGVjayB3ZSBoYXZlIHRoZSBzZXJ2ZXIgcHJvZmlsZSBpbiBvdXIgbGlzdAorICAgICAqLworICAgIGZvciggaT0wOyBpIDwgc3NsLT5jb25mLT5kdGxzX3NydHBfcHJvZmlsZV9saXN0X2xlbjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYoIHNlcnZlcl9wcm90ZWN0aW9uID09IHNzbC0+Y29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdFtpXSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzbC0+ZHRsc19zcnRwX2luZm8uY2hvc2VuX2R0bHNfc3J0cF9wcm9maWxlID0gc3NsLT5jb25mLT5kdGxzX3NydHBfcHJvZmlsZV9saXN0W2ldOworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJzZWxlY3RlZCBzcnRwIHByb2ZpbGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfZ2V0X3NydHBfcHJvZmlsZV9hc19zdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3Byb3RlY3Rpb24gKSApICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIElmIG5vIG1hdGNoIHdhcyBmb3VuZCA6IHNlcnZlciBwcm9ibGVtLCBpdCBzaGFsbCBuZXZlciBhbnN3ZXIgd2l0aCBpbmNvbXBhdGlibGUgcHJvZmlsZSAqLworICAgIGlmKCBzc2wtPmR0bHNfc3J0cF9pbmZvLmNob3Nlbl9kdGxzX3NydHBfcHJvZmlsZSA9PSBNQkVEVExTX1RMU19TUlRQX1VOU0VUICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSEFORFNIQUtFX0ZBSUxVUkUgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX1NFUlZFUl9IRUxMTyApOworICAgIH0KKworICAgIC8qIElmIHNlcnZlciBkb2VzIG5vdCB1c2UgbWtpIGluIGl0cyByZXBseSwgbWFrZSBzdXJlIHRoZSBjbGllbnQgd29uJ3Qga2VlcAorICAgICAqIG9uZSBhcyBuZWdvdGlhdGVkICovCisgICAgaWYoIGxlbiA9PSA1ICkKKyAgICB7CisgICAgICAgIHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX2xlbiA9IDA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSRkM1NzY0OgorICAgICAqICBJZiB0aGUgY2xpZW50IGRldGVjdHMgYSBub256ZXJvLWxlbmd0aCBNS0kgaW4gdGhlIHNlcnZlcidzIHJlc3BvbnNlCisgICAgICogIHRoYXQgaXMgZGlmZmVyZW50IHRoYW4gdGhlIG9uZSB0aGUgY2xpZW50IG9mZmVyZWQsIHRoZW4gdGhlIGNsaWVudAorICAgICAqICBNVVNUIGFib3J0IHRoZSBoYW5kc2hha2UgYW5kIFNIT1VMRCBzZW5kIGFuIGludmFsaWRfcGFyYW1ldGVyIGFsZXJ0LgorICAgICAqLworICAgIGlmKCBsZW4gPiA1ICAmJiAoIGJ1Zls0XSAhPSBta2lfbGVuIHx8CisgICAgICAgICggbWVtY21wKCBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV92YWx1ZSwgJmJ1Zls1XSwgbWtpX2xlbiApICkgKSApCisgICAgeworICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0lMTEVHQUxfUEFSQU1FVEVSICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19TRVJWRVJfSEVMTE8gKTsKKyAgICB9CisjaWYgZGVmaW5lZCAoTUJFRFRMU19ERUJVR19DKQorICAgIGlmKCBsZW4gPiA1ICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgInJlY2VpdmVkIG1raSIsIHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV9sZW4gKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKwogLyoKICAqIFBhcnNlIEhlbGxvVmVyaWZ5UmVxdWVzdC4gIE9ubHkgY2FsbGVkIGFmdGVyIHZlcmlmeWluZyB0aGUgSFMgdHlwZS4KICAqLwpAQCAtMjI3OCw2ICsyNTI1LDE2IEBACiAgICAgICAgICAgICBicmVhazsKICNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKKyAgICAgICAgY2FzZSBNQkVEVExTX1RMU19FWFRfVVNFX1NSVFA6CisgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICBpZiggKCByZXQgPSBzc2xfcGFyc2VfdXNlX3NydHBfZXh0KCBzc2wsIGV4dCArIDQsIGV4dF9zaXplICkgKSAhPSAwICkKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLAogICAgICAgICAgICAgICAgICggInVua25vd24gZXh0ZW5zaW9uIGZvdW5kOiAlZCAoaWdub3JpbmcpIiwgZXh0X2lkICkgKTsKZGlmZiAtLWdpdCBhL2xpYnJhcnkvc3NsX2ludmFzaXZlLmggYi9saWJyYXJ5L3NzbF9pbnZhc2l2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYmJjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJyYXJ5L3NzbF9pbnZhc2l2ZS5oCkBAIC0wLDAgKzEsMTAwIEBACisvKioKKyAqIFxmaWxlIHNzbF9pbnZhc2l2ZS5oCisgKgorICogXGJyaWVmIFNTTCBtb2R1bGU6IGludGVyZmFjZXMgZm9yIGludmFzaXZlIHRlc3Rpbmcgb25seS4KKyAqCisgKiBUaGUgaW50ZXJmYWNlcyBpbiB0aGlzIGZpbGUgYXJlIGludGVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuCisgKiBUaGV5IFNIT1VMRCBOT1QgYmUgbWFkZSBhdmFpbGFibGUgaW4gbGlicmFyeSBpbnRlZ3JhdGlvbnMgZXhjZXB0IHdoZW4KKyAqIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5IGZvciB0ZXN0aW5nLgorICovCisvKgorICogIENvcHlyaWdodCBUaGUgTWJlZCBUTFMgQ29udHJpYnV0b3JzCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIE1CRURUTFNfU1NMX0lOVkFTSVZFX0gKKyNkZWZpbmUgTUJFRFRMU19TU0xfSU5WQVNJVkVfSAorCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAibWJlZHRscy9tZC5oIgorCisjaWYgZGVmaW5lZChNQkVEVExTX1RFU1RfSE9PS1MpICYmICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChNQkVEVExTX1NTTF9TT01FX1NVSVRFU19VU0VfVExTX0NCQykKKy8qKiBcYnJpZWYgQ29tcHV0ZSB0aGUgSE1BQyBvZiB2YXJpYWJsZS1sZW5ndGggZGF0YSB3aXRoIGNvbnN0YW50IGZsb3cuCisgKgorICogVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgSE1BQyBvZiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBccCBhZGRfZGF0YSBhbmQgXHAKKyAqIGRhdGEsIGFuZCBkb2VzIHdpdGggYSBjb2RlIGZsb3cgYW5kIG1lbW9yeSBhY2Nlc3MgcGF0dGVybiB0aGF0IGRvZXMgbm90CisgKiBkZXBlbmQgb24gXHAgZGF0YV9sZW5fc2VjcmV0LCBidXQgb25seSBvbiBccCBtaW5fZGF0YV9sZW4gYW5kIFxwCisgKiBtYXhfZGF0YV9sZW4uIEluIHBhcnRpY3VsYXIsIHRoaXMgZnVuY3Rpb24gYWx3YXlzIHJlYWRzIGV4YWN0bHkgXHAKKyAqIG1heF9kYXRhX2xlbiBieXRlcyBmcm9tIFxwIGRhdGEuCisgKgorICogXHBhcmFtIGN0eCAgICAgICAgICAgICAgIFRoZSBITUFDIGNvbnRleHQuIEl0IG11c3QgaGF2ZSBrZXlzIGNvbmZpZ3VyZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG1iZWR0bHNfbWRfaG1hY19zdGFydHMoKSBhbmQgdXNlIG9uZSBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgaGFzaGVzOiBTSEEtMzg0LCBTSEEtMjU2LCBTSEEtMSBvciBNRC01LgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHJlc2V0IHVzaW5nIG1iZWR0bHNfbWRfaG1hY19yZXNldCgpIGFmdGVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbXB1dGF0aW9uIGlzIGNvbXBsZXRlIHRvIHByZXBhcmUgZm9yIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgY29tcHV0YXRpb24uCisgKiBccGFyYW0gYWRkX2RhdGEgICAgICAgICAgVGhlIGFkZGl0aW9uYWwgZGF0YSBwcmVwZW5kZWQgdG8gXHAgZGF0YS4gVGhpcworICogICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgcG9pbnQgdG8gYSByZWFkYWJsZSBidWZmZXIgb2YgXHAgYWRkX2RhdGFfbGVuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMuCisgKiBccGFyYW0gYWRkX2RhdGFfbGVuICAgICAgVGhlIGxlbmd0aCBvZiBccCBhZGRfZGF0YSBpbiBieXRlcy4KKyAqIFxwYXJhbSBkYXRhICAgICAgICAgICAgICBUaGUgZGF0YSBhcHBlbmRlZCB0byBccCBhZGRfZGF0YS4gVGhpcyBtdXN0IHBvaW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYSByZWFkYWJsZSBidWZmZXIgb2YgXHAgbWF4X2RhdGFfbGVuIGJ5dGVzLgorICogXHBhcmFtIGRhdGFfbGVuX3NlY3JldCAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gcHJvY2VzcyBpbiBccCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbXVzdCBiZSBubyBsZXNzIHRoYW4gXHAgbWluX2RhdGFfbGVuIGFuZCBubworICogICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiBccCBtYXhfZGF0YV9sZW4uCisgKiBccGFyYW0gbWluX2RhdGFfbGVuICAgICAgVGhlIG1pbmltYWwgbGVuZ3RoIG9mIFxwIGRhdGEgaW4gYnl0ZXMuCisgKiBccGFyYW0gbWF4X2RhdGFfbGVuICAgICAgVGhlIG1heGltYWwgbGVuZ3RoIG9mIFxwIGRhdGEgaW4gYnl0ZXMuCisgKiBccGFyYW0gb3V0cHV0ICAgICAgICAgICAgVGhlIEhNQUMgd2lsbCBiZSB3cml0dGVuIGhlcmUuIFRoaXMgbXVzdCBwb2ludCB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgIGEgd3JpdGFibGUgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZSB0byBob2xkIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIEhNQUMgdmFsdWUuCisgKgorICogXHJldHZhbCAwCisgKiAgICAgICAgIFN1Y2Nlc3MuCisgKiBccmV0dmFsIE1CRURUTFNfRVJSX1BMQVRGT1JNX0hXX0FDQ0VMX0ZBSUxFRAorICogICAgICAgICBUaGUgaGFyZHdhcmUgYWNjZWxlcmF0b3IgZmFpbGVkLgorICovCitpbnQgbWJlZHRsc19zc2xfY2ZfaG1hYygKKyAgICAgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgKmN0eCwKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkX2RhdGEsIHNpemVfdCBhZGRfZGF0YV9sZW4sCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBkYXRhX2xlbl9zZWNyZXQsCisgICAgICAgIHNpemVfdCBtaW5fZGF0YV9sZW4sIHNpemVfdCBtYXhfZGF0YV9sZW4sCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCApOworCisvKiogXGJyaWVmIENvcHkgZGF0YSBmcm9tIGEgc2VjcmV0IHBvc2l0aW9uIHdpdGggY29uc3RhbnQgZmxvdy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBccCBsZW4gYnl0ZXMgZnJvbSBccCBzcmNfYmFzZSArIFxwIG9mZnNldF9zZWNyZXQgdG8gXHAKKyAqIGRzdCwgd2l0aCBhIGNvZGUgZmxvdyBhbmQgbWVtb3J5IGFjY2VzcyBwYXR0ZXJuIHRoYXQgZG9lcyBub3QgZGVwZW5kIG9uIFxwCisgKiBvZmZzZXRfc2VjcmV0LCBidXQgb25seSBvbiBccCBvZmZzZXRfbWluLCBccCBvZmZzZXRfbWF4IGFuZCBccCBsZW4uCisgKgorICogXHBhcmFtIGRzdCAgICAgICAgICAgVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4gVGhpcyBtdXN0IHBvaW50IHRvIGEgd3JpdGFibGUKKyAqICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBvZiBhdCBsZWFzdCBccCBsZW4gYnl0ZXMuCisgKiBccGFyYW0gc3JjX2Jhc2UgICAgICBUaGUgYmFzZSBvZiB0aGUgc291cmNlIGJ1ZmZlci4gVGhpcyBtdXN0IHBvaW50IHRvIGEKKyAqICAgICAgICAgICAgICAgICAgICAgIHJlYWRhYmxlIGJ1ZmZlciBvZiBhdCBsZWFzdCBccCBvZmZzZXRfbWF4ICsgXHAgbGVuCisgKiAgICAgICAgICAgICAgICAgICAgICBieXRlcy4KKyAqIFxwYXJhbSBvZmZzZXRfc2VjcmV0IFRoZSBvZmZzZXQgaW4gdGhlIHNvdXJjZSBidWZmZXIgZnJvbSB3aGljaCB0byBjb3B5LgorICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIG5vIGxlc3MgdGhhbiBccCBvZmZzZXRfbWluIGFuZCBubyBncmVhdGVyCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGFuIFxwIG9mZnNldF9tYXguCisgKiBccGFyYW0gb2Zmc2V0X21pbiAgICBUaGUgbWluaW1hbCB2YWx1ZSBvZiBccCBvZmZzZXRfc2VjcmV0LgorICogXHBhcmFtIG9mZnNldF9tYXggICAgVGhlIG1heGltYWwgdmFsdWUgb2YgXHAgb2Zmc2V0X3NlY3JldC4KKyAqIFxwYXJhbSBsZW4gICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weS4KKyAqLwordm9pZCBtYmVkdGxzX3NzbF9jZl9tZW1jcHlfb2Zmc2V0KCB1bnNpZ25lZCBjaGFyICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyY19iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0X3NlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldF9taW4sIHNpemVfdCBvZmZzZXRfbWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuICk7CisjZW5kaWYgLyogTUJFRFRMU19URVNUX0hPT0tTICYmIE1CRURUTFNfU1NMX1NPTUVfU1VJVEVTX1VTRV9UTFNfQ0JDICovCisKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9JTlZBU0lWRV9IICovCmRpZmYgLS1naXQgYS9saWJyYXJ5L3NzbF9tc2cuYyBiL2xpYnJhcnkvc3NsX21zZy5jCmluZGV4IDY1MGJkYzMuLmJkZjg4MmQgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvc3NsX21zZy5jCisrKyBiL2xpYnJhcnkvc3NsX21zZy5jCkBAIC00NSw2ICs0NSw4IEBACiAjaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybV91dGlsLmgiCiAjaW5jbHVkZSAibWJlZHRscy92ZXJzaW9uLmgiCiAKKyNpbmNsdWRlICJzc2xfaW52YXNpdmUuaCIKKwogI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaWYgZGVmaW5lZChNQkVEVExTX1VTRV9QU0FfQ1JZUFRPKQpAQCAtMzEwLDI3ICszMTIsNiBAQAogaW50ICgqbWJlZHRsc19zc2xfaHdfcmVjb3JkX2ZpbmlzaCkoIG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCApID0gTlVMTDsKICNlbmRpZiAvKiBNQkVEVExTX1NTTF9IV19SRUNPUkRfQUNDRUwgKi8KIAotLyogVGhlIGZ1bmN0aW9uIGJlbG93IGlzIG9ubHkgdXNlZCBpbiB0aGUgTHVja3kgMTMgY291bnRlci1tZWFzdXJlIGluCi0gKiBtYmVkdGxzX3NzbF9kZWNyeXB0X2J1ZigpLiBUaGVzZSBhcmUgdGhlIGRlZmluZXMgdGhhdCBndWFyZCB0aGUgY2FsbCBzaXRlLiAqLwotI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU09NRV9NT0RFU19VU0VfTUFDKSAmJiBcCi0gICAgKCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzEpIHx8IFwKLSAgICAgIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSB8fCBcCi0gICAgICBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikgKQotLyogVGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIGV2ZXJ5IGJ5dGUgaW4gdGhlIG1lbW9yeSByZWdpb24gaXMgYWNjZXNzZWQKLSAqIChpbiBhc2NlbmRpbmcgYWRkcmVzc2VzIG9yZGVyKSAqLwotc3RhdGljIHZvaWQgc3NsX3JlYWRfbWVtb3J5KCB1bnNpZ25lZCBjaGFyICpwLCBzaXplX3QgbGVuICkKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGFjYyA9IDA7Ci0gICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBmb3JjZTsKLQotICAgIGZvciggOyBsZW4gIT0gMDsgcCsrLCBsZW4tLSApCi0gICAgICAgIGFjYyBePSAqcDsKLQotICAgIGZvcmNlID0gYWNjOwotICAgICh2b2lkKSBmb3JjZTsKLX0KLSNlbmRpZiAvKiBTU0xfU09NRV9NT0RFU19VU0VfTUFDICYmICggVExTMSB8fCBUTFMxXzEgfHwgVExTMV8yICkgKi8KLQogLyoKICAqIEVuY3J5cHRpb24vZGVjcnlwdGlvbiBmdW5jdGlvbnMKICAqLwpAQCAtNjA3LDEwICs1ODgsNyBAQAogCiAgICAgLyogVGhlIFBSTkcgaXMgdXNlZCBmb3IgZHluYW1pYyBJViBnZW5lcmF0aW9uIHRoYXQncyB1c2VkCiAgICAgICogZm9yIENCQyB0cmFuc2Zvcm1hdGlvbnMgaW4gVExTIDEuMSBhbmQgVExTIDEuMi4gKi8KLSNpZiAhKCBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAoIGRlZmluZWQoTUJFRFRMU19BRVNfQykgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIGRlZmluZWQoTUJFRFRMU19BUklBX0MpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIGRlZmluZWQoTUJFRFRMU19DQU1FTExJQV9DKSApICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNpZiAhKCBkZWZpbmVkKE1CRURUTFNfU1NMX1NPTUVfU1VJVEVTX1VTRV9DQkMpICYmIFwKICAgICAgICAoIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8xKSB8fCBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMikgKSApCiAgICAgKCh2b2lkKSBmX3JuZyk7CiAgICAgKCh2b2lkKSBwX3JuZyk7CkBAIC05MDgsOCArODg2LDcgQEAKICAgICB9CiAgICAgZWxzZQogI2VuZGlmIC8qIE1CRURUTFNfR0NNX0MgfHwgTUJFRFRMU19DQ01fQyB8fCBNQkVEVExTX0NIQUNIQVBPTFlfQyAqLwotI2lmIGRlZmluZWQoTUJFRFRMU19DSVBIRVJfTU9ERV9DQkMpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICggZGVmaW5lZChNQkVEVExTX0FFU19DKSB8fCBkZWZpbmVkKE1CRURUTFNfQ0FNRUxMSUFfQykgfHwgZGVmaW5lZChNQkVEVExTX0FSSUFfQykgKQorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU09NRV9TVUlURVNfVVNFX0NCQykKICAgICBpZiggbW9kZSA9PSBNQkVEVExTX01PREVfQ0JDICkKICAgICB7CiAgICAgICAgIGludCByZXQgPSBNQkVEVExTX0VSUl9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOwpAQCAtMTA0OCw4ICsxMDI1LDcgQEAKICNlbmRpZiAvKiBNQkVEVExTX1NTTF9FTkNSWVBUX1RIRU5fTUFDICovCiAgICAgfQogICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAmJgotICAgICAgICAgICggTUJFRFRMU19BRVNfQyB8fCBNQkVEVExTX0NBTUVMTElBX0MgfHwgTUJFRFRMU19BUklBX0MgKSAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NPTUVfU1VJVEVTX1VTRV9DQkMpICovCiAgICAgewogICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggInNob3VsZCBuZXZlciBoYXBwZW4iICkgKTsKICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKQEAgLTEwNjcsNiArMTA0MywyMzkgQEAKICAgICByZXR1cm4oIDAgKTsKIH0KIAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfU09NRV9TVUlURVNfVVNFX1RMU19DQkMpCisvKgorICogVHVybiBhIGJpdCBpbnRvIGEgbWFzazoKKyAqIC0gaWYgYml0ID09IDEsIHJldHVybiB0aGUgYWxsLWJpdHMgMSBtYXNrLCBha2EgKHNpemVfdCkgLTEKKyAqIC0gaWYgYml0ID09IDAsIHJldHVybiB0aGUgYWxsLWJpdHMgMCBtYXNrLCBha2EgMAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gd3JpdGUgY29uc3RhbnQtdGltZSBjb2RlIGJ5IHJlcGxhY2luZyBicmFuY2hlcworICogd2l0aCBiaXQgb3BlcmF0aW9ucyB1c2luZyBtYXNrcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHdpdGhvdXQgdXNpbmcgY29tcGFyaXNvbiBvcGVyYXRvcnMsIGFzIHRob3NlCisgKiBtaWdodCBiZSB0cmFuc2xhdGVkIHRvIGJyYW5jaGVzIGJ5IHNvbWUgY29tcGlsZXJzIG9uIHNvbWUgcGxhdGZvcm1zLgorICovCitzdGF0aWMgc2l6ZV90IG1iZWR0bHNfc3NsX2NmX21hc2tfZnJvbV9iaXQoIHNpemVfdCBiaXQgKQoreworICAgIC8qIE1TVkMgaGFzIGEgd2FybmluZyBhYm91dCB1bmFyeSBtaW51cyBvbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGVzLAorICAgICAqIGJ1dCB0aGlzIGlzIHdlbGwtZGVmaW5lZCBhbmQgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudCB0byBkbyBoZXJlLiAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjcHJhZ21hIHdhcm5pbmcoIHB1c2ggKQorI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDE0NiApCisjZW5kaWYKKyAgICByZXR1cm4gLWJpdDsKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI3ByYWdtYSB3YXJuaW5nKCBwb3AgKQorI2VuZGlmCit9CisKKy8qCisgKiBDb25zdGFudC1mbG93IG1hc2sgZ2VuZXJhdGlvbiBmb3IgImxlc3MgdGhhbiIgY29tcGFyaXNvbjoKKyAqIC0gaWYgeCA8IHksICByZXR1cm4gYWxsIGJpdHMgMSwgdGhhdCBpcyAoc2l6ZV90KSAtMQorICogLSBvdGhlcndpc2UsIHJldHVybiBhbGwgYml0cyAwLCB0aGF0IGlzIDAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHdyaXRlIGNvbnN0YW50LXRpbWUgY29kZSBieSByZXBsYWNpbmcgYnJhbmNoZXMKKyAqIHdpdGggYml0IG9wZXJhdGlvbnMgdXNpbmcgbWFza3MuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB3aXRob3V0IHVzaW5nIGNvbXBhcmlzb24gb3BlcmF0b3JzLCBhcyB0aG9zZQorICogbWlnaHQgYmUgdHJhbnNsYXRlZCB0byBicmFuY2hlcyBieSBzb21lIGNvbXBpbGVycyBvbiBzb21lIHBsYXRmb3Jtcy4KKyAqLworc3RhdGljIHNpemVfdCBtYmVkdGxzX3NzbF9jZl9tYXNrX2x0KCBzaXplX3QgeCwgc2l6ZV90IHkgKQoreworICAgIC8qIFRoaXMgaGFzIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQgaWYgYW5kIG9ubHkgaWYgeCA8IHkgKi8KKyAgICBjb25zdCBzaXplX3Qgc3ViID0geCAtIHk7CisKKyAgICAvKiBzdWIxID0gKHggPCB5KSA/IDEgOiAwICovCisgICAgY29uc3Qgc2l6ZV90IHN1YjEgPSBzdWIgPj4gKCBzaXplb2YoIHN1YiApICogOCAtIDEgKTsKKworICAgIC8qIG1hc2sgPSAoeCA8IHkpID8gMHhmZi4uLiA6IDB4MDAuLi4gKi8KKyAgICBjb25zdCBzaXplX3QgbWFzayA9IG1iZWR0bHNfc3NsX2NmX21hc2tfZnJvbV9iaXQoIHN1YjEgKTsKKworICAgIHJldHVybiggbWFzayApOworfQorCisvKgorICogQ29uc3RhbnQtZmxvdyBtYXNrIGdlbmVyYXRpb24gZm9yICJncmVhdGVyIG9yIGVxdWFsIiBjb21wYXJpc29uOgorICogLSBpZiB4ID49IHksIHJldHVybiBhbGwgYml0cyAxLCB0aGF0IGlzIChzaXplX3QpIC0xCisgKiAtIG90aGVyd2lzZSwgcmV0dXJuIGFsbCBiaXRzIDAsIHRoYXQgaXMgMAorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gd3JpdGUgY29uc3RhbnQtdGltZSBjb2RlIGJ5IHJlcGxhY2luZyBicmFuY2hlcworICogd2l0aCBiaXQgb3BlcmF0aW9ucyB1c2luZyBtYXNrcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHdpdGhvdXQgdXNpbmcgY29tcGFyaXNvbiBvcGVyYXRvcnMsIGFzIHRob3NlCisgKiBtaWdodCBiZSB0cmFuc2xhdGVkIHRvIGJyYW5jaGVzIGJ5IHNvbWUgY29tcGlsZXJzIG9uIHNvbWUgcGxhdGZvcm1zLgorICovCitzdGF0aWMgc2l6ZV90IG1iZWR0bHNfc3NsX2NmX21hc2tfZ2UoIHNpemVfdCB4LCBzaXplX3QgeSApCit7CisgICAgcmV0dXJuKCB+bWJlZHRsc19zc2xfY2ZfbWFza19sdCggeCwgeSApICk7Cit9CisKKy8qCisgKiBDb25zdGFudC1mbG93IGJvb2xlYW4gImVxdWFsIiBjb21wYXJpc29uOgorICogcmV0dXJuIHggPT0geQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gd3JpdGUgY29uc3RhbnQtdGltZSBjb2RlIGJ5IHJlcGxhY2luZyBicmFuY2hlcworICogd2l0aCBiaXQgb3BlcmF0aW9ucyAtIGl0IGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAqIG1iZWR0bHNfc3NsX2NmX21hc2tfZnJvbV9iaXQoKS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHdpdGhvdXQgdXNpbmcgY29tcGFyaXNvbiBvcGVyYXRvcnMsIGFzIHRob3NlCisgKiBtaWdodCBiZSB0cmFuc2xhdGVkIHRvIGJyYW5jaGVzIGJ5IHNvbWUgY29tcGlsZXJzIG9uIHNvbWUgcGxhdGZvcm1zLgorICovCitzdGF0aWMgc2l6ZV90IG1iZWR0bHNfc3NsX2NmX2Jvb2xfZXEoIHNpemVfdCB4LCBzaXplX3QgeSApCit7CisgICAgLyogZGlmZiA9IDAgaWYgeCA9PSB5LCBub24temVybyBvdGhlcndpc2UgKi8KKyAgICBjb25zdCBzaXplX3QgZGlmZiA9IHggXiB5OworCisgICAgLyogTVNWQyBoYXMgYSB3YXJuaW5nIGFib3V0IHVuYXJ5IG1pbnVzIG9uIHVuc2lnbmVkIGludGVnZXIgdHlwZXMsCisgICAgICogYnV0IHRoaXMgaXMgd2VsbC1kZWZpbmVkIGFuZCBwcmVjaXNlbHkgd2hhdCB3ZSB3YW50IHRvIGRvIGhlcmUuICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyggcHVzaCApCisjcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0MTQ2ICkKKyNlbmRpZgorCisgICAgLyogZGlmZl9tc2IncyBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyBlcXVhbCB0byB4ICE9IHkgKi8KKyAgICBjb25zdCBzaXplX3QgZGlmZl9tc2IgPSAoIGRpZmYgfCAtZGlmZiApOworCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgd2FybmluZyggcG9wICkKKyNlbmRpZgorCisgICAgLyogZGlmZjEgPSAoeCAhPSB5KSA/IDEgOiAwICovCisgICAgY29uc3Qgc2l6ZV90IGRpZmYxID0gZGlmZl9tc2IgPj4gKCBzaXplb2YoIGRpZmZfbXNiICkgKiA4IC0gMSApOworCisgICAgcmV0dXJuKCAxIF4gZGlmZjEgKTsKK30KKworLyoKKyAqIENvbnN0YW50LWZsb3cgY29uZGl0aW9uYWwgbWVtY3B5OgorICogIC0gaWYgYzEgPT0gYzIsIGVxdWl2YWxlbnQgdG8gbWVtY3B5KGRzdCwgc3JjLCBsZW4pLAorICogIC0gb3RoZXJ3aXNlLCBhIG5vLW9wLAorICogYnV0IHdpdGggZXhlY3V0aW9uIGZsb3cgaW5kZXBlbmRlbnQgb2YgdGhlIHZhbHVlcyBvZiBjMSBhbmQgYzIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB3aXRob3V0IHVzaW5nIGNvbXBhcmlzb24gb3BlcmF0b3JzLCBhcyB0aG9zZQorICogbWlnaHQgYmUgdHJhbnNsYXRlZCB0byBicmFuY2hlcyBieSBzb21lIGNvbXBpbGVycyBvbiBzb21lIHBsYXRmb3Jtcy4KKyAqLworc3RhdGljIHZvaWQgbWJlZHRsc19zc2xfY2ZfbWVtY3B5X2lmX2VxKCB1bnNpZ25lZCBjaGFyICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGMxLCBzaXplX3QgYzIgKQoreworICAgIC8qIG1hc2sgPSBjMSA9PSBjMiA/IDB4ZmYgOiAweDAwICovCisgICAgY29uc3Qgc2l6ZV90IGVxdWFsID0gbWJlZHRsc19zc2xfY2ZfYm9vbF9lcSggYzEsIGMyICk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBtYXNrID0gKHVuc2lnbmVkIGNoYXIpIG1iZWR0bHNfc3NsX2NmX21hc2tfZnJvbV9iaXQoIGVxdWFsICk7CisKKyAgICAvKiBkc3RbaV0gPSBjMSA9PSBjMiA/IHNyY1tpXSA6IGRzdFtpXSAqLworICAgIGZvciggc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyBpKysgKQorICAgICAgICBkc3RbaV0gPSAoIHNyY1tpXSAmIG1hc2sgKSB8ICggZHN0W2ldICYgfm1hc2sgKTsKK30KKworLyoKKyAqIENvbXB1dGUgSE1BQyBvZiB2YXJpYWJsZS1sZW5ndGggZGF0YSB3aXRoIGNvbnN0YW50IGZsb3cuCisgKgorICogT25seSB3b3JrcyB3aXRoIE1ELTUsIFNIQS0xLCBTSEEtMjU2IGFuZCBTSEEtMzg0LgorICogKE90aGVyd2lzZSwgY29tcHV0YXRpb24gb2YgYmxvY2tfc2l6ZSBuZWVkcyB0byBiZSBhZGFwdGVkLikKKyAqLworTUJFRFRMU19TVEFUSUNfVEVTVEFCTEUgaW50IG1iZWR0bHNfc3NsX2NmX2htYWMoCisgICAgICAgIG1iZWR0bHNfbWRfY29udGV4dF90ICpjdHgsCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZF9kYXRhLCBzaXplX3QgYWRkX2RhdGFfbGVuLAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgZGF0YV9sZW5fc2VjcmV0LAorICAgICAgICBzaXplX3QgbWluX2RhdGFfbGVuLCBzaXplX3QgbWF4X2RhdGFfbGVuLAorICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgKQoreworICAgIC8qCisgICAgICogVGhpcyBmdW5jdGlvbiBicmVha3MgdGhlIEhNQUMgYWJzdHJhY3Rpb24gYW5kIHVzZXMgdGhlIG1kX2Nsb25lKCkKKyAgICAgKiBleHRlbnNpb24gdG8gdGhlIE1EIEFQSSBpbiBvcmRlciB0byBnZXQgY29uc3RhbnQtZmxvdyBiZWhhdmlvdXIuCisgICAgICoKKyAgICAgKiBITUFDKG1zZykgaXMgZGVmaW5lZCBhcyBIQVNIKG9rZXkgKyBIQVNIKGlrZXkgKyBtc2cpKSB3aGVyZSArIG1lYW5zCisgICAgICogY29uY2F0ZW5hdGlvbiwgYW5kIG9rZXkvaWtleSBhcmUgdGhlIFhPUiBvZiB0aGUga2V5IHdpdGggc29tZSBmaXhlZCBiaXQKKyAgICAgKiBwYXR0ZXJucyAoc2VlIFJGQyAyMTA0LCBzZWMuIDIpLCB3aGljaCBhcmUgc3RvcmVkIGluIGN0eC0+aG1hY19jdHguCisgICAgICoKKyAgICAgKiBXZSdsbCBmaXJzdCBjb21wdXRlIGlubmVyX2hhc2ggPSBIQVNIKGlrZXkgKyBtc2cpIGJ5IGhhc2hpbmcgdXAgdG8KKyAgICAgKiBtaW5sZW4sIHRoZW4gY2xvbmluZyB0aGUgY29udGV4dCwgYW5kIGZvciBlYWNoIGJ5dGUgdXAgdG8gbWF4bGVuCisgICAgICogZmluaXNoaW5nIHVwIHRoZSBoYXNoIGNvbXB1dGF0aW9uLCBrZWVwaW5nIG9ubHkgdGhlIGNvcnJlY3QgcmVzdWx0LgorICAgICAqCisgICAgICogVGhlbiB3ZSBvbmx5IG5lZWQgdG8gY29tcHV0ZSBIQVNIKG9rZXkgKyBpbm5lcl9oYXNoKSBhbmQgd2UncmUgZG9uZS4KKyAgICAgKi8KKyAgICBjb25zdCBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcgPSBtYmVkdGxzX21kX2dldF90eXBlKCBjdHgtPm1kX2luZm8gKTsKKyAgICAvKiBUTFMgMS4wLTEuMiBvbmx5IHN1cHBvcnQgU0hBLTM4NCwgU0hBLTI1NiwgU0hBLTEsIE1ELTUsCisgICAgICogYWxsIG9mIHdoaWNoIGhhdmUgdGhlIHNhbWUgYmxvY2sgc2l6ZSBleGNlcHQgU0hBLTM4NC4gKi8KKyAgICBjb25zdCBzaXplX3QgYmxvY2tfc2l6ZSA9IG1kX2FsZyA9PSBNQkVEVExTX01EX1NIQTM4NCA/IDEyOCA6IDY0OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBjb25zdCBpa2V5ID0gY3R4LT5obWFjX2N0eDsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogY29uc3Qgb2tleSA9IGlrZXkgKyBibG9ja19zaXplOworICAgIGNvbnN0IHNpemVfdCBoYXNoX3NpemUgPSBtYmVkdGxzX21kX2dldF9zaXplKCBjdHgtPm1kX2luZm8gKTsKKworICAgIHVuc2lnbmVkIGNoYXIgYXV4X291dFtNQkVEVExTX01EX01BWF9TSVpFXTsKKyAgICBtYmVkdGxzX21kX2NvbnRleHRfdCBhdXg7CisgICAgc2l6ZV90IG9mZnNldDsKKyAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRDsKKworICAgIG1iZWR0bHNfbWRfaW5pdCggJmF1eCApOworCisjZGVmaW5lIE1EX0NISyggZnVuY19jYWxsICkgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0ID0gKGZ1bmNfY2FsbCk7ICBcCisgICAgICAgIGlmKCByZXQgIT0gMCApICAgICAgXAorICAgICAgICAgICAgZ290byBjbGVhbnVwOyAgIFwKKyAgICB9IHdoaWxlKCAwICkKKworICAgIE1EX0NISyggbWJlZHRsc19tZF9zZXR1cCggJmF1eCwgY3R4LT5tZF9pbmZvLCAwICkgKTsKKworICAgIC8qIEFmdGVyIGhtYWNfc3RhcnQoKSBvZiBobWFjX3Jlc2V0KCksIGlrZXkgaGFzIGFscmVhZHkgYmVlbiBoYXNoZWQsCisgICAgICogc28gd2UgY2FuIHN0YXJ0IGRpcmVjdGx5IHdpdGggdGhlIG1lc3NhZ2UgKi8KKyAgICBNRF9DSEsoIG1iZWR0bHNfbWRfdXBkYXRlKCBjdHgsIGFkZF9kYXRhLCBhZGRfZGF0YV9sZW4gKSApOworICAgIE1EX0NISyggbWJlZHRsc19tZF91cGRhdGUoIGN0eCwgZGF0YSwgbWluX2RhdGFfbGVuICkgKTsKKworICAgIC8qIEZvciBlYWNoIHBvc3NpYmxlIGxlbmd0aCwgY29tcHV0ZSB0aGUgaGFzaCB1cCB0byB0aGF0IHBvaW50ICovCisgICAgZm9yKCBvZmZzZXQgPSBtaW5fZGF0YV9sZW47IG9mZnNldCA8PSBtYXhfZGF0YV9sZW47IG9mZnNldCsrICkKKyAgICB7CisgICAgICAgIE1EX0NISyggbWJlZHRsc19tZF9jbG9uZSggJmF1eCwgY3R4ICkgKTsKKyAgICAgICAgTURfQ0hLKCBtYmVkdGxzX21kX2ZpbmlzaCggJmF1eCwgYXV4X291dCApICk7CisgICAgICAgIC8qIEtlZXAgb25seSB0aGUgY29ycmVjdCBpbm5lcl9oYXNoIGluIHRoZSBvdXRwdXQgYnVmZmVyICovCisgICAgICAgIG1iZWR0bHNfc3NsX2NmX21lbWNweV9pZl9lcSggb3V0cHV0LCBhdXhfb3V0LCBoYXNoX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBkYXRhX2xlbl9zZWNyZXQgKTsKKworICAgICAgICBpZiggb2Zmc2V0IDwgbWF4X2RhdGFfbGVuICkKKyAgICAgICAgICAgIE1EX0NISyggbWJlZHRsc19tZF91cGRhdGUoIGN0eCwgZGF0YSArIG9mZnNldCwgMSApICk7CisgICAgfQorCisgICAgLyogTm93IGNvbXB1dGUgSEFTSChva2V5ICsgaW5uZXJfaGFzaCkgKi8KKyAgICBNRF9DSEsoIG1iZWR0bHNfbWRfc3RhcnRzKCBjdHggKSApOworICAgIE1EX0NISyggbWJlZHRsc19tZF91cGRhdGUoIGN0eCwgb2tleSwgYmxvY2tfc2l6ZSApICk7CisgICAgTURfQ0hLKCBtYmVkdGxzX21kX3VwZGF0ZSggY3R4LCBvdXRwdXQsIGhhc2hfc2l6ZSApICk7CisgICAgTURfQ0hLKCBtYmVkdGxzX21kX2ZpbmlzaCggY3R4LCBvdXRwdXQgKSApOworCisgICAgLyogRG9uZSwgZ2V0IHJlYWR5IGZvciBuZXh0IHRpbWUgKi8KKyAgICBNRF9DSEsoIG1iZWR0bHNfbWRfaG1hY19yZXNldCggY3R4ICkgKTsKKworI3VuZGVmIE1EX0NISworCitjbGVhbnVwOgorICAgIG1iZWR0bHNfbWRfZnJlZSggJmF1eCApOworICAgIHJldHVybiggcmV0ICk7Cit9CisKKy8qCisgKiBDb25zdGFudC1mbG93IG1lbWNweSBmcm9tIHZhcmlhYmxlIHBvc2l0aW9uIGluIGJ1ZmZlci4KKyAqIC0gZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gbWVtY3B5KGRzdCwgc3JjICsgb2Zmc2V0X3NlY3JldCwgbGVuKQorICogLSBidXQgd2l0aCBleGVjdXRpb24gZmxvdyBpbmRlcGVuZGVudCBmcm9tIHRoZSB2YWx1ZSBvZiBvZmZzZXRfc2VjcmV0LgorICovCitNQkVEVExTX1NUQVRJQ19URVNUQUJMRSB2b2lkIG1iZWR0bHNfc3NsX2NmX21lbWNweV9vZmZzZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXRfc2VjcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0X21pbiwgc2l6ZV90IG9mZnNldF9tYXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIHNpemVfdCBvZmZzZXQ7CisKKyAgICBmb3IoIG9mZnNldCA9IG9mZnNldF9taW47IG9mZnNldCA8PSBvZmZzZXRfbWF4OyBvZmZzZXQrKyApCisgICAgeworICAgICAgICBtYmVkdGxzX3NzbF9jZl9tZW1jcHlfaWZfZXEoIGRzdCwgc3JjX2Jhc2UgKyBvZmZzZXQsIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIG9mZnNldF9zZWNyZXQgKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfU09NRV9TVUlURVNfVVNFX1RMU19DQkMgKi8KKwogaW50IG1iZWR0bHNfc3NsX2RlY3J5cHRfYnVmKCBtYmVkdGxzX3NzbF9jb250ZXh0IGNvbnN0ICpzc2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX3RyYW5zZm9ybSAqdHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3JlY29yZCAqcmVjICkKQEAgLTEyMzcsOCArMTQ0Niw3IEBACiAgICAgfQogICAgIGVsc2UKICNlbmRpZiAvKiBNQkVEVExTX0dDTV9DIHx8IE1CRURUTFNfQ0NNX0MgKi8KLSNpZiBkZWZpbmVkKE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoIGRlZmluZWQoTUJFRFRMU19BRVNfQykgfHwgZGVmaW5lZChNQkVEVExTX0NBTUVMTElBX0MpIHx8IGRlZmluZWQoTUJFRFRMU19BUklBX0MpICkKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1NPTUVfU1VJVEVTX1VTRV9DQkMpCiAgICAgaWYoIG1vZGUgPT0gTUJFRFRMU19NT0RFX0NCQyApCiAgICAgewogICAgICAgICBzaXplX3QgbWlubGVuID0gMDsKQEAgLTE0MDMsOCArMTYxMSwxMSBAQAogCiAgICAgICAgIGlmKCBhdXRoX2RvbmUgPT0gMSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvcnJlY3QgKj0gKCByZWMtPmRhdGFfbGVuID49IHBhZGxlbiArIDEgKTsKLSAgICAgICAgICAgIHBhZGxlbiAgKj0gKCByZWMtPmRhdGFfbGVuID49IHBhZGxlbiArIDEgKTsKKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXNrID0gbWJlZHRsc19zc2xfY2ZfbWFza19nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjLT5kYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkbGVuICsgMSApOworICAgICAgICAgICAgY29ycmVjdCAmPSBtYXNrOworICAgICAgICAgICAgcGFkbGVuICAmPSBtYXNrOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMTQxOCw4ICsxNjI5LDExIEBACiAgICAgICAgICAgICB9CiAjZW5kaWYKIAotICAgICAgICAgICAgY29ycmVjdCAqPSAoIHJlYy0+ZGF0YV9sZW4gPj0gdHJhbnNmb3JtLT5tYWNsZW4gKyBwYWRsZW4gKyAxICk7Ci0gICAgICAgICAgICBwYWRsZW4gICo9ICggcmVjLT5kYXRhX2xlbiA+PSB0cmFuc2Zvcm0tPm1hY2xlbiArIHBhZGxlbiArIDEgKTsKKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBtYXNrID0gbWJlZHRsc19zc2xfY2ZfbWFza19nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjLT5kYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5tYWNsZW4gKyBwYWRsZW4gKyAxICk7CisgICAgICAgICAgICBjb3JyZWN0ICY9IG1hc2s7CisgICAgICAgICAgICBwYWRsZW4gICY9IG1hc2s7CiAgICAgICAgIH0KIAogICAgICAgICBwYWRsZW4rKzsKQEAgLTE0MzAsNiArMTY0NCwxMCBAQAogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fU1NMMykKICAgICAgICAgaWYoIHRyYW5zZm9ybS0+bWlub3JfdmVyID09IE1CRURUTFNfU1NMX01JTk9SX1ZFUlNJT05fMCApCiAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoaXMgaXMgdGhlIFNTTCAzLjAgcGF0aCwgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBMdWNreQorICAgICAgICAgICAgICogMTMsIGJlY2F1c2UgdGhlcmUncyBhIHN0cmljdGx5IHdvcnNlIHBhZGRpbmcgYXR0YWNrIGJ1aWx0IGluCisgICAgICAgICAgICAgKiB0aGUgcHJvdG9jb2wgKGtub3duIGFzIHBhcnQgb2YgUE9PRExFKSwgc28gd2UgZG9uJ3QgY2FyZSBpZiB0aGUKKyAgICAgICAgICAgICAqIGNvZGUgaXMgbm90IGNvbnN0YW50LXRpbWUsIGluIHBhcnRpY3VsYXIgYnJhbmNoZXMgYXJlIE9LLiAqLwogICAgICAgICAgICAgaWYoIHBhZGxlbiA+IHRyYW5zZm9ybS0+aXZsZW4gKQogICAgICAgICAgICAgewogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfREVCVUdfQUxMKQpAQCAtMTQ1Myw3ICsxNjcxLDYgQEAKICAgICAgICAgICAgICAqIGBtaW4oMjU2LHBsYWludGV4dF9sZW4pYCByZWFkcyAoYnV0IHRha2UgaW50byBhY2NvdW50CiAgICAgICAgICAgICAgKiBvbmx5IHRoZSBsYXN0IGBwYWRsZW5gIGJ5dGVzIGZvciB0aGUgcGFkZGluZyBjaGVjaykuICovCiAgICAgICAgICAgICBzaXplX3QgcGFkX2NvdW50ID0gMDsKLSAgICAgICAgICAgIHNpemVfdCByZWFsX2NvdW50ID0gMDsKICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqIGNvbnN0IGNoZWNrID0gZGF0YTsKIAogICAgICAgICAgICAgLyogSW5kZXggb2YgZmlyc3QgcGFkZGluZyBieXRlOyBpdCBoYXMgYmVlbiBlbnN1cmVkIGFib3ZlCkBAIC0xNDY1LDE2ICsxNjgyLDIxIEBACiAKICAgICAgICAgICAgIGZvciggaWR4ID0gc3RhcnRfaWR4OyBpZHggPCByZWMtPmRhdGFfbGVuOyBpZHgrKyApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVhbF9jb3VudCB8PSAoIGlkeCA+PSBwYWRkaW5nX2lkeCApOwotICAgICAgICAgICAgICAgIHBhZF9jb3VudCArPSByZWFsX2NvdW50ICogKCBjaGVja1tpZHhdID09IHBhZGxlbiAtIDEgKTsKKyAgICAgICAgICAgICAgICAvKiBwYWRfY291bnQgKz0gKGlkeCA+PSBwYWRkaW5nX2lkeCkgJiYKKyAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgKGNoZWNrW2lkeF0gPT0gcGFkbGVuIC0gMSk7CisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG1hc2sgPSBtYmVkdGxzX3NzbF9jZl9tYXNrX2dlKCBpZHgsIHBhZGRpbmdfaWR4ICk7CisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGVxdWFsID0gbWJlZHRsc19zc2xfY2ZfYm9vbF9lcSggY2hlY2tbaWR4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRsZW4gLSAxICk7CisgICAgICAgICAgICAgICAgcGFkX2NvdW50ICs9IG1hc2sgJiBlcXVhbDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvcnJlY3QgJj0gKCBwYWRfY291bnQgPT0gcGFkbGVuICk7CisgICAgICAgICAgICBjb3JyZWN0ICY9IG1iZWR0bHNfc3NsX2NmX2Jvb2xfZXEoIHBhZF9jb3VudCwgcGFkbGVuICk7CiAKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RFQlVHX0FMTCkKICAgICAgICAgICAgIGlmKCBwYWRsZW4gPiAwICYmIGNvcnJlY3QgPT0gMCApCiAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJiYWQgcGFkZGluZyBieXRlIGRldGVjdGVkIiApICk7CiAjZW5kaWYKLSAgICAgICAgICAgIHBhZGxlbiAmPSBjb3JyZWN0ICogMHgxRkY7CisgICAgICAgICAgICBwYWRsZW4gJj0gbWJlZHRsc19zc2xfY2ZfbWFza19mcm9tX2JpdCggY29ycmVjdCApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxIHx8IE1CRURUTFNfU1NMX1BST1RPX1RMUzFfMSB8fCBcCkBAIC0xNDkxLDggKzE3MTMsNyBAQAogICAgICAgICByZWMtPmRhdGFfbGVuIC09IHBhZGxlbjsKICAgICB9CiAgICAgZWxzZQotI2VuZGlmIC8qIE1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICYmCi0gICAgICAgICAgKCBNQkVEVExTX0FFU19DIHx8IE1CRURUTFNfQ0FNRUxMSUFfQyB8fCBNQkVEVExTX0FSSUFfQyApICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfU09NRV9TVUlURVNfVVNFX0NCQyAqLwogICAgIHsKICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAxLCAoICJzaG91bGQgbmV2ZXIgaGFwcGVuIiApICk7CiAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CkBAIC0xNTExLDYgKzE3MzIsNyBAQAogICAgIGlmKCBhdXRoX2RvbmUgPT0gMCApCiAgICAgewogICAgICAgICB1bnNpZ25lZCBjaGFyIG1hY19leHBlY3RbTUJFRFRMU19TU0xfTUFDX0FERF07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbWFjX3BlZXJbTUJFRFRMU19TU0xfTUFDX0FERF07CiAKICAgICAgICAgLyogSWYgdGhlIGluaXRpYWwgdmFsdWUgb2YgcGFkbGVuIHdhcyBzdWNoIHRoYXQKICAgICAgICAgICogZGF0YV9sZW4gPCBtYWNsZW4gKyBwYWRsZW4gKyAxLCB0aGVuIHBhZGxlbgpAQCAtMTUzNyw2ICsxNzU5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHJlYy0+ZGF0YV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICByZWMtPmN0ciwgcmVjLT50eXBlLAogICAgICAgICAgICAgICAgICAgICAgbWFjX2V4cGVjdCApOworICAgICAgICAgICAgbWVtY3B5KCBtYWNfcGVlciwgZGF0YSArIHJlYy0+ZGF0YV9sZW4sIHRyYW5zZm9ybS0+bWFjbGVuICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogI2VuZGlmIC8qIE1CRURUTFNfU1NMX1BST1RPX1NTTDMgKi8KQEAgLTE1NDUsNDAgKzE3NjgsOCBAQAogICAgICAgICBpZiggdHJhbnNmb3JtLT5taW5vcl92ZXIgPiBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzAgKQogICAgICAgICB7CiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICogUHJvY2VzcyBNQUMgYW5kIGFsd2F5cyB1cGRhdGUgZm9yIHBhZGxlbiBhZnRlcndhcmRzIHRvIG1ha2UKLSAgICAgICAgICAgICAqIHRvdGFsIHRpbWUgaW5kZXBlbmRlbnQgb2YgcGFkbGVuLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIEtub3duIHRpbWluZyBhdHRhY2tzOgotICAgICAgICAgICAgICogIC0gTHVja3kgVGhpcnRlZW4gKGh0dHA6Ly93d3cuaXNnLnJodWwuYWMudWsvdGxzL1RMU3RpbWluZy5wZGYpCi0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogVG8gY29tcGVuc2F0ZSBmb3IgZGlmZmVyZW50IHRpbWluZ3MgZm9yIHRoZSBNQUMgY2FsY3VsYXRpb24KLSAgICAgICAgICAgICAqIGRlcGVuZGluZyBvbiBob3cgbXVjaCBwYWRkaW5nIHdhcyByZW1vdmVkICh3aGljaCBpcyBkZXRlcm1pbmVkCi0gICAgICAgICAgICAgKiBieSBwYWRsZW4pLCBwcm9jZXNzIGV4dHJhX3J1biBtb3JlIGJsb2NrcyB0aHJvdWdoIHRoZSBoYXNoCi0gICAgICAgICAgICAgKiBmdW5jdGlvbi4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBUaGUgZm9ybXVsYSBpbiB0aGUgcGFwZXIgaXMKLSAgICAgICAgICAgICAqICAgZXh0cmFfcnVuID0gY2VpbCggKEwxLTU1KSAvIDY0ICkgLSBjZWlsKCAoTDItNTUpIC8gNjQgKQotICAgICAgICAgICAgICogd2hlcmUgTDEgaXMgdGhlIHNpemUgb2YgdGhlIGhlYWRlciBwbHVzIHRoZSBkZWNyeXB0ZWQgbWVzc2FnZQotICAgICAgICAgICAgICogcGx1cyBDQkMgcGFkZGluZyBhbmQgTDIgaXMgdGhlIHNpemUgb2YgdGhlIGhlYWRlciBwbHVzIHRoZQotICAgICAgICAgICAgICogZGVjcnlwdGVkIG1lc3NhZ2UuIFRoaXMgaXMgZm9yIGFuIHVuZGVybHlpbmcgaGFzaCBmdW5jdGlvbgotICAgICAgICAgICAgICogd2l0aCA2NC1ieXRlIGJsb2Nrcy4KLSAgICAgICAgICAgICAqIFdlIHVzZSAoIChMeCs4KSAvIDY0ICkgdG8gaGFuZGxlICduZWdhdGl2ZSBMeCcgdmFsdWVzCi0gICAgICAgICAgICAgKiBjb3JyZWN0bHkuIFdlIHJvdW5kIGRvd24gaW5zdGVhZCBvZiB1cCwgc28gLTU2IGlzIHRoZSBjb3JyZWN0Ci0gICAgICAgICAgICAgKiB2YWx1ZSBmb3Igb3VyIGNhbGN1bGF0aW9ucyBpbnN0ZWFkIG9mIC01NS4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBSZXBlYXQgdGhlIGZvcm11bGEgcmF0aGVyIHRoYW4gZGVmaW5pbmcgYSBibG9ja19zaXplIHZhcmlhYmxlLgotICAgICAgICAgICAgICogVGhpcyBhdm9pZHMgcmVxdWlyaW5nIGRpdmlzaW9uIGJ5IGEgdmFyaWFibGUgYXQgcnVudGltZQotICAgICAgICAgICAgICogKHdoaWNoIHdvdWxkIGJlIG1hcmdpbmFsbHkgbGVzcyBlZmZpY2llbnQgYW5kIHdvdWxkIHJlcXVpcmUKLSAgICAgICAgICAgICAqIGxpbmtpbmcgYW4gZXh0cmEgZGl2aXNpb24gZnVuY3Rpb24gaW4gc29tZSBidWlsZHMpLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzaXplX3QgaiwgZXh0cmFfcnVuID0gMDsKLSAgICAgICAgICAgIC8qIFRoaXMgc2l6ZSBpcyBlbm91Z2ggdG8gc2VydmVyIGVpdGhlciBhcyBpbnB1dCB0bwotICAgICAgICAgICAgICogbWRfcHJvY2VzcygpIG9yIGFzIG91dHB1dCB0byBtZF9maW5pc2goKSAqLwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciB0bXBbTUJFRFRMU19NRF9NQVhfQkxPQ0tfU0laRV07Ci0KLSAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBUaGUgbmV4dCB0d28gc2l6ZXMgYXJlIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBvZgotICAgICAgICAgICAgICogaW5fbXNnbGVuIG92ZXIgYWxsIHBhZGxlbiB2YWx1ZXMuCisgICAgICAgICAgICAgKiBkYXRhX2xlbiBvdmVyIGFsbCBwYWRsZW4gdmFsdWVzLgogICAgICAgICAgICAgICoKICAgICAgICAgICAgICAqIFRoZXkncmUgaW5kZXBlbmRlbnQgb2YgcGFkbGVuLCBzaW5jZSB3ZSBwcmV2aW91c2x5IGRpZAogICAgICAgICAgICAgICogZGF0YV9sZW4gLT0gcGFkbGVuLgpAQCAtMTU4OSw2NCArMTc4MCwyMCBAQAogICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG1heF9sZW4gPSByZWMtPmRhdGFfbGVuICsgcGFkbGVuOwogICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG1pbl9sZW4gPSAoIG1heF9sZW4gPiAyNTYgKSA/IG1heF9sZW4gLSAyNTYgOiAwOwogCi0gICAgICAgICAgICBtZW1zZXQoIHRtcCwgMCwgc2l6ZW9mKCB0bXAgKSApOwotCi0gICAgICAgICAgICBzd2l0Y2goIG1iZWR0bHNfbWRfZ2V0X3R5cGUoIHRyYW5zZm9ybS0+bWRfY3R4X2RlYy5tZF9pbmZvICkgKQorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfY2ZfaG1hYyggJnRyYW5zZm9ybS0+bWRfY3R4X2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9kYXRhLCBhZGRfZGF0YV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCByZWMtPmRhdGFfbGVuLCBtaW5fbGVuLCBtYXhfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjX2V4cGVjdCApOworICAgICAgICAgICAgaWYoIHJldCAhPSAwICkKICAgICAgICAgICAgIHsKLSNpZiBkZWZpbmVkKE1CRURUTFNfTUQ1X0MpIHx8IGRlZmluZWQoTUJFRFRMU19TSEExX0MpIHx8IFwKLSAgICBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCi0gICAgICAgICAgICAgICAgY2FzZSBNQkVEVExTX01EX01ENToKLSAgICAgICAgICAgICAgICBjYXNlIE1CRURUTFNfTURfU0hBMToKLSAgICAgICAgICAgICAgICBjYXNlIE1CRURUTFNfTURfU0hBMjU2OgotICAgICAgICAgICAgICAgICAgICAvKiA4IGJ5dGVzIG9mIG1lc3NhZ2Ugc2l6ZSwgNjQtYnl0ZSBjb21wcmVzc2lvbiBibG9ja3MgKi8KLSAgICAgICAgICAgICAgICAgICAgZXh0cmFfcnVuID0KLSAgICAgICAgICAgICAgICAgICAgICAgICggYWRkX2RhdGFfbGVuICsgcmVjLT5kYXRhX2xlbiArIHBhZGxlbiArIDggKSAvIDY0IC0KLSAgICAgICAgICAgICAgICAgICAgICAgICggYWRkX2RhdGFfbGVuICsgcmVjLT5kYXRhX2xlbiAgICAgICAgICArIDggKSAvIDY0OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoTUJFRFRMU19TSEE1MTJfQykKLSAgICAgICAgICAgICAgICBjYXNlIE1CRURUTFNfTURfU0hBMzg0OgotICAgICAgICAgICAgICAgICAgICAvKiAxNiBieXRlcyBvZiBtZXNzYWdlIHNpemUsIDEyOC1ieXRlIGNvbXByZXNzaW9uIGJsb2NrcyAqLwotICAgICAgICAgICAgICAgICAgICBleHRyYV9ydW4gPQotICAgICAgICAgICAgICAgICAgICAgICAgKCBhZGRfZGF0YV9sZW4gKyByZWMtPmRhdGFfbGVuICsgcGFkbGVuICsgMTYgKSAvIDEyOCAtCi0gICAgICAgICAgICAgICAgICAgICAgICAoIGFkZF9kYXRhX2xlbiArIHJlYy0+ZGF0YV9sZW4gICAgICAgICAgKyAxNiApIC8gMTI4OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAic2hvdWxkIG5ldmVyIGhhcHBlbiIgKSApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUiApOworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX1JFVCggMSwgIm1iZWR0bHNfc3NsX2NmX2htYWMiLCByZXQgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oIHJldCApOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBleHRyYV9ydW4gJj0gY29ycmVjdCAqIDB4RkY7Ci0KLSAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZ0cmFuc2Zvcm0tPm1kX2N0eF9kZWMsIGFkZF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2RhdGFfbGVuICk7Ci0gICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmdHJhbnNmb3JtLT5tZF9jdHhfZGVjLCBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjLT5kYXRhX2xlbiApOwotICAgICAgICAgICAgLyogTWFrZSBzdXJlIHdlIGFjY2VzcyBldmVyeXRoaW5nIGV2ZW4gd2hlbiBwYWRsZW4gPiAwLiBUaGlzCi0gICAgICAgICAgICAgKiBtYWtlcyB0aGUgc3luY2hyb25pc2F0aW9uIHJlcXVpcmVtZW50cyBmb3IganVzdC1pbi10aW1lCi0gICAgICAgICAgICAgKiBQcmltZStQcm9iZSBhdHRhY2tzIG11Y2ggdGlnaHRlciBhbmQgaG9wZWZ1bGx5IGltcHJhY3RpY2FsLiAqLwotICAgICAgICAgICAgc3NsX3JlYWRfbWVtb3J5KCBkYXRhICsgcmVjLT5kYXRhX2xlbiwgcGFkbGVuICk7Ci0gICAgICAgICAgICBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmdHJhbnNmb3JtLT5tZF9jdHhfZGVjLCBtYWNfZXhwZWN0ICk7Ci0KLSAgICAgICAgICAgIC8qIER1bW15IGNhbGxzIHRvIGNvbXByZXNzaW9uIGZ1bmN0aW9uLgotICAgICAgICAgICAgICogQ2FsbCBtYmVkdGxzX21kX3Byb2Nlc3MgYXQgbGVhc3Qgb25jZSBkdWUgdG8gY2FjaGUgYXR0YWNrcwotICAgICAgICAgICAgICogdGhhdCBvYnNlcnZlIHdoZXRoZXIgbWRfcHJvY2VzcygpIHdhcyBjYWxsZWQgb2Ygbm90LgotICAgICAgICAgICAgICogUmVzcGVjdCB0aGUgdXN1YWwgc3RhcnQtKHByb2Nlc3N8dXBkYXRlKS1maW5pc2ggc2VxdWVuY2UgZm9yCi0gICAgICAgICAgICAgKiB0aGUgc2FrZSBvZiBoYXJkd2FyZSBhY2NlbGVyYXRvcnMgdGhhdCBtaWdodCByZXF1aXJlIGl0LiAqLwotICAgICAgICAgICAgbWJlZHRsc19tZF9zdGFydHMoICZ0cmFuc2Zvcm0tPm1kX2N0eF9kZWMgKTsKLSAgICAgICAgICAgIGZvciggaiA9IDA7IGogPCBleHRyYV9ydW4gKyAxOyBqKysgKQotICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfcHJvY2VzcyggJnRyYW5zZm9ybS0+bWRfY3R4X2RlYywgdG1wICk7Ci0gICAgICAgICAgICBtYmVkdGxzX21kX2ZpbmlzaCggJnRyYW5zZm9ybS0+bWRfY3R4X2RlYywgdG1wICk7Ci0KLSAgICAgICAgICAgIG1iZWR0bHNfbWRfaG1hY19yZXNldCggJnRyYW5zZm9ybS0+bWRfY3R4X2RlYyApOwotCi0gICAgICAgICAgICAvKiBNYWtlIHN1cmUgd2UgYWNjZXNzIGFsbCB0aGUgbWVtb3J5IHRoYXQgY291bGQgY29udGFpbiB0aGUgTUFDLAotICAgICAgICAgICAgICogYmVmb3JlIHdlIGNoZWNrIGl0IGluIHRoZSBuZXh0IGNvZGUgYmxvY2suIFRoaXMgbWFrZXMgdGhlCi0gICAgICAgICAgICAgKiBzeW5jaHJvbmlzYXRpb24gcmVxdWlyZW1lbnRzIGZvciBqdXN0LWluLXRpbWUgUHJpbWUrUHJvYmUKLSAgICAgICAgICAgICAqIGF0dGFja3MgbXVjaCB0aWdodGVyIGFuZCBob3BlZnVsbHkgaW1wcmFjdGljYWwuICovCi0gICAgICAgICAgICBzc2xfcmVhZF9tZW1vcnkoIGRhdGEgKyBtaW5fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGVuIC0gbWluX2xlbiArIHRyYW5zZm9ybS0+bWFjbGVuICk7CisgICAgICAgICAgICBtYmVkdGxzX3NzbF9jZl9tZW1jcHlfb2Zmc2V0KCBtYWNfcGVlciwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYy0+ZGF0YV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fbGVuLCBtYXhfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5tYWNsZW4gKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fVExTMSB8fCBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzEgfHwgXApAQCAtMTY1OCwxMCArMTgwNSwxMCBAQAogCiAjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9ERUJVR19BTEwpCiAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgImV4cGVjdGVkIG1hYyIsIG1hY19leHBlY3QsIHRyYW5zZm9ybS0+bWFjbGVuICk7Ci0gICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggNCwgIm1lc3NhZ2UgIG1hYyIsIGRhdGEgKyByZWMtPmRhdGFfbGVuLCB0cmFuc2Zvcm0tPm1hY2xlbiApOworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19CVUYoIDQsICJtZXNzYWdlICBtYWMiLCBtYWNfcGVlciwgdHJhbnNmb3JtLT5tYWNsZW4gKTsKICNlbmRpZgogCi0gICAgICAgIGlmKCBtYmVkdGxzX3NzbF9zYWZlcl9tZW1jbXAoIGRhdGEgKyByZWMtPmRhdGFfbGVuLCBtYWNfZXhwZWN0LAorICAgICAgICBpZiggbWJlZHRsc19zc2xfc2FmZXJfbWVtY21wKCBtYWNfcGVlciwgbWFjX2V4cGVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5tYWNsZW4gKSAhPSAwICkKICAgICAgICAgewogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfREVCVUdfQUxMKQpAQCAtMTg3MSwxNCArMjAxOCw2IEBACiAgICAgewogICAgICAgICB1aW50MzJfdCB0aW1lb3V0OwogCi0gICAgICAgIC8qIEp1c3QgdG8gYmUgc3VyZSAqLwotICAgICAgICBpZiggc3NsLT5mX3NldF90aW1lciA9PSBOVUxMIHx8IHNzbC0+Zl9nZXRfdGltZXIgPT0gTlVMTCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiWW91IG11c3QgdXNlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJtYmVkdGxzX3NzbF9zZXRfdGltZXJfY2IoKSBmb3IgRFRMUyIgKSApOwotICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKLSAgICAgICAgfQotCiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoZSBwb2ludCBpcywgd2UgbmVlZCB0byBhbHdheXMgcmVhZCBhIGZ1bGwgZGF0YWdyYW0gYXQgb25jZSwgc28gd2UKICAgICAgICAgICogc29tZXRpbWVzIHJlYWQgbW9yZSB0aGVuIHJlcXVlc3RlZCwgYW5kIGhhbmRsZSB0aGUgYWRkaXRpb25hbCBkYXRhLgpAQCAtNTU3OSw2ICs1NzE4LDEwIEBACiAgICAgbWVtY3B5KCBidWYsIHNzbC0+aW5fb2ZmdCwgbiApOwogICAgIHNzbC0+aW5fbXNnbGVuIC09IG47CiAKKyAgICAvKiBaZXJvaXNpbmcgdGhlIHBsYWludGV4dCBidWZmZXIgdG8gZXJhc2UgdW51c2VkIGFwcGxpY2F0aW9uIGRhdGEKKyAgICAgICBmcm9tIHRoZSBtZW1vcnkuICovCisgICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKCBzc2wtPmluX29mZnQsIG4gKTsKKwogICAgIGlmKCBzc2wtPmluX21zZ2xlbiA9PSAwICkKICAgICB7CiAgICAgICAgIC8qIGFsbCBieXRlcyBjb25zdW1lZCAqLwpkaWZmIC0tZ2l0IGEvbGlicmFyeS9zc2xfc3J2LmMgYi9saWJyYXJ5L3NzbF9zcnYuYwppbmRleCAyZTYzZmNlLi4wNzBhNTkxIDEwMDY0NAotLS0gYS9saWJyYXJ5L3NzbF9zcnYuYworKysgYi9saWJyYXJ5L3NzbF9zcnYuYwpAQCAtNzc2LDYgKzc3NiwxMjYgQEAKIH0KICNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKK3N0YXRpYyBpbnQgc3NsX3BhcnNlX3VzZV9zcnRwX2V4dCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gKQoreworICAgIG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSBjbGllbnRfcHJvdGVjdGlvbiA9IE1CRURUTFNfVExTX1NSVFBfVU5TRVQ7CisgICAgc2l6ZV90IGksajsKKyAgICBzaXplX3QgcHJvZmlsZV9sZW5ndGg7CisgICAgdWludDE2X3QgbWtpX2xlbmd0aDsKKyAgICAvKiEgMiBieXRlcyBmb3IgcHJvZmlsZSBsZW5ndGggYW5kIDEgYnl0ZSBmb3IgbWtpIGxlbiAqLworICAgIGNvbnN0IHNpemVfdCBzaXplX29mX2xlbmd0aHMgPSAzOworCisgICAgLyogSWYgdXNlX3NydHAgaXMgbm90IGNvbmZpZ3VyZWQsIGp1c3QgaWdub3JlIHRoZSBleHRlbnNpb24gKi8KKyAgICBpZiggKCBzc2wtPmNvbmYtPnRyYW5zcG9ydCAhPSBNQkVEVExTX1NTTF9UUkFOU1BPUlRfREFUQUdSQU0gKSB8fAorICAgICAgICAoIHNzbC0+Y29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdCA9PSBOVUxMICkgfHwKKyAgICAgICAgKCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RfbGVuID09IDAgKSApCisgICAgeworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisKKyAgICAvKiBSRkM1NzY0IHNlY3Rpb24gNC4xLjEKKyAgICAgKiB1aW50OCBTUlRQUHJvdGVjdGlvblByb2ZpbGVbMl07CisgICAgICoKKyAgICAgKiBzdHJ1Y3QgeworICAgICAqICAgU1JUUFByb3RlY3Rpb25Qcm9maWxlcyBTUlRQUHJvdGVjdGlvblByb2ZpbGVzOworICAgICAqICAgb3BhcXVlIHNydHBfbWtpPDAuLjI1NT47CisgICAgICogfSBVc2VTUlRQRGF0YTsKKworICAgICAqIFNSVFBQcm90ZWN0aW9uUHJvZmlsZSBTUlRQUHJvdGVjdGlvblByb2ZpbGVzPDIuLjJeMTYtMT47CisgICAgICovCisKKyAgICAvKgorICAgICAqIE1pbiBsZW5ndGggaXMgNTogYXQgbGVhc3Qgb25lIHByb3RlY3Rpb24gcHJvZmlsZSgyIGJ5dGVzKQorICAgICAqICAgICAgICAgICAgICAgICAgYW5kIGxlbmd0aCgyIGJ5dGVzKSArIHNydHBfbWtpIGxlbmd0aCgxIGJ5dGUpCisgICAgICogQ2hlY2sgaGVyZSB0aGF0IHdlIGhhdmUgYXQgbGVhc3QgMiBieXRlcyBvZiBwcm90ZWN0aW9uIHByb2ZpbGVzIGxlbmd0aAorICAgICAqIGFuZCBvbmUgb2Ygc3J0cF9ta2kgbGVuZ3RoCisgICAgICovCisgICAgaWYoIGxlbiA8IHNpemVfb2ZfbGVuZ3RocyApCisgICAgeworICAgICAgICBtYmVkdGxzX3NzbF9zZW5kX2FsZXJ0X21lc3NhZ2UoIHNzbCwgTUJFRFRMU19TU0xfQUxFUlRfTEVWRUxfRkFUQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfQUxFUlRfTVNHX0hBTkRTSEFLRV9GQUlMVVJFICk7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9IU19DTElFTlRfSEVMTE8gKTsKKyAgICB9CisKKyAgIHNzbC0+ZHRsc19zcnRwX2luZm8uY2hvc2VuX2R0bHNfc3J0cF9wcm9maWxlID0gTUJFRFRMU19UTFNfU1JUUF9VTlNFVDsKKworICAgIC8qIGZpcnN0IDIgYnl0ZXMgYXJlIHByb3RlY3Rpb24gcHJvZmlsZSBsZW5ndGgoaW4gYnl0ZXMpICovCisgICAgcHJvZmlsZV9sZW5ndGggPSAoIGJ1ZlswXSA8PCA4ICkgfCBidWZbMV07CisgICAgYnVmICs9IDI7CisKKyAgICAvKiBUaGUgcHJvZmlsZSBsZW5ndGggY2Fubm90IGJlIGJpZ2dlciB0aGFuIGlucHV0IGJ1ZmZlciBzaXplIC0gbGVuZ3RocyBmaWVsZHMgKi8KKyAgICBpZiggcHJvZmlsZV9sZW5ndGggPiBsZW4gLSBzaXplX29mX2xlbmd0aHMgfHwKKyAgICAgICAgcHJvZmlsZV9sZW5ndGggJSAyICE9IDAgKSAvKiBwcm9maWxlcyBhcmUgMiBieXRlcyBsb25nLCBzbyB0aGUgbGVuZ3RoIG11c3QgYmUgZXZlbiAqLworICAgIHsKKyAgICAgICAgbWJlZHRsc19zc2xfc2VuZF9hbGVydF9tZXNzYWdlKCBzc2wsIE1CRURUTFNfU1NMX0FMRVJUX0xFVkVMX0ZBVEFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0FMRVJUX01TR19IQU5EU0hBS0VfRkFJTFVSRSApOworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSFNfQ0xJRU5UX0hFTExPICk7CisgICAgfQorICAgIC8qCisgICAgICogcGFyc2UgdGhlIGV4dGVuc2lvbiBsaXN0IHZhbHVlcyBhcmUgZGVmaW5lZCBpbgorICAgICAqIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvc3J0cC1wcm90ZWN0aW9uL3NydHAtcHJvdGVjdGlvbi54aHRtbAorICAgICAqLworICAgIGZvciggaiA9IDA7IGogPCBwcm9maWxlX2xlbmd0aDsgaiArPSAyICkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IHByb3RlY3Rpb25fcHJvZmlsZV92YWx1ZSA9IGJ1ZltqXSA8PCA4IHwgYnVmW2ogKyAxXTsKKyAgICAgICAgY2xpZW50X3Byb3RlY3Rpb24gPSBtYmVkdGxzX3NzbF9jaGVja19zcnRwX3Byb2ZpbGVfdmFsdWUoIHByb3RlY3Rpb25fcHJvZmlsZV92YWx1ZSApOworCisgICAgICAgIGlmKCBjbGllbnRfcHJvdGVjdGlvbiAhPSBNQkVEVExTX1RMU19TUlRQX1VOU0VUICkKKyAgICAgICAgeworICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJmb3VuZCBzcnRwIHByb2ZpbGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9zcnRwX3Byb2ZpbGVfYXNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfcHJvdGVjdGlvbiApICkgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8qIGNoZWNrIGlmIHN1Z2dlc3RlZCBwcm9maWxlIGlzIGluIG91ciBsaXN0ICovCisgICAgICAgIGZvciggaSA9IDA7IGkgPCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RfbGVuOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCBjbGllbnRfcHJvdGVjdGlvbiA9PSBzc2wtPmNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RbaV0gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNzbC0+ZHRsc19zcnRwX2luZm8uY2hvc2VuX2R0bHNfc3J0cF9wcm9maWxlID0gc3NsLT5jb25mLT5kdGxzX3NydHBfcHJvZmlsZV9saXN0W2ldOworICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VsZWN0ZWQgc3J0cCBwcm9maWxlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2dldF9zcnRwX3Byb2ZpbGVfYXNfc3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9wcm90ZWN0aW9uICkgKSApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKCBzc2wtPmR0bHNfc3J0cF9pbmZvLmNob3Nlbl9kdGxzX3NydHBfcHJvZmlsZSAhPSBNQkVEVExTX1RMU19TUlRQX1VOU0VUICkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBidWYgKz0gcHJvZmlsZV9sZW5ndGg7IC8qIGJ1ZiBwb2ludHMgdG8gdGhlIG1raSBsZW5ndGggKi8KKyAgICBta2lfbGVuZ3RoID0gKmJ1ZjsKKyAgICBidWYrKzsKKworICAgIGlmKCBta2lfbGVuZ3RoID4gTUJFRFRMU19UTFNfU1JUUF9NQVhfTUtJX0xFTkdUSCB8fAorICAgICAgICBta2lfbGVuZ3RoICsgcHJvZmlsZV9sZW5ndGggKyBzaXplX29mX2xlbmd0aHMgIT0gbGVuICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX3NlbmRfYWxlcnRfbWVzc2FnZSggc3NsLCBNQkVEVExTX1NTTF9BTEVSVF9MRVZFTF9GQVRBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9BTEVSVF9NU0dfSEFORFNIQUtFX0ZBSUxVUkUgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0hTX0NMSUVOVF9IRUxMTyApOworICAgIH0KKworICAgIC8qIFBhcnNlIHRoZSBta2kgb25seSBpZiBwcmVzZW50IGFuZCBta2kgaXMgc3VwcG9ydGVkIGxvY2FsbHkgKi8KKyAgICBpZiggc3NsLT5jb25mLT5kdGxzX3NydHBfbWtpX3N1cHBvcnQgPT0gTUJFRFRMU19TU0xfRFRMU19TUlRQX01LSV9TVVBQT1JURUQgJiYKKyAgICAgICAgICBta2lfbGVuZ3RoID4gMCApCisgICAgeworICAgICAgICBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV9sZW4gPSBta2lfbGVuZ3RoOworCisgICAgICAgIG1lbWNweSggc3NsLT5kdGxzX3NydHBfaW5mby5ta2lfdmFsdWUsIGJ1ZiwgbWtpX2xlbmd0aCApOworCisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX0JVRiggMywgInVzaW5nIG1raSIsICBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX2xlbiApOworICAgIH0KKworICAgIHJldHVybiggMCApOworfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLworCiAvKgogICogQXV4aWxpYXJ5IGZ1bmN0aW9ucyBmb3IgU2VydmVySGVsbG8gcGFyc2luZyBhbmQgcmVsYXRlZCBhY3Rpb25zCiAgKi8KQEAgLTE5NDIsNiArMjA2MiwxNiBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmIC8qIE1CRURUTFNfU1NMX1NFU1NJT05fVElDS0VUUyAqLwogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCisgICAgICAgICAgICBjYXNlIE1CRURUTFNfVExTX0VYVF9VU0VfU1JUUDoKKyAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgKSApOworCisgICAgICAgICAgICAgICAgcmV0ID0gc3NsX3BhcnNlX3VzZV9zcnRwX2V4dCggc3NsLCBleHQgKyA0LCBleHRfc2l6ZSApOworICAgICAgICAgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAzLCAoICJ1bmtub3duIGV4dGVuc2lvbiBmb3VuZDogJWQgKGlnbm9yaW5nKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X2lkICkgKTsKQEAgLTI1MDAsNiArMjYzMCw3OCBAQAogfQogI2VuZGlmIC8qIE1CRURUTFNfRUNESF9DIHx8IE1CRURUTFNfRUNEU0FfQyAqLwogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFAgKSAmJiBkZWZpbmVkKE1CRURUTFNfU1NMX1BST1RPX0RUTFMpCitzdGF0aWMgdm9pZCBzc2xfd3JpdGVfdXNlX3NydHBfZXh0KCBtYmVkdGxzX3NzbF9jb250ZXh0ICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKm9sZW4gKQoreworICAgIHNpemVfdCBta2lfbGVuID0gMCwgZXh0X2xlbiA9IDA7CisgICAgdWludDE2X3QgcHJvZmlsZV92YWx1ZSA9IDA7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gc3NsLT5vdXRfbXNnICsgTUJFRFRMU19TU0xfT1VUX0NPTlRFTlRfTEVOOworCisgICAgKm9sZW4gPSAwOworCisgICAgaWYoICggc3NsLT5jb25mLT50cmFuc3BvcnQgIT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICkgfHwKKyAgICAgICAgKCBzc2wtPmR0bHNfc3J0cF9pbmZvLmNob3Nlbl9kdGxzX3NydHBfcHJvZmlsZSA9PSBNQkVEVExTX1RMU19TUlRQX1VOU0VUICkgKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMywgKCAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiApICk7CisKKyAgICBpZiggc3NsLT5jb25mLT5kdGxzX3NydHBfbWtpX3N1cHBvcnQgPT0gTUJFRFRMU19TU0xfRFRMU19TUlRQX01LSV9TVVBQT1JURUQgKQorICAgIHsKKyAgICAgICAgbWtpX2xlbiA9IHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX2xlbjsKKyAgICB9CisKKyAgICAvKiBUaGUgZXh0ZW5zaW9uIHRvdGFsIHNpemUgaXMgOSBieXRlcyA6CisgICAgICogLSAyIGJ5dGVzIGZvciB0aGUgZXh0ZW5zaW9uIHRhZworICAgICAqIC0gMiBieXRlcyBmb3IgdGhlIHRvdGFsIHNpemUKKyAgICAgKiAtIDIgYnl0ZXMgZm9yIHRoZSBwcm90ZWN0aW9uIHByb2ZpbGUgbGVuZ3RoCisgICAgICogLSAyIGJ5dGVzIGZvciB0aGUgcHJvdGVjdGlvbiBwcm9maWxlCisgICAgICogLSAxIGJ5dGUgZm9yIHRoZSBta2kgbGVuZ3RoCisgICAgICogKyAgdGhlIGFjdHVhbCBta2kgbGVuZ3RoCisgICAgICogQ2hlY2sgd2UgaGF2ZSBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciAqLworICAgIGlmKCAoc2l6ZV90KSggZW5kIC0gYnVmICkgPCBta2lfbGVuICsgOSApCisgICAgeworICAgICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDEsICggImJ1ZmZlciB0b28gc21hbGwiICkgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIGV4dGVuc2lvbiAqLworICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfVVNFX1NSVFAgPj4gOCApICYgMHhGRiApOworICAgIGJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSggKCBNQkVEVExTX1RMU19FWFRfVVNFX1NSVFAgICAgICApICYgMHhGRiApOworICAgIC8qCisgICAgICogdG90YWwgbGVuZ3RoIDUgYW5kIG1raSB2YWx1ZTogb25seSBvbmUgcHJvZmlsZSgyIGJ5dGVzKQorICAgICAqICAgICAgICAgICAgICBhbmQgbGVuZ3RoKDIgYnl0ZXMpIGFuZCBzcnRwX21raSAgKQorICAgICAqLworICAgIGV4dF9sZW4gPSA1ICsgbWtpX2xlbjsKKyAgICBidWZbMl0gPSAodW5zaWduZWQgY2hhcikoICggZXh0X2xlbiA+PiA4ICkgJiAweEZGICk7CisgICAgYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpKCBleHRfbGVuICYgMHhGRiApOworCisgICAgLyogcHJvdGVjdGlvbiBwcm9maWxlIGxlbmd0aDogMiAqLworICAgIGJ1Zls0XSA9IDB4MDA7CisgICAgYnVmWzVdID0gMHgwMjsKKyAgICBwcm9maWxlX3ZhbHVlID0gbWJlZHRsc19zc2xfY2hlY2tfc3J0cF9wcm9maWxlX3ZhbHVlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wtPmR0bHNfc3J0cF9pbmZvLmNob3Nlbl9kdGxzX3NydHBfcHJvZmlsZSApOworICAgIGlmKCBwcm9maWxlX3ZhbHVlICE9IE1CRURUTFNfVExTX1NSVFBfVU5TRVQgKQorICAgIHsKKyAgICAgICAgYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpKCAoIHByb2ZpbGVfdmFsdWUgPj4gOCApICYgMHhGRiApOworICAgICAgICBidWZbN10gPSAodW5zaWduZWQgY2hhcikoIHByb2ZpbGVfdmFsdWUgJiAweEZGICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAidXNlX3NydHAgZXh0ZW5zaW9uIGludmFsaWQgcHJvZmlsZSIgKSApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYnVmWzhdID0gbWtpX2xlbiAmIDB4RkY7CisgICAgbWVtY3B5KCAmYnVmWzldLCBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV92YWx1ZSwgbWtpX2xlbiApOworCisgICAgKm9sZW4gPSA5ICsgbWtpX2xlbjsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKwogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpCiBzdGF0aWMgaW50IHNzbF93cml0ZV9oZWxsb192ZXJpZnlfcmVxdWVzdCggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsICkKIHsKQEAgLTI3ODgsNiArMjk5MCwxMSBAQAogICAgIGV4dF9sZW4gKz0gb2xlbjsKICNlbmRpZgogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCisgICAgc3NsX3dyaXRlX3VzZV9zcnRwX2V4dCggc3NsLCBwICsgMiArIGV4dF9sZW4sICZvbGVuICk7CisgICAgZXh0X2xlbiArPSBvbGVuOworI2VuZGlmCisKICAgICBNQkVEVExTX1NTTF9ERUJVR19NU0coIDMsICggInNlcnZlciBoZWxsbywgdG90YWwgZXh0ZW5zaW9uIGxlbmd0aDogJWQiLCBleHRfbGVuICkgKTsKIAogICAgIGlmKCBleHRfbGVuID4gMCApCmRpZmYgLS1naXQgYS9saWJyYXJ5L3NzbF90bHMuYyBiL2xpYnJhcnkvc3NsX3Rscy5jCmluZGV4IDcwNjJkNTMuLjdjYjViOGMgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvc3NsX3Rscy5jCisrKyBiL2xpYnJhcnkvc3NsX3Rscy5jCkBAIC0zODU5LDYgKzM4NTksMTAgQEAKIAogICAgIG1iZWR0bHNfc3NsX3Jlc2V0X2luX291dF9wb2ludGVycyggc3NsICk7CiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKKyAgICBtZW1zZXQoICZzc2wtPmR0bHNfc3J0cF9pbmZvLCAwLCBzaXplb2Yoc3NsLT5kdGxzX3NydHBfaW5mbykgKTsKKyNlbmRpZgorCiAgICAgaWYoICggcmV0ID0gc3NsX2hhbmRzaGFrZV9pbml0KCBzc2wgKSApICE9IDAgKQogICAgICAgICBnb3RvIGVycm9yOwogCkBAIC00Njg1LDYgKzQ2ODksODYgQEAKIH0KICNlbmRpZiAvKiBNQkVEVExTX1NTTF9BTFBOICovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKK3ZvaWQgbWJlZHRsc19zc2xfY29uZl9zcnRwX21raV92YWx1ZV9zdXBwb3J0ZWQoIG1iZWR0bHNfc3NsX2NvbmZpZyAqY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdXBwb3J0X21raV92YWx1ZSApCit7CisgICAgY29uZi0+ZHRsc19zcnRwX21raV9zdXBwb3J0ID0gc3VwcG9ydF9ta2lfdmFsdWU7Cit9CisKK2ludCBtYmVkdGxzX3NzbF9kdGxzX3NydHBfc2V0X21raV92YWx1ZSggbWJlZHRsc19zc2xfY29udGV4dCAqc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpta2lfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IG1raV9sZW4gKQoreworICAgIGlmKCBta2lfbGVuID4gTUJFRFRMU19UTFNfU1JUUF9NQVhfTUtJX0xFTkdUSCApCisgICAgeworICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworICAgIH0KKworICAgIGlmKCBzc2wtPmNvbmYtPmR0bHNfc3J0cF9ta2lfc3VwcG9ydCA9PSBNQkVEVExTX1NTTF9EVExTX1NSVFBfTUtJX1VOU1VQUE9SVEVEICkKKyAgICB7CisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUgKTsKKyAgICB9CisKKyAgICBtZW1jcHkoIHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX3ZhbHVlLCBta2lfdmFsdWUsIG1raV9sZW4gKTsKKyAgICBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV9sZW4gPSBta2lfbGVuOworICAgIHJldHVybiggMCApOworfQorCitpbnQgbWJlZHRsc19zc2xfY29uZl9kdGxzX3NydHBfcHJvdGVjdGlvbl9wcm9maWxlcyggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSAqcHJvZmlsZXMgKQoreworICAgIGNvbnN0IG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSAqcDsKKyAgICBzaXplX3QgbGlzdF9zaXplID0gMDsKKworICAgIC8qIGNoZWNrIHRoZSBwcm9maWxlcyBsaXN0OiBhbGwgZW50cnkgbXVzdCBiZSB2YWxpZCwKKyAgICAgKiBpdHMgc2l6ZSBjYW5ub3QgYmUgbW9yZSB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2Ygc3VwcG9ydGVkIHByb2ZpbGVzLCBjdXJyZW50bHkgNCAqLworICAgIGZvciggcCA9IHByb2ZpbGVzOyAqcCAhPSBNQkVEVExTX1RMU19TUlRQX1VOU0VUICYmCisgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rfc2l6ZSA8PSBNQkVEVExTX1RMU19TUlRQX01BWF9QUk9GSUxFX0xJU1RfTEVOR1RIOworICAgICAgICAgcCsrICkKKyAgICB7CisgICAgICAgIGlmKCBtYmVkdGxzX3NzbF9jaGVja19zcnRwX3Byb2ZpbGVfdmFsdWUoICpwICkgIT0gTUJFRFRMU19UTFNfU1JUUF9VTlNFVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGxpc3Rfc2l6ZSsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogdW5zdXBwb3J0ZWQgdmFsdWUsIHN0b3AgcGFyc2luZyBhbmQgc2V0IHRoZSBzaXplIHRvIGFuIGVycm9yIHZhbHVlICovCisgICAgICAgICAgICBsaXN0X3NpemUgPSBNQkVEVExTX1RMU19TUlRQX01BWF9QUk9GSUxFX0xJU1RfTEVOR1RIICsgMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBsaXN0X3NpemUgPiBNQkVEVExTX1RMU19TUlRQX01BWF9QUk9GSUxFX0xJU1RfTEVOR1RIICkKKyAgICB7CisgICAgICAgICAgICAgICAgY29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdCA9IE5VTEw7CisgICAgICAgICAgICAgICAgY29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdF9sZW4gPSAwOworICAgICAgICAgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0JBRF9JTlBVVF9EQVRBICk7CisgICAgfQorCisgICAgY29uZi0+ZHRsc19zcnRwX3Byb2ZpbGVfbGlzdCA9IHByb2ZpbGVzOworICAgIGNvbmYtPmR0bHNfc3J0cF9wcm9maWxlX2xpc3RfbGVuID0gbGlzdF9zaXplOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK3ZvaWQgbWJlZHRsc19zc2xfZ2V0X2R0bHNfc3J0cF9uZWdvdGlhdGlvbl9yZXN1bHQoIGNvbnN0IG1iZWR0bHNfc3NsX2NvbnRleHQgKnNzbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfZHRsc19zcnRwX2luZm8gKmR0bHNfc3J0cF9pbmZvICkKK3sKKyAgICBkdGxzX3NydHBfaW5mby0+Y2hvc2VuX2R0bHNfc3J0cF9wcm9maWxlID0gc3NsLT5kdGxzX3NydHBfaW5mby5jaG9zZW5fZHRsc19zcnRwX3Byb2ZpbGU7CisgICAgLyogZG8gbm90IGNvcHkgdGhlIG1raSB2YWx1ZSBpZiB0aGVyZSBpcyBubyBjaG9zZW4gcHJvZmlsZSAqLworICAgIGlmKCBkdGxzX3NydHBfaW5mby0+Y2hvc2VuX2R0bHNfc3J0cF9wcm9maWxlID09IE1CRURUTFNfVExTX1NSVFBfVU5TRVQgKQorICAgIHsKKyAgICAgICAgZHRsc19zcnRwX2luZm8tPm1raV9sZW4gPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBkdGxzX3NydHBfaW5mby0+bWtpX2xlbiA9IHNzbC0+ZHRsc19zcnRwX2luZm8ubWtpX2xlbjsKKyAgICAgICAgbWVtY3B5KCBkdGxzX3NydHBfaW5mby0+bWtpX3ZhbHVlLCBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV92YWx1ZSwKKyAgICAgICAgICAgICAgICBzc2wtPmR0bHNfc3J0cF9pbmZvLm1raV9sZW4gKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisKIHZvaWQgbWJlZHRsc19zc2xfY29uZl9tYXhfdmVyc2lvbiggbWJlZHRsc19zc2xfY29uZmlnICpjb25mLCBpbnQgbWFqb3IsIGludCBtaW5vciApCiB7CiAgICAgY29uZi0+bWF4X21ham9yX3ZlciA9IG1ham9yOwpAQCAtNTY4MiwxMSArNTc2NiwyNCBAQAogewogICAgIGludCByZXQgPSAwOwogCisgICAgLyogU2FuaXR5IGNoZWNrcyAqLworCiAgICAgaWYoIHNzbCA9PSBOVUxMIHx8IHNzbC0+Y29uZiA9PSBOVUxMICkKICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKIAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fRFRMUykKKyAgICBpZiggc3NsLT5jb25mLT50cmFuc3BvcnQgPT0gTUJFRFRMU19TU0xfVFJBTlNQT1JUX0RBVEFHUkFNICYmCisgICAgICAgICggc3NsLT5mX3NldF90aW1lciA9PSBOVUxMIHx8IHNzbC0+Zl9nZXRfdGltZXIgPT0gTlVMTCApICkKKyAgICB7CisgICAgICAgIE1CRURUTFNfU1NMX0RFQlVHX01TRyggMSwgKCAiWW91IG11c3QgdXNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWJlZHRsc19zc2xfc2V0X3RpbWVyX2NiKCkgZm9yIERUTFMiICkgKTsKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfUFJPVE9fRFRMUyAqLworCiAgICAgTUJFRFRMU19TU0xfREVCVUdfTVNHKCAyLCAoICI9PiBoYW5kc2hha2UiICkgKTsKIAorICAgIC8qIE1haW4gaGFuZHNoYWtlIGxvb3AgKi8KICAgICB3aGlsZSggc3NsLT5zdGF0ZSAhPSBNQkVEVExTX1NTTF9IQU5EU0hBS0VfT1ZFUiApCiAgICAgewogICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9oYW5kc2hha2Vfc3RlcCggc3NsICk7CmRpZmYgLS1naXQgYS9saWJyYXJ5L3NzbF90bHMxM19rZXlzLmMgYi9saWJyYXJ5L3NzbF90bHMxM19rZXlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5ZTAzMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnJhcnkvc3NsX3RsczEzX2tleXMuYwpAQCAtMCwwICsxLDM0OSBAQAorLyoKKyAqICBUTFMgMS4zIGtleSBzY2hlZHVsZQorICoKKyAqICBDb3B5cmlnaHQgVGhlIE1iZWQgVExTIENvbnRyaWJ1dG9ycworICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKCB0aGUgIkxpY2Vuc2UiICk7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJjb21tb24uaCIKKworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfUFJPVE9fVExTMV8zX0VYUEVSSU1FTlRBTCkKKworI2luY2x1ZGUgIm1iZWR0bHMvaGtkZi5oIgorI2luY2x1ZGUgIm1iZWR0bHMvc3NsX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3NsX3RsczEzX2tleXMuaCIKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIE1CRURUTFNfU1NMX1RMUzFfM19MQUJFTCggbmFtZSwgc3RyaW5nICkgICAgICAgXAorICAgIC5uYW1lID0gc3RyaW5nLAorCitzdHJ1Y3QgbWJlZHRsc19zc2xfdGxzMV8zX2xhYmVsc19zdHJ1Y3QgY29uc3QgbWJlZHRsc19zc2xfdGxzMV8zX2xhYmVscyA9Cit7CisgICAgLyogVGhpcyBzZWVtcyB0byB3b3JrIGluIEMsIGRlc3BpdGUgdGhlIHN0cmluZyBsaXRlcmFsIGJlaW5nIG9uZQorICAgICAqIGNoYXJhY3RlciB0b28gbG9uZyBkdWUgdG8gdGhlIDAtdGVybWluYXRpb24uICovCisgICAgTUJFRFRMU19TU0xfVExTMV8zX0xBQkVMX0xJU1QKK307CisKKyN1bmRlZiBNQkVEVExTX1NTTF9UTFMxXzNfTEFCRUwKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIEhrZGZMYWJlbCBzdHJ1Y3R1cmUgdXNlZCBpbiB0aGUgVExTIDEuMyBrZXkgc2NoZWR1bGUuCisgKgorICogVGhlIEhrZGZMYWJlbCBpcyBzcGVjaWZpZWQgaW4gUkZDIDg0NDYgYXMgZm9sbG93czoKKyAqCisgKiBzdHJ1Y3QgSGtkZkxhYmVsIHsKKyAqICAgdWludDE2IGxlbmd0aDsgICAgICAgICAgICAvLyBMZW5ndGggb2YgZXhwYW5kZWQga2V5IG1hdGVyaWFsCisgKiAgIG9wYXF1ZSBsYWJlbDw3Li4yNTU+OyAgICAgLy8gQWx3YXlzIHByZWZpeGVkIGJ5ICJ0bHMxMyAiCisgKiAgIG9wYXF1ZSBjb250ZXh0PDAuLjI1NT47ICAgLy8gVXN1YWxseSBhIGNvbW11bmljYXRpb24gdHJhbnNjcmlwdCBoYXNoCisgKiB9OworICoKKyAqIFBhcmFtZXRlcnM6CisgKiAtIGRlc2lyZWRfbGVuZ3RoOiBMZW5ndGggb2YgZXhwYW5kZWQga2V5IG1hdGVyaWFsCisgKiAgICAgICAgICAgICAgICAgICBFdmVuIHRob3VnaCB0aGUgc3RhbmRhcmQgYWxsb3dzIGV4cGFuc2lvbiB0byB1cCB0bworICogICAgICAgICAgICAgICAgICAgMioqMTYgQnl0ZXMsIFRMUyAxLjMgbmV2ZXIgdXNlcyBleHBhbnNpb24gdG8gbW9yZSB0aGFuCisgKiAgICAgICAgICAgICAgICAgICAyNTUgQnl0ZXMsIHNvIHdlIHJlcXVpcmUgYGRlc2lyZWRfbGVuZ3RoYCB0byBiZSBhdCBtb3N0CisgKiAgICAgICAgICAgICAgICAgICAyNTUuIFRoaXMgYWxsb3dzIHVzIHRvIHNhdmUgYSBmZXcgQnl0ZXMgb2YgY29kZSBieQorICogICAgICAgICAgICAgICAgICAgaGFyZGNvZGluZyB0aGUgd3JpdGluZyBvZiB0aGUgaGlnaCBieXRlcy4KKyAqIC0gKGxhYmVsLCBsbGVuKTogbGFiZWwgKyBsYWJlbCBsZW5ndGgsIHdpdGhvdXQgInRsczEzICIgcHJlZml4CisgKiAgICAgICAgICAgICAgICAgIFRoZSBsYWJlbCBsZW5ndGggTVVTVCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KKyAqICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVExTMV8zX0tFWV9TQ0hFRFVMRV9NQVhfTEFCRUxfTEVOCisgKiAgICAgICAgICAgICAgICAgIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhpcy4KKyAqICAgICAgICAgICAgICAgICAgQWxsIChsYWJlbCwgbGFiZWwgbGVuZ3RoKSBwYWlycyB1c2VkIGluIFRMUyAxLjMKKyAqICAgICAgICAgICAgICAgICAgY2FuIGJlIG9idGFpbmVkIHZpYSBNQkVEVExTX1NTTF9UTFMxXzNfTEJMX1dJVEhfTEVOKCkuCisgKiAtIChjdHgsIGNsZW4pOiBjb250ZXh0ICsgY29udGV4dCBsZW5ndGgKKyAqICAgICAgICAgICAgICAgIFRoZSBjb250ZXh0IGxlbmd0aCBNVVNUIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0bworICogICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVExTMV8zX0tFWV9TQ0hFRFVMRV9NQVhfQ09OVEVYVF9MRU4KKyAqICAgICAgICAgICAgICAgIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhpcy4KKyAqIC0gZHN0OiBUYXJnZXQgYnVmZmVyIGZvciBIa2RmTGFiZWwgc3RydWN0dXJlLAorICogICAgICAgIFRoaXMgTVVTVCBiZSBhIHdyaXRhYmxlIGJ1ZmZlciBvZiBzaXplCisgKiAgICAgICAgYXQgbGVhc3QgU1NMX1RMUzFfM19LRVlfU0NIRURVTEVfTUFYX0hLREZfTEFCRUxfTEVOIEJ5dGVzLgorICogLSBkbGVuOiBQb2ludGVyIGF0IHdoaWNoIHRvIHN0b3JlIHRoZSBhY3R1YWwgbGVuZ3RoIG9mCisgKiAgICAgICAgIHRoZSBIa2RmTGFiZWwgc3RydWN0dXJlIG9uIHN1Y2Nlc3MuCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgdGxzMV8zX2xhYmVsX3ByZWZpeFs2XSA9ICJ0bHMxMyAiOworCisjZGVmaW5lIFNTTF9UTFMxXzNfS0VZX1NDSEVEVUxFX0hLREZfTEFCRUxfTEVOKCBsYWJlbF9sZW4sIGNvbnRleHRfbGVuICkgXAorICAgICggICAyICAgICAgICAgICAgICAgICAgLyogZXhwYW5zaW9uIGxlbmd0aCAgICAgICAgICAgKi8gXAorICAgICAgKyAxICAgICAgICAgICAgICAgICAgLyogbGFiZWwgbGVuZ3RoICAgICAgICAgICAgICAgKi8gXAorICAgICAgKyBsYWJlbF9sZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKyAxICAgICAgICAgICAgICAgICAgLyogY29udGV4dCBsZW5ndGggICAgICAgICAgICAgKi8gXAorICAgICAgKyBjb250ZXh0X2xlbiApCisKKyNkZWZpbmUgU1NMX1RMUzFfM19LRVlfU0NIRURVTEVfTUFYX0hLREZfTEFCRUxfTEVOICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBTU0xfVExTMV8zX0tFWV9TQ0hFRFVMRV9IS0RGX0xBQkVMX0xFTiggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0bHMxXzNfbGFiZWxfcHJlZml4KSArICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1RMUzFfM19LRVlfU0NIRURVTEVfTUFYX0xBQkVMX0xFTiwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIE1CRURUTFNfU1NMX1RMUzFfM19LRVlfU0NIRURVTEVfTUFYX0NPTlRFWFRfTEVOICkKKworc3RhdGljIHZvaWQgc3NsX3RsczFfM19oa2RmX2VuY29kZV9sYWJlbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGVzaXJlZF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFiZWwsIHNpemVfdCBsbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0eCwgc2l6ZV90IGNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0LCBzaXplX3QgKmRsZW4gKQoreworICAgIHNpemVfdCB0b3RhbF9sYWJlbF9sZW4gPQorICAgICAgICBzaXplb2YodGxzMV8zX2xhYmVsX3ByZWZpeCkgKyBsbGVuOworICAgIHNpemVfdCB0b3RhbF9oa2RmX2xibF9sZW4gPQorICAgICAgICBTU0xfVExTMV8zX0tFWV9TQ0hFRFVMRV9IS0RGX0xBQkVMX0xFTiggdG90YWxfbGFiZWxfbGVuLCBjbGVuICk7CisKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gZHN0OworCisgICAgLyogQWRkIHRoZSBzaXplIG9mIHRoZSBleHBhbmRlZCBrZXkgbWF0ZXJpYWwuCisgICAgICogV2UncmUgaGFyZGNvZGluZyB0aGUgaGlnaCBieXRlIHRvIDAgaGVyZSBhc3N1bWluZyB0aGF0IHdlIG5ldmVyIHVzZQorICAgICAqIFRMUyAxLjMgSEtERiBrZXkgZXhwYW5zaW9uIHRvIG1vcmUgdGhhbiAyNTUgQnl0ZXMuICovCisjaWYgTUJFRFRMU19TU0xfVExTMV8zX0tFWV9TQ0hFRFVMRV9NQVhfRVhQQU5TSU9OX0xFTiA+IDI1NQorI2Vycm9yICJUaGUgaW1wbGVtZW50YXRpb24gb2Ygc3NsX3RsczFfM19oa2RmX2VuY29kZV9sYWJlbCgpIGlzIG5vdCBmaXQgZm9yIHRoZSBcCisgICAgICAgIHZhbHVlIG9mIE1CRURUTFNfU1NMX1RMUzFfM19LRVlfU0NIRURVTEVfTUFYX0VYUEFOU0lPTl9MRU4iCisjZW5kaWYKKworICAgICpwKysgPSAwOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoICggZGVzaXJlZF9sZW5ndGggPj4gMCApICYgMHhGRiApOworCisgICAgLyogQWRkIGxhYmVsIGluY2wuIHByZWZpeCAqLworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIHRvdGFsX2xhYmVsX2xlbiAmIDB4RkYgKTsKKyAgICBtZW1jcHkoIHAsIHRsczFfM19sYWJlbF9wcmVmaXgsIHNpemVvZih0bHMxXzNfbGFiZWxfcHJlZml4KSApOworICAgIHAgKz0gc2l6ZW9mKHRsczFfM19sYWJlbF9wcmVmaXgpOworICAgIG1lbWNweSggcCwgbGFiZWwsIGxsZW4gKTsKKyAgICBwICs9IGxsZW47CisKKyAgICAvKiBBZGQgY29udGV4dCB2YWx1ZSAqLworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikoIGNsZW4gJiAweEZGICk7CisgICAgaWYoIGNsZW4gIT0gMCApCisgICAgICAgIG1lbWNweSggcCwgY3R4LCBjbGVuICk7CisKKyAgICAvKiBSZXR1cm4gdG90YWwgbGVuZ3RoIHRvIHRoZSBjYWxsZXIuICAqLworICAgICpkbGVuID0gdG90YWxfaGtkZl9sYmxfbGVuOworfQorCitpbnQgbWJlZHRsc19zc2xfdGxzMV8zX2hrZGZfZXhwYW5kX2xhYmVsKAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgaGFzaF9hbGcsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWNyZXQsIHNpemVfdCBzbGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFiZWwsIHNpemVfdCBsbGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3R4LCBzaXplX3QgY2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJsZW4gKQoreworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZDsKKyAgICB1bnNpZ25lZCBjaGFyIGhrZGZfbGFiZWxbIFNTTF9UTFMxXzNfS0VZX1NDSEVEVUxFX01BWF9IS0RGX0xBQkVMX0xFTiBdOworICAgIHNpemVfdCBoa2RmX2xhYmVsX2xlbjsKKworICAgIGlmKCBsbGVuID4gTUJFRFRMU19TU0xfVExTMV8zX0tFWV9TQ0hFRFVMRV9NQVhfTEFCRUxfTEVOICkKKyAgICB7CisgICAgICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4gc2luY2UgdGhpcyBpcyBhbiBpbnRlcm5hbAorICAgICAgICAgKiBmdW5jdGlvbiwgYW5kIHdlIGtub3cgc3RhdGljYWxseSB3aGljaCBsYWJlbHMKKyAgICAgICAgICogYXJlIGFsbG93ZWQuICovCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgaWYoIGNsZW4gPiBNQkVEVExTX1NTTF9UTFMxXzNfS0VZX1NDSEVEVUxFX01BWF9DT05URVhUX0xFTiApCisgICAgeworICAgICAgICAvKiBTaG91bGQgbm90IGhhcHBlbiwgYXMgYWJvdmUuICovCisgICAgICAgIHJldHVybiggTUJFRFRMU19FUlJfU1NMX0lOVEVSTkFMX0VSUk9SICk7CisgICAgfQorCisgICAgaWYoIGJsZW4gPiBNQkVEVExTX1NTTF9UTFMxXzNfS0VZX1NDSEVEVUxFX01BWF9FWFBBTlNJT05fTEVOICkKKyAgICB7CisgICAgICAgIC8qIFNob3VsZCBub3QgaGFwcGVuLCBhcyBhYm92ZS4gKi8KKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICB9CisKKyAgICBtZCA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGhhc2hfYWxnICk7CisgICAgaWYoIG1kID09IE5VTEwgKQorICAgICAgICByZXR1cm4oIE1CRURUTFNfRVJSX1NTTF9CQURfSU5QVVRfREFUQSApOworCisgICAgc3NsX3RsczFfM19oa2RmX2VuY29kZV9sYWJlbCggYmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCwgbGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgsIGNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGtkZl9sYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGtkZl9sYWJlbF9sZW4gKTsKKworICAgIHJldHVybiggbWJlZHRsc19oa2RmX2V4cGFuZCggbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNyZXQsIHNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoa2RmX2xhYmVsLCBoa2RmX2xhYmVsX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgYmxlbiApICk7Cit9CisKKy8qCisgKiBUaGUgdHJhZmZpYyBrZXlpbmcgbWF0ZXJpYWwgaXMgZ2VuZXJhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBpbnB1dHM6CisgKgorICogIC0gT25lIHNlY3JldCB2YWx1ZSBwZXIgc2VuZGVyLgorICogIC0gQSBwdXJwb3NlIHZhbHVlIGluZGljYXRpbmcgdGhlIHNwZWNpZmljIHZhbHVlIGJlaW5nIGdlbmVyYXRlZAorICogIC0gVGhlIGRlc2lyZWQgbGVuZ3RocyBvZiBrZXkgYW5kIElWLgorICoKKyAqIFRoZSBleHBhbnNpb24gaXRzZWxmIGlzIGJhc2VkIG9uIEhLREY6CisgKgorICogICBbc2VuZGVyXV93cml0ZV9rZXkgPSBIS0RGLUV4cGFuZC1MYWJlbCggU2VjcmV0LCAia2V5IiwgIiIsIGtleV9sZW5ndGggKQorICogICBbc2VuZGVyXV93cml0ZV9pdiAgPSBIS0RGLUV4cGFuZC1MYWJlbCggU2VjcmV0LCAiaXYiICwgIiIsIGl2X2xlbmd0aCApCisgKgorICogW3NlbmRlcl0gZGVub3RlcyB0aGUgc2VuZGluZyBzaWRlIGFuZCB0aGUgU2VjcmV0IHZhbHVlIGlzIHByb3ZpZGVkCisgKiBieSB0aGUgZnVuY3Rpb24gY2FsbGVyLiBOb3RlIHRoYXQgd2UgZ2VuZXJhdGUgc2VydmVyIGFuZCBjbGllbnQgc2lkZQorICoga2V5cyBpbiBhIHNpbmdsZSBmdW5jdGlvbiBjYWxsLgorICovCitpbnQgbWJlZHRsc19zc2xfdGxzMV8zX21ha2VfdHJhZmZpY19rZXlzKAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF90eXBlX3QgaGFzaF9hbGcsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjbGllbnRfc2VjcmV0LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VydmVyX3NlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzbGVuLCBzaXplX3Qga2V5X2xlbiwgc2l6ZV90IGl2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfc3NsX2tleV9zZXQgKmtleXMgKQoreworICAgIGludCByZXQgPSAwOworCisgICAgcmV0ID0gbWJlZHRsc19zc2xfdGxzMV8zX2hrZGZfZXhwYW5kX2xhYmVsKCBoYXNoX2FsZywKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50X3NlY3JldCwgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVExTMV8zX0xCTF9XSVRIX0xFTigga2V5ICksCisgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAgIGtleXMtPmNsaWVudF93cml0ZV9rZXksIGtleV9sZW4gKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0ID0gbWJlZHRsc19zc2xfdGxzMV8zX2hrZGZfZXhwYW5kX2xhYmVsKCBoYXNoX2FsZywKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NlY3JldCwgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVExTMV8zX0xCTF9XSVRIX0xFTigga2V5ICksCisgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAgIGtleXMtPnNlcnZlcl93cml0ZV9rZXksIGtleV9sZW4gKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0ID0gbWJlZHRsc19zc2xfdGxzMV8zX2hrZGZfZXhwYW5kX2xhYmVsKCBoYXNoX2FsZywKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50X3NlY3JldCwgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVExTMV8zX0xCTF9XSVRIX0xFTiggaXYgKSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICAgICAga2V5cy0+Y2xpZW50X3dyaXRlX2l2LCBpdl9sZW4gKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAgcmV0ID0gbWJlZHRsc19zc2xfdGxzMV8zX2hrZGZfZXhwYW5kX2xhYmVsKCBoYXNoX2FsZywKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NlY3JldCwgc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVExTMV8zX0xCTF9XSVRIX0xFTiggaXYgKSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICAgICAga2V5cy0+c2VydmVyX3dyaXRlX2l2LCBpdl9sZW4gKTsKKyAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICByZXR1cm4oIHJldCApOworCisgICAga2V5cy0+a2V5X2xlbiA9IGtleV9sZW47CisgICAga2V5cy0+aXZfbGVuID0gaXZfbGVuOworCisgICAgcmV0dXJuKCAwICk7Cit9CisKK2ludCBtYmVkdGxzX3NzbF90bHMxXzNfZGVyaXZlX3NlY3JldCgKKyAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBoYXNoX2FsZywKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWNyZXQsIHNpemVfdCBzbGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhYmVsLCBzaXplX3QgbGxlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdHgsIHNpemVfdCBjbGVuLAorICAgICAgICAgICAgICAgICAgIGludCBjdHhfaGFzaGVkLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdGJ1Ziwgc2l6ZV90IGJ1ZmxlbiApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBjaGFyIGhhc2hlZF9jb250ZXh0WyBNQkVEVExTX01EX01BWF9TSVpFIF07CisKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWQ7CisgICAgbWQgPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBoYXNoX2FsZyApOworICAgIGlmKCBtZCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGlmKCBjdHhfaGFzaGVkID09IE1CRURUTFNfU1NMX1RMUzFfM19DT05URVhUX1VOSEFTSEVEICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfbWQoIG1kLCBjdHgsIGNsZW4sIGhhc2hlZF9jb250ZXh0ICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIHJldCApOworICAgICAgICBjbGVuID0gbWJlZHRsc19tZF9nZXRfc2l6ZSggbWQgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYoIGNsZW4gPiBzaXplb2YoaGFzaGVkX2NvbnRleHQpICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgaW50ZXJuYWwKKyAgICAgICAgICAgICAqIGFuZCB0aGUgY29kZSBzZXRzIGBjdHhfaGFzaGVkYCBjb3JyZWN0bHkuCisgICAgICAgICAgICAgKiBMZXQncyBkb3VibGUtY2hlY2sgbm9uZXRoZWxlc3MgdG8gbm90IHJ1biBhdCB0aGUgcmlzaworICAgICAgICAgICAgICogb2YgZ2V0dGluZyBhIHN0YWNrIG92ZXJmbG93LiAqLworICAgICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfSU5URVJOQUxfRVJST1IgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweSggaGFzaGVkX2NvbnRleHQsIGN0eCwgY2xlbiApOworICAgIH0KKworICAgIHJldHVybiggbWJlZHRsc19zc2xfdGxzMV8zX2hrZGZfZXhwYW5kX2xhYmVsKCBoYXNoX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0LCBzbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCwgbGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGVkX2NvbnRleHQsIGNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdGJ1ZiwgYnVmbGVuICkgKTsKK30KKworaW50IG1iZWR0bHNfc3NsX3RsczFfM19ldm9sdmVfc2VjcmV0KAorICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IGhhc2hfYWxnLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlY3JldF9vbGQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbnB1dF9sZW4sCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2VjcmV0X25ldyApCit7CisgICAgaW50IHJldCA9IE1CRURUTFNfRVJSX1NTTF9JTlRFUk5BTF9FUlJPUjsKKyAgICBzaXplX3QgaGxlbiwgaWxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIHRtcF9zZWNyZXRbIE1CRURUTFNfTURfTUFYX1NJWkUgXSA9IHsgMCB9OworICAgIHVuc2lnbmVkIGNoYXIgdG1wX2lucHV0IFsgTUJFRFRMU19NRF9NQVhfU0laRSBdID0geyAwIH07CisKKyAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWQ7CisgICAgbWQgPSBtYmVkdGxzX21kX2luZm9fZnJvbV90eXBlKCBoYXNoX2FsZyApOworICAgIGlmKCBtZCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9TU0xfQkFEX0lOUFVUX0RBVEEgKTsKKworICAgIGhsZW4gPSBtYmVkdGxzX21kX2dldF9zaXplKCBtZCApOworCisgICAgLyogRm9yIG5vbi1pbml0aWFsIHJ1bnMsIGNhbGwgRGVyaXZlLVNlY3JldCggLiwgImRlcml2ZWQiLCAiIikKKyAgICAgKiBvbiB0aGUgb2xkIHNlY3JldC4gKi8KKyAgICBpZiggc2VjcmV0X29sZCAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX3RsczFfM19kZXJpdmVfc2VjcmV0KAorICAgICAgICAgICAgICAgICAgIGhhc2hfYWxnLAorICAgICAgICAgICAgICAgICAgIHNlY3JldF9vbGQsIGhsZW4sCisgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfVExTMV8zX0xCTF9XSVRIX0xFTiggZGVyaXZlZCApLAorICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIC8qIGNvbnRleHQgKi8KKyAgICAgICAgICAgICAgICAgICBNQkVEVExTX1NTTF9UTFMxXzNfQ09OVEVYVF9VTkhBU0hFRCwKKyAgICAgICAgICAgICAgICAgICB0bXBfc2VjcmV0LCBobGVuICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgaWYoIGlucHV0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KCB0bXBfaW5wdXQsIGlucHV0LCBpbnB1dF9sZW4gKTsKKyAgICAgICAgaWxlbiA9IGlucHV0X2xlbjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWxlbiA9IGhsZW47CisgICAgfQorCisgICAgLyogSEtERi1FeHRyYWN0IHRha2VzIGEgc2FsdCBhbmQgaW5wdXQga2V5IG1hdGVyaWFsLgorICAgICAqIFRoZSBzYWx0IGlzIHRoZSBvbGQgc2VjcmV0LCBhbmQgdGhlIGlucHV0IGtleSBtYXRlcmlhbAorICAgICAqIGlzIHRoZSBpbnB1dCBzZWNyZXQgKFBTSyAvIEVDREhFKS4gKi8KKyAgICByZXQgPSBtYmVkdGxzX2hrZGZfZXh0cmFjdCggbWQsCisgICAgICAgICAgICAgICAgICAgIHRtcF9zZWNyZXQsIGhsZW4sCisgICAgICAgICAgICAgICAgICAgIHRtcF9pbnB1dCwgaWxlbiwKKyAgICAgICAgICAgICAgICAgICAgc2VjcmV0X25ldyApOworICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIHJldCA9IDA7CisKKyBjbGVhbnVwOgorCisgICAgbWJlZHRsc19wbGF0Zm9ybV96ZXJvaXplKCB0bXBfc2VjcmV0LCBzaXplb2YodG1wX3NlY3JldCkgKTsKKyAgICBtYmVkdGxzX3BsYXRmb3JtX3plcm9pemUoIHRtcF9pbnB1dCwgIHNpemVvZih0bXBfaW5wdXQpICApOworICAgIHJldHVybiggcmV0ICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9QUk9UT19UTFMxXzNfRVhQRVJJTUVOVEFMICovCmRpZmYgLS1naXQgYS9saWJyYXJ5L3NzbF90bHMxM19rZXlzLmggYi9saWJyYXJ5L3NzbF90bHMxM19rZXlzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4OTA0OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnJhcnkvc3NsX3RsczEzX2tleXMuaApAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqICBUTFMgMS4zIGtleSBzY2hlZHVsZQorICoKKyAqICBDb3B5cmlnaHQgVGhlIE1iZWQgVExTIENvbnRyaWJ1dG9ycworICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKCB0aGUgIkxpY2Vuc2UiICk7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWYgIWRlZmluZWQoTUJFRFRMU19TU0xfVExTMV8zX0tFWVNfSCkKKyNkZWZpbmUgTUJFRFRMU19TU0xfVExTMV8zX0tFWVNfSAorCisvKiBUaGlzIHJlcXVpcmVzIE1CRURUTFNfU1NMX1RMUzFfM19MQUJFTCggaWR4LCBuYW1lLCBzdHJpbmcgKSB0byBiZSBkZWZpbmVkIGF0CisgKiB0aGUgcG9pbnQgb2YgdXNlLiBTZWUgZS5nLiB0aGUgZGVmaW5pdGlvbiBvZiBtYmVkdGxzX3NzbF90bHMxXzNfbGFiZWxzX3VuaW9uCisgKiBiZWxvdy4gKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfVExTMV8zX0xBQkVMX0xJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1CRURUTFNfU1NMX1RMUzFfM19MQUJFTCggZmluaXNoZWQgICAgLCAiZmluaXNoZWQiICAgICApIFwKKyAgICBNQkVEVExTX1NTTF9UTFMxXzNfTEFCRUwoIHJlc3VtcHRpb24gICwgInJlc3VtcHRpb24iICAgKSBcCisgICAgTUJFRFRMU19TU0xfVExTMV8zX0xBQkVMKCB0cmFmZmljX3VwZCAsICJ0cmFmZmljIHVwZCIgICkgXAorICAgIE1CRURUTFNfU1NMX1RMUzFfM19MQUJFTCggZXhwb3J0ZXIgICAgLCAiZXhwb3J0ZXIiICAgICApIFwKKyAgICBNQkVEVExTX1NTTF9UTFMxXzNfTEFCRUwoIGtleSAgICAgICAgICwgImtleSIgICAgICAgICAgKSBcCisgICAgTUJFRFRMU19TU0xfVExTMV8zX0xBQkVMKCBpdiAgICAgICAgICAsICJpdiIgICAgICAgICAgICkgXAorICAgIE1CRURUTFNfU1NMX1RMUzFfM19MQUJFTCggY19oc190cmFmZmljLCAiYyBocyB0cmFmZmljIiApIFwKKyAgICBNQkVEVExTX1NTTF9UTFMxXzNfTEFCRUwoIGNfYXBfdHJhZmZpYywgImMgYXAgdHJhZmZpYyIgKSBcCisgICAgTUJFRFRMU19TU0xfVExTMV8zX0xBQkVMKCBjX2VfdHJhZmZpYyAsICJjIGUgdHJhZmZpYyIgICkgXAorICAgIE1CRURUTFNfU1NMX1RMUzFfM19MQUJFTCggc19oc190cmFmZmljLCAicyBocyB0cmFmZmljIiApIFwKKyAgICBNQkVEVExTX1NTTF9UTFMxXzNfTEFCRUwoIHNfYXBfdHJhZmZpYywgInMgYXAgdHJhZmZpYyIgKSBcCisgICAgTUJFRFRMU19TU0xfVExTMV8zX0xBQkVMKCBzX2VfdHJhZmZpYyAsICJzIGUgdHJhZmZpYyIgICkgXAorICAgIE1CRURUTFNfU1NMX1RMUzFfM19MQUJFTCggZV9leHBfbWFzdGVyLCAiZSBleHAgbWFzdGVyIiApIFwKKyAgICBNQkVEVExTX1NTTF9UTFMxXzNfTEFCRUwoIHJlc19tYXN0ZXIgICwgInJlcyBtYXN0ZXIiICAgKSBcCisgICAgTUJFRFRMU19TU0xfVExTMV8zX0xBQkVMKCBleHBfbWFzdGVyICAsICJleHAgbWFzdGVyIiAgICkgXAorICAgIE1CRURUTFNfU1NMX1RMUzFfM19MQUJFTCggZXh0X2JpbmRlciAgLCAiZXh0IGJpbmRlciIgICApIFwKKyAgICBNQkVEVExTX1NTTF9UTFMxXzNfTEFCRUwoIHJlc19iaW5kZXIgICwgInJlcyBiaW5kZXIiICAgKSBcCisgICAgTUJFRFRMU19TU0xfVExTMV8zX0xBQkVMKCBkZXJpdmVkICAgICAsICJkZXJpdmVkIiAgICAgICkKKworI2RlZmluZSBNQkVEVExTX1NTTF9UTFMxXzNfTEFCRUwoIG5hbWUsIHN0cmluZyApICAgICAgIFwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIG5hbWUgICAgWyBzaXplb2Yoc3RyaW5nKSAtIDEgXTsKKwordW5pb24gbWJlZHRsc19zc2xfdGxzMV8zX2xhYmVsc191bmlvbgoreworICAgIE1CRURUTFNfU1NMX1RMUzFfM19MQUJFTF9MSVNUCit9Oworc3RydWN0IG1iZWR0bHNfc3NsX3RsczFfM19sYWJlbHNfc3RydWN0Cit7CisgICAgTUJFRFRMU19TU0xfVExTMV8zX0xBQkVMX0xJU1QKK307CisjdW5kZWYgTUJFRFRMU19TU0xfVExTMV8zX0xBQkVMCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbWJlZHRsc19zc2xfdGxzMV8zX2xhYmVsc19zdHJ1Y3QgbWJlZHRsc19zc2xfdGxzMV8zX2xhYmVsczsKKworI2RlZmluZSBNQkVEVExTX1NTTF9UTFMxXzNfTEJMX1dJVEhfTEVOKCBMQUJFTCApICBcCisgICAgbWJlZHRsc19zc2xfdGxzMV8zX2xhYmVscy5MQUJFTCwgICAgICAgICAgICAgIFwKKyAgICBzaXplb2YobWJlZHRsc19zc2xfdGxzMV8zX2xhYmVscy5MQUJFTCkKKworI2RlZmluZSBNQkVEVExTX1NTTF9UTFMxXzNfS0VZX1NDSEVEVUxFX01BWF9MQUJFTF9MRU4gIFwKKyAgICBzaXplb2YoIHVuaW9uIG1iZWR0bHNfc3NsX3RsczFfM19sYWJlbHNfdW5pb24gKQorCisvKiBUaGUgbWF4aW11bSBsZW5ndGggb2YgSEtERiBjb250ZXh0cyB1c2VkIGluIHRoZSBUTFMgMS4zIHN0YW5kYXJkLgorICogU2luY2UgY29udGV4dHMgYXJlIGFsd2F5cyBoYXNoZXMgb2YgbWVzc2FnZSB0cmFuc2NyaXB0cywgdGhpcyBjYW4KKyAqIGJlIGFwcHJveGltYXRlZCBmcm9tIGFib3ZlIGJ5IHRoZSBtYXhpbXVtIGhhc2ggc2l6ZS4gKi8KKyNkZWZpbmUgTUJFRFRMU19TU0xfVExTMV8zX0tFWV9TQ0hFRFVMRV9NQVhfQ09OVEVYVF9MRU4gIFwKKyAgICBNQkVEVExTX01EX01BWF9TSVpFCisKKy8qIE1heGltdW0gZGVzaXJlZCBsZW5ndGggZm9yIGV4cGFuZGVkIGtleSBtYXRlcmlhbCBnZW5lcmF0ZWQKKyAqIGJ5IEhLREYtRXhwYW5kLUxhYmVsLgorICoKKyAqIFdhcm5pbmc6IElmIHRoaXMgZXZlciBuZWVkcyB0byBiZSBpbmNyZWFzZWQsIHRoZSBpbXBsZW1lbnRhdGlvbgorICogc3NsX3RsczFfM19oa2RmX2VuY29kZV9sYWJlbCgpIGluIHNzbF90bHMxM19rZXlzLmMgbmVlZHMgdG8gYmUKKyAqIGFkanVzdGVkIHNpbmNlIGl0IGN1cnJlbnRseSBhc3N1bWVzIHRoYXQgSEtERiBrZXkgZXhwYW5zaW9uCisgKiBpcyBuZXZlciB1c2VkIHdpdGggbW9yZSB0aGFuIDI1NSBCeXRlcyBvZiBvdXRwdXQuICovCisjZGVmaW5lIE1CRURUTFNfU1NMX1RMUzFfM19LRVlfU0NIRURVTEVfTUFYX0VYUEFOU0lPTl9MRU4gMjU1CisKKy8qKgorICogXGJyaWVmICAgICAgICAgICBUaGUgXGMgSEtERi1FeHBhbmQtTGFiZWwgZnVuY3Rpb24gZnJvbQorICogICAgICAgICAgICAgICAgICB0aGUgVExTIDEuMyBzdGFuZGFyZCBSRkMgODQ0Ni4KKyAqCisgKiA8dHQ+CisgKiAgICAgICAgICAgICAgICAgIEhLREYtRXhwYW5kLUxhYmVsKCBTZWNyZXQsIExhYmVsLCBDb250ZXh0LCBMZW5ndGggKSA9CisgKiAgICAgICAgICAgICAgICAgICAgICAgSEtERi1FeHBhbmQoIFNlY3JldCwgSGtkZkxhYmVsLCBMZW5ndGggKQorICogPC90dD4KKyAqCisgKiBccGFyYW0gaGFzaF9hbGcgIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgaGFzaCBhbGdvcml0aG0gdG8gdXNlLgorICogXHBhcmFtIHNlY3JldCAgICBUaGUgXGMgU2VjcmV0IGFyZ3VtZW50IHRvIFxjIEhLREYtRXhwYW5kLUxhYmVsLgorICogICAgICAgICAgICAgICAgICBUaGlzIG11c3QgYmUgYSByZWFkYWJsZSBidWZmZXIgb2YgbGVuZ3RoIFxwIHNsZW4gQnl0ZXMuCisgKiBccGFyYW0gc2xlbiAgICAgIFRoZSBsZW5ndGggb2YgXHAgc2VjcmV0IGluIEJ5dGVzLgorICogXHBhcmFtIGxhYmVsICAgICBUaGUgXGMgTGFiZWwgYXJndW1lbnQgdG8gXGMgSEtERi1FeHBhbmQtTGFiZWwuCisgKiAgICAgICAgICAgICAgICAgIFRoaXMgbXVzdCBiZSBhIHJlYWRhYmxlIGJ1ZmZlciBvZiBsZW5ndGggXHAgbGxlbiBCeXRlcy4KKyAqIFxwYXJhbSBsbGVuICAgICAgVGhlIGxlbmd0aCBvZiBccCBsYWJlbCBpbiBCeXRlcy4KKyAqIFxwYXJhbSBjdHggICAgICAgVGhlIFxjIENvbnRleHQgYXJndW1lbnQgdG8gXGMgSEtERi1FeHBhbmQtTGFiZWwuCisgKiAgICAgICAgICAgICAgICAgIFRoaXMgbXVzdCBiZSBhIHJlYWRhYmxlIGJ1ZmZlciBvZiBsZW5ndGggXHAgY2xlbiBCeXRlcy4KKyAqIFxwYXJhbSBjbGVuICAgICAgVGhlIGxlbmd0aCBvZiBccCBjb250ZXh0IGluIEJ5dGVzLgorICogXHBhcmFtIGJ1ZiAgICAgICBUaGUgZGVzdGluYXRpb24gYnVmZmVyIHRvIGhvbGQgdGhlIGV4cGFuZGVkIHNlY3JldC4KKyAqICAgICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIGEgd3JpdGFibGUgYnVmZmVyIG9mIGxlbmd0aCBccCBibGVuIEJ5dGVzLgorICogXHBhcmFtIGJsZW4gICAgICBUaGUgZGVzaXJlZCBzaXplIG9mIHRoZSBleHBhbmRlZCBzZWNyZXQgaW4gQnl0ZXMuCisgKgorICogXHJldHVybnMgICAgICAgICBcYyAwIG9uIHN1Y2Nlc3MuCisgKiBccmV0dXJuICAgICAgICAgIEEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCisKK2ludCBtYmVkdGxzX3NzbF90bHMxXzNfaGtkZl9leHBhbmRfbGFiZWwoCisgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBoYXNoX2FsZywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlY3JldCwgc2l6ZV90IHNsZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpsYWJlbCwgc2l6ZV90IGxsZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdHgsIHNpemVfdCBjbGVuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgYmxlbiApOworCisvKioKKyAqIFxicmllZiAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBUTFMgMS4zIGtleSBzY2hlZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgSXQgZXh0cmFjdHMga2V5IGFuZCBJViBmb3IgdGhlIGFjdHVhbCBjbGllbnQvc2VydmVyIHRyYWZmaWMKKyAqICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgY2xpZW50L3NlcnZlciB0cmFmZmljIHNlY3JldHMuCisgKgorICogRnJvbSBSRkMgODQ0NjoKKyAqCisgKiA8dHQ+CisgKiAgIFtzZW5kZXJdX3dyaXRlX2tleSA9IEhLREYtRXhwYW5kLUxhYmVsKFNlY3JldCwgImtleSIsICIiLCBrZXlfbGVuZ3RoKQorICogICBbc2VuZGVyXV93cml0ZV9pdiAgPSBIS0RGLUV4cGFuZC1MYWJlbChTZWNyZXQsICJpdiIsICIiLCBpdl9sZW5ndGgpKgorICogPC90dD4KKyAqCisgKiBccGFyYW0gaGFzaF9hbGcgICAgICBUaGUgaWRlbnRpZmllciBmb3IgdGhlIGhhc2ggYWxnb3JpdGhtIHRvIGJlIHVzZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgSEtERi1iYXNlZCBleHBhbnNpb24gb2YgdGhlIHNlY3JldC4KKyAqIFxwYXJhbSBjbGllbnRfc2VjcmV0IFRoZSBjbGllbnQgdHJhZmZpYyBzZWNyZXQuCisgKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIG11c3QgYmUgYSByZWFkYWJsZSBidWZmZXIgb2Ygc2l6ZSBccCBzbGVuIEJ5dGVzCisgKiBccGFyYW0gc2VydmVyX3NlY3JldCBUaGUgc2VydmVyIHRyYWZmaWMgc2VjcmV0LgorICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIGEgcmVhZGFibGUgYnVmZmVyIG9mIHNpemUgXHAgc2xlbiBCeXRlcworICogXHBhcmFtIHNsZW4gICAgICAgICAgTGVuZ3RoIG9mIHRoZSBzZWNyZXRzIFxwIGNsaWVudF9zZWNyZXQgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICBccCBzZXJ2ZXJfc2VjcmV0IGluIEJ5dGVzLgorICogXHBhcmFtIGtleV9sZW4gICAgICAgVGhlIGRlc2lyZWQgbGVuZ3RoIG9mIHRoZSBrZXkgdG8gYmUgZXh0cmFjdGVkIGluIEJ5dGVzLgorICogXHBhcmFtIGl2X2xlbiAgICAgICAgVGhlIGRlc2lyZWQgbGVuZ3RoIG9mIHRoZSBJViB0byBiZSBleHRyYWN0ZWQgaW4gQnl0ZXMuCisgKiBccGFyYW0ga2V5cyAgICAgICAgICBUaGUgYWRkcmVzcyBvZiB0aGUgc3RydWN0dXJlIGhvbGRpbmcgdGhlIGdlbmVyYXRlZAorICogICAgICAgICAgICAgICAgICAgICAga2V5cyBhbmQgSVZzLgorICoKKyAqIFxyZXR1cm5zICAgICAgICAgICAgIFxjIDAgb24gc3VjY2Vzcy4KKyAqIFxyZXR1cm5zICAgICAgICAgICAgIEEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCisKK2ludCBtYmVkdGxzX3NzbF90bHMxXzNfbWFrZV90cmFmZmljX2tleXMoCisgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBoYXNoX2FsZywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNsaWVudF9zZWNyZXQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZXJ2ZXJfc2VjcmV0LAorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNsZW4sIHNpemVfdCBrZXlfbGVuLCBzaXplX3QgaXZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19zc2xfa2V5X3NldCAqa2V5cyApOworCisKKyNkZWZpbmUgTUJFRFRMU19TU0xfVExTMV8zX0NPTlRFWFRfVU5IQVNIRUQgMAorI2RlZmluZSBNQkVEVExTX1NTTF9UTFMxXzNfQ09OVEVYVF9IQVNIRUQgICAxCisKKy8qKgorICogXGJyaWVmIFRoZSBcYyBEZXJpdmUtU2VjcmV0IGZ1bmN0aW9uIGZyb20gdGhlIFRMUyAxLjMgc3RhbmRhcmQgUkZDIDg0NDYuCisgKgorICogPHR0PgorICogICBEZXJpdmUtU2VjcmV0KCBTZWNyZXQsIExhYmVsLCBNZXNzYWdlcyApID0KKyAqICAgICAgSEtERi1FeHBhbmQtTGFiZWwoIFNlY3JldCwgTGFiZWwsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoKCBNZXNzYWdlcyApLAorICogICAgICAgICAgICAgICAgICAgICAgICAgSGFzaC5MZW5ndGggKSApCisgKiA8L3R0PgorICoKKyAqIFxwYXJhbSBoYXNoX2FsZyAgIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgaGFzaCBmdW5jdGlvbiB1c2VkIGZvciB0aGUKKyAqICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyBvZiBIS0RGLgorICogXHBhcmFtIHNlY3JldCAgICAgVGhlIFxjIFNlY3JldCBhcmd1bWVudCB0byB0aGUgXGMgRGVyaXZlLVNlY3JldCBmdW5jdGlvbi4KKyAqICAgICAgICAgICAgICAgICAgIFRoaXMgbXVzdCBiZSBhIHJlYWRhYmxlIGJ1ZmZlciBvZiBsZW5ndGggXHAgc2xlbiBCeXRlcy4KKyAqIFxwYXJhbSBzbGVuICAgICAgIFRoZSBsZW5ndGggb2YgXHAgc2VjcmV0IGluIEJ5dGVzLgorICogXHBhcmFtIGxhYmVsICAgICAgVGhlIFxjIExhYmVsIGFyZ3VtZW50IHRvIHRoZSBcYyBEZXJpdmUtU2VjcmV0IGZ1bmN0aW9uLgorICogICAgICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIGEgcmVhZGFibGUgYnVmZmVyIG9mIGxlbmd0aCBccCBsbGVuIEJ5dGVzLgorICogXHBhcmFtIGxsZW4gICAgICAgVGhlIGxlbmd0aCBvZiBccCBsYWJlbCBpbiBCeXRlcy4KKyAqIFxwYXJhbSBjdHggICAgICAgIFRoZSBoYXNoIG9mIHRoZSBcYyBNZXNzYWdlcyBhcmd1bWVudCB0byB0aGUKKyAqICAgICAgICAgICAgICAgICAgIFxjIERlcml2ZS1TZWNyZXQgZnVuY3Rpb24sIG9yIHRoZSBcYyBNZXNzYWdlcyBhcmd1bWVudAorICogICAgICAgICAgICAgICAgICAgaXRzZWxmLCBkZXBlbmRpbmcgb24gXHAgY29udGV4dF9hbHJlYWR5X2hhc2hlZC4KKyAqIFxwYXJhbSBjbGVuICAgICAgIFRoZSBsZW5ndGggb2YgXHAgaGFzaC4KKyAqIFxwYXJhbSBjdHhfaGFzaGVkIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIFxwIGN0eCBjb250YWlucyB0aGUgaGFzaCBvZgorICogICAgICAgICAgICAgICAgICAgdGhlIFxjIE1lc3NhZ2VzIGFyZ3VtZW50IGluIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgIFxjIERlcml2ZS1TZWNyZXQgZnVuY3Rpb24KKyAqICAgICAgICAgICAgICAgICAgICh2YWx1ZSBNQkVEVExTX1NTTF9UTFMxXzNfQ09OVEVYVF9IQVNIRUQpLCBvciB3aGV0aGVyCisgKiAgICAgICAgICAgICAgICAgICBpdCBpcyB0aGUgY29udGVudCBvZiBcYyBNZXNzYWdlcyBpdHNlbGYsIGluIHdoaWNoIGNhc2UKKyAqICAgICAgICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIHRoZSBoYXNoaW5nCisgKiAgICAgICAgICAgICAgICAgICAodmFsdWUgTUJFRFRMU19TU0xfVExTMV8zX0NPTlRFWFRfVU5IQVNIRUQpLgorICogXHBhcmFtIGRzdGJ1ZiAgICAgVGhlIHRhcmdldCBidWZmZXIgdG8gd3JpdGUgdGhlIG91dHB1dCBvZgorICogICAgICAgICAgICAgICAgICAgXGMgRGVyaXZlLVNlY3JldCB0by4gVGhpcyBtdXN0IGJlIGEgd3JpdGFibGUgYnVmZmVyIG9mCisgKiAgICAgICAgICAgICAgICAgICBzaXplIFxwIGJ1ZmxlbiBCeXRlcy4KKyAqIFxwYXJhbSBidWZsZW4gICAgIFRoZSBsZW5ndGggb2YgXHAgZHN0YnVmIGluIEJ5dGVzLgorICoKKyAqIFxyZXR1cm5zICAgICAgICBcYyAwIG9uIHN1Y2Nlc3MuCisgKiBccmV0dXJucyAgICAgICAgQSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBtYmVkdGxzX3NzbF90bHMxXzNfZGVyaXZlX3NlY3JldCgKKyAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX3R5cGVfdCBoYXNoX2FsZywKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWNyZXQsIHNpemVfdCBzbGVuLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhYmVsLCBzaXplX3QgbGxlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdHgsIHNpemVfdCBjbGVuLAorICAgICAgICAgICAgICAgICAgIGludCBjdHhfaGFzaGVkLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdGJ1Ziwgc2l6ZV90IGJ1ZmxlbiApOworCisvKioKKyAqIFxicmllZiBDb21wdXRlIHRoZSBuZXh0IHNlY3JldCBpbiB0aGUgVExTIDEuMyBrZXkgc2NoZWR1bGUKKyAqCisgKiBUaGUgVExTIDEuMyBrZXkgc2NoZWR1bGUgcHJvY2VlZHMgYXMgZm9sbG93cyB0byBjb21wdXRlCisgKiB0aGUgdGhyZWUgbWFpbiBzZWNyZXRzIGR1cmluZyB0aGUgaGFuZHNoYWtlOiBUaGUgZWFybHkKKyAqIHNlY3JldCBmb3IgZWFybHkgZGF0YSwgdGhlIGhhbmRzaGFrZSBzZWNyZXQgZm9yIGFsbAorICogb3RoZXIgZW5jcnlwdGVkIGhhbmRzaGFrZSBtZXNzYWdlcywgYW5kIHRoZSBtYXN0ZXIKKyAqIHNlY3JldCBmb3IgYWxsIGFwcGxpY2F0aW9uIHRyYWZmaWMuCisgKgorICogPHR0PgorICogICAgICAgICAgICAgICAgICAgIDAKKyAqICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgdgorICogICAgIFBTSyAtPiAgSEtERi1FeHRyYWN0ID0gRWFybHkgU2VjcmV0CisgKiAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgIHYKKyAqICAgICBEZXJpdmUtU2VjcmV0KCAuLCAiZGVyaXZlZCIsICIiICkKKyAqICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgdgorICogIChFQylESEUgLT4gSEtERi1FeHRyYWN0ID0gSGFuZHNoYWtlIFNlY3JldAorICogICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICB2CisgKiAgICAgRGVyaXZlLVNlY3JldCggLiwgImRlcml2ZWQiLCAiIiApCisgKiAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgIHYKKyAqICAgICAwIC0+IEhLREYtRXh0cmFjdCA9IE1hc3RlciBTZWNyZXQKKyAqIDwvdHQ+CisgKgorICogRWFjaCBvZiB0aGUgdGhyZWUgc2VjcmV0cyBpbiB0dXJuIGlzIHRoZSBiYXNpcyBmb3IgZnVydGhlcgorICoga2V5IGRlcml2YXRpb25zLCBzdWNoIGFzIHRoZSBkZXJpdmF0aW9uIG9mIHRyYWZmaWMga2V5cyBhbmQgSVZzOworICogc2VlIGUuZy4gbWJlZHRsc19zc2xfdGxzMV8zX21ha2VfdHJhZmZpY19rZXlzKCkuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIG9uZSBzdGVwIGluIHRoaXMgZXZvbHV0aW9uIG9mIHNlY3JldHM6CisgKgorICogPHR0PgorICogICAgICAgICAgICAgICAgb2xkX3NlY3JldAorICogICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICB2CisgKiAgICAgRGVyaXZlLVNlY3JldCggLiwgImRlcml2ZWQiLCAiIiApCisgKiAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgIHYKKyAqICAgICBpbnB1dCAtPiBIS0RGLUV4dHJhY3QgPSBuZXdfc2VjcmV0CisgKiA8L3R0PgorICoKKyAqIFxwYXJhbSBoYXNoX2FsZyAgICBUaGUgaWRlbnRpZmllciBmb3IgdGhlIGhhc2ggZnVuY3Rpb24gdXNlZCBmb3IgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zIG9mIEhLREYuCisgKiBccGFyYW0gc2VjcmV0X29sZCAgVGhlIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBob2xkaW5nIHRoZSBvbGQgc2VjcmV0CisgKiAgICAgICAgICAgICAgICAgICAgb24gZnVuY3Rpb24gZW50cnkuIElmIG5vdCBcYyBOVUxMLCB0aGlzIG11c3QgYmUgYQorICogICAgICAgICAgICAgICAgICAgIHJlYWRhYmxlIGJ1ZmZlciB3aG9zZSBzaXplIG1hdGNoZXMgdGhlIG91dHB1dCBzaXplCisgKiAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGhhc2ggZnVuY3Rpb24gcmVwcmVzZW50ZWQgYnkgXHAgaGFzaF9hbGcuCisgKiAgICAgICAgICAgICAgICAgICAgSWYgXGMgTlVMTCwgYW4gYWxsIFxjIDAgYXJyYXkgd2lsbCBiZSB1c2VkIGluc3RlYWQuCisgKiBccGFyYW0gaW5wdXQgICAgICAgVGhlIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBob2xkaW5nIHRoZSBhZGRpdGlvbmFsCisgKiAgICAgICAgICAgICAgICAgICAgaW5wdXQgZm9yIHRoZSBrZXkgZGVyaXZhdGlvbiAoZS5nLiwgdGhlIFBTSyBvciB0aGUKKyAqICAgICAgICAgICAgICAgICAgICBlcGhlbWVyYWwgKEVDKURIIHNlY3JldCkuIElmIG5vdCBcYyBOVUxMLCB0aGlzIG11c3QgYmUKKyAqICAgICAgICAgICAgICAgICAgICBhIHJlYWRhYmxlIGJ1ZmZlciB3aG9zZSBzaXplIFxwIGlucHV0X2xlbiBCeXRlcy4KKyAqICAgICAgICAgICAgICAgICAgICBJZiBcYyBOVUxMLCBhbiBhbGwgXGMgMCBhcnJheSB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKyAqIFxwYXJhbSBpbnB1dF9sZW4gICBUaGUgbGVuZ3RoIG9mIFxwIGlucHV0IGluIEJ5dGVzLgorICogXHBhcmFtIHNlY3JldF9uZXcgIFRoZSBhZGRyZXNzIG9mIHRoZSBidWZmZXIgaG9sZGluZyB0aGUgbmV3IHNlY3JldAorICogICAgICAgICAgICAgICAgICAgIG9uIGZ1bmN0aW9uIGV4aXQuIFRoaXMgbXVzdCBiZSBhIHdyaXRhYmxlIGJ1ZmZlcgorICogICAgICAgICAgICAgICAgICAgIHdob3NlIHNpemUgbWF0Y2hlcyB0aGUgb3V0cHV0IHNpemUgb2YgdGhlIGhhc2gKKyAqICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXByZXNlbnRlZCBieSBccCBoYXNoX2FsZy4KKyAqICAgICAgICAgICAgICAgICAgICBUaGlzIG1heSBiZSB0aGUgc2FtZSBhcyBccCBzZWNyZXRfb2xkLgorICoKKyAqIFxyZXR1cm5zICAgICAgICAgICBcYyAwIG9uIHN1Y2Nlc3MuCisgKiBccmV0dXJucyAgICAgICAgICAgQSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KKworaW50IG1iZWR0bHNfc3NsX3RsczFfM19ldm9sdmVfc2VjcmV0KAorICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfdHlwZV90IGhhc2hfYWxnLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlY3JldF9vbGQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsIHNpemVfdCBpbnB1dF9sZW4sCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2VjcmV0X25ldyApOworCisjZW5kaWYgLyogTUJFRFRMU19TU0xfVExTMV8zX0tFWVNfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicmFyeS92ZXJzaW9uX2ZlYXR1cmVzLmMgYi9saWJyYXJ5L3ZlcnNpb25fZmVhdHVyZXMuYwppbmRleCA3M2ZhZWU3Li40MmNjYWY5IDEwMDY0NAotLS0gYS9saWJyYXJ5L3ZlcnNpb25fZmVhdHVyZXMuYworKysgYi9saWJyYXJ5L3ZlcnNpb25fZmVhdHVyZXMuYwpAQCAtNDE3LDkgKzQxNyw5IEBACiAjaWYgZGVmaW5lZChNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCkKICAgICAiTUJFRFRMU19FTlRST1BZX05WX1NFRUQiLAogI2VuZGlmIC8qIE1CRURUTFNfRU5UUk9QWV9OVl9TRUVEICovCi0jaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fS0VZX0ZJTEVfSURfRU5DT0RFU19PV05FUikKLSAgICAiTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9GSUxFX0lEX0VOQ09ERVNfT1dORVIiLAotI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19LRVlfRklMRV9JRF9FTkNPREVTX09XTkVSICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIpCisgICAgIk1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUiIsCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSICovCiAjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9ERUJVRykKICAgICAiTUJFRFRMU19NRU1PUllfREVCVUciLAogI2VuZGlmIC8qIE1CRURUTFNfTUVNT1JZX0RFQlVHICovCkBAIC00MzUsNiArNDM1LDkgQEAKICNpZiBkZWZpbmVkKE1CRURUTFNfUEtDUzFfVjIxKQogICAgICJNQkVEVExTX1BLQ1MxX1YyMSIsCiAjZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMjEgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTKQorICAgICJNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUyIsCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMgKi8KICNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19TUE0pCiAgICAgIk1CRURUTFNfUFNBX0NSWVBUT19TUE0iLAogI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19TUE0gKi8KQEAgLTUzMSw2ICs1MzQsOSBAQAogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkpCiAgICAgIk1CRURUTFNfU1NMX0RUTFNfSEVMTE9fVkVSSUZZIiwKICNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0hFTExPX1ZFUklGWSAqLworI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorICAgICJNQkVEVExTX1NTTF9EVExTX1NSVFAiLAorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLwogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19DTElFTlRfUE9SVF9SRVVTRSkKICAgICAiTUJFRFRMU19TU0xfRFRMU19DTElFTlRfUE9SVF9SRVVTRSIsCiAjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19DTElFTlRfUE9SVF9SRVVTRSAqLwpAQCAtNTU1LDYgKzU2MSwxMiBAQAogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfVkFSSUFCTEVfQlVGRkVSX0xFTkdUSCkKICAgICAiTUJFRFRMU19TU0xfVkFSSUFCTEVfQlVGRkVSX0xFTkdUSCIsCiAjZW5kaWYgLyogTUJFRFRMU19TU0xfVkFSSUFCTEVfQlVGRkVSX0xFTkdUSCAqLworI2lmIGRlZmluZWQoTUJFRFRMU19URVNUX0NPTlNUQU5UX0ZMT1dfTUVNU0FOKQorICAgICJNQkVEVExTX1RFU1RfQ09OU1RBTlRfRkxPV19NRU1TQU4iLAorI2VuZGlmIC8qIE1CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX01FTVNBTiAqLworI2lmIGRlZmluZWQoTUJFRFRMU19URVNUX0NPTlNUQU5UX0ZMT1dfVkFMR1JJTkQpCisgICAgIk1CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX1ZBTEdSSU5EIiwKKyNlbmRpZiAvKiBNQkVEVExTX1RFU1RfQ09OU1RBTlRfRkxPV19WQUxHUklORCAqLwogI2lmIGRlZmluZWQoTUJFRFRMU19URVNUX0hPT0tTKQogICAgICJNQkVEVExTX1RFU1RfSE9PS1MiLAogI2VuZGlmIC8qIE1CRURUTFNfVEVTVF9IT09LUyAqLwpAQCAtNTY3LDYgKzU3OSw5IEBACiAjaWYgZGVmaW5lZChNQkVEVExTX1VTRV9QU0FfQ1JZUFRPKQogICAgICJNQkVEVExTX1VTRV9QU0FfQ1JZUFRPIiwKICNlbmRpZiAvKiBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPICovCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHKQorICAgICJNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHIiwKKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHICovCiAjaWYgZGVmaW5lZChNQkVEVExTX1ZFUlNJT05fRkVBVFVSRVMpCiAgICAgIk1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUyIsCiAjZW5kaWYgLyogTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTICovCmRpZmYgLS1naXQgYS9saWJyYXJ5L3g1MDkuYyBiL2xpYnJhcnkveDUwOS5jCmluZGV4IDE1NzljMWEuLjJhN2JlMzIgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkveDUwOS5jCisrKyBiL2xpYnJhcnkveDUwOS5jCkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICAgICAgcmV0dXJuKCBNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsKICAgICAgICAgICAgICAgICBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHICk7CiAKLSAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikgYWxnLT5wOworICAgIHAgPSBhbGctPnA7CiAgICAgZW5kID0gcCArIGFsZy0+bGVuOwogCiAgICAgaWYoIHAgPj0gZW5kICkKZGlmZiAtLWdpdCBhL2xpYnJhcnkveDUwOV9jcmwuYyBiL2xpYnJhcnkveDUwOV9jcmwuYwppbmRleCBmYTVjMGZmLi5lZGViMzliIDEwMDY0NAotLS0gYS9saWJyYXJ5L3g1MDlfY3JsLmMKKysrIGIvbGlicmFyeS94NTA5X2NybC5jCkBAIC0yNTMsMTMgKzI1MywxMyBAQAogICAgICAgICBzaXplX3QgbGVuMjsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW5kMjsKIAorICAgICAgICBjdXJfZW50cnktPnJhdy50YWcgPSAqKnA7CiAgICAgICAgIGlmKCAoIHJldCA9IG1iZWR0bHNfYXNuMV9nZXRfdGFnKCBwLCBlbmQsICZsZW4yLAogICAgICAgICAgICAgICAgIE1CRURUTFNfQVNOMV9TRVFVRU5DRSB8IE1CRURUTFNfQVNOMV9DT05TVFJVQ1RFRCApICkgIT0gMCApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiggcmV0ICk7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJfZW50cnktPnJhdy50YWcgPSAqKnA7CiAgICAgICAgIGN1cl9lbnRyeS0+cmF3LnAgPSAqcDsKICAgICAgICAgY3VyX2VudHJ5LT5yYXcubGVuID0gbGVuMjsKICAgICAgICAgZW5kMiA9ICpwICsgbGVuMjsKZGlmZiAtLWdpdCBhL3Byb2dyYW1zLy5naXRpZ25vcmUgYi9wcm9ncmFtcy8uZ2l0aWdub3JlCmluZGV4IDUzYzFlZDcuLjg4ZmI5ZDUgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zLy5naXRpZ25vcmUKKysrIGIvcHJvZ3JhbXMvLmdpdGlnbm9yZQpAQCAtMzIsNyArMzIsNiBAQAogcHNhL2NyeXB0b19leGFtcGxlcwogcHNhL2tleV9sYWRkZXJfZGVtbwogcHNhL3BzYV9jb25zdGFudF9uYW1lcwotcHNhL3BzYV9jb25zdGFudF9uYW1lc19nZW5lcmF0ZWQuYwogcmFuZG9tL2dlbl9lbnRyb3B5CiByYW5kb20vZ2VuX3JhbmRvbV9jdHJfZHJiZwogcmFuZG9tL2dlbl9yYW5kb21faGF2ZWdlCmRpZmYgLS1naXQgYS9wcm9ncmFtcy9NYWtlZmlsZSBiL3Byb2dyYW1zL01ha2VmaWxlCmluZGV4IGY5YzI2MDguLjljYmM0NzEgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL01ha2VmaWxlCisrKyBiL3Byb2dyYW1zL01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogTERGTEFHUyA/PQogCiBNQkVEVExTX1RFU1RfUEFUSDo9Li4vdGVzdHMvc3JjCi1NQkVEVExTX1RFU1RfT0JKUzo9JChwYXRzdWJzdCAlLmMsJS5vLCQod2lsZGNhcmQgJHtNQkVEVExTX1RFU1RfUEFUSH0vKi5jKSkKK01CRURUTFNfVEVTVF9PQkpTOj0kKHBhdHN1YnN0ICUuYywlLm8sJCh3aWxkY2FyZCAke01CRURUTFNfVEVTVF9QQVRIfS8qLmMgJHtNQkVEVExTX1RFU1RfUEFUSH0vZHJpdmVycy8qLmMpKQogCiBMT0NBTF9DRkxBR1MgPSAkKFdBUk5JTkdfQ0ZMQUdTKSAtSS4uL3Rlc3RzL2luY2x1ZGUgLUkuLi9pbmNsdWRlIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKIExPQ0FMX0NYWEZMQUdTID0gJChXQVJOSU5HX0NYWEZMQUdTKSAtSS4uL2luY2x1ZGUgLURfRklMRV9PRkZTRVRfQklUUz02NApAQCAtMTE4LDggKzExOCw2IEBACiBBUFBTICs9IHRlc3QvY3BwX2R1bW15X2J1aWxkJChFWEVYVCkKIGVuZGlmCiAKLUVYVFJBX0dFTkVSQVRFRCA9Ci0KIC5TSUxFTlQ6CiAKIC5QSE9OWTogYWxsIGNsZWFuIGxpc3QgZnV6egpAQCAtMTQxLDE2ICsxMzksNiBAQAogJHtNQkVEVExTX1RFU1RfT0JKU306CiAJJChNQUtFKSAtQyAuLi90ZXN0cyBtYmVkdGxzX3Rlc3QKIAotaWZkZWYgV0lORE9XUwotRVhUUkFfR0VORVJBVEVEICs9IHBzYVxwc2FfY29uc3RhbnRfbmFtZXNfZ2VuZXJhdGVkLmMKLWVsc2UKLUVYVFJBX0dFTkVSQVRFRCArPSBwc2EvcHNhX2NvbnN0YW50X25hbWVzX2dlbmVyYXRlZC5jCi1lbmRpZgotCi1wc2EvcHNhX2NvbnN0YW50X25hbWVzJChFWEVYVCk6IHBzYS9wc2FfY29uc3RhbnRfbmFtZXNfZ2VuZXJhdGVkLmMKLXBzYS9wc2FfY29uc3RhbnRfbmFtZXNfZ2VuZXJhdGVkLmM6IC4uL3NjcmlwdHMvZ2VuZXJhdGVfcHNhX2NvbnN0YW50cy5weSAuLi9pbmNsdWRlL3BzYS9jcnlwdG9fdmFsdWVzLmggLi4vaW5jbHVkZS9wc2EvY3J5cHRvX2V4dHJhLmgKLQkuLi9zY3JpcHRzL2dlbmVyYXRlX3BzYV9jb25zdGFudHMucHkKLQogYWVzL2Flc2NyeXB0MiQoRVhFWFQpOiBhZXMvYWVzY3J5cHQyLmMgJChERVApCiAJZWNobyAiICBDQyAgICBhZXMvYWVzY3J5cHQyLmMiCiAJJChDQykgJChMT0NBTF9DRkxBR1MpICQoQ0ZMQUdTKSBhZXMvYWVzY3J5cHQyLmMgICAgJChMT0NBTF9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACkBAIC0zNzEsMTIgKzM1OSwxMCBAQAogaWZuZGVmIFdJTkRPV1MKIAlybSAtZiAkKEFQUFMpCiAJLXJtIC1mIHNzbC9zc2xfcHRocmVhZF9zZXJ2ZXIkKEVYRVhUKQotCXJtIC1mICQoRVhUUkFfR0VORVJBVEVEKQogCS1ybSAtZiB0ZXN0L2NwcF9kdW1teV9idWlsZCQoRVhFWFQpCiBlbHNlCiAJaWYgZXhpc3QgKi5vIGRlbCAvUSAvRiAqLm8KIAlpZiBleGlzdCAqLmV4ZSBkZWwgL1EgL0YgKi5leGUKLQlkZWwgL1MgL1EgL0YgJChFWFRSQV9HRU5FUkFURUQpCiBlbmRpZgogCSQoTUFLRSkgLUMgZnV6eiBjbGVhbgogCmRpZmYgLS1naXQgYS9wcm9ncmFtcy9hZXMvQ01ha2VMaXN0cy50eHQgYi9wcm9ncmFtcy9hZXMvQ01ha2VMaXN0cy50eHQKaW5kZXggMjMwOTc4OS4uNmI4Y2UyYSAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvYWVzL0NNYWtlTGlzdHMudHh0CisrKyBiL3Byb2dyYW1zL2Flcy9DTWFrZUxpc3RzLnR4dApAQCAtNSw3ICs1LDcgQEAKIAogZm9yZWFjaChleGUgSU4gTElTVFMgZXhlY3V0YWJsZXMpCiAgICAgYWRkX2V4ZWN1dGFibGUoJHtleGV9ICR7ZXhlfS5jICQ8VEFSR0VUX09CSkVDVFM6bWJlZHRsc190ZXN0PikKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtleGV9IG1iZWRjcnlwdG8pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZXhlfSAke21iZWRjcnlwdG9fdGFyZ2V0fSkKIGVuZGZvcmVhY2goKQogCiBpbnN0YWxsKFRBUkdFVFMgJHtleGVjdXRhYmxlc30KZGlmZiAtLWdpdCBhL3Byb2dyYW1zL2Z1enovQ01ha2VMaXN0cy50eHQgYi9wcm9ncmFtcy9mdXp6L0NNYWtlTGlzdHMudHh0CmluZGV4IGUyYjBlYWMuLjM1NTEyYzcgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL2Z1enovQ01ha2VMaXN0cy50eHQKKysrIGIvcHJvZ3JhbXMvZnV6ei9DTWFrZUxpc3RzLnR4dApAQCAtMSw1ICsxLDUgQEAKIHNldChsaWJzCi0gICAgbWJlZHRscworICAgICR7bWJlZHRsc190YXJnZXR9CiApCiAKIGlmKFVTRV9QS0NTMTFfSEVMUEVSX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9wcm9ncmFtcy9mdXp6L01ha2VmaWxlIGIvcHJvZ3JhbXMvZnV6ei9NYWtlZmlsZQppbmRleCA4MTk2ZjM5Li5mYTE3OTE4IDEwMDY0NAotLS0gYS9wcm9ncmFtcy9mdXp6L01ha2VmaWxlCisrKyBiL3Byb2dyYW1zL2Z1enovTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiBNQkVEVExTX1RFU1RfUEFUSDo9Li4vLi4vdGVzdHMvc3JjCi1NQkVEVExTX1RFU1RfT0JKUzo9JChwYXRzdWJzdCAlLmMsJS5vLCQod2lsZGNhcmQgJHtNQkVEVExTX1RFU1RfUEFUSH0vKi5jKSkKK01CRURUTFNfVEVTVF9PQkpTOj0kKHBhdHN1YnN0ICUuYywlLm8sJCh3aWxkY2FyZCAke01CRURUTFNfVEVTVF9QQVRIfS8qLmMgJHtNQkVEVExTX1RFU1RfUEFUSH0vZHJpdmVycy8qLmMpKQogCiBMT0NBTF9DRkxBR1MgPSAtSS4uLy4uL3Rlc3RzL2luY2x1ZGUgLUkuLi8uLi9pbmNsdWRlIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKIExPQ0FMX0xERkxBR1MgPSAke01CRURUTFNfVEVTVF9PQkpTfQkJXApkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvaGFzaC9DTWFrZUxpc3RzLnR4dCBiL3Byb2dyYW1zL2hhc2gvQ01ha2VMaXN0cy50eHQKaW5kZXggYWUyOTQ3OS4uYjJmMmExZiAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvaGFzaC9DTWFrZUxpc3RzLnR4dAorKysgYi9wcm9ncmFtcy9oYXNoL0NNYWtlTGlzdHMudHh0CkBAIC01LDcgKzUsNyBAQAogCiBmb3JlYWNoKGV4ZSBJTiBMSVNUUyBleGVjdXRhYmxlcykKICAgICBhZGRfZXhlY3V0YWJsZSgke2V4ZX0gJHtleGV9LmMgJDxUQVJHRVRfT0JKRUNUUzptYmVkdGxzX3Rlc3Q+KQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke2V4ZX0gbWJlZGNyeXB0bykKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtleGV9ICR7bWJlZGNyeXB0b190YXJnZXR9KQogZW5kZm9yZWFjaCgpCiAKIGluc3RhbGwoVEFSR0VUUyAke2V4ZWN1dGFibGVzfQpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvcGtleS9DTWFrZUxpc3RzLnR4dCBiL3Byb2dyYW1zL3BrZXkvQ01ha2VMaXN0cy50eHQKaW5kZXggYjRiM2QzMC4uOWM2ZmU3ZCAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvcGtleS9DTWFrZUxpc3RzLnR4dAorKysgYi9wcm9ncmFtcy9wa2V5L0NNYWtlTGlzdHMudHh0CkBAIC01LDcgKzUsNyBAQAogCiBmb3JlYWNoKGV4ZSBJTiBMSVNUUyBleGVjdXRhYmxlc19tYmVkdGxzKQogICAgIGFkZF9leGVjdXRhYmxlKCR7ZXhlfSAke2V4ZX0uYyAkPFRBUkdFVF9PQkpFQ1RTOm1iZWR0bHNfdGVzdD4pCi0gICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZXhlfSBtYmVkdGxzKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke2V4ZX0gJHttYmVkdGxzX3RhcmdldH0pCiBlbmRmb3JlYWNoKCkKIAogc2V0KGV4ZWN1dGFibGVzX21iZWRjcnlwdG8KQEAgLTMxLDcgKzMxLDcgQEAKIAogZm9yZWFjaChleGUgSU4gTElTVFMgZXhlY3V0YWJsZXNfbWJlZGNyeXB0bykKICAgICBhZGRfZXhlY3V0YWJsZSgke2V4ZX0gJHtleGV9LmMgJDxUQVJHRVRfT0JKRUNUUzptYmVkdGxzX3Rlc3Q+KQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke2V4ZX0gbWJlZGNyeXB0bykKKyAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtleGV9ICR7bWJlZGNyeXB0b190YXJnZXR9KQogZW5kZm9yZWFjaCgpCiAKIGluc3RhbGwoVEFSR0VUUyAke2V4ZWN1dGFibGVzX21iZWR0bHN9ICR7ZXhlY3V0YWJsZXNfbWJlZGNyeXB0b30KZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3BrZXkvZWNkaF9jdXJ2ZTI1NTE5LmMgYi9wcm9ncmFtcy9wa2V5L2VjZGhfY3VydmUyNTUxOS5jCmluZGV4IGE3NjI2NmYuLjY3ZjEzNjMgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3BrZXkvZWNkaF9jdXJ2ZTI1NTE5LmMKKysrIGIvcHJvZ3JhbXMvcGtleS9lY2RoX2N1cnZlMjU1MTkuYwpAQCAtODYsNyArODYsNyBAQAogICAgIG1iZWR0bHNfcHJpbnRmKCAiIG9rXG4iICk7CiAKICAgICAvKgotICAgICAqIENsaWVudDogaW5pYWxpemUgY29udGV4dCBhbmQgZ2VuZXJhdGUga2V5cGFpcgorICAgICAqIENsaWVudDogaW5pdGlhbGl6ZSBjb250ZXh0IGFuZCBnZW5lcmF0ZSBrZXlwYWlyCiAgICAgICovCiAgICAgbWJlZHRsc19wcmludGYoICIgIC4gU2V0dGluZyB1cCBjbGllbnQgY29udGV4dC4uLiIgKTsKICAgICBmZmx1c2goIHN0ZG91dCApOwpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvcHNhL0NNYWtlTGlzdHMudHh0IGIvcHJvZ3JhbXMvcHNhL0NNYWtlTGlzdHMudHh0CmluZGV4IGU1MTk2OTYuLjIzZTg1ZmUgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3BzYS9DTWFrZUxpc3RzLnR4dAorKysgYi9wcm9ncmFtcy9wc2EvQ01ha2VMaXN0cy50eHQKQEAgLTYsMTkgKzYsMTIgQEAKIAogZm9yZWFjaChleGUgSU4gTElTVFMgZXhlY3V0YWJsZXMpCiAgICAgYWRkX2V4ZWN1dGFibGUoJHtleGV9ICR7ZXhlfS5jICQ8VEFSR0VUX09CSkVDVFM6bWJlZHRsc190ZXN0PikKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtleGV9IG1iZWRjcnlwdG8pCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZXhlfSAke21iZWRjcnlwdG9fdGFyZ2V0fSkKICAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcygke2V4ZX0gUFJJVkFURSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vLi4vdGVzdHMvaW5jbHVkZSkKIGVuZGZvcmVhY2goKQogCiB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcyhwc2FfY29uc3RhbnRfbmFtZXMgUFJJVkFURSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0pCiAKLWFkZF9jdXN0b21fdGFyZ2V0KAotICAgIHBzYV9jb25zdGFudF9uYW1lc19nZW5lcmF0ZWQKLSAgICBDT01NQU5EICR7TUJFRFRMU19QWVRIT05fRVhFQ1VUQUJMRX0gc2NyaXB0cy9nZW5lcmF0ZV9wc2FfY29uc3RhbnRzLnB5ICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfQotICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi8uLi8KLSkKLWFkZF9kZXBlbmRlbmNpZXMocHNhX2NvbnN0YW50X25hbWVzIHBzYV9jb25zdGFudF9uYW1lc19nZW5lcmF0ZWQpCi0KIGluc3RhbGwoVEFSR0VUUyAke2V4ZWN1dGFibGVzfQogICAgICAgICBERVNUSU5BVElPTiAiYmluIgogICAgICAgICBQRVJNSVNTSU9OUyBPV05FUl9SRUFEIE9XTkVSX1dSSVRFIE9XTkVSX0VYRUNVVEUgR1JPVVBfUkVBRCBHUk9VUF9FWEVDVVRFIFdPUkxEX1JFQUQgV09STERfRVhFQ1VURSkKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3BzYS9jcnlwdG9fZXhhbXBsZXMuYyBiL3Byb2dyYW1zL3BzYS9jcnlwdG9fZXhhbXBsZXMuYwppbmRleCA2MjNhMDkwLi4xNWFhYmY5IDEwMDY0NAotLS0gYS9wcm9ncmFtcy9wc2EvY3J5cHRvX2V4YW1wbGVzLmMKKysrIGIvcHJvZ3JhbXMvcHNhL2NyeXB0b19leGFtcGxlcy5jCkBAIC0zMTcsMTggKzMxNyw2IEBACiAgICAgICAgIHByaW50ZiggIlx0c3VjY2VzcyFcclxuIiApOwogfQogCi0jaWYgZGVmaW5lZChNQkVEVExTX0NIRUNLX1BBUkFNUykKLSNpbmNsdWRlICJtYmVkdGxzL3BsYXRmb3JtX3V0aWwuaCIKLXZvaWQgbWJlZHRsc19wYXJhbV9mYWlsZWQoIGNvbnN0IGNoYXIgKmZhaWx1cmVfY29uZGl0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lICkKLXsKLSAgICBwcmludGYoICIlczolaTogSW5wdXQgcGFyYW0gZmFpbGVkIC0gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGZpbGUsIGxpbmUsIGZhaWx1cmVfY29uZGl0aW9uICk7Ci0gICAgZXhpdCggRVhJVF9GQUlMVVJFICk7Ci19Ci0jZW5kaWYKLQogaW50IG1haW4oIHZvaWQgKQogewogICAgIEFTU0VSVCggcHNhX2NyeXB0b19pbml0KCApID09IFBTQV9TVUNDRVNTICk7CmRpZmYgLS1naXQgYS9wcm9ncmFtcy9wc2Eva2V5X2xhZGRlcl9kZW1vLmMgYi9wcm9ncmFtcy9wc2Eva2V5X2xhZGRlcl9kZW1vLmMKaW5kZXggYWUyNDQyZS4uYTM2MjhmMCAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvcHNhL2tleV9sYWRkZXJfZGVtby5jCisrKyBiL3Byb2dyYW1zL3BzYS9rZXlfbGFkZGVyX2RlbW8uYwpAQCAtNjAzLDE4ICs2MDMsNiBAQAogICAgIHByaW50ZiggIiAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBzYW1lIHNlcXVlbmNlIG9mIGxhYmVscy5cbiIgKTsKIH0KIAotI2lmIGRlZmluZWQoTUJFRFRMU19DSEVDS19QQVJBTVMpCi0jaW5jbHVkZSAibWJlZHRscy9wbGF0Zm9ybV91dGlsLmgiCi12b2lkIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCBjb25zdCBjaGFyICpmYWlsdXJlX2NvbmRpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSApCi17Ci0gICAgcHJpbnRmKCAiJXM6JWk6IElucHV0IHBhcmFtIGZhaWxlZCAtICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBmaWxlLCBsaW5lLCBmYWlsdXJlX2NvbmRpdGlvbiApOwotICAgIGV4aXQoIEVYSVRfRkFJTFVSRSApOwotfQotI2VuZGlmCi0KIGludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKIHsKICAgICBjb25zdCBjaGFyICprZXlfZmlsZV9uYW1lID0gIm1hc3Rlci5rZXkiOwpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvcHNhL3BzYV9jb25zdGFudF9uYW1lc19nZW5lcmF0ZWQuYyBiL3Byb2dyYW1zL3BzYS9wc2FfY29uc3RhbnRfbmFtZXNfZ2VuZXJhdGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1NjhmMwotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyYW1zL3BzYS9wc2FfY29uc3RhbnRfbmFtZXNfZ2VuZXJhdGVkLmMKQEAgLTAsMCArMSw0MDAgQEAKKy8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BzYV9jb25zdGFudC5weS4gRE8gTk9UIEVESVQuICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpwc2Ffc3RyZXJyb3IocHNhX3N0YXR1c190IHN0YXR1cykKK3sKKyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgIGNhc2UgUFNBX0VSUk9SX0FMUkVBRFlfRVhJU1RTOiByZXR1cm4gIlBTQV9FUlJPUl9BTFJFQURZX0VYSVNUUyI7CisgICAgY2FzZSBQU0FfRVJST1JfQkFEX1NUQVRFOiByZXR1cm4gIlBTQV9FUlJPUl9CQURfU1RBVEUiOworICAgIGNhc2UgUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEw6IHJldHVybiAiUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwiOworICAgIGNhc2UgUFNBX0VSUk9SX0NPTU1VTklDQVRJT05fRkFJTFVSRTogcmV0dXJuICJQU0FfRVJST1JfQ09NTVVOSUNBVElPTl9GQUlMVVJFIjsKKyAgICBjYXNlIFBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEOiByZXR1cm4gIlBTQV9FUlJPUl9DT1JSVVBUSU9OX0RFVEVDVEVEIjsKKyAgICBjYXNlIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVDogcmV0dXJuICJQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QiOworICAgIGNhc2UgUFNBX0VSUk9SX0dFTkVSSUNfRVJST1I6IHJldHVybiAiUFNBX0VSUk9SX0dFTkVSSUNfRVJST1IiOworICAgIGNhc2UgUFNBX0VSUk9SX0hBUkRXQVJFX0ZBSUxVUkU6IHJldHVybiAiUFNBX0VSUk9SX0hBUkRXQVJFX0ZBSUxVUkUiOworICAgIGNhc2UgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9EQVRBOiByZXR1cm4gIlBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfREFUQSI7CisgICAgY2FzZSBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX0VOVFJPUFk6IHJldHVybiAiUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9FTlRST1BZIjsKKyAgICBjYXNlIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZOiByZXR1cm4gIlBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZIjsKKyAgICBjYXNlIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfU1RPUkFHRTogcmV0dXJuICJQU0FfRVJST1JfSU5TVUZGSUNJRU5UX1NUT1JBR0UiOworICAgIGNhc2UgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQ6IHJldHVybiAiUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQiOworICAgIGNhc2UgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFOiByZXR1cm4gIlBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSI7CisgICAgY2FzZSBQU0FfRVJST1JfSU5WQUxJRF9QQURESU5HOiByZXR1cm4gIlBTQV9FUlJPUl9JTlZBTElEX1BBRERJTkciOworICAgIGNhc2UgUFNBX0VSUk9SX0lOVkFMSURfU0lHTkFUVVJFOiByZXR1cm4gIlBTQV9FUlJPUl9JTlZBTElEX1NJR05BVFVSRSI7CisgICAgY2FzZSBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRDogcmV0dXJuICJQU0FfRVJST1JfTk9UX1BFUk1JVFRFRCI7CisgICAgY2FzZSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDogcmV0dXJuICJQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCI7CisgICAgY2FzZSBQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFOiByZXR1cm4gIlBTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkUiOworICAgIGNhc2UgUFNBX1NVQ0NFU1M6IHJldHVybiAiUFNBX1NVQ0NFU1MiOworICAgIGRlZmF1bHQ6IHJldHVybiBOVUxMOworICAgIH0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBzYV9lY2NfZmFtaWx5X25hbWUocHNhX2VjY19mYW1pbHlfdCBjdXJ2ZSkKK3sKKyAgICBzd2l0Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBQU0FfRUNDX0ZBTUlMWV9CUkFJTlBPT0xfUF9SMTogcmV0dXJuICJQU0FfRUNDX0ZBTUlMWV9CUkFJTlBPT0xfUF9SMSI7CisgICAgY2FzZSBQU0FfRUNDX0ZBTUlMWV9NT05UR09NRVJZOiByZXR1cm4gIlBTQV9FQ0NfRkFNSUxZX01PTlRHT01FUlkiOworICAgIGNhc2UgUFNBX0VDQ19GQU1JTFlfU0VDUF9LMTogcmV0dXJuICJQU0FfRUNDX0ZBTUlMWV9TRUNQX0sxIjsKKyAgICBjYXNlIFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjE6IHJldHVybiAiUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSI7CisgICAgY2FzZSBQU0FfRUNDX0ZBTUlMWV9TRUNQX1IyOiByZXR1cm4gIlBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjIiOworICAgIGNhc2UgUFNBX0VDQ19GQU1JTFlfU0VDVF9LMTogcmV0dXJuICJQU0FfRUNDX0ZBTUlMWV9TRUNUX0sxIjsKKyAgICBjYXNlIFBTQV9FQ0NfRkFNSUxZX1NFQ1RfUjE6IHJldHVybiAiUFNBX0VDQ19GQU1JTFlfU0VDVF9SMSI7CisgICAgY2FzZSBQU0FfRUNDX0ZBTUlMWV9TRUNUX1IyOiByZXR1cm4gIlBTQV9FQ0NfRkFNSUxZX1NFQ1RfUjIiOworICAgIGRlZmF1bHQ6IHJldHVybiBOVUxMOworICAgIH0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBzYV9kaF9mYW1pbHlfbmFtZShwc2FfZGhfZmFtaWx5X3QgZ3JvdXApCit7CisgICAgc3dpdGNoIChncm91cCkgeworICAgIGNhc2UgUFNBX0RIX0ZBTUlMWV9DVVNUT006IHJldHVybiAiUFNBX0RIX0ZBTUlMWV9DVVNUT00iOworICAgIGNhc2UgUFNBX0RIX0ZBTUlMWV9SRkM3OTE5OiByZXR1cm4gIlBTQV9ESF9GQU1JTFlfUkZDNzkxOSI7CisgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqcHNhX2hhc2hfYWxnb3JpdGhtX25hbWUocHNhX2FsZ29yaXRobV90IGhhc2hfYWxnKQoreworICAgIHN3aXRjaCAoaGFzaF9hbGcpIHsKKyAgICBjYXNlIFBTQV9BTEdfQU5ZX0hBU0g6IHJldHVybiAiUFNBX0FMR19BTllfSEFTSCI7CisgICAgY2FzZSBQU0FfQUxHX0NBVEVHT1JZX0hBU0g6IHJldHVybiAiUFNBX0FMR19DQVRFR09SWV9IQVNIIjsKKyAgICBjYXNlIFBTQV9BTEdfTUQyOiByZXR1cm4gIlBTQV9BTEdfTUQyIjsKKyAgICBjYXNlIFBTQV9BTEdfTUQ0OiByZXR1cm4gIlBTQV9BTEdfTUQ0IjsKKyAgICBjYXNlIFBTQV9BTEdfTUQ1OiByZXR1cm4gIlBTQV9BTEdfTUQ1IjsKKyAgICBjYXNlIFBTQV9BTEdfUklQRU1EMTYwOiByZXR1cm4gIlBTQV9BTEdfUklQRU1EMTYwIjsKKyAgICBjYXNlIFBTQV9BTEdfU0hBM18yMjQ6IHJldHVybiAiUFNBX0FMR19TSEEzXzIyNCI7CisgICAgY2FzZSBQU0FfQUxHX1NIQTNfMjU2OiByZXR1cm4gIlBTQV9BTEdfU0hBM18yNTYiOworICAgIGNhc2UgUFNBX0FMR19TSEEzXzM4NDogcmV0dXJuICJQU0FfQUxHX1NIQTNfMzg0IjsKKyAgICBjYXNlIFBTQV9BTEdfU0hBM181MTI6IHJldHVybiAiUFNBX0FMR19TSEEzXzUxMiI7CisgICAgY2FzZSBQU0FfQUxHX1NIQV8xOiByZXR1cm4gIlBTQV9BTEdfU0hBXzEiOworICAgIGNhc2UgUFNBX0FMR19TSEFfMjI0OiByZXR1cm4gIlBTQV9BTEdfU0hBXzIyNCI7CisgICAgY2FzZSBQU0FfQUxHX1NIQV8yNTY6IHJldHVybiAiUFNBX0FMR19TSEFfMjU2IjsKKyAgICBjYXNlIFBTQV9BTEdfU0hBXzM4NDogcmV0dXJuICJQU0FfQUxHX1NIQV8zODQiOworICAgIGNhc2UgUFNBX0FMR19TSEFfNTEyOiByZXR1cm4gIlBTQV9BTEdfU0hBXzUxMiI7CisgICAgY2FzZSBQU0FfQUxHX1NIQV81MTJfMjI0OiByZXR1cm4gIlBTQV9BTEdfU0hBXzUxMl8yMjQiOworICAgIGNhc2UgUFNBX0FMR19TSEFfNTEyXzI1NjogcmV0dXJuICJQU0FfQUxHX1NIQV81MTJfMjU2IjsKKyAgICBkZWZhdWx0OiByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwc2Ffa2FfYWxnb3JpdGhtX25hbWUocHNhX2FsZ29yaXRobV90IGthX2FsZykKK3sKKyAgICBzd2l0Y2ggKGthX2FsZykgeworICAgIGNhc2UgUFNBX0FMR19DQVRFR09SWV9LRVlfQUdSRUVNRU5UOiByZXR1cm4gIlBTQV9BTEdfQ0FURUdPUllfS0VZX0FHUkVFTUVOVCI7CisgICAgY2FzZSBQU0FfQUxHX0VDREg6IHJldHVybiAiUFNBX0FMR19FQ0RIIjsKKyAgICBjYXNlIFBTQV9BTEdfRkZESDogcmV0dXJuICJQU0FfQUxHX0ZGREgiOworICAgIGRlZmF1bHQ6IHJldHVybiBOVUxMOworICAgIH0KK30KKworc3RhdGljIGludCBwc2Ffc25wcmludF9rZXlfdHlwZShjaGFyICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV90eXBlX3QgdHlwZSkKK3sKKyAgICBzaXplX3QgcmVxdWlyZWRfc2l6ZSA9IDA7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfQUVTOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX0FFUyIsIDE2KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfQVJDNDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVFlQRV9BUkM0IiwgMTcpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9DQU1FTExJQTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVFlQRV9DQU1FTExJQSIsIDIxKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfQ0FURUdPUllfRkxBR19QQUlSOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX0NBVEVHT1JZX0ZMQUdfUEFJUiIsIDMxKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfQ0FURUdPUllfS0VZX1BBSVI6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfQ0FURUdPUllfS0VZX1BBSVIiLCAzMCk7IGJyZWFrOworICAgIGNhc2UgUFNBX0tFWV9UWVBFX0NBVEVHT1JZX1BVQkxJQ19LRVk6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfQ0FURUdPUllfUFVCTElDX0tFWSIsIDMyKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfQ0FURUdPUllfUkFXOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX0NBVEVHT1JZX1JBVyIsIDI1KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfQ0FURUdPUllfU1lNTUVUUklDOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX0NBVEVHT1JZX1NZTU1FVFJJQyIsIDMxKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfQ0hBQ0hBMjA6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfQ0hBQ0hBMjAiLCAyMSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0tFWV9UWVBFX0RFUklWRTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVFlQRV9ERVJJVkUiLCAxOSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0tFWV9UWVBFX0RFUzogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVFlQRV9ERVMiLCAxNik7IGJyZWFrOworICAgIGNhc2UgUFNBX0tFWV9UWVBFX0RIX0tFWV9QQUlSX0JBU0U6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfREhfS0VZX1BBSVJfQkFTRSIsIDI5KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfREhfUFVCTElDX0tFWV9CQVNFOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX0RIX1BVQkxJQ19LRVlfQkFTRSIsIDMxKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfRFNBX0tFWV9QQUlSOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX0RTQV9LRVlfUEFJUiIsIDI1KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfRFNBX1BVQkxJQ19LRVk6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfRFNBX1BVQkxJQ19LRVkiLCAyNyk7IGJyZWFrOworICAgIGNhc2UgUFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUl9CQVNFOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUl9CQVNFIiwgMzApOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWV9CQVNFOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZX0JBU0UiLCAzMik7IGJyZWFrOworICAgIGNhc2UgUFNBX0tFWV9UWVBFX0hNQUM6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfSE1BQyIsIDE3KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfTk9ORTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVFlQRV9OT05FIiwgMTcpOyBicmVhazsKKyAgICBjYXNlIFBTQV9LRVlfVFlQRV9SQVdfREFUQTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVFlQRV9SQVdfREFUQSIsIDIxKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUiIsIDI1KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVk6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVkiLCAyNyk7IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChQU0FfS0VZX1RZUEVfSVNfRUNDX0tFWV9QQUlSKHR5cGUpKSB7CisgICAgICAgICAgICBhcHBlbmRfd2l0aF9jdXJ2ZSgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUiIsIDI1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0tFWV9UWVBFX0VDQ19HRVRfRkFNSUxZKHR5cGUpKTsKKyAgICAgICAgfSBlbHNlIGlmIChQU0FfS0VZX1RZUEVfSVNfRUNDX1BVQkxJQ19LRVkodHlwZSkpIHsKKyAgICAgICAgICAgIGFwcGVuZF93aXRoX2N1cnZlKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQU0FfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkiLCAyNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9LRVlfVFlQRV9FQ0NfR0VUX0ZBTUlMWSh0eXBlKSk7CisgICAgICAgIH0gZWxzZSBpZiAoUFNBX0tFWV9UWVBFX0lTX0RIX0tFWV9QQUlSKHR5cGUpKSB7CisgICAgICAgICAgICBhcHBlbmRfd2l0aF9ncm91cCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUFNBX0tFWV9UWVBFX0RIX0tFWV9QQUlSIiwgMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfS0VZX1RZUEVfREhfR0VUX0ZBTUlMWSh0eXBlKSk7CisgICAgICAgIH0gZWxzZSBpZiAoUFNBX0tFWV9UWVBFX0lTX0RIX1BVQkxJQ19LRVkodHlwZSkpIHsKKyAgICAgICAgICAgIGFwcGVuZF93aXRoX2dyb3VwKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQU0FfS0VZX1RZUEVfREhfUFVCTElDX0tFWSIsIDI2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0tFWV9UWVBFX0RIX0dFVF9GQU1JTFkodHlwZSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjB4JTA0eCIsICh1bnNpZ25lZCkgdHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGJ1ZmZlclswXSA9IDA7CisgICAgcmV0dXJuIChpbnQpIHJlcXVpcmVkX3NpemU7Cit9CisKKyNkZWZpbmUgTk9fTEVOR1RIX01PRElGSUVSIDB4ZmZmZmZmZmZsdQorc3RhdGljIGludCBwc2Ffc25wcmludF9hbGdvcml0aG0oY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnKQoreworICAgIHNpemVfdCByZXF1aXJlZF9zaXplID0gMDsKKyAgICBwc2FfYWxnb3JpdGhtX3QgY29yZV9hbGcgPSBhbGc7CisgICAgdW5zaWduZWQgbG9uZyBsZW5ndGhfbW9kaWZpZXIgPSBOT19MRU5HVEhfTU9ESUZJRVI7CisgICAgaWYgKFBTQV9BTEdfSVNfTUFDKGFsZykpIHsKKyAgICAgICAgY29yZV9hbGcgPSBQU0FfQUxHX1RSVU5DQVRFRF9NQUMoYWxnLCAwKTsKKyAgICAgICAgaWYgKGNvcmVfYWxnICE9IGFsZykgeworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAiUFNBX0FMR19UUlVOQ0FURURfTUFDKCIsIDIyKTsKKyAgICAgICAgICAgIGxlbmd0aF9tb2RpZmllciA9IFBTQV9NQUNfVFJVTkNBVEVEX0xFTkdUSChhbGcpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChQU0FfQUxHX0lTX0FFQUQoYWxnKSkgeworICAgICAgICBjb3JlX2FsZyA9IFBTQV9BTEdfQUVBRF9XSVRIX0RFRkFVTFRfVEFHX0xFTkdUSChhbGcpOworICAgICAgICBpZiAoY29yZV9hbGcgPT0gMCkgeworICAgICAgICAgICAgLyogRm9yIHVua25vd24gQUVBRCBhbGdvcml0aG1zLCB0aGVyZSBpcyBubyAiZGVmYXVsdCB0YWcgbGVuZ3RoIi4gKi8KKyAgICAgICAgICAgIGNvcmVfYWxnID0gYWxnOworICAgICAgICB9IGVsc2UgaWYgKGNvcmVfYWxnICE9IGFsZykgeworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAiUFNBX0FMR19BRUFEX1dJVEhfVEFHX0xFTkdUSCgiLCAyOSk7CisgICAgICAgICAgICBsZW5ndGhfbW9kaWZpZXIgPSBQU0FfQUVBRF9UQUdfTEVOR1RIKGFsZyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKFBTQV9BTEdfSVNfS0VZX0FHUkVFTUVOVChhbGcpICYmCisgICAgICAgICAgICAgICAhUFNBX0FMR19JU19SQVdfS0VZX0FHUkVFTUVOVChhbGcpKSB7CisgICAgICAgIGNvcmVfYWxnID0gUFNBX0FMR19LRVlfQUdSRUVNRU5UX0dFVF9LREYoYWxnKTsKKyAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICJQU0FfQUxHX0tFWV9BR1JFRU1FTlQoIiwgMjIpOworICAgICAgICBhcHBlbmRfd2l0aF9hbGcoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2thX2FsZ29yaXRobV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0FMR19LRVlfQUdSRUVNRU5UX0dFVF9CQVNFKGFsZykpOworICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiLCAiLCAyKTsKKyAgICB9CisgICAgc3dpdGNoIChjb3JlX2FsZykgeworICAgIGNhc2UgUFNBX0FMR19BTllfSEFTSDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQU5ZX0hBU0giLCAxNik7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19BUkM0OiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19BUkM0IiwgMTIpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfQ0FURUdPUllfQUVBRDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ0FURUdPUllfQUVBRCIsIDIxKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTjogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OIiwgMzgpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfQ0FURUdPUllfQ0lQSEVSOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19DQVRFR09SWV9DSVBIRVIiLCAyMyk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19DQVRFR09SWV9IQVNIOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19DQVRFR09SWV9IQVNIIiwgMjEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfQ0FURUdPUllfS0VZX0FHUkVFTUVOVDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ0FURUdPUllfS0VZX0FHUkVFTUVOVCIsIDMwKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0NBVEVHT1JZX0tFWV9ERVJJVkFUSU9OOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19DQVRFR09SWV9LRVlfREVSSVZBVElPTiIsIDMxKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0NBVEVHT1JZX01BQzogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ0FURUdPUllfTUFDIiwgMjApOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfQ0FURUdPUllfU0lHTjogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ0FURUdPUllfU0lHTiIsIDIxKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0NCQ19NQUM6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0NCQ19NQUMiLCAxNSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19DQkNfTk9fUEFERElORzogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ0JDX05PX1BBRERJTkciLCAyMik7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19DQkNfUEtDUzc6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0NCQ19QS0NTNyIsIDE3KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0NDTTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ0NNIiwgMTEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfQ0ZCOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19DRkIiLCAxMSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19DSEFDSEEyMDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ0hBQ0hBMjAiLCAxNik7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19DSEFDSEEyMF9QT0xZMTMwNTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfQ0hBQ0hBMjBfUE9MWTEzMDUiLCAyNSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19DSVBIRVJfTUFDX0JBU0U6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0NJUEhFUl9NQUNfQkFTRSIsIDIzKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0NNQUM6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0NNQUMiLCAxMik7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19DVFI6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0NUUiIsIDExKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0RFVEVSTUlOSVNUSUNfRFNBX0JBU0U6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0RFVEVSTUlOSVNUSUNfRFNBX0JBU0UiLCAzMCk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19ERVRFUk1JTklTVElDX0VDRFNBX0JBU0U6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0FfQkFTRSIsIDMyKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0RTQV9CQVNFOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19EU0FfQkFTRSIsIDE2KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0VDQl9OT19QQURESU5HOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19FQ0JfTk9fUEFERElORyIsIDIyKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0VDREg6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0VDREgiLCAxMik7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19FQ0RTQV9BTlk6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0VDRFNBX0FOWSIsIDE3KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0ZGREg6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0ZGREgiLCAxMik7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19HQ006IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX0dDTSIsIDExKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX0hLREZfQkFTRTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfSEtERl9CQVNFIiwgMTcpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfSE1BQ19CQVNFOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19ITUFDX0JBU0UiLCAxNyk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19NRDI6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX01EMiIsIDExKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX01ENDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfTUQ0IiwgMTEpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfTUQ1OiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19NRDUiLCAxMSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19PRkI6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX09GQiIsIDExKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1JJUEVNRDE2MDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfUklQRU1EMTYwIiwgMTcpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfUlNBX09BRVBfQkFTRTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfUlNBX09BRVBfQkFTRSIsIDIxKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1JTQV9QS0NTMVYxNV9DUllQVDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfUlNBX1BLQ1MxVjE1X0NSWVBUIiwgMjYpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVciLCAyOSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19SU0FfUFNTX0JBU0U6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX1JTQV9QU1NfQkFTRSIsIDIwKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1NIQTNfMjI0OiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19TSEEzXzIyNCIsIDE2KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1NIQTNfMjU2OiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19TSEEzXzI1NiIsIDE2KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1NIQTNfMzg0OiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19TSEEzXzM4NCIsIDE2KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1NIQTNfNTEyOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19TSEEzXzUxMiIsIDE2KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1NIQV8xOiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19TSEFfMSIsIDEzKTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1NIQV8yMjQ6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX1NIQV8yMjQiLCAxNSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19TSEFfMjU2OiBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiUFNBX0FMR19TSEFfMjU2IiwgMTUpOyBicmVhazsKKyAgICBjYXNlIFBTQV9BTEdfU0hBXzM4NDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfU0hBXzM4NCIsIDE1KTsgYnJlYWs7CisgICAgY2FzZSBQU0FfQUxHX1NIQV81MTI6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX1NIQV81MTIiLCAxNSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19TSEFfNTEyXzIyNDogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfU0hBXzUxMl8yMjQiLCAxOSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19TSEFfNTEyXzI1NjogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfU0hBXzUxMl8yNTYiLCAxOSk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19UTFMxMl9QUkZfQkFTRTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfVExTMTJfUFJGX0JBU0UiLCAyMik7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19UTFMxMl9QU0tfVE9fTVNfQkFTRTogYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9BTEdfVExTMTJfUFNLX1RPX01TX0JBU0UiLCAyOCk7IGJyZWFrOworICAgIGNhc2UgUFNBX0FMR19YVFM6IGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfQUxHX1hUUyIsIDExKTsgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKFBTQV9BTEdfSVNfREVURVJNSU5JU1RJQ19EU0EoY29yZV9hbGcpKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICJQU0FfQUxHX0RFVEVSTUlOSVNUSUNfRFNBKCIsIDI1ICsgMSk7CisgICAgICAgICAgICBhcHBlbmRfd2l0aF9hbGcoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9oYXNoX2FsZ29yaXRobV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9BTEdfR0VUX0hBU0goY29yZV9hbGcpKTsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIpIiwgMSk7CisgICAgICAgIH0gZWxzZSBpZiAoUFNBX0FMR19JU19ERVRFUk1JTklTVElDX0VDRFNBKGNvcmVfYWxnKSkgeworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAiUFNBX0FMR19ERVRFUk1JTklTVElDX0VDRFNBKCIsIDI3ICsgMSk7CisgICAgICAgICAgICBhcHBlbmRfd2l0aF9hbGcoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9oYXNoX2FsZ29yaXRobV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9BTEdfR0VUX0hBU0goY29yZV9hbGcpKTsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIpIiwgMSk7CisgICAgICAgIH0gZWxzZSBpZiAoUFNBX0FMR19JU19SQU5ET01JWkVEX0RTQShjb3JlX2FsZykpIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgIlBTQV9BTEdfRFNBKCIsIDExICsgMSk7CisgICAgICAgICAgICBhcHBlbmRfd2l0aF9hbGcoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9oYXNoX2FsZ29yaXRobV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9BTEdfR0VUX0hBU0goY29yZV9hbGcpKTsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIpIiwgMSk7CisgICAgICAgIH0gZWxzZSBpZiAoUFNBX0FMR19JU19SQU5ET01JWkVEX0VDRFNBKGNvcmVfYWxnKSkgeworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAiUFNBX0FMR19FQ0RTQSgiLCAxMyArIDEpOworICAgICAgICAgICAgYXBwZW5kX3dpdGhfYWxnKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfaGFzaF9hbGdvcml0aG1fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQUxHX0dFVF9IQVNIKGNvcmVfYWxnKSk7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiKSIsIDEpOworICAgICAgICB9IGVsc2UgaWYgKFBTQV9BTEdfSVNfSEtERihjb3JlX2FsZykpIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgIlBTQV9BTEdfSEtERigiLCAxMiArIDEpOworICAgICAgICAgICAgYXBwZW5kX3dpdGhfYWxnKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfaGFzaF9hbGdvcml0aG1fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQUxHX0dFVF9IQVNIKGNvcmVfYWxnKSk7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiKSIsIDEpOworICAgICAgICB9IGVsc2UgaWYgKFBTQV9BTEdfSVNfSE1BQyhjb3JlX2FsZykpIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgIlBTQV9BTEdfSE1BQygiLCAxMiArIDEpOworICAgICAgICAgICAgYXBwZW5kX3dpdGhfYWxnKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfaGFzaF9hbGdvcml0aG1fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQUxHX0dFVF9IQVNIKGNvcmVfYWxnKSk7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiKSIsIDEpOworICAgICAgICB9IGVsc2UgaWYgKFBTQV9BTEdfSVNfUlNBX09BRVAoY29yZV9hbGcpKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICJQU0FfQUxHX1JTQV9PQUVQKCIsIDE2ICsgMSk7CisgICAgICAgICAgICBhcHBlbmRfd2l0aF9hbGcoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9oYXNoX2FsZ29yaXRobV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9BTEdfR0VUX0hBU0goY29yZV9hbGcpKTsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIpIiwgMSk7CisgICAgICAgIH0gZWxzZSBpZiAoUFNBX0FMR19JU19SU0FfUEtDUzFWMTVfU0lHTihjb3JlX2FsZykpIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgIlBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR04oIiwgMjUgKyAxKTsKKyAgICAgICAgICAgIGFwcGVuZF93aXRoX2FsZygmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2hhc2hfYWxnb3JpdGhtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0FMR19HRVRfSEFTSChjb3JlX2FsZykpOworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIikiLCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChQU0FfQUxHX0lTX1JTQV9QU1MoY29yZV9hbGcpKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICJQU0FfQUxHX1JTQV9QU1MoIiwgMTUgKyAxKTsKKyAgICAgICAgICAgIGFwcGVuZF93aXRoX2FsZygmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2hhc2hfYWxnb3JpdGhtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0FMR19HRVRfSEFTSChjb3JlX2FsZykpOworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIikiLCAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChQU0FfQUxHX0lTX1RMUzEyX1BSRihjb3JlX2FsZykpIHsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsCisgICAgICAgICAgICAgICAgICAgIlBTQV9BTEdfVExTMTJfUFJGKCIsIDE3ICsgMSk7CisgICAgICAgICAgICBhcHBlbmRfd2l0aF9hbGcoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9oYXNoX2FsZ29yaXRobV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9BTEdfR0VUX0hBU0goY29yZV9hbGcpKTsKKyAgICAgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIpIiwgMSk7CisgICAgICAgIH0gZWxzZSBpZiAoUFNBX0FMR19JU19UTFMxMl9QU0tfVE9fTVMoY29yZV9hbGcpKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICJQU0FfQUxHX1RMUzEyX1BTS19UT19NUygiLCAyMyArIDEpOworICAgICAgICAgICAgYXBwZW5kX3dpdGhfYWxnKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfaGFzaF9hbGdvcml0aG1fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQUxHX0dFVF9IQVNIKGNvcmVfYWxnKSk7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiKSIsIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXBwZW5kX2ludGVnZXIoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjB4JTA4bHgiLCAodW5zaWduZWQgbG9uZykgY29yZV9hbGcpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoY29yZV9hbGcgIT0gYWxnKSB7CisgICAgICAgIGlmIChsZW5ndGhfbW9kaWZpZXIgIT0gTk9fTEVOR1RIX01PRElGSUVSKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiLCAiLCAyKTsKKyAgICAgICAgICAgIGFwcGVuZF9pbnRlZ2VyKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIlbHUiLCBsZW5ndGhfbW9kaWZpZXIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICIpIiwgMSk7CisgICAgfQorICAgIGJ1ZmZlclswXSA9IDA7CisgICAgcmV0dXJuIChpbnQpIHJlcXVpcmVkX3NpemU7Cit9CisKK3N0YXRpYyBpbnQgcHNhX3NucHJpbnRfa2V5X3VzYWdlKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2tleV91c2FnZV90IHVzYWdlKQoreworICAgIHNpemVfdCByZXF1aXJlZF9zaXplID0gMDsKKyAgICBpZiAodXNhZ2UgPT0gMCkgeworICAgICAgICBpZiAoYnVmZmVyX3NpemUgPiAxKSB7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnMCc7CisgICAgICAgICAgICBidWZmZXJbMV0gPSAwOworICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlcl9zaXplID09IDEpIHsKKyAgICAgICAgICAgIGJ1ZmZlclswXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmICh1c2FnZSAmIFBTQV9LRVlfVVNBR0VfQ09QWSkgeworICAgICAgICBpZiAocmVxdWlyZWRfc2l6ZSAhPSAwKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiIHwgIiwgMyk7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVVNBR0VfQ09QWSIsIDE4KTsKKyAgICAgICAgdXNhZ2UgXj0gUFNBX0tFWV9VU0FHRV9DT1BZOworICAgIH0KKyAgICBpZiAodXNhZ2UgJiBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQpIHsKKyAgICAgICAgaWYgKHJlcXVpcmVkX3NpemUgIT0gMCkgeworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIiB8ICIsIDMpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1VTQUdFX0RFQ1JZUFQiLCAyMSk7CisgICAgICAgIHVzYWdlIF49IFBTQV9LRVlfVVNBR0VfREVDUllQVDsKKyAgICB9CisgICAgaWYgKHVzYWdlICYgUFNBX0tFWV9VU0FHRV9ERVJJVkUpIHsKKyAgICAgICAgaWYgKHJlcXVpcmVkX3NpemUgIT0gMCkgeworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIiB8ICIsIDMpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1VTQUdFX0RFUklWRSIsIDIwKTsKKyAgICAgICAgdXNhZ2UgXj0gUFNBX0tFWV9VU0FHRV9ERVJJVkU7CisgICAgfQorICAgIGlmICh1c2FnZSAmIFBTQV9LRVlfVVNBR0VfRU5DUllQVCkgeworICAgICAgICBpZiAocmVxdWlyZWRfc2l6ZSAhPSAwKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiIHwgIiwgMyk7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVVNBR0VfRU5DUllQVCIsIDIxKTsKKyAgICAgICAgdXNhZ2UgXj0gUFNBX0tFWV9VU0FHRV9FTkNSWVBUOworICAgIH0KKyAgICBpZiAodXNhZ2UgJiBQU0FfS0VZX1VTQUdFX0VYUE9SVCkgeworICAgICAgICBpZiAocmVxdWlyZWRfc2l6ZSAhPSAwKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiIHwgIiwgMyk7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIlBTQV9LRVlfVVNBR0VfRVhQT1JUIiwgMjApOworICAgICAgICB1c2FnZSBePSBQU0FfS0VZX1VTQUdFX0VYUE9SVDsKKyAgICB9CisgICAgaWYgKHVzYWdlICYgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0gpIHsKKyAgICAgICAgaWYgKHJlcXVpcmVkX3NpemUgIT0gMCkgeworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIiB8ICIsIDMpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1VTQUdFX1NJR05fSEFTSCIsIDIzKTsKKyAgICAgICAgdXNhZ2UgXj0gUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0g7CisgICAgfQorICAgIGlmICh1c2FnZSAmIFBTQV9LRVlfVVNBR0VfVkVSSUZZX0hBU0gpIHsKKyAgICAgICAgaWYgKHJlcXVpcmVkX3NpemUgIT0gMCkgeworICAgICAgICAgICAgYXBwZW5kKCZidWZmZXIsIGJ1ZmZlcl9zaXplLCAmcmVxdWlyZWRfc2l6ZSwgIiB8ICIsIDMpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgmYnVmZmVyLCBidWZmZXJfc2l6ZSwgJnJlcXVpcmVkX3NpemUsICJQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIIiwgMjUpOworICAgICAgICB1c2FnZSBePSBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOworICAgIH0KKyAgICBpZiAodXNhZ2UgIT0gMCkgeworICAgICAgICBpZiAocmVxdWlyZWRfc2l6ZSAhPSAwKSB7CisgICAgICAgICAgICBhcHBlbmQoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLCAiIHwgIiwgMyk7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5kX2ludGVnZXIoJmJ1ZmZlciwgYnVmZmVyX3NpemUsICZyZXF1aXJlZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAiMHglMDhseCIsICh1bnNpZ25lZCBsb25nKSB1c2FnZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyWzBdID0gMDsKKyAgICB9CisgICAgcmV0dXJuIChpbnQpIHJlcXVpcmVkX3NpemU7Cit9CisKKy8qIEVuZCBvZiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmaWxlLiAqLwpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvcmFuZG9tL0NNYWtlTGlzdHMudHh0IGIvcHJvZ3JhbXMvcmFuZG9tL0NNYWtlTGlzdHMudHh0CmluZGV4IDk1YWNiN2UuLjhkZjgzNjUgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3JhbmRvbS9DTWFrZUxpc3RzLnR4dAorKysgYi9wcm9ncmFtcy9yYW5kb20vQ01ha2VMaXN0cy50eHQKQEAgLTYsNyArNiw3IEBACiAKIGZvcmVhY2goZXhlIElOIExJU1RTIGV4ZWN1dGFibGVzKQogICAgIGFkZF9leGVjdXRhYmxlKCR7ZXhlfSAke2V4ZX0uYyAkPFRBUkdFVF9PQkpFQ1RTOm1iZWR0bHNfdGVzdD4pCi0gICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZXhlfSBtYmVkY3J5cHRvKQorICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke2V4ZX0gJHttYmVkY3J5cHRvX3RhcmdldH0pCiBlbmRmb3JlYWNoKCkKIAogaW5zdGFsbChUQVJHRVRTICR7ZXhlY3V0YWJsZXN9CmRpZmYgLS1naXQgYS9wcm9ncmFtcy9zc2wvQ01ha2VMaXN0cy50eHQgYi9wcm9ncmFtcy9zc2wvQ01ha2VMaXN0cy50eHQKaW5kZXggMjhmYmZjNS4uY2EwYTZhNCAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvc3NsL0NNYWtlTGlzdHMudHh0CisrKyBiL3Byb2dyYW1zL3NzbC9DTWFrZUxpc3RzLnR4dApAQCAtMiw3ICsyLDcgQEAKIGZpbmRfcGFja2FnZShUaHJlYWRzKQogCiBzZXQobGlicwotICAgIG1iZWR0bHMKKyAgICAke21iZWR0bHNfdGFyZ2V0fQogKQogCiBpZihVU0VfUEtDUzExX0hFTFBFUl9MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvc3NsL3NzbF9jbGllbnQyLmMgYi9wcm9ncmFtcy9zc2wvc3NsX2NsaWVudDIuYwppbmRleCBhMjZkZDUxLi41NGNkZDdkIDEwMDY0NAotLS0gYS9wcm9ncmFtcy9zc2wvc3NsX2NsaWVudDIuYworKysgYi9wcm9ncmFtcy9zc2wvc3NsX2NsaWVudDIuYwpAQCAtMTQ5LDYgKzE0OSwxMCBAQAogI2RlZmluZSBERkxfTlNTX0tFWUxPRyAgICAgICAgICAwCiAjZGVmaW5lIERGTF9OU1NfS0VZTE9HX0ZJTEUgICAgIE5VTEwKICNkZWZpbmUgREZMX1NLSVBfQ0xPU0VfTk9USUZZICAgMAorI2RlZmluZSBERkxfUVVFUllfQ09ORklHX01PREUgICAwCisjZGVmaW5lIERGTF9VU0VfU1JUUCAgICAgICAgICAgIDAKKyNkZWZpbmUgREZMX1NSVFBfRk9SQ0VfUFJPRklMRSAgMAorI2RlZmluZSBERkxfU1JUUF9NS0kgICAgICAgICAgICAiIgogCiAjZGVmaW5lIEdFVF9SRVFVRVNUICJHRVQgJXMgSFRUUC8xLjBcclxuRXh0cmEtaGVhZGVyOiAiCiAjZGVmaW5lIEdFVF9SRVFVRVNUX0VORCAiXHJcblxyXG4iCkBAIC0yNTMsMTAgKzI1NywyNiBAQAogICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY2Fubm90IGJlIHVzZWQgd2l0aCBlYXBfdGxzPTFcbiIKICNkZWZpbmUgVVNBR0VfTlNTX0tFWUxPR19GSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAiICAgIG5zc19rZXlsb2dfZmlsZT0lJXNcbiIKLSNlbHNlCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCisjZGVmaW5lIFVTQUdFX1NSVFAgXAorICAgICIgICAgdXNlX3NydHA9JSVkICAgICAgICAgZGVmYXVsdDogMCAoZGlzYWJsZWQpXG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNhbm5vdCBiZSB1c2VkIHdpdGggZWFwX3Rscz0xIG9yICJcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNzX2tleWxvZz0xXG4iICAgICAgICAgICAgIFwKKyAgICAiICAgIHNydHBfZm9yY2VfcHJvZmlsZT0lJWQgIGRlZmF1bHQ6IDAgKGFsbCBlbmFibGVkKVxuIiAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIHByb2ZpbGVzOlxuIiAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBTUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODBcbiIgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgMiAtIFNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMlxuIiAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAzIC0gU1JUUF9OVUxMX0hNQUNfU0hBMV84MFxuIiAgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIDQgLSBTUlRQX05VTExfSE1BQ19TSEExXzMyXG4iICAgICAgIFwKKyAgICAiICAgIG1raT0lJXMgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiXCIgKGluIGhleCwgd2l0aG91dCAweClcbiIKKyNlbHNlIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLworI2RlZmluZSBVU0FHRV9TUlRQICIiCisjZW5kaWYKKyNlbHNlIC8qIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTICovCiAjZGVmaW5lIFVTQUdFX0VBUF9UTFMgIiIKICNkZWZpbmUgVVNBR0VfTlNTX0tFWUxPRyAiIgogI2RlZmluZSBVU0FHRV9OU1NfS0VZTE9HX0ZJTEUgIiIKKyNkZWZpbmUgVVNBR0VfU1JUUCAiIgogI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTICovCiAKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQpAQCAtNDA2LDYgKzQyNiw3IEBACiAgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVVNBR0VfRFRMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVVNBR0VfQ0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVVNBR0VfU1JUUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIlxuIgogI2RlZmluZSBVU0FHRTIgXAogICAgICIgICAgYXV0aF9tb2RlPSUlcyAgICAgICAgZGVmYXVsdDogKGxpYnJhcnkgZGVmYXVsdDogbm9uZSlcbiIgXApAQCAtNTM5LDYgKzU2MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhZnRlciByZW5lZ290aWF0aW9uICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgaW50IHJlcHJvZHVjaWJsZTsgICAgICAgICAgIC8qIG1ha2UgY29tbXVuaWNhdGlvbiByZXByb2R1Y2libGUgICAgICAgICAgKi8KICAgICBpbnQgc2tpcF9jbG9zZV9ub3RpZnk7ICAgICAgLyogc2tpcCBzZW5kaW5nIHRoZSBjbG9zZV9ub3RpZnkgYWxlcnQgICAgICAqLworICAgIGludCBxdWVyeV9jb25maWdfbW9kZTsgICAgICAvKiB3aGV0aGVyIHRvIHJlYWQgY29uZmlnICAgICAgICAgICAgICAgICAgICovCisgICAgaW50IHVzZV9zcnRwOyAgICAgICAgICAgICAgIC8qIFN1cHBvcnQgU1JUUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgZm9yY2Vfc3J0cF9wcm9maWxlOyAgICAgLyogU1JUUCBwcm90ZWN0aW9uIHByb2ZpbGUgdG8gdXNlIG9yIGFsbCAgICAqLworICAgIGNvbnN0IGNoYXIgKm1raTsgICAgICAgICAgICAvKiBUaGUgZHRscyBta2kgdmFsdWUgdG8gdXNlICAgICAgICAgICAgICAgICovCiB9IG9wdDsKIAogaW50IHF1ZXJ5X2NvbmZpZyggY29uc3QgY2hhciAqY29uZmlnICk7CkBAIC02NTMsNyArNjc4LDQ5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIG5zc19rZXlsb2dfbGluZSApICk7CiAgICAgcmV0dXJuKCByZXQgKTsKIH0KLSNlbmRpZgorCisjaWYgZGVmaW5lZCggTUJFRFRMU19TU0xfRFRMU19TUlRQICkKKy8qIFN1cHBvcnRlZCBTUlRQIG1vZGUgbmVlZHMgYSBtYXhpbXVtIG9mIDoKKyAqIC0gMTYgYnl0ZXMgZm9yIGtleSAoQUVTLTEyOCkKKyAqIC0gMTQgYnl0ZXMgU0FMVAorICogT25lIGZvciBzZW5kZXIsIG9uZSBmb3IgcmVjZWl2ZXIgY29udGV4dAorICovCisjZGVmaW5lIE1CRURUTFNfVExTX1NSVFBfTUFYX0tFWV9NQVRFUklBTF9MRU5HVEggICAgNjAKK3R5cGVkZWYgc3RydWN0IGR0bHNfc3J0cF9rZXlzCit7CisgICAgdW5zaWduZWQgY2hhciBtYXN0ZXJfc2VjcmV0WzQ4XTsKKyAgICB1bnNpZ25lZCBjaGFyIHJhbmRieXRlc1s2NF07CisgICAgbWJlZHRsc190bHNfcHJmX3R5cGVzIHRsc19wcmZfdHlwZTsKK30gZHRsc19zcnRwX2tleXM7CisKK3N0YXRpYyBpbnQgZHRsc19zcnRwX2tleV9kZXJpdmF0aW9uKCB2b2lkICpwX2V4cGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWFjbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGl2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2xpZW50X3JhbmRvbVszMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzZXJ2ZXJfcmFuZG9tWzMyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3Rsc19wcmZfdHlwZXMgdGxzX3ByZl90eXBlICkKK3sKKyAgICBkdGxzX3NydHBfa2V5cyAqa2V5cyA9IChkdGxzX3NydHBfa2V5cyAqKXBfZXhwa2V5OworCisgICAgKCAoIHZvaWQgKSBrYiApOworICAgIG1lbWNweSgga2V5cy0+bWFzdGVyX3NlY3JldCwgbXMsIHNpemVvZigga2V5cy0+bWFzdGVyX3NlY3JldCApICk7CisgICAgbWVtY3B5KCBrZXlzLT5yYW5kYnl0ZXMsIGNsaWVudF9yYW5kb20sIDMyICk7CisgICAgbWVtY3B5KCBrZXlzLT5yYW5kYnl0ZXMgKyAzMiwgc2VydmVyX3JhbmRvbSwgMzIgKTsKKyAgICBrZXlzLT50bHNfcHJmX3R5cGUgPSB0bHNfcHJmX3R5cGU7CisKKyAgICBpZiggb3B0LmRlYnVnX2xldmVsID4gMiApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggImV4cG9ydGVkIG1hY2xlbiBpcyAldVxuIiwgKHVuc2lnbmVkKSBtYWNsZW4gKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJleHBvcnRlZCBrZXlsZW4gaXMgJXVcbiIsICh1bnNpZ25lZCkga2V5bGVuICk7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZXhwb3J0ZWQgaXZsZW4gaXMgJXVcbiIsICh1bnNpZ25lZCkgaXZsZW4gKTsKKyAgICB9CisgICAgcmV0dXJuKCAwICk7Cit9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMgKi8KIAogc3RhdGljIHZvaWQgbXlfZGVidWcoIHZvaWQgKmN0eCwgaW50IGxldmVsLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLApAQCAtMTEwMiw2ICsxMTY5LDcgQEAKIGludCBtYWluKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKIHsKICAgICBpbnQgcmV0ID0gMCwgbGVuLCB0YWlsX2xlbiwgaSwgd3JpdHRlbiwgZnJhZ3MsIHJldHJ5X2xlZnQ7CisgICAgaW50IHF1ZXJ5X2NvbmZpZ19yZXQgPSAwOwogICAgIG1iZWR0bHNfbmV0X2NvbnRleHQgc2VydmVyX2ZkOwogICAgIGlvX2N0eF90IGlvX2N0eDsKIApAQCAtMTEzMSw2ICsxMTk5LDEwIEBACiAgICAgbWJlZHRsc19lY3BfZ3JvdXBfaWQgY3VydmVfbGlzdFtDVVJWRV9MSVNUX1NJWkVdOwogICAgIGNvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKmN1cnZlX2N1cjsKICNlbmRpZgorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorICAgIHVuc2lnbmVkIGNoYXIgbWtpW01CRURUTFNfVExTX1NSVFBfTUFYX01LSV9MRU5HVEhdOworICAgIHNpemVfdCBta2lfbGVuPTA7CisjZW5kaWYKIAogICAgIGNvbnN0IGNoYXIgKnBlcnMgPSAic3NsX2NsaWVudDIiOwogCkBAIC0xMTc0LDcgKzEyNDYsMjAgQEAKICAgICB1bnNpZ25lZCBjaGFyIGVhcF90bHNfaXZbOF07CiAgICAgY29uc3QgY2hhciogZWFwX3Rsc19sYWJlbCA9ICJjbGllbnQgRUFQIGVuY3J5cHRpb24iOwogICAgIGVhcF90bHNfa2V5cyBlYXBfdGxzX2tleWluZzsKLSNlbmRpZgorI2lmIGRlZmluZWQoIE1CRURUTFNfU1NMX0RUTFNfU1JUUCApCisgICAgLyohIG1hc3RlciBrZXlzIGFuZCBtYXN0ZXIgc2FsdCBmb3IgU1JUUCBnZW5lcmF0ZWQgZHVyaW5nIGhhbmRzaGFrZSAqLworICAgIHVuc2lnbmVkIGNoYXIgZHRsc19zcnRwX2tleV9tYXRlcmlhbFtNQkVEVExTX1RMU19TUlRQX01BWF9LRVlfTUFURVJJQUxfTEVOR1RIXTsKKyAgICBjb25zdCBjaGFyKiBkdGxzX3NydHBfbGFiZWwgPSAiRVhUUkFDVE9SLWR0bHNfc3J0cCI7CisgICAgZHRsc19zcnRwX2tleXMgZHRsc19zcnRwX2tleWluZzsKKyAgICBjb25zdCBtYmVkdGxzX3NzbF9zcnRwX3Byb2ZpbGUgZGVmYXVsdF9wcm9maWxlc1tdID0geworICAgICAgICBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODAsCisgICAgICAgIE1CRURUTFNfVExTX1NSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiwKKyAgICAgICAgTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV84MCwKKyAgICAgICAgTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV8zMiwKKyAgICAgICAgTUJFRFRMU19UTFNfU1JUUF9VTlNFVAorICAgIH07CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMgKi8KIAogI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCiAgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2luaXQoIGFsbG9jX2J1Ziwgc2l6ZW9mKGFsbG9jX2J1ZikgKTsKQEAgLTEzMDAsNiArMTM4NSwxMCBAQAogICAgIG9wdC5uc3Nfa2V5bG9nICAgICAgICAgID0gREZMX05TU19LRVlMT0c7CiAgICAgb3B0Lm5zc19rZXlsb2dfZmlsZSAgICAgPSBERkxfTlNTX0tFWUxPR19GSUxFOwogICAgIG9wdC5za2lwX2Nsb3NlX25vdGlmeSAgID0gREZMX1NLSVBfQ0xPU0VfTk9USUZZOworICAgIG9wdC5xdWVyeV9jb25maWdfbW9kZSAgID0gREZMX1FVRVJZX0NPTkZJR19NT0RFOworICAgIG9wdC51c2Vfc3J0cCAgICAgICAgICAgID0gREZMX1VTRV9TUlRQOworICAgIG9wdC5mb3JjZV9zcnRwX3Byb2ZpbGUgID0gREZMX1NSVFBfRk9SQ0VfUFJPRklMRTsKKyAgICBvcHQubWtpICAgICAgICAgICAgICAgICA9IERGTF9TUlRQX01LSTsKIAogICAgIGZvciggaSA9IDE7IGkgPCBhcmdjOyBpKysgKQogICAgIHsKQEAgLTE2ODYsNyArMTc3NSw5IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAicXVlcnlfY29uZmlnIiApID09IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgICBtYmVkdGxzX2V4aXQoIHF1ZXJ5X2NvbmZpZyggcSApICk7CisgICAgICAgICAgICBvcHQucXVlcnlfY29uZmlnX21vZGUgPSAxOworICAgICAgICAgICAgcXVlcnlfY29uZmlnX3JldCA9IHF1ZXJ5X2NvbmZpZyggcSApOworICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgInNlcmlhbGl6ZSIpID09IDAgKQogICAgICAgICB7CkBAIC0xNzI0LDYgKzE4MTUsMTggQEAKICAgICAgICAgICAgIGlmKCBvcHQuc2tpcF9jbG9zZV9ub3RpZnkgPCAwIHx8IG9wdC5za2lwX2Nsb3NlX25vdGlmeSA+IDEgKQogICAgICAgICAgICAgICAgIGdvdG8gdXNhZ2U7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAidXNlX3NydHAiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC51c2Vfc3J0cCA9IGF0b2kgKCBxICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic3J0cF9mb3JjZV9wcm9maWxlIiApID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBvcHQuZm9yY2Vfc3J0cF9wcm9maWxlID0gYXRvaSggcSApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcCwgIm1raSIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0Lm1raSA9IHE7CisgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ290byB1c2FnZTsKICAgICB9CkBAIC0xODMxLDcgKzE5MzQsNiBAQAogICAgICAgICAgICAgb3B0LmFyYzQgPSBNQkVEVExTX1NTTF9BUkM0X0VOQUJMRUQ7CiAgICAgICAgIH0KIAotCiAjaWYgZGVmaW5lZChNQkVEVExTX1VTRV9QU0FfQ1JZUFRPKQogICAgICAgICBpZiggb3B0LnBza19vcGFxdWUgIT0gMCApCiAgICAgICAgIHsKQEAgLTIyMzQsNiArMjMzNiwzNiBAQAogICAgIH0KICNlbmRpZgogCisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX1NSVFApCisgICAgaWYoIG9wdC51c2Vfc3J0cCA9PSAxICkKKyAgICB7CisgICAgICAgIGlmKCBvcHQuZm9yY2Vfc3J0cF9wcm9maWxlICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBtYmVkdGxzX3NzbF9zcnRwX3Byb2ZpbGUgZm9yY2VkX3Byb2ZpbGVbXSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBvcHQuZm9yY2Vfc3J0cF9wcm9maWxlLCBNQkVEVExTX1RMU19TUlRQX1VOU0VUIH07CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9jb25mX2R0bHNfc3J0cF9wcm90ZWN0aW9uX3Byb2ZpbGVzICggJmNvbmYsIGZvcmNlZF9wcm9maWxlICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBtYmVkdGxzX3NzbF9jb25mX2R0bHNfc3J0cF9wcm90ZWN0aW9uX3Byb2ZpbGVzICggJmNvbmYsIGRlZmF1bHRfcHJvZmlsZXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWJlZHRsc19zc2xfY29uZl9kdGxzX3NydHBfcHJvdGVjdGlvbl9wcm9maWxlcyByZXR1cm5lZCAlZFxuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICB9CisgICAgZWxzZSBpZiggb3B0LmZvcmNlX3NydHBfcHJvZmlsZSAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG11c3QgZW5hYmxlIHVzZV9zcnRwIHRvIGZvcmNlIHNydHAgcHJvZmlsZVxuXG4iICk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX1RSVU5DQVRFRF9ITUFDKQogICAgIGlmKCBvcHQudHJ1bmNfaG1hYyAhPSBERkxfVFJVTkNfSE1BQyApCiAgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfdHJ1bmNhdGVkX2htYWMoICZjb25mLCBvcHQudHJ1bmNfaG1hYyApOwpAQCAtMjI2MSw3ICsyMzkzLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3Nfa2V5bG9nX2V4cG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgKTsKICAgICB9Ci0jZW5kaWYKKyNpZiBkZWZpbmVkKCBNQkVEVExTX1NTTF9EVExTX1NSVFAgKQorICAgIGVsc2UgaWYoIG9wdC51c2Vfc3J0cCAhPSAwICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfc3NsX2NvbmZfZXhwb3J0X2tleXNfZXh0X2NiKCAmY29uZiwgZHRsc19zcnRwX2tleV9kZXJpdmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR0bHNfc3J0cF9rZXlpbmcgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisjZW5kaWYgLyogTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMgKi8KIAogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0JDX1JFQ09SRF9TUExJVFRJTkcpCiAgICAgaWYoIG9wdC5yZWNzcGxpdCAhPSBERkxfUkVDU1BMSVQgKQpAQCAtMjQ3MCw2ICsyNjA5LDI2IEBACiAgICAgICAgIG1iZWR0bHNfZWNwX3NldF9tYXhfb3BzKCBvcHQuZWNfbWF4X29wcyApOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKKyAgICBpZiggb3B0LnVzZV9zcnRwICE9IDAgJiYgc3RybGVuKCBvcHQubWtpICkgIT0gMCApCisgICAgeworICAgICAgICBpZiggbWJlZHRsc190ZXN0X3VuaGV4aWZ5KCBta2ksIHNpemVvZiggbWtpICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5ta2ksJm1raV9sZW4gKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJta2kgdmFsdWUgbm90IHZhbGlkIGhleFxuIiApOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19zc2xfY29uZl9zcnRwX21raV92YWx1ZV9zdXBwb3J0ZWQoICZjb25mLCBNQkVEVExTX1NTTF9EVExTX1NSVFBfTUtJX1NVUFBPUlRFRCApOworICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF9kdGxzX3NydHBfc2V0X21raV92YWx1ZSggJnNzbCwgbWtpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KSBzdHJsZW4oIG9wdC5ta2kgKSAvIDIgKSApICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9kdGxzX3NydHBfc2V0X21raV92YWx1ZSByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgbWJlZHRsc19wcmludGYoICIgb2tcbiIgKTsKIAogICAgIC8qCkBAIC0yNTkxLDcgKzI3NTAsNzQgQEAKICAgICAgICAgfQogICAgICAgICBtYmVkdGxzX3ByaW50ZigiXG4iKTsKICAgICB9Ci0jZW5kaWYKKworI2lmIGRlZmluZWQoIE1CRURUTFNfU1NMX0RUTFNfU1JUUCApCisgICAgZWxzZSBpZiggb3B0LnVzZV9zcnRwICE9IDAgICkKKyAgICB7CisgICAgICAgIHNpemVfdCBqID0gMDsKKyAgICAgICAgbWJlZHRsc19kdGxzX3NydHBfaW5mbyBkdGxzX3NydHBfbmVnb3RpYXRpb25fcmVzdWx0OworICAgICAgICBtYmVkdGxzX3NzbF9nZXRfZHRsc19zcnRwX25lZ290aWF0aW9uX3Jlc3VsdCggJnNzbCwgJmR0bHNfc3J0cF9uZWdvdGlhdGlvbl9yZXN1bHQgKTsKKworICAgICAgICBpZiggZHRsc19zcnRwX25lZ290aWF0aW9uX3Jlc3VsdC5jaG9zZW5fZHRsc19zcnRwX3Byb2ZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gTUJFRFRMU19UTFNfU1JUUF9VTlNFVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAgIFVuYWJsZSB0byBuZWdvdGlhdGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgdXNlIG9mIERUTFMtU1JUUFxuIiApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICggcmV0ID0gbWJlZHRsc19zc2xfdGxzX3ByZiggZHRsc19zcnRwX2tleWluZy50bHNfcHJmX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdGxzX3NydHBfa2V5aW5nLm1hc3Rlcl9zZWNyZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGR0bHNfc3J0cF9rZXlpbmcubWFzdGVyX3NlY3JldCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHRsc19zcnRwX2xhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHRsc19zcnRwX2tleWluZy5yYW5kYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGR0bHNfc3J0cF9rZXlpbmcucmFuZGJ5dGVzICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdGxzX3NydHBfa2V5X21hdGVyaWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCBkdGxzX3NydHBfa2V5X21hdGVyaWFsICkgKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF90bHNfcHJmIHJldHVybmVkIC0weCV4XG5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpIC1yZXQgKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAgIERUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXM6IiApOworICAgICAgICAgICAgZm9yKCBqID0gMDsgaiA8IHNpemVvZiggZHRsc19zcnRwX2tleV9tYXRlcmlhbCApOyBqKysgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCBqICUgOCA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiAgICAiICk7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIlMDJ4ICIsIGR0bHNfc3J0cF9rZXlfbWF0ZXJpYWxbal0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyAgICAgICAgICAgIC8qIHByb2R1Y2UgYSBsZXNzIHJlYWRhYmxlIG91dHB1dCB1c2VkIHRvIHBlcmZvcm0gYXV0b21hdGljIGNoZWNrcworICAgICAgICAgICAgICogLSBjb21wYXJlIGNsaWVudCBhbmQgc2VydmVyIG91dHB1dAorICAgICAgICAgICAgICogLSBpbnRlcm9wIHRlc3Qgd2l0aCBvcGVuc3NsIHdoaWNoIGNsaWVudCBwcm9kdWNlcyB0aGlzIGtpbmQgb2Ygb3V0cHV0CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAgIEtleWluZyBtYXRlcmlhbDogIiApOworICAgICAgICAgICAgZm9yKCBqID0gMDsgaiA8IHNpemVvZiggZHRsc19zcnRwX2tleV9tYXRlcmlhbCApOyBqKysgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJTAyWCIsIGR0bHNfc3J0cF9rZXlfbWF0ZXJpYWxbal0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyAgICAgICAgICAgIGlmICggZHRsc19zcnRwX25lZ290aWF0aW9uX3Jlc3VsdC5ta2lfbGVuID4gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgRFRMUy1TUlRQIG1raSB2YWx1ZTogIiApOworICAgICAgICAgICAgICAgIGZvciggaiA9IDA7IGogPCBkdGxzX3NydHBfbmVnb3RpYXRpb25fcmVzdWx0Lm1raV9sZW47IGorKyApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiUwMlgiLCBkdGxzX3NydHBfbmVnb3RpYXRpb25fcmVzdWx0Lm1raV92YWx1ZVtqXSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgICBEVExTLVNSVFAgbm8gbWtpIHZhbHVlIG5lZ290aWF0ZWQiICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuIiApOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTICovCiAgICAgaWYoIG9wdC5yZWNvbm5lY3QgIT0gMCApCiAgICAgewogICAgICAgICBtYmVkdGxzX3ByaW50ZigiICAuIFNhdmluZyBzZXNzaW9uIGZvciByZXVzZS4uLiIgKTsKQEAgLTI2ODUsNyArMjkxMSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3NldF9jaWQgcmV0dXJuZWQgJWRcblxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgKTsKLSAgICAgICAgICAgIHJldHVybiggcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19DT05ORUNUSU9OX0lEICovCkBAIC0zMzQ4LDcgKzM1NzQsOCBAQAogICAgICAgICAgKiBpbW1lZGlhdGVseSBiZWNhdXNlIG9mIGJhZCBjbWQgbGluZSBwYXJhbXMsCiAgICAgICAgICAqIGZvciBleGFtcGxlKS4gKi8KICAgICAgICAgc3RhdHVzID0gcHNhX2Rlc3Ryb3lfa2V5KCBzbG90ICk7Ci0gICAgICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICBpZiggKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKSAmJgorICAgICAgICAgICAgKCBvcHQucXVlcnlfY29uZmlnX21vZGUgPT0gREZMX1FVRVJZX0NPTkZJR19NT0RFICkgKQogICAgICAgICB7CiAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIkZhaWxlZCB0byBkZXN0cm95IGtleSBzbG90ICV1IC0gZXJyb3Igd2FzICVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQpIHNsb3QsIChpbnQpIHN0YXR1cyApOwpAQCAtMzM2NywxNSArMzU5NCwyMSBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9XSU4zMikKLSAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKLSAgICBmZmx1c2goIHN0ZG91dCApOyBnZXRjaGFyKCk7CisgICAgaWYoIG9wdC5xdWVyeV9jb25maWdfbW9kZSA9PSBERkxfUVVFUllfQ09ORklHX01PREUgKQorICAgIHsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7CisgICAgICAgIGZmbHVzaCggc3Rkb3V0ICk7IGdldGNoYXIoKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIC8vIFNoZWxsIGNhbiBub3QgaGFuZGxlIGxhcmdlIGV4aXQgbnVtYmVycyAtPiAxIGZvciBlcnJvcnMKICAgICBpZiggcmV0IDwgMCApCiAgICAgICAgIHJldCA9IDE7CiAKLSAgICBtYmVkdGxzX2V4aXQoIHJldCApOworICAgIGlmKCBvcHQucXVlcnlfY29uZmlnX21vZGUgPT0gREZMX1FVRVJZX0NPTkZJR19NT0RFICkKKyAgICAgICAgbWJlZHRsc19leGl0KCByZXQgKTsKKyAgICBlbHNlCisgICAgICAgIG1iZWR0bHNfZXhpdCggcXVlcnlfY29uZmlnX3JldCApOwogfQogI2VuZGlmIC8qIE1CRURUTFNfQklHTlVNX0MgJiYgTUJFRFRMU19FTlRST1BZX0MgJiYgTUJFRFRMU19TU0xfVExTX0MgJiYKICAgICAgICAgICBNQkVEVExTX1NTTF9DTElfQyAmJiBNQkVEVExTX05FVF9DICYmIE1CRURUTFNfUlNBX0MgJiYKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3NzbC9zc2xfY29udGV4dF9pbmZvLmMgYi9wcm9ncmFtcy9zc2wvc3NsX2NvbnRleHRfaW5mby5jCmluZGV4IGRmODgxOWEuLmQxMDljMWUgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3NzbC9zc2xfY29udGV4dF9pbmZvLmMKKysrIGIvcHJvZ3JhbXMvc3NsL3NzbF9jb250ZXh0X2luZm8uYwpAQCAtMzc3LDEzICszNzcsMTMgQEAKICAgICBpbnQgdmFsaWRfYmFsYW5jZSA9IDA7ICAvKiBiYWxhbmNlIGJldHdlZW4gdmFsaWQgYW5kIGludmFsaWQgY2hhcmFjdGVycyAqLwogICAgIHNpemVfdCBsZW4gPSAwOwogICAgIGNoYXIgcGFkID0gMDsKLSAgICBjaGFyIGMgPSAwOworICAgIGludCBjID0gMDsKIAogICAgIHdoaWxlKCBFT0YgIT0gYyApCiAgICAgewogICAgICAgICBjaGFyIGNfdmFsaWQgPSAwOwogCi0gICAgICAgIGMgPSAoY2hhcikgZmdldGMoIGI2NF9maWxlICk7CisgICAgICAgIGMgPSBmZ2V0YyggYjY0X2ZpbGUgKTsKIAogICAgICAgICBpZiggcGFkID4gMCApCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3NzbC9zc2xfc2VydmVyMi5jIGIvcHJvZ3JhbXMvc3NsL3NzbF9zZXJ2ZXIyLmMKaW5kZXggYzQ0NWRkYi4uZWMzZDZhZCAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvc3NsL3NzbF9zZXJ2ZXIyLmMKKysrIGIvcHJvZ3JhbXMvc3NsL3NzbF9zZXJ2ZXIyLmMKQEAgLTE4Miw2ICsxODIsMTAgQEAKICNkZWZpbmUgREZMX1JFUFJPRFVDSUJMRSAgICAgICAgMAogI2RlZmluZSBERkxfTlNTX0tFWUxPRyAgICAgICAgICAwCiAjZGVmaW5lIERGTF9OU1NfS0VZTE9HX0ZJTEUgICAgIE5VTEwKKyNkZWZpbmUgREZMX1FVRVJZX0NPTkZJR19NT0RFICAgMAorI2RlZmluZSBERkxfVVNFX1NSVFAgICAgICAgICAgICAwCisjZGVmaW5lIERGTF9TUlRQX0ZPUkNFX1BST0ZJTEUgIDAKKyNkZWZpbmUgREZMX1NSVFBfU1VQUE9SVF9NS0kgICAgMAogCiAjZGVmaW5lIExPTkdfUkVTUE9OU0UgIjxwPjAxLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoXHJcbiIgXAogICAgICIwMi1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoLWJsYWgtYmxhaC1ibGFoXHJcbiIgIFwKQEAgLTMyNCwxMCArMzI4LDI0IEBACiAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjYW5ub3QgYmUgdXNlZCB3aXRoIGVhcF90bHM9MVxuIgogI2RlZmluZSBVU0FHRV9OU1NfS0VZTE9HX0ZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICIgICAgbnNzX2tleWxvZ19maWxlPSUlc1xuIgotI2Vsc2UKKyNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfU1JUUCkKKyNkZWZpbmUgVVNBR0VfU1JUUCBcCisgICAgIiAgICB1c2Vfc3J0cD0lJWQgICAgICAgICBkZWZhdWx0OiAwIChkaXNhYmxlZClcbiIgXAorICAgICIgICAgc3J0cF9mb3JjZV9wcm9maWxlPSUlZCAgZGVmYXVsdDogMCAoYWxsIGVuYWJsZWQpXG4iICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgcHJvZmlsZXM6XG4iICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgMSAtIFNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV84MFxuIiAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAyIC0gU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyXG4iICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIDMgLSBTUlRQX05VTExfSE1BQ19TSEExXzgwXG4iICAgICAgIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgNCAtIFNSVFBfTlVMTF9ITUFDX1NIQTFfMzJcbiIgICAgICAgXAorICAgICIgICAgc3VwcG9ydF9ta2k9JSVkICAgICBkZWZhdWx0OiAwIChub3Qgc3VwcG9ydGVkKVxuIgorI2Vsc2UgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisjZGVmaW5lIFVTQUdFX1NSVFAgIiIKKyNlbmRpZgorI2Vsc2UgLyogTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMgKi8KICNkZWZpbmUgVVNBR0VfRUFQX1RMUyAiIgogI2RlZmluZSBVU0FHRV9OU1NfS0VZTE9HICIiCiAjZGVmaW5lIFVTQUdFX05TU19LRVlMT0dfRklMRSAiIgorI2RlZmluZSBVU0FHRV9TUlRQICIiCiAjZW5kaWYgLyogTUJFRFRMU19TU0xfRVhQT1JUX0tFWVMgKi8KIAogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfQ0FDSEVfQykKQEAgLTQ4OSw2ICs1MDcsNyBAQAogICAgICIgICAgcmVhZF90aW1lb3V0PSUlZCAgICAgZGVmYXVsdDogMCBtcyAobm8gdGltZW91dClcbiIgICAgXAogICAgICJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFVTQUdFX0RUTFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFVTQUdFX1NSVFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFVTQUdFX0NPT0tJRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFVTQUdFX0FOVElfUkVQTEFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFVTQUdFX0JBRE1BQ19MSU1JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNjQzLDYgKzY2MiwxMCBAQAogICAgIGNvbnN0IGNoYXIgKmNpZF92YWxfcmVuZWdvOyAvKiB0aGUgQ0lEIHRvIHVzZSBmb3IgaW5jb21pbmcgbWVzc2FnZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWZ0ZXIgcmVuZWdvdGlhdGlvbiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGludCByZXByb2R1Y2libGU7ICAgICAgICAgICAvKiBtYWtlIGNvbW11bmljYXRpb24gcmVwcm9kdWNpYmxlICAgICAgICAgICovCisgICAgaW50IHF1ZXJ5X2NvbmZpZ19tb2RlOyAgICAgIC8qIHdoZXRoZXIgdG8gcmVhZCBjb25maWcgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpbnQgdXNlX3NydHA7ICAgICAgICAgICAgICAgLyogU3VwcG9ydCBTUlRQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCBmb3JjZV9zcnRwX3Byb2ZpbGU7ICAgICAvKiBTUlRQIHByb3RlY3Rpb24gcHJvZmlsZSB0byB1c2Ugb3IgYWxsICAgICovCisgICAgaW50IHN1cHBvcnRfbWtpOyAgICAgICAgICAgIC8qIFRoZSBkdGxzIG1raSBta2kgc3VwcG9ydCAgICAgICAgICAgICAgICAgKi8KIH0gb3B0OwogCiBpbnQgcXVlcnlfY29uZmlnKCBjb25zdCBjaGFyICpjb25maWcgKTsKQEAgLTc1OCw3ICs3ODEsNDkgQEAKICAgICByZXR1cm4oIHJldCApOwogfQogCi0jZW5kaWYKKyNpZiBkZWZpbmVkKCBNQkVEVExTX1NTTF9EVExTX1NSVFAgKQorLyogU3VwcG9ydGVkIFNSVFAgbW9kZSBuZWVkcyBhIG1heGltdW0gb2YgOgorICogLSAxNiBieXRlcyBmb3Iga2V5IChBRVMtMTI4KQorICogLSAxNCBieXRlcyBTQUxUCisgKiBPbmUgZm9yIHNlbmRlciwgb25lIGZvciByZWNlaXZlciBjb250ZXh0CisgKi8KKyNkZWZpbmUgTUJFRFRMU19UTFNfU1JUUF9NQVhfS0VZX01BVEVSSUFMX0xFTkdUSCAgICA2MAordHlwZWRlZiBzdHJ1Y3QgZHRsc19zcnRwX2tleXMKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG1hc3Rlcl9zZWNyZXRbNDhdOworICAgIHVuc2lnbmVkIGNoYXIgcmFuZGJ5dGVzWzY0XTsKKyAgICBtYmVkdGxzX3Rsc19wcmZfdHlwZXMgdGxzX3ByZl90eXBlOworfSBkdGxzX3NydHBfa2V5czsKKworc3RhdGljIGludCBkdGxzX3NydHBfa2V5X2Rlcml2YXRpb24oIHZvaWQgKnBfZXhwa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYWNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaXZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBjbGllbnRfcmFuZG9tWzMyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHNlcnZlcl9yYW5kb21bMzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfdGxzX3ByZl90eXBlcyB0bHNfcHJmX3R5cGUgKQoreworICAgIGR0bHNfc3J0cF9rZXlzICprZXlzID0gKGR0bHNfc3J0cF9rZXlzICopcF9leHBrZXk7CisKKyAgICAoICggdm9pZCApIGtiICk7CisgICAgbWVtY3B5KCBrZXlzLT5tYXN0ZXJfc2VjcmV0LCBtcywgc2l6ZW9mKCBrZXlzLT5tYXN0ZXJfc2VjcmV0ICkgKTsKKyAgICBtZW1jcHkoIGtleXMtPnJhbmRieXRlcywgY2xpZW50X3JhbmRvbSwgMzIgKTsKKyAgICBtZW1jcHkoIGtleXMtPnJhbmRieXRlcyArIDMyLCBzZXJ2ZXJfcmFuZG9tLCAzMiApOworICAgIGtleXMtPnRsc19wcmZfdHlwZSA9IHRsc19wcmZfdHlwZTsKKworICAgIGlmKCBvcHQuZGVidWdfbGV2ZWwgPiAyICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiZXhwb3J0ZWQgbWFjbGVuIGlzICV1XG4iLCAodW5zaWduZWQpIG1hY2xlbiApOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggImV4cG9ydGVkIGtleWxlbiBpcyAldVxuIiwgKHVuc2lnbmVkKSBrZXlsZW4gKTsKKyAgICAgICAgbWJlZHRsc19wcmludGYoICJleHBvcnRlZCBpdmxlbiBpcyAldVxuIiwgKHVuc2lnbmVkKSBpdmxlbiApOworICAgIH0KKyAgICByZXR1cm4oIDAgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTICovCiAKIHN0YXRpYyB2b2lkIG15X2RlYnVnKCB2b2lkICpjdHgsIGludCBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKQEAgLTE3MjMsNiArMTc4OCw3IEBACiBpbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCiB7CiAgICAgaW50IHJldCA9IDAsIGxlbiwgd3JpdHRlbiwgZnJhZ3MsIGV4Y2hhbmdlc19sZWZ0OworICAgIGludCBxdWVyeV9jb25maWdfcmV0ID0gMDsKICAgICBpbnQgdmVyc2lvbl9zdWl0ZXNbNF1bMl07CiAgICAgaW9fY3R4X3QgaW9fY3R4OwogICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZiA9IDA7CkBAIC0xNzg5LDcgKzE4NTUsNiBAQAogI2lmIGRlZmluZWQoTUJFRFRMU19NRU1PUllfQlVGRkVSX0FMTE9DX0MpCiAgICAgdW5zaWduZWQgY2hhciBhbGxvY19idWZbTUVNT1JZX0hFQVBfU0laRV07CiAjZW5kaWYKLQogI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19DT05ORUNUSU9OX0lEKQogICAgIHVuc2lnbmVkIGNoYXIgY2lkW01CRURUTFNfU1NMX0NJRF9JTl9MRU5fTUFYXTsKICAgICB1bnNpZ25lZCBjaGFyIGNpZF9yZW5lZ29bTUJFRFRMU19TU0xfQ0lEX0lOX0xFTl9NQVhdOwpAQCAtMTgxMiw3ICsxODc3LDIwIEBACiAgICAgdW5zaWduZWQgY2hhciBlYXBfdGxzX2l2WzhdOwogICAgIGNvbnN0IGNoYXIqIGVhcF90bHNfbGFiZWwgPSAiY2xpZW50IEVBUCBlbmNyeXB0aW9uIjsKICAgICBlYXBfdGxzX2tleXMgZWFwX3Rsc19rZXlpbmc7Ci0jZW5kaWYKKyNpZiBkZWZpbmVkKCBNQkVEVExTX1NTTF9EVExTX1NSVFAgKQorICAgIC8qISBtYXN0ZXIga2V5cyBhbmQgbWFzdGVyIHNhbHQgZm9yIFNSVFAgZ2VuZXJhdGVkIGR1cmluZyBoYW5kc2hha2UgKi8KKyAgICAgdW5zaWduZWQgY2hhciBkdGxzX3NydHBfa2V5X21hdGVyaWFsW01CRURUTFNfVExTX1NSVFBfTUFYX0tFWV9NQVRFUklBTF9MRU5HVEhdOworICAgICBjb25zdCBjaGFyKiBkdGxzX3NydHBfbGFiZWwgPSAiRVhUUkFDVE9SLWR0bHNfc3J0cCI7CisgICAgIGR0bHNfc3J0cF9rZXlzIGR0bHNfc3J0cF9rZXlpbmc7CisgICAgIGNvbnN0IG1iZWR0bHNfc3NsX3NydHBfcHJvZmlsZSBkZWZhdWx0X3Byb2ZpbGVzW10gPSB7CisgICAgICAgICBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODAsCisgICAgICAgICBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfMzIsCisgICAgICAgICBNQkVEVExTX1RMU19TUlRQX05VTExfSE1BQ19TSEExXzgwLAorICAgICAgICAgTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV8zMiwKKyAgICAgICAgIE1CRURUTFNfVExTX1NSVFBfVU5TRVQKKyAgICAgfTsKKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FWFBPUlRfS0VZUyAqLwogCiAjaWYgZGVmaW5lZChNQkVEVExTX01FTU9SWV9CVUZGRVJfQUxMT0NfQykKICAgICBtYmVkdGxzX21lbW9yeV9idWZmZXJfYWxsb2NfaW5pdCggYWxsb2NfYnVmLCBzaXplb2YoYWxsb2NfYnVmKSApOwpAQCAtMTk3Miw2ICsyMDUwLDEwIEBACiAgICAgb3B0LnJlcHJvZHVjaWJsZSAgICAgICAgPSBERkxfUkVQUk9EVUNJQkxFOwogICAgIG9wdC5uc3Nfa2V5bG9nICAgICAgICAgID0gREZMX05TU19LRVlMT0c7CiAgICAgb3B0Lm5zc19rZXlsb2dfZmlsZSAgICAgPSBERkxfTlNTX0tFWUxPR19GSUxFOworICAgIG9wdC5xdWVyeV9jb25maWdfbW9kZSAgID0gREZMX1FVRVJZX0NPTkZJR19NT0RFOworICAgIG9wdC51c2Vfc3J0cCAgICAgICAgICAgID0gREZMX1VTRV9TUlRQOworICAgIG9wdC5mb3JjZV9zcnRwX3Byb2ZpbGUgID0gREZMX1NSVFBfRk9SQ0VfUFJPRklMRTsKKyAgICBvcHQuc3VwcG9ydF9ta2kgICAgICAgICA9IERGTF9TUlRQX1NVUFBPUlRfTUtJOwogCiAgICAgZm9yKCBpID0gMTsgaSA8IGFyZ2M7IGkrKyApCiAgICAgewpAQCAtMjM4Niw3ICsyNDY4LDkgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJxdWVyeV9jb25maWciICkgPT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1iZWR0bHNfZXhpdCggcXVlcnlfY29uZmlnKCBxICkgKTsKKyAgICAgICAgICAgIG9wdC5xdWVyeV9jb25maWdfbW9kZSA9IDE7CisgICAgICAgICAgICBxdWVyeV9jb25maWdfcmV0ID0gcXVlcnlfY29uZmlnKCBxICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic2VyaWFsaXplIikgPT0gMCApCiAgICAgICAgIHsKQEAgLTI0MTgsNiArMjUwMiwxOCBAQAogICAgICAgICB7CiAgICAgICAgICAgICBvcHQubnNzX2tleWxvZ19maWxlID0gcTsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJ1c2Vfc3J0cCIgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgb3B0LnVzZV9zcnRwID0gYXRvaSAoIHEgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJzcnRwX2ZvcmNlX3Byb2ZpbGUiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5mb3JjZV9zcnRwX3Byb2ZpbGUgPSBhdG9pKCBxICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAic3VwcG9ydF9ta2kiICkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wdC5zdXBwb3J0X21raSA9IGF0b2koIHEgKTsKKyAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIHVzYWdlOwogICAgIH0KQEAgLTMwMjIsNyArMzExOCw3IEBACiAgICAgewogICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtYmVkdGxzX3NzbF9jb25mX21heF9mcmFnX2xlbiByZXR1cm5lZCAlZFxuXG4iLCByZXQgKTsKICAgICAgICAgZ290byBleGl0OwotICAgIH07CisgICAgfQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQ09OTkVDVElPTl9JRCkKQEAgLTMwNTIsNiArMzE0OCwzOCBAQAogICAgIH0KICNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX0NPTk5FQ1RJT05fSUQgKi8KIAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorICAgIGlmKCBvcHQudXNlX3NydHAgPT0gMSApCisgICAgeworICAgICAgICBpZiggb3B0LmZvcmNlX3NydHBfcHJvZmlsZSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgbWJlZHRsc19zc2xfc3J0cF9wcm9maWxlIGZvcmNlZF9wcm9maWxlW10gPSB7IG9wdC5mb3JjZV9zcnRwX3Byb2ZpbGUsIE1CRURUTFNfVExTX1NSVFBfVU5TRVQgfTsKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfc3NsX2NvbmZfZHRsc19zcnRwX3Byb3RlY3Rpb25fcHJvZmlsZXMoICZjb25mLCBmb3JjZWRfcHJvZmlsZSApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19zc2xfY29uZl9kdGxzX3NydHBfcHJvdGVjdGlvbl9wcm9maWxlcyggJmNvbmYsIGRlZmF1bHRfcHJvZmlsZXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX2NvbmZfZHRsc19zcnRwX3Byb3RlY3Rpb25fcHJvZmlsZXMgcmV0dXJuZWQgJWRcblxuIiwgcmV0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX3NzbF9jb25mX3NydHBfbWtpX3ZhbHVlX3N1cHBvcnRlZCggJmNvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuc3VwcG9ydF9ta2kgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfRFRMU19TUlRQX01LSV9TVVBQT1JURUQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfRFRMU19TUlRQX01LSV9VTlNVUFBPUlRFRCApOworCisgICAgfQorICAgIGVsc2UgaWYoIG9wdC5mb3JjZV9zcnRwX3Byb2ZpbGUgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBmYWlsZWRcbiAgISBtdXN0IGVuYWJsZSB1c2Vfc3J0cCB0byBmb3JjZSBzcnRwIHByb2ZpbGVcblxuIiApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLworCiAjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9UUlVOQ0FURURfSE1BQykKICAgICBpZiggb3B0LnRydW5jX2htYWMgIT0gREZMX1RSVU5DX0hNQUMgKQogICAgICAgICBtYmVkdGxzX3NzbF9jb25mX3RydW5jYXRlZF9obWFjKCAmY29uZiwgb3B0LnRydW5jX2htYWMgKTsKQEAgLTMwNzksNyArMzIwNywxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNzX2tleWxvZ19leHBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMICk7CiAgICAgfQotI2VuZGlmCisjaWYgZGVmaW5lZCggTUJFRFRMU19TU0xfRFRMU19TUlRQICkKKyAgICBlbHNlIGlmKCBvcHQudXNlX3NydHAgIT0gMCApCisgICAgeworICAgICAgICBtYmVkdGxzX3NzbF9jb25mX2V4cG9ydF9rZXlzX2V4dF9jYiggJmNvbmYsIGR0bHNfc3J0cF9rZXlfZGVyaXZhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdGxzX3NydHBfa2V5aW5nICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfU1JUUCAqLworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0VYUE9SVF9LRVlTICovCiAKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0FMUE4pCiAgICAgaWYoIG9wdC5hbHBuX3N0cmluZyAhPSBOVUxMICkKQEAgLTM3MjUsNyArMzg2MCw3NSBAQAogICAgICAgICB9CiAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCJcbiIpOwogICAgIH0KLSNlbmRpZgorCisjaWYgZGVmaW5lZCggTUJFRFRMU19TU0xfRFRMU19TUlRQICkKKyAgICBlbHNlIGlmKCBvcHQudXNlX3NydHAgIT0gMCAgKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGogPSAwOworICAgICAgICBtYmVkdGxzX2R0bHNfc3J0cF9pbmZvIGR0bHNfc3J0cF9uZWdvdGlhdGlvbl9yZXN1bHQ7CisgICAgICAgIG1iZWR0bHNfc3NsX2dldF9kdGxzX3NydHBfbmVnb3RpYXRpb25fcmVzdWx0KCAmc3NsLCAmZHRsc19zcnRwX25lZ290aWF0aW9uX3Jlc3VsdCApOworCisgICAgICAgIGlmKCBkdGxzX3NydHBfbmVnb3RpYXRpb25fcmVzdWx0LmNob3Nlbl9kdGxzX3NydHBfcHJvZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBNQkVEVExTX1RMU19TUlRQX1VOU0VUICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgVW5hYmxlIHRvIG5lZ290aWF0ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSB1c2Ugb2YgRFRMUy1TUlRQXG4iICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKCByZXQgPSBtYmVkdGxzX3NzbF90bHNfcHJmKCBkdGxzX3NydHBfa2V5aW5nLnRsc19wcmZfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0bHNfc3J0cF9rZXlpbmcubWFzdGVyX3NlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggZHRsc19zcnRwX2tleWluZy5tYXN0ZXJfc2VjcmV0ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdGxzX3NydHBfbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdGxzX3NydHBfa2V5aW5nLnJhbmRieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiggZHRsc19zcnRwX2tleWluZy5yYW5kYnl0ZXMgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0bHNfc3J0cF9rZXlfbWF0ZXJpYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGR0bHNfc3J0cF9rZXlfbWF0ZXJpYWwgKSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiIGZhaWxlZFxuICAhIG1iZWR0bHNfc3NsX3Rsc19wcmYgcmV0dXJuZWQgLTB4JXhcblxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgLXJldCApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpczoiICk7CisgICAgICAgICAgICBmb3IoIGogPSAwOyBqIDwgc2l6ZW9mKCBkdGxzX3NydHBfa2V5X21hdGVyaWFsICk7IGorKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIGogJSA4ID09IDAgKQorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIlxuICAgICIgKTsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiUwMnggIiwgZHRsc19zcnRwX2tleV9tYXRlcmlhbFtqXSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgICAgICAgICAgLyogcHJvZHVjZSBhIGxlc3MgcmVhZGFibGUgb3V0cHV0IHVzZWQgdG8gcGVyZm9ybSBhdXRvbWF0aWMgY2hlY2tzCisgICAgICAgICAgICAgKiAtIGNvbXBhcmUgY2xpZW50IGFuZCBzZXJ2ZXIgb3V0cHV0CisgICAgICAgICAgICAgKiAtIGludGVyb3AgdGVzdCB3aXRoIG9wZW5zc2wgd2hpY2ggY2xpZW50IHByb2R1Y2VzIHRoaXMga2luZCBvZiBvdXRwdXQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIgICAgS2V5aW5nIG1hdGVyaWFsOiAiICk7CisgICAgICAgICAgICBmb3IoIGogPSAwOyBqIDwgc2l6ZW9mKCBkdGxzX3NydHBfa2V5X21hdGVyaWFsICk7IGorKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICIlMDJYIiwgZHRsc19zcnRwX2tleV9tYXRlcmlhbFtqXSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJcbiIgKTsKKworICAgICAgICAgICAgaWYgKCBkdGxzX3NydHBfbmVnb3RpYXRpb25fcmVzdWx0Lm1raV9sZW4gPiAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgICBEVExTLVNSVFAgbWtpIHZhbHVlOiAiICk7CisgICAgICAgICAgICAgICAgZm9yKCBqID0gMDsgaiA8IGR0bHNfc3J0cF9uZWdvdGlhdGlvbl9yZXN1bHQubWtpX2xlbjsgaisrICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiJTAyWCIsIGR0bHNfc3J0cF9uZWdvdGlhdGlvbl9yZXN1bHQubWtpX3ZhbHVlW2pdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAgIERUTFMtU1JUUCBubyBta2kgdmFsdWUgbmVnb3RpYXRlZCIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiXG4iICk7CisKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9EVExTX1NSVFAgKi8KKyNlbmRpZiAvKiBNQkVEVExTX1NTTF9FWFBPUlRfS0VZUyAqLwogCiAjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0NPTk5FQ1RJT05fSUQpCiAgICAgcmV0ID0gcmVwb3J0X2NpZF91c2FnZSggJnNzbCwgImluaXRpYWwgaGFuZHNoYWtlIiApOwpAQCAtNDI2MSw4ICs0NDY0LDExIEBACiAgICAgfQogI2VuZGlmCiAKLSAgICBtYmVkdGxzX3ByaW50ZiggIiAgLiBDbGVhbmluZyB1cC4uLiIgKTsKLSAgICBmZmx1c2goIHN0ZG91dCApOworICAgIGlmKCBvcHQucXVlcnlfY29uZmlnX21vZGUgPT0gREZMX1FVRVJZX0NPTkZJR19NT0RFICkKKyAgICB7CisgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiICAuIENsZWFuaW5nIHVwLi4uIiApOworICAgICAgICBmZmx1c2goIHN0ZG91dCApOworICAgIH0KIAogICAgIG1iZWR0bHNfbmV0X2ZyZWUoICZjbGllbnRfZmQgKTsKICAgICBtYmVkdGxzX25ldF9mcmVlKCAmbGlzdGVuX2ZkICk7CkBAIC00MjkyLDcgKzQ0OTgsOCBAQAogICAgIHNuaV9mcmVlKCBzbmlfaW5mbyApOwogI2VuZGlmCiAjaWYgZGVmaW5lZChNQkVEVExTX0tFWV9FWENIQU5HRV9TT01FX1BTS19FTkFCTEVEKQotICAgIGlmKCAoIHJldCA9IHBza19mcmVlKCBwc2tfaW5mbyApICkgIT0gMCApCisgICAgcmV0ID0gcHNrX2ZyZWUoIHBza19pbmZvICk7CisgICAgaWYoICggcmV0ICE9IDAgKSAmJiAoIG9wdC5xdWVyeV9jb25maWdfbW9kZSA9PSBERkxfUVVFUllfQ09ORklHX01PREUgKSApCiAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiRmFpbGVkIHRvIGxpc3Qgb2Ygb3BhcXVlIFBTS3MgLSBlcnJvciB3YXMgJWRcbiIsIHJldCApOwogI2VuZGlmCiAjaWYgZGVmaW5lZChNQkVEVExTX0RITV9DKSAmJiBkZWZpbmVkKE1CRURUTFNfRlNfSU8pCkBAIC00MzA4LDcgKzQ1MTUsOCBAQAogICAgICAgICAgKiBpbW1lZGlhdGVseSBiZWNhdXNlIG9mIGJhZCBjbWQgbGluZSBwYXJhbXMsCiAgICAgICAgICAqIGZvciBleGFtcGxlKS4gKi8KICAgICAgICAgc3RhdHVzID0gcHNhX2Rlc3Ryb3lfa2V5KCBwc2tfc2xvdCApOwotICAgICAgICBpZiggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgaWYoICggc3RhdHVzICE9IFBTQV9TVUNDRVNTICkgJiYKKyAgICAgICAgICAgICggb3B0LnF1ZXJ5X2NvbmZpZ19tb2RlID09IERGTF9RVUVSWV9DT05GSUdfTU9ERSApICkKICAgICAgICAgewogICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJGYWlsZWQgdG8gZGVzdHJveSBrZXkgc2xvdCAldSAtIGVycm9yIHdhcyAlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKSBwc2tfc2xvdCwgKGludCkgc3RhdHVzICk7CkBAIC00MzQ3LDE4ICs0NTU1LDI0IEBACiAgICAgbWJlZHRsc19tZW1vcnlfYnVmZmVyX2FsbG9jX2ZyZWUoKTsKICNlbmRpZgogCi0gICAgbWJlZHRsc19wcmludGYoICIgZG9uZS5cbiIgKTsKKyAgICBpZiggb3B0LnF1ZXJ5X2NvbmZpZ19tb2RlID09IERGTF9RVUVSWV9DT05GSUdfTU9ERSApCisgICAgeworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiBkb25lLlxuIiApOwogCiAjaWYgZGVmaW5lZChfV0lOMzIpCi0gICAgbWJlZHRsc19wcmludGYoICIgICsgUHJlc3MgRW50ZXIgdG8gZXhpdCB0aGlzIHByb2dyYW0uXG4iICk7Ci0gICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOworICAgICAgICBtYmVkdGxzX3ByaW50ZiggIiAgKyBQcmVzcyBFbnRlciB0byBleGl0IHRoaXMgcHJvZ3JhbS5cbiIgKTsKKyAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsgZ2V0Y2hhcigpOwogI2VuZGlmCisgICAgfQogCiAgICAgLy8gU2hlbGwgY2FuIG5vdCBoYW5kbGUgbGFyZ2UgZXhpdCBudW1iZXJzIC0+IDEgZm9yIGVycm9ycwogICAgIGlmKCByZXQgPCAwICkKICAgICAgICAgcmV0ID0gMTsKIAotICAgIG1iZWR0bHNfZXhpdCggcmV0ICk7CisgICAgaWYoIG9wdC5xdWVyeV9jb25maWdfbW9kZSA9PSBERkxfUVVFUllfQ09ORklHX01PREUgKQorICAgICAgICBtYmVkdGxzX2V4aXQoIHJldCApOworICAgIGVsc2UKKyAgICAgICAgbWJlZHRsc19leGl0KCBxdWVyeV9jb25maWdfcmV0ICk7CiB9CiAjZW5kaWYgLyogTUJFRFRMU19CSUdOVU1fQyAmJiBNQkVEVExTX0VOVFJPUFlfQyAmJiBNQkVEVExTX1NTTF9UTFNfQyAmJgogICAgICAgICAgIE1CRURUTFNfU1NMX1NSVl9DICYmIE1CRURUTFNfTkVUX0MgJiYgTUJFRFRMU19SU0FfQyAmJgpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvdGVzdC9DTWFrZUxpc3RzLnR4dCBiL3Byb2dyYW1zL3Rlc3QvQ01ha2VMaXN0cy50eHQKaW5kZXggMGRmMGJlYy4uMjE3NzQxYiAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvdGVzdC9DTWFrZUxpc3RzLnR4dAorKysgYi9wcm9ncmFtcy90ZXN0L0NNYWtlTGlzdHMudHh0CkBAIC0xLDUgKzEsNSBAQAogc2V0KGxpYnMKLSAgICBtYmVkdGxzCisgICAgJHttYmVkdGxzX3RhcmdldH0KICkKIAogaWYoVVNFX1BLQ1MxMV9IRUxQRVJfTElCUkFSWSkKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBpZiAoJHtleGVfaW5kZXh9IEdSRUFURVIgLTEpCiAgICAgICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke2V4ZX0gJHtsaWJzfSkKICAgICBlbHNlKCkKLSAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZXhlfSBtYmVkY3J5cHRvKQorICAgICAgICB0YXJnZXRfbGlua19saWJyYXJpZXMoJHtleGV9ICR7bWJlZGNyeXB0b190YXJnZXR9KQogICAgIGVuZGlmKCkKIGVuZGZvcmVhY2goKQogCmRpZmYgLS1naXQgYS9wcm9ncmFtcy90ZXN0L2NtYWtlX3N1YnByb2plY3QvQ01ha2VMaXN0cy50eHQgYi9wcm9ncmFtcy90ZXN0L2NtYWtlX3N1YnByb2plY3QvQ01ha2VMaXN0cy50eHQKaW5kZXggM2UzMmM1Zi4uYTlmY2ZkZSAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvdGVzdC9jbWFrZV9zdWJwcm9qZWN0L0NNYWtlTGlzdHMudHh0CisrKyBiL3Byb2dyYW1zL3Rlc3QvY21ha2Vfc3VicHJvamVjdC9DTWFrZUxpc3RzLnR4dApAQCAtMSw1ICsxLDggQEAKIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjYpCiAKKyMgVGVzdCB0aGUgdGFyZ2V0IHJlbmFtaW5nIHN1cHBvcnQgYnkgYWRkaW5nIGEgcHJlZml4IHRvIHRoZSB0YXJnZXRzIGJ1aWx0CitzZXQoTUJFRFRMU19UQVJHRVRfUFJFRklYIHN1YnByb2plY3RfdGVzdF8pCisKICMgV2UgdXNlIHRoZSBwYXJlbnQgTWJlZCBUTFMgZGlyZWN0b3J5IGFzIHRoZSBNQkVEVExTX0RJUiBmb3IgdGhpcyB0ZXN0LiBPdGhlcgogIyBwcm9qZWN0cyB0aGF0IHVzZSBNYmVkIFRMUyBhcyBhIHN1YnByb2plY3QgYXJlIGxpa2VseSB0byBhZGQgYnkgdGhlaXIgb3duCiAjIHJlbGF0aXZlIHBhdGhzLgpAQCAtOCwxMSArMTEsMTIgQEAKICMgQWRkIE1iZWQgVExTIGFzIGEgc3ViZGlyZWN0b3J5LgogYWRkX3N1YmRpcmVjdG9yeSgke01CRURUTFNfRElSfSBidWlsZCkKIAotIyBMaW5rIGFnYWluc3QgYWxsIHRoZSBNYmVkIFRMUyBsaWJyYXJpZXMuCisjIExpbmsgYWdhaW5zdCBhbGwgdGhlIE1iZWQgVExTIGxpYnJhcmllcy4gVmVyaWZpZXMgdGhhdCB0aGUgdGFyZ2V0cyBoYXZlIGJlZW4KKyMgY3JlYXRlZCB1c2luZyB0aGUgc3BlY2lmaWVkIHByZWZpeAogc2V0KGxpYnMKLSAgICBtYmVkY3J5cHRvCi0gICAgbWJlZHg1MDkKLSAgICBtYmVkdGxzCisgICAgc3VicHJvamVjdF90ZXN0X21iZWRjcnlwdG8KKyAgICBzdWJwcm9qZWN0X3Rlc3RfbWJlZHg1MDkKKyAgICBzdWJwcm9qZWN0X3Rlc3RfbWJlZHRscwogKQogCiBhZGRfZXhlY3V0YWJsZShjbWFrZV9zdWJwcm9qZWN0IGNtYWtlX3N1YnByb2plY3QuYykKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3Rlc3QvY3BwX2R1bW15X2J1aWxkLmNwcCBiL3Byb2dyYW1zL3Rlc3QvY3BwX2R1bW15X2J1aWxkLmNwcAppbmRleCAwOWM1MjczLi5jNjljZDJiIDEwMDY0NAotLS0gYS9wcm9ncmFtcy90ZXN0L2NwcF9kdW1teV9idWlsZC5jcHAKKysrIGIvcHJvZ3JhbXMvdGVzdC9jcHBfZHVtbXlfYnVpbGQuY3BwCkBAIC0xMDksNiArMTA5LDEyIEBACiAjaW5jbHVkZSAibWJlZHRscy9tZW1vcnlfYnVmZmVyX2FsbG9jLmgiCiAjZW5kaWYKIAorI2luY2x1ZGUgInBzYS9jcnlwdG8uaCIKKyNpbmNsdWRlICJwc2EvY3J5cHRvX3NlX2RyaXZlci5oIgorI2luY2x1ZGUgInBzYS9jcnlwdG9fZW50cm9weV9kcml2ZXIuaCIKKyNpbmNsdWRlICJwc2EvY3J5cHRvX2FjY2VsX2RyaXZlci5oIgorI2luY2x1ZGUgIi4uL2xpYnJhcnkvcHNhX2NyeXB0b19pdHMuaCIKKwogaW50IG1haW4oKQogewogICAgIG1iZWR0bHNfcGxhdGZvcm1fY29udGV4dCAqY3R4ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3Rlc3QvcXVlcnlfY29uZmlnLmMgYi9wcm9ncmFtcy90ZXN0L3F1ZXJ5X2NvbmZpZy5jCmluZGV4IGUyMGE2NWUuLjEzNDViMTEgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3Rlc3QvcXVlcnlfY29uZmlnLmMKKysrIGIvcHJvZ3JhbXMvdGVzdC9xdWVyeV9jb25maWcuYwpAQCAtMTE2OCwxMyArMTE2OCwxMyBAQAogICAgIH0KICNlbmRpZiAvKiBNQkVEVExTX0VOVFJPUFlfTlZfU0VFRCAqLwogCi0jaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fS0VZX0ZJTEVfSURfRU5DT0RFU19PV05FUikKLSAgICBpZiggc3RyY21wKCAiTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9GSUxFX0lEX0VOQ09ERVNfT1dORVIiLCBjb25maWcgKSA9PSAwICkKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUikKKyAgICBpZiggc3RyY21wKCAiTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSIiwgY29uZmlnICkgPT0gMCApCiAgICAgewotICAgICAgICBNQUNST19FWFBBTlNJT05fVE9fU1RSKCBNQkVEVExTX1BTQV9DUllQVE9fS0VZX0ZJTEVfSURfRU5DT0RFU19PV05FUiApOworICAgICAgICBNQUNST19FWFBBTlNJT05fVE9fU1RSKCBNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIgKTsKICAgICAgICAgcmV0dXJuKCAwICk7CiAgICAgfQotI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19LRVlfRklMRV9JRF9FTkNPREVTX09XTkVSICovCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSICovCiAKICNpZiBkZWZpbmVkKE1CRURUTFNfTUVNT1JZX0RFQlVHKQogICAgIGlmKCBzdHJjbXAoICJNQkVEVExTX01FTU9SWV9ERUJVRyIsIGNvbmZpZyApID09IDAgKQpAQCAtMTIxNiw2ICsxMjE2LDE0IEBACiAgICAgfQogI2VuZGlmIC8qIE1CRURUTFNfUEtDUzFfVjIxICovCiAKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTKQorICAgIGlmKCBzdHJjbXAoICJNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUyIsIGNvbmZpZyApID09IDAgKQorICAgIHsKKyAgICAgICAgTUFDUk9fRVhQQU5TSU9OX1RPX1NUUiggTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMgKTsKKyAgICAgICAgcmV0dXJuKCAwICk7CisgICAgfQorI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTICovCisKICNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19TUE0pCiAgICAgaWYoIHN0cmNtcCggIk1CRURUTFNfUFNBX0NSWVBUT19TUE0iLCBjb25maWcgKSA9PSAwICkKICAgICB7CkBAIC0xNDcyLDYgKzE0ODAsMTQgQEAKICAgICB9CiAjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19IRUxMT19WRVJJRlkgKi8KIAorI2lmIGRlZmluZWQoTUJFRFRMU19TU0xfRFRMU19TUlRQKQorICAgIGlmKCBzdHJjbXAoICJNQkVEVExTX1NTTF9EVExTX1NSVFAiLCBjb25maWcgKSA9PSAwICkKKyAgICB7CisgICAgICAgIE1BQ1JPX0VYUEFOU0lPTl9UT19TVFIoIE1CRURUTFNfU1NMX0RUTFNfU1JUUCApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19TU0xfRFRMU19TUlRQICovCisKICNpZiBkZWZpbmVkKE1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UpCiAgICAgaWYoIHN0cmNtcCggIk1CRURUTFNfU1NMX0RUTFNfQ0xJRU5UX1BPUlRfUkVVU0UiLCBjb25maWcgKSA9PSAwICkKICAgICB7CkBAIC0xNTM2LDYgKzE1NTIsMjIgQEAKICAgICB9CiAjZW5kaWYgLyogTUJFRFRMU19TU0xfVkFSSUFCTEVfQlVGRkVSX0xFTkdUSCAqLwogCisjaWYgZGVmaW5lZChNQkVEVExTX1RFU1RfQ09OU1RBTlRfRkxPV19NRU1TQU4pCisgICAgaWYoIHN0cmNtcCggIk1CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX01FTVNBTiIsIGNvbmZpZyApID09IDAgKQorICAgIHsKKyAgICAgICAgTUFDUk9fRVhQQU5TSU9OX1RPX1NUUiggTUJFRFRMU19URVNUX0NPTlNUQU5UX0ZMT1dfTUVNU0FOICk7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1RFU1RfQ09OU1RBTlRfRkxPV19NRU1TQU4gKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19URVNUX0NPTlNUQU5UX0ZMT1dfVkFMR1JJTkQpCisgICAgaWYoIHN0cmNtcCggIk1CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX1ZBTEdSSU5EIiwgY29uZmlnICkgPT0gMCApCisgICAgeworICAgICAgICBNQUNST19FWFBBTlNJT05fVE9fU1RSKCBNQkVEVExTX1RFU1RfQ09OU1RBTlRfRkxPV19WQUxHUklORCApOworICAgICAgICByZXR1cm4oIDAgKTsKKyAgICB9CisjZW5kaWYgLyogTUJFRFRMU19URVNUX0NPTlNUQU5UX0ZMT1dfVkFMR1JJTkQgKi8KKwogI2lmIGRlZmluZWQoTUJFRFRMU19URVNUX0hPT0tTKQogICAgIGlmKCBzdHJjbXAoICJNQkVEVExTX1RFU1RfSE9PS1MiLCBjb25maWcgKSA9PSAwICkKICAgICB7CkBAIC0xNTY4LDYgKzE2MDAsMTQgQEAKICAgICB9CiAjZW5kaWYgLyogTUJFRFRMU19VU0VfUFNBX0NSWVBUTyAqLwogCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHKQorICAgIGlmKCBzdHJjbXAoICJNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHIiwgY29uZmlnICkgPT0gMCApCisgICAgeworICAgICAgICBNQUNST19FWFBBTlNJT05fVE9fU1RSKCBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHICk7CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHICovCisKICNpZiBkZWZpbmVkKE1CRURUTFNfVkVSU0lPTl9GRUFUVVJFUykKICAgICBpZiggc3RyY21wKCAiTUJFRFRMU19WRVJTSU9OX0ZFQVRVUkVTIiwgY29uZmlnICkgPT0gMCApCiAgICAgewpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvdXRpbC9DTWFrZUxpc3RzLnR4dCBiL3Byb2dyYW1zL3V0aWwvQ01ha2VMaXN0cy50eHQKaW5kZXggY2IxNGEzZS4uMmExMTIxMiAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvdXRpbC9DTWFrZUxpc3RzLnR4dAorKysgYi9wcm9ncmFtcy91dGlsL0NNYWtlTGlzdHMudHh0CkBAIC0xLDUgKzEsNSBAQAogc2V0KGxpYnMKLSAgICBtYmVkY3J5cHRvCisgICAgJHttYmVkY3J5cHRvX3RhcmdldH0KICkKIAogc2V0KGV4ZWN1dGFibGVzCmRpZmYgLS1naXQgYS9wcm9ncmFtcy94NTA5L0NNYWtlTGlzdHMudHh0IGIvcHJvZ3JhbXMveDUwOS9DTWFrZUxpc3RzLnR4dAppbmRleCBmN2I1ZmUxLi4yOWNiZWI4IDEwMDY0NAotLS0gYS9wcm9ncmFtcy94NTA5L0NNYWtlTGlzdHMudHh0CisrKyBiL3Byb2dyYW1zL3g1MDkvQ01ha2VMaXN0cy50eHQKQEAgLTEsNSArMSw1IEBACiBzZXQobGlicwotICAgIG1iZWR4NTA5CisgICAgJHttYmVkeDUwOV90YXJnZXR9CiApCiAKIGlmKFVTRV9QS0NTMTFfSEVMUEVSX0xJQlJBUlkpCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZXhlfSAke2xpYnN9KQogZW5kZm9yZWFjaCgpCiAKLXRhcmdldF9saW5rX2xpYnJhcmllcyhjZXJ0X2FwcCBtYmVkdGxzKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNlcnRfYXBwICR7bWJlZHRsc190YXJnZXR9KQogCiBpbnN0YWxsKFRBUkdFVFMgJHtleGVjdXRhYmxlc30KICAgICAgICAgREVTVElOQVRJT04gImJpbiIKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3g1MDkvY2VydF9yZXEuYyBiL3Byb2dyYW1zL3g1MDkvY2VydF9yZXEuYwppbmRleCBhZGU2N2UyLi5lODI0MWEzIDEwMDY0NAotLS0gYS9wcm9ncmFtcy94NTA5L2NlcnRfcmVxLmMKKysrIGIvcHJvZ3JhbXMveDUwOS9jZXJ0X3JlcS5jCkBAIC0xMDAsOSArMTAwLDggQEAKICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgTnNDZXJ0VHlwZSBldmVuIGlmIGl0IGlzIGVtcHR5XG4iICAgIFwKICAgICAiICAgIG1kPSUlcyAgICAgICAgICAgICAgIGRlZmF1bHQ6IFNIQTI1NlxuIiAgICAgICBcCiAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGUgdmFsdWVzOlxuIiAgICAgXAotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIE1EMiwgTUQ0LCBNRDUsIFNIQTFcbiIgIFwKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICBTSEEyMjQsIFNIQTI1NlxuIiAgICAgICBcCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgU0hBMzg0LCBTSEE1MTJcbiIgICAgICAgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIE1EMiwgTUQ0LCBNRDUsIFJJUEVNRDE2MCwgU0hBMSxcbiIgXAorICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIFNIQTIyNCwgU0hBMjU2LCBTSEEzODQsIFNIQTUxMlxuIiBcCiAgICAgIlxuIgogCiAKQEAgLTIxNyw1OCArMjE2LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibWQiICkgPT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJTSEEyNTYiICkgPT0gMCApCisgICAgICAgICAgICBjb25zdCBtYmVkdGxzX21kX2luZm9fdCAqbWRfaW5mbyA9CisgICAgICAgICAgICAgICAgbWJlZHRsc19tZF9pbmZvX2Zyb21fc3RyaW5nKCBxICk7CisgICAgICAgICAgICBpZiggbWRfaW5mbyA9PSBOVUxMICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvcHQubWRfYWxnID0gTUJFRFRMU19NRF9TSEEyNTY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHEsICJTSEEyMjQiICkgPT0gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3B0Lm1kX2FsZyA9IE1CRURUTFNfTURfU0hBMjI0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotI2lmIGRlZmluZWQoTUJFRFRMU19NRDVfQykKLSAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJNRDUiICkgPT0gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3B0Lm1kX2FsZyA9IE1CRURUTFNfTURfTUQ1OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotI2VuZGlmIC8qIE1CRURUTFNfTUQ1X0MgKi8KLSNpZiBkZWZpbmVkKE1CRURUTFNfTUQ0X0MpCi0gICAgICAgICAgICBpZiggc3RyY21wKCBxLCAiTUQ0IiApID09IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9wdC5tZF9hbGcgPSBNQkVEVExTX01EX01ENDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX01ENV9DICovCi0jaWYgZGVmaW5lZChNQkVEVExTX01EMl9DKQotICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgIk1EMiIgKSA9PSAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvcHQubWRfYWxnID0gTUJFRFRMU19NRF9NRDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYgLyogTUJFRFRMU19NRDJfQyAqLwotI2lmIGRlZmluZWQoTUJFRFRMU19TSEExX0MpCi0gICAgICAgICAgICBpZiggc3RyY21wKCBxLCAiU0hBMSIgKSA9PSAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvcHQubWRfYWxnID0gTUJFRFRMU19NRF9TSEExOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotI2VuZGlmIC8qIE1CRURUTFNfU0hBMV9DICovCi0jaWYgZGVmaW5lZChNQkVEVExTX1NIQTUxMl9DKQotICAgICAgICAgICAgaWYoIHN0cmNtcCggcSwgIlNIQTM4NCIgKSA9PSAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvcHQubWRfYWxnID0gTUJFRFRMU19NRF9TSEEzODQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBpZiggc3RyY21wKCBxLCAiU0hBNTEyIiApID09IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9wdC5tZF9hbGcgPSBNQkVEVExTX01EX1NIQTUxMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZiAvKiBNQkVEVExTX1NIQTUxMl9DICovCi0gICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWJlZHRsc19wcmludGYoICJJbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gJXNcbiIsIHAgKTsKICAgICAgICAgICAgICAgICBnb3RvIHVzYWdlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgb3B0Lm1kX2FsZyA9IG1iZWR0bHNfbWRfZ2V0X3R5cGUoIG1kX2luZm8gKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJrZXlfdXNhZ2UiICkgPT0gMCApCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3g1MDkvY2VydF93cml0ZS5jIGIvcHJvZ3JhbXMveDUwOS9jZXJ0X3dyaXRlLmMKaW5kZXggMWVlYjg2MS4uMTgxNzRkOCAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMveDUwOS9jZXJ0X3dyaXRlLmMKKysrIGIvcHJvZ3JhbXMveDUwOS9jZXJ0X3dyaXRlLmMKQEAgLTExOCw4ICsxMTgsOSBAQAogICAgICIgICAgaXNfY2E9JSVkICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGRpc2FibGVkKVxuIiAgXAogICAgICIgICAgbWF4X3BhdGhsZW49JSVkICAgICAgICAgIGRlZmF1bHQ6IC0xIChub25lKVxuIiAgICAgXAogICAgICIgICAgbWQ9JSVzICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFNIQTI1NlxuIiAgICAgICAgXAotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkIHZhbHVlczpcbiIgICAgICAgXAotICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUQyLCBNRDQsIE1ENSwgU0hBMSwgU0hBMjU2LCBTSEE1MTJcbiJcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWQgdmFsdWVzIChpZiBlbmFibGVkKTpcbiIgICAgICBcCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRDIsIE1ENCwgTUQ1LCBSSVBFTUQxNjAsIFNIQTEsXG4iIFwKKyAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIQTIyNCwgU0hBMjU2LCBTSEEzODQsIFNIQTUxMlxuIiBcCiAgICAgIiAgICB2ZXJzaW9uPSUlZCAgICAgICAgICAgICAgZGVmYXVsdDogM1xuIiAgICAgICAgICAgIFwKICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlIHZhbHVlczogMSwgMiwgM1xuIlwKICAgICAiICAgIHN1YmplY3RfaWRlbnRpZmllcj0lJXMgICBkZWZhdWx0OiAxXG4iICAgICAgICAgICAgIFwKQEAgLTM1MywyNyArMzU0LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiggc3RyY21wKCBwLCAibWQiICkgPT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKCBzdHJjbXAoIHEsICJTSEExIiApID09IDAgKQotICAgICAgICAgICAgICAgIG9wdC5tZCA9IE1CRURUTFNfTURfU0hBMTsKLSAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIlNIQTIyNCIgKSA9PSAwICkKLSAgICAgICAgICAgICAgICBvcHQubWQgPSBNQkVEVExTX01EX1NIQTIyNDsKLSAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIlNIQTI1NiIgKSA9PSAwICkKLSAgICAgICAgICAgICAgICBvcHQubWQgPSBNQkVEVExTX01EX1NIQTI1NjsKLSAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIlNIQTM4NCIgKSA9PSAwICkKLSAgICAgICAgICAgICAgICBvcHQubWQgPSBNQkVEVExTX01EX1NIQTM4NDsKLSAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIlNIQTUxMiIgKSA9PSAwICkKLSAgICAgICAgICAgICAgICBvcHQubWQgPSBNQkVEVExTX01EX1NIQTUxMjsKLSAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIk1EMiIgKSA9PSAwICkKLSAgICAgICAgICAgICAgICBvcHQubWQgPSBNQkVEVExTX01EX01EMjsKLSAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIk1ENCIgKSA9PSAwICkKLSAgICAgICAgICAgICAgICBvcHQubWQgPSBNQkVEVExTX01EX01ENDsKLSAgICAgICAgICAgIGVsc2UgaWYoIHN0cmNtcCggcSwgIk1ENSIgKSA9PSAwICkKLSAgICAgICAgICAgICAgICBvcHQubWQgPSBNQkVEVExTX01EX01ENTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvID0KKyAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2luZm9fZnJvbV9zdHJpbmcoIHEgKTsKKyAgICAgICAgICAgIGlmKCBtZF9pbmZvID09IE5VTEwgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG1iZWR0bHNfcHJpbnRmKCAiSW52YWxpZCBhcmd1bWVudCBmb3Igb3B0aW9uICVzXG4iLCBwICk7CiAgICAgICAgICAgICAgICAgZ290byB1c2FnZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9wdC5tZCA9IG1iZWR0bHNfbWRfZ2V0X3R5cGUoIG1kX2luZm8gKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmKCBzdHJjbXAoIHAsICJ2ZXJzaW9uIiApID09IDAgKQogICAgICAgICB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2NvbmZpZy5weSBiL3NjcmlwdHMvY29uZmlnLnB5CmluZGV4IDAwYjYxYjMuLjZjMjk5ODEgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY29uZmlnLnB5CisrKyBiL3NjcmlwdHMvY29uZmlnLnB5CkBAIC0xODQsNyArMTg0LDcgQEAKICAgICAnTUJFRFRMU19OT19VREJMX0RJVklTSU9OJywgIyBpbmZsdWVuY2VzIGFueXRoaW5nIHRoYXQgdXNlcyBiaWdudW0KICAgICAnTUJFRFRMU19QS0NTMTFfQycsICMgYnVpbGQgZGVwZW5kZW5jeSAobGlicGtjczExLWhlbHBlcikKICAgICAnTUJFRFRMU19QTEFURk9STV9OT19TVERfRlVOQ1RJT05TJywgIyByZW1vdmVzIGEgZmVhdHVyZQotICAgICdNQkVEVExTX1BTQV9DUllQVE9fS0VZX0ZJTEVfSURfRU5DT0RFU19PV05FUicsICMgcGxhdGZvcm0gZGVwZW5kZW5jeSAoUFNBIFNQTSkgKGF0IHRoaXMgdGltZSkKKyAgICAnTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRycsICMgdG9nZ2xlcyBvbGQvbmV3IHN0eWxlIFBTQSBjb25maWcKICAgICAnTUJFRFRMU19QU0FfQ1JZUFRPX1NQTScsICMgcGxhdGZvcm0gZGVwZW5kZW5jeSAoUFNBIFNQTSkKICAgICAnTUJFRFRMU19QU0FfSU5KRUNUX0VOVFJPUFknLCAjIGJ1aWxkIGRlcGVuZGVuY3kgKGhvb2sgZnVuY3Rpb25zKQogICAgICdNQkVEVExTX1JFTU9WRV8zREVTX0NJUEhFUlNVSVRFUycsICMgcmVtb3ZlcyBhIGZlYXR1cmUKQEAgLTE5Miw2ICsxOTIsOCBAQAogICAgICdNQkVEVExTX1JTQV9OT19DUlQnLCAjIGluZmx1ZW5jZXMgdGhlIHVzZSBvZiBSU0EgaW4gWC41MDkgYW5kIFRMUwogICAgICdNQkVEVExTX1NIQTUxMl9OT19TSEEzODQnLCAjIHJlbW92ZXMgYSBmZWF0dXJlCiAgICAgJ01CRURUTFNfU1NMX0hXX1JFQ09SRF9BQ0NFTCcsICMgYnVpbGQgZGVwZW5kZW5jeSAoaG9vayBmdW5jdGlvbnMpCisgICAgJ01CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX01FTVNBTicsICMgYnVpbGQgZGVwZW5kZW5jeSAoY2xhbmcrbWVtc2FuKQorICAgICdNQkVEVExTX1RFU1RfQ09OU1RBTlRfRkxPV19WQUxHUklORCcsICMgYnVpbGQgZGVwZW5kZW5jeSAodmFsZ3JpbmQgaGVhZGVycykKICAgICAnTUJFRFRMU19URVNUX05VTExfRU5UUk9QWScsICMgcmVtb3ZlcyBhIGZlYXR1cmUKICAgICAnTUJFRFRMU19YNTA5X0FMTE9XX1VOU1VQUE9SVEVEX0NSSVRJQ0FMX0VYVEVOU0lPTicsICMgaW5mbHVlbmNlcyB0aGUgdXNlIG9mIFguNTA5IGluIFRMUwogICAgICdNQkVEVExTX1pMSUJfU1VQUE9SVCcsICMgYnVpbGQgZGVwZW5kZW5jeSAobGlieikKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2VuZXJhdGVfcHNhX2NvbnN0YW50cy5weSBiL3NjcmlwdHMvZ2VuZXJhdGVfcHNhX2NvbnN0YW50cy5weQppbmRleCA5NWRjNGRiLi40MDFjMmZjIDEwMDc1NQotLS0gYS9zY3JpcHRzL2dlbmVyYXRlX3BzYV9jb25zdGFudHMucHkKKysrIGIvc2NyaXB0cy9nZW5lcmF0ZV9wc2FfY29uc3RhbnRzLnB5CkBAIC00MTEsNyArNDExLDcgQEAKICAgICB0ZW1wX2ZpbGVfbmFtZSA9IG91dHB1dF9maWxlX25hbWUgKyAnLnRtcCcKICAgICB3aXRoIG9wZW4odGVtcF9maWxlX25hbWUsICd3JykgYXMgb3V0cHV0X2ZpbGU6CiAgICAgICAgIGNvbGxlY3Rvci53cml0ZV9maWxlKG91dHB1dF9maWxlKQotICAgIG9zLnJlbmFtZSh0ZW1wX2ZpbGVfbmFtZSwgb3V0cHV0X2ZpbGVfbmFtZSkKKyAgICBvcy5yZXBsYWNlKHRlbXBfZmlsZV9uYW1lLCBvdXRwdXRfZmlsZV9uYW1lKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKCdwcm9ncmFtcycpIGFuZCBvcy5wYXRoLmlzZGlyKCcuLi9wcm9ncmFtcycpOgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5lcmF0ZV92aXN1YWxjX2ZpbGVzLnBsIGIvc2NyaXB0cy9nZW5lcmF0ZV92aXN1YWxjX2ZpbGVzLnBsCmluZGV4IDNkNGJhY2EuLjZjMmI1ZTQgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvZ2VuZXJhdGVfdmlzdWFsY19maWxlcy5wbAorKysgYi9zY3JpcHRzL2dlbmVyYXRlX3Zpc3VhbGNfZmlsZXMucGwKQEAgLTM5LDYgKzM5LDcgQEAKIG15ICRzb3VyY2VfZGlyID0gJ2xpYnJhcnknOwogbXkgJHRlc3Rfc291cmNlX2RpciA9ICd0ZXN0cy9zcmMnOwogbXkgJHRlc3RfaGVhZGVyX2RpciA9ICd0ZXN0cy9pbmNsdWRlL3Rlc3QnOworbXkgJHRlc3RfZHJpdmVyc19oZWFkZXJfZGlyID0gJ3Rlc3RzL2luY2x1ZGUvdGVzdC9kcml2ZXJzJzsKIAogbXkgQHRoaXJkcGFydHlfaGVhZGVyX2RpcnMgPSBxdygKICAgICAzcmRwYXJ0eS9ldmVyZXN0L2luY2x1ZGUvZXZlcmVzdApAQCAtMTE2LDYgKzExNyw3IEBACiAgICAgICAgICYmIC1kICRzb3VyY2VfZGlyCiAgICAgICAgICYmIC1kICR0ZXN0X3NvdXJjZV9kaXIKICAgICAgICAgJiYgLWQgJHRlc3RfaGVhZGVyX2RpcgorICAgICAgICAmJiAtZCAkdGVzdF9kcml2ZXJzX2hlYWRlcl9kaXIKICAgICAgICAgJiYgLWQgJHByb2dyYW1zX2RpcjsKIH0KIApAQCAtMjYyLDYgKzI2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICRtYmVkdGxzX2hlYWRlcl9kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICRwc2FfaGVhZGVyX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgJHRlc3RfaGVhZGVyX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgJHRlc3RfZHJpdmVyc19oZWFkZXJfZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAkc291cmNlX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgQHRoaXJkcGFydHlfaGVhZGVyX2RpcnMsCiAgICAgICAgICAgICAgICAgICAgICAgKTsKZGlmZiAtLWdpdCBhL3Rlc3RzLy5naXRpZ25vcmUgYi90ZXN0cy8uZ2l0aWdub3JlCmluZGV4IGQ0OTYxMWMuLmQ5ZjRiNTEgMTAwNjQ0Ci0tLSBhL3Rlc3RzLy5naXRpZ25vcmUKKysrIGIvdGVzdHMvLmdpdGlnbm9yZQpAQCAtMTEsNCArMTEsNSBAQAogaW5jbHVkZS90ZXN0L2luc3RydW1lbnRfcmVjb3JkX3N0YXR1cy5oCiAKIHNyYy8qLm8KK3NyYy9kcml2ZXJzLyoubwogc3JjL2xpYm1iZWQqCmRpZmYgLS1naXQgYS90ZXN0cy9DTWFrZUxpc3RzLnR4dCBiL3Rlc3RzL0NNYWtlTGlzdHMudHh0CmluZGV4IGNjNjg2NjMuLmY4Y2U5MjUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL0NNYWtlTGlzdHMudHh0CisrKyBiL3Rlc3RzL0NNYWtlTGlzdHMudHh0CkBAIC0xLDUgKzEsNSBAQAogc2V0KGxpYnMKLSAgICBtYmVkdGxzCisgICAgJHttYmVkdGxzX3RhcmdldH0KICkKIAogIyBTZXQgdGhlIHByb2plY3Qgcm9vdCBkaXJlY3RvcnkgaWYgaXQncyBub3QgYWxyZWFkeSBkZWZpbmVkLCBhcyBtYXkgaGFwcGVuIGlmCkBAIC00Myw3ICs0Myw3IEBACiAgICAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAgICBPVVRQVVQgdGVzdF9zdWl0ZV8ke2RhdGFfbmFtZX0uYwogICAgICAgICBDT01NQU5EICR7TUJFRFRMU19QWVRIT05fRVhFQ1VUQUJMRX0gJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3NjcmlwdHMvZ2VuZXJhdGVfdGVzdF9jb2RlLnB5IC1mICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdWl0ZXMvdGVzdF9zdWl0ZV8ke3N1aXRlX25hbWV9LmZ1bmN0aW9uIC1kICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdWl0ZXMvdGVzdF9zdWl0ZV8ke2RhdGFfbmFtZX0uZGF0YSAtdCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbiAtcCAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3VpdGVzL2hvc3RfdGVzdC5mdW5jdGlvbiAtcyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3VpdGVzIC0taGVscGVycy1maWxlICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdWl0ZXMvaGVscGVycy5mdW5jdGlvbiAtbyAuCi0gICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3NjcmlwdHMvZ2VuZXJhdGVfdGVzdF9jb2RlLnB5IG1iZWR0bHMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3N1aXRlcy9oZWxwZXJzLmZ1bmN0aW9uICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdWl0ZXMvaG9zdF90ZXN0LmZ1bmN0aW9uICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdWl0ZXMvdGVzdF9zdWl0ZV8ke3N1aXRlX25hbWV9LmZ1bmN0aW9uICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zdWl0ZXMvdGVzdF9zdWl0ZV8ke2RhdGFfbmFtZX0uZGF0YQorICAgICAgICBERVBFTkRTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zY3JpcHRzL2dlbmVyYXRlX3Rlc3RfY29kZS5weSAke21iZWR0bHNfdGFyZ2V0fSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3N1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24gJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3N1aXRlcy9ob3N0X3Rlc3QuZnVuY3Rpb24gJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3N1aXRlcy90ZXN0X3N1aXRlXyR7c3VpdGVfbmFtZX0uZnVuY3Rpb24gJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3N1aXRlcy90ZXN0X3N1aXRlXyR7ZGF0YV9uYW1lfS5kYXRhCiAgICAgKQogCiAgICAgYWRkX2V4ZWN1dGFibGUodGVzdF9zdWl0ZV8ke2RhdGFfbmFtZX0gdGVzdF9zdWl0ZV8ke2RhdGFfbmFtZX0uYyAkPFRBUkdFVF9PQkpFQ1RTOm1iZWR0bHNfdGVzdD4pCkBAIC0xNjYsNiArMTY2LDcgQEAKICAgICAgICAgbGlua190b19zb3VyY2Uoc2VlZGZpbGUpCiAgICAgZW5kaWYoKQogICAgIGxpbmtfdG9fc291cmNlKGNvbXBhdC5zaCkKKyAgICBsaW5rX3RvX3NvdXJjZShjb250ZXh0LWluZm8uc2gpCiAgICAgbGlua190b19zb3VyY2UoZGF0YV9maWxlcykKICAgICBsaW5rX3RvX3NvdXJjZShzY3JpcHRzKQogICAgIGxpbmtfdG9fc291cmNlKHNzbC1vcHQuc2gpCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZSBiL3Rlc3RzL01ha2VmaWxlCmluZGV4IGZmYTQ4MTIuLjUxMWRiOWQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlCisrKyBiL3Rlc3RzL01ha2VmaWxlCkBAIC04MCw3ICs4MCw3IEBACiAkKE1CRURMSUJTKToKIAkkKE1BS0UpIC1DIC4uL2xpYnJhcnkKIAotTUJFRFRMU19URVNUX09CSlM9JChwYXRzdWJzdCAlLmMsJS5vLCQod2lsZGNhcmQgc3JjLyouYykpCitNQkVEVExTX1RFU1RfT0JKUz0kKHBhdHN1YnN0ICUuYywlLm8sJCh3aWxkY2FyZCBzcmMvKi5jIHNyYy9kcml2ZXJzLyouYykpCiAKIG1iZWR0bHNfdGVzdDogJChNQkVEVExTX1RFU1RfT0JKUykKIApAQCAtODksNiArODksMTAgQEAKIAllY2hvICIgIENDICAgICQ8IgogCSQoQ0MpICQoTE9DQUxfQ0ZMQUdTKSAkKENGTEFHUykgLW8gJEAgLWMgJDwKIAorc3JjL2RyaXZlcnMvJS5vIDogc3JjL2RyaXZlcnMvJS5jCisJZWNobyAiICBDQyAgICAkPCIKKwkkKENDKSAkKExPQ0FMX0NGTEFHUykgJChDRkxBR1MpIC1vICRAIC1jICQ8CisKIENfRklMRVMgOj0gJChhZGRzdWZmaXggLmMsJChBUFBTKSkKIAogIyBXaWxkY2FyZCB0YXJnZXQgZm9yIHRlc3QgY29kZSBnZW5lcmF0aW9uOgpAQCAtMTMwLDEyICsxMzQsMTMgQEAKIGNsZWFuOgogaWZuZGVmIFdJTkRPV1MKIAlybSAtcmYgJChCSU5BUklFUykgKi5jICouZGF0YXggVEVTVFMKLQlybSAtZiBzcmMvKi5vIHNyYy9saWJtYmVkKgorCXJtIC1mIHNyYy8qLm8gc3JjL2RyaXZlcnMvKi5vIHNyYy9saWJtYmVkKgogZWxzZQogCWlmIGV4aXN0ICouYyBkZWwgL1EgL0YgKi5jCiAJaWYgZXhpc3QgKi5leGUgZGVsIC9RIC9GICouZXhlCiAJaWYgZXhpc3QgKi5kYXRheCBkZWwgL1EgL0YgKi5kYXRheAogCWlmIGV4aXN0IHNyYy8qLm8gZGVsIC9RIC9GIHNyYy8qLm8KKwlpZiBleGlzdCBzcmMvZHJpdmVycy8qLm8gZGVsIC9RIC9GIHNyYy9kcml2ZXJzLyoubwogCWlmIGV4aXN0IHNyYy9saWJtYmVkKiBkZWwgL1EgL0Ygc3JjL2xpYm1lZCoKIGlmbmVxICgkKHdpbGRjYXJkIFRFU1RTLy4qKSwpCiAJcm1kaXIgL1EgL1MgVEVTVFMKZGlmZiAtLWdpdCBhL3Rlc3RzL2NvbnRleHQtaW5mby5zaCBiL3Rlc3RzL2NvbnRleHQtaW5mby5zaAppbmRleCBjYzVkNmVhLi4zNDY1Mjk4IDEwMDc1NQotLS0gYS90ZXN0cy9jb250ZXh0LWluZm8uc2gKKysrIGIvdGVzdHMvY29udGV4dC1pbmZvLnNoCkBAIC00MzAsNiArNDMwLDExIEBACiAgICAgICAgICAtdSAiVG9vIG1hbnkgYmFkIHN5bWJvbHMgZGV0ZWN0ZWQuIEZpbGUgY2hlY2sgYWJvcnRlZCIgXAogICAgICAgICAgLW4gIkRlc2VyaWFsaXppbmciCiAKK3J1bl90ZXN0ICJEZWNvZGVyIGNvbnRpbnVlcyBwYXN0IDB4ZmYgY2hhcmFjdGVyIiBcCisgICAgICAgICAiZGVmX2I2NF9mZi5iaW4iIFwKKyAgICAgICAgIC1uICJObyB2YWxpZCBiYXNlNjQiIFwKKyAgICAgICAgIC11ICJjaXBoZXJzdWl0ZS4qIFRMUy0iCisKIAogIyBFbmQgb2YgdGVzdHMKIApkaWZmIC0tZ2l0IGEvdGVzdHMvZGF0YV9maWxlcy9NYWtlZmlsZSBiL3Rlc3RzL2RhdGFfZmlsZXMvTWFrZWZpbGUKaW5kZXggODhmMjY1Yy4uYmYyZjUzOCAxMDA2NDQKLS0tIGEvdGVzdHMvZGF0YV9maWxlcy9NYWtlZmlsZQorKysgYi90ZXN0cy9kYXRhX2ZpbGVzL01ha2VmaWxlCkBAIC0xMyw4ICsxMywxMCBAQAogIyMgVG9vbHMKIE9QRU5TU0wgPz0gb3BlbnNzbAogRkFLRVRJTUUgPz0gZmFrZXRpbWUKLU1CRURUTFNfQ0VSVF9XUklURSA/PSAkKFBXRCkvLi4vLi4vcHJvZ3JhbXMveDUwOS9jZXJ0X3dyaXRlCi1NQkVEVExTX0NFUlRfUkVRID89ICQoUFdEKS8uLi8uLi9wcm9ncmFtcy94NTA5L2NlcnRfcmVxCisKK1RPUF9ESVIgPSAuLi8uLgorTUJFRFRMU19DRVJUX1dSSVRFID89ICQoVE9QX0RJUikvcHJvZ3JhbXMveDUwOS9jZXJ0X3dyaXRlCitNQkVEVExTX0NFUlRfUkVRID89ICQoVE9QX0RJUikvcHJvZ3JhbXMveDUwOS9jZXJ0X3JlcQogCiAKICMjIEJ1aWxkIHRoZSBnZW5lcmF0ZWQgdGVzdCBkYXRhLiBOb3RlIHRoYXQgc2luY2UgdGhlIGZpbmFsIG91dHB1dHMKZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGFfZmlsZXMvYmFzZTY0L2RlZl9iNjRfZmYuYmluIGIvdGVzdHMvZGF0YV9maWxlcy9iYXNlNjQvZGVmX2I2NF9mZi5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhYTgyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RhdGFfZmlsZXMvYmFzZTY0L2RlZl9iNjRfZmYuYmluCkBAIC0wLDAgKzEsNSBAQAorLy8gRW5zdXJlIHRoYXQgdGhlIGI2NCBwYXJzZXIgY29udGludWVzIGFmdGVyIGVuY291bnRlcmluZyBhIDB4RkYKKy8vIGNoYXJhY3Rlci4gIE5vdGUgdGhhdCB0aGlzIGJ5dGUgaXMgaW52YWxpZCBVVEYtOCwgbWFraW5nIHRoaXMKKy8vIGVudGlyZSBmaWxlIGludmFsaWQgVVRGLTguICBVc2UgY2FyZSB3aGVuIGVkaXRpbmcuCisvLyAtPiD/IDwtCitBaFVBQUg4QUFBNEFBQUJ0QUFBQUFGNkhReDNNcUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNHMlFiSGJVajhlR3BkeDVLVkllYml3azBqdlJqOS8zbTZCT1N6cEE3cUJYZUV1bmhxcjNEMTFORTdjaUdqZUhNQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQVY2SFF4MjQ4TDc3UkgwWjk3M3RTWU5ROHpCc3o4NjFDWkc1L1QwOVRKejNYb2RESGUvaUorY2dYYjVBbjN6VGRuVEJ0dzNFV0FiNjhUK2dDRTMzR044QUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUF3QUFBUUFBQUFBQUFnQUFBQT09CmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQyLmNzciBiL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9tZDIuY3NyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YzM5YmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQyLmNzcgpAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ2dUQ0NBV2tDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9NQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUUREQkZRYjJ4aGNsTlRUQ0JEWlhKMElFMUVNakNDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQU1oMHhNeTUrYlY1NlVYWkZHQ3dmYnVUOG1zZW56T3REWStLUEZabDVkeEUyY3htaFFmVgorK0Nld1NqWFFZNTRLYmh1MzJ2QitxKzRNRUpPR1NSZzA4NmdxMGxmMUx0UXZkeW1FWVUyQ1VJK25sVWh3OVc1Tgorc3RVVHc5SWE3ZVpENmtJVTYzVHF3TzBmMUZkT3FmT283ZExnd1RCeE1ESXcxZFAyQ05CV1QwYU84bC81UFdlUgoraURBdVFyTGZmZnZsREhmLzdESEFlSSsvd24vS3JXd2gxbzNaaTJxT2IrQ2IrQkJXekxPT0V4WG1OQVJteCs3NQorTmc1cWxmWUptZ1puOUdWeCtNcWtzU1hnL2p5TE5RUm51dUJQZG9YOGYvdzJhN1hwelMwRFlrNnpQUURQcjNhZworYVZhRGF0S28xT2RRY2VhMU5nVjNCVzE3eU9URS9VelZJVjhDQXdFQUFhQUFNQTBHQ1NxR1NJYjNEUUVCQWdVQQorQTRJQkFRQlBVcW9kUmNIMlpVYThBM2ZRWC9ueHJJd1dpTG1ROUJhT0k2Rzd2ekVXVkUxc3hta3JIUCtwWGdpOQorMWVGY2VOOXhVQktFZCtMbVVQbUhwT2JaNG53UlNwckZqM0RlSVhwbjlhU0JyK2pHWThSYWFDOWNNa2FTcTVNYgorcTY1VEhFSjF4ZW1JZlp2Ymhqdk5pL3ljWFh1L3YxR3BqNjJkcElGR2JtK280QVhRRjJvY1lHRU0rWDF1MmVWbgorbW51dXZQQUhUbGxHakIwZGFUU1lvUXRNeTNsdVBVRWowWWN0M2lWUjFwVWVUckhjaE9zOXA1QUNEWmNmNkQzeAorc205YXRIMlpJYVhvMWM5U3FIemRrL3VMdC9Dd3hRcm4xV1UxaW53T2t6amltMllxOXZXZ3BReXBmR1pkU2NYVgorb0hPbXVHRzkwMVdNTWVtelpYam9MaSs4WnBWTAorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQ0LmNzciBiL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9tZDQuY3NyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTNkYmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQ0LmNzcgpAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ2dUQ0NBV2tDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9NQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUUREQkZRYjJ4aGNsTlRUQ0JEWlhKMElFMUVORENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQU1oMHhNeTUrYlY1NlVYWkZHQ3dmYnVUOG1zZW56T3REWStLUEZabDVkeEUyY3htaFFmVgorK0Nld1NqWFFZNTRLYmh1MzJ2QitxKzRNRUpPR1NSZzA4NmdxMGxmMUx0UXZkeW1FWVUyQ1VJK25sVWh3OVc1Tgorc3RVVHc5SWE3ZVpENmtJVTYzVHF3TzBmMUZkT3FmT283ZExnd1RCeE1ESXcxZFAyQ05CV1QwYU84bC81UFdlUgoraURBdVFyTGZmZnZsREhmLzdESEFlSSsvd24vS3JXd2gxbzNaaTJxT2IrQ2IrQkJXekxPT0V4WG1OQVJteCs3NQorTmc1cWxmWUptZ1puOUdWeCtNcWtzU1hnL2p5TE5RUm51dUJQZG9YOGYvdzJhN1hwelMwRFlrNnpQUURQcjNhZworYVZhRGF0S28xT2RRY2VhMU5nVjNCVzE3eU9URS9VelZJVjhDQXdFQUFhQUFNQTBHQ1NxR1NJYjNEUUVCQXdVQQorQTRJQkFRQXp0UmIrdkFlY3ZoZWxoc3p6Q2N0em1oR3M0VEdtcjloNHpkZFpvUThkVGR5MU9Dc25tVSt5ejNvaAorb2lRank3VVBMdDhEUzJaS2hHaHZ3UHZ0d0ZoNWljTVdRVm52MmtFNEV2ejh4SlQxMlZSdytVNkw1cmZLbWYvTAorbVZOeHN1azE3TUR5QmNNbHd1TmsrQ0hyWVZkclhoU1dVSDNVQ1FRVUgxaXFxQk1LbU5pUGExVUdVMGJ1ZFo5WAorSFpqbjl1cXl5T0d5OGwzaGZmcWpEeHNEalp5QkRmNWFxS0lkbnZ1a2RyVWlhY1BkVVlWRjBmd0s4ZDEvMVBBOQorZEE0SmpUdnordFRLNm1MOUljOVB2KzY0djF2d01VNFF1OElKSGs1eDNJMGU3S3VLMkEvbEs2YXoyVmI2RkFoNgorTWtHcFdCNjhUOEZSQm9WcldMT2grYTl5Tnd5cAorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQ1LmNzciBiL3Rlc3RzL2RhdGFfZmlsZXMvY2VydF9tZDUuY3NyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNjc5MmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kYXRhX2ZpbGVzL2NlcnRfbWQ1LmNzcgpAQCAtMCwwICsxLDE2IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQorTUlJQ2dUQ0NBV2tDQVFBd1BERUxNQWtHQTFVRUJoTUNUa3d4RVRBUEJnTlZCQW9NQ0ZCdmJHRnlVMU5NTVJvdworR0FZRFZRUUREQkZRYjJ4aGNsTlRUQ0JEWlhKMElFMUVOVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUAorQURDQ0FRb0NnZ0VCQU1oMHhNeTUrYlY1NlVYWkZHQ3dmYnVUOG1zZW56T3REWStLUEZabDVkeEUyY3htaFFmVgorK0Nld1NqWFFZNTRLYmh1MzJ2QitxKzRNRUpPR1NSZzA4NmdxMGxmMUx0UXZkeW1FWVUyQ1VJK25sVWh3OVc1Tgorc3RVVHc5SWE3ZVpENmtJVTYzVHF3TzBmMUZkT3FmT283ZExnd1RCeE1ESXcxZFAyQ05CV1QwYU84bC81UFdlUgoraURBdVFyTGZmZnZsREhmLzdESEFlSSsvd24vS3JXd2gxbzNaaTJxT2IrQ2IrQkJXekxPT0V4WG1OQVJteCs3NQorTmc1cWxmWUptZ1puOUdWeCtNcWtzU1hnL2p5TE5RUm51dUJQZG9YOGYvdzJhN1hwelMwRFlrNnpQUURQcjNhZworYVZhRGF0S28xT2RRY2VhMU5nVjNCVzE3eU9URS9VelZJVjhDQXdFQUFhQUFNQTBHQ1NxR1NJYjNEUUVCQkFVQQorQTRJQkFRQk5FdnhnbjNQYzYyaHNNZ016MzNJZGVOcGF6ZUszYWUyZ3dRUUZnTDdxTXAva3NrZnBJS0Y0bThlQgorWXJtaktuOWNxc3pSRDYwNi9adFdZRHdJTlVVYzZPN2JRR21wR0lGZDdiU1BtL3Bic2FqYzZSN2t6QS90RC9iaworRzV6cXU5QmoweDkyaEV3ZGt1MHpZK0h4OVBnVDJkSzhNNzJpRnlsSEJ3VDNYMXROeVhoaDd4V0o5UmxBZlN2TgorS2RTNnMza1JqSzRxY2lyME1uZmxWNWYySEQ2cjF2OWNTVnltZTZlVkx2T211cDg5ejBjaWhIN05Ed0RKYVliaQorb3FjS1hGYnJvOC8ycnVFelBVUzZVOE5BOWNqbFg5RFc4YnVJdTRjUUFDVng1WWV2bHdLb2F5WWZYY1JSdklGbworT0xpUHExNFR1WmozYzArSEZPeFdqNFVCQWp2SQorLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9pbmNsdWRlL3Rlc3QvY29uc3RhbnRfZmxvdy5oIGIvdGVzdHMvaW5jbHVkZS90ZXN0L2NvbnN0YW50X2Zsb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjY0MDExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaW5jbHVkZS90ZXN0L2NvbnN0YW50X2Zsb3cuaApAQCAtMCwwICsxLDgxIEBACisvKioKKyAqIFxmaWxlIGNvbnN0YW50X2Zsb3cuaAorICoKKyAqIFxicmllZiAgIFRoaXMgZmlsZSBjb250YWlucyB0b29scyB0byBlbnN1cmUgdGVzdGVkIGNvZGUgaGFzIGNvbnN0YW50IGZsb3cuCisgKi8KKworLyoKKyAqICBDb3B5cmlnaHQgVGhlIE1iZWQgVExTIENvbnRyaWJ1dG9ycworICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIFRFU1RfQ09OU1RBTlRfRkxPV19ICisjZGVmaW5lIFRFU1RfQ09OU1RBTlRfRkxPV19ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgdHdvIG1hY3JvcworICoKKyAqICAjZGVmaW5lIFRFU1RfQ0ZfU0VDUkVUKHB0ciwgc2l6ZSkKKyAqICAjZGVmaW5lIFRFU1RfQ0ZfUFVCTElDKHB0ciwgc2l6ZSkKKyAqCisgKiB0aGF0IGNhbiBiZSB1c2VkIGluIHRlc3RzIHRvIG1hcmsgYSBtZW1vcnkgYXJlYSBhcyBzZWNyZXQgKG5vIGJyYW5jaCBvcgorICogbWVtb3J5IGFjY2VzcyBzaG91bGQgZGVwZW5kIG9uIGl0KSBvciBwdWJsaWMgKGRlZmF1bHQsIG9ubHkgbmVlZHMgdG8gYmUKKyAqIG1hcmtlZCBleHBsaWNpdGx5IHdoZW4gaXQgd2FzIGRlcml2ZWQgZnJvbSBzZWNyZXQgZGF0YSkuCisgKgorICogQXJndW1lbnRzOgorICogLSBwdHI6IGEgcG9pbnRlciB0byB0aGUgbWVtb3J5IGFyZWEgdG8gYmUgbWFya2VkCisgKiAtIHNpemU6IHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBtZW1vcnkgYXJlYQorICoKKyAqIEltcGxlbWVudGF0aW9uOgorICogVGhlIGJhc2ljIGlkZWEgaXMgdGhhdCBvZiBjdGdyaW5kIDxodHRwczovL2dpdGh1Yi5jb20vYWdsL2N0Z3JpbmQ+OiB3ZSBjYW4KKyAqIHJlLXVzZSB0b29scyB0aGF0IHdlcmUgZGVzaWduZWQgZm9yIGNoZWNraW5nIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4KKyAqIFRoaXMgZmlsZSBjb250YWlucyB0d28gaW1wbGVtZW50YXRpb25zOiBvbmUgYmFzZWQgb24gTWVtb3J5U2FuaXRpemVyLCB0aGUKKyAqIG90aGVyIG9uIHZhbGdyaW5kJ3MgbWVtY2hlY2suIElmIG5vbmUgb2YgdGhlbSBpcyBlbmFibGVkLCBkdW1teSBtYWNyb3MgdGhhdAorICogZG8gbm90aGluZyBhcmUgZGVmaW5lZCBmb3IgY29udmVuaWVuY2UuCisgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19URVNUX0NPTlNUQU5UX0ZMT1dfTUVNU0FOKQorI2luY2x1ZGUgPHNhbml0aXplci9tc2FuX2ludGVyZmFjZS5oPgorCisvKiBVc2UgbWFjcm9zIHRvIGF2b2lkIG1lc3NpbmcgdXAgd2l0aCBvcmlnaW4gdHJhY2tpbmcgKi8KKyNkZWZpbmUgVEVTVF9DRl9TRUNSRVQgIF9fbXNhbl9hbGxvY2F0ZWRfbWVtb3J5CisvLyB2b2lkIF9fbXNhbl9hbGxvY2F0ZWRfbWVtb3J5KGNvbnN0IHZvbGF0aWxlIHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKKyNkZWZpbmUgVEVTVF9DRl9QVUJMSUMgIF9fbXNhbl91bnBvaXNvbgorLy8gdm9pZCBfX21zYW5fdW5wb2lzb24oY29uc3Qgdm9sYXRpbGUgdm9pZCAqYSwgc2l6ZV90IHNpemUpOworCisjZWxpZiBkZWZpbmVkKE1CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX1ZBTEdSSU5EKQorI2luY2x1ZGUgPHZhbGdyaW5kL21lbWNoZWNrLmg+CisKKyNkZWZpbmUgVEVTVF9DRl9TRUNSRVQgIFZBTEdSSU5EX01BS0VfTUVNX1VOREVGSU5FRAorLy8gVkFMR1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVEKF9xenpfYWRkciwgX3F6el9sZW4pCisjZGVmaW5lIFRFU1RfQ0ZfUFVCTElDICBWQUxHUklORF9NQUtFX01FTV9ERUZJTkVECisvLyBWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKF9xenpfYWRkciwgX3F6el9sZW4pCisKKyNlbHNlIC8qIE1CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX01FTVNBTiB8fAorICAgICAgICAgTUJFRFRMU19URVNUX0NPTlNUQU5UX0ZMT1dfVkFMR1JJTkQgKi8KKworI2RlZmluZSBURVNUX0NGX1NFQ1JFVChwdHIsIHNpemUpCisjZGVmaW5lIFRFU1RfQ0ZfUFVCTElDKHB0ciwgc2l6ZSkKKworI2VuZGlmIC8qIE1CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX01FTVNBTiB8fAorICAgICAgICAgIE1CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX1ZBTEdSSU5EICovCisKKyNlbmRpZiAvKiBURVNUX0NPTlNUQU5UX0ZMT1dfSCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMvaW5jbHVkZS90ZXN0L2RyaXZlcnMvY2lwaGVyLmggYi90ZXN0cy9pbmNsdWRlL3Rlc3QvZHJpdmVycy9jaXBoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjc4N2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaW5jbHVkZS90ZXN0L2RyaXZlcnMvY2lwaGVyLmgKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBUZXN0IGRyaXZlciBmb3IgY2lwaGVyIGZ1bmN0aW9ucworICovCisvKiAgQ29weXJpZ2h0IFRoZSBNYmVkIFRMUyBDb250cmlidXRvcnMKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSU19DSVBIRVJfSAorI2RlZmluZSBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSU19DSVBIRVJfSAorCisjaWYgIWRlZmluZWQoTUJFRFRMU19DT05GSUdfRklMRSkKKyNpbmNsdWRlICJtYmVkdGxzL2NvbmZpZy5oIgorI2Vsc2UKKyNpbmNsdWRlIE1CRURUTFNfQ09ORklHX0ZJTEUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChQU0FfQ1JZUFRPX0RSSVZFUl9URVNUKQorI2luY2x1ZGUgPHBzYS9jcnlwdG9fZHJpdmVyX2NvbW1vbi5oPgorCisjaW5jbHVkZSAibWJlZHRscy9jaXBoZXIuaCIKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnOworICAgIHVuc2lnbmVkIGludCBrZXlfc2V0IDogMTsKKyAgICB1bnNpZ25lZCBpbnQgaXZfcmVxdWlyZWQgOiAxOworICAgIHVuc2lnbmVkIGludCBpdl9zZXQgOiAxOworICAgIHVpbnQ4X3QgaXZfc2l6ZTsKKyAgICB1aW50OF90IGJsb2NrX3NpemU7CisgICAgbWJlZHRsc19jaXBoZXJfY29udGV4dF90IGNpcGhlcjsKK30gdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfb3BlcmF0aW9uX3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIHVuc2lnbmVkIGludCBpbml0aWFsaXNlZCA6IDE7CisgICAgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfb3BlcmF0aW9uX3QgY3R4OworfSB0ZXN0X29wYXF1ZV9jaXBoZXJfb3BlcmF0aW9uX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiBJZiBub24tbnVsbCwgb24gc3VjY2VzcywgY29weSB0aGlzIHRvIHRoZSBvdXRwdXQuICovCisgICAgdm9pZCAqZm9yY2VkX291dHB1dDsKKyAgICBzaXplX3QgZm9yY2VkX291dHB1dF9sZW5ndGg7CisgICAgLyogSWYgbm90IFBTQV9TVUNDRVNTLCByZXR1cm4gdGhpcyBlcnJvciBjb2RlIGluc3RlYWQgb2YgcHJvY2Vzc2luZyB0aGUKKyAgICAgKiBmdW5jdGlvbiBjYWxsLiAqLworICAgIHBzYV9zdGF0dXNfdCBmb3JjZWRfc3RhdHVzOworICAgIC8qIENvdW50IHRoZSBhbW91bnQgb2YgdGltZXMgb25lIG9mIHRoZSBjaXBoZXIgZHJpdmVyIGZ1bmN0aW9ucyBpcyBjYWxsZWQuICovCisgICAgdW5zaWduZWQgbG9uZyBoaXRzOworfSB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3NfdDsKKworI2RlZmluZSBURVNUX0RSSVZFUl9DSVBIRVJfSU5JVCB7IE5VTEwsIDAsIFBTQV9TVUNDRVNTLCAwIH0KK3N0YXRpYyBpbmxpbmUgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzX3QgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzX2luaXQoIHZvaWQgKQoreworICAgIGNvbnN0IHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rc190IHYgPSBURVNUX0RSSVZFUl9DSVBIRVJfSU5JVDsKKyAgICByZXR1cm4oIHYgKTsKK30KKworZXh0ZXJuIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rc190IHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rczsKKworcHNhX3N0YXR1c190IHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX2VuY3J5cHQoCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAorICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LCBzaXplX3QgaW5wdXRfbGVuZ3RoLAorICAgIHVpbnQ4X3QgKm91dHB1dCwgc2l6ZV90IG91dHB1dF9zaXplLCBzaXplX3QgKm91dHB1dF9sZW5ndGgpOworCitwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfZGVjcnlwdCgKKyAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICBjb25zdCB1aW50OF90ICprZXksIHNpemVfdCBrZXlfbGVuZ3RoLAorICAgIHBzYV9hbGdvcml0aG1fdCBhbGcsCisgICAgY29uc3QgdWludDhfdCAqaW5wdXQsIHNpemVfdCBpbnB1dF9sZW5ndGgsCisgICAgdWludDhfdCAqb3V0cHV0LCBzaXplX3Qgb3V0cHV0X3NpemUsIHNpemVfdCAqb3V0cHV0X2xlbmd0aCk7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9lbmNyeXB0X3NldHVwKAorICAgIHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnKTsKKworcHNhX3N0YXR1c190IHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX2RlY3J5cHRfc2V0dXAoCisgICAgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKKyAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICBjb25zdCB1aW50OF90ICprZXksIHNpemVfdCBrZXlfbGVuZ3RoLAorICAgIHBzYV9hbGdvcml0aG1fdCBhbGcpOworCitwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfYWJvcnQoCisgICAgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbik7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9nZW5lcmF0ZV9pdigKKyAgICB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAorICAgIHVpbnQ4X3QgKml2LAorICAgIHNpemVfdCBpdl9zaXplLAorICAgIHNpemVfdCAqaXZfbGVuZ3RoKTsKKworcHNhX3N0YXR1c190IHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX3NldF9pdigKKyAgICB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAorICAgIGNvbnN0IHVpbnQ4X3QgKml2LAorICAgIHNpemVfdCBpdl9sZW5ndGgpOworCitwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfdXBkYXRlKAorICAgIHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCisgICAgY29uc3QgdWludDhfdCAqaW5wdXQsCisgICAgc2l6ZV90IGlucHV0X2xlbmd0aCwKKyAgICB1aW50OF90ICpvdXRwdXQsCisgICAgc2l6ZV90IG91dHB1dF9zaXplLAorICAgIHNpemVfdCAqb3V0cHV0X2xlbmd0aCk7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9maW5pc2goCisgICAgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKKyAgICB1aW50OF90ICpvdXRwdXQsCisgICAgc2l6ZV90IG91dHB1dF9zaXplLAorICAgIHNpemVfdCAqb3V0cHV0X2xlbmd0aCk7CisKKy8qCisgKiBvcGFxdWUgdmVyc2lvbnMKKyAqLworcHNhX3N0YXR1c190IHRlc3Rfb3BhcXVlX2NpcGhlcl9lbmNyeXB0KAorICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9sZW5ndGgsCisgICAgcHNhX2FsZ29yaXRobV90IGFsZywKKyAgICBjb25zdCB1aW50OF90ICppbnB1dCwgc2l6ZV90IGlucHV0X2xlbmd0aCwKKyAgICB1aW50OF90ICpvdXRwdXQsIHNpemVfdCBvdXRwdXRfc2l6ZSwgc2l6ZV90ICpvdXRwdXRfbGVuZ3RoKTsKKworcHNhX3N0YXR1c190IHRlc3Rfb3BhcXVlX2NpcGhlcl9kZWNyeXB0KAorICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9sZW5ndGgsCisgICAgcHNhX2FsZ29yaXRobV90IGFsZywKKyAgICBjb25zdCB1aW50OF90ICppbnB1dCwgc2l6ZV90IGlucHV0X2xlbmd0aCwKKyAgICB1aW50OF90ICpvdXRwdXQsIHNpemVfdCBvdXRwdXRfc2l6ZSwgc2l6ZV90ICpvdXRwdXRfbGVuZ3RoKTsKKworcHNhX3N0YXR1c190IHRlc3Rfb3BhcXVlX2NpcGhlcl9lbmNyeXB0X3NldHVwKAorICAgIHRlc3Rfb3BhcXVlX2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAorICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9sZW5ndGgsCisgICAgcHNhX2FsZ29yaXRobV90IGFsZyk7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X29wYXF1ZV9jaXBoZXJfZGVjcnlwdF9zZXR1cCgKKyAgICB0ZXN0X29wYXF1ZV9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKKyAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICBjb25zdCB1aW50OF90ICprZXksIHNpemVfdCBrZXlfbGVuZ3RoLAorICAgIHBzYV9hbGdvcml0aG1fdCBhbGcpOworCitwc2Ffc3RhdHVzX3QgdGVzdF9vcGFxdWVfY2lwaGVyX2Fib3J0KAorICAgIHRlc3Rfb3BhcXVlX2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uKTsKKworcHNhX3N0YXR1c190IHRlc3Rfb3BhcXVlX2NpcGhlcl9nZW5lcmF0ZV9pdigKKyAgICB0ZXN0X29wYXF1ZV9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKKyAgICB1aW50OF90ICppdiwKKyAgICBzaXplX3QgaXZfc2l6ZSwKKyAgICBzaXplX3QgKml2X2xlbmd0aCk7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X29wYXF1ZV9jaXBoZXJfc2V0X2l2KAorICAgIHRlc3Rfb3BhcXVlX2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAorICAgIGNvbnN0IHVpbnQ4X3QgKml2LAorICAgIHNpemVfdCBpdl9sZW5ndGgpOworCitwc2Ffc3RhdHVzX3QgdGVzdF9vcGFxdWVfY2lwaGVyX3VwZGF0ZSgKKyAgICB0ZXN0X29wYXF1ZV9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKKyAgICBjb25zdCB1aW50OF90ICppbnB1dCwKKyAgICBzaXplX3QgaW5wdXRfbGVuZ3RoLAorICAgIHVpbnQ4X3QgKm91dHB1dCwKKyAgICBzaXplX3Qgb3V0cHV0X3NpemUsCisgICAgc2l6ZV90ICpvdXRwdXRfbGVuZ3RoKTsKKworcHNhX3N0YXR1c190IHRlc3Rfb3BhcXVlX2NpcGhlcl9maW5pc2goCisgICAgdGVzdF9vcGFxdWVfY2lwaGVyX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCisgICAgdWludDhfdCAqb3V0cHV0LAorICAgIHNpemVfdCBvdXRwdXRfc2l6ZSwKKyAgICBzaXplX3QgKm91dHB1dF9sZW5ndGgpOworCisjZW5kaWYgLyogUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLworI2VuZGlmIC8qIFBTQV9DUllQVE9fVEVTVF9EUklWRVJTX0NJUEhFUl9IICovCmRpZmYgLS1naXQgYS90ZXN0cy9pbmNsdWRlL3Rlc3QvZHJpdmVycy9rZXlfbWFuYWdlbWVudC5oIGIvdGVzdHMvaW5jbHVkZS90ZXN0L2RyaXZlcnMva2V5X21hbmFnZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmYzZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaW5jbHVkZS90ZXN0L2RyaXZlcnMva2V5X21hbmFnZW1lbnQuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogVGVzdCBkcml2ZXIgZm9yIGdlbmVyYXRpbmcgYW5kIHZlcmlmeWluZyBrZXlzLgorICovCisvKiAgQ29weXJpZ2h0IFRoZSBNYmVkIFRMUyBDb250cmlidXRvcnMKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSU19LRVlfTUFOQUdFTUVOVF9ICisjZGVmaW5lIFBTQV9DUllQVE9fVEVTVF9EUklWRVJTX0tFWV9NQU5BR0VNRU5UX0gKKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyNpbmNsdWRlIDxwc2EvY3J5cHRvX2RyaXZlcl9jb21tb24uaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIElmIG5vbi1udWxsLCBvbiBzdWNjZXNzLCBjb3B5IHRoaXMgdG8gdGhlIG91dHB1dC4gKi8KKyAgICB2b2lkICpmb3JjZWRfb3V0cHV0OworICAgIHNpemVfdCBmb3JjZWRfb3V0cHV0X2xlbmd0aDsKKyAgICAvKiBJZiBub3QgUFNBX1NVQ0NFU1MsIHJldHVybiB0aGlzIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBwcm9jZXNzaW5nIHRoZQorICAgICAqIGZ1bmN0aW9uIGNhbGwuICovCisgICAgcHNhX3N0YXR1c190IGZvcmNlZF9zdGF0dXM7CisgICAgLyogQ291bnQgdGhlIGFtb3VudCBvZiB0aW1lcyBvbmUgb2YgdGhlIGtleSBtYW5hZ2VtZW50IGRyaXZlciBmdW5jdGlvbnMKKyAgICAgKiBpcyBjYWxsZWQuICovCisgICAgdW5zaWduZWQgbG9uZyBoaXRzOworfSB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rc190OworCisjZGVmaW5lIFRFU1RfRFJJVkVSX0tFWV9NQU5BR0VNRU5UX0lOSVQgeyBOVUxMLCAwLCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCwgMCB9CitzdGF0aWMgaW5saW5lIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzX3QgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3NfaW5pdCggdm9pZCApCit7CisgICAgY29uc3QgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3NfdCB2ID0gVEVTVF9EUklWRVJfS0VZX01BTkFHRU1FTlRfSU5JVDsKKyAgICByZXR1cm4oIHYgKTsKK30KKworZXh0ZXJuIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzX3QgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3M7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X3RyYW5zcGFyZW50X2dlbmVyYXRlX2tleSgKKyAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICB1aW50OF90ICprZXksIHNpemVfdCBrZXlfc2l6ZSwgc2l6ZV90ICprZXlfbGVuZ3RoICk7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X29wYXF1ZV9nZW5lcmF0ZV9rZXkoCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X3NpemUsIHNpemVfdCAqa2V5X2xlbmd0aCApOworCitwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF92YWxpZGF0ZV9rZXkoY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpiaXRzKTsKKworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSU19LRVlfTUFOQUdFTUVOVF9IICovCmRpZmYgLS1naXQgYS90ZXN0cy9pbmNsdWRlL3Rlc3QvZHJpdmVycy9zaWduYXR1cmUuaCBiL3Rlc3RzL2luY2x1ZGUvdGVzdC9kcml2ZXJzL3NpZ25hdHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYmNiMTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pbmNsdWRlL3Rlc3QvZHJpdmVycy9zaWduYXR1cmUuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogVGVzdCBkcml2ZXIgZm9yIHNpZ25hdHVyZSBmdW5jdGlvbnMuCisgKi8KKy8qICBDb3B5cmlnaHQgVGhlIE1iZWQgVExTIENvbnRyaWJ1dG9ycworICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisgKiAgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCisgKiAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIFBTQV9DUllQVE9fVEVTVF9EUklWRVJTX1NJR05BVFVSRV9ICisjZGVmaW5lIFBTQV9DUllQVE9fVEVTVF9EUklWRVJTX1NJR05BVFVSRV9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisjaW5jbHVkZSA8cHNhL2NyeXB0b19kcml2ZXJfY29tbW9uLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiBJZiBub24tbnVsbCwgb24gc3VjY2VzcywgY29weSB0aGlzIHRvIHRoZSBvdXRwdXQuICovCisgICAgdm9pZCAqZm9yY2VkX291dHB1dDsKKyAgICBzaXplX3QgZm9yY2VkX291dHB1dF9sZW5ndGg7CisgICAgLyogSWYgbm90IFBTQV9TVUNDRVNTLCByZXR1cm4gdGhpcyBlcnJvciBjb2RlIGluc3RlYWQgb2YgcHJvY2Vzc2luZyB0aGUKKyAgICAgKiBmdW5jdGlvbiBjYWxsLiAqLworICAgIHBzYV9zdGF0dXNfdCBmb3JjZWRfc3RhdHVzOworICAgIC8qIENvdW50IHRoZSBhbW91bnQgb2YgdGltZXMgb25lIG9mIHRoZSBzaWduYXR1cmUgZHJpdmVyIGZ1bmN0aW9ucyBpcyBjYWxsZWQuICovCisgICAgdW5zaWduZWQgbG9uZyBoaXRzOworfSB0ZXN0X2RyaXZlcl9zaWduYXR1cmVfaG9va3NfdDsKKworI2RlZmluZSBURVNUX0RSSVZFUl9TSUdOQVRVUkVfSU5JVCB7IE5VTEwsIDAsIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVELCAwIH0KK3N0YXRpYyBpbmxpbmUgdGVzdF9kcml2ZXJfc2lnbmF0dXJlX2hvb2tzX3QgdGVzdF9kcml2ZXJfc2lnbmF0dXJlX2hvb2tzX2luaXQoIHZvaWQgKQoreworICAgIGNvbnN0IHRlc3RfZHJpdmVyX3NpZ25hdHVyZV9ob29rc190IHYgPSBURVNUX0RSSVZFUl9TSUdOQVRVUkVfSU5JVDsKKyAgICByZXR1cm4oIHYgKTsKK30KKworZXh0ZXJuIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV9ob29rc190IHRlc3RfZHJpdmVyX3NpZ25hdHVyZV9zaWduX2hvb2tzOworZXh0ZXJuIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV9ob29rc190IHRlc3RfZHJpdmVyX3NpZ25hdHVyZV92ZXJpZnlfaG9va3M7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X3RyYW5zcGFyZW50X3NpZ25hdHVyZV9zaWduX2hhc2goCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAorICAgIGNvbnN0IHVpbnQ4X3QgKmhhc2gsIHNpemVfdCBoYXNoX2xlbmd0aCwKKyAgICB1aW50OF90ICpzaWduYXR1cmUsIHNpemVfdCBzaWduYXR1cmVfc2l6ZSwgc2l6ZV90ICpzaWduYXR1cmVfbGVuZ3RoICk7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X29wYXF1ZV9zaWduYXR1cmVfc2lnbl9oYXNoKAorICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9sZW5ndGgsCisgICAgcHNhX2FsZ29yaXRobV90IGFsZywKKyAgICBjb25zdCB1aW50OF90ICpoYXNoLCBzaXplX3QgaGFzaF9sZW5ndGgsCisgICAgdWludDhfdCAqc2lnbmF0dXJlLCBzaXplX3Qgc2lnbmF0dXJlX3NpemUsIHNpemVfdCAqc2lnbmF0dXJlX2xlbmd0aCApOworCitwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF9zaWduYXR1cmVfdmVyaWZ5X2hhc2goCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAorICAgIGNvbnN0IHVpbnQ4X3QgKmhhc2gsIHNpemVfdCBoYXNoX2xlbmd0aCwKKyAgICBjb25zdCB1aW50OF90ICpzaWduYXR1cmUsIHNpemVfdCBzaWduYXR1cmVfbGVuZ3RoICk7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X29wYXF1ZV9zaWduYXR1cmVfdmVyaWZ5X2hhc2goCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAorICAgIGNvbnN0IHVpbnQ4X3QgKmhhc2gsIHNpemVfdCBoYXNoX2xlbmd0aCwKKyAgICBjb25zdCB1aW50OF90ICpzaWduYXR1cmUsIHNpemVfdCBzaWduYXR1cmVfbGVuZ3RoICk7CisKKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCisjZW5kaWYgLyogUFNBX0NSWVBUT19URVNUX0RSSVZFUlNfU0lHTkFUVVJFX0ggKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL2luY2x1ZGUvdGVzdC9kcml2ZXJzL3NpemUuaCBiL3Rlc3RzL2luY2x1ZGUvdGVzdC9kcml2ZXJzL3NpemUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZlOTg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaW5jbHVkZS90ZXN0L2RyaXZlcnMvc2l6ZS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBUZXN0IGRyaXZlciBmb3IgY29udGV4dCBzaXplIGZ1bmN0aW9ucworICovCisvKiAgQ29weXJpZ2h0IFRoZSBNYmVkIFRMUyBDb250cmlidXRvcnMKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSU19TSVpFX0gKKyNkZWZpbmUgUFNBX0NSWVBUT19URVNUX0RSSVZFUlNfU0laRV9ICisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisjaW5jbHVkZSA8cHNhL2NyeXB0b19kcml2ZXJfY29tbW9uLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgY29udGV4dDsKK30gdGVzdF9kcml2ZXJfa2V5X2NvbnRleHRfdDsKKworLyoqIFxkZWYgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfQkFTRV9TSVpFCisgKgorICogVGhpcyBtYWNybyByZXR1cm5zIHRoZSBiYXNlIHNpemUgZm9yIHRoZSBrZXkgY29udGV4dC4gSXQgaXMgdGhlIHNpemUgb2YgdGhlCisgKiBkcml2ZXIgc3BlY2lmaWMgaW5mb3JtYXRpb24gc3RvcmVkIGluIGVhY2gga2V5IGNvbnRleHQuCisgKi8KKyNkZWZpbmUgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfQkFTRV9TSVpFICAgICAgICAgIHNpemVvZiggdGVzdF9kcml2ZXJfa2V5X2NvbnRleHRfdCApCisKKy8qKiBcZGVmIFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX0tFWV9QQUlSX1NJWkUKKyAqCisgKiBOdW1iZXIgb2YgYnl0ZXMgaW5jbHVkZWQgaW4gZXZlcnkga2V5IGNvbnRleHQgZm9yIGEga2V5IHBhaXIuCisgKgorICogVGhpcyBwYWlyIHNpemUgaXMgZm9yIGFuIEVDQyAyNTYtYml0IHByaXZhdGUvcHVibGljIGtleSBwYWlyLgorICogQmFzZWQgb24gdGhpcyB2YWx1ZSwgdGhlIHNpemUgb2YgdGhlIHByaXZhdGUga2V5IGNhbiBiZSBkZXJpdmVkIGJ5CisgKiBzdWJ0cmFjdGluZyB0aGUgcHVibGljIGtleSBzaXplIGJlbG93IGZyb20gdGhpcyBvbmUuCisgKi8KKworI2RlZmluZSBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9LRVlfUEFJUl9TSVpFICAgICAgNjUKKworLyoqIFxkZWYgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfUFVCTElDX0tFWV9TSVpFCisgKgorICogTnVtYmVyIG9mIGJ5dGVzIGluY2x1ZGVkIGluIGV2ZXJ5IGtleSBjb250ZXh0IGZvciBhIHB1YmxpYyBrZXkuCisgKgorICogRm9yIEVDQyBwdWJsaWMga2V5cywgaXQgbmVlZHMgMjU3IGJpdHMgc28gMzMgYnl0ZXMuCisgKi8KKyNkZWZpbmUgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfUFVCTElDX0tFWV9TSVpFICAgIDMzCisKKy8qKiBcZGVmIFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX1NZTU1FVFJJQ19GQUNUT1IKKyAqCisgKiBFdmVyeSBrZXkgY29udGV4dCBmb3IgYSBzeW1tZXRyaWMga2V5IGluY2x1ZGVzIHRoaXMgbWFueSB0aW1lcyB0aGUga2V5IHNpemUuCisgKi8KKyNkZWZpbmUgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfU1lNTUVUUklDX0ZBQ1RPUiAgIDAKKworLyoqIFxkZWYgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfU1RPUkVfUFVCTElDX0tFWQorICoKKyAqIElmIHRoaXMgaXMgdHJ1ZSBmb3IgYSBrZXkgcGFpciwgdGhlIGtleSBjb250ZXh0IGluY2x1ZGVzIHNwYWNlIGZvciB0aGUgcHVibGljIGtleS4KKyAqIElmIHRoaXMgaXMgZmFsc2UsIG5vIGFkZGl0aW9uYWwgc3BhY2UgaXMgYWRkZWQgZm9yIHRoZSBwdWJsaWMga2V5LgorICoKKyAqIEZvciB0aGlzIGluc3RhbmNlLCBzdG9yZSB0aGUgcHVibGljIGtleSB3aXRoIHRoZSBwcml2YXRlIG9uZS4KKyAqLworI2RlZmluZSBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9TVE9SRV9QVUJMSUNfS0VZICAgMQorCisvKiogXGRlZiBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9TSVpFX0ZVTkNUSU9OCisgKgorICogSWYgVEVTVF9EUklWRVJfS0VZX0NPTlRFWFRfU0laRV9GVU5DVElPTiBpcyBkZWZpbmVkLCB0aGUgdGVzdCBkcml2ZXIKKyAqIHByb3ZpZGVzIGEgc2l6ZV9mdW5jdGlvbiBlbnRyeSBwb2ludCwgb3RoZXJ3aXNlLCBpdCBkb2VzIG5vdC4KKyAqCisgKiBTb21lIG9wYXF1ZSBkcml2ZXJzIGhhdmUgdGhlIG5lZWQgdG8gc3VwcG9ydCBhIGN1c3RvbSBzaXplIGZvciB0aGUgc3RvcmFnZQorICogb2Yga2V5IGFuZCBjb250ZXh0IGluZm9ybWF0aW9uLiBUaGUgc2l6ZV9mdW5jdGlvbiBwcm92aWRlcyB0aGUgYWJpbGl0eSB0bworICogcHJvdmlkZSB0aGF0IGN1c3RvbWl6YXRpb24uCisgKi8KKy8vI2RlZmluZSBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9TSVpFX0ZVTkNUSU9OCisKKyNpZmRlZiBURVNUX0RSSVZFUl9LRVlfQ09OVEVYVF9TSVpFX0ZVTkNUSU9OCitzaXplX3QgdGVzdF9zaXplX2Z1bmN0aW9uKAorICAgIGNvbnN0IHBzYV9rZXlfdHlwZV90IGtleV90eXBlLAorICAgIGNvbnN0IHNpemVfdCBrZXlfYml0cyApOworI2VuZGlmIC8qIFRFU1RfRFJJVkVSX0tFWV9DT05URVhUX1NJWkVfRlVOQ1RJT04gKi8KKworI2VuZGlmIC8qIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KKyNlbmRpZiAvKiBQU0FfQ1JZUFRPX1RFU1RfRFJJVkVSU19TSVpFX0ggKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL2luY2x1ZGUvdGVzdC9kcml2ZXJzL3Rlc3RfZHJpdmVyLmggYi90ZXN0cy9pbmNsdWRlL3Rlc3QvZHJpdmVycy90ZXN0X2RyaXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNmI3OTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pbmNsdWRlL3Rlc3QvZHJpdmVycy90ZXN0X2RyaXZlci5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBVbWJyZWxsYSBpbmNsdWRlIGZvciBhbGwgb2YgdGhlIHRlc3QgZHJpdmVyIGZ1bmN0aW9uYWxpdHkKKyAqLworLyogIENvcHlyaWdodCBUaGUgTWJlZCBUTFMgQ29udHJpYnV0b3JzCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgUFNBX0NSWVBUT19URVNUX0RSSVZFUl9ICisjZGVmaW5lIFBTQV9DUllQVE9fVEVTVF9EUklWRVJfSAorCisjZGVmaW5lIFBTQV9DUllQVE9fVEVTVF9EUklWRVJfTElGRVRJTUUgMHg3ZmZmZmYKKworI2luY2x1ZGUgInRlc3QvZHJpdmVycy9zaWduYXR1cmUuaCIKKyNpbmNsdWRlICJ0ZXN0L2RyaXZlcnMva2V5X21hbmFnZW1lbnQuaCIKKyNpbmNsdWRlICJ0ZXN0L2RyaXZlcnMvY2lwaGVyLmgiCisjaW5jbHVkZSAidGVzdC9kcml2ZXJzL3NpemUuaCIKKworI2VuZGlmIC8qIFBTQV9DUllQVE9fVEVTVF9EUklWRVJfSCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMvaW5jbHVkZS90ZXN0L2hlbHBlcnMuaCBiL3Rlc3RzL2luY2x1ZGUvdGVzdC9oZWxwZXJzLmgKaW5kZXggYzQ5NzljYy4uMmM3YjE3OSAxMDA2NDQKLS0tIGEvdGVzdHMvaW5jbHVkZS90ZXN0L2hlbHBlcnMuaAorKysgYi90ZXN0cy9pbmNsdWRlL3Rlc3QvaGVscGVycy5oCkBAIC01MywxMCArNTMsOCBAQAogdm9pZCBtYmVkdGxzX3Rlc3RfcGxhdGZvcm1fdGVhcmRvd24oIHZvaWQgKTsKIAogLyoqCi0gKiBcYnJpZWYgICAgICAgICAgVGhpcyBmdW5jdGlvbiB0cmFuc2xhdGVzIGFuIEFTQ0lJIHN0cmluZyBlbmNvZGluZyBhbgotICogICAgICAgICAgICAgICAgIGhleGFkZWNpbWFsIG51bWJlciBpbnRvIHRoZSBlbmNvZGVkIGhleGFkZWNpbWFsIG51bWJlci4gVGhlCi0gKiAgICAgICAgICAgICAgICAgaGV4YWRlY2ltYWwgbnVtYmVyIGlzIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IG9mCi0gKiAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhci4KKyAqIFxicmllZiAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGRlY29kZXMgdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mCisgKiAgICAgICAgICAgICAgICAgZGF0YS4KICAqCiAgKiBcbm90ZSAgICAgICAgICAgVGhlIG91dHB1dCBidWZmZXIgY2FuIGJlIHRoZSBzYW1lIGFzIHRoZSBpbnB1dCBidWZmZXIuIEZvcgogICogICAgICAgICAgICAgICAgIGFueSBvdGhlciBvdmVybGFwcGluZyBvZiB0aGUgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzLCB0aGUKQEAgLTcwLDcgKzY4LDcgQEAKICAqCiAgKiBccmV0dXJuICAgICAgICAgXGMgMCBvbiBzdWNjZXNzLgogICogXHJldHVybiAgICAgICAgIFxjIC0xIGlmIHRoZSBvdXRwdXQgYnVmZmVyIGlzIHRvbyBzbWFsbCBvciB0aGUgaW5wdXQgc3RyaW5nCi0gKiAgICAgICAgICAgICAgICAgaXMgbm90IGEgdmFsaWQgQVNDSUkgZW5jb2Rpbmcgb2YgYW4gaGV4YWRlY2ltYWwgbnVtYmVyLgorICogICAgICAgICAgICAgICAgIGlzIG5vdCBhIHZhbGlkIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgogICovCiBpbnQgbWJlZHRsc190ZXN0X3VuaGV4aWZ5KCB1bnNpZ25lZCBjaGFyICpvYnVmLCBzaXplX3Qgb2J1Zm1heCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlidWYsIHNpemVfdCAqbGVuICk7CkBAIC0xMDMsNCArMTAxLDkzIEBACiBpbnQgbWJlZHRsc190ZXN0X2hleGNtcCggdWludDhfdCAqIGEsIHVpbnQ4X3QgKiBiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFfbGVuLCB1aW50MzJfdCBiX2xlbiApOwogCisjaWYgZGVmaW5lZChNQkVEVExTX0NIRUNLX1BBUkFNUykKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBjb25zdCBjaGFyICpmYWlsdXJlX2NvbmRpdGlvbjsKKyAgICBjb25zdCBjaGFyICpmaWxlOworICAgIGludCBsaW5lOworfQorbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9sb2NhdGlvbl9yZWNvcmRfdDsKKworLyoqCisgKiBcYnJpZWYgICBHZXQgdGhlIGxvY2F0aW9uIHJlY29yZCBvZiB0aGUgbGFzdCBjYWxsIHRvCisgKiAgICAgICAgICBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkKCkuCisgKgorICogXG5vdGUgICAgVGhlIGNhbGwgZXhwZWN0YXRpb24gaXMgc2V0IHVwIGFuZCBhY3RpdmUgdW50aWwgdGhlIG5leHQgY2FsbCB0bworICogICAgICAgICAgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9jaGVja19leHBlY3RlZF9jYWxsKCkgb3IKKyAqICAgICAgICAgIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCkgdGhhdCBjYW5jZWxzIGl0LgorICovCit2b2lkIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfZ2V0X2xvY2F0aW9uX3JlY29yZCgKKyAgICAgICAgIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfbG9jYXRpb25fcmVjb3JkX3QgKmxvY2F0aW9uX3JlY29yZCApOworCisvKioKKyAqIFxicmllZiAgIFN0YXRlIHRoYXQgYSBjYWxsIHRvIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCkgaXMgZXhwZWN0ZWQuCisgKgorICogXG5vdGUgICAgVGhlIGNhbGwgZXhwZWN0YXRpb24gaXMgc2V0IHVwIGFuZCBhY3RpdmUgdW50aWwgdGhlIG5leHQgY2FsbCB0bworICogICAgICAgICAgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9jaGVja19leHBlY3RlZF9jYWxsKCkgb3IKKyAqICAgICAgICAgIG1iZWR0bHNfcGFyYW1fZmFpbGVkIHRoYXQgY2FuY2VsIGl0LgorICovCit2b2lkIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfZXhwZWN0X2NhbGwoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICBDaGVjayB3aGV0aGVyIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCkgaGFzIGJlZW4gY2FsbGVkIGFzIGV4cGVjdGVkLgorICoKKyAqIFxub3RlICAgIENoZWNrIHdoZXRoZXIgbWJlZHRsc19wYXJhbV9mYWlsZWQoKSBoYXMgYmVlbiBjYWxsZWQgYmV0d2VlbiB0aGUKKyAqICAgICAgICAgIGxhc3QgY2FsbCB0byBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2V4cGVjdF9jYWxsKCkgYW5kIHRoZSBjYWxsCisgKiAgICAgICAgICB0byB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFxyZXR1cm4gIFxjIDAgU2luY2UgdGhlIGxhc3QgY2FsbCB0byBtYmVkdGxzX3BhcmFtX2ZhaWxlZF9leHBlY3RfY2FsbCgpLAorICogICAgICAgICAgICAgICBtYmVkdGxzX3BhcmFtX2ZhaWxlZCgpIGhhcyBiZWVuIGNhbGxlZC4KKyAqICAgICAgICAgIFxjIC0xIE90aGVyd2lzZS4KKyAqLworaW50IG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfY2hlY2tfZXhwZWN0ZWRfY2FsbCggdm9pZCApOworCisvKioKKyAqIFxicmllZiAgIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUgb2JqZWN0IG9mIHR5cGUgam1wX2J1ZiBob2xkaW5nIHRoZSBleGVjdXRpb24KKyAqICAgICAgICAgIHN0YXRlIGluZm9ybWF0aW9uIHVzZWQgYnkgbWJlZHRsc19wYXJhbV9mYWlsZWQoKSB0byBkbyBhIGxvbmcganVtcC4KKyAqCisgKiBcbm90ZSAgICBJZiBhIGNhbGwgdG8gbWJlZHRsc19wYXJhbV9mYWlsZWQoKSBpcyBub3QgZXhwZWN0ZWQgaW4gdGhlIHNlbnNlCisgKiAgICAgICAgICB0aGF0IHRoZXJlIGlzIG5vIGNhbGwgdG8gbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9leHBlY3RfY2FsbCgpCisgKiAgICAgICAgICBwcmVjZWRpbmcgaXQsIHRoZW4gbWJlZHRsc19wYXJhbV9mYWlsZWQoKSB3aWxsIHRyeSB0byByZXN0b3JlIHRoZQorICogICAgICAgICAgZXhlY3V0aW9uIHRvIHRoZSBzdGF0ZSBzdG9yZWQgaW4gdGhlIGptcF9idWYgb2JqZWN0IHdob3NlIGFkZHJlc3MKKyAqICAgICAgICAgIGlzIHJldHVybmVkIGJ5IHRoZSBwcmVzZW50IGZ1bmN0aW9uLgorICoKKyAqIFxub3RlICAgIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSB0aGUgcGFyYW1ldGVyIG9mIHRoZQorICogICAgICAgICAgc2V0am1wKCkgZnVuY3Rpb24gdG8gc2V0LXVwIHdoZXJlIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCkgc2hvdWxkCisgKiAgICAgICAgICBsb25nLWp1bXAgaWYgaXQgaGFzIHRvLiBJdCBpcyBmb3Jlc2VlbiB0byBiZSB1c2VkIGFzOgorICoKKyAqICAgICAgICAgIHNldGptcCggbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9nZXRfc3RhdGVfYnVmKCkgKS4KKyAqCisgKiBcbm90ZSAgICBUaGUgdHlwZSBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgbm90IGptcF9idWYgYXMgam1wX2J1ZiBpcyBhbgorICogICAgICAgICAgYW4gYXJyYXkgdHlwZSAoQyBzcGVjaWZpY2F0aW9uKSBhbmQgYSBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGFuCisgKiAgICAgICAgICBhcnJheSB0eXBlLgorICoKKyAqIFxub3RlICAgIFRoZSB0eXBlIG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBub3Qgam1wX2J1ZiogYXMgdGhlbiB0aGUgcmV0dXJuCisgKiAgICAgICAgICB2YWx1ZSBjb3VsZG4ndCBiZSB1c2VkIGJ5IHNldGptcCgpLCBhcyBpdHMgcGFyYW1ldGVyJ3MgdHlwZSBpcworICogICAgICAgICAgam1wX2J1Zi4KKyAqCisgKiBccmV0dXJuICBBZGRyZXNzIG9mIHRoZSBvYmplY3Qgb2YgdHlwZSBqbXBfYnVmIGhvbGRpbmcgdGhlIGV4ZWN1dGlvbiBzdGF0ZQorICogICAgICAgICAgaW5mb3JtYXRpb24gdXNlZCBieSBtYmVkdGxzX3BhcmFtX2ZhaWxlZCgpIHRvIGRvIGEgbG9uZyBqdW1wLgorICovCit2b2lkKiBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2dldF9zdGF0ZV9idWYoIHZvaWQgKTsKKworLyoqCisgKiBcYnJpZWYgICBSZXNldCB0aGUgZXhlY3V0aW9uIHN0YXRlIHVzZWQgYnkgbWJlZHRsc19wYXJhbV9mYWlsZWQoKSB0byBkbyBhCisgKiAgICAgICAgICBsb25nIGp1bXAuCisgKgorICogXG5vdGUgICAgSWYgYSBjYWxsIHRvIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCkgaXMgbm90IGV4cGVjdGVkIGluIHRoZSBzZW5zZQorICogICAgICAgICAgdGhhdCB0aGVyZSBpcyBubyBjYWxsIHRvIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfZXhwZWN0X2NhbGwoKQorICogICAgICAgICAgcHJlY2VkaW5nIGl0LCB0aGVuIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCkgd2lsbCB0cnkgdG8gcmVzdG9yZSB0aGUKKyAqICAgICAgICAgIGV4ZWN1dGlvbiBzdGF0ZSB0aGF0IHRoaXMgZnVuY3Rpb24gcmVzZXQuCisgKgorICogXG5vdGUgICAgSXQgaXMgcmVjb21tZW5kZWQgdG8gcmVzZXQgdGhlIGV4ZWN1dGlvbiBzdGF0ZSB3aGVuIHRoZSBzdGF0ZQorICogICAgICAgICAgaXMgbm90IHJlbGV2YW50IGFueW1vcmUuIFRoYXQgd2F5IGFuIHVuZXhwZWN0ZWQgY2FsbCB0bworICogICAgICAgICAgbWJlZHRsc19wYXJhbV9mYWlsZWQoKSB3aWxsIG5vdCB0cmlnZ2VyIGEgbG9uZyBqdW1wIHdpdGgKKyAqICAgICAgICAgIHVuZGVmaW5lZCBiZWhhdmlvciBidXQgcmF0aGVyIGEgbG9uZyBqdW1wIHRoYXQgd2lsbCByYXRoZXIgZmF1bHQuCisgKi8KK3ZvaWQgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9yZXNldF9zdGF0ZSggdm9pZCApOworI2VuZGlmIC8qIE1CRURUTFNfQ0hFQ0tfUEFSQU1TICovCisKICNlbmRpZiAvKiBURVNUX0hFTFBFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy9hbGwuc2ggYi90ZXN0cy9zY3JpcHRzL2FsbC5zaAppbmRleCA1MzNmYTJjLi43NTdhOWVjIDEwMDc1NQotLS0gYS90ZXN0cy9zY3JpcHRzL2FsbC5zaAorKysgYi90ZXN0cy9zY3JpcHRzL2FsbC5zaApAQCAtMTA5MSw2ICsxMDkxLDQ2IEBACiAgICAgaWZfYnVpbGRfc3VjY2VlZGVkIGVudiBPUEVOU1NMX0NNRD0iJE9QRU5TU0xfTkVYVCIgdGVzdHMvY29tcGF0LnNoIC1lICdeJCcgLWYgJ0FSSUFcfENIQUNIQScKIH0KIAorY29tcG9uZW50X3Rlc3RfbWVtc2FuX2NvbnN0YW50X2Zsb3cgKCkgeworICAgICMgVGhpcyB0ZXN0cyBib3RoICgxKSBhY2Nlc3NlcyB0byB1bmRlZmluZWQgbWVtb3J5LCBhbmQgKDIpIGJyYW5jaGVzIG9yCisgICAgIyBtZW1vcnkgYWNjZXNzIGRlcGVuZGluZyBvbiBzZWNyZXQgdmFsdWVzLiBUbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRob3NlOgorICAgICMgLSB1bnNldCBNQkVEVExTX1RFU1RfQ09OU1RBTlRfRkxPV19NRU1TQU4gLSBkb2VzIHRoZSBmYWlsdXJlIHBlcnNpc3Q/CisgICAgIyAtIG9yIGFsdGVybmF0aXZlbHksIGNoYW5nZSB0aGUgYnVpbGQgdHlwZSB0byBNZW1TYW5EYmcsIHdoaWNoIGVuYWJsZXMKKyAgICAjIG9yaWdpbiB0cmFja2luZyBhbmQgbmljZXIgc3RhY2sgdHJhY2VzICh3aGljaCBhcmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyAgICAjIGFueXdheSksIGFuZCBjaGVjayBpZiB0aGUgb3JpZ2luIHdhcyBURVNUX0NGX1NFQ1JFVCgpIG9yIHNvbWV0aGluZyBlbHNlLgorICAgIG1zZyAiYnVpbGQ6IGNtYWtlIE1TYW4gKGNsYW5nKSwgZnVsbCBjb25maWcgd2l0aCBjb25zdGFudCBmbG93IHRlc3RpbmciCisgICAgc2NyaXB0cy9jb25maWcucHkgZnVsbAorICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1RFU1RfQ09OU1RBTlRfRkxPV19NRU1TQU4KKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX0FFU05JX0MgIyBtZW1zYW4gZG9lc24ndCBncm9rIGFzbQorICAgIENDPWNsYW5nIGNtYWtlIC1EIENNQUtFX0JVSUxEX1RZUEU6U3RyaW5nPU1lbVNhbiAuCisgICAgbWFrZQorCisgICAgbXNnICJ0ZXN0OiBtYWluIHN1aXRlcyAoTXNhbiArIGNvbnN0YW50IGZsb3cpIgorICAgIG1ha2UgdGVzdAorfQorCitjb21wb25lbnRfdGVzdF92YWxncmluZF9jb25zdGFudF9mbG93ICgpIHsKKyAgICAjIFRoaXMgdGVzdHMgYm90aCAoMSkgZXZlcnl0aGluZyB0aGF0IHZhbGdyaW5kJ3MgbWVtY2hlY2sgdXN1YWxseSBjaGVja3MKKyAgICAjIChoZWFwIGJ1ZmZlciBvdmVyZmxvd3MsIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgdXNlLWFmdGVyLWZyZWUsCisgICAgIyBldGMuKSBhbmQgKDIpIGJyYW5jaGVzIG9yIG1lbW9yeSBhY2Nlc3MgZGVwZW5kaW5nIG9uIHNlY3JldCB2YWx1ZXMsCisgICAgIyB3aGljaCB3aWxsIGJlIHJlcG9ydGVkIGFzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUbyBkaXN0aW5ndWlzaCBiZXR3ZWVuCisgICAgIyBzZWNyZXQgYW5kIGFjdHVhbGx5IHVuaW5pdGlhbGl6ZWQ6CisgICAgIyAtIHVuc2V0IE1CRURUTFNfVEVTVF9DT05TVEFOVF9GTE9XX1ZBTEdSSU5EIC0gZG9lcyB0aGUgZmFpbHVyZSBwZXJzaXN0PworICAgICMgLSBvciBhbHRlcm5hdGl2ZWx5LCBidWlsZCB3aXRoIGRlYnVnIGluZm8gYW5kIG1hbnVhbGx5IHJ1biB0aGUgb2ZmZW5kaW5nCisgICAgIyB0ZXN0IHN1aXRlIHdpdGggdmFsZ3JpbmQgLS10cmFjay1vcmlnaW5zPXllcywgdGhlbiBjaGVjayBpZiB0aGUgb3JpZ2luCisgICAgIyB3YXMgVEVTVF9DRl9TRUNSRVQoKSBvciBzb21ldGhpbmcgZWxzZS4KKyAgICBtc2cgImJ1aWxkOiBjbWFrZSByZWxlYXNlIEdDQywgZnVsbCBjb25maWcgd2l0aCBjb25zdGFudCBmbG93IHRlc3RpbmciCisgICAgc2NyaXB0cy9jb25maWcucHkgZnVsbAorICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1RFU1RfQ09OU1RBTlRfRkxPV19WQUxHUklORAorICAgIGNtYWtlIC1EIENNQUtFX0JVSUxEX1RZUEU6U3RyaW5nPVJlbGVhc2UgLgorICAgIG1ha2UKKworICAgICMgdGhpcyBvbmx5IHNob3dzIGEgc3VtbWFyeSBvZiB0aGUgcmVzdWx0cyAoaG93IG1hbnkgb2YgZWFjaCB0eXBlKQorICAgICMgZGV0YWlscyBhcmUgbGVmdCBpbiBUZXN0aW5nLzxkYXRlPi9EeW5hbWljQW5hbHlzaXMueG1sCisgICAgbXNnICJ0ZXN0OiBtYWluIHN1aXRlcyAodmFsZ3JpbmQgKyBjb25zdGFudCBmbG93KSIKKyAgICBtYWtlIG1lbWNoZWNrCit9CisKIGNvbXBvbmVudF90ZXN0X2RlZmF1bHRfbm9fZGVwcmVjYXRlZCAoKSB7CiAgICAgIyBUZXN0IHRoYXQgcmVtb3ZpbmcgdGhlIGRlcHJlY2F0ZWQgZmVhdHVyZXMgZnJvbSB0aGUgZGVmYXVsdAogICAgICMgY29uZmlndXJhdGlvbiBsZWF2ZXMgc29tZXRoaW5nIGNvbnNpc3RlbnQuCkBAIC0xMTc3LDE2ICsxMjE3LDM0IEBACiAgICAgcmVjb3JkX3N0YXR1cyB0ZXN0cy9zY3JpcHRzL2N1cnZlcy5wbAogfQogCitjb21wb25lbnRfdGVzdF9kZXBlbmRzX2N1cnZlc19wc2EgKCkgeworICAgIG1zZyAidGVzdC9idWlsZDogY3VydmVzLnBsIHdpdGggTUJFRFRMU19VU0VfUFNBX0NSWVBUTyBkZWZpbmVkIChnY2MpIgorICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPCisgICAgcmVjb3JkX3N0YXR1cyB0ZXN0cy9zY3JpcHRzL2N1cnZlcy5wbAorfQorCiBjb21wb25lbnRfdGVzdF9kZXBlbmRzX2hhc2hlcyAoKSB7CiAgICAgbXNnICJ0ZXN0L2J1aWxkOiBkZXBlbmRzLWhhc2hlcy5wbCAoZ2NjKSIgIyB+IDIgbWluCiAgICAgcmVjb3JkX3N0YXR1cyB0ZXN0cy9zY3JpcHRzL2RlcGVuZHMtaGFzaGVzLnBsCiB9CiAKK2NvbXBvbmVudF90ZXN0X2RlcGVuZHNfaGFzaGVzX3BzYSAoKSB7CisgICAgbXNnICJ0ZXN0L2J1aWxkOiBkZXBlbmRzLWhhc2hlcy5wbCB3aXRoIE1CRURUTFNfVVNFX1BTQV9DUllQVE8gZGVmaW5lZCAoZ2NjKSIKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19VU0VfUFNBX0NSWVBUTworICAgIHJlY29yZF9zdGF0dXMgdGVzdHMvc2NyaXB0cy9kZXBlbmRzLWhhc2hlcy5wbAorfQorCiBjb21wb25lbnRfdGVzdF9kZXBlbmRzX3BrYWxncyAoKSB7CiAgICAgbXNnICJ0ZXN0L2J1aWxkOiBkZXBlbmRzLXBrYWxncy5wbCAoZ2NjKSIgIyB+IDIgbWluCiAgICAgcmVjb3JkX3N0YXR1cyB0ZXN0cy9zY3JpcHRzL2RlcGVuZHMtcGthbGdzLnBsCiB9CiAKK2NvbXBvbmVudF90ZXN0X2RlcGVuZHNfcGthbGdzX3BzYSAoKSB7CisgICAgbXNnICJ0ZXN0L2J1aWxkOiBkZXBlbmRzLXBrYWxncy5wbCB3aXRoIE1CRURUTFNfVVNFX1BTQV9DUllQVE8gZGVmaW5lZCAoZ2NjKSIKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19VU0VfUFNBX0NSWVBUTworICAgIHJlY29yZF9zdGF0dXMgdGVzdHMvc2NyaXB0cy9kZXBlbmRzLXBrYWxncy5wbAorfQorCiBjb21wb25lbnRfYnVpbGRfa2V5X2V4Y2hhbmdlcyAoKSB7CiAgICAgbXNnICJ0ZXN0L2J1aWxkOiBrZXktZXhjaGFuZ2VzIChnY2MpIiAjIH4gMSBtaW4KICAgICByZWNvcmRfc3RhdHVzIHRlc3RzL3NjcmlwdHMva2V5LWV4Y2hhbmdlcy5wbApAQCAtMTIzMiwxNCArMTI5MCw1NyBAQAogICAgIGlmX2J1aWxkX3N1Y2NlZWRlZCBlbnYgT1BFTlNTTF9DTUQ9IiRPUEVOU1NMX05FWFQiIHRlc3RzL2NvbXBhdC5zaCAtZSAnXiQnIC1mICdBUklBXHxDSEFDSEEnCiB9CiAKK2NvbXBvbmVudF90ZXN0X3BzYV9jcnlwdG9fY29uZmlnX2Jhc2ljKCkgeworICAgICMgZnVsbCBwbHVzIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcKKyAgICBtc2cgImJ1aWxkOiBmdWxsICsgTUJFRFRMU19QU0FfQ1JZUFRPX0NPTkZJRyIKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBmdWxsCisgICAgc2NyaXB0cy9jb25maWcucHkgc2V0IE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcKKyAgICBzY3JpcHRzL2NvbmZpZy5weSBzZXQgTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMKKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPCisgICAgIyBOZWVkIHRvIGRlZmluZSB0aGUgY29ycmVjdCBzeW1ib2wgYW5kIGluY2x1ZGUgdGhlIHRlc3QgZHJpdmVyIGhlYWRlciBwYXRoIGluIG9yZGVyIHRvIGJ1aWxkIHdpdGggdGhlIHRlc3QgZHJpdmVyCisgICAgbWFrZSBDQz1nY2MgQ0ZMQUdTPSIkQVNBTl9DRkxBR1MgLURQU0FfQ1JZUFRPX0RSSVZFUl9URVNUIC1JLi4vdGVzdHMvaW5jbHVkZSAtTzIiIExERkxBR1M9IiRBU0FOX0NGTEFHUyIKKworICAgIG1zZyAidGVzdDogZnVsbCArIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUciCisgICAgbWFrZSB0ZXN0Cit9CisKK2NvbXBvbmVudF90ZXN0X3BzYV9jcnlwdG9fY29uZmlnX25vX2RyaXZlcigpIHsKKyAgICAjIGZ1bGwgcGx1cyBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHCisgICAgbXNnICJidWlsZDogZnVsbCArIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgbWludXMgTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMiCisgICAgc2NyaXB0cy9jb25maWcucHkgZnVsbAorICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHCisgICAgc2NyaXB0cy9jb25maWcucHkgdW5zZXQgTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMKKyAgICBzY3JpcHRzL2NvbmZpZy5weSB1bnNldCBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPCisgICAgbWFrZSBDQz1nY2MgQ0ZMQUdTPSIkQVNBTl9DRkxBR1MgLU8yIiBMREZMQUdTPSIkQVNBTl9DRkxBR1MiCisKKyAgICBtc2cgInRlc3Q6IGZ1bGwgKyBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHIG1pbnVzIE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTIgorICAgIG1ha2UgdGVzdAorfQorCisjIFRoaXMgc2hvdWxkIGJlIHJlbmFtZWQgdG8gdGVzdCBhbmQgdXBkYXRlZCBvbmNlIHRoZSBhY2NlbGVyYXRvciBFQ0RTQSBjb2RlIGlzIGluIHBsYWNlIGFuZCByZWFkeSB0byB0ZXN0LgorY29tcG9uZW50X2J1aWxkX3BzYV93YW50X2VjZHNhX2Rpc2FibGVkX3NvZnR3YXJlKCkgeworICAgICMgZnVsbCBwbHVzIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgd2l0aCBQU0FfV0FOVF9BTEdfRUNEU0EKKyAgICAjIHdpdGhvdXQgTUJFRFRMU19FQ0RTQV9DCisgICAgIyBQU0FfV0FOVF9BTEdfRUNEU0EgYW5kIFBTQV9XQU5UX0FMR19ERVRFUk1JTklTVElDX0VDRFNBIGFyZSBhbHJlYWR5CisgICAgIyBzZXQgaW4gaW5jbHVkZS9wc2EvY3J5cHRvX2NvbmZpZy5oCisgICAgbXNnICJidWlsZDogZnVsbCArIE1CRURUTFNfUFNBX0NSWVBUT19DT05GSUcgKyBQU0FfV0FOVF9BTEdfRUNEU0Egd2l0aG91dCBNQkVEVExTX0VDRFNBX0MiCisgICAgc2NyaXB0cy9jb25maWcucHkgZnVsbAorICAgIHNjcmlwdHMvY29uZmlnLnB5IHNldCBNQkVEVExTX1BTQV9DUllQVE9fQ09ORklHCisgICAgc2NyaXB0cy9jb25maWcucHkgc2V0IE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTCisgICAgc2NyaXB0cy9jb25maWcucHkgdW5zZXQgTUJFRFRMU19VU0VfUFNBX0NSWVBUTworICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfRUNEU0FfQworICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhfRUNEU0FfRU5BQkxFRAorICAgIHNjcmlwdHMvY29uZmlnLnB5IHVuc2V0IE1CRURUTFNfS0VZX0VYQ0hBTkdFX0VDREhFX0VDRFNBX0VOQUJMRUQKKyAgICAjIE5lZWQgdG8gZGVmaW5lIHRoZSBjb3JyZWN0IHN5bWJvbCBhbmQgaW5jbHVkZSB0aGUgdGVzdCBkcml2ZXIgaGVhZGVyIHBhdGggaW4gb3JkZXIgdG8gYnVpbGQgd2l0aCB0aGUgdGVzdCBkcml2ZXIKKyAgICBtYWtlIENDPWdjYyBDRkxBR1M9IiRBU0FOX0NGTEFHUyAtRFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgLURNQkVEVExTX1BTQV9BQ0NFTF9BTEdfRUNEU0EgLURNQkVEVExTX1BTQV9BQ0NFTF9BTEdfREVURVJNSU5JU1RJQ19FQ0RTQSAtSS4uL3Rlc3RzL2luY2x1ZGUgLU8yIiBMREZMQUdTPSIkQVNBTl9DRkxBR1MiCit9CisKIGNvbXBvbmVudF90ZXN0X2NoZWNrX3BhcmFtc19mdW5jdGlvbmFsaXR5ICgpIHsKICAgICBtc2cgImJ1aWxkK3Rlc3Q6IE1CRURUTFNfQ0hFQ0tfUEFSQU1TIGZ1bmN0aW9uYWxpdHkiCiAgICAgc2NyaXB0cy9jb25maWcucHkgZnVsbCAjIGluY2x1ZGVzIENIRUNLX1BBUkFNUwogICAgICMgTWFrZSBNQkVEVExTX1BBUkFNX0ZBSUxFRCBjYWxsIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCkuCiAgICAgc2NyaXB0cy9jb25maWcucHkgdW5zZXQgTUJFRFRMU19DSEVDS19QQVJBTVNfQVNTRVJUCi0gICAgIyBPbmx5IGJ1aWxkIGFuZCBydW4gdGVzdHMuIERvIG5vdCBidWlsZCBzYW1wbGUgcHJvZ3JhbXMsIGJlY2F1c2UKLSAgICAjIHRoZXkgZG9uJ3QgaGF2ZSBhIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCkgZnVuY3Rpb24uCi0gICAgbWFrZSBDQz1nY2MgQ0ZMQUdTPSctV2Vycm9yIC1PMScgbGliIHRlc3QKKyAgICBtYWtlIENDPWdjYyBDRkxBR1M9Jy1XZXJyb3IgLU8xJyBhbGwgdGVzdAogfQogCiBjb21wb25lbnRfdGVzdF9jaGVja19wYXJhbXNfd2l0aG91dF9wbGF0Zm9ybSAoKSB7CkBAIC0xNjE2LDYgKzE3MTcsMTYgQEAKICAgICBtYWtlIHRlc3QKIH0KIAorY29tcG9uZW50X3Rlc3RfcHNhX2NyeXB0b19kcml2ZXJzICgpIHsKKyAgICBtc2cgImJ1aWxkOiBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUyB3LyBkcml2ZXIgaG9va3MiCisgICAgc2NyaXB0cy9jb25maWcucHkgc2V0IE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTCisgICAgIyBOZWVkIHRvIGRlZmluZSB0aGUgY29ycmVjdCBzeW1ib2wgYW5kIGluY2x1ZGUgdGhlIHRlc3QgZHJpdmVyIGhlYWRlciBwYXRoIGluIG9yZGVyIHRvIGJ1aWxkIHdpdGggdGhlIHRlc3QgZHJpdmVyCisgICAgbWFrZSBDQz1nY2MgQ0ZMQUdTPSIkQVNBTl9DRkxBR1MgLURQU0FfQ1JZUFRPX0RSSVZFUl9URVNUIC1JLi4vdGVzdHMvaW5jbHVkZSAtTzIiIExERkxBR1M9IiRBU0FOX0NGTEFHUyIKKworICAgIG1zZyAidGVzdDogTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMsIHNpZ25hdHVyZSIKKyAgICBtYWtlIHRlc3QKK30KKwogY29tcG9uZW50X3Rlc3RfbWFrZV9zaGFyZWQgKCkgewogICAgIG1zZyAiYnVpbGQvdGVzdDogbWFrZSBzaGFyZWQiICMgfiA0MHMKICAgICBtYWtlIFNIQVJFRD0xIGFsbCBjaGVjawpAQCAtMTc4Nyw3ICsxODk4LDcgQEAKIGNvbXBvbmVudF9idWlsZF9hcm1fbm9uZV9lYWJpX2djYyAoKSB7CiAgICAgbXNnICJidWlsZDogJHtBUk1fTk9ORV9FQUJJX0dDQ19QUkVGSVh9Z2NjIC1PMSIgIyB+IDEwcwogICAgIHNjcmlwdHMvY29uZmlnLnB5IGJhcmVtZXRhbAotICAgIG1ha2UgQ0M9IiR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWdjYyIgQVI9IiR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWFyIiBMRD0iJHtBUk1fTk9ORV9FQUJJX0dDQ19QUkVGSVh9bGQiIENGTEFHUz0nLVdlcnJvciAtV2FsbCAtV2V4dHJhIC1PMScgbGliCisgICAgbWFrZSBDQz0iJHtBUk1fTk9ORV9FQUJJX0dDQ19QUkVGSVh9Z2NjIiBBUj0iJHtBUk1fTk9ORV9FQUJJX0dDQ19QUkVGSVh9YXIiIExEPSIke0FSTV9OT05FX0VBQklfR0NDX1BSRUZJWH1sZCIgQ0ZMQUdTPSctc3RkPWM5OSAtV2Vycm9yIC1XYWxsIC1XZXh0cmEgLU8xJyBsaWIKIAogICAgIG1zZyAic2l6ZTogJHtBUk1fTk9ORV9FQUJJX0dDQ19QUkVGSVh9Z2NjIC1PMSIKICAgICAke0FSTV9OT05FX0VBQklfR0NDX1BSRUZJWH1zaXplIGxpYnJhcnkvKi5vCkBAIC0xODAxLDcgKzE5MTIsNyBAQAogICAgICMgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL21iZWR0bHMvcHVsbC8yMTY5IGFuZCBjb21tZW50cy4KICAgICAjIEl0IHdvdWxkIGJlIGJldHRlciB0byBidWlsZCB3aXRoIGFybS1saW51eC1nbnVlYWJpLWdjYyBidXQKICAgICAjIHdlIGRvbid0IGhhdmUgdGhhdCBvbiBvdXIgQ0kgYXQgdGhpcyB0aW1lLgotICAgIG1ha2UgQ0M9IiR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWdjYyIgQVI9IiR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWFyIiBDRkxBR1M9Jy1XZXJyb3IgLVdhbGwgLVdleHRyYSAtbWFyY2g9YXJtdjV0ZSAtTzEnIExERkxBR1M9Jy1tYXJjaD1hcm12NXRlJyBTSEVMTD0nc2ggLXgnIGxpYgorICAgIG1ha2UgQ0M9IiR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWdjYyIgQVI9IiR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWFyIiBDRkxBR1M9Jy1zdGQ9Yzk5IC1XZXJyb3IgLVdhbGwgLVdleHRyYSAtbWFyY2g9YXJtdjV0ZSAtTzEnIExERkxBR1M9Jy1tYXJjaD1hcm12NXRlJyBTSEVMTD0nc2ggLXgnIGxpYgogCiAgICAgbXNnICJzaXplOiAke0FSTV9OT05FX0VBQklfR0NDX1BSRUZJWH1nY2MgLW1hcmNoPWFybXY1dGUgLU8xIgogICAgICR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfXNpemUgbGlicmFyeS8qLm8KQEAgLTE4MTAsNyArMTkyMSw3IEBACiBjb21wb25lbnRfYnVpbGRfYXJtX25vbmVfZWFiaV9nY2NfbTBwbHVzICgpIHsKICAgICBtc2cgImJ1aWxkOiAke0FSTV9OT05FX0VBQklfR0NDX1BSRUZJWH1nY2MgLW10aHVtYiAtbWNwdT1jb3J0ZXgtbTBwbHVzIiAjIH4gMTBzCiAgICAgc2NyaXB0cy9jb25maWcucHkgYmFyZW1ldGFsCi0gICAgbWFrZSBDQz0iJHtBUk1fTk9ORV9FQUJJX0dDQ19QUkVGSVh9Z2NjIiBBUj0iJHtBUk1fTk9ORV9FQUJJX0dDQ19QUkVGSVh9YXIiIExEPSIke0FSTV9OT05FX0VBQklfR0NDX1BSRUZJWH1sZCIgQ0ZMQUdTPSctV2Vycm9yIC1XYWxsIC1XZXh0cmEgLW10aHVtYiAtbWNwdT1jb3J0ZXgtbTBwbHVzIC1PcycgbGliCisgICAgbWFrZSBDQz0iJHtBUk1fTk9ORV9FQUJJX0dDQ19QUkVGSVh9Z2NjIiBBUj0iJHtBUk1fTk9ORV9FQUJJX0dDQ19QUkVGSVh9YXIiIExEPSIke0FSTV9OT05FX0VBQklfR0NDX1BSRUZJWH1sZCIgQ0ZMQUdTPSctc3RkPWM5OSAtV2Vycm9yIC1XYWxsIC1XZXh0cmEgLW10aHVtYiAtbWNwdT1jb3J0ZXgtbTBwbHVzIC1PcycgbGliCiAKICAgICBtc2cgInNpemU6ICR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWdjYyAtbXRodW1iIC1tY3B1PWNvcnRleC1tMHBsdXMgLU9zIgogICAgICR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfXNpemUgbGlicmFyeS8qLm8KQEAgLTE4MjAsNyArMTkzMSw3IEBACiAgICAgbXNnICJidWlsZDogJHtBUk1fTk9ORV9FQUJJX0dDQ19QUkVGSVh9Z2NjIC1ETUJFRFRMU19OT19VREJMX0RJVklTSU9OLCBtYWtlIiAjIH4gMTBzCiAgICAgc2NyaXB0cy9jb25maWcucHkgYmFyZW1ldGFsCiAgICAgc2NyaXB0cy9jb25maWcucHkgc2V0IE1CRURUTFNfTk9fVURCTF9ESVZJU0lPTgotICAgIG1ha2UgQ0M9IiR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWdjYyIgQVI9IiR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWFyIiBMRD0iJHtBUk1fTk9ORV9FQUJJX0dDQ19QUkVGSVh9bGQiIENGTEFHUz0nLVdlcnJvciAtV2FsbCAtV2V4dHJhJyBsaWIKKyAgICBtYWtlIENDPSIke0FSTV9OT05FX0VBQklfR0NDX1BSRUZJWH1nY2MiIEFSPSIke0FSTV9OT05FX0VBQklfR0NDX1BSRUZJWH1hciIgTEQ9IiR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWxkIiBDRkxBR1M9Jy1zdGQ9Yzk5IC1XZXJyb3IgLVdhbGwgLVdleHRyYScgbGliCiAgICAgZWNobyAiQ2hlY2tpbmcgdGhhdCBzb2Z0d2FyZSA2NC1iaXQgZGl2aXNpb24gaXMgbm90IHJlcXVpcmVkIgogICAgIGlmX2J1aWxkX3N1Y2NlZWRlZCBub3QgZ3JlcCBfX2FlYWJpX3VsZGl2IGxpYnJhcnkvKi5vCiB9CkBAIC0xODI5LDcgKzE5NDAsNyBAQAogICAgIG1zZyAiYnVpbGQ6ICR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWdjYyBNQkVEVExTX05PXzY0QklUX01VTFRJUExJQ0FUSU9OLCBtYWtlIiAjIH4gMTBzCiAgICAgc2NyaXB0cy9jb25maWcucHkgYmFyZW1ldGFsCiAgICAgc2NyaXB0cy9jb25maWcucHkgc2V0IE1CRURUTFNfTk9fNjRCSVRfTVVMVElQTElDQVRJT04KLSAgICBtYWtlIENDPSIke0FSTV9OT05FX0VBQklfR0NDX1BSRUZJWH1nY2MiIEFSPSIke0FSTV9OT05FX0VBQklfR0NDX1BSRUZJWH1hciIgTEQ9IiR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWxkIiBDRkxBR1M9Jy1XZXJyb3IgLU8xIC1tYXJjaD1hcm12Ni1tIC1tdGh1bWInIGxpYgorICAgIG1ha2UgQ0M9IiR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWdjYyIgQVI9IiR7QVJNX05PTkVfRUFCSV9HQ0NfUFJFRklYfWFyIiBMRD0iJHtBUk1fTk9ORV9FQUJJX0dDQ19QUkVGSVh9bGQiIENGTEFHUz0nLXN0ZD1jOTkgLVdlcnJvciAtTzEgLW1hcmNoPWFybXY2LW0gLW10aHVtYicgbGliCiAgICAgZWNobyAiQ2hlY2tpbmcgdGhhdCBzb2Z0d2FyZSA2NC1iaXQgbXVsdGlwbGljYXRpb24gaXMgbm90IHJlcXVpcmVkIgogICAgIGlmX2J1aWxkX3N1Y2NlZWRlZCBub3QgZ3JlcCBfX2FlYWJpX2xtdWwgbGlicmFyeS8qLm8KIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcmlwdHMvY2hlY2stZ2VuZXJhdGVkLWZpbGVzLnNoIGIvdGVzdHMvc2NyaXB0cy9jaGVjay1nZW5lcmF0ZWQtZmlsZXMuc2gKaW5kZXggM2FiNjJmOC4uODQ1ZDFjNiAxMDA3NTUKLS0tIGEvdGVzdHMvc2NyaXB0cy9jaGVjay1nZW5lcmF0ZWQtZmlsZXMuc2gKKysrIGIvdGVzdHMvc2NyaXB0cy9jaGVjay1nZW5lcmF0ZWQtZmlsZXMuc2gKQEAgLTEwNSwzICsxMDUsNCBAQAogY2hlY2sgc2NyaXB0cy9nZW5lcmF0ZV9xdWVyeV9jb25maWcucGwgcHJvZ3JhbXMvdGVzdC9xdWVyeV9jb25maWcuYwogY2hlY2sgc2NyaXB0cy9nZW5lcmF0ZV9mZWF0dXJlcy5wbCBsaWJyYXJ5L3ZlcnNpb25fZmVhdHVyZXMuYwogY2hlY2sgc2NyaXB0cy9nZW5lcmF0ZV92aXN1YWxjX2ZpbGVzLnBsIHZpc3VhbGMvVlMyMDEwCitjaGVjayBzY3JpcHRzL2dlbmVyYXRlX3BzYV9jb25zdGFudHMucHkgcHJvZ3JhbXMvcHNhL3BzYV9jb25zdGFudF9uYW1lc19nZW5lcmF0ZWQuYwpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy9jaGVjay1uYW1lcy5zaCBiL3Rlc3RzL3NjcmlwdHMvY2hlY2stbmFtZXMuc2gKaW5kZXggOGUwYTk4Ny4uNTVmNzZkYSAxMDA3NTUKLS0tIGEvdGVzdHMvc2NyaXB0cy9jaGVjay1uYW1lcy5zaAorKysgYi90ZXN0cy9zY3JpcHRzL2NoZWNrLW5hbWVzLnNoCkBAIC05Niw2ICs5Niw3IEBACiBwcmludGYgIkxpa2VseSB0eXBvczogIgogc29ydCAtdSBhY3R1YWwtbWFjcm9zIGVudW0tY29uc3RzID4gX2NhcHMKIEhFQURFUlM9JCggbHMgaW5jbHVkZS9tYmVkdGxzLyouaCBpbmNsdWRlL3BzYS8qLmggfCBlZ3JlcCAtdiAnY29tcGF0LTFcLjNcLmgnICkKK0hFQURFUlM9IiRIRUFERVJTIGxpYnJhcnkvKi5oIgogSEVBREVSUz0iJEhFQURFUlMgM3JkcGFydHkvZXZlcmVzdC9pbmNsdWRlL2V2ZXJlc3QvZXZlcmVzdC5oIDNyZHBhcnR5L2V2ZXJlc3QvaW5jbHVkZS9ldmVyZXN0L3gyNTUxOS5oIgogTElCUkFSWT0iJCggbHMgbGlicmFyeS8qLmMgKSIKIExJQlJBUlk9IiRMSUJSQVJZIDNyZHBhcnR5L2V2ZXJlc3QvbGlicmFyeS9ldmVyZXN0LmMgM3JkcGFydHkvZXZlcmVzdC9saWJyYXJ5L3gyNTUxOS5jIgpkaWZmIC0tZ2l0IGEvdGVzdHMvc2NyaXB0cy9saXN0LW1hY3Jvcy5zaCBiL3Rlc3RzL3NjcmlwdHMvbGlzdC1tYWNyb3Muc2gKaW5kZXggMmJlMzlkMi4uYTg2MTdhMCAxMDA3NTUKLS0tIGEvdGVzdHMvc2NyaXB0cy9saXN0LW1hY3Jvcy5zaAorKysgYi90ZXN0cy9zY3JpcHRzL2xpc3QtbWFjcm9zLnNoCkBAIC0yMywxMCArMjMsMTcgQEAKIGZpCiAKIEhFQURFUlM9JCggbHMgaW5jbHVkZS9tYmVkdGxzLyouaCBpbmNsdWRlL3BzYS8qLmggfCBlZ3JlcCAtdiAnY29tcGF0LTFcLjNcLmgnICkKK0hFQURFUlM9IiRIRUFERVJTIGxpYnJhcnkvKi5oIgogSEVBREVSUz0iJEhFQURFUlMgM3JkcGFydHkvZXZlcmVzdC9pbmNsdWRlL2V2ZXJlc3QvZXZlcmVzdC5oIDNyZHBhcnR5L2V2ZXJlc3QvaW5jbHVkZS9ldmVyZXN0L3gyNTUxOS5oIgogCiBzZWQgLW4gLWUgJ3MvLiojZGVmaW5lIFwoW2EtekEtWjAtOV9dKlwpLiovXDEvcCcgJEhFQURFUlMgXAogICAgIHwgZWdyZXAgLXYgJ14oYXNtfGlubGluZXxFTUlUfF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSkkfF5NVUxBRERDXycgXAogICAgIHwgc29ydCAtdSA+IG1hY3JvcwogCisjIEZvciBpbmNsdWRlL21iZWR0bHMvY29uZmlnX3BzYS5oIG5lZWQgdG8gaWdub3JlIHRoZSBNQkVEVExTX3h4eCBkZWZpbmUKKyMgaW4gdGhhdCBmaWxlIHNpbmNlIHRoZXkgbWF5IG5vdCBiZSBkZWZpbmVkIGluIGluY2x1ZGUvcHNhL2NyeXB0b19jb25maWcuaAorIyBUaGlzIGxpbmUgcmVuYW1lcyB0aGUgcG90ZW50aWFsbHkgbWlzc2luZyBkZWZpbmVzIHRvIG9uZXMgdGhhdCBzaG91bGQKKyMgYmUgcHJlc2VudC4KK3NlZCAtbmUgJ3MvXk1CRURUTFNfUFNBX0JVSUxUSU5fL01CRURUTFNfUFNBX0FDQ0VMXy9wJyA8bWFjcm9zID4+bWFjcm9zCisKIHdjIC1sIG1hY3JvcwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3JjL2RyaXZlcnMvY2lwaGVyLmMgYi90ZXN0cy9zcmMvZHJpdmVycy9jaXBoZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTdjNmE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3JjL2RyaXZlcnMvY2lwaGVyLmMKQEAgLTAsMCArMSw2MTEgQEAKKy8qCisgKiBUZXN0IGRyaXZlciBmb3IgY2lwaGVyIGZ1bmN0aW9ucy4KKyAqIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG11bHRpLXBhcnQgb3BlcmF0aW9ucyB1c2luZyBBRVMtQ1RSLgorICovCisvKiAgQ29weXJpZ2h0IFRoZSBNYmVkIFRMUyBDb250cmlidXRvcnMKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMpICYmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyNpbmNsdWRlICJwc2EvY3J5cHRvLmgiCisjaW5jbHVkZSAicHNhX2NyeXB0b19jb3JlLmgiCisjaW5jbHVkZSAibWJlZHRscy9jaXBoZXIuaCIKKworI2luY2x1ZGUgInRlc3QvZHJpdmVycy9jaXBoZXIuaCIKKworI2luY2x1ZGUgInRlc3QvcmFuZG9tLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogVGVzdCBkcml2ZXIgaW1wbGVtZW50cyBBRVMtQ1RSIG9ubHkuIEl0cyBkZWZhdWx0IGJlaGF2aW91ciAod2hlbiBpdHMgcmV0dXJuCisgKiBzdGF0dXMgaXMgbm90IG92ZXJyaWRkZW4gdGhyb3VnaCB0aGUgaG9va3MpIGlzIHRvIHRha2UgY2FyZSBvZiBhbGwgQUVTLUNUUgorICogb3BlcmF0aW9ucywgYW5kIHJldHVybiBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCBmb3IgYWxsIG90aGVycy4KKyAqIFNldCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyB0byBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCB0byB1c2UKKyAqIGZhbGxiYWNrIGV2ZW4gZm9yIEFFUy1DVFIuICovCit0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3NfdCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MgPSBURVNUX0RSSVZFUl9DSVBIRVJfSU5JVDsKKworc3RhdGljIHBzYV9zdGF0dXNfdCB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9vbmVzaG90KAorICAgIG1iZWR0bHNfb3BlcmF0aW9uX3QgZGlyZWN0aW9uLAorICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9sZW5ndGgsCisgICAgcHNhX2FsZ29yaXRobV90IGFsZywKKyAgICBjb25zdCB1aW50OF90ICppbnB1dCwgc2l6ZV90IGlucHV0X2xlbmd0aCwKKyAgICB1aW50OF90ICpvdXRwdXQsIHNpemVfdCBvdXRwdXRfc2l6ZSwgc2l6ZV90ICpvdXRwdXRfbGVuZ3RoKQoreworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzKys7CisKKyAgICAvKiBUZXN0IGRyaXZlciBzdXBwb3J0cyBBRVMtQ1RSIG9ubHksIHRvIHZlcmlmeSBvcGVyYXRpb24gY2FsbHMuICovCisgICAgaWYoIGFsZyAhPSBQU0FfQUxHX0NUUiB8fAorICAgICAgICBwc2FfZ2V0X2tleV90eXBlKCBhdHRyaWJ1dGVzICkgIT0gUFNBX0tFWV9UWVBFX0FFUyApCisgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKworICAgIC8qIElmIHRlc3QgZHJpdmVyIHJlc3BvbnNlIGNvZGUgaXMgbm90IFNVQ0NFU1MsIHdlIGNhbiByZXR1cm4gZWFybHkgKi8KKyAgICBpZiggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICByZXR1cm4oIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICk7CisKKyAgICAvKiBJZiB0ZXN0IGRyaXZlciBvdXRwdXQgaXMgb3ZlcnJpZGRlbiwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhY3R1YWwgY3J5cHRvICovCisgICAgaWYoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfb3V0cHV0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoIG91dHB1dF9zaXplIDwgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9vdXRwdXRfbGVuZ3RoICkKKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgICAgICBtZW1jcHkoIG91dHB1dCwKKyAgICAgICAgICAgICAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX291dHB1dCwKKyAgICAgICAgICAgICAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGggKTsKKyAgICAgICAgKm91dHB1dF9sZW5ndGggPSB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGg7CisKKyAgICAgICAgcmV0dXJuKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyApOworICAgIH0KKworICAgIC8qIFJ1biBBRVMtQ1RSIHVzaW5nIHRoZSBjaXBoZXIgbW9kdWxlICovCisgICAgeworICAgICAgICBtYmVkdGxzX3Rlc3Rfcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworICAgICAgICBtZW1zZXQoICZybmRfaW5mbywgMHg1QSwgc2l6ZW9mKCBtYmVkdGxzX3Rlc3Rfcm5kX3BzZXVkb19pbmZvICkgKTsKKworICAgICAgICBjb25zdCBtYmVkdGxzX2NpcGhlcl9pbmZvX3QgKmNpcGhlcl9pbmZvID0KKyAgICAgICAgICAgIG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV92YWx1ZXMoIE1CRURUTFNfQ0lQSEVSX0lEX0FFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9sZW5ndGggKiA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19NT0RFX0NUUiApOworICAgICAgICBtYmVkdGxzX2NpcGhlcl9jb250ZXh0X3QgY2lwaGVyOworICAgICAgICBpbnQgcmV0ID0gMDsKKyAgICAgICAgdWludDhfdCB0ZW1wX291dHB1dF9idWZmZXJbMTZdID0gezB9OworICAgICAgICBzaXplX3QgdGVtcF9vdXRwdXRfbGVuZ3RoID0gMDsKKworICAgICAgICBpZiggZGlyZWN0aW9uID09IE1CRURUTFNfRU5DUllQVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE9uZXNob3QgZW5jcnlwdCBuZWVkcyB0byBwcmVwZW5kIHRoZSBJViB0byB0aGUgb3V0cHV0ICovCisgICAgICAgICAgICBpZiggb3V0cHV0X3NpemUgPCAoIGlucHV0X2xlbmd0aCArIDE2ICkgKQorICAgICAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE9uZXNob3QgZGVjcnlwdCBoYXMgdGhlIElWIHByZXBlbmRlZCB0byB0aGUgaW5wdXQgKi8KKyAgICAgICAgICAgIGlmKCBvdXRwdXRfc2l6ZSA8ICggaW5wdXRfbGVuZ3RoIC0gMTYgKSApCisgICAgICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIGNpcGhlcl9pbmZvID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworCisgICAgICAgIG1iZWR0bHNfY2lwaGVyX2luaXQoICZjaXBoZXIgKTsKKyAgICAgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZjaXBoZXIsIGNpcGhlcl9pbmZvICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0a2V5KCAmY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoICogOCwgZGlyZWN0aW9uICk7CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgaWYoIGRpcmVjdGlvbiA9PSBNQkVEVExTX0VOQ1JZUFQgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX3Rlc3Rfcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworICAgICAgICAgICAgbWVtc2V0KCAmcm5kX2luZm8sIDB4NUEsIHNpemVvZiggbWJlZHRsc190ZXN0X3JuZF9wc2V1ZG9faW5mbyApICk7CisKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfdGVzdF9ybmRfcHNldWRvX3JhbmQoICZybmRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfb3V0cHV0X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICk7CisgICAgICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0X2l2KCAmY2lwaGVyLCB0ZW1wX291dHB1dF9idWZmZXIsIDE2ICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0X2l2KCAmY2lwaGVyLCBpbnB1dCwgMTYgKTsKKworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIGlmKCBkaXJlY3Rpb24gPT0gTUJFRFRMU19FTkNSWVBUICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgaW5wdXRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHV0WzE2XSwgb3V0cHV0X2xlbmd0aCApOworICAgICAgICAgICAgaWYoIHJldCA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoIG91dHB1dCwgdGVtcF9vdXRwdXRfYnVmZmVyLCAxNiApOworICAgICAgICAgICAgICAgICpvdXRwdXRfbGVuZ3RoICs9IDE2OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IG1iZWR0bHNfY2lwaGVyX3VwZGF0ZSggJmNpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlucHV0WzE2XSwgaW5wdXRfbGVuZ3RoIC0gMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0X2xlbmd0aCApOworCisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfZmluaXNoKCAmY2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfb3V0cHV0X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcF9vdXRwdXRfbGVuZ3RoICk7CisKK2V4aXQ6CisgICAgICAgIGlmKCByZXQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgICpvdXRwdXRfbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIG1lbXNldChvdXRwdXQsIDAsIG91dHB1dF9zaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZjaXBoZXIgKTsKKyAgICAgICAgcmV0dXJuKCBtYmVkdGxzX3RvX3BzYV9lcnJvciggcmV0ICkgKTsKKyAgICB9Cit9CisKK3BzYV9zdGF0dXNfdCB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9lbmNyeXB0KAorICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9sZW5ndGgsCisgICAgcHNhX2FsZ29yaXRobV90IGFsZywKKyAgICBjb25zdCB1aW50OF90ICppbnB1dCwgc2l6ZV90IGlucHV0X2xlbmd0aCwKKyAgICB1aW50OF90ICpvdXRwdXQsIHNpemVfdCBvdXRwdXRfc2l6ZSwgc2l6ZV90ICpvdXRwdXRfbGVuZ3RoKQoreworICAgIHJldHVybiAoCisgICAgICAgIHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX29uZXNob3QoCisgICAgICAgICAgICBNQkVEVExTX0VOQ1JZUFQsCisgICAgICAgICAgICBhdHRyaWJ1dGVzLAorICAgICAgICAgICAga2V5LCBrZXlfbGVuZ3RoLAorICAgICAgICAgICAgYWxnLAorICAgICAgICAgICAgaW5wdXQsIGlucHV0X2xlbmd0aCwKKyAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0X3NpemUsIG91dHB1dF9sZW5ndGgpICk7Cit9CisKK3BzYV9zdGF0dXNfdCB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9kZWNyeXB0KAorICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9sZW5ndGgsCisgICAgcHNhX2FsZ29yaXRobV90IGFsZywKKyAgICBjb25zdCB1aW50OF90ICppbnB1dCwgc2l6ZV90IGlucHV0X2xlbmd0aCwKKyAgICB1aW50OF90ICpvdXRwdXQsIHNpemVfdCBvdXRwdXRfc2l6ZSwgc2l6ZV90ICpvdXRwdXRfbGVuZ3RoKQoreworICAgIHJldHVybiAoCisgICAgICAgIHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX29uZXNob3QoCisgICAgICAgICAgICBNQkVEVExTX0RFQ1JZUFQsCisgICAgICAgICAgICBhdHRyaWJ1dGVzLAorICAgICAgICAgICAga2V5LCBrZXlfbGVuZ3RoLAorICAgICAgICAgICAgYWxnLAorICAgICAgICAgICAgaW5wdXQsIGlucHV0X2xlbmd0aCwKKyAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0X3NpemUsIG91dHB1dF9sZW5ndGgpICk7Cit9CisKK3N0YXRpYyBwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfc2V0dXAoCisgICAgbWJlZHRsc19vcGVyYXRpb25fdCBkaXJlY3Rpb24sCisgICAgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKKyAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICBjb25zdCB1aW50OF90ICprZXksIHNpemVfdCBrZXlfbGVuZ3RoLAorICAgIHBzYV9hbGdvcml0aG1fdCBhbGcpCit7CisgICAgY29uc3QgbWJlZHRsc19jaXBoZXJfaW5mb190ICpjaXBoZXJfaW5mbyA9IE5VTEw7CisgICAgaW50IHJldCA9IDA7CisKKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cysrOworCisgICAgaWYoIG9wZXJhdGlvbi0+YWxnICE9IDAgKQorICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9CQURfU1RBVEUgKTsKKworICAgIC8qIFdpcGluZyB0aGUgZW50aXJlIHN0cnVjdCBoZXJlLCBpbnN0ZWFkIG9mIG1lbWJlci1ieS1tZW1iZXIuIFRoaXMgaXMgdXNlZnVsCisgICAgICogZm9yIHRoZSB0ZXN0IHN1aXRlLCBzaW5jZSBpdCBnaXZlcyBhIGNoYW5jZSBvZiBjYXRjaGluZyBtZW1vcnkgY29ycnVwdGlvbgorICAgICAqIGVycm9ycyBzaG91bGQgdGhlIGNvcmUgbm90IGhhdmUgYWxsb2NhdGVkIChlbm91Z2gpIG1lbW9yeSBmb3Igb3VyIGNvbnRleHQKKyAgICAgKiBzdHJ1Y3QuICovCisgICAgbWVtc2V0KCBvcGVyYXRpb24sIDAsIHNpemVvZiggKm9wZXJhdGlvbiApICk7CisKKyAgICAvKiBBbGxvdyBvdmVycmlkaW5nIHJldHVybiB2YWx1ZSBmb3IgdGVzdGluZyBwdXJwb3NlcyAqLworICAgIGlmKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgIHJldHVybiggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgKTsKKworICAgIC8qIFRlc3QgZHJpdmVyIHN1cHBvcnRzIEFFUy1DVFIgb25seSwgdG8gdmVyaWZ5IG9wZXJhdGlvbiBjYWxscy4gKi8KKyAgICBpZiggYWxnICE9IFBTQV9BTEdfQ1RSIHx8CisgICAgICAgIHBzYV9nZXRfa2V5X3R5cGUoIGF0dHJpYnV0ZXMgKSAhPSBQU0FfS0VZX1RZUEVfQUVTICkKKyAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworCisgICAgb3BlcmF0aW9uLT5hbGcgPSBhbGc7CisgICAgb3BlcmF0aW9uLT5pdl9zaXplID0gMTY7CisKKyAgICBjaXBoZXJfaW5mbyA9IG1iZWR0bHNfY2lwaGVyX2luZm9fZnJvbV92YWx1ZXMoIE1CRURUTFNfQ0lQSEVSX0lEX0FFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9sZW5ndGggKiA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19NT0RFX0NUUiApOworICAgIGlmKCBjaXBoZXJfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworCisgICAgbWJlZHRsc19jaXBoZXJfaW5pdCggJm9wZXJhdGlvbi0+Y2lwaGVyICk7CisgICAgcmV0ID0gbWJlZHRsc19jaXBoZXJfc2V0dXAoICZvcGVyYXRpb24tPmNpcGhlciwgY2lwaGVyX2luZm8gKTsKKyAgICBpZiggcmV0ICE9IDAgKSB7CisgICAgICAgIG1iZWR0bHNfY2lwaGVyX2ZyZWUoICZvcGVyYXRpb24tPmNpcGhlciApOworICAgICAgICByZXR1cm4oIG1iZWR0bHNfdG9fcHNhX2Vycm9yKCByZXQgKSApOworICAgIH0KKworICAgIHJldCA9IG1iZWR0bHNfY2lwaGVyX3NldGtleSggJm9wZXJhdGlvbi0+Y2lwaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2xlbmd0aCAqIDgsIGRpcmVjdGlvbiApOworICAgIGlmKCByZXQgIT0gMCApIHsKKyAgICAgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJm9wZXJhdGlvbi0+Y2lwaGVyICk7CisgICAgICAgIHJldHVybiggbWJlZHRsc190b19wc2FfZXJyb3IoIHJldCApICk7CisgICAgfQorCisgICAgb3BlcmF0aW9uLT5pdl9zZXQgPSAwOworICAgIG9wZXJhdGlvbi0+aXZfcmVxdWlyZWQgPSAxOworICAgIG9wZXJhdGlvbi0+a2V5X3NldCA9IDE7CisKKyAgICByZXR1cm4oIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICk7Cit9CisKK3BzYV9zdGF0dXNfdCB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9lbmNyeXB0X3NldHVwKAorICAgIHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnKQoreworICAgIHJldHVybiAoIHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX3NldHVwKCBNQkVEVExTX0VOQ1JZUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGcgKSApOworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfZGVjcnlwdF9zZXR1cCgKKyAgICB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAorICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9sZW5ndGgsCisgICAgcHNhX2FsZ29yaXRobV90IGFsZykKK3sKKyAgICByZXR1cm4gKCB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9zZXR1cCggTUJFRFRMU19ERUNSWVBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnICkgKTsKK30KKworcHNhX3N0YXR1c190IHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX2Fib3J0KAorICAgIHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX29wZXJhdGlvbl90ICpvcGVyYXRpb24pCit7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMrKzsKKworICAgIGlmKCBvcGVyYXRpb24tPmFsZyA9PSAwICkKKyAgICAgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOworICAgIGlmKCBvcGVyYXRpb24tPmFsZyAhPSBQU0FfQUxHX0NUUiApCisgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JBRF9TVEFURSApOworCisgICAgbWJlZHRsc19jaXBoZXJfZnJlZSggJm9wZXJhdGlvbi0+Y2lwaGVyICk7CisKKyAgICAvKiBXaXBpbmcgdGhlIGVudGlyZSBzdHJ1Y3QgaGVyZSwgaW5zdGVhZCBvZiBtZW1iZXItYnktbWVtYmVyLiBUaGlzIGlzIHVzZWZ1bAorICAgICAqIGZvciB0aGUgdGVzdCBzdWl0ZSwgc2luY2UgaXQgZ2l2ZXMgYSBjaGFuY2Ugb2YgY2F0Y2hpbmcgbWVtb3J5IGNvcnJ1cHRpb24KKyAgICAgKiBlcnJvcnMgc2hvdWxkIHRoZSBjb3JlIG5vdCBoYXZlIGFsbG9jYXRlZCAoZW5vdWdoKSBtZW1vcnkgZm9yIG91ciBjb250ZXh0CisgICAgICogc3RydWN0LiAqLworICAgIG1lbXNldCggb3BlcmF0aW9uLCAwLCBzaXplb2YoICpvcGVyYXRpb24gKSApOworCisgICAgcmV0dXJuKCBQU0FfU1VDQ0VTUyApOworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfZ2VuZXJhdGVfaXYoCisgICAgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKKyAgICB1aW50OF90ICppdiwKKyAgICBzaXplX3QgaXZfc2l6ZSwKKyAgICBzaXplX3QgKml2X2xlbmd0aCkKK3sKKyAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOworICAgIG1iZWR0bHNfdGVzdF9ybmRfcHNldWRvX2luZm8gcm5kX2luZm87CisgICAgbWVtc2V0KCAmcm5kX2luZm8sIDB4NUEsIHNpemVvZiggbWJlZHRsc190ZXN0X3JuZF9wc2V1ZG9faW5mbyApICk7CisKKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cysrOworCisgICAgaWYoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgcmV0dXJuKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyApOworCisgICAgaWYoIG9wZXJhdGlvbi0+YWxnICE9IFBTQV9BTEdfQ1RSICkKKyAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CisKKyAgICBpZiggb3BlcmF0aW9uLT5pdl9zZXQgfHwgISBvcGVyYXRpb24tPml2X3JlcXVpcmVkICkKKyAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CisKKyAgICBpZiggaXZfc2l6ZSA8IG9wZXJhdGlvbi0+aXZfc2l6ZSApCisgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwgKTsKKworICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKAorICAgICAgICBtYmVkdGxzX3Rlc3Rfcm5kX3BzZXVkb19yYW5kKCAmcm5kX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24tPml2X3NpemUgKSApOworICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICByZXR1cm4oIHN0YXR1cyApOworCisgICAgKml2X2xlbmd0aCA9IG9wZXJhdGlvbi0+aXZfc2l6ZTsKKyAgICBzdGF0dXMgPSB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9zZXRfaXYoIG9wZXJhdGlvbiwgaXYsICppdl9sZW5ndGggKTsKKworICAgIHJldHVybiggc3RhdHVzICk7Cit9CisKK3BzYV9zdGF0dXNfdCB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9zZXRfaXYoCisgICAgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKKyAgICBjb25zdCB1aW50OF90ICppdiwKKyAgICBzaXplX3QgaXZfbGVuZ3RoKQoreworICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CisKKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cysrOworCisgICAgaWYoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgcmV0dXJuKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyApOworCisgICAgaWYoIG9wZXJhdGlvbi0+YWxnICE9IFBTQV9BTEdfQ1RSICkKKyAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CisKKyAgICBpZiggb3BlcmF0aW9uLT5pdl9zZXQgfHwgISBvcGVyYXRpb24tPml2X3JlcXVpcmVkICkKKyAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CisKKyAgICBpZiggaXZfbGVuZ3RoICE9IG9wZXJhdGlvbi0+aXZfc2l6ZSApCisgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKKworICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKAorICAgICAgICBtYmVkdGxzX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24tPmNpcGhlciwgaXYsIGl2X2xlbmd0aCApICk7CisKKyAgICBpZiggc3RhdHVzID09IFBTQV9TVUNDRVNTICkKKyAgICAgICAgb3BlcmF0aW9uLT5pdl9zZXQgPSAxOworCisgICAgcmV0dXJuKCBzdGF0dXMgKTsKK30KKworcHNhX3N0YXR1c190IHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX3VwZGF0ZSgKKyAgICB0ZXN0X3RyYW5zcGFyZW50X2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAorICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LAorICAgIHNpemVfdCBpbnB1dF9sZW5ndGgsCisgICAgdWludDhfdCAqb3V0cHV0LAorICAgIHNpemVfdCBvdXRwdXRfc2l6ZSwKKyAgICBzaXplX3QgKm91dHB1dF9sZW5ndGgpCit7CisgICAgcHNhX3N0YXR1c190IHN0YXR1czsKKworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzKys7CisKKyAgICBpZiggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICByZXR1cm4oIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICk7CisKKyAgICBpZiggb3BlcmF0aW9uLT5hbGcgIT0gUFNBX0FMR19DVFIgKQorICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9CQURfU1RBVEUgKTsKKworICAgIC8qIENUUiBpcyBhIHN0cmVhbSBjaXBoZXIsIHNvIGRhdGEgaW4gYW5kIG91dCBhcmUgYWx3YXlzIHRoZSBzYW1lIHNpemUgKi8KKyAgICBpZiggb3V0cHV0X3NpemUgPCBpbnB1dF9sZW5ndGggKQorICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICk7CisKKyAgICBzdGF0dXMgPSBtYmVkdGxzX3RvX3BzYV9lcnJvcigKKyAgICAgICAgbWJlZHRsc19jaXBoZXJfdXBkYXRlKCAmb3BlcmF0aW9uLT5jaXBoZXIsIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2xlbmd0aCwgb3V0cHV0LCBvdXRwdXRfbGVuZ3RoICkgKTsKKworICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgaWYoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfb3V0cHV0ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaWYoIG91dHB1dF9zaXplIDwgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9vdXRwdXRfbGVuZ3RoICkKKyAgICAgICAgICAgIHJldHVybiBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTDsKKworICAgICAgICBtZW1jcHkoIG91dHB1dCwKKyAgICAgICAgICAgICAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX291dHB1dCwKKyAgICAgICAgICAgICAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGggKTsKKyAgICAgICAgKm91dHB1dF9sZW5ndGggPSB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyApOworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF9jaXBoZXJfZmluaXNoKAorICAgIHRlc3RfdHJhbnNwYXJlbnRfY2lwaGVyX29wZXJhdGlvbl90ICpvcGVyYXRpb24sCisgICAgdWludDhfdCAqb3V0cHV0LAorICAgIHNpemVfdCBvdXRwdXRfc2l6ZSwKKyAgICBzaXplX3QgKm91dHB1dF9sZW5ndGgpCit7CisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9HRU5FUklDX0VSUk9SOworICAgIHVpbnQ4X3QgdGVtcF9vdXRwdXRfYnVmZmVyW01CRURUTFNfTUFYX0JMT0NLX0xFTkdUSF07CisKKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cysrOworCisgICAgaWYoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgcmV0dXJuKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyApOworCisgICAgaWYoIG9wZXJhdGlvbi0+YWxnICE9IFBTQV9BTEdfQ1RSICkKKyAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CisKKyAgICBpZiggISBvcGVyYXRpb24tPmtleV9zZXQgKQorICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9CQURfU1RBVEUgKTsKKworICAgIGlmKCBvcGVyYXRpb24tPml2X3JlcXVpcmVkICYmICEgb3BlcmF0aW9uLT5pdl9zZXQgKQorICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9CQURfU1RBVEUgKTsKKworICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKAorICAgICAgICBtYmVkdGxzX2NpcGhlcl9maW5pc2goICZvcGVyYXRpb24tPmNpcGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX291dHB1dF9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2xlbmd0aCApICk7CisKKyAgICBtYmVkdGxzX2NpcGhlcl9mcmVlKCAmb3BlcmF0aW9uLT5jaXBoZXIgKTsKKworICAgIGlmKCBzdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICByZXR1cm4oIHN0YXR1cyApOworCisgICAgaWYoICpvdXRwdXRfbGVuZ3RoID09IDAgKQorICAgICAgICA7IC8qIE5vdGhpbmcgdG8gY29weS4gTm90ZSB0aGF0IG91dHB1dCBtYXkgYmUgTlVMTCBpbiB0aGlzIGNhc2UuICovCisgICAgZWxzZSBpZiggb3V0cHV0X3NpemUgPj0gKm91dHB1dF9sZW5ndGggKQorICAgICAgICBtZW1jcHkoIG91dHB1dCwgdGVtcF9vdXRwdXRfYnVmZmVyLCAqb3V0cHV0X2xlbmd0aCApOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCApOworCisKKyAgICBpZiggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9vdXRwdXQgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggb3V0cHV0X3NpemUgPCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGggKQorICAgICAgICAgICAgcmV0dXJuIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMOworCisgICAgICAgIG1lbWNweSggb3V0cHV0LAorICAgICAgICAgICAgICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfb3V0cHV0LAorICAgICAgICAgICAgICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfb3V0cHV0X2xlbmd0aCApOworICAgICAgICAqb3V0cHV0X2xlbmd0aCA9IHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfb3V0cHV0X2xlbmd0aDsKKyAgICB9CisKKyAgICByZXR1cm4oIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICk7Cit9CisKKy8qCisgKiBvcGFxdWUgdmVyc2lvbnMsIHRvIGRvCisgKi8KK3BzYV9zdGF0dXNfdCB0ZXN0X29wYXF1ZV9jaXBoZXJfZW5jcnlwdCgKKyAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICBjb25zdCB1aW50OF90ICprZXksIHNpemVfdCBrZXlfbGVuZ3RoLAorICAgIHBzYV9hbGdvcml0aG1fdCBhbGcsCisgICAgY29uc3QgdWludDhfdCAqaW5wdXQsIHNpemVfdCBpbnB1dF9sZW5ndGgsCisgICAgdWludDhfdCAqb3V0cHV0LCBzaXplX3Qgb3V0cHV0X3NpemUsIHNpemVfdCAqb3V0cHV0X2xlbmd0aCkKK3sKKyAgICAodm9pZCkgYXR0cmlidXRlczsKKyAgICAodm9pZCkga2V5OworICAgICh2b2lkKSBrZXlfbGVuZ3RoOworICAgICh2b2lkKSBhbGc7CisgICAgKHZvaWQpIGlucHV0OworICAgICh2b2lkKSBpbnB1dF9sZW5ndGg7CisgICAgKHZvaWQpIG91dHB1dDsKKyAgICAodm9pZCkgb3V0cHV0X3NpemU7CisgICAgKHZvaWQpIG91dHB1dF9sZW5ndGg7CisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF9vcGFxdWVfY2lwaGVyX2RlY3J5cHQoCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAorICAgIGNvbnN0IHVpbnQ4X3QgKmlucHV0LCBzaXplX3QgaW5wdXRfbGVuZ3RoLAorICAgIHVpbnQ4X3QgKm91dHB1dCwgc2l6ZV90IG91dHB1dF9zaXplLCBzaXplX3QgKm91dHB1dF9sZW5ndGgpCit7CisgICAgKHZvaWQpIGF0dHJpYnV0ZXM7CisgICAgKHZvaWQpIGtleTsKKyAgICAodm9pZCkga2V5X2xlbmd0aDsKKyAgICAodm9pZCkgYWxnOworICAgICh2b2lkKSBpbnB1dDsKKyAgICAodm9pZCkgaW5wdXRfbGVuZ3RoOworICAgICh2b2lkKSBvdXRwdXQ7CisgICAgKHZvaWQpIG91dHB1dF9zaXplOworICAgICh2b2lkKSBvdXRwdXRfbGVuZ3RoOworICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKK30KKworcHNhX3N0YXR1c190IHRlc3Rfb3BhcXVlX2NpcGhlcl9lbmNyeXB0X3NldHVwKAorICAgIHRlc3Rfb3BhcXVlX2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAorICAgIGNvbnN0IHBzYV9rZXlfYXR0cmlidXRlc190ICphdHRyaWJ1dGVzLAorICAgIGNvbnN0IHVpbnQ4X3QgKmtleSwgc2l6ZV90IGtleV9sZW5ndGgsCisgICAgcHNhX2FsZ29yaXRobV90IGFsZykKK3sKKyAgICAodm9pZCkgb3BlcmF0aW9uOworICAgICh2b2lkKSBhdHRyaWJ1dGVzOworICAgICh2b2lkKSBrZXk7CisgICAgKHZvaWQpIGtleV9sZW5ndGg7CisgICAgKHZvaWQpIGFsZzsKKyAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7Cit9CisKK3BzYV9zdGF0dXNfdCB0ZXN0X29wYXF1ZV9jaXBoZXJfZGVjcnlwdF9zZXR1cCgKKyAgICB0ZXN0X29wYXF1ZV9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKKyAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICBjb25zdCB1aW50OF90ICprZXksIHNpemVfdCBrZXlfbGVuZ3RoLAorICAgIHBzYV9hbGdvcml0aG1fdCBhbGcpCit7CisgICAgKHZvaWQpIG9wZXJhdGlvbjsKKyAgICAodm9pZCkgYXR0cmlidXRlczsKKyAgICAodm9pZCkga2V5OworICAgICh2b2lkKSBrZXlfbGVuZ3RoOworICAgICh2b2lkKSBhbGc7CisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF9vcGFxdWVfY2lwaGVyX2Fib3J0KAorICAgIHRlc3Rfb3BhcXVlX2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uKQoreworICAgICh2b2lkKSBvcGVyYXRpb247CisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF9vcGFxdWVfY2lwaGVyX2dlbmVyYXRlX2l2KAorICAgIHRlc3Rfb3BhcXVlX2NpcGhlcl9vcGVyYXRpb25fdCAqb3BlcmF0aW9uLAorICAgIHVpbnQ4X3QgKml2LAorICAgIHNpemVfdCBpdl9zaXplLAorICAgIHNpemVfdCAqaXZfbGVuZ3RoKQoreworICAgICh2b2lkKSBvcGVyYXRpb247CisgICAgKHZvaWQpIGl2OworICAgICh2b2lkKSBpdl9zaXplOworICAgICh2b2lkKSBpdl9sZW5ndGg7CisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF9vcGFxdWVfY2lwaGVyX3NldF9pdigKKyAgICB0ZXN0X29wYXF1ZV9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKKyAgICBjb25zdCB1aW50OF90ICppdiwKKyAgICBzaXplX3QgaXZfbGVuZ3RoKQoreworICAgICh2b2lkKSBvcGVyYXRpb247CisgICAgKHZvaWQpIGl2OworICAgICh2b2lkKSBpdl9sZW5ndGg7CisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF9vcGFxdWVfY2lwaGVyX3VwZGF0ZSgKKyAgICB0ZXN0X29wYXF1ZV9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKKyAgICBjb25zdCB1aW50OF90ICppbnB1dCwKKyAgICBzaXplX3QgaW5wdXRfbGVuZ3RoLAorICAgIHVpbnQ4X3QgKm91dHB1dCwKKyAgICBzaXplX3Qgb3V0cHV0X3NpemUsCisgICAgc2l6ZV90ICpvdXRwdXRfbGVuZ3RoKQoreworICAgICh2b2lkKSBvcGVyYXRpb247CisgICAgKHZvaWQpIGlucHV0OworICAgICh2b2lkKSBpbnB1dF9sZW5ndGg7CisgICAgKHZvaWQpIG91dHB1dDsKKyAgICAodm9pZCkgb3V0cHV0X3NpemU7CisgICAgKHZvaWQpIG91dHB1dF9sZW5ndGg7CisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF9vcGFxdWVfY2lwaGVyX2ZpbmlzaCgKKyAgICB0ZXN0X29wYXF1ZV9jaXBoZXJfb3BlcmF0aW9uX3QgKm9wZXJhdGlvbiwKKyAgICB1aW50OF90ICpvdXRwdXQsCisgICAgc2l6ZV90IG91dHB1dF9zaXplLAorICAgIHNpemVfdCAqb3V0cHV0X2xlbmd0aCkKK3sKKyAgICAodm9pZCkgb3BlcmF0aW9uOworICAgICh2b2lkKSBvdXRwdXQ7CisgICAgKHZvaWQpIG91dHB1dF9zaXplOworICAgICh2b2lkKSBvdXRwdXRfbGVuZ3RoOworICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKK30KKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUyAmJiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCmRpZmYgLS1naXQgYS90ZXN0cy9zcmMvZHJpdmVycy9rZXlfbWFuYWdlbWVudC5jIGIvdGVzdHMvc3JjL2RyaXZlcnMva2V5X21hbmFnZW1lbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmVmNGI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3JjL2RyaXZlcnMva2V5X21hbmFnZW1lbnQuYwpAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqIFRlc3QgZHJpdmVyIGZvciBnZW5lcmF0aW5nIGFuZCB2ZXJpZnlpbmcga2V5cy4KKyAqIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGdlbmVyYXRpbmcgYW5kIHZlcmlmeWluZyBFQ0Mga2V5cy4KKyAqLworLyogIENvcHlyaWdodCBUaGUgTWJlZCBUTFMgQ29udHJpYnV0b3JzCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTKSAmJiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisjaW5jbHVkZSAicHNhL2NyeXB0by5oIgorI2luY2x1ZGUgInBzYV9jcnlwdG9fY29yZS5oIgorI2luY2x1ZGUgIm1iZWR0bHMvZWNwLmgiCisjaW5jbHVkZSAibWJlZHRscy9lcnJvci5oIgorCisjaW5jbHVkZSAidGVzdC9kcml2ZXJzL2tleV9tYW5hZ2VtZW50LmgiCisKKyNpbmNsdWRlICJ0ZXN0L3JhbmRvbS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3Rlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzX3QgdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MgPQorICAgIFRFU1RfRFJJVkVSX0tFWV9NQU5BR0VNRU5UX0lOSVQ7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X3RyYW5zcGFyZW50X2dlbmVyYXRlX2tleSgKKyAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICB1aW50OF90ICprZXksIHNpemVfdCBrZXlfc2l6ZSwgc2l6ZV90ICprZXlfbGVuZ3RoICkKK3sKKyAgICArK3Rlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzLmhpdHM7CisKKyAgICBpZiggdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgIHJldHVybiggdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX3N0YXR1cyApOworCisgICAgaWYoIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzLmZvcmNlZF9vdXRwdXQgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGggPiBrZXlfc2l6ZSApCisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICk7CisgICAgICAgIG1lbWNweSgga2V5LCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfb3V0cHV0LAorICAgICAgICAgICAgICAgIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzLmZvcmNlZF9vdXRwdXRfbGVuZ3RoICk7CisgICAgICAgICprZXlfbGVuZ3RoID0gdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGg7CisgICAgICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKKyAgICB9CisKKyAgICAvKiBDb3BpZWQgZnJvbSBwc2FfY3J5cHRvLmMgKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgaWYgKCBQU0FfS0VZX1RZUEVfSVNfRUNDKCBwc2FfZ2V0X2tleV90eXBlKCBhdHRyaWJ1dGVzICkgKQorICAgICAgICAgJiYgUFNBX0tFWV9UWVBFX0lTX0tFWV9QQUlSKCBwc2FfZ2V0X2tleV90eXBlKCBhdHRyaWJ1dGVzICkgKSApCisgICAgeworICAgICAgICBwc2FfZWNjX2ZhbWlseV90IGN1cnZlID0gUFNBX0tFWV9UWVBFX0VDQ19HRVRfRkFNSUxZKAorICAgICAgICAgICAgcHNhX2dldF9rZXlfdHlwZSggYXR0cmlidXRlcyApICk7CisgICAgICAgIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGdycF9pZCA9CisgICAgICAgICAgICBtYmVkdGxzX2VjY19ncm91cF9vZl9wc2EoCisgICAgICAgICAgICAgICAgY3VydmUsCisgICAgICAgICAgICAgICAgUFNBX0JJVFNfVE9fQllURVMoIHBzYV9nZXRfa2V5X2JpdHMoIGF0dHJpYnV0ZXMgKSApICk7CisgICAgICAgIGNvbnN0IG1iZWR0bHNfZWNwX2N1cnZlX2luZm8gKmN1cnZlX2luZm8gPQorICAgICAgICAgICAgbWJlZHRsc19lY3BfY3VydmVfaW5mb19mcm9tX2dycF9pZCggZ3JwX2lkICk7CisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgZWNwOworICAgICAgICBtYmVkdGxzX3Rlc3Rfcm5kX3BzZXVkb19pbmZvIHJuZF9pbmZvOworICAgICAgICBtZW1zZXQoICZybmRfaW5mbywgMHg1QSwgc2l6ZW9mKCBtYmVkdGxzX3Rlc3Rfcm5kX3BzZXVkb19pbmZvICkgKTsKKworICAgICAgICBpbnQgcmV0ID0gTUJFRFRMU19FUlJfRVJST1JfQ09SUlVQVElPTl9ERVRFQ1RFRDsKKyAgICAgICAgaWYoIGF0dHJpYnV0ZXMtPmRvbWFpbl9wYXJhbWV0ZXJzX3NpemUgIT0gMCApCisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisgICAgICAgIGlmKCBncnBfaWQgPT0gTUJFRFRMU19FQ1BfRFBfTk9ORSB8fCBjdXJ2ZV9pbmZvID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworICAgICAgICBpZiggY3VydmVfaW5mby0+Yml0X3NpemUgIT0gcHNhX2dldF9rZXlfYml0cyggYXR0cmlidXRlcyApICkKKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgKTsKKyAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9pbml0KCAmZWNwICk7CisgICAgICAgIHJldCA9IG1iZWR0bHNfZWNwX2dlbl9rZXkoIGdycF9pZCwgJmVjcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1iZWR0bHNfdGVzdF9ybmRfcHNldWRvX3JhbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZybmRfaW5mbyApOworICAgICAgICBpZiggcmV0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoICZlY3AgKTsKKyAgICAgICAgICAgIHJldHVybiggbWJlZHRsc190b19wc2FfZXJyb3IoIHJldCApICk7CisgICAgICAgIH0KKworICAgICAgICAvKiBNYWtlIHN1cmUgdG8gdXNlIGV4cG9ydCByZXByZXNlbnRhdGlvbiAqLworICAgICAgICBzaXplX3QgYnl0ZXMgPSBQU0FfQklUU19UT19CWVRFUyggcHNhX2dldF9rZXlfYml0cyggYXR0cmlidXRlcyApICk7CisgICAgICAgIGlmKCBrZXlfc2l6ZSA8IGJ5dGVzICkKKyAgICAgICAgeworICAgICAgICAgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9mcmVlKCAmZWNwICk7CisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICk7CisgICAgICAgIH0KKyAgICAgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKAorICAgICAgICAgICAgbWJlZHRsc19tcGlfd3JpdGVfYmluYXJ5KCAmZWNwLmQsIGtleSwgYnl0ZXMgKSApOworCisgICAgICAgIGlmKCBzdGF0dXMgPT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICB7CisgICAgICAgICAgICAqa2V5X2xlbmd0aCA9IGJ5dGVzOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbWVtc2V0KCBrZXksIDAsIGJ5dGVzICk7CisgICAgICAgIH0KKworICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoICZlY3AgKTsKKyAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KKyAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7Cit9CisKK3BzYV9zdGF0dXNfdCB0ZXN0X29wYXF1ZV9nZW5lcmF0ZV9rZXkoCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X3NpemUsIHNpemVfdCAqa2V5X2xlbmd0aCApCit7CisgICAgKHZvaWQpIGF0dHJpYnV0ZXM7CisgICAgKHZvaWQpIGtleTsKKyAgICAodm9pZCkga2V5X3NpemU7CisgICAgKHZvaWQpIGtleV9sZW5ndGg7CisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF92YWxpZGF0ZV9rZXkoY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpiaXRzKQoreworICAgICsrdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuaGl0czsKKworICAgIGlmKCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTICkKKyAgICAgICAgcmV0dXJuKCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfc3RhdHVzICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNQX0MpCisgICAgcHNhX2tleV90eXBlX3QgdHlwZSA9IHBzYV9nZXRfa2V5X3R5cGUoIGF0dHJpYnV0ZXMgKTsKKyAgICBpZiAoIFBTQV9LRVlfVFlQRV9JU19FQ0MoIHR5cGUgKSApCisgICAgeworICAgICAgICAvLyBDb2RlIG1vc3RseSBjb3BpZWQgZnJvbSBwc2FfbG9hZF9lY3BfcmVwcmVzZW50YXRpb24KKyAgICAgICAgcHNhX2VjY19mYW1pbHlfdCBjdXJ2ZSA9IFBTQV9LRVlfVFlQRV9FQ0NfR0VUX0ZBTUlMWSggdHlwZSApOworICAgICAgICBtYmVkdGxzX2VjcF9ncm91cF9pZCBncnBfaWQ7CisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXIgZWNwOworICAgICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gUFNBX0VSUk9SX0NPUlJVUFRJT05fREVURUNURUQ7CisKKyAgICAgICAgaWYoIHBzYV9nZXRfa2V5X2JpdHMoIGF0dHJpYnV0ZXMgKSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQXR0ZW1wdCBhdXRvLWRldGVjdCBvZiBjdXJ2ZSBiaXQgc2l6ZQorICAgICAgICAgICAgc2l6ZV90IGN1cnZlX3NpemUgPSBkYXRhX2xlbmd0aDsKKworICAgICAgICAgICAgaWYoIFBTQV9LRVlfVFlQRV9JU19QVUJMSUNfS0VZKCB0eXBlICkgJiYKKyAgICAgICAgICAgICAgICBQU0FfS0VZX1RZUEVfRUNDX0dFVF9GQU1JTFkoIHR5cGUgKSAhPSBQU0FfRUNDX0ZBTUlMWV9NT05UR09NRVJZICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBBIFdlaWVyc3RyYXNzIHB1YmxpYyBrZXkgaXMgcmVwcmVzZW50ZWQgYXM6CisgICAgICAgICAgICAgICAgICogLSBUaGUgYnl0ZSAweDA0OworICAgICAgICAgICAgICAgICAqIC0gYHhfUGAgYXMgYSBgY2VpbGluZyhtLzgpYC1ieXRlIHN0cmluZywgYmlnLWVuZGlhbjsKKyAgICAgICAgICAgICAgICAgKiAtIGB5X1BgIGFzIGEgYGNlaWxpbmcobS84KWAtYnl0ZSBzdHJpbmcsIGJpZy1lbmRpYW4uCisgICAgICAgICAgICAgICAgICogU28gaXRzIGRhdGEgbGVuZ3RoIGlzIDJtKzEgd2hlcmUgbSBpcyB0aGUgY3VydmUgc2l6ZSBpbiBiaXRzLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmKCAoIGRhdGFfbGVuZ3RoICYgMSApID09IDAgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICk7CisgICAgICAgICAgICAgICAgY3VydmVfc2l6ZSA9IGRhdGFfbGVuZ3RoIC8gMjsKKworICAgICAgICAgICAgICAgIC8qIE1vbnRnb21lcnkgcHVibGljIGtleXMgYXJlIHJlcHJlc2VudGVkIGluIGNvbXByZXNzZWQgZm9ybWF0LCBtZWFuaW5nCisgICAgICAgICAgICAgICAgICogdGhlaXIgY3VydmVfc2l6ZSBpcyBlcXVhbCB0byB0aGUgYW1vdW50IG9mIGlucHV0LiAqLworCisgICAgICAgICAgICAgICAgLyogUHJpdmF0ZSBrZXlzIGFyZSByZXByZXNlbnRlZCBpbiB1bmNvbXByZXNzZWQgcHJpdmF0ZSByYW5kb20gaW50ZWdlcgorICAgICAgICAgICAgICAgICAqIGZvcm1hdCwgbWVhbmluZyB0aGVpciBjdXJ2ZV9zaXplIGlzIGVxdWFsIHRvIHRoZSBhbW91bnQgb2YgaW5wdXQuICovCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdycF9pZCA9IG1iZWR0bHNfZWNjX2dyb3VwX29mX3BzYSggY3VydmUsIGN1cnZlX3NpemUgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGdycF9pZCA9IG1iZWR0bHNfZWNjX2dyb3VwX29mX3BzYSggY3VydmUsCisgICAgICAgICAgICAgICAgUFNBX0JJVFNfVE9fQllURVMoIHBzYV9nZXRfa2V5X2JpdHMoIGF0dHJpYnV0ZXMgKSApICk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBtYmVkdGxzX2VjcF9jdXJ2ZV9pbmZvICpjdXJ2ZV9pbmZvID0KKyAgICAgICAgICAgIG1iZWR0bHNfZWNwX2N1cnZlX2luZm9fZnJvbV9ncnBfaWQoIGdycF9pZCApOworCisgICAgICAgIGlmKCBhdHRyaWJ1dGVzLT5kb21haW5fcGFyYW1ldGVyc19zaXplICE9IDAgKQorICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworICAgICAgICBpZiggZ3JwX2lkID09IE1CRURUTFNfRUNQX0RQX05PTkUgfHwgY3VydmVfaW5mbyA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKworICAgICAgICAqYml0cyA9IGN1cnZlX2luZm8tPmJpdF9zaXplOworCisgICAgICAgIG1iZWR0bHNfZWNwX2tleXBhaXJfaW5pdCggJmVjcCApOworCisgICAgICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZWNwLmdycCwgZ3JwX2lkICkgKTsKKyAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgICAgICBnb3RvIGVjcF9leGl0OworCisgICAgICAgIC8qIExvYWQgdGhlIGtleSBtYXRlcmlhbC4gKi8KKyAgICAgICAgaWYoIFBTQV9LRVlfVFlQRV9JU19QVUJMSUNfS0VZKCB0eXBlICkgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBMb2FkIHRoZSBwdWJsaWMgdmFsdWUuICovCisgICAgICAgICAgICBzdGF0dXMgPSBtYmVkdGxzX3RvX3BzYV9lcnJvcigKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9wb2ludF9yZWFkX2JpbmFyeSggJmVjcC5ncnAsICZlY3AuUSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sZW5ndGggKSApOworICAgICAgICAgICAgaWYoIHN0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgICAgICAgICAgZ290byBlY3BfZXhpdDsKKworICAgICAgICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgcG9pbnQgaXMgb24gdGhlIGN1cnZlLiAqLworICAgICAgICAgICAgc3RhdHVzID0gbWJlZHRsc190b19wc2FfZXJyb3IoCisgICAgICAgICAgICAgICAgbWJlZHRsc19lY3BfY2hlY2tfcHVia2V5KCAmZWNwLmdycCwgJmVjcC5RICkgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIExvYWQgYW5kIHZhbGlkYXRlIHRoZSBzZWNyZXQgdmFsdWUuICovCisgICAgICAgICAgICBzdGF0dXMgPSBtYmVkdGxzX3RvX3BzYV9lcnJvcigKKyAgICAgICAgICAgICAgICBtYmVkdGxzX2VjcF9yZWFkX2tleSggZWNwLmdycC5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVjcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sZW5ndGggKSApOworICAgICAgICB9CisKK2VjcF9leGl0OgorICAgICAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2ZyZWUoICZlY3AgKTsKKyAgICAgICAgcmV0dXJuKCBzdGF0dXMgKTsKKyAgICB9CisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2Vsc2UKKyAgICAodm9pZCkgZGF0YTsKKyAgICAodm9pZCkgZGF0YV9sZW5ndGg7CisgICAgKHZvaWQpIGJpdHM7CisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworI2VuZGlmIC8qIE1CRURUTFNfRUNQX0MgKi8KK30KKworI2VuZGlmIC8qIE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTICYmIFBTQV9DUllQVE9fRFJJVkVSX1RFU1QgKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL3NyYy9kcml2ZXJzL3NpZ25hdHVyZS5jIGIvdGVzdHMvc3JjL2RyaXZlcnMvc2lnbmF0dXJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VhMDM1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NyYy9kcml2ZXJzL3NpZ25hdHVyZS5jCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogVGVzdCBkcml2ZXIgZm9yIHNpZ25hdHVyZSBmdW5jdGlvbnMuCisgKiBDdXJyZW50bHkgc3VwcG9ydHMgc2lnbmluZyBhbmQgdmVyaWZ5aW5nIHByZWNhbGN1bGF0ZWQgaGFzaGVzLCB1c2luZworICogb25seSBkZXRlcm1pbmlzdGljIEVDRFNBIG9uIGN1cnZlcyBzZWNwMjU2cjEsIHNlY3AzODRyMSBhbmQgc2VjcDUyMXIxLgorICovCisvKiAgQ29weXJpZ2h0IFRoZSBNYmVkIFRMUyBDb250cmlidXRvcnMKKyAqICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorICogIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVAorICogIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmICFkZWZpbmVkKE1CRURUTFNfQ09ORklHX0ZJTEUpCisjaW5jbHVkZSAibWJlZHRscy9jb25maWcuaCIKKyNlbHNlCisjaW5jbHVkZSBNQkVEVExTX0NPTkZJR19GSUxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMpICYmIGRlZmluZWQoUFNBX0NSWVBUT19EUklWRVJfVEVTVCkKKyNpbmNsdWRlICJwc2EvY3J5cHRvLmgiCisjaW5jbHVkZSAicHNhX2NyeXB0b19jb3JlLmgiCisjaW5jbHVkZSAibWJlZHRscy9lY3AuaCIKKworI2luY2x1ZGUgInRlc3QvZHJpdmVycy9zaWduYXR1cmUuaCIKKworI2luY2x1ZGUgIm1iZWR0bHMvbWQuaCIKKyNpbmNsdWRlICJtYmVkdGxzL2VjZHNhLmgiCisKKyNpbmNsdWRlICJ0ZXN0L3JhbmRvbS5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3Rlc3RfZHJpdmVyX3NpZ25hdHVyZV9ob29rc190IHRlc3RfZHJpdmVyX3NpZ25hdHVyZV9zaWduX2hvb2tzID0gVEVTVF9EUklWRVJfU0lHTkFUVVJFX0lOSVQ7Cit0ZXN0X2RyaXZlcl9zaWduYXR1cmVfaG9va3NfdCB0ZXN0X2RyaXZlcl9zaWduYXR1cmVfdmVyaWZ5X2hvb2tzID0gVEVTVF9EUklWRVJfU0lHTkFUVVJFX0lOSVQ7CisKK3BzYV9zdGF0dXNfdCB0ZXN0X3RyYW5zcGFyZW50X3NpZ25hdHVyZV9zaWduX2hhc2goCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAorICAgIGNvbnN0IHVpbnQ4X3QgKmhhc2gsIHNpemVfdCBoYXNoX2xlbmd0aCwKKyAgICB1aW50OF90ICpzaWduYXR1cmUsIHNpemVfdCBzaWduYXR1cmVfc2l6ZSwgc2l6ZV90ICpzaWduYXR1cmVfbGVuZ3RoICkKK3sKKyAgICArK3Rlc3RfZHJpdmVyX3NpZ25hdHVyZV9zaWduX2hvb2tzLmhpdHM7CisKKyAgICBpZiggdGVzdF9kcml2ZXJfc2lnbmF0dXJlX3NpZ25faG9va3MuZm9yY2VkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUyApCisgICAgICAgIHJldHVybiggdGVzdF9kcml2ZXJfc2lnbmF0dXJlX3NpZ25faG9va3MuZm9yY2VkX3N0YXR1cyApOworCisgICAgaWYoIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV9zaWduX2hvb2tzLmZvcmNlZF9vdXRwdXQgIT0gTlVMTCApCisgICAgeworICAgICAgICBpZiggdGVzdF9kcml2ZXJfc2lnbmF0dXJlX3NpZ25faG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGggPiBzaWduYXR1cmVfc2l6ZSApCisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICk7CisgICAgICAgIG1lbWNweSggc2lnbmF0dXJlLCB0ZXN0X2RyaXZlcl9zaWduYXR1cmVfc2lnbl9ob29rcy5mb3JjZWRfb3V0cHV0LAorICAgICAgICAgICAgICAgIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV9zaWduX2hvb2tzLmZvcmNlZF9vdXRwdXRfbGVuZ3RoICk7CisgICAgICAgICpzaWduYXR1cmVfbGVuZ3RoID0gdGVzdF9kcml2ZXJfc2lnbmF0dXJlX3NpZ25faG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGg7CisgICAgICAgIHJldHVybiggUFNBX1NVQ0NFU1MgKTsKKyAgICB9CisKKyAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzID0gUFNBX0VSUk9SX05PVF9TVVBQT1JURUQ7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgJiYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpCisgICAgaWYoIGFsZyAhPSBQU0FfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EoIFBTQV9BTEdfU0hBXzI1NiApICkKKyAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworICAgIG1iZWR0bHNfZWNwX2dyb3VwX2lkIGdycF9pZDsKKyAgICBzd2l0Y2goIHBzYV9nZXRfa2V5X3R5cGUoIGF0dHJpYnV0ZXMgKSApCisgICAgeworICAgICAgICBjYXNlIFBTQV9FQ0NfQ1VSVkVfU0VDUF9SMToKKyAgICAgICAgICAgIHN3aXRjaCggcHNhX2dldF9rZXlfYml0cyggYXR0cmlidXRlcyApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI1NjoKKyAgICAgICAgICAgICAgICAgICAgZ3JwX2lkID0gTUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM4NDoKKyAgICAgICAgICAgICAgICAgICAgZ3JwX2lkID0gTUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDUyMToKKyAgICAgICAgICAgICAgICAgICAgZ3JwX2lkID0gTUJFRFRMU19FQ1BfRFBfU0VDUDUyMVIxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyAgICB9CisKKyAgICAvKiBCZXlvbmQgdGhpcyBwb2ludCwgdGhlIGRyaXZlciBpcyBhY3R1YWxseSBkb2luZyB0aGUgd29yayBvZgorICAgICAqIGNhbGN1bGF0aW5nIHRoZSBzaWduYXR1cmUuICovCisKKyAgICBzdGF0dXMgPSBQU0FfRVJST1JfR0VORVJJQ19FUlJPUjsKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBtYmVkdGxzX21waSByLCBzOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZyICk7CisgICAgbWJlZHRsc19tcGlfaW5pdCggJnMgKTsKKyAgICBtYmVkdGxzX2VjcF9rZXlwYWlyIGVjcDsKKyAgICBtYmVkdGxzX2VjcF9rZXlwYWlyX2luaXQoICZlY3AgKTsKKyAgICBzaXplX3QgY3VydmVfYnl0ZXMgPSBQU0FfQklUU19UT19CWVRFUyggZWNwLmdycC5wYml0cyApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZWNwLmdycCwgZ3JwX2lkICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfYmluYXJ5KCAmZWNwLmdycCwgJmVjcC5RLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwga2V5X2xlbmd0aCApICk7CisKKyAgICAvKiBDb2RlIGFkYXB0ZWQgZnJvbSBwc2FfZWNkc2Ffc2lnbigpIGluIHBzYV9jcnlwdG8uYy4gKi8KKyAgICBtYmVkdGxzX21kX3R5cGVfdCBtZF9hbGcgPSBNQkVEVExTX01EX1NIQTI1NjsKKyAgICBpZiggc2lnbmF0dXJlX3NpemUgPCAyICogY3VydmVfYnl0ZXMgKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEw7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjZHNhX3NpZ25fZGV0KCAmZWNwLmdycCwgJnIsICZzLCAmZWNwLmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCwgaGFzaF9sZW5ndGgsIG1kX2FsZyApICk7CisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV93cml0ZV9iaW5hcnkoICZyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlX2J5dGVzICkgKTsKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3dyaXRlX2JpbmFyeSggJnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSArIGN1cnZlX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZV9ieXRlcyApICk7CitjbGVhbnVwOgorICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKCByZXQgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmciApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZzICk7CisgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9mcmVlKCAmZWNwICk7CisgICAgaWYoIHN0YXR1cyA9PSBQU0FfU1VDQ0VTUyApCisgICAgICAgICpzaWduYXR1cmVfbGVuZ3RoID0gMiAqIGN1cnZlX2J5dGVzOworI2Vsc2UgLyogZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpICYmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDKSAmJiBcCisgICAgICAgICBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpICovCisgICAgKHZvaWQpIGF0dHJpYnV0ZXM7CisgICAgKHZvaWQpIGtleTsKKyAgICAodm9pZCkga2V5X2xlbmd0aDsKKyAgICAodm9pZCkgYWxnOworICAgICh2b2lkKSBoYXNoOworICAgICh2b2lkKSBoYXNoX2xlbmd0aDsKKyNlbmRpZiAvKiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgJiYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpICYmIFwKKyAgICAgICAgICBkZWZpbmVkKE1CRURUTFNfU0hBMjU2X0MpICovCisKKyAgICByZXR1cm4oIHN0YXR1cyApOworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF9vcGFxdWVfc2lnbmF0dXJlX3NpZ25faGFzaCgKKyAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICBjb25zdCB1aW50OF90ICprZXksIHNpemVfdCBrZXlfbGVuZ3RoLAorICAgIHBzYV9hbGdvcml0aG1fdCBhbGcsCisgICAgY29uc3QgdWludDhfdCAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuZ3RoLAorICAgIHVpbnQ4X3QgKnNpZ25hdHVyZSwgc2l6ZV90IHNpZ25hdHVyZV9zaXplLCBzaXplX3QgKnNpZ25hdHVyZV9sZW5ndGggKQoreworICAgICh2b2lkKSBhdHRyaWJ1dGVzOworICAgICh2b2lkKSBrZXk7CisgICAgKHZvaWQpIGtleV9sZW5ndGg7CisgICAgKHZvaWQpIGFsZzsKKyAgICAodm9pZCkgaGFzaDsKKyAgICAodm9pZCkgaGFzaF9sZW5ndGg7CisgICAgKHZvaWQpIHNpZ25hdHVyZTsKKyAgICAodm9pZCkgc2lnbmF0dXJlX3NpemU7CisgICAgKHZvaWQpIHNpZ25hdHVyZV9sZW5ndGg7CisgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworfQorCitwc2Ffc3RhdHVzX3QgdGVzdF90cmFuc3BhcmVudF9zaWduYXR1cmVfdmVyaWZ5X2hhc2goCisgICAgY29uc3QgcHNhX2tleV9hdHRyaWJ1dGVzX3QgKmF0dHJpYnV0ZXMsCisgICAgY29uc3QgdWludDhfdCAqa2V5LCBzaXplX3Qga2V5X2xlbmd0aCwKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnLAorICAgIGNvbnN0IHVpbnQ4X3QgKmhhc2gsIHNpemVfdCBoYXNoX2xlbmd0aCwKKyAgICBjb25zdCB1aW50OF90ICpzaWduYXR1cmUsIHNpemVfdCBzaWduYXR1cmVfbGVuZ3RoICkKK3sKKyAgICArK3Rlc3RfZHJpdmVyX3NpZ25hdHVyZV92ZXJpZnlfaG9va3MuaGl0czsKKworICAgIGlmKCB0ZXN0X2RyaXZlcl9zaWduYXR1cmVfdmVyaWZ5X2hvb2tzLmZvcmNlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MgKQorICAgICAgICByZXR1cm4oIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV92ZXJpZnlfaG9va3MuZm9yY2VkX3N0YXR1cyApOworCisgICAgcHNhX3N0YXR1c190IHN0YXR1cyA9IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEOworCisjaWYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpICYmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDKSAmJiBcCisgICAgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKQorICAgIGlmKCBhbGcgIT0gUFNBX0FMR19ERVRFUk1JTklTVElDX0VDRFNBKCBQU0FfQUxHX1NIQV8yNTYgKSApCisgICAgICAgIHJldHVybiggUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgKTsKKyAgICBtYmVkdGxzX2VjcF9ncm91cF9pZCBncnBfaWQ7CisgICAgc3dpdGNoKCBwc2FfZ2V0X2tleV90eXBlKCBhdHRyaWJ1dGVzICkgKQorICAgIHsKKyAgICAgICAgY2FzZSBQU0FfRUNDX0NVUlZFX1NFQ1BfUjE6CisgICAgICAgICAgICBzd2l0Y2goIHBzYV9nZXRfa2V5X2JpdHMoIGF0dHJpYnV0ZXMgKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAyNTY6CisgICAgICAgICAgICAgICAgICAgIGdycF9pZCA9IE1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzODQ6CisgICAgICAgICAgICAgICAgICAgIGdycF9pZCA9IE1CRURUTFNfRUNQX0RQX1NFQ1AzODRSMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA1MjE6CisgICAgICAgICAgICAgICAgICAgIGdycF9pZCA9IE1CRURUTFNfRUNQX0RQX1NFQ1A1MjFSMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7CisgICAgfQorCisgICAgLyogQmV5b25kIHRoaXMgcG9pbnQsIHRoZSBkcml2ZXIgaXMgYWN0dWFsbHkgZG9pbmcgdGhlIHdvcmsgb2YKKyAgICAgKiBjYWxjdWxhdGluZyB0aGUgc2lnbmF0dXJlLiAqLworCisgICAgc3RhdHVzID0gUFNBX0VSUk9SX0dFTkVSSUNfRVJST1I7CisgICAgaW50IHJldCA9IDA7CisgICAgbWJlZHRsc19tcGkgciwgczsKKyAgICBtYmVkdGxzX21waV9pbml0KCAmciApOworICAgIG1iZWR0bHNfbXBpX2luaXQoICZzICk7CisgICAgbWJlZHRsc19lY3Bfa2V5cGFpciBlY3A7CisgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9pbml0KCAmZWNwICk7CisgICAgbWJlZHRsc190ZXN0X3JuZF9wc2V1ZG9faW5mbyBybmRfaW5mbzsKKyAgICBtZW1zZXQoICZybmRfaW5mbywgMHg1QSwgc2l6ZW9mKCBtYmVkdGxzX3Rlc3Rfcm5kX3BzZXVkb19pbmZvICkgKTsKKyAgICBzaXplX3QgY3VydmVfYnl0ZXMgPSBQU0FfQklUU19UT19CWVRFUyggZWNwLmdycC5wYml0cyApOworCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjcF9ncm91cF9sb2FkKCAmZWNwLmdycCwgZ3JwX2lkICkgKTsKKworICAgIC8qIENvZGUgYWRhcHRlZCBmcm9tIHBzYV9lY2RzYV92ZXJpZnkoKSBpbiBwc2FfY3J5cHRvLmMuICovCisgICAgaWYoIHNpZ25hdHVyZV9sZW5ndGggPCAyICogY3VydmVfYnl0ZXMgKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEw7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfbXBpX3JlYWRfYmluYXJ5KCAmciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmVfYnl0ZXMgKSApOworICAgIE1CRURUTFNfTVBJX0NISyggbWJlZHRsc19tcGlfcmVhZF9iaW5hcnkoICZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSArIGN1cnZlX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlX2J5dGVzICkgKTsKKworICAgIGlmKCBQU0FfS0VZX1RZUEVfSVNfUFVCTElDX0tFWSggcHNhX2dldF9rZXlfdHlwZSggYXR0cmlidXRlcyApICkgKQorICAgICAgICBNQkVEVExTX01QSV9DSEsoIG1iZWR0bHNfZWNwX3BvaW50X3JlYWRfYmluYXJ5KCAmZWNwLmdycCwgJmVjcC5RLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwga2V5X2xlbmd0aCApICk7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX21waV9yZWFkX2JpbmFyeSggJmVjcC5kLCBrZXksIGtleV9sZW5ndGggKSApOworICAgICAgICBNQkVEVExTX01QSV9DSEsoCisgICAgICAgICAgICBtYmVkdGxzX2VjcF9tdWwoICZlY3AuZ3JwLCAmZWNwLlEsICZlY3AuZCwgJmVjcC5ncnAuRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1iZWR0bHNfdGVzdF9ybmRfcHNldWRvX3JhbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZybmRfaW5mbyApICk7CisgICAgfQorCisgICAgTUJFRFRMU19NUElfQ0hLKCBtYmVkdGxzX2VjZHNhX3ZlcmlmeSggJmVjcC5ncnAsIGhhc2gsIGhhc2hfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZWNwLlEsICZyLCAmcyApICk7CitjbGVhbnVwOgorICAgIHN0YXR1cyA9IG1iZWR0bHNfdG9fcHNhX2Vycm9yKCByZXQgKTsKKyAgICBtYmVkdGxzX21waV9mcmVlKCAmciApOworICAgIG1iZWR0bHNfbXBpX2ZyZWUoICZzICk7CisgICAgbWJlZHRsc19lY3Bfa2V5cGFpcl9mcmVlKCAmZWNwICk7CisjZWxzZSAvKiBkZWZpbmVkKE1CRURUTFNfRUNEU0FfQykgJiYgZGVmaW5lZChNQkVEVExTX0VDRFNBX0RFVEVSTUlOSVNUSUMpICYmIFwKKyAgICAgICAgIGRlZmluZWQoTUJFRFRMU19TSEEyNTZfQykgKi8KKyAgICAodm9pZCkgYXR0cmlidXRlczsKKyAgICAodm9pZCkga2V5OworICAgICh2b2lkKSBrZXlfbGVuZ3RoOworICAgICh2b2lkKSBhbGc7CisgICAgKHZvaWQpIGhhc2g7CisgICAgKHZvaWQpIGhhc2hfbGVuZ3RoOworICAgICh2b2lkKSBzaWduYXR1cmU7CisgICAgKHZvaWQpIHNpZ25hdHVyZV9sZW5ndGg7CisjZW5kaWYgLyogZGVmaW5lZChNQkVEVExTX0VDRFNBX0MpICYmIGRlZmluZWQoTUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDKSAmJiBcCisgICAgICAgICAgZGVmaW5lZChNQkVEVExTX1NIQTI1Nl9DKSAqLworCisgICAgcmV0dXJuKCBzdGF0dXMgKTsKK30KKworcHNhX3N0YXR1c190IHRlc3Rfb3BhcXVlX3NpZ25hdHVyZV92ZXJpZnlfaGFzaCgKKyAgICBjb25zdCBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCAqYXR0cmlidXRlcywKKyAgICBjb25zdCB1aW50OF90ICprZXksIHNpemVfdCBrZXlfbGVuZ3RoLAorICAgIHBzYV9hbGdvcml0aG1fdCBhbGcsCisgICAgY29uc3QgdWludDhfdCAqaGFzaCwgc2l6ZV90IGhhc2hfbGVuZ3RoLAorICAgIGNvbnN0IHVpbnQ4X3QgKnNpZ25hdHVyZSwgc2l6ZV90IHNpZ25hdHVyZV9sZW5ndGggKQoreworICAgICh2b2lkKSBhdHRyaWJ1dGVzOworICAgICh2b2lkKSBrZXk7CisgICAgKHZvaWQpIGtleV9sZW5ndGg7CisgICAgKHZvaWQpIGFsZzsKKyAgICAodm9pZCkgaGFzaDsKKyAgICAodm9pZCkgaGFzaF9sZW5ndGg7CisgICAgKHZvaWQpIHNpZ25hdHVyZTsKKyAgICAodm9pZCkgc2lnbmF0dXJlX2xlbmd0aDsKKyAgICByZXR1cm4oIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEICk7Cit9CisKKyNlbmRpZiAvKiBNQkVEVExTX1BTQV9DUllQVE9fRFJJVkVSUyAmJiBQU0FfQ1JZUFRPX0RSSVZFUl9URVNUICovCmRpZmYgLS1naXQgYS90ZXN0cy9zcmMvZHJpdmVycy9zaXplLmMgYi90ZXN0cy9zcmMvZHJpdmVycy9zaXplLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhODY5MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NyYy9kcml2ZXJzL3NpemUuYwpAQCAtMCwwICsxLDQyIEBACisvKgorICogVGVzdCBkcml2ZXIgZm9yIHJldHJpZXZpbmcga2V5IGNvbnRleHQgc2l6ZS4KKyAqIE9ubHkgdXNlZCBieSBvcGFxdWUgZHJpdmVycy4KKyAqLworLyogIENvcHlyaWdodCBUaGUgTWJlZCBUTFMgQ29udHJpYnV0b3JzCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyAqICBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAqICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZiAhZGVmaW5lZChNQkVEVExTX0NPTkZJR19GSUxFKQorI2luY2x1ZGUgIm1iZWR0bHMvY29uZmlnLmgiCisjZWxzZQorI2luY2x1ZGUgTUJFRFRMU19DT05GSUdfRklMRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19EUklWRVJTKSAmJiBkZWZpbmVkKFBTQV9DUllQVE9fRFJJVkVSX1RFU1QpCisKKyNpbmNsdWRlICJ0ZXN0L2RyaXZlcnMvc2l6ZS5oIgorCisjaWZkZWYgVEVTVF9LRVlfQ09OVEVYVF9TSVpFX0ZVTkNUSU9OCitzaXplX3QgdGVzdF9zaXplX2Z1bmN0aW9uKAorICAgIGNvbnN0IHBzYV9rZXlfdHlwZV90IGtleV90eXBlLAorICAgIGNvbnN0IHNpemVfdCBrZXlfYml0cyApCit7CisgICAgKHZvaWQpIGtleV90eXBlOworICAgICh2b2lkKSBrZXlfYml0czsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKlRFU1RfS0VZX0NPTlRFWFRfU0laRV9GVU5DVElPTiAqLworCisjZW5kaWYgLyogTUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlMgJiYgUFNBX0NSWVBUT19EUklWRVJfVEVTVCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3JjL2hlbHBlcnMuYyBiL3Rlc3RzL3NyYy9oZWxwZXJzLmMKaW5kZXggZjM4NTA3OS4uYTE4ZjFkNCAxMDA2NDQKLS0tIGEvdGVzdHMvc3JjL2hlbHBlcnMuYworKysgYi90ZXN0cy9zcmMvaGVscGVycy5jCkBAIC0xOSwxMCArMTksMzQgQEAKICNpbmNsdWRlIDx0ZXN0L21hY3Jvcy5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCisjaWYgZGVmaW5lZChNQkVEVExTX0NIRUNLX1BBUkFNUykKKyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogU3RhdGljIGdsb2JhbCB2YXJpYWJsZXMgKi8KKworI2lmIGRlZmluZWQoTUJFRFRMU19DSEVDS19QQVJBTVMpCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQ4X3QgZXhwZWN0ZWRfY2FsbDsKKyAgICB1aW50OF90IGV4cGVjdGVkX2NhbGxfaGFwcGVuZWQ7CisKKyAgICBqbXBfYnVmIHN0YXRlOworCisgICAgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9sb2NhdGlvbl9yZWNvcmRfdCBsb2NhdGlvbl9yZWNvcmQ7Cit9CitwYXJhbV9mYWlsZWRfY3R4X3Q7CitzdGF0aWMgcGFyYW1fZmFpbGVkX2N0eF90IHBhcmFtX2ZhaWxlZF9jdHg7CisjZW5kaWYKKwogI2lmIGRlZmluZWQoTUJFRFRMU19QTEFURk9STV9DKQogc3RhdGljIG1iZWR0bHNfcGxhdGZvcm1fY29udGV4dCBwbGF0Zm9ybV9jdHg7CiAjZW5kaWYKIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEhlbHBlciBGdW5jdGlvbnMgKi8KKwogaW50IG1iZWR0bHNfdGVzdF9wbGF0Zm9ybV9zZXR1cCggdm9pZCApCiB7CiAgICAgaW50IHJldCA9IDA7CkBAIC0xNTksMyArMTgzLDY0IEBACiAgICAgfQogICAgIHJldHVybiByZXQ7CiB9CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfQ0hFQ0tfUEFSQU1TKQordm9pZCBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2dldF9sb2NhdGlvbl9yZWNvcmQoCisgICAgICAgICBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2xvY2F0aW9uX3JlY29yZF90ICpsb2NhdGlvbl9yZWNvcmQgKQoreworICAgICpsb2NhdGlvbl9yZWNvcmQgPSBwYXJhbV9mYWlsZWRfY3R4LmxvY2F0aW9uX3JlY29yZDsKK30KKwordm9pZCBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2V4cGVjdF9jYWxsKCB2b2lkICkKK3sKKyAgICBwYXJhbV9mYWlsZWRfY3R4LmV4cGVjdGVkX2NhbGxfaGFwcGVuZWQgPSAwOworICAgIHBhcmFtX2ZhaWxlZF9jdHguZXhwZWN0ZWRfY2FsbCA9IDE7Cit9CisKK2ludCBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2NoZWNrX2V4cGVjdGVkX2NhbGwoIHZvaWQgKQoreworICAgIHBhcmFtX2ZhaWxlZF9jdHguZXhwZWN0ZWRfY2FsbCA9IDA7CisKKyAgICBpZiggcGFyYW1fZmFpbGVkX2N0eC5leHBlY3RlZF9jYWxsX2hhcHBlbmVkICE9IDAgKQorICAgICAgICByZXR1cm4oIDAgKTsKKworICAgIHJldHVybiggLTEgKTsKK30KKwordm9pZCogbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9nZXRfc3RhdGVfYnVmKCB2b2lkICkKK3sKKyAgICByZXR1cm4gJnBhcmFtX2ZhaWxlZF9jdHguc3RhdGU7Cit9CisKK3ZvaWQgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9yZXNldF9zdGF0ZSggdm9pZCApCit7CisgICAgbWVtc2V0KCBwYXJhbV9mYWlsZWRfY3R4LnN0YXRlLCAwLCBzaXplb2YoIHBhcmFtX2ZhaWxlZF9jdHguc3RhdGUgKSApOworfQorCit2b2lkIG1iZWR0bHNfcGFyYW1fZmFpbGVkKCBjb25zdCBjaGFyICpmYWlsdXJlX2NvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSApCit7CisgICAgLyogUmVjb3JkIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmFpbHVyZSAqLworICAgIHBhcmFtX2ZhaWxlZF9jdHgubG9jYXRpb25fcmVjb3JkLmZhaWx1cmVfY29uZGl0aW9uID0gZmFpbHVyZV9jb25kaXRpb247CisgICAgcGFyYW1fZmFpbGVkX2N0eC5sb2NhdGlvbl9yZWNvcmQuZmlsZSA9IGZpbGU7CisgICAgcGFyYW1fZmFpbGVkX2N0eC5sb2NhdGlvbl9yZWNvcmQubGluZSA9IGxpbmU7CisKKyAgICAvKiBJZiB3ZSBhcmUgdGVzdGluZyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uLi4gICovCisgICAgaWYoIHBhcmFtX2ZhaWxlZF9jdHguZXhwZWN0ZWRfY2FsbCAhPSAwICkKKyAgICB7CisgICAgICAgIHBhcmFtX2ZhaWxlZF9jdHguZXhwZWN0ZWRfY2FsbCA9IDA7CisgICAgICAgIHBhcmFtX2ZhaWxlZF9jdHguZXhwZWN0ZWRfY2FsbF9oYXBwZW5lZCA9IDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIC4uLmVsc2UgdHJ5IGEgbG9uZyBqdW1wLiBJZiB0aGUgZXhlY3V0aW9uIHN0YXRlIGhhcyBub3QgYmVlbiBzZXQtdXAKKyAgICAgICAgICogb3IgcmVzZXQgdGhlbiB0aGUgbG9uZyBqdW1wIGJ1ZmZlciBpcyBhbGwgemVybydzIGFuZCB0aGUgY2FsbCB3aWxsCisgICAgICAgICAqIHdpdGggaGlnaCBwcm9iYWJpbGl0eSBmYXVsdCwgZW1waGFzaXppbmcgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGxvb2sKKyAgICAgICAgICogYXQuCisgICAgICAgICAqLworCisgICAgICAgIGxvbmdqbXAoIHBhcmFtX2ZhaWxlZF9jdHguc3RhdGUsIDEgKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTUJFRFRMU19DSEVDS19QQVJBTVMgKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL3NzbC1vcHQuc2ggYi90ZXN0cy9zc2wtb3B0LnNoCmluZGV4IDM3ZTJkMGQuLmZjZDczZjIgMTAwNzU1Ci0tLSBhL3Rlc3RzL3NzbC1vcHQuc2gKKysrIGIvdGVzdHMvc3NsLW9wdC5zaApAQCAtNjM0LDYgKzYzNCwyMyBAQAogICAgIGZpCiB9CiAKKyMgQ29tcGFyZSBmaWxlIGNvbnRlbnQKKyMgVXNhZ2U6IGZpbmRfaW5fYm90aCBwYXR0ZXJuIGZpbGUxIGZpbGUyCisjIGV4dHJhY3QgZnJvbSBmaWxlMSB0aGUgZmlyc3QgbGluZSBtYXRjaGluZyB0aGUgcGF0dGVybgorIyBjaGVjayBpbiBmaWxlMiB0aGF0IHRoZSBzYW1lIGxpbmUgY2FuIGJlIGZvdW5kCitmaW5kX2luX2JvdGgoKSB7CisgICAgICAgIHNydl9wYXR0ZXJuPSQoZ3JlcCAtbSAxICIkMSIgIiQyIik7CisgICAgICAgIGlmIFsgLXogIiRzcnZfcGF0dGVybiIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBmaQorCisgICAgICAgIGlmIGdyZXAgIiRzcnZfcGF0dGVybiIgJDMgPi9kZXYvbnVsbDsgdGhlbiA6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZmkKK30KKwogIyBVc2FnZTogcnVuX3Rlc3QgbmFtZSBbLXAgcHJveHlfY21kXSBzcnZfY21kIGNsaV9jbWQgY2xpX2V4aXQgW29wdGlvbiBbLi4uXV0KICMgT3B0aW9uczogIC1zIHBhdHRlcm4gIHBhdHRlcm4gdGhhdCBtdXN0IGJlIHByZXNlbnQgaW4gc2VydmVyIG91dHB1dAogIyAgICAgICAgICAgLWMgcGF0dGVybiAgcGF0dGVybiB0aGF0IG11c3QgYmUgcHJlc2VudCBpbiBjbGllbnQgb3V0cHV0CkBAIC02NDMsNiArNjYwLDcgQEAKICMgICAgICAgICAgIC1DIHBhdHRlcm4gIHBhdHRlcm4gdGhhdCBtdXN0IGJlIGFic2VudCBpbiBjbGllbnQgb3V0cHV0CiAjICAgICAgICAgICAtVSBwYXR0ZXJuICBsaW5lcyBhZnRlciBwYXR0ZXJuIG11c3QgYmUgdW5pcXVlIGluIHNlcnZlciBvdXRwdXQKICMgICAgICAgICAgIC1GIGNhbGwgc2hlbGwgZnVuY3Rpb24gb24gc2VydmVyIG91dHB1dAorIyAgICAgICAgICAgLWcgY2FsbCBzaGVsbCBmdW5jdGlvbiBvbiBzZXJ2ZXIgYW5kIGNsaWVudCBvdXRwdXQKIHJ1bl90ZXN0KCkgewogICAgIE5BTUU9IiQxIgogICAgIHNoaWZ0IDEKQEAgLTg2NSw2ICs4ODMsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgIi1nIikKKyAgICAgICAgICAgICAgICBpZiAhIGV2YWwgIiQyICckU1JWX09VVCcgJyRDTElfT1VUJyI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZmFpbCAiZnVuY3Rpb24gY2FsbCB0byAnJDInIGZhaWxlZCBvbiBTZXJ2ZXIgYW5kIENsaWVudCBvdXRwdXQiCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgOzsKIAogICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgICBlY2hvICJVbmtub3duIHRlc3Q6ICQxIiA+JjIKQEAgLTg3MTMsNiArODczNyw1MzkgQEAKICAgICAgICAgICAgIDAgXAogICAgICAgICAgICAgLXMgImZyYWdtZW50aW5nIGhhbmRzaGFrZSBtZXNzYWdlIgogCisjIFRlc3RzIGZvciBEVExTLVNSVFAgKFJGQyA1NzY0KQorcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCitydW5fdGVzdCAgIkRUTFMtU1JUUCBhbGwgcHJvZmlsZXMgc3VwcG9ydGVkIiBcCisgICAgICAgICAgIiRQX1NSViBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLWMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1nICJmaW5kX2luX2JvdGggJ14gKktleWluZyBtYXRlcmlhbDogWzAtOUEtRl0qJCciXAorICAgICAgICAgIC1DICJlcnJvciIKKworCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBzdXBwb3J0cyBhbGwgcHJvZmlsZXMuIENsaWVudCBzdXBwb3J0cyBvbmUgcHJvZmlsZS4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT01IGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV84MCIgXAorICAgICAgICAgIC1zICJzZWxlY3RlZCBzcnRwIHByb2ZpbGU6IE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfODAiIFwKKyAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV84MCIgXAorICAgICAgICAgIC1jICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWcgImZpbmRfaW5fYm90aCAnXiAqS2V5aW5nIG1hdGVyaWFsOiBbMC05QS1GXSokJyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBzdXBwb3J0cyBvbmUgcHJvZmlsZS4gQ2xpZW50IHN1cHBvcnRzIGFsbCBwcm9maWxlcy4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT02IGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZWxlY3RlZCBzcnRwIHByb2ZpbGU6IE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfMzIiIFwKKyAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV8zMiIgXAorICAgICAgICAgIC1jICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWcgImZpbmRfaW5fYm90aCAnXiAqS2V5aW5nIG1hdGVyaWFsOiBbMC05QS1GXSokJyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBhbmQgQ2xpZW50IHN1cHBvcnQgb25seSBvbmUgbWF0Y2hpbmcgcHJvZmlsZS4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT0yIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT0yIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLXMgInNlbGVjdGVkIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCBzcnRwIHByb2ZpbGU6IE1CRURUTFNfVExTX1NSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiIgXAorICAgICAgICAgIC1jICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWcgImZpbmRfaW5fYm90aCAnXiAqS2V5aW5nIG1hdGVyaWFsOiBbMC05QS1GXSokJyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBhbmQgQ2xpZW50IHN1cHBvcnQgb25seSBvbmUgZGlmZmVyZW50IHByb2ZpbGUuIiBcCisgICAgICAgICAgIiRQX1NSViBkdGxzPTEgdXNlX3NydHA9MSBzcnRwX2ZvcmNlX3Byb2ZpbGU9MiBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBzcnRwX2ZvcmNlX3Byb2ZpbGU9NiBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJmb3VuZCBzcnRwIHByb2ZpbGU6IE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfMzIiIFwKKyAgICAgICAgICAtUyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1TICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLUMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1DICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtQyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLUMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1DICJlcnJvciIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHVzZV9zcnRwIGV4dGVuc2lvbi4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtUyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1DICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtQyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLUMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1DICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgYWxsIHByb2ZpbGVzIHN1cHBvcnRlZC4gbWtpIHVzZWQiIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHN1cHBvcnRfbWtpPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgbWtpPTU0MjMxMGFiMzQyOTA0ODEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1zICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiZHVtcGluZyAndXNpbmcgbWtpJyAoOCBieXRlcykiIFwKKyAgICAgICAgICAtcyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJkdW1waW5nICdzZW5kaW5nIG1raScgKDggYnl0ZXMpIiBcCisgICAgICAgICAgLWMgImR1bXBpbmcgJ3JlY2VpdmVkIG1raScgKDggYnl0ZXMpIiBcCisgICAgICAgICAgLWMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1nICJmaW5kX2luX2JvdGggJ14gKktleWluZyBtYXRlcmlhbDogWzAtOUEtRl0qJCciXAorICAgICAgICAgIC1nICJmaW5kX2luX2JvdGggJ14gKkRUTFMtU1JUUCBta2kgdmFsdWU6IFswLTlBLUZdKiQnIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgYWxsIHByb2ZpbGVzIHN1cHBvcnRlZC4gc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBta2kuIiBcCisgICAgICAgICAgIiRQX1NSViBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBta2k9NTQyMzEwYWIzNDI5MDQ4MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtcyAiRFRMUy1TUlRQIG5vIG1raSB2YWx1ZSBuZWdvdGlhdGVkIlwKKyAgICAgICAgICAtUyAiZHVtcGluZyAndXNpbmcgbWtpJyAoOCBieXRlcykiIFwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLWMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1jICJEVExTLVNSVFAgbm8gbWtpIHZhbHVlIG5lZ290aWF0ZWQiXAorICAgICAgICAgIC1nICJmaW5kX2luX2JvdGggJ14gKktleWluZyBtYXRlcmlhbDogWzAtOUEtRl0qJCciXAorICAgICAgICAgIC1jICJkdW1waW5nICdzZW5kaW5nIG1raScgKDggYnl0ZXMpIiBcCisgICAgICAgICAgLUMgImR1bXBpbmcgJ3JlY2VpdmVkIG1raScgKDggYnl0ZXMpIiBcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIGFsbCBwcm9maWxlcyBzdXBwb3J0ZWQuIG9wZW5zc2wgY2xpZW50LiIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkT19DTEkgLWR0bHMxIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzgwOlNSVFBfQUVTMTI4X0NNX1NIQTFfMzIgLWtleW1hdGV4cG9ydCAnRVhUUkFDVE9SLWR0bHNfc3J0cCcgLWtleW1hdGV4cG9ydGxlbiA2MCIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1zICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWcgImZpbmRfaW5fYm90aCAnXiAqS2V5aW5nIG1hdGVyaWFsOiBbMC05QS1GXSokJyJcCisgICAgICAgICAgLWMgIlNSVFAgRXh0ZW5zaW9uIG5lZ290aWF0ZWQsIHByb2ZpbGU9U1JUUF9BRVMxMjhfQ01fU0hBMV84MCIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLiBDbGllbnQgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLCBpbiBkaWZmZXJlbnQgb3JkZXIuIG9wZW5zc2wgY2xpZW50LiIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkT19DTEkgLWR0bHMxIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzMyOlNSVFBfQUVTMTI4X0NNX1NIQTFfODAgLWtleW1hdGV4cG9ydCAnRVhUUkFDVE9SLWR0bHNfc3J0cCcgLWtleW1hdGV4cG9ydGxlbiA2MCIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1zICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWcgImZpbmRfaW5fYm90aCAnXiAqS2V5aW5nIG1hdGVyaWFsOiBbMC05QS1GXSokJyJcCisgICAgICAgICAgLWMgIlNSVFAgRXh0ZW5zaW9uIG5lZ290aWF0ZWQsIHByb2ZpbGU9U1JUUF9BRVMxMjhfQ01fU0hBMV8zMiIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLiBDbGllbnQgc3VwcG9ydHMgb25lIHByb2ZpbGUuIG9wZW5zc2wgY2xpZW50LiIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkT19DTEkgLWR0bHMxIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzMyIC1rZXltYXRleHBvcnQgJ0VYVFJBQ1RPUi1kdGxzX3NydHAnIC1rZXltYXRleHBvcnRsZW4gNjAiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1nICJmaW5kX2luX2JvdGggJ14gKktleWluZyBtYXRlcmlhbDogWzAtOUEtRl0qJCciXAorICAgICAgICAgIC1jICJTUlRQIEV4dGVuc2lvbiBuZWdvdGlhdGVkLCBwcm9maWxlPVNSVFBfQUVTMTI4X0NNX1NIQTFfMzIiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIHN1cHBvcnRzIG9uZSBwcm9maWxlLiBDbGllbnQgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLiBvcGVuc3NsIGNsaWVudC4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT0yIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJE9fQ0xJIC1kdGxzMSAtdXNlX3NydHAgU1JUUF9BRVMxMjhfQ01fU0hBMV84MDpTUlRQX0FFUzEyOF9DTV9TSEExXzMyIC1rZXltYXRleHBvcnQgJ0VYVFJBQ1RPUi1kdGxzX3NydHAnIC1rZXltYXRleHBvcnRsZW4gNjAiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1nICJmaW5kX2luX2JvdGggJ14gKktleWluZyBtYXRlcmlhbDogWzAtOUEtRl0qJCciXAorICAgICAgICAgIC1jICJTUlRQIEV4dGVuc2lvbiBuZWdvdGlhdGVkLCBwcm9maWxlPVNSVFBfQUVTMTI4X0NNX1NIQTFfMzIiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGFuZCBDbGllbnQgc3VwcG9ydCBvbmx5IG9uZSBtYXRjaGluZyBwcm9maWxlLiBvcGVuc3NsIGNsaWVudC4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT0yIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJE9fQ0xJIC1kdGxzMSAtdXNlX3NydHAgU1JUUF9BRVMxMjhfQ01fU0hBMV8zMiAta2V5bWF0ZXhwb3J0ICdFWFRSQUNUT1ItZHRsc19zcnRwJyAta2V5bWF0ZXhwb3J0bGVuIDYwIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtZyAiZmluZF9pbl9ib3RoICdeICpLZXlpbmcgbWF0ZXJpYWw6IFswLTlBLUZdKiQnIlwKKyAgICAgICAgICAtYyAiU1JUUCBFeHRlbnNpb24gbmVnb3RpYXRlZCwgcHJvZmlsZT1TUlRQX0FFUzEyOF9DTV9TSEExXzMyIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBhbmQgQ2xpZW50IHN1cHBvcnQgb25seSBvbmUgZGlmZmVyZW50IHByb2ZpbGUuIG9wZW5zc2wgY2xpZW50LiIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkT19DTEkgLWR0bHMxIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzMyIC1rZXltYXRleHBvcnQgJ0VYVFJBQ1RPUi1kdGxzX3NydHAnIC1rZXltYXRleHBvcnRsZW4gNjAiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1TICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLVMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1DICJTUlRQIEV4dGVuc2lvbiBuZWdvdGlhdGVkLCBwcm9maWxlIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgdXNlX3NydHAgZXh0ZW5zaW9uLiBvcGVuc3NsIGNsaWVudCIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJE9fQ0xJIC1kdGxzMSAtdXNlX3NydHAgU1JUUF9BRVMxMjhfQ01fU0hBMV84MDpTUlRQX0FFUzEyOF9DTV9TSEExXzMyIC1rZXltYXRleHBvcnQgJ0VYVFJBQ1RPUi1kdGxzX3NydHAnIC1rZXltYXRleHBvcnRsZW4gNjAiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLVMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1TICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiU1JUUCBFeHRlbnNpb24gbmVnb3RpYXRlZCwgcHJvZmlsZSIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCitydW5fdGVzdCAgIkRUTFMtU1JUUCBhbGwgcHJvZmlsZXMgc3VwcG9ydGVkLiBvcGVuc3NsIHNlcnZlciIgXAorICAgICAgICAgICIkT19TUlYgLWR0bHMxIC12ZXJpZnkgMCAtdXNlX3NydHAgU1JUUF9BRVMxMjhfQ01fU0hBMV84MDpTUlRQX0FFUzEyOF9DTV9TSEExXzMyIC1rZXltYXRleHBvcnQgJ0VYVFJBQ1RPUi1kdGxzX3NydHAnIC1rZXltYXRleHBvcnRsZW4gNjAiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlOiBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODAiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBzdXBwb3J0cyBhbGwgcHJvZmlsZXMuIENsaWVudCBzdXBwb3J0cyBhbGwgcHJvZmlsZXMsIGluIGRpZmZlcmVudCBvcmRlci4gb3BlbnNzbCBzZXJ2ZXIuIiBcCisgICAgICAgICAgIiRPX1NSViAtZHRsczEgLXZlcmlmeSAwIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzMyOlNSVFBfQUVTMTI4X0NNX1NIQTFfODAgLWtleW1hdGV4cG9ydCAnRVhUUkFDVE9SLWR0bHNfc3J0cCcgLWtleW1hdGV4cG9ydGxlbiA2MCIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBzdXBwb3J0cyBhbGwgcHJvZmlsZXMuIENsaWVudCBzdXBwb3J0cyBvbmUgcHJvZmlsZS4gb3BlbnNzbCBzZXJ2ZXIuIiBcCisgICAgICAgICAgIiRPX1NSViAtZHRsczEgLXZlcmlmeSAwIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzgwOlNSVFBfQUVTMTI4X0NNX1NIQTFfMzIgLWtleW1hdGV4cG9ydCAnRVhUUkFDVE9SLWR0bHNfc3J0cCcgLWtleW1hdGV4cG9ydGxlbiA2MCIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTIgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIHN1cHBvcnRzIG9uZSBwcm9maWxlLiBDbGllbnQgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLiBvcGVuc3NsIHNlcnZlci4iIFwKKyAgICAgICAgICAiJE9fU1JWIC1kdGxzMSAtdmVyaWZ5IDAgLXVzZV9zcnRwIFNSVFBfQUVTMTI4X0NNX1NIQTFfMzIgLWtleW1hdGV4cG9ydCAnRVhUUkFDVE9SLWR0bHNfc3J0cCcgLWtleW1hdGV4cG9ydGxlbiA2MCIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGFuZCBDbGllbnQgc3VwcG9ydCBvbmx5IG9uZSBtYXRjaGluZyBwcm9maWxlLiBvcGVuc3NsIHNlcnZlci4iIFwKKyAgICAgICAgICAiJE9fU1JWIC1kdGxzMSAtdmVyaWZ5IDAgLXVzZV9zcnRwIFNSVFBfQUVTMTI4X0NNX1NIQTFfMzIgLWtleW1hdGV4cG9ydCAnRVhUUkFDVE9SLWR0bHNfc3J0cCcgLWtleW1hdGV4cG9ydGxlbiA2MCIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTIgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGFuZCBDbGllbnQgc3VwcG9ydCBvbmx5IG9uZSBkaWZmZXJlbnQgcHJvZmlsZS4gb3BlbnNzbCBzZXJ2ZXIuIiBcCisgICAgICAgICAgIiRPX1NSViAtZHRsczEgLXZlcmlmeSAwIC11c2Vfc3J0cCBTUlRQX0FFUzEyOF9DTV9TSEExXzMyIC1rZXltYXRleHBvcnQgJ0VYVFJBQ1RPUi1kdGxzX3NydHAnIC1rZXltYXRleHBvcnRsZW4gNjAiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT02IGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLUMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1DICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtQyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLUMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1DICJlcnJvciIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHVzZV9zcnRwIGV4dGVuc2lvbi4gb3BlbnNzbCBzZXJ2ZXIiIFwKKyAgICAgICAgICAiJE9fU1JWIC1kdGxzMSIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtQyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLUMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1DICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtQyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIGFsbCBwcm9maWxlcyBzdXBwb3J0ZWQuIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgbWtpLiBvcGVuc3NsIHNlcnZlci4iIFwKKyAgICAgICAgICAiJE9fU1JWIC1kdGxzMSAtdmVyaWZ5IDAgLXVzZV9zcnRwIFNSVFBfQUVTMTI4X0NNX1NIQTFfODA6U1JUUF9BRVMxMjhfQ01fU0hBMV8zMiAta2V5bWF0ZXhwb3J0ICdFWFRSQUNUT1ItZHRsc19zcnRwJyAta2V5bWF0ZXhwb3J0bGVuIDYwIiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBta2k9NTQyMzEwYWIzNDI5MDQ4MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIG5vIG1raSB2YWx1ZSBuZWdvdGlhdGVkIlwKKyAgICAgICAgICAtYyAiZHVtcGluZyAnc2VuZGluZyBta2knICg4IGJ5dGVzKSIgXAorICAgICAgICAgIC1DICJkdW1waW5nICdyZWNlaXZlZCBta2knICg4IGJ5dGVzKSIgXAorICAgICAgICAgIC1DICJlcnJvciIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIGFsbCBwcm9maWxlcyBzdXBwb3J0ZWQuIGdudXRscyBjbGllbnQuIiBcCisgICAgICAgICAgIiRQX1NSViBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRHX0NMSSAtdSAtLXNydHAtcHJvZmlsZXM9U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwOlNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMjpTUlRQX05VTExfSE1BQ19TSEExXzgwOlNSVFBfTlVMTF9TSEExXzMyIC0taW5zZWN1cmUgMTI3LjAuMC4xIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtYyAiU1JUUCBwcm9maWxlOiBTUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODAiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLiBDbGllbnQgc3VwcG9ydHMgYWxsIHByb2ZpbGVzLCBpbiBkaWZmZXJlbnQgb3JkZXIuIGdudXRscyBjbGllbnQuIiBcCisgICAgICAgICAgIiRQX1NSViBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRHX0NMSSAtdSAtLXNydHAtcHJvZmlsZXM9U1JUUF9OVUxMX0hNQUNfU0hBMV84MDpTUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODA6U1JUUF9OVUxMX1NIQTFfMzI6U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIC0taW5zZWN1cmUgMTI3LjAuMC4xIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtcyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlcnZlciBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1zICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtYyAiU1JUUCBwcm9maWxlOiBTUlRQX05VTExfSE1BQ19TSEExXzgwIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIHN1cHBvcnRzIGFsbCBwcm9maWxlcy4gQ2xpZW50IHN1cHBvcnRzIG9uZSBwcm9maWxlLiBnbnV0bHMgY2xpZW50LiIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkR19DTEkgLXUgLS1zcnRwLXByb2ZpbGVzPVNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiAtLWluc2VjdXJlIDEyNy4wLjAuMSIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1zICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiZm91bmQgc3J0cCBwcm9maWxlOiBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfMzIiIFwKKyAgICAgICAgICAtcyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlOiBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfMzIiIFwKKyAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1jICJTUlRQIHByb2ZpbGU6IFNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBzdXBwb3J0cyBvbmUgcHJvZmlsZS4gQ2xpZW50IHN1cHBvcnRzIGFsbCBwcm9maWxlcy4gZ251dGxzIGNsaWVudC4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT02IGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJEdfQ0xJIC11IC0tc3J0cC1wcm9maWxlcz1TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODA6U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyOlNSVFBfTlVMTF9ITUFDX1NIQTFfODA6U1JUUF9OVUxMX1NIQTFfMzIgLS1pbnNlY3VyZSAxMjcuMC4wLjEiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZWxlY3RlZCBzcnRwIHByb2ZpbGU6IE1CRURUTFNfVExTX1NSVFBfTlVMTF9ITUFDX1NIQTFfMzIiIFwKKyAgICAgICAgICAtcyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1jICJTUlRQIHByb2ZpbGU6IFNSVFBfTlVMTF9TSEExXzMyIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGFuZCBDbGllbnQgc3VwcG9ydCBvbmx5IG9uZSBtYXRjaGluZyBwcm9maWxlLiBnbnV0bHMgY2xpZW50LiIgXAorICAgICAgICAgICIkUF9TUlYgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTIgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgICIkR19DTEkgLXUgLS1zcnRwLXByb2ZpbGVzPVNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiAtLWluc2VjdXJlIDEyNy4wLjAuMSIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1zICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLXMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1zICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtcyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLWMgIlNSVFAgcHJvZmlsZTogU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGFuZCBDbGllbnQgc3VwcG9ydCBvbmx5IG9uZSBkaWZmZXJlbnQgcHJvZmlsZS4gZ251dGxzIGNsaWVudC4iIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSB1c2Vfc3J0cD0xIHNydHBfZm9yY2VfcHJvZmlsZT0xIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAiJEdfQ0xJIC11IC0tc3J0cC1wcm9maWxlcz1TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfMzIgLS1pbnNlY3VyZSAxMjcuMC4wLjEiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtcyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLXMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1TICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtUyAic2VydmVyIGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLVMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1DICJTUlRQIHByb2ZpbGU6IgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCB1c2Vfc3J0cCBleHRlbnNpb24uIGdudXRscyBjbGllbnQiIFwKKyAgICAgICAgICAiJFBfU1JWIGR0bHM9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgIiRHX0NMSSAtdSAtLXNydHAtcHJvZmlsZXM9U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwOlNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMjpTUlRQX05VTExfSE1BQ19TSEExXzgwOlNSVFBfTlVMTF9TSEExXzMyIC0taW5zZWN1cmUgMTI3LjAuMC4xIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLXMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1TICJzZXJ2ZXIgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtUyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgIlNSVFAgcHJvZmlsZToiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgIkRUTFMtU1JUUCBhbGwgcHJvZmlsZXMgc3VwcG9ydGVkLiBnbnV0bHMgc2VydmVyIiBcCisgICAgICAgICAgIiRHX1NSViAtdSAtLXNydHAtcHJvZmlsZXM9U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwOlNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMjpTUlRQX05VTExfSE1BQ19TSEExXzgwOlNSVFBfTlVMTF9TSEExXzMyIiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwIiBcCisgICAgICAgICAgLWMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1DICJlcnJvciIKKworcmVxdWlyZXNfY29uZmlnX2VuYWJsZWQgTUJFRFRMU19TU0xfRFRMU19TUlRQCityZXF1aXJlc19nbnV0bHMKK3J1bl90ZXN0ICAiRFRMUy1TUlRQIHNlcnZlciBzdXBwb3J0cyBhbGwgcHJvZmlsZXMuIENsaWVudCBzdXBwb3J0cyBhbGwgcHJvZmlsZXMsIGluIGRpZmZlcmVudCBvcmRlci4gZ251dGxzIHNlcnZlci4iIFwKKyAgICAgICAgICAiJEdfU1JWIC11IC0tc3J0cC1wcm9maWxlcz1TUlRQX05VTExfU0hBMV8zMjpTUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfMzI6U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzgwOlNSVFBfTlVMTF9ITUFDX1NIQTFfODA6U1JUUF9OVUxMX1NIQTFfMzIiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlOiBNQkVEVExTX1RMU19TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODAiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIHN1cHBvcnRzIGFsbCBwcm9maWxlcy4gQ2xpZW50IHN1cHBvcnRzIG9uZSBwcm9maWxlLiBnbnV0bHMgc2VydmVyLiIgXAorICAgICAgICAgICIkR19TUlYgLXUgLS1zcnRwLXByb2ZpbGVzPVNSVFBfTlVMTF9TSEExXzMyOlNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMjpTUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODA6U1JUUF9OVUxMX0hNQUNfU0hBMV84MDpTUlRQX05VTExfU0hBMV8zMiIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTIgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgc3VwcG9ydHMgb25lIHByb2ZpbGUuIENsaWVudCBzdXBwb3J0cyBhbGwgcHJvZmlsZXMuIGdudXRscyBzZXJ2ZXIuIiBcCisgICAgICAgICAgIiRHX1NSViAtdSAtLXNydHAtcHJvZmlsZXM9U1JUUF9OVUxMX0hNQUNfU0hBMV84MCIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9OVUxMX0hNQUNfU0hBMV84MCIgXAorICAgICAgICAgIC1jICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGFuZCBDbGllbnQgc3VwcG9ydCBvbmx5IG9uZSBtYXRjaGluZyBwcm9maWxlLiBnbnV0bHMgc2VydmVyLiIgXAorICAgICAgICAgICIkR19TUlYgLXUgLS1zcnRwLXByb2ZpbGVzPVNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTIgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtYyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHNydHAgcHJvZmlsZTogTUJFRFRMU19UTFNfU1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyIiBcCisgICAgICAgICAgLWMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1jICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgIkRUTFMtU1JUUCBzZXJ2ZXIgYW5kIENsaWVudCBzdXBwb3J0IG9ubHkgb25lIGRpZmZlcmVudCBwcm9maWxlLiBnbnV0bHMgc2VydmVyLiIgXAorICAgICAgICAgICIkR19TUlYgLXUgLS1zcnRwLXByb2ZpbGVzPVNSVFBfQUVTMTI4X0NNX0hNQUNfU0hBMV8zMiIgXAorICAgICAgICAgICIkUF9DTEkgZHRscz0xIHVzZV9zcnRwPTEgc3J0cF9mb3JjZV9wcm9maWxlPTYgZGVidWdfbGV2ZWw9MyIgXAorICAgICAgICAgIDAgXAorICAgICAgICAgIC1jICJjbGllbnQgaGVsbG8sIGFkZGluZyB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtQyAiZm91bmQgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLUMgImZvdW5kIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1DICJzZWxlY3RlZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtQyAiRFRMUy1TUlRQIGtleSBtYXRlcmlhbCBpcyJcCisgICAgICAgICAgLUMgImVycm9yIgorCityZXF1aXJlc19jb25maWdfZW5hYmxlZCBNQkVEVExTX1NTTF9EVExTX1NSVFAKK3JlcXVpcmVzX2dudXRscworcnVuX3Rlc3QgICJEVExTLVNSVFAgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCB1c2Vfc3J0cCBleHRlbnNpb24uIGdudXRscyBzZXJ2ZXIiIFwKKyAgICAgICAgICAiJEdfU1JWIC11IiBcCisgICAgICAgICAgIiRQX0NMSSBkdGxzPTEgdXNlX3NydHA9MSBkZWJ1Z19sZXZlbD0zIiBcCisgICAgICAgICAgMCBcCisgICAgICAgICAgLWMgImNsaWVudCBoZWxsbywgYWRkaW5nIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1DICJmb3VuZCB1c2Vfc3J0cCBleHRlbnNpb24iIFwKKyAgICAgICAgICAtQyAiZm91bmQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLUMgInNlbGVjdGVkIHNydHAgcHJvZmlsZSIgXAorICAgICAgICAgIC1DICJEVExTLVNSVFAga2V5IG1hdGVyaWFsIGlzIlwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKK3JlcXVpcmVzX2NvbmZpZ19lbmFibGVkIE1CRURUTFNfU1NMX0RUTFNfU1JUUAorcmVxdWlyZXNfZ251dGxzCitydW5fdGVzdCAgIkRUTFMtU1JUUCBhbGwgcHJvZmlsZXMgc3VwcG9ydGVkLiBta2kgdXNlZC4gZ251dGxzIHNlcnZlci4iIFwKKyAgICAgICAgICAiJEdfU1JWIC11IC0tc3J0cC1wcm9maWxlcz1TUlRQX0FFUzEyOF9DTV9ITUFDX1NIQTFfODA6U1JUUF9BRVMxMjhfQ01fSE1BQ19TSEExXzMyOlNSVFBfTlVMTF9ITUFDX1NIQTFfODA6U1JUUF9OVUxMX1NIQTFfMzIiIFwKKyAgICAgICAgICAiJFBfQ0xJIGR0bHM9MSB1c2Vfc3J0cD0xIG1raT01NDIzMTBhYjM0MjkwNDgxIGRlYnVnX2xldmVsPTMiIFwKKyAgICAgICAgICAwIFwKKyAgICAgICAgICAtYyAiY2xpZW50IGhlbGxvLCBhZGRpbmcgdXNlX3NydHAgZXh0ZW5zaW9uIiBcCisgICAgICAgICAgLWMgImZvdW5kIHVzZV9zcnRwIGV4dGVuc2lvbiIgXAorICAgICAgICAgIC1jICJmb3VuZCBzcnRwIHByb2ZpbGUiIFwKKyAgICAgICAgICAtYyAic2VsZWN0ZWQgc3J0cCBwcm9maWxlIiBcCisgICAgICAgICAgLWMgIkRUTFMtU1JUUCBrZXkgbWF0ZXJpYWwgaXMiXAorICAgICAgICAgIC1jICJEVExTLVNSVFAgbWtpIHZhbHVlOiJcCisgICAgICAgICAgLWMgImR1bXBpbmcgJ3NlbmRpbmcgbWtpJyAoOCBieXRlcykiIFwKKyAgICAgICAgICAtYyAiZHVtcGluZyAncmVjZWl2ZWQgbWtpJyAoOCBieXRlcykiIFwKKyAgICAgICAgICAtQyAiZXJyb3IiCisKICMgVGVzdHMgZm9yIHNwZWNpZmljIHRoaW5ncyB3aXRoICJ1bnJlbGlhYmxlIiBVRFAgY29ubmVjdGlvbgogCiBub3Rfd2l0aF92YWxncmluZCAjIHNwdXJpb3VzIHJlc2VuZCBkdWUgdG8gdGltZW91dApkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL2hlbHBlcnMuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvaGVscGVycy5mdW5jdGlvbgppbmRleCA3NDI1YTM1Li5hYWZjZjVjIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvaGVscGVycy5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvaGVscGVycy5mdW5jdGlvbgpAQCAtNzQsMTYgKzc0LDYgQEAKICNkZWZpbmUgRElTUEFUQ0hfVU5TVVBQT1JURURfU1VJVEUgICAgICAtNSAgLyogVGVzdCBzdWl0ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCAqLwogCi10eXBlZGVmIGVudW0KLXsKLSAgICBQQVJBTUZBSUxfVEVTVFNUQVRFX0lETEUgPSAwLCAgICAgICAgICAgLyogTm8gcGFyYW1ldGVyIGZhaWx1cmUgY2FsbCB0ZXN0ICovCi0gICAgUEFSQU1GQUlMX1RFU1RTVEFURV9QRU5ESU5HLCAgICAgICAgICAgIC8qIFRlc3QgY2FsbCB0byB0aGUgcGFyYW1ldGVyIGZhaWx1cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaXMgcGVuZGluZyAqLwotICAgIFBBUkFNRkFJTF9URVNUU1RBVEVfQ0FMTEVEICAgICAgICAgICAgICAvKiBUaGUgdGVzdCBjYWxsIHRvIHRoZSBwYXJhbWV0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZmFpbHVyZSBmdW5jdGlvbiBoYXMgYmVlbiBtYWRlICovCi19IHBhcmFtZmFpbF90ZXN0X3N0YXRlX3Q7Ci0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIE1hY3JvcyAqLwogCkBAIC0xMzEsNiArMTIxLDcgQEAKICAgICBURVNUX0FTU0VSVCggKCBleHByMSApID09ICggZXhwcjIgKSApCiAKIC8qKiBBbGxvY2F0ZSBtZW1vcnkgZHluYW1pY2FsbHkgYW5kIGZhaWwgdGhlIHRlc3QgY2FzZSBpZiB0aGlzIGZhaWxzLgorICogVGhlIGFsbG9jYXRlZCBtZW1vcnkgd2lsbCBiZSBmaWxsZWQgd2l0aCB6ZXJvcy4KICAqCiAgKiBZb3UgbXVzdCBzZXQgXHAgcG9pbnRlciB0byBcYyBOVUxMIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWFjcm8gYW5kCiAgKiBwdXQgYG1iZWR0bHNfZnJlZSggcG9pbnRlciApYCBpbiB0aGUgdGVzdCdzIGNsZWFudXAgY29kZS4KQEAgLTIzNywxNSArMjI4LDE2IEBACiAgKgogICogXHBhcmFtICAgVEVTVCAgICAgICAgICAgICAgICBUaGUgdGVzdCBleHByZXNzaW9uIHRvIGJlIHRlc3RlZC4KICAqLwotI2RlZmluZSBURVNUX0lOVkFMSURfUEFSQU1fUkVUKCBQQVJBTV9FUlJfVkFMVUUsIFRFU1QgKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHRlc3RfaW5mby5wYXJhbWZhaWxfdGVzdF9zdGF0ZSA9IFBBUkFNRkFJTF9URVNUU1RBVEVfUEVORElORzsgICAgICAgXAotICAgICAgICBpZiggKFRFU1QpICE9IChQQVJBTV9FUlJfVkFMVUUpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHRlc3RfaW5mby5wYXJhbWZhaWxfdGVzdF9zdGF0ZSAhPSBQQVJBTUZBSUxfVEVTVFNUQVRFX0NBTExFRCApICBcCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdGVzdF9mYWlsKCAjVEVTVCwgX19MSU5FX18sIF9fRklMRV9fICk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGdvdG8gZXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBURVNUX0lOVkFMSURfUEFSQU1fUkVUKCBQQVJBTV9FUlJfVkFMVUUsIFRFU1QgKSAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2V4cGVjdF9jYWxsKCApOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiggKCAoIFRFU1QgKSAhPSAoIFBBUkFNX0VSUl9WQUxVRSApICkgfHwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKCBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2NoZWNrX2V4cGVjdGVkX2NhbGwoICkgIT0gMCApICkgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGVzdF9mYWlsKCAjVEVTVCwgX19MSU5FX18sIF9fRklMRV9fICk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZ290byBleGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtYmVkdGxzX3Rlc3RfcGFyYW1fZmFpbGVkX2NoZWNrX2V4cGVjdGVkX2NhbGwoICk7ICAgICAgICAgICAgICAgXAogICAgfSB3aGlsZSggMCApCiAKIC8qKgpAQCAtMjY4LDE2ICsyNjAsMTcgQEAKICAqCiAgKiBccGFyYW0gICBURVNUICAgICAgICAgICAgICAgIFRoZSB0ZXN0IGV4cHJlc3Npb24gdG8gYmUgdGVzdGVkLgogICovCi0jZGVmaW5lIFRFU1RfSU5WQUxJRF9QQVJBTSggVEVTVCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbWVtY3B5KGptcF90bXAsIHBhcmFtX2ZhaWxfam1wLCBzaXplb2Yoam1wX2J1ZikpOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmKCBzZXRqbXAoIHBhcmFtX2ZhaWxfam1wICkgPT0gMCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFRFU1Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0ZXN0X2ZhaWwoICNURVNULCBfX0xJTkVfXywgX19GSUxFX18gKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZ290byBleGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIG1lbWNweShwYXJhbV9mYWlsX2ptcCwgam1wX3RtcCwgc2l6ZW9mKGptcF9idWYpKTsgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBURVNUX0lOVkFMSURfUEFSQU0oIFRFU1QgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG1lbWNweSggam1wX3RtcCwgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9nZXRfc3RhdGVfYnVmKCApLCAgICAgXAorICAgICAgICAgICAgICAgIHNpemVvZiggam1wX3RtcCApICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoIHNldGptcCggIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfZ2V0X3N0YXRlX2J1ZiggKSApID09IDAgKSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgVEVTVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRlc3RfZmFpbCggI1RFU1QsIF9fTElORV9fLCBfX0ZJTEVfXyApOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBnb3RvIGV4aXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWJlZHRsc190ZXN0X3BhcmFtX2ZhaWxlZF9yZXNldF9zdGF0ZSggKTsgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSggMCApCiAjZW5kaWYgLyogTUJFRFRMU19DSEVDS19QQVJBTVMgJiYgIU1CRURUTFNfUEFSQU1fRkFJTEVEX0FMVCAqLwogCkBAIC0zNTksNyArMzUyLDYgQEAKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKLSAgICBwYXJhbWZhaWxfdGVzdF9zdGF0ZV90IHBhcmFtZmFpbF90ZXN0X3N0YXRlOwogICAgIHRlc3RfcmVzdWx0X3QgcmVzdWx0OwogICAgIGNvbnN0IGNoYXIgKnRlc3Q7CiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWU7CkBAIC0zNzAsNyArMzYyLDYgQEAKIHN0YXRpYyB0ZXN0X2luZm9fdCB0ZXN0X2luZm87CiAKICNpZiBkZWZpbmVkKE1CRURUTFNfQ0hFQ0tfUEFSQU1TKQotam1wX2J1ZiBwYXJhbV9mYWlsX2ptcDsKIGptcF9idWYgam1wX3RtcDsKICNlbmRpZgogCkBAIC00MDcsNiArMzk4LDEyIEBACiAKIHZvaWQgdGVzdF9mYWlsKCBjb25zdCBjaGFyICp0ZXN0LCBpbnQgbGluZV9ubywgY29uc3QgY2hhciogZmlsZW5hbWUgKQogeworICAgIGlmKCB0ZXN0X2luZm8ucmVzdWx0ID09IFRFU1RfUkVTVUxUX0ZBSUxFRCApCisgICAgeworICAgICAgICAvKiBXZSd2ZSBhbHJlYWR5IHJlY29yZGVkIHRoZSB0ZXN0IGFzIGhhdmluZyBmYWlsZWQuIERvbid0CisgICAgICAgICAqIG92ZXJ3cml0ZSBhbnkgcHJldmlvdXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZhaWx1cmUuICovCisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgdGVzdF9pbmZvLnJlc3VsdCA9IFRFU1RfUkVTVUxUX0ZBSUxFRDsKICAgICB0ZXN0X2luZm8udGVzdCA9IHRlc3Q7CiAgICAgdGVzdF9pbmZvLmxpbmVfbm8gPSBsaW5lX25vOwpAQCAtNDIxLDMwICs0MTgsNiBAQAogICAgIHRlc3RfaW5mby5maWxlbmFtZSA9IGZpbGVuYW1lOwogfQogCi0jaWYgZGVmaW5lZChNQkVEVExTX0NIRUNLX1BBUkFNUykKLXZvaWQgbWJlZHRsc19wYXJhbV9mYWlsZWQoIGNvbnN0IGNoYXIgKmZhaWx1cmVfY29uZGl0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lICkKLXsKLSAgICAvKiBJZiB3ZSBhcmUgdGVzdGluZyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uLi4gICovCi0gICAgaWYoIHRlc3RfaW5mby5wYXJhbWZhaWxfdGVzdF9zdGF0ZSA9PSBQQVJBTUZBSUxfVEVTVFNUQVRFX1BFTkRJTkcgKQotICAgIHsKLSAgICAgICAgdGVzdF9pbmZvLnBhcmFtZmFpbF90ZXN0X3N0YXRlID0gUEFSQU1GQUlMX1RFU1RTVEFURV9DQUxMRUQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8qIC4uLmVsc2Ugd2UgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciAqLwotCi0gICAgICAgIC8qIFJlY29yZCB0aGUgbG9jYXRpb24gb2YgdGhlIGZhaWx1cmUsIGJ1dCBub3QgYXMgYSBmYWlsdXJlIHlldCwgaW4gY2FzZQotICAgICAgICAgKiBpdCB3YXMgcGFydCBvZiB0aGUgdGVzdCAqLwotICAgICAgICB0ZXN0X2ZhaWwoIGZhaWx1cmVfY29uZGl0aW9uLCBsaW5lLCBmaWxlICk7Ci0gICAgICAgIHRlc3RfaW5mby5yZXN1bHQgPSBURVNUX1JFU1VMVF9TVUNDRVNTOwotCi0gICAgICAgIGxvbmdqbXAoIHBhcmFtX2ZhaWxfam1wLCAxICk7Ci0gICAgfQotfQotI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9fdW5peF9fKSB8fCAoZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19NQUNIX18pKQogc3RhdGljIGludCByZWRpcmVjdF9vdXRwdXQoIEZJTEUqIG91dF9zdHJlYW0sIGNvbnN0IGNoYXIqIHBhdGggKQogewpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL2hvc3RfdGVzdC5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy9ob3N0X3Rlc3QuZnVuY3Rpb24KaW5kZXggY2NlMjg5OS4uZGI1M2U5NyAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL2hvc3RfdGVzdC5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvaG9zdF90ZXN0LmZ1bmN0aW9uCkBAIC02ODMsNyArNjgzLDYgQEAKICAgICAgICAgICAgIGlmKCB1bm1ldF9kZXBfY291bnQgPT0gMCApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLnJlc3VsdCA9IFRFU1RfUkVTVUxUX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgdGVzdF9pbmZvLnBhcmFtZmFpbF90ZXN0X3N0YXRlID0gUEFSQU1GQUlMX1RFU1RTVEFURV9JRExFOwogICAgICAgICAgICAgICAgIHRlc3RfaW5mby5zdGVwID0gKHVuc2lnbmVkIGxvbmcpKCAtMSApOwogCiAjaWYgZGVmaW5lZChfX3VuaXhfXykgfHwgKGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fTUFDSF9fKSkKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvbWFpbl90ZXN0LmZ1bmN0aW9uCmluZGV4IDY5MDEyNTYuLjI1NjIyNGUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy9tYWluX3Rlc3QuZnVuY3Rpb24KKysrIGIvdGVzdHMvc3VpdGVzL21haW5fdGVzdC5mdW5jdGlvbgpAQCAtMTY1LDE3ICsxNjUsMjMgQEAKIHZvaWQgZXhlY3V0ZV9mdW5jdGlvbl9wdHIoVGVzdFdyYXBwZXJfdCBmcCwgdm9pZCAqKnBhcmFtcykKIHsKICNpZiBkZWZpbmVkKE1CRURUTFNfQ0hFQ0tfUEFSQU1TKQotICAgIGlmICggc2V0am1wKCBwYXJhbV9mYWlsX2ptcCApID09IDAgKQorICAgIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfbG9jYXRpb25fcmVjb3JkX3QgbG9jYXRpb25fcmVjb3JkOworCisgICAgaWYgKCBzZXRqbXAoIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfZ2V0X3N0YXRlX2J1ZiggKSApID09IDAgKQogICAgIHsKICAgICAgICAgZnAoIHBhcmFtcyApOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAvKiBVbmV4cGVjdGVkIHBhcmFtZXRlciB2YWxpZGF0aW9uIGVycm9yICovCisgICAgICAgIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfZ2V0X2xvY2F0aW9uX3JlY29yZCggJmxvY2F0aW9uX3JlY29yZCApOworICAgICAgICB0ZXN0X2ZhaWwoIGxvY2F0aW9uX3JlY29yZC5mYWlsdXJlX2NvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl9yZWNvcmQubGluZSwKKyAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl9yZWNvcmQuZmlsZSApOwogICAgICAgICB0ZXN0X2luZm8ucmVzdWx0ID0gVEVTVF9SRVNVTFRfRkFJTEVEOwogICAgIH0KIAotICAgIG1lbXNldCggcGFyYW1fZmFpbF9qbXAsIDAsIHNpemVvZihqbXBfYnVmKSApOworICAgIG1iZWR0bHNfdGVzdF9wYXJhbV9mYWlsZWRfcmVzZXRfc3RhdGUoICk7CiAjZWxzZQogICAgIGZwKCBwYXJhbXMgKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYWVzLmZ1bmN0aW9uCmluZGV4IDFkNDUzZGIuLjc1NGExNjcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Flcy5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hZXMuZnVuY3Rpb24KQEAgLTksNyArOSw3IEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgYWVzX2VuY3J5cHRfZWNiKCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nLCBpbnQgc2V0a2V5X3Jlc3VsdCApCisgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogZHN0LCBpbnQgc2V0a2V5X3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX2Flc19jb250ZXh0IGN0eDsKQEAgLTIzLDggKzIzLDcgQEAKICAgICB7CiAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19jcnlwdF9lY2IoICZjdHgsIE1CRURUTFNfQUVTX0VOQ1JZUFQsIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIDE2LCBkc3QtPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC0zNCw3ICszMyw3IEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgYWVzX2RlY3J5cHRfZWNiKCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nLCBpbnQgc2V0a2V5X3Jlc3VsdCApCisgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogZHN0LCBpbnQgc2V0a2V5X3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX2Flc19jb250ZXh0IGN0eDsKQEAgLTQ4LDggKzQ3LDcgQEAKICAgICB7CiAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19jcnlwdF9lY2IoICZjdHgsIE1CRURUTFNfQUVTX0RFQ1JZUFQsIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIDE2LCBkc3QtPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC01OSw3ICs1Nyw3IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwogdm9pZCBhZXNfZW5jcnlwdF9jYmMoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIGl2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IGNiY19yZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CkBAIC03NCw5ICs3Miw4IEBACiAgICAgaWYoIGNiY19yZXN1bHQgPT0gMCApCiAgICAgewogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLCBkc3QtPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC04Niw3ICs4Myw3IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwogdm9pZCBhZXNfZGVjcnlwdF9jYmMoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIGl2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW50IGNiY19yZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CkBAIC0xMDAsOSArOTcsOCBAQAogICAgIGlmKCBjYmNfcmVzdWx0ID09IDApCiAgICAgewogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLCBkc3QtPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC0yMzYsNyArMjMyLDcgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCiB2b2lkIGFlc19lbmNyeXB0X2NmYjEyOCggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nICkKKyAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc19hZXNfY29udGV4dCBjdHg7CkBAIC0yNDksOCArMjQ1LDcgQEAKICAgICBtYmVkdGxzX2Flc19zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyLT54LCBrZXlfc3RyLT5sZW4gKiA4ICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NyeXB0X2NmYjEyOCggJmN0eCwgTUJFRFRMU19BRVNfRU5DUllQVCwgMTYsICZpdl9vZmZzZXQsIGl2X3N0ci0+eCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgMTYsIGRzdC0+bGVuICkgPT0gMCApOwogCiBleGl0OgogICAgIG1iZWR0bHNfYWVzX2ZyZWUoICZjdHggKTsKQEAgLTI1OSw3ICsyNTQsNyBAQAogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KIHZvaWQgYWVzX2RlY3J5cHRfY2ZiMTI4KCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcgKQorICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX2Flc19jb250ZXh0IGN0eDsKQEAgLTI3Miw4ICsyNjcsNyBAQAogICAgIG1iZWR0bHNfYWVzX3NldGtleV9lbmMoICZjdHgsIGtleV9zdHItPngsIGtleV9zdHItPmxlbiAqIDggKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hZXNfY3J5cHRfY2ZiMTI4KCAmY3R4LCBNQkVEVExTX0FFU19ERUNSWVBULCAxNiwgJml2X29mZnNldCwgaXZfc3RyLT54LCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCAxNiwgZHN0LT5sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19hZXNfZnJlZSggJmN0eCApOwpAQCAtMjgyLDcgKzI3Niw3IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwogdm9pZCBhZXNfZW5jcnlwdF9jZmI4KCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nICkKKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R4OwpAQCAtMjk0LDkgKzI4OCw4IEBACiAgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmN0eCwga2V5X3N0ci0+eCwga2V5X3N0ci0+bGVuICogOCApOwogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19jcnlwdF9jZmI4KCAmY3R4LCBNQkVEVExTX0FFU19FTkNSWVBULCBzcmNfc3RyLT5sZW4sIGl2X3N0ci0+eCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwgZHN0LT5sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19hZXNfZnJlZSggJmN0eCApOwpAQCAtMzA1LDcgKzI5OCw3IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwogdm9pZCBhZXNfZGVjcnlwdF9jZmI4KCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nICkKKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfYWVzX2NvbnRleHQgY3R4OwpAQCAtMzE3LDkgKzMxMCw4IEBACiAgICAgbWJlZHRsc19hZXNfc2V0a2V5X2VuYyggJmN0eCwga2V5X3N0ci0+eCwga2V5X3N0ci0+bGVuICogOCApOwogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Flc19jcnlwdF9jZmI4KCAmY3R4LCBNQkVEVExTX0FFU19ERUNSWVBULCBzcmNfc3RyLT5sZW4sIGl2X3N0ci0+eCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwgZHN0LT5sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19hZXNfZnJlZSggJmN0eCApOwpAQCAtMzI5LDE3ICszMjEsMTUgQEAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX09GQiAqLwogdm9pZCBhZXNfZW5jcnlwdF9vZmIoIGludCBmcmFnbWVudF9zaXplLCBkYXRhX3QgKmtleV9zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICppdl9zdHIsIGRhdGFfdCAqc3JjX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpleHBlY3RlZF9vdXRwdXRfc3RyaW5nKQorICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFszMl07Ci0gICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyaW5nWzY1XTsKICAgICBtYmVkdGxzX2Flc19jb250ZXh0IGN0eDsKICAgICBzaXplX3QgaXZfb2Zmc2V0ID0gMDsKICAgICBpbnQgaW5fYnVmZmVyX2xlbjsKICAgICB1bnNpZ25lZCBjaGFyKiBzcmNfc3RyX25leHQ7CiAKICAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgc2l6ZW9mKCBvdXRwdXQgKSApOwotICAgIG1lbXNldCggb3V0cHV0X3N0cmluZywgMHgwMCwgc2l6ZW9mKCBvdXRwdXRfc3RyaW5nICkgKTsKICAgICBtYmVkdGxzX2Flc19pbml0KCAmY3R4ICk7CiAKICAgICBURVNUX0FTU0VSVCggKHNpemVfdClmcmFnbWVudF9zaXplIDwgc2l6ZW9mKCBvdXRwdXQgKSApOwpAQCAtMzU0LDEyICszNDQsMTAgQEAKICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYWVzX2NyeXB0X29mYiggJmN0eCwgZnJhZ21lbnRfc2l6ZSwgJml2X29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZfc3RyLT54LCBzcmNfc3RyX25leHQsIG91dHB1dCApID09IDAgKTsKIAotICAgICAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBvdXRwdXRfc3RyaW5nLCBvdXRwdXQsIGZyYWdtZW50X3NpemUgKTsKLSAgICAgICAgVEVTVF9BU1NFUlQoIHN0cm5jbXAoIChjaGFyICopIG91dHB1dF9zdHJpbmcsIGV4cGVjdGVkX291dHB1dF9zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDIgKiBmcmFnbWVudF9zaXplICkgKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIG91dHB1dCwgZXhwZWN0ZWRfb3V0cHV0LT54LCBmcmFnbWVudF9zaXplICkgPT0gMCApOwogCiAgICAgICAgIGluX2J1ZmZlcl9sZW4gLT0gZnJhZ21lbnRfc2l6ZTsKLSAgICAgICAgZXhwZWN0ZWRfb3V0cHV0X3N0cmluZyArPSAoIGZyYWdtZW50X3NpemUgKiAyICk7CisgICAgICAgIGV4cGVjdGVkX291dHB1dC0+eCArPSBmcmFnbWVudF9zaXplOwogICAgICAgICBzcmNfc3RyX25leHQgKz0gZnJhZ21lbnRfc2l6ZTsKIAogICAgICAgICBpZiggaW5fYnVmZmVyX2xlbiA8IGZyYWdtZW50X3NpemUgKQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXJjNC5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2FyYzQuZnVuY3Rpb24KaW5kZXggOWFhNDkxMy4uYzFlMjM4NiAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXJjNC5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hcmM0LmZ1bmN0aW9uCkBAIC04LDggKzgsNyBAQAogICovCiAKIC8qIEJFR0lOX0NBU0UgKi8KLXZvaWQgbWJlZHRsc19hcmM0X2NyeXB0KCBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBrZXlfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nICkKK3ZvaWQgbWJlZHRsc19hcmM0X2NyeXB0KCBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBkc3QgKQogewogICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0clsxMDAwXTsKICAgICBtYmVkdGxzX2FyYzRfY29udGV4dCBjdHg7CkBAIC0xOSwxMSArMTgsMTEgQEAKIAogCiAgICAgbWJlZHRsc19hcmM0X3NldHVwKCZjdHgsIGtleV9zdHItPngsIGtleV9zdHItPmxlbik7Ci0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYXJjNF9jcnlwdCgmY3R4LCBzcmNfc3RyLT5sZW4sIHNyY19zdHItPngsIGRzdF9zdHIgKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYXJjNF9jcnlwdCgmY3R4LCBzcmNfc3RyLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT54LCBkc3Rfc3RyICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIGRzdF9zdHIsIGRzdC0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLCBkc3QtPmxlbiApID09IDAgKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2FyYzRfZnJlZSggJmN0eCApOwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXJpYS5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2FyaWEuZnVuY3Rpb24KaW5kZXggZDA4YzM5ZC4uNmQ2YTIwMyAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYXJpYS5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9hcmlhLmZ1bmN0aW9uCkBAIC0yMDcsMTQgKzIwNywxMiBAQAogCiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIGFyaWFfZW5jcnlwdF9lY2IoIGRhdGFfdCAqa2V5X3N0ciwgZGF0YV90ICpzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpoZXhfZHN0X3N0cmluZywgaW50IHNldGtleV9yZXN1bHQgKQorICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmV4cGVjdGVkX291dHB1dCwgaW50IHNldGtleV9yZXN1bHQgKQogewotICAgIHVuc2lnbmVkIGNoYXIgZHN0X3N0cltBUklBX01BWF9EQVRBX1NUUl07CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbQVJJQV9NQVhfREFUQVNJWkVdOwogICAgIG1iZWR0bHNfYXJpYV9jb250ZXh0IGN0eDsKICAgICBzaXplX3QgaTsKIAotICAgIG1lbXNldCggZHN0X3N0ciwgMHgwMCwgc2l6ZW9mKCBkc3Rfc3RyICkgKTsKICAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgc2l6ZW9mKCBvdXRwdXQgKSApOwogICAgIG1iZWR0bHNfYXJpYV9pbml0KCAmY3R4ICk7CiAKQEAgLTIyNyw5ICsyMjUsOSBAQAogICAgICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYXJpYV9jcnlwdF9lY2IoICZjdHgsIHNyY19zdHItPnggKyBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArIGkgKSA9PSAwICk7CiAgICAgICAgIH0KLSAgICAgICAgbWJlZHRsc190ZXN0X2hleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBzcmNfc3RyLT5sZW4gKTsKIAotICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgICAgIEFTU0VSVF9DT01QQVJFKCBvdXRwdXQsIGV4cGVjdGVkX291dHB1dC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0LT54LCBleHBlY3RlZF9vdXRwdXQtPmxlbiApOwogICAgIH0KIAogZXhpdDoKQEAgLTIzOSwxNCArMjM3LDEyIEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgYXJpYV9kZWNyeXB0X2VjYiggZGF0YV90ICprZXlfc3RyLCBkYXRhX3QgKnNyY19zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmhleF9kc3Rfc3RyaW5nLCBpbnQgc2V0a2V5X3Jlc3VsdCApCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0LCBpbnQgc2V0a2V5X3Jlc3VsdCApCiB7Ci0gICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyW0FSSUFfTUFYX0RBVEFfU1RSXTsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFtBUklBX01BWF9EQVRBU0laRV07CiAgICAgbWJlZHRsc19hcmlhX2NvbnRleHQgY3R4OwogICAgIHNpemVfdCBpOwogCi0gICAgbWVtc2V0KCBkc3Rfc3RyLCAweDAwLCBzaXplb2YoIGRzdF9zdHIgKSApOwogICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCBzaXplb2YoIG91dHB1dCApICk7CiAgICAgbWJlZHRsc19hcmlhX2luaXQoICZjdHggKTsKIApAQCAtMjU5LDkgKzI1NSw5IEBACiAgICAgICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hcmlhX2NyeXB0X2VjYiggJmN0eCwgc3JjX3N0ci0+eCArIGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICsgaSApID09IDAgKTsKICAgICAgICAgfQotICAgICAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19zdHItPmxlbiApOwogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICAgICAgQVNTRVJUX0NPTVBBUkUoIG91dHB1dCwgZXhwZWN0ZWRfb3V0cHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXQtPngsIGV4cGVjdGVkX291dHB1dC0+bGVuICk7CiAgICAgfQogCiBleGl0OgpAQCAtMjcxLDE0ICsyNjcsMTIgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCiB2b2lkIGFyaWFfZW5jcnlwdF9jYmMoIGRhdGFfdCAqa2V5X3N0ciwgZGF0YV90ICppdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqc3JjX3N0ciwgY2hhciAqaGV4X2RzdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqc3JjX3N0ciwgZGF0YV90ICpleHBlY3RlZF9vdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYmNfcmVzdWx0ICkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbQVJJQV9NQVhfREFUQV9TVFJdOwogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0W0FSSUFfTUFYX0RBVEFTSVpFXTsKICAgICBtYmVkdGxzX2FyaWFfY29udGV4dCBjdHg7CiAKLSAgICBtZW1zZXQoIGRzdF9zdHIsIDB4MDAsIHNpemVvZiggZHN0X3N0ciApICk7CiAgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIHNpemVvZiggb3V0cHV0ICkgKTsKICAgICBtYmVkdGxzX2FyaWFfaW5pdCggJmN0eCApOwogCkBAIC0yODgsOSArMjgyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICkgPT0gY2JjX3Jlc3VsdCApOwogICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQogICAgIHsKLSAgICAgICAgbWJlZHRsc190ZXN0X2hleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBzcmNfc3RyLT5sZW4gKTsKLQotICAgICAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgICAgIEFTU0VSVF9DT01QQVJFKCBvdXRwdXQsIGV4cGVjdGVkX291dHB1dC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0LT54LCBleHBlY3RlZF9vdXRwdXQtPmxlbiApOwogICAgIH0KIAogZXhpdDoKQEAgLTMwMCwxNCArMjkzLDEyIEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwogdm9pZCBhcmlhX2RlY3J5cHRfY2JjKCBkYXRhX3QgKmtleV9zdHIsIGRhdGFfdCAqaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKnNyY19zdHIsIGNoYXIgKmhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKnNyY19zdHIsIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2JjX3Jlc3VsdCApCiB7Ci0gICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyW0FSSUFfTUFYX0RBVEFfU1RSXTsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFtBUklBX01BWF9EQVRBU0laRV07CiAgICAgbWJlZHRsc19hcmlhX2NvbnRleHQgY3R4OwogCi0gICAgbWVtc2V0KCBkc3Rfc3RyLCAweDAwLCBzaXplb2YoIGRzdF9zdHIgKSApOwogICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCBzaXplb2YoIG91dHB1dCApICk7CiAgICAgbWJlZHRsc19hcmlhX2luaXQoICZjdHggKTsKIApAQCAtMzE3LDkgKzMwOCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCApID09IGNiY19yZXN1bHQgKTsKICAgICBpZiggY2JjX3Jlc3VsdCA9PSAwICkKICAgICB7Ci0gICAgICAgIG1iZWR0bHNfdGVzdF9oZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgc3JjX3N0ci0+bGVuICk7Ci0KLSAgICAgICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgICAgICBBU1NFUlRfQ09NUEFSRSggb3V0cHV0LCBleHBlY3RlZF9vdXRwdXQtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dC0+eCwgZXhwZWN0ZWRfb3V0cHV0LT5sZW4gKTsKICAgICB9CiAKIGV4aXQ6CkBAIC0zMjksMTUgKzMxOSwxMyBAQAogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KIHZvaWQgYXJpYV9lbmNyeXB0X2NmYjEyOCggZGF0YV90ICprZXlfc3RyLCBkYXRhX3QgKml2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpzcmNfc3RyLCBjaGFyICpoZXhfZHN0X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpzcmNfc3RyLCBkYXRhX3QgKmV4cGVjdGVkX291dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCApCiB7Ci0gICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyW0FSSUFfTUFYX0RBVEFfU1RSXTsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFtBUklBX01BWF9EQVRBU0laRV07CiAgICAgbWJlZHRsc19hcmlhX2NvbnRleHQgY3R4OwogICAgIHNpemVfdCBpdl9vZmZzZXQgPSAwOwogCi0gICAgbWVtc2V0KCBkc3Rfc3RyLCAweDAwLCBzaXplb2YoIGRzdF9zdHIgKSApOwogICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCBzaXplb2YoIG91dHB1dCApICk7CiAgICAgbWJlZHRsc19hcmlhX2luaXQoICZjdHggKTsKIApAQCAtMzQ2LDkgKzMzNCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwgJml2X29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZfc3RyLT54LCBzcmNfc3RyLT54LCBvdXRwdXQgKQogICAgICAgICAgICAgICAgICA9PSByZXN1bHQgKTsKLSAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19zdHItPmxlbiApOwogCi0gICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIEFTU0VSVF9DT01QQVJFKCBvdXRwdXQsIGV4cGVjdGVkX291dHB1dC0+bGVuLAorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXQtPngsIGV4cGVjdGVkX291dHB1dC0+bGVuICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19hcmlhX2ZyZWUoICZjdHggKTsKQEAgLTM1NywxNSArMzQ1LDEzIEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwogdm9pZCBhcmlhX2RlY3J5cHRfY2ZiMTI4KCBkYXRhX3QgKmtleV9zdHIsIGRhdGFfdCAqaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKnNyY19zdHIsIGNoYXIgKmhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKnNyY19zdHIsIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICApCiB7Ci0gICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyW0FSSUFfTUFYX0RBVEFfU1RSXTsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFtBUklBX01BWF9EQVRBU0laRV07CiAgICAgbWJlZHRsc19hcmlhX2NvbnRleHQgY3R4OwogICAgIHNpemVfdCBpdl9vZmZzZXQgPSAwOwogCi0gICAgbWVtc2V0KCBkc3Rfc3RyLCAweDAwLCBzaXplb2YoIGRzdF9zdHIgKSApOwogICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCBzaXplb2YoIG91dHB1dCApICk7CiAgICAgbWJlZHRsc19hcmlhX2luaXQoICZjdHggKTsKIApAQCAtMzc0LDkgKzM2MCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwgJml2X29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZfc3RyLT54LCBzcmNfc3RyLT54LCBvdXRwdXQgKQogICAgICAgICAgICAgICAgICA9PSByZXN1bHQgKTsKLSAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBkc3Rfc3RyLCBvdXRwdXQsIHNyY19zdHItPmxlbiApOwogCi0gICAgVEVTVF9BU1NFUlQoIHN0cmNhc2VjbXAoIChjaGFyICopIGRzdF9zdHIsIGhleF9kc3Rfc3RyaW5nICkgPT0gMCApOworICAgIEFTU0VSVF9DT01QQVJFKCBvdXRwdXQsIGV4cGVjdGVkX291dHB1dC0+bGVuLAorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXQtPngsIGV4cGVjdGVkX291dHB1dC0+bGVuICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19hcmlhX2ZyZWUoICZjdHggKTsKQEAgLTM4NSwxNiArMzcxLDE0IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUiAqLwogdm9pZCBhcmlhX2VuY3J5cHRfY3RyKCBkYXRhX3QgKmtleV9zdHIsIGRhdGFfdCAqaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKnNyY19zdHIsIGNoYXIgKmhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKnNyY19zdHIsIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIGRzdF9zdHJbQVJJQV9NQVhfREFUQV9TVFJdOwogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0W0FSSUFfTUFYX0RBVEFTSVpFXTsKICAgICB1bnNpZ25lZCBjaGFyIGJsa1tNQkVEVExTX0FSSUFfQkxPQ0tTSVpFXTsKICAgICBtYmVkdGxzX2FyaWFfY29udGV4dCBjdHg7CiAgICAgc2l6ZV90IGl2X29mZnNldCA9IDA7CiAKLSAgICBtZW1zZXQoIGRzdF9zdHIsIDB4MDAsIHNpemVvZiggZHN0X3N0ciApICk7CiAgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIHNpemVvZiggb3V0cHV0ICkgKTsKICAgICBtYmVkdGxzX2FyaWFfaW5pdCggJmN0eCApOwogCkBAIC00MDIsOSArMzg2LDkgQEAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19hcmlhX2NyeXB0X2N0ciggJmN0eCwgc3JjX3N0ci0+bGVuLCAmaXZfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdl9zdHItPngsIGJsaywgc3JjX3N0ci0+eCwgb3V0cHV0ICkKICAgICAgICAgICAgICAgICAgPT0gcmVzdWx0ICk7Ci0gICAgbWJlZHRsc190ZXN0X2hleGlmeSggZHN0X3N0ciwgb3V0cHV0LCBzcmNfc3RyLT5sZW4gKTsKIAotICAgIFRFU1RfQVNTRVJUKCBzdHJjYXNlY21wKCAoY2hhciAqKSBkc3Rfc3RyLCBoZXhfZHN0X3N0cmluZyApID09IDAgKTsKKyAgICBBU1NFUlRfQ09NUEFSRSggb3V0cHV0LCBleHBlY3RlZF9vdXRwdXQtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0LT54LCBleHBlY3RlZF9vdXRwdXQtPmxlbiApOwogCiBleGl0OgogICAgIG1iZWR0bHNfYXJpYV9mcmVlKCAmY3R4ICk7CkBAIC00MTMsMTYgKzM5NywxNCBAQAogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIgKi8KIHZvaWQgYXJpYV9kZWNyeXB0X2N0ciggZGF0YV90ICprZXlfc3RyLCBkYXRhX3QgKml2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpzcmNfc3RyLCBjaGFyICpoZXhfZHN0X3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpzcmNfc3RyLCBkYXRhX3QgKmV4cGVjdGVkX291dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCApCiB7Ci0gICAgdW5zaWduZWQgY2hhciBkc3Rfc3RyW0FSSUFfTUFYX0RBVEFfU1RSXTsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFtBUklBX01BWF9EQVRBU0laRV07CiAgICAgdW5zaWduZWQgY2hhciBibGtbTUJFRFRMU19BUklBX0JMT0NLU0laRV07CiAgICAgbWJlZHRsc19hcmlhX2NvbnRleHQgY3R4OwogICAgIHNpemVfdCBpdl9vZmZzZXQgPSAwOwogCi0gICAgbWVtc2V0KCBkc3Rfc3RyLCAweDAwLCBzaXplb2YoIGRzdF9zdHIgKSApOwogICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCBzaXplb2YoIG91dHB1dCApICk7CiAgICAgbWJlZHRsc19hcmlhX2luaXQoICZjdHggKTsKIApAQCAtNDMwLDkgKzQxMiw5IEBACiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfYXJpYV9jcnlwdF9jdHIoICZjdHgsIHNyY19zdHItPmxlbiwgJml2X29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZfc3RyLT54LCBibGssIHNyY19zdHItPngsIG91dHB1dCApCiAgICAgICAgICAgICAgICAgID09IHJlc3VsdCApOwotICAgIG1iZWR0bHNfdGVzdF9oZXhpZnkoIGRzdF9zdHIsIG91dHB1dCwgc3JjX3N0ci0+bGVuICk7CiAKLSAgICBURVNUX0FTU0VSVCggc3RyY2FzZWNtcCggKGNoYXIgKikgZHN0X3N0ciwgaGV4X2RzdF9zdHJpbmcgKSA9PSAwICk7CisgICAgQVNTRVJUX0NPTVBBUkUoIG91dHB1dCwgZXhwZWN0ZWRfb3V0cHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dC0+eCwgZXhwZWN0ZWRfb3V0cHV0LT5sZW4gKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2FyaWFfZnJlZSggJmN0eCApOwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfYmxvd2Zpc2guZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9ibG93ZmlzaC5mdW5jdGlvbgppbmRleCBlYjY4OTFjLi5mODkzNTNjIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9ibG93ZmlzaC5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9ibG93ZmlzaC5mdW5jdGlvbgpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgYmxvd2Zpc2hfZW5jcnlwdF9lY2IoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIHNyY19zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZywgaW50IHNldGtleV9yZXN1bHQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogZHN0LCBpbnQgc2V0a2V5X3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgY3R4OwpAQCAtMTgxLDggKzE4MSw3IEBACiAgICAgewogICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9lY2IoICZjdHgsIE1CRURUTFNfQkxPV0ZJU0hfRU5DUllQVCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCA4LCBkc3QtPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC0xOTIsNyArMTkxLDcgQEAKIAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBibG93ZmlzaF9kZWNyeXB0X2VjYiggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogc3JjX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nLCBpbnQgc2V0a2V5X3Jlc3VsdCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBkc3QsIGludCBzZXRrZXlfcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCBjdHg7CkBAIC0yMDYsOCArMjA1LDcgQEAKICAgICB7CiAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2VjYiggJmN0eCwgTUJFRFRMU19CTE9XRklTSF9ERUNSWVBULCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIDgsIGRzdC0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTIxNyw3ICsyMTUsNyBAQAogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KIHZvaWQgYmxvd2Zpc2hfZW5jcnlwdF9jYmMoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIGl2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNiY19yZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CkBAIC0yMzMsOSArMjMxLDggQEAKICAgICBpZiggY2JjX3Jlc3VsdCA9PSAwICkKICAgICB7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sIGRzdC0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTI0NSw3ICsyNDIsNyBAQAogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KIHZvaWQgYmxvd2Zpc2hfZGVjcnlwdF9jYmMoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIGl2X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNiY19yZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CkBAIC0yNjAsOSArMjU3LDggQEAKICAgICBpZiggY2JjX3Jlc3VsdCA9PSAwKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgc3JjX3N0ci0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0LT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpAQCAtMjcyLDggKzI2OCw3IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwogdm9pZCBibG93ZmlzaF9lbmNyeXB0X2NmYjY0KCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfYmxvd2Zpc2hfY29udGV4dCBjdHg7CkBAIC0yODYsOSArMjgxLDggQEAKICAgICBtYmVkdGxzX2Jsb3dmaXNoX3NldGtleSggJmN0eCwga2V5X3N0ci0+eCwga2V5X3N0ci0+bGVuICogOCApOwogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2NmYjY0KCAmY3R4LCBNQkVEVExTX0JMT1dGSVNIX0VOQ1JZUFQsIHNyY19zdHItPmxlbiwgJml2X29mZnNldCwgaXZfc3RyLT54LCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgc3JjX3N0ci0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QtPmxlbiApID09IDAgKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2Jsb3dmaXNoX2ZyZWUoICZjdHggKTsKQEAgLTI5Nyw4ICsyOTEsNyBAQAogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DRkIgKi8KIHZvaWQgYmxvd2Zpc2hfZGVjcnlwdF9jZmI2NCggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX2Jsb3dmaXNoX2NvbnRleHQgY3R4OwpAQCAtMzExLDkgKzMwNCw4IEBACiAgICAgbWJlZHRsc19ibG93ZmlzaF9zZXRrZXkoICZjdHgsIGtleV9zdHItPngsIGtleV9zdHItPmxlbiAqIDggKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19ibG93ZmlzaF9jcnlwdF9jZmI2NCggJmN0eCwgTUJFRFRMU19CTE9XRklTSF9ERUNSWVBULCBzcmNfc3RyLT5sZW4sICZpdl9vZmZzZXQsIGl2X3N0ci0+eCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIHNyY19zdHItPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0LT5sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19ibG93ZmlzaF9mcmVlKCAmY3R4ICk7CkBAIC0zMjIsNyArMzE0LDcgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSICovCiB2b2lkIGJsb3dmaXNoX2VuY3J5cHRfY3RyKCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QgKQogewogICAgIHVuc2lnbmVkIGNoYXIgc3RyZWFtX3N0clsxMDBdOwogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CkBAIC0zMzcsOSArMzI5LDggQEAKICAgICBtYmVkdGxzX2Jsb3dmaXNoX3NldGtleSggJmN0eCwga2V5X3N0ci0+eCwga2V5X3N0ci0+bGVuICogOCApOwogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2Jsb3dmaXNoX2NyeXB0X2N0ciggJmN0eCwgc3JjX3N0ci0+bGVuLCAmaXZfb2Zmc2V0LCBpdl9zdHItPngsIHN0cmVhbV9zdHIsIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCBzcmNfc3RyLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdC0+bGVuICkgPT0gMCApOwogCiBleGl0OgogICAgIG1iZWR0bHNfYmxvd2Zpc2hfZnJlZSggJmN0eCApOwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2FtZWxsaWEuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jYW1lbGxpYS5mdW5jdGlvbgppbmRleCA0OTQ5ZmViLi4zMTI0OTVjIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jYW1lbGxpYS5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jYW1lbGxpYS5mdW5jdGlvbgpAQCAtMTc1LDcgKzE3NSw3IEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgY2FtZWxsaWFfZW5jcnlwdF9lY2IoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIHNyY19zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZywgaW50IHNldGtleV9yZXN1bHQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogZHN0LCBpbnQgc2V0a2V5X3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgY3R4OwpAQCAtMTg5LDggKzE4OSw3IEBACiAgICAgewogICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9lY2IoICZjdHgsIE1CRURUTFNfQ0FNRUxMSUFfRU5DUllQVCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgMTYsIGRzdC0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTIwMCw3ICsxOTksNyBAQAogCiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIGNhbWVsbGlhX2RlY3J5cHRfZWNiKCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcsIGludCBzZXRrZXlfcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGRzdCwgaW50IHNldGtleV9yZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0IGN0eDsKQEAgLTIxNCw4ICsyMTMsNyBAQAogICAgIHsKICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfZWNiKCAmY3R4LCBNQkVEVExTX0NBTUVMTElBX0RFQ1JZUFQsIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIDE2LCBkc3QtPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC0yMjUsOCArMjIzLDcgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCiB2b2lkIGNhbWVsbGlhX2VuY3J5cHRfY2JjKCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYmNfcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCwgaW50IGNiY19yZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc19jYW1lbGxpYV9jb250ZXh0IGN0eDsKQEAgLTI0MCw5ICsyMzcsOCBAQAogICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgc3JjX3N0ci0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0LT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpAQCAtMjUyLDcgKzI0OCw3IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQyAqLwogdm9pZCBjYW1lbGxpYV9kZWNyeXB0X2NiYyggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2JjX3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKQEAgLTI2Nyw5ICsyNjMsOCBAQAogICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgc3JjX3N0ci0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0LT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpAQCAtMjc5LDggKzI3NCw3IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9NT0RFX0NGQiAqLwogdm9pZCBjYW1lbGxpYV9lbmNyeXB0X2NmYjEyOCggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX2NhbWVsbGlhX2NvbnRleHQgY3R4OwpAQCAtMjkzLDggKzI4Nyw3IEBACiAgICAgbWJlZHRsc19jYW1lbGxpYV9zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyLT54LCBrZXlfc3RyLT5sZW4gKiA4ICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2FtZWxsaWFfY3J5cHRfY2ZiMTI4KCAmY3R4LCBNQkVEVExTX0NBTUVMTElBX0VOQ1JZUFQsIDE2LCAmaXZfb2Zmc2V0LCBpdl9zdHItPngsIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIDE2LCBkc3QtPmxlbiApID09IDAgKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2NhbWVsbGlhX2ZyZWUoICZjdHggKTsKQEAgLTMwNCw3ICsyOTcsNyBAQAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0ZCICovCiB2b2lkIGNhbWVsbGlhX2RlY3J5cHRfY2ZiMTI4KCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogZHN0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfY2FtZWxsaWFfY29udGV4dCBjdHg7CkBAIC0zMTcsOCArMzEwLDcgQEAKICAgICBtYmVkdGxzX2NhbWVsbGlhX3NldGtleV9lbmMoICZjdHgsIGtleV9zdHItPngsIGtleV9zdHItPmxlbiAqIDggKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jYW1lbGxpYV9jcnlwdF9jZmIxMjgoICZjdHgsIE1CRURUTFNfQ0FNRUxMSUFfREVDUllQVCwgMTYsICZpdl9vZmZzZXQsIGl2X3N0ci0+eCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgMTYsIGRzdC0+bGVuICkgPT0gMCApOwogCiBleGl0OgogICAgIG1iZWR0bHNfY2FtZWxsaWFfZnJlZSggJmN0eCApOwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2NtLmRhdGEgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jY20uZGF0YQppbmRleCA0NmMxNzJiLi40ZjgzNDY4IDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jY20uZGF0YQorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jY20uZGF0YQpAQCAtNDEsOSArNDEsOSBAQAogQ0NNIGxlbmd0aHMgIzYgdGFnIGxlbmd0aCBub3QgZXZlbgogY2NtX2xlbmd0aHM6NToxMDo1Ojc6TUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVAogCi1DQ00gbGVuZ3RocyAjNyBBRCB0b28gbG9uZyAoMl4xNiAtIDJeOCArIDEpCitDQ00gbGVuZ3RocyAjNyBBRCB0b28gbG9uZyAoMl4xNiAtIDJeOCkKIGRlcGVuZHNfb246IU1CRURUTFNfQ0NNX0FMVAotY2NtX2xlbmd0aHM6NToxMDo2NTI4MTo4Ok1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQKK2NjbV9sZW5ndGhzOjU6MTA6NjUyODA6ODpNQkVEVExTX0VSUl9DQ01fQkFEX0lOUFVUCiAKIENDTSBsZW5ndGhzICM4IG1zZyB0b28gbG9uZyBmb3IgdGhpcyBJViBsZW5ndGggKDJeMTYsIHEgPSAyKQogY2NtX2xlbmd0aHM6NjU1MzY6MTM6NTo4Ok1CRURUTFNfRVJSX0NDTV9CQURfSU5QVVQKQEAgLTUxLDYgKzUxLDkgQEAKIENDTSBsZW5ndGhzICM5IHRhZyBsZW5ndGggMAogY2NtX2xlbmd0aHM6NToxMDo1OjA6TUJFRFRMU19FUlJfQ0NNX0JBRF9JTlBVVAogCitDQ00gbGVuZ3RocyAjMTAgTGFyZ2UgQUQKK2NjbV9sZW5ndGhzOjU6MTA6MzI3Njg6ODowCisKIENDTSogZml4ZWQgdGFnIGxlbmd0aHMgIzEgYWxsIE9LCiBjY21fc3Rhcl9sZW5ndGhzOjU6MTA6NTo4OjAKIApkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2NtLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2NtLmZ1bmN0aW9uCmluZGV4IDU3MjRkOGIuLmZhYTdlMTMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NjbS5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9jY20uZnVuY3Rpb24KQEAgLTQxLDE3ICs0MSwxNyBAQAogICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKICAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMF07CiAgICAgdW5zaWduZWQgY2hhciBpdlsxNF07Ci0gICAgdW5zaWduZWQgY2hhciBhZGRbMTBdOworICAgIHVuc2lnbmVkIGNoYXIgKmFkZCA9IE5VTEw7CiAgICAgdW5zaWduZWQgY2hhciBvdXRbMTBdOwogICAgIHVuc2lnbmVkIGNoYXIgdGFnWzE4XTsKICAgICBpbnQgZGVjcnlwdF9yZXQ7CiAKICAgICBtYmVkdGxzX2NjbV9pbml0KCAmY3R4ICk7CiAKKyAgICBBU1NFUlRfQUxMT0NfV0VBSyggYWRkLCBhZGRfbGVuICk7CiAgICAgbWVtc2V0KCBrZXksIDAsIHNpemVvZigga2V5ICkgKTsKICAgICBtZW1zZXQoIG1zZywgMCwgc2l6ZW9mKCBtc2cgKSApOwogICAgIG1lbXNldCggaXYsIDAsIHNpemVvZiggaXYgKSApOwotICAgIG1lbXNldCggYWRkLCAwLCBzaXplb2YoIGFkZCApICk7CiAgICAgbWVtc2V0KCBvdXQsIDAsIHNpemVvZiggb3V0ICkgKTsKICAgICBtZW1zZXQoIHRhZywgMCwgc2l6ZW9mKCB0YWcgKSApOwogCkBAIC03MCw2ICs3MCw3IEBACiAgICAgICAgIFRFU1RfQVNTRVJUKCBkZWNyeXB0X3JldCA9PSByZXMgKTsKIAogZXhpdDoKKyAgICBtYmVkdGxzX2ZyZWUoIGFkZCApOwogICAgIG1iZWR0bHNfY2NtX2ZyZWUoICZjdHggKTsKIH0KIC8qIEVORF9DQVNFICovCkBAIC0xNTIsNyArMTUzLDcgQEAKIHZvaWQgbWJlZHRsc19jY21fYXV0aF9kZWNyeXB0KCBpbnQgY2lwaGVyX2lkLCBkYXRhX3QgKiBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogbXNnLCBkYXRhX3QgKiBpdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBhZGQsIGludCB0YWdfbGVuLCBpbnQgcmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9tc2cgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGV4cGVjdGVkX21zZyApCiB7CiAgICAgdW5zaWduZWQgY2hhciB0YWdbMTZdOwogICAgIG1iZWR0bHNfY2NtX2NvbnRleHQgY3R4OwpAQCAtMTcyLDcgKzE3Myw3IEBACiAKICAgICBpZiggcmVzdWx0ID09IDAgKQogICAgIHsKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1lbWNtcCggbXNnLT54LCBoZXhfbXNnLT54LCBoZXhfbXNnLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtZW1jbXAoIG1zZy0+eCwgZXhwZWN0ZWRfbXNnLT54LCBleHBlY3RlZF9tc2ctPmxlbiApID09IDAgKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2NoYWNoYTIwLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2hhY2hhMjAuZnVuY3Rpb24KaW5kZXggYWZlMjQxOC4uNjdjOGRlMiAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2hhY2hhMjAuZnVuY3Rpb24KKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfY2hhY2hhMjAuZnVuY3Rpb24KQEAgLTE3LDEzICsxNyw2IEBACiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMzc1XTsKICAgICBtYmVkdGxzX2NoYWNoYTIwX2NvbnRleHQgY3R4OwogCi0gICAgLyoKLSAgICAgKiBCdWZmZXJzIHRvIHN0b3JlIHRoZSBBU0NJSSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Ygb3V0cHV0IGFuZAotICAgICAqIGV4cGVjdGVkX291dHB1dF9zdHIuCi0gICAgICovCi0gICAgdW5zaWduZWQgY2hhciBvdXRwdXRfc3RyaW5nWzc1MV0gPSB7ICdcMCcgfTsKLSAgICB1bnNpZ25lZCBjaGFyIGV4cGVjdGVkX291dHB1dF9zdHJpbmdbNzUxXSA9IHsgJ1wwJyB9OwotCiAgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIHNpemVvZiggb3V0cHV0ICkgKTsKIAogICAgIFRFU1RfQVNTRVJUKCBzcmNfc3RyLT5sZW4gICA9PSBleHBlY3RlZF9vdXRwdXRfc3RyLT5sZW4gKTsKQEAgLTM1LDEyICsyOCw4IEBACiAgICAgICovCiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2hhY2hhMjBfY3J5cHQoIGtleV9zdHItPngsIG5vbmNlX3N0ci0+eCwgY291bnRlciwgc3JjX3N0ci0+bGVuLCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBleHBlY3RlZF9vdXRwdXRfc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dF9zdHItPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0X3N0ci0+bGVuKTsKLSAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBvdXRwdXRfc3RyaW5nLCBvdXRwdXQsIHNyY19zdHItPmxlbiApOwotICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopb3V0cHV0X3N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWV4cGVjdGVkX291dHB1dF9zdHJpbmcgKSA9PSAwICk7CisgICAgQVNTRVJUX0NPTVBBUkUoIG91dHB1dCwgZXhwZWN0ZWRfb3V0cHV0X3N0ci0+bGVuLAorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXRfc3RyLT54LCBleHBlY3RlZF9vdXRwdXRfc3RyLT5sZW4gKTsKIAogICAgIC8qCiAgICAgICogVGVzdCB0aGUgc3RyZWFtaW5nIEFQSQpAQCAtNTQsOSArNDMsOCBAQAogICAgIG1lbXNldCggb3V0cHV0LCAweDAwLCBzaXplb2YoIG91dHB1dCApICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfY2hhY2hhMjBfdXBkYXRlKCAmY3R4LCBzcmNfc3RyLT5sZW4sIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgIG1iZWR0bHNfdGVzdF9oZXhpZnkoIG91dHB1dF9zdHJpbmcsIG91dHB1dCwgc3JjX3N0ci0+bGVuICk7Ci0gICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKilvdXRwdXRfc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopZXhwZWN0ZWRfb3V0cHV0X3N0cmluZyApID09IDAgKTsKKyAgICBBU1NFUlRfQ09NUEFSRSggb3V0cHV0LCBleHBlY3RlZF9vdXRwdXRfc3RyLT5sZW4sCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dF9zdHItPngsIGV4cGVjdGVkX291dHB1dF9zdHItPmxlbiApOwogCiAgICAgLyoKICAgICAgKiBUZXN0IHRoZSBzdHJlYW1pbmcgQVBJIGFnYWluLCBwaWVjZXdpc2UKQEAgLTcxLDkgKzU5LDggQEAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19jaGFjaGEyMF91cGRhdGUoICZjdHgsIHNyY19zdHItPmxlbiAtIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT54ICsgMSwgb3V0cHV0ICsgMSApID09IDAgKTsKIAotICAgIG1iZWR0bHNfdGVzdF9oZXhpZnkoIG91dHB1dF9zdHJpbmcsIG91dHB1dCwgc3JjX3N0ci0+bGVuICk7Ci0gICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKilvdXRwdXRfc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopZXhwZWN0ZWRfb3V0cHV0X3N0cmluZyApID09IDAgKTsKKyAgICBBU1NFUlRfQ09NUEFSRSggb3V0cHV0LCBleHBlY3RlZF9vdXRwdXRfc3RyLT5sZW4sCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dF9zdHItPngsIGV4cGVjdGVkX291dHB1dF9zdHItPmxlbiApOwogCiAgICAgbWJlZHRsc19jaGFjaGEyMF9mcmVlKCAmY3R4ICk7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9kZXMuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9kZXMuZnVuY3Rpb24KaW5kZXggNjI1Yzg3YS4uNWIyNDkzNSAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfZGVzLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2Rlcy5mdW5jdGlvbgpAQCAtMTUsOCArMTUsNyBAQAogLyogRU5EX0NBU0UgKi8KIAogLyogQkVHSU5fQ0FTRSAqLwotdm9pZCBkZXNfZW5jcnlwdF9lY2IoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIHNyY19zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcgKQordm9pZCBkZXNfZW5jcnlwdF9lY2IoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX2Rlc19jb250ZXh0IGN0eDsKQEAgLTI4LDggKzI3LDcgQEAKICAgICBtYmVkdGxzX2Rlc19zZXRrZXlfZW5jKCAmY3R4LCBrZXlfc3RyLT54ICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGVzX2NyeXB0X2VjYiggJmN0eCwgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LCA4LCBkc3QtPmxlbiApID09IDAgKTsKIAogZXhpdDoKICAgICBtYmVkdGxzX2Rlc19mcmVlKCAmY3R4ICk7CkBAIC0zNyw4ICszNSw3IEBACiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFICovCi12b2lkIGRlc19kZWNyeXB0X2VjYiggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogc3JjX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZyApCit2b2lkIGRlc19kZWNyeXB0X2VjYiggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfZGVzX2NvbnRleHQgY3R4OwpAQCAtNTAsOCArNDcsNyBAQAogICAgIG1iZWR0bHNfZGVzX3NldGtleV9kZWMoICZjdHgsIGtleV9zdHItPnggKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19kZXNfY3J5cHRfZWNiKCAmY3R4LCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIDgsIGRzdC0+bGVuICkgPT0gMCApOwogCiBleGl0OgogICAgIG1iZWR0bHNfZGVzX2ZyZWUoICZjdHggKTsKQEAgLTYwLDggKzU2LDcgQEAKIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCiB2b2lkIGRlc19lbmNyeXB0X2NiYyggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgIGludCBjYmNfcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBkc3QsIGludCBjYmNfcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfZGVzX2NvbnRleHQgY3R4OwpAQCAtNzUsOSArNzAsOCBAQAogICAgIGlmKCBjYmNfcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgc3JjX3N0ci0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0LT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpAQCAtODcsNyArODEsNyBAQAogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KIHZvaWQgZGVzX2RlY3J5cHRfY2JjKCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBpdl9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0LAogICAgICAgICAgICAgICAgICAgICAgIGludCBjYmNfcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwpAQCAtMTAyLDkgKzk2LDggQEAKICAgICBpZiggY2JjX3Jlc3VsdCA9PSAwICkKICAgICB7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIHNyY19zdHItPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdC0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTExNCw3ICsxMDcsNyBAQAogCiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIGRlczNfZW5jcnlwdF9lY2IoIGludCBrZXlfY291bnQsIGRhdGFfdCAqIGtleV9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nICkKKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfZGVzM19jb250ZXh0IGN0eDsKQEAgLTEzMiw4ICsxMjUsNyBAQAogCiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGVzM19jcnlwdF9lY2IoICZjdHgsIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgOCwgZHN0LT5sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19kZXMzX2ZyZWUoICZjdHggKTsKQEAgLTE0Miw3ICsxMzQsNyBAQAogCiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIGRlczNfZGVjcnlwdF9lY2IoIGludCBrZXlfY291bnQsIGRhdGFfdCAqIGtleV9zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhleF9kc3Rfc3RyaW5nICkKKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogZHN0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsxMDBdOwogICAgIG1iZWR0bHNfZGVzM19jb250ZXh0IGN0eDsKQEAgLTE2MCw4ICsxNTIsNyBAQAogCiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfZGVzM19jcnlwdF9lY2IoICZjdHgsIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgOCwgZHN0LT5sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19kZXMzX2ZyZWUoICZjdHggKTsKQEAgLTE3MSw3ICsxNjIsNyBAQAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCiB2b2lkIGRlczNfZW5jcnlwdF9jYmMoIGludCBrZXlfY291bnQsIGRhdGFfdCAqIGtleV9zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGl2X3N0ciwgZGF0YV90ICogc3JjX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcsIGludCBjYmNfcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogZHN0LCBpbnQgY2JjX3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX2RlczNfY29udGV4dCBjdHg7CkBAIC0xOTIsOSArMTgzLDggQEAKICAgICBpZiggY2JjX3Jlc3VsdCA9PSAwICkKICAgICB7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sIGRzdC0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTIwNSw3ICsxOTUsNyBAQAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDICovCiB2b2lkIGRlczNfZGVjcnlwdF9jYmMoIGludCBrZXlfY291bnQsIGRhdGFfdCAqIGtleV9zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGl2X3N0ciwgZGF0YV90ICogc3JjX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcsIGludCBjYmNfcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogZHN0LCBpbnQgY2JjX3Jlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX2RlczNfY29udGV4dCBjdHg7CkBAIC0yMjYsOSArMjE2LDggQEAKICAgICBpZiggY2JjX3Jlc3VsdCA9PSAwICkKICAgICB7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIHNyY19zdHItPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdC0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5mdW5jdGlvbgppbmRleCBiMjhkOTE4YmEuLjliN2IwZWUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2djbS5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9nY20uZnVuY3Rpb24KQEAgLTM1LDggKzM1LDggQEAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgZ2NtX2VuY3J5cHRfYW5kX3RhZyggaW50IGNpcGhlcl9pZCwgZGF0YV90ICoga2V5X3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBhZGRfc3RyLCBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZ19sZW5fYml0cywgZGF0YV90ICogaGV4X3RhZ19zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGFkZF9zdHIsIGRhdGFfdCAqIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZ19sZW5fYml0cywgZGF0YV90ICogdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5pdF9yZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEyOF07CkBAIC01NSwxMSArNTUsMTAgQEAKICAgICB7CiAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX2djbV9jcnlwdF9hbmRfdGFnKCAmY3R4LCBNQkVEVExTX0dDTV9FTkNSWVBULCBzcmNfc3RyLT5sZW4sIGl2X3N0ci0+eCwgaXZfc3RyLT5sZW4sIGFkZF9zdHItPngsIGFkZF9zdHItPmxlbiwgc3JjX3N0ci0+eCwgb3V0cHV0LCB0YWdfbGVuLCB0YWdfb3V0cHV0ICkgPT0gMCApOwogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIHRhZ19vdXRwdXQsIGhleF90YWdfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnX2xlbiwgaGV4X3RhZ19zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLCBkc3QtPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIHRhZ19vdXRwdXQsIHRhZy0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ19sZW4sIHRhZy0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2hrZGYuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9oa2RmLmZ1bmN0aW9uCmluZGV4IDk2N2RmMzYuLjRjNTk3YzMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX2hrZGYuZnVuY3Rpb24KKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfaGtkZi5mdW5jdGlvbgpAQCAtMTQsMTMgKzE0LDYgQEAKIHsKICAgICBpbnQgcmV0OwogICAgIHVuc2lnbmVkIGNoYXIgb2ttWzEyOF0gPSB7ICdcMCcgfTsKLSAgICAvKgotICAgICAqIG9rbV9zdHJpbmcgYW5kIGV4cGVjdGVkX29rbV9zdHJpbmcgYXJlIHRoZSBBU0NJSSBzdHJpbmcgcmVwcmVzZW50YXRpb25zCi0gICAgICogb2Yga20gYW5kIGV4cGVjdGVkX29rbSwgc28gdGhlaXIgc2l6ZSBzaG91bGQgYmUgdHdpY2UgdGhlIHNpemUgb2YKLSAgICAgKiBva20gYW5kIGV4cGVjdGVkX29rbSwgYW5kIGFuIGV4dHJhIG51bGwtdGVybWluYXRpb24uCi0gICAgICovCi0gICAgdW5zaWduZWQgY2hhciBva21fc3RyaW5nWzI1N10gPSB7ICdcMCcgfTsKLSAgICB1bnNpZ25lZCBjaGFyIGV4cGVjdGVkX29rbV9zdHJpbmdbMjU3XSA9IHsgJ1wwJyB9OwogCiAgICAgY29uc3QgbWJlZHRsc19tZF9pbmZvX3QgKm1kID0gbWJlZHRsc19tZF9pbmZvX2Zyb21fdHlwZSggbWRfYWxnICk7CiAgICAgVEVTVF9BU1NFUlQoIG1kICE9IE5VTEwgKTsKQEAgLTMxLDE0ICsyNCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT54LCBpbmZvLT5sZW4sIG9rbSwgZXhwZWN0ZWRfb2ttLT5sZW4gKTsKICAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKIAotICAgIC8qCi0gICAgICogUnVuIG1iZWR0bHNfdGVzdF9oZXhpZnkgb24gb2ttIGFuZCBleHBlY3RlZF9va20gc28gdGhhdCBpdCBsb29rcyBuaWNlcgotICAgICAqIGlmIHRoZSBhc3NlcnRpb24gZmFpbHMuCi0gICAgICovCi0gICAgbWJlZHRsc190ZXN0X2hleGlmeSggb2ttX3N0cmluZywgb2ttLCBleHBlY3RlZF9va20tPmxlbiApOwotICAgIG1iZWR0bHNfdGVzdF9oZXhpZnkoIGV4cGVjdGVkX29rbV9zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfb2ttLT54LCBleHBlY3RlZF9va20tPmxlbiApOwotICAgIFRFU1RfQVNTRVJUKCAhc3RyY21wKCAoY2hhciAqKW9rbV9zdHJpbmcsIChjaGFyICopZXhwZWN0ZWRfb2ttX3N0cmluZyApICk7CisgICAgQVNTRVJUX0NPTVBBUkUoIG9rbSAgICAgICAgICAgICwgZXhwZWN0ZWRfb2ttLT5sZW4sCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX29rbS0+eCwgZXhwZWN0ZWRfb2ttLT5sZW4gKTsKIH0KIC8qIEVORF9DQVNFICovCiAKQEAgLTYyLDEyICs0OSwxMSBAQAogICAgIGlrbSA9IG1iZWR0bHNfdGVzdF91bmhleGlmeV9hbGxvYyggaGV4X2lrbV9zdHJpbmcsICZpa21fbGVuICk7CiAgICAgc2FsdCA9IG1iZWR0bHNfdGVzdF91bmhleGlmeV9hbGxvYyggaGV4X3NhbHRfc3RyaW5nLCAmc2FsdF9sZW4gKTsKICAgICBwcmsgPSBtYmVkdGxzX3Rlc3RfdW5oZXhpZnlfYWxsb2MoIGhleF9wcmtfc3RyaW5nLCAmcHJrX2xlbiApOwotICAgIFRFU1RfQVNTRVJUKCBwcmtfbGVuID09IG91dHB1dF9wcmtfbGVuICk7CiAKICAgICByZXQgPSBtYmVkdGxzX2hrZGZfZXh0cmFjdCggbWQsIHNhbHQsIHNhbHRfbGVuLCBpa20sIGlrbV9sZW4sIG91dHB1dF9wcmsgKTsKICAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCAhbWVtY21wKCBvdXRwdXRfcHJrLCBwcmssIHBya19sZW4gKSApOworICAgIEFTU0VSVF9DT01QQVJFKCBvdXRwdXRfcHJrLCBvdXRwdXRfcHJrX2xlbiwgcHJrLCBwcmtfbGVuICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19mcmVlKGlrbSk7CkBAIC0xMDMsNyArODksNyBAQAogICAgIHJldCA9IG1iZWR0bHNfaGtkZl9leHBhbmQoIG1kLCBwcmssIHBya19sZW4sIGluZm8sIGluZm9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9va20sIE9LTV9MRU4gKTsKICAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKLSAgICBURVNUX0FTU0VSVCggIW1lbWNtcCggb3V0cHV0X29rbSwgb2ttLCBva21fbGVuICkgKTsKKyAgICBBU1NFUlRfQ09NUEFSRSggb3V0cHV0X29rbSwgb2ttX2xlbiwgb2ttLCBva21fbGVuICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19mcmVlKGluZm8pOwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWQuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZC5mdW5jdGlvbgppbmRleCBiZTU3ODI5Li5kOTE4Y2UzIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZC5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZC5mdW5jdGlvbgpAQCAtMTI3LDcgKzEyNyw3IEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgbWRfdGV4dCggY2hhciAqIHRleHRfbWRfbmFtZSwgY2hhciAqIHRleHRfc3JjX3N0cmluZywKLSAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2hhc2hfc3RyaW5nICkKKyAgICAgICAgICAgICAgZGF0YV90ICogaGFzaCApCiB7CiAgICAgY2hhciBtZF9uYW1lWzEwMF07CiAgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMDBdOwpAQCAtMTQ1LDE1ICsxNDUsMTQgQEAKIAogICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kKCBtZF9pbmZvLCBzcmNfc3RyLCBzdHJsZW4oIChjaGFyICopIHNyY19zdHIgKSwgb3V0cHV0ICkgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9oYXNoX3N0cmluZy0+eCwKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoYXNoLT54LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9oYXNoX3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLT5sZW4gKSA9PSAwICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFICovCi12b2lkIG1kX2hleCggY2hhciAqIHRleHRfbWRfbmFtZSwgZGF0YV90ICogc3JjX3N0ciwKLSAgICAgICAgICAgICBkYXRhX3QgKiBoZXhfaGFzaF9zdHJpbmcgKQordm9pZCBtZF9oZXgoIGNoYXIgKiB0ZXh0X21kX25hbWUsIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhhc2ggKQogewogICAgIGNoYXIgbWRfbmFtZVsxMDBdOwogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CkBAIC0xNjksMTUgKzE2OCwxNSBAQAogICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kKCBtZF9pbmZvLCBzcmNfc3RyLT54LCBzcmNfc3RyLT5sZW4sIG91dHB1dCApICk7CiAKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9oYXNoX3N0cmluZy0+eCwKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoYXNoLT54LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9oYXNoX3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLT5sZW4gKSA9PSAwICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIG1kX3RleHRfbXVsdGkoIGNoYXIgKiB0ZXh0X21kX25hbWUsIGNoYXIgKiB0ZXh0X3NyY19zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9oYXNoX3N0cmluZyApCisgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhhc2ggKQogewogICAgIGNoYXIgbWRfbmFtZVsxMDBdOwogICAgIHVuc2lnbmVkIGNoYXIgc3JjX3N0clsxMDAwXTsKQEAgLTIxMSwxOCArMjEwLDE4IEBACiAKICAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF91cGRhdGUoICZjdHgsIHNyY19zdHIgKyBoYWxmd2F5LCBsZW4gLSBoYWxmd2F5ICkgKTsKICAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9maW5pc2goICZjdHgsIG91dHB1dCApICk7Ci0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAorICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhhc2gtPngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2hhc2hfc3RyaW5nLT5sZW4pID09IDAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaC0+bGVuKSA9PSAwICk7CiAKICAgICAvKiBUZXN0IGNsb25lICovCiAgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMCApOwogCiAgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfdXBkYXRlKCAmY3R4X2NvcHksIHNyY19zdHIgKyBoYWxmd2F5LCBsZW4gLSBoYWxmd2F5ICkgKTsKICAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9maW5pc2goICZjdHhfY29weSwgb3V0cHV0ICkgKTsKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfaGFzaF9zdHJpbmctPngsCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJlZHRsc19tZF9nZXRfc2l6ZSggbWRfaW5mbyApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfaGFzaF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaC0+bGVuICkgPT0gMCApOwogCiBleGl0OgogICAgIG1iZWR0bHNfbWRfZnJlZSggJmN0eCApOwpAQCAtMjMxLDggKzIzMCw3IEBACiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFICovCi12b2lkIG1kX2hleF9tdWx0aSggY2hhciAqIHRleHRfbWRfbmFtZSwgZGF0YV90ICogc3JjX3N0ciwKLSAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBoZXhfaGFzaF9zdHJpbmcgKQordm9pZCBtZF9oZXhfbXVsdGkoIGNoYXIgKiB0ZXh0X21kX25hbWUsIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhhc2ggKQogewogICAgIGNoYXIgbWRfbmFtZVsxMDBdOwogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CkBAIC0yNjEsMTggKzI1OSwxOCBAQAogCiAgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfdXBkYXRlKCAmY3R4LCBzcmNfc3RyLT54ICsgaGFsZndheSwgc3JjX3N0ci0+bGVuIC0gaGFsZndheSkgKTsKICAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9maW5pc2goICZjdHgsIG91dHB1dCApICk7Ci0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAorICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhhc2gtPngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gtPmxlbiApID09IDAgKTsKIAogICAgIC8qIFRlc3QgY2xvbmUgKi8KICAgICBtZW1zZXQoIG91dHB1dCwgMHgwMCwgMTAwICk7CiAKICAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF91cGRhdGUoICZjdHhfY29weSwgc3JjX3N0ci0+eCArIGhhbGZ3YXksIHNyY19zdHItPmxlbiAtIGhhbGZ3YXkgKSApOwogICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2ZpbmlzaCggJmN0eF9jb3B5LCBvdXRwdXQgKSApOwotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9oYXNoX3N0cmluZy0+eCwKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoYXNoLT54LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9oYXNoX3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLT5sZW4gKSA9PSAwICk7CiAKIGV4aXQ6CiAgICAgbWJlZHRsc19tZF9mcmVlKCAmY3R4ICk7CkBAIC0yODMsNyArMjgxLDcgQEAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgbWJlZHRsc19tZF9obWFjKCBjaGFyICogdGV4dF9tZF9uYW1lLCBpbnQgdHJ1bmNfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9oYXNoX3N0cmluZyApCisgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGFzaCApCiB7CiAgICAgY2hhciBtZF9uYW1lWzEwMF07CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKQEAgLTI5OSwxNCArMjk3LDE0IEBACiAKICAgICBURVNUX0FTU0VSVCAoIG1iZWR0bHNfbWRfaG1hYyggbWRfaW5mbywga2V5X3N0ci0+eCwga2V5X3N0ci0+bGVuLCBzcmNfc3RyLT54LCBzcmNfc3RyLT5sZW4sIG91dHB1dCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9oYXNoX3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNfc2l6ZSwgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNfc2l6ZSwgaGFzaC0+bGVuICkgPT0gMCApOwogfQogLyogRU5EX0NBU0UgKi8KIAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBtZF9obWFjX211bHRpKCBjaGFyICogdGV4dF9tZF9uYW1lLCBpbnQgdHJ1bmNfc2l6ZSwgZGF0YV90ICoga2V5X3N0ciwKLSAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGV4X2hhc2hfc3RyaW5nICkKKyAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGFzaCApCiB7CiAgICAgY2hhciBtZF9uYW1lWzEwMF07CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKQEAgLTMzMiw4ICszMzAsOCBAQAogICAgIFRFU1RfQVNTRVJUICggMCA9PSBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmY3R4LCBzcmNfc3RyLT54ICsgaGFsZndheSwgc3JjX3N0ci0+bGVuIC0gaGFsZndheSApICk7CiAgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfaG1hY19maW5pc2goICZjdHgsIG91dHB1dCApICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfaGFzaF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jX3NpemUsIGhleF9oYXNoX3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhhc2gtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jX3NpemUsIGhhc2gtPmxlbiApID09IDAgKTsKIAogICAgIC8qIFRlc3QgYWdhaW4sIGZvciByZXNldCgpICovCiAgICAgbWVtc2V0KCBvdXRwdXQsIDB4MDAsIDEwMCApOwpAQCAtMzQzLDggKzM0MSw4IEBACiAgICAgVEVTVF9BU1NFUlQgKCAwID09IG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZjdHgsIHNyY19zdHItPnggKyBoYWxmd2F5LCBzcmNfc3RyLT5sZW4gLSBoYWxmd2F5ICkgKTsKICAgICBURVNUX0FTU0VSVCAoIDAgPT0gbWJlZHRsc19tZF9obWFjX2ZpbmlzaCggJmN0eCwgb3V0cHV0ICkgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9oYXNoX3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNfc2l6ZSwgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNfc2l6ZSwgaGFzaC0+bGVuICkgPT0gMCApOwogCiBleGl0OgogICAgIG1iZWR0bHNfbWRfZnJlZSggJmN0eCApOwpAQCAtMzUzLDcgKzM1MSw3IEBACiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0ZTX0lPICovCiB2b2lkIG1iZWR0bHNfbWRfZmlsZSggY2hhciAqIHRleHRfbWRfbmFtZSwgY2hhciAqIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIGhleF9oYXNoX3N0cmluZyApCisgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGFzaCApCiB7CiAgICAgY2hhciBtZF9uYW1lWzEwMF07CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKQEAgLTM2OCw4ICszNjYsOCBAQAogCiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfbWRfZmlsZSggbWRfaW5mbywgZmlsZW5hbWUsIG91dHB1dCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9oYXNoX3N0cmluZy0+eCwKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoYXNoLT54LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX21kX2dldF9zaXplKCBtZF9pbmZvICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9oYXNoX3N0cmluZy0+bGVuICkgPT0gMCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLT5sZW4gKSA9PSAwICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWR4LmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbWR4LmZ1bmN0aW9uCmluZGV4IGVkMmFlNTguLmFhMzVjNTggMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21keC5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tZHguZnVuY3Rpb24KQEAgLTYsNyArNiw3IEBACiAvKiBFTkRfSEVBREVSICovCiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX01EMl9DICovCi12b2lkIG1kMl90ZXh0KCBjaGFyICogdGV4dF9zcmNfc3RyaW5nLCBkYXRhX3QgKiBoZXhfaGFzaF9zdHJpbmcgKQordm9pZCBtZDJfdGV4dCggY2hhciAqIHRleHRfc3JjX3N0cmluZywgZGF0YV90ICogaGFzaCApCiB7CiAgICAgaW50IHJldDsKICAgICB1bnNpZ25lZCBjaGFyIHNyY19zdHJbMTAwXTsKQEAgLTIwLDE0ICsyMCwxMyBAQAogICAgIHJldCA9IG1iZWR0bHNfbWQyX3JldCggc3JjX3N0ciwgc3RybGVuKCAoY2hhciAqKSBzcmNfc3RyICksIG91dHB1dCApOwogICAgIFRFU1RfQVNTRVJUKCByZXQgPT0gMCApIDsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9oYXNoX3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9oYXNoX3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhhc2gtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAgb3V0cHV0LCBoYXNoLT5sZW4gKSA9PSAwICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19NRDRfQyAqLwotdm9pZCBtZDRfdGV4dCggY2hhciAqIHRleHRfc3JjX3N0cmluZywgZGF0YV90ICogaGV4X2hhc2hfc3RyaW5nICkKK3ZvaWQgbWQ0X3RleHQoIGNoYXIgKiB0ZXh0X3NyY19zdHJpbmcsIGRhdGFfdCAqIGhhc2ggKQogewogICAgIGludCByZXQ7CiAgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CkBAIC00MSwxNCArNDAsMTMgQEAKICAgICByZXQgPSBtYmVkdGxzX21kNF9yZXQoIHNyY19zdHIsIHN0cmxlbiggKGNoYXIgKikgc3JjX3N0ciApLCBvdXRwdXQgKTsKICAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9oYXNoX3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9oYXNoX3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhhc2gtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAgb3V0cHV0LCBoYXNoLT5sZW4gKSA9PSAwICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19NRDVfQyAqLwotdm9pZCBtZDVfdGV4dCggY2hhciAqIHRleHRfc3JjX3N0cmluZywgZGF0YV90ICogaGV4X2hhc2hfc3RyaW5nICkKK3ZvaWQgbWQ1X3RleHQoIGNoYXIgKiB0ZXh0X3NyY19zdHJpbmcsIGRhdGFfdCAqIGhhc2ggKQogewogICAgIGludCByZXQ7CiAgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CkBAIC02MiwxNCArNjAsMTMgQEAKICAgICByZXQgPSBtYmVkdGxzX21kNV9yZXQoIHNyY19zdHIsIHN0cmxlbiggKGNoYXIgKikgc3JjX3N0ciApLCBvdXRwdXQgKTsKICAgICBURVNUX0FTU0VSVCggcmV0ID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9oYXNoX3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9oYXNoX3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhhc2gtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAgb3V0cHV0LCBoYXNoLT5sZW4gKSA9PSAwICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19SSVBFTUQxNjBfQyAqLwotdm9pZCByaXBlbWQxNjBfdGV4dCggY2hhciAqIHRleHRfc3JjX3N0cmluZywgZGF0YV90ICogaGV4X2hhc2hfc3RyaW5nICkKK3ZvaWQgcmlwZW1kMTYwX3RleHQoIGNoYXIgKiB0ZXh0X3NyY19zdHJpbmcsIGRhdGFfdCAqIGhhc2ggKQogewogICAgIGludCByZXQ7CiAgICAgdW5zaWduZWQgY2hhciBzcmNfc3RyWzEwMF07CkBAIC04Myw5ICs4MCw4IEBACiAgICAgcmV0ID0gbWJlZHRsc19yaXBlbWQxNjBfcmV0KCBzcmNfc3RyLCBzdHJsZW4oIChjaGFyICopIHNyY19zdHIgKSwgb3V0cHV0ICk7CiAgICAgVEVTVF9BU1NFUlQoIHJldCA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfaGFzaF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9oYXNoX3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhhc2gtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiBvdXRwdXQsIGhhc2gtPmxlbiApID09IDAgKTsKIH0KIC8qIEVORF9DQVNFICovCiAKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21waS5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX21waS5mdW5jdGlvbgppbmRleCBlNTRhYWZmLi4yYjJkYWY2IDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9tcGkuZnVuY3Rpb24KKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfbXBpLmZ1bmN0aW9uCkBAIC01OTYsNyArNTk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZV9ZLCBjaGFyICogaW5wdXRfWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRfcmV0LCBpbnQgaW5wdXRfZXJyICkKIHsKLSAgICB1bnNpZ25lZCByZXQ7CisgICAgdW5zaWduZWQgcmV0ID0gLTE7CiAgICAgdW5zaWduZWQgaW5wdXRfdXJldCA9IGlucHV0X3JldDsKICAgICBtYmVkdGxzX21waSBYLCBZOwogICAgIG1iZWR0bHNfbXBpX2luaXQoICZYICk7IG1iZWR0bHNfbXBpX2luaXQoICZZICk7CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9way5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrLmZ1bmN0aW9uCmluZGV4IDQzYjQ5MTQuLmM2MDQxYjIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrLmZ1bmN0aW9uCkBAIC03NzUsOCArNzc1LDggQEAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19lY3BfcG9pbnRfcmVhZF9iaW5hcnkoICZlY2tleS0+Z3JwLCAmZWNrZXktPlEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LT54LCBrZXktPmxlbiApID09IDAgKTsKIAotICAgIC8vIE1CRURUTFNfTURfU0hBMSBpcyBhIGR1bW15IC0gaXQgaXMgaWdub3JlZCwgYnV0IGhhcyB0byBiZSBvdGhlciB0aGFuIE1CRURUTFNfTURfTk9ORS4KLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa192ZXJpZnkoICZwaywgTUJFRFRMU19NRF9TSEExLAorICAgIC8vIE1CRURUTFNfTURfTk9ORSBpcyB1c2VkIHNpbmNlIGl0IHdpbGwgYmUgaWdub3JlZC4KKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wa192ZXJpZnkoICZwaywgTUJFRFRMU19NRF9OT05FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gtPngsIGhhc2gtPmxlbiwgc2lnLT54LCBzaWctPmxlbiApID09IHJldCApOwogCiBleGl0OgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjE1LmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjE1LmZ1bmN0aW9uCmluZGV4IDhhNDIxODAuLjA2ODAyN2IgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3MxX3YxNS5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzMV92MTUuZnVuY3Rpb24KQEAgLTEyLDcgKzEyLDcgQEAKIHZvaWQgcGtjczFfcnNhZXNfdjE1X2VuY3J5cHQoIGludCBtb2QsIGludCByYWRpeF9OLCBjaGFyICogaW5wdXRfTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9FLCBjaGFyICogaW5wdXRfRSwgaW50IGhhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBtZXNzYWdlX3N0ciwgZGF0YV90ICogcm5kX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHJlc3VsdF9zdHIsIGludCByZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEyOF07CiAgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CkBAIC00Miw4ICs0Miw4IEBACiAKICAgICBpZiggcmVzdWx0ID09IDAgKQogICAgIHsKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X2hleF9zdHItPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLCByZXN1bHRfaGV4X3N0ci0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfc3RyLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwgcmVzdWx0X3N0ci0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTU2LDcgKzU2LDcgQEAKIHZvaWQgcGtjczFfcnNhZXNfdjE1X2RlY3J5cHQoIGludCBtb2QsIGludCByYWRpeF9QLCBjaGFyICogaW5wdXRfUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9RLCBjaGFyICogaW5wdXRfUSwgaW50IHJhZGl4X04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogaW5wdXRfTiwgaW50IHJhZGl4X0UsIGNoYXIgKiBpbnB1dF9FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhhc2gsIGRhdGFfdCAqIHJlc3VsdF9oZXhfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhhc2gsIGRhdGFfdCAqIHJlc3VsdF9zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogc2VlZCwgZGF0YV90ICogbWVzc2FnZV9zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ICkKIHsKQEAgLTg0LDcgKzg0LDcgQEAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY29tcGxldGUoICZjdHggKSA9PSAwICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX2NoZWNrX3ByaXZrZXkoICZjdHggKSA9PSAwICk7CiAKLSAgICBpZiggcmVzdWx0X2hleF9zdHItPmxlbiA9PSAwICkKKyAgICBpZiggcmVzdWx0X3N0ci0+bGVuID09IDAgKQogICAgIHsKICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcnNhX3BrY3MxX2RlY3J5cHQoICZjdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWJlZHRsc190ZXN0X3JuZF9wc2V1ZG9fcmFuZCwKQEAgLTEwMiw5ICsxMDIsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAxMDAwICkgPT0gcmVzdWx0ICk7CiAgICAgICAgIGlmKCByZXN1bHQgPT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9oZXhfc3RyLT54LAorICAgICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9oZXhfc3RyLT5sZW4pID09IDAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3RyLT5sZW4pID09IDAgKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjY3LDcgKzI2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGlucHV0X1EsIGludCByYWRpeF9OLCBjaGFyICogaW5wdXRfTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRSwgY2hhciAqIGlucHV0X0UsIGludCBkaWdlc3QsIGludCBoYXNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIG1lc3NhZ2Vfc3RyLCBkYXRhX3QgKiBybmRfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiByZXN1bHRfc3RyLCBpbnQgcmVzdWx0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIGhhc2hfcmVzdWx0W01CRURUTFNfTURfTUFYX1NJWkVdOwogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEyOF07CkBAIC0zMDUsOCArMzA1LDggQEAKICAgICBpZiggcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfaGV4X3N0ci0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9oZXhfc3RyLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9zdHItPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLCByZXN1bHRfc3RyLT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjIxLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcGtjczFfdjIxLmZ1bmN0aW9uCmluZGV4IGM5ZTkxYzguLmMyOGNmMDggMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BrY3MxX3YyMS5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wa2NzMV92MjEuZnVuY3Rpb24KQEAgLTEyLDcgKzEyLDcgQEAKIHZvaWQgcGtjczFfcnNhZXNfb2FlcF9lbmNyeXB0KCBpbnQgbW9kLCBpbnQgcmFkaXhfTiwgY2hhciAqIGlucHV0X04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0UsIGNoYXIgKiBpbnB1dF9FLCBpbnQgaGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBtZXNzYWdlX3N0ciwgZGF0YV90ICogcm5kX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiByZXN1bHRfaGV4X3N0ciwgaW50IHJlc3VsdCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogcmVzdWx0X3N0ciwgaW50IHJlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjU2XTsKICAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKQEAgLTQxLDggKzQxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICkgPT0gcmVzdWx0ICk7CiAgICAgaWYoIHJlc3VsdCA9PSAwICkKICAgICB7Ci0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9oZXhfc3RyLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwgcmVzdWx0X2hleF9zdHItPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9zdHItPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC01NSw3ICs1NSw3IEBACiB2b2lkIHBrY3MxX3JzYWVzX29hZXBfZGVjcnlwdCggaW50IG1vZCwgaW50IHJhZGl4X1AsIGNoYXIgKiBpbnB1dF9QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9RLCBjaGFyICogaW5wdXRfUSwgaW50IHJhZGl4X04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGlucHV0X04sIGludCByYWRpeF9FLCBjaGFyICogaW5wdXRfRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGFzaCwgZGF0YV90ICogcmVzdWx0X2hleF9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhhc2gsIGRhdGFfdCAqIHJlc3VsdF9zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHNlZWQsIGRhdGFfdCAqIG1lc3NhZ2Vfc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgKQogewpAQCAtODQsNyArODQsNyBAQAogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3JzYV9jb21wbGV0ZSggJmN0eCApID09IDAgKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfY2hlY2tfcHJpdmtleSggJmN0eCApID09IDAgKTsKIAotICAgIGlmKCByZXN1bHRfaGV4X3N0ci0+bGVuID09IDAgKQorICAgIGlmKCByZXN1bHRfc3RyLT5sZW4gPT0gMCApCiAgICAgewogICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19yc2FfcGtjczFfZGVjcnlwdCggJmN0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYmVkdGxzX3Rlc3Rfcm5kX3BzZXVkb19yYW5kLApAQCAtMTA0LDkgKzEwNCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIG91dHB1dCApICkgPT0gcmVzdWx0ICk7CiAgICAgICAgIGlmKCByZXN1bHQgPT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9oZXhfc3RyLT54LAorICAgICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9oZXhfc3RyLT5sZW4gKSA9PSAwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N0ci0+bGVuICkgPT0gMCApOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogaW5wdXRfUSwgaW50IHJhZGl4X04sIGNoYXIgKiBpbnB1dF9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9FLCBjaGFyICogaW5wdXRfRSwgaW50IGRpZ2VzdCwgaW50IGhhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogbWVzc2FnZV9zdHIsIGRhdGFfdCAqIHJuZF9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogcmVzdWx0X2hleF9zdHIsIGludCByZXN1bHQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHJlc3VsdF9zdHIsIGludCByZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgaGFzaF9yZXN1bHRbTUJFRFRMU19NRF9NQVhfU0laRV07CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjU2XTsKQEAgLTE2MCw4ICsxNjAsOCBAQAogICAgIGlmKCByZXN1bHQgPT0gMCApCiAgICAgewogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9oZXhfc3RyLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwgcmVzdWx0X2hleF9zdHItPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9zdHItPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wb2x5MTMwNS5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BvbHkxMzA1LmZ1bmN0aW9uCmluZGV4IDQ0NjE3ZDkuLjRiODk5NWIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BvbHkxMzA1LmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BvbHkxMzA1LmZ1bmN0aW9uCkBAIC05LDE0ICs5LDEyIEBACiAgKi8KIAogLyogQkVHSU5fQ0FTRSAqLwotdm9pZCBtYmVkdGxzX3BvbHkxMzA1KCBkYXRhX3QgKmtleSwgY2hhciAqaGV4X21hY19zdHJpbmcsIGRhdGFfdCAqc3JjX3N0ciApCit2b2lkIG1iZWR0bHNfcG9seTEzMDUoIGRhdGFfdCAqa2V5LCBkYXRhX3QgKmV4cGVjdGVkX21hYywgZGF0YV90ICpzcmNfc3RyICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG1hY1sxNl07IC8qIHNpemUgc2V0IGJ5IHRoZSBzdGFuZGFyZCAqLwotICAgIHVuc2lnbmVkIGNoYXIgbWFjX3N0clszM107IC8qIGhleCBleHBhbnNpb24gb2YgdGhlIGFib3ZlICovCiAgICAgbWJlZHRsc19wb2x5MTMwNV9jb250ZXh0IGN0eDsKIAotICAgIG1lbXNldCggbWFjX3N0ciwgMHgwMCwgc2l6ZW9mKCBtYWNfc3RyICkgKTsKLSAgICBtZW1zZXQoIG1hYywgICAgIDB4MDAsIHNpemVvZiggbWFjICkgKTsKKyAgICBtZW1zZXQoIG1hYywgMHgwMCwgc2l6ZW9mKCBtYWMgKSApOwogCiAgICAgLyoKICAgICAgKiBUZXN0IHRoZSBpbnRlZ3JhdGVkIEFQSQpAQCAtMjQsOCArMjIsOCBAQAogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3BvbHkxMzA1X21hYygga2V5LT54LCBzcmNfc3RyLT54LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+bGVuLCBtYWMgKSA9PSAwICk7CiAKLSAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBtYWNfc3RyLCBtYWMsIDE2ICk7Ci0gICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgbWFjX3N0ciwgaGV4X21hY19zdHJpbmcgKSA9PSAwICk7CisgICAgQVNTRVJUX0NPTVBBUkUoIG1hYywgZXhwZWN0ZWRfbWFjLT5sZW4sCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX21hYy0+eCwgZXhwZWN0ZWRfbWFjLT5sZW4gKTsKIAogICAgIC8qCiAgICAgICogVGVzdCB0aGUgc3RyZWFtaW5nIEFQSQpAQCAtMzgsOCArMzYsOCBAQAogCiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcG9seTEzMDVfZmluaXNoKCAmY3R4LCBtYWMgKSA9PSAwICk7CiAKLSAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBtYWNfc3RyLCBtYWMsIDE2ICk7Ci0gICAgVEVTVF9BU1NFUlQoIHN0cmNtcCggKGNoYXIgKikgbWFjX3N0ciwgaGV4X21hY19zdHJpbmcgKSA9PSAwICk7CisgICAgQVNTRVJUX0NPTVBBUkUoIG1hYywgZXhwZWN0ZWRfbWFjLT5sZW4sCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX21hYy0+eCwgZXhwZWN0ZWRfbWFjLT5sZW4gKTsKIAogICAgIC8qCiAgICAgICogVGVzdCB0aGUgc3RyZWFtaW5nIEFQSSBhZ2FpbiwgcGllY2V3aXNlCkBAIC01Niw4ICs1NCw4IEBACiAKICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfcG9seTEzMDVfZmluaXNoKCAmY3R4LCBtYWMgKSA9PSAwICk7CiAKLSAgICAgICAgbWJlZHRsc190ZXN0X2hleGlmeSggbWFjX3N0ciwgbWFjLCAxNiApOwotICAgICAgICBURVNUX0FTU0VSVCggc3RyY21wKCAoY2hhciAqKSBtYWNfc3RyLCBoZXhfbWFjX3N0cmluZyApID09IDAgKTsKKyAgICAgICAgQVNTRVJUX0NPTVBBUkUoIG1hYywgZXhwZWN0ZWRfbWFjLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9tYWMtPngsIGV4cGVjdGVkX21hYy0+bGVuICk7CiAgICAgfQogCiAgICAgLyoKQEAgLTczLDggKzcxLDggQEAKIAogICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19wb2x5MTMwNV9maW5pc2goICZjdHgsIG1hYyApID09IDAgKTsKIAotICAgICAgICBtYmVkdGxzX3Rlc3RfaGV4aWZ5KCBtYWNfc3RyLCBtYWMsIDE2ICk7Ci0gICAgICAgIFRFU1RfQVNTRVJUKCBzdHJjbXAoIChjaGFyICopIG1hY19zdHIsIGhleF9tYWNfc3RyaW5nICkgPT0gMCApOworICAgICAgICBBU1NFUlRfQ09NUEFSRSggbWFjLCBleHBlY3RlZF9tYWMtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX21hYy0+eCwgZXhwZWN0ZWRfbWFjLT5sZW4gKTsKICAgICB9CiAKICAgICBtYmVkdGxzX3BvbHkxMzA1X2ZyZWUoICZjdHggKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG8uZGF0YSBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG8uZGF0YQppbmRleCBjZDI2MDE3Li43NzQwNTBkIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvLmRhdGEKKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0by5kYXRhCkBAIC0yLDIyICsyLDIyIEBACiBzdGF0aWNfY2hlY2tzOgogCiBQU0Ega2V5IGF0dHJpYnV0ZXMgc3RydWN0dXJlCi1hdHRyaWJ1dGVzX3NldF9nZXQ6MHg2OTYzOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX1VTQUdFX0VOQ1JZUFQgfCBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQ6UFNBX0FMR19DQ006UFNBX0tFWV9UWVBFX0FFUzoxMjgKK2F0dHJpYnV0ZXNfc2V0X2dldDoweGZmZmYxMjM0OjB4Njk2MzpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9VU0FHRV9FTkNSWVBUIHwgUFNBX0tFWV9VU0FHRV9ERUNSWVBUOlBTQV9BTEdfQ0NNOlBTQV9LRVlfVFlQRV9BRVM6MTI4CiAKIFBTQSBrZXkgYXR0cmlidXRlczogaWQgb25seQotcGVyc2lzdGVuY2VfYXR0cmlidXRlczoweDEyMzQ6LTE6LTE6MHgxMjM0OlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVAorcGVyc2lzdGVuY2VfYXR0cmlidXRlczoweDEyMzQ6MHg1Njc4Oi0xOi0xOjA6MHgxMjM0OjB4NTY3ODpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQKIAogUFNBIGtleSBhdHRyaWJ1dGVzOiBsaWZldGltZT0zIG9ubHkKLXBlcnNpc3RlbmNlX2F0dHJpYnV0ZXM6LTE6MzotMTowOjMKK3BlcnNpc3RlbmNlX2F0dHJpYnV0ZXM6LTE6MDozOi0xOjA6MDowOjMKIAogUFNBIGtleSBhdHRyaWJ1dGVzOiBpZCB0aGVuIGJhY2sgdG8gdm9sYXRpbGUKLXBlcnNpc3RlbmNlX2F0dHJpYnV0ZXM6MHgxMjM0OlBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEU6LTE6MDpQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFCitwZXJzaXN0ZW5jZV9hdHRyaWJ1dGVzOjB4MTIzNDoweDU2Nzg6UFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRTotMTowOjA6MHg1Njc4OlBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUKIAogUFNBIGtleSBhdHRyaWJ1dGVzOiBpZCB0aGVuIGxpZmV0aW1lCi1wZXJzaXN0ZW5jZV9hdHRyaWJ1dGVzOjB4MTIzNDozOi0xOjB4MTIzNDozCitwZXJzaXN0ZW5jZV9hdHRyaWJ1dGVzOjB4MTIzNDoweDU2Nzg6MzotMTowOjB4MTIzNDoweDU2Nzg6MwogCiBQU0Ega2V5IGF0dHJpYnV0ZXM6IGxpZmV0aW1lIHRoZW4gaWQKLXBlcnNpc3RlbmNlX2F0dHJpYnV0ZXM6MHgxMjM0OjM6MHgxMjM1OjB4MTIzNTozCitwZXJzaXN0ZW5jZV9hdHRyaWJ1dGVzOjB4MTIzNDoweDU2Nzg6MzoweDEyMzU6MHg1Njc5OjB4MTIzNToweDU2Nzk6MwogCiBQU0Ega2V5IGF0dHJpYnV0ZXM6IHNsb3QgbnVtYmVyCiBzbG90X251bWJlcl9hdHRyaWJ1dGU6CkBAIC0zNjYsNyArMzY2LDExIEBACiBkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX1JTQV9DCiBpbXBvcnRfcnNhX21hZGVfdXA6UFNBX1ZFTkRPUl9SU0FfTUFYX0tFWV9CSVRTKzg6MDpQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAogCi1QU0Ega2V5IHBvbGljeTogQUVTCitQU0Ega2V5IHBvbGljeTogQUVTIEVDQgorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitjaGVja19rZXlfcG9saWN5OlBTQV9LRVlfVFlQRV9BRVM6MTI4OlBTQV9LRVlfVVNBR0VfRU5DUllQVDpQU0FfQUxHX0VDQl9OT19QQURESU5HCisKK1BTQSBrZXkgcG9saWN5OiBBRVMgQ0JDCiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKIGNoZWNrX2tleV9wb2xpY3k6UFNBX0tFWV9UWVBFX0FFUzoxMjg6UFNBX0tFWV9VU0FHRV9FTkNSWVBUOlBTQV9BTEdfQ0JDX05PX1BBRERJTkcKIApAQCAtNTU5LDM5ICs1NjMsNDMgQEAKIAogUFNBIGtleSBwb2xpY3k6IGFncmVlbWVudCArIEtERiwgcGVybWl0dGVkCiBkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0MKLWFncmVlbWVudF9rZXlfcG9saWN5OlBTQV9LRVlfVVNBR0VfREVSSVZFOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSkKK2FncmVlbWVudF9rZXlfcG9saWN5OlBTQV9LRVlfVVNBR0VfREVSSVZFOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX1NVQ0NFU1MKIAogUFNBIGtleSBwb2xpY3k6IGFncmVlbWVudCArIEtERiwgbm90IHBlcm1pdHRlZAogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQzpNQkVEVExTX1NIQTI1Nl9DCi1hZ3JlZW1lbnRfa2V5X3BvbGljeTowOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSkKK2FncmVlbWVudF9rZXlfcG9saWN5OjA6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAogCiBQU0Ega2V5IHBvbGljeTogYWdyZWVtZW50ICsgS0RGLCB3cm9uZyBhZ3JlZW1lbnQgYWxnb3JpdGhtCiBkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0MKLWFncmVlbWVudF9rZXlfcG9saWN5OlBTQV9LRVlfVVNBR0VfREVSSVZFOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19GRkRILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSkKK2FncmVlbWVudF9rZXlfcG9saWN5OlBTQV9LRVlfVVNBR0VfREVSSVZFOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19GRkRILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0VSUk9SX05PVF9QRVJNSVRURUQKIAogUFNBIGtleSBwb2xpY3k6IGFncmVlbWVudCArIEtERiwgd3JvbmcgS0RGIGFsZ29yaXRobQogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQzpNQkVEVExTX1NIQTI1Nl9DCi1hZ3JlZW1lbnRfa2V5X3BvbGljeTpQU0FfS0VZX1VTQUdFX0RFUklWRTpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzIyNCkpCithZ3JlZW1lbnRfa2V5X3BvbGljeTpQU0FfS0VZX1VTQUdFX0RFUklWRTpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzIyNCkpOlBTQV9FUlJPUl9OT1RfUEVSTUlUVEVECiAKLVBTQSBrZXkgcG9saWN5OiBhZ3JlZW1lbnQgKyBLREYsIGtleSBvbmx5IHBlcm1pdHMgcmF3IGFncmVlbWVudAorUFNBIGtleSBwb2xpY3k6IGFncmVlbWVudCArIEtERiwga2V5IHBlcm1pdHMgcmF3IGFncmVlbWVudAogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQzpNQkVEVExTX1NIQTI1Nl9DCi1hZ3JlZW1lbnRfa2V5X3BvbGljeTpQU0FfS0VZX1VTQUdFX0RFUklWRTpQU0FfQUxHX0VDREg6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpCithZ3JlZW1lbnRfa2V5X3BvbGljeTpQU0FfS0VZX1VTQUdFX0RFUklWRTpQU0FfQUxHX0VDREg6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9TVUNDRVNTCiAKIFBTQSBrZXkgcG9saWN5OiByYXcgYWdyZWVtZW50LCBwZXJtaXR0ZWQKIGRlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ0RIX0MKLXJhd19hZ3JlZW1lbnRfa2V5X3BvbGljeTpQU0FfS0VZX1VTQUdFX0RFUklWRTpQU0FfQUxHX0VDREg6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0FMR19FQ0RICityYXdfYWdyZWVtZW50X2tleV9wb2xpY3k6UFNBX0tFWV9VU0FHRV9ERVJJVkU6UFNBX0FMR19FQ0RIOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9BTEdfRUNESDpQU0FfU1VDQ0VTUwogCiBQU0Ega2V5IHBvbGljeTogcmF3IGFncmVlbWVudCwgbm90IHBlcm1pdHRlZAogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQwotcmF3X2FncmVlbWVudF9rZXlfcG9saWN5OjA6UFNBX0FMR19FQ0RIOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9BTEdfRUNESAorcmF3X2FncmVlbWVudF9rZXlfcG9saWN5OjA6UFNBX0FMR19FQ0RIOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9BTEdfRUNESDpQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAogCiBQU0Ega2V5IHBvbGljeTogcmF3IGFncmVlbWVudCwgd3JvbmcgYWxnb3JpdGhtCiBkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DCi1yYXdfYWdyZWVtZW50X2tleV9wb2xpY3k6UFNBX0tFWV9VU0FHRV9ERVJJVkU6UFNBX0FMR19FQ0RIOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9BTEdfRkZESAorcmF3X2FncmVlbWVudF9rZXlfcG9saWN5OlBTQV9LRVlfVVNBR0VfREVSSVZFOlBTQV9BTEdfRUNESDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfQUxHX0ZGREg6UFNBX0VSUk9SX05PVF9QRVJNSVRURUQKIAotUFNBIGtleSBwb2xpY3k6IHJhdyBhZ3JlZW1lbnQsIGtleSBvbmx5IHBlcm1pdHMgYSBLREYKK1BTQSBrZXkgcG9saWN5OiByYXcgYWdyZWVtZW50LCBrZXkgcGVybWl0cyByYXcgYWdyZWVtZW50LCBidXQgYWxnb3JpdGhtIGlzIG5vdCByYXcKIGRlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ0RIX0MKLXJhd19hZ3JlZW1lbnRfa2V5X3BvbGljeTpQU0FfS0VZX1VTQUdFX0RFUklWRTpQU0FfQUxHX0VDREg6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpCityYXdfYWdyZWVtZW50X2tleV9wb2xpY3k6UFNBX0tFWV9VU0FHRV9ERVJJVkU6UFNBX0FMR19FQ0RIOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAorCitQU0Ega2V5IHBvbGljeTogcmF3IGFncmVlbWVudCwga2V5IHNwZWNpZmllcyBLREYKK2RlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ0RIX0MKK3Jhd19hZ3JlZW1lbnRfa2V5X3BvbGljeTpQU0FfS0VZX1VTQUdFX0RFUklWRTpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0FMR19FQ0RIOlBTQV9FUlJPUl9OT1RfUEVSTUlUVEVECiAKIFBTQSBrZXkgcG9saWN5IGFsZ29yaXRobTI6IENUUiwgQ0JDCiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFI6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKQEAgLTExNTAsNiArMTE1OCwxOCBAQAogZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCiBjaXBoZXJfYmFkX29yZGVyOgogCitQU0Egc3ltbWV0cmljIGVuY3J5cHQ6IEFFUy1FQ0IsIDAgYnl0ZXMsIGdvb2QKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworY2lwaGVyX2VuY3J5cHQ6UFNBX0FMR19FQ0JfTk9fUEFERElORzpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IiI6IiI6IiI6UFNBX1NVQ0NFU1MKKworUFNBIHN5bW1ldHJpYyBlbmNyeXB0OiBBRVMtRUNCLCAxNiBieXRlcywgZ29vZAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitjaXBoZXJfZW5jcnlwdDpQU0FfQUxHX0VDQl9OT19QQURESU5HOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmEiOiIzYWQ3N2JiNDBkN2EzNjYwYTg5ZWNhZjMyNDY2ZWY5NyI6UFNBX1NVQ0NFU1MKKworUFNBIHN5bW1ldHJpYyBlbmNyeXB0OiBBRVMtRUNCLCAzMiBieXRlcywgZ29vZAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitjaXBoZXJfZW5jcnlwdDpQU0FfQUxHX0VDQl9OT19QQURESU5HOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmEzYWQ3N2JiNDBkN2EzNjYwYTg5ZWNhZjMyNDY2ZWY5NyI6IjNhZDc3YmI0MGQ3YTM2NjBhODllY2FmMzI0NjZlZjk3MjI0OWEyNjM4YzZmMWM3NTVhODRmOTY4MWE5ZjA4YzEiOlBTQV9TVUNDRVNTCisKIFBTQSBzeW1tZXRyaWMgZW5jcnlwdDogQUVTLUNCQy1ub3BhZCwgMTYgYnl0ZXMsIGdvb2QKIGRlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQwogY2lwaGVyX2VuY3J5cHQ6UFNBX0FMR19DQkNfTk9fUEFERElORzpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmEiOiJhMDc2ZWM5ZGZiZTQ3ZDUyYWZjMzU3MzM2ZjIwNzQzYiI6UFNBX1NVQ0NFU1MKQEAgLTExNjIsNiArMTE4MiwxMCBAQAogZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCiBjaXBoZXJfZW5jcnlwdDpQU0FfQUxHX0NCQ19QS0NTNzpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3IjoiNjI3OWI0OWQ3ZjdhOGRkODdiNjg1MTc1ZDQyNzZlMjQiOlBTQV9TVUNDRVNTCiAKK1BTQSBzeW1tZXRyaWMgZW5jcnlwdDogQUVTLUVDQiwgaW5wdXQgdG9vIHNob3J0ICgxNSBieXRlcykKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworY2lwaGVyX2VuY3J5cHQ6UFNBX0FMR19FQ0JfTk9fUEFERElORzpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IiI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNyI6IiI6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKKwogUFNBIHN5bW1ldHJpYyBlbmNyeXB0OiBBRVMtQ0JDLW5vcGFkLCBpbnB1dCB0b28gc2hvcnQKIGRlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQwogY2lwaGVyX2VuY3J5cHQ6UFNBX0FMR19DQkNfTk9fUEFERElORzpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyMyI6IjZiYzFiZWUyMjMiOlBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCkBAIC0xMTg2LDYgKzEyMTAsMjYgQEAKIGRlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQwogY2lwaGVyX2VuY3J5cHQ6UFNBX0FMR19DQkNfTk9fUEFERElORzpQU0FfS0VZX1RZUEVfREVTOiIwMTAyMDQwNzA4MGIwZDBlYzFjMmM0YzdjOGNiY2RjZTMxMzIzNDM3MzgzYjNkM2UiOiIyYTJhMmEyYTJhMmEyYTJhIjoiZWRhNDAxMTIzOWJjM2FjOSI6IjgxN2NhN2Q2OWI4MGQ4NmEiOlBTQV9TVUNDRVNTCiAKK1BTQSBzeW1tZXRyaWMgZW5jcnlwdDogMi1rZXkgM0RFUy1FQ0IsIDggYnl0ZXMsIGdvb2QKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQworY2lwaGVyX2VuY3J5cHQ6UFNBX0FMR19FQ0JfTk9fUEFERElORzpQU0FfS0VZX1RZUEVfREVTOiIwMTAyMDQwNzA4MGIwZDBlYzFjMmM0YzdjOGNiY2RjZSI6IiI6ImM3OGUyYjM4MTM5NjEwZTMiOiI1ZDA2NTI0MjljNWIwYWM3IjpQU0FfU1VDQ0VTUworCitQU0Egc3ltbWV0cmljIGVuY3J5cHQ6IDMta2V5IDNERVMtRUNCLCA4IGJ5dGVzLCBnb29kCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK2NpcGhlcl9lbmNyeXB0OlBTQV9BTEdfRUNCX05PX1BBRERJTkc6UFNBX0tFWV9UWVBFX0RFUzoiMDEwMjA0MDcwODBiMGQwZWMxYzJjNGM3YzhjYmNkY2UzMTMyMzQzNzM4M2IzZDNlIjoiIjoiYzc4ZTJiMzgxMzk2MTBlMyI6IjgxN2NhN2Q2OWI4MGQ4NmEiOlBTQV9TVUNDRVNTCisKK1BTQSBzeW1tZXRyaWMgZGVjcnlwdDogQUVTLUVDQiwgMCBieXRlcywgZ29vZAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitjaXBoZXJfZGVjcnlwdDpQU0FfQUxHX0VDQl9OT19QQURESU5HOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiIjoiIjoiIjpQU0FfU1VDQ0VTUworCitQU0Egc3ltbWV0cmljIGRlY3J5cHQ6IEFFUy1FQ0IsIDE2IGJ5dGVzLCBnb29kCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2NpcGhlcl9kZWNyeXB0OlBTQV9BTEdfRUNCX05PX1BBRERJTkc6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIiOiIzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYSI6IjYzY2VjYzQ2YTM4MjQxNGQ1ZmE3ZDJiNzkzODc0MzdmIjpQU0FfU1VDQ0VTUworCitQU0Egc3ltbWV0cmljIGRlY3J5cHQ6IEFFUy1FQ0IsIDMyIGJ5dGVzLCBnb29kCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2NpcGhlcl9kZWNyeXB0OlBTQV9BTEdfRUNCX05PX1BBRERJTkc6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIiOiIzYWQ3N2JiNDBkN2EzNjYwYTg5ZWNhZjMyNDY2ZWY5NzIyNDlhMjYzOGM2ZjFjNzU1YTg0Zjk2ODFhOWYwOGMxIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmEzYWQ3N2JiNDBkN2EzNjYwYTg5ZWNhZjMyNDY2ZWY5NyI6UFNBX1NVQ0NFU1MKKwogUFNBIHN5bW1ldHJpYyBkZWNyeXB0OiBBRVMtQ0JDLW5vcGFkLCAxNiBieXRlcywgZ29vZAogZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCiBjaXBoZXJfZGVjcnlwdDpQU0FfQUxHX0NCQ19OT19QQURESU5HOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiIzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYSI6IjQ5ZTRlNjZjODlhODZiNjc3NThkZjg5ZGI5YWQ2OTU1IjpQU0FfU1VDQ0VTUwpAQCAtMTIwMCwxNSArMTI0NCwxOSBAQAogCiBQU0Egc3ltbWV0cmljIGRlY3J5cHQ6IEFFUy1DQkMtUEtDUyM3LCBpbnB1dCB0b28gc2hvcnQgKDE1IGJ5dGVzKQogZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCi1jaXBoZXJfZGVjcnlwdDpQU0FfQUxHX0NCQ19QS0NTNzpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3IjoiNDllNGU2NmM4OWE4NmI2Nzc1OGRmODlkYjlhZDY5NTUiOlBTQV9FUlJPUl9CQURfU1RBVEUKK2NpcGhlcl9kZWNyeXB0OlBTQV9BTEdfQ0JDX1BLQ1M3OlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTciOiI0OWU0ZTY2Yzg5YTg2YjY3NzU4ZGY4OWRiOWFkNjk1NSI6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKIAogUFNBIHN5bW1ldHJpYyBkZWNyeXB0OiBBRVMtQ1RSLCAxNiBieXRlcywgZ29vZAogZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCiBjaXBoZXJfZGVjcnlwdDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWEiOiJkZDNiNWU1MzE5Yjc1OTFkYWFiMWUxYTkyNjg3ZmViMiI6UFNBX1NVQ0NFU1MKIAorUFNBIHN5bW1ldHJpYyBkZWNyeXB0OiBBRVMtRUNCLCBpbnB1dCB0b28gc2hvcnQgKDE1IGJ5dGVzKQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitjaXBoZXJfZGVjcnlwdDpQU0FfQUxHX0VDQl9OT19QQURESU5HOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiIjoiMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0IjoiNjNjZWNjNDZhMzgyNDE0ZDVmYTdkMmI3OTM4NzQzIjpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorCiBQU0Egc3ltbWV0cmljIGRlY3J5cHQ6IEFFUy1DQkMtbm9wYWQsIGlucHV0IHRvbyBzaG9ydCAoNSBieXRlcykKIGRlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQwotY2lwaGVyX2RlY3J5cHQ6UFNBX0FMR19DQkNfTk9fUEFERElORzpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyMyI6IjZiYzFiZWUyMjMiOlBTQV9FUlJPUl9CQURfU1RBVEUKK2NpcGhlcl9kZWNyeXB0OlBTQV9BTEdfQ0JDX05PX1BBRERJTkc6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6IjZiYzFiZWUyMjMiOiI2YmMxYmVlMjIzIjpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAogCiBQU0Egc3ltbWV0cmljIGRlY3J5cHQ6IERFUy1DQkMtbm9wYWQsIDggYnl0ZXMsIGdvb2QKIGRlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQwpAQCAtMTIyMiw2ICsxMjcwLDE4IEBACiBkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKIGNpcGhlcl9kZWNyeXB0OlBTQV9BTEdfQ0JDX05PX1BBRERJTkc6UFNBX0tFWV9UWVBFX0RFUzoiMDEwMjA0MDcwODBiMGQwZWMxYzJjNGM3YzhjYmNkY2UzMTMyMzQzNzM4M2IzZDNlIjoiMmEyYTJhMmEyYTJhMmEyYSI6IjgxN2NhN2Q2OWI4MGQ4NmEiOiJlZGE0MDExMjM5YmMzYWM5IjpQU0FfU1VDQ0VTUwogCitQU0Egc3ltbWV0cmljIGRlY3J5cHQ6IDIta2V5IDNERVMtRUNCLCA4IGJ5dGVzLCBnb29kCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKK2NpcGhlcl9kZWNyeXB0OlBTQV9BTEdfRUNCX05PX1BBRERJTkc6UFNBX0tFWV9UWVBFX0RFUzoiMDEwMjA0MDcwODBiMGQwZWMxYzJjNGM3YzhjYmNkY2UiOiIiOiI1ZDA2NTI0MjljNWIwYWM3IjoiYzc4ZTJiMzgxMzk2MTBlMyI6UFNBX1NVQ0NFU1MKKworUFNBIHN5bW1ldHJpYyBkZWNyeXB0OiAzLWtleSAzREVTLUVDQiwgOCBieXRlcywgZ29vZAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ0JDCitjaXBoZXJfZGVjcnlwdDpQU0FfQUxHX0VDQl9OT19QQURESU5HOlBTQV9LRVlfVFlQRV9ERVM6IjAxMDIwNDA3MDgwYjBkMGVjMWMyYzRjN2M4Y2JjZGNlMzEzMjM0MzczODNiM2QzZSI6IiI6IjgxN2NhN2Q2OWI4MGQ4NmEiOiJjNzhlMmIzODEzOTYxMGUzIjpQU0FfU1VDQ0VTUworCitQU0Egc3ltbWV0cmljIGVuY3J5cHQvZGVjcnlwdDogQUVTLUVDQiwgMTYgYnl0ZXMsIGdvb2QKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworY2lwaGVyX3ZlcmlmeV9vdXRwdXQ6UFNBX0FMR19FQ0JfTk9fUEFERElORzpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhIgorCiBQU0Egc3ltbWV0cmljIGVuY3J5cHQvZGVjcnlwdDogQUVTLUNCQy1ub3BhZCwgMTYgYnl0ZXMsIGdvb2QKIGRlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQwogY2lwaGVyX3ZlcmlmeV9vdXRwdXQ6UFNBX0FMR19DQkNfTk9fUEFERElORzpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhIgpAQCAtMTIzOCw2ICsxMjk4LDE4IEBACiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKIGNpcGhlcl92ZXJpZnlfb3V0cHV0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmEiCiAKK1BTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1FQ0IsIDE2KzE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2NpcGhlcl9lbmNyeXB0X211bHRpcGFydDpQU0FfQUxHX0VDQl9OT19QQURESU5HOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmE1NDM0ZjM3OGE1OTdiY2VmMTM4OTMxOGM3ZmM4NjVlZiI6MTY6MTY6MTY6IjNhZDc3YmI0MGQ3YTM2NjBhODllY2FmMzI0NjZlZjk3NTVlZDVlOWUwNjY4MjBmYTUyYzcyOTg4NmQxODg1NGMiCisKK1BTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1FQ0IsIDEzKzE5IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0MKK2NpcGhlcl9lbmNyeXB0X211bHRpcGFydDpQU0FfQUxHX0VDQl9OT19QQURESU5HOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmE1NDM0ZjM3OGE1OTdiY2VmMTM4OTMxOGM3ZmM4NjVlZiI6MTM6MDozMjoiM2FkNzdiYjQwZDdhMzY2MGE4OWVjYWYzMjQ2NmVmOTc1NWVkNWU5ZTA2NjgyMGZhNTJjNzI5ODg2ZDE4ODU0YyIKKworUFNBIHN5bW1ldHJpYyBlbmNyeXB0aW9uIG11bHRpcGFydDogQUVTLUVDQiwgMjQrMTIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworY2lwaGVyX2VuY3J5cHRfbXVsdGlwYXJ0OlBTQV9BTEdfRUNCX05PX1BBRERJTkc6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYTU0MzRmMzc4YTU5N2JjZWYxMzg5MzE4YzdmYzg2NWVmIjoyNDoxNjoxNjoiM2FkNzdiYjQwZDdhMzY2MGE4OWVjYWYzMjQ2NmVmOTc1NWVkNWU5ZTA2NjgyMGZhNTJjNzI5ODg2ZDE4ODU0YyIKKwogUFNBIHN5bW1ldHJpYyBlbmNyeXB0aW9uIG11bHRpcGFydDogQUVTLUNCQy1ub3BhZCwgNys5IGJ5dGVzCiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKIGNpcGhlcl9lbmNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NCQ19OT19QQURESU5HOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYSI6NzowOjE2OiJhMDc2ZWM5ZGZiZTQ3ZDUyYWZjMzU3MzM2ZjIwNzQzYiIKQEAgLTEyNjYsMjMgKzEzMzgsMjMgQEAKIGRlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQwogY2lwaGVyX2VuY3J5cHRfbXVsdGlwYXJ0OlBTQV9BTEdfQ0JDX05PX1BBRERJTkc6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhNTQzNGYzNzhhNTk3YmNlZjEzODkzMThjN2ZjODY1ZWYiOjIwOjE2OjE2OiJhMDc2ZWM5ZGZiZTQ3ZDUyYWZjMzU3MzM2ZjIwNzQzYjg5OTA2ZjJmOTIwN2FjMDJhYTY1OGNiNGVmMTljNjFmIgogCi1QU0Egc3ltbWV0cmljIGVuY3J5cHRpb24gbXVsdGlwYXJ0OiBBRVMtQ1RSLCAxMSs1IGJ5dGVzIFsjMV0KK1BTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDExKzUgYnl0ZXMKIGRlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgogY2lwaGVyX2VuY3J5cHRfbXVsdGlwYXJ0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYSI6MTE6MTE6NToiOGY5NDA4ZmU4MGE4MWQzZTgxM2RhM2M3YjBiMmJkMzIiCiAKLVBTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDE2KzE2IGJ5dGVzIFsjMV0KK1BTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDE2KzE2IGJ5dGVzCiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKIGNpcGhlcl9lbmNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmE1NDM0ZjM3OGE1OTdiY2VmMTM4OTMxOGM3ZmM4NjVlZiI6MTY6MTY6MTY6IjhmOTQwOGZlODBhODFkM2U4MTNkYTNjN2IwYjJiZDMyMWM5NjViYjFkZTdiYWY3MTAyNWY2ZWY2MzkzY2E1ODciCiAKLVBTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDEyKzIwIGJ5dGVzIFsjMV0KK1BTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDEyKzIwIGJ5dGVzCiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKIGNpcGhlcl9lbmNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmE1NDM0ZjM3OGE1OTdiY2VmMTM4OTMxOGM3ZmM4NjVlZiI6MTI6MTI6MjA6IjhmOTQwOGZlODBhODFkM2U4MTNkYTNjN2IwYjJiZDMyMWM5NjViYjFkZTdiYWY3MTAyNWY2ZWY2MzkzY2E1ODciCiAKLVBTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDIwKzEyIGJ5dGVzIFsjMV0KK1BTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDIwKzEyIGJ5dGVzCiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKIGNpcGhlcl9lbmNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmE1NDM0ZjM3OGE1OTdiY2VmMTM4OTMxOGM3ZmM4NjVlZiI6MjA6MjA6MTI6IjhmOTQwOGZlODBhODFkM2U4MTNkYTNjN2IwYjJiZDMyMWM5NjViYjFkZTdiYWY3MTAyNWY2ZWY2MzkzY2E1ODciCiAKLVBTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDEyKzEwIGJ5dGVzIFsjMV0KK1BTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDEyKzEwIGJ5dGVzCiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKIGNpcGhlcl9lbmNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmE1NDM0ZjM3OGE1OTciOjEyOjEyOjEwOiI4Zjk0MDhmZTgwYTgxZDNlODEzZGEzYzdiMGIyYmQzMjFjOTY1YmIxZGU3YiIKIApAQCAtMTMwMiw2ICsxMzc0LDE4IEBACiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKIGNpcGhlcl9lbmNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmEiOjE2OjE2OjA6IjhmOTQwOGZlODBhODFkM2U4MTNkYTNjN2IwYjJiZDMyIgogCitQU0Egc3ltbWV0cmljIGRlY3J5cHRpb24gbXVsdGlwYXJ0OiBBRVMtRUNCLCAxNisxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitjaXBoZXJfZGVjcnlwdF9tdWx0aXBhcnQ6UFNBX0FMR19FQ0JfTk9fUEFERElORzpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IiI6IjNhZDc3YmI0MGQ3YTM2NjBhODllY2FmMzI0NjZlZjk3NTVlZDVlOWUwNjY4MjBmYTUyYzcyOTg4NmQxODg1NGMiOjE2OjE2OjE2OiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYTU0MzRmMzc4YTU5N2JjZWYxMzg5MzE4YzdmYzg2NWVmIgorCitQU0Egc3ltbWV0cmljIGRlY3J5cHRpb24gbXVsdGlwYXJ0OiBBRVMtRUNCLCAxMSsyMSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DCitjaXBoZXJfZGVjcnlwdF9tdWx0aXBhcnQ6UFNBX0FMR19FQ0JfTk9fUEFERElORzpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IiI6IjNhZDc3YmI0MGQ3YTM2NjBhODllY2FmMzI0NjZlZjk3NTVlZDVlOWUwNjY4MjBmYTUyYzcyOTg4NmQxODg1NGMiOjExOjA6MzI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhNTQzNGYzNzhhNTk3YmNlZjEzODkzMThjN2ZjODY1ZWYiCisKK1BTQSBzeW1tZXRyaWMgZGVjcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1FQ0IsIDI4KzQgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQworY2lwaGVyX2RlY3J5cHRfbXVsdGlwYXJ0OlBTQV9BTEdfRUNCX05PX1BBRERJTkc6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIiOiIzYWQ3N2JiNDBkN2EzNjYwYTg5ZWNhZjMyNDY2ZWY5NzU1ZWQ1ZTllMDY2ODIwZmE1MmM3Mjk4ODZkMTg4NTRjIjoyODoxNjoxNjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmE1NDM0ZjM3OGE1OTdiY2VmMTM4OTMxOGM3ZmM4NjVlZiIKKwogUFNBIHN5bW1ldHJpYyBkZWNyeXB0aW9uIG11bHRpcGFydDogQUVTLUNCQy1ub3BhZCwgNys5IGJ5dGVzCiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKIGNpcGhlcl9kZWNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NCQ19OT19QQURESU5HOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiJhMDc2ZWM5ZGZiZTQ3ZDUyYWZjMzU3MzM2ZjIwNzQzYiI6NzowOjE2OiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYSIKQEAgLTEzMjYsMjMgKzE0MTAsMjMgQEAKIGRlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQwogY2lwaGVyX2RlY3J5cHRfbXVsdGlwYXJ0OlBTQV9BTEdfQ0JDX05PX1BBRERJTkc6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6ImEwNzZlYzlkZmJlNDdkNTJhZmMzNTczMzZmMjA3NDNiODk5MDZmMmY5MjA3YWMwMmFhNjU4Y2I0ZWYxOWM2MWYiOjIwOjE2OjE2OiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYTU0MzRmMzc4YTU5N2JjZWYxMzg5MzE4YzdmYzg2NWVmIgogCi1QU0Egc3ltbWV0cmljIGVuY3J5cHRpb24gbXVsdGlwYXJ0OiBBRVMtQ1RSLCAxMSs1IGJ5dGVzIFsjMl0KK1BTQSBzeW1tZXRyaWMgZGVjcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDExKzUgYnl0ZXMKIGRlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgogY2lwaGVyX2RlY3J5cHRfbXVsdGlwYXJ0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYSI6MTE6MTE6NToiOGY5NDA4ZmU4MGE4MWQzZTgxM2RhM2M3YjBiMmJkMzIiCiAKLVBTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDE2KzE2IGJ5dGVzIFsjMl0KK1BTQSBzeW1tZXRyaWMgZGVjcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDE2KzE2IGJ5dGVzCiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKIGNpcGhlcl9kZWNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmE1NDM0ZjM3OGE1OTdiY2VmMTM4OTMxOGM3ZmM4NjVlZiI6MTY6MTY6MTY6IjhmOTQwOGZlODBhODFkM2U4MTNkYTNjN2IwYjJiZDMyMWM5NjViYjFkZTdiYWY3MTAyNWY2ZWY2MzkzY2E1ODciCiAKLVBTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDEyKzIwIGJ5dGVzIFsjMl0KK1BTQSBzeW1tZXRyaWMgZGVjcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDEyKzIwIGJ5dGVzCiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKIGNpcGhlcl9kZWNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmE1NDM0ZjM3OGE1OTdiY2VmMTM4OTMxOGM3ZmM4NjVlZiI6MTI6MTI6MjA6IjhmOTQwOGZlODBhODFkM2U4MTNkYTNjN2IwYjJiZDMyMWM5NjViYjFkZTdiYWY3MTAyNWY2ZWY2MzkzY2E1ODciCiAKLVBTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDIwKzEyIGJ5dGVzIFsjMl0KK1BTQSBzeW1tZXRyaWMgZGVjcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDIwKzEyIGJ5dGVzCiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKIGNpcGhlcl9kZWNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmE1NDM0ZjM3OGE1OTdiY2VmMTM4OTMxOGM3ZmM4NjVlZiI6MjA6MjA6MTI6IjhmOTQwOGZlODBhODFkM2U4MTNkYTNjN2IwYjJiZDMyMWM5NjViYjFkZTdiYWY3MTAyNWY2ZWY2MzkzY2E1ODciCiAKLVBTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDEyKzEwIGJ5dGVzIFsjMl0KK1BTQSBzeW1tZXRyaWMgZGVjcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDEyKzEwIGJ5dGVzCiBkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKIGNpcGhlcl9kZWNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmE1NDM0ZjM3OGE1OTciOjEyOjEyOjEwOiI4Zjk0MDhmZTgwYTgxZDNlODEzZGEzYzdiMGIyYmQzMjFjOTY1YmIxZGU3YiIKIApAQCAtMTU3NCw2ICsxNjU4LDEwIEBACiBkZXBlbmRzX29uOk1CRURUTFNfQ0hBQ0hBUE9MWV9DCiBhZWFkX2VuY3J5cHQ6UFNBX0tFWV9UWVBFX0NIQUNIQTIwOiI4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmIjpQU0FfQUxHX0NIQUNIQTIwX1BPTFkxMzA1OiIwNzAwMDAwMDQwNDE0MjQzNDQ0NTQ2NDciOiI1MDUxNTI1M2MwYzFjMmMzYzRjNWM2YzciOiI0YzYxNjQ2OTY1NzMyMDYxNmU2NDIwNDc2NTZlNzQ2YzY1NmQ2NTZlMjA2ZjY2MjA3NDY4NjUyMDYzNmM2MTczNzMyMDZmNjYyMDI3MzkzOTNhMjA0OTY2MjA0OTIwNjM2Zjc1NmM2NDIwNmY2NjY2NjU3MjIwNzk2Zjc1MjA2ZjZlNmM3OTIwNmY2ZTY1MjA3NDY5NzAyMDY2NmY3MjIwNzQ2ODY1MjA2Njc1NzQ3NTcyNjUyYzIwNzM3NTZlNzM2MzcyNjU2NTZlMjA3NzZmNzU2YzY0MjA2MjY1MjA2OTc0MmUiOiJkMzFhOGQzNDY0OGU2MGRiN2I4NmFmYmM1M2VmN2VjMmE0YWRlZDUxMjk2ZTA4ZmVhOWUyYjVhNzM2ZWU2MmQ2M2RiZWE0NWU4Y2E5NjcxMjgyZmFmYjY5ZGE5MjcyOGIxYTcxZGUwYTllMDYwYjI5MDVkNmE1YjY3ZWNkM2IzNjkyZGRiZDdmMmQ3NzhiOGM5ODAzYWVlMzI4MDkxYjU4ZmFiMzI0ZTRmYWQ2NzU5NDU1ODU4MDhiNDgzMWQ3YmMzZmY0ZGVmMDhlNGI3YTlkZTU3NmQyNjU4NmNlYzY0YjYxMTYxYWUxMGI1OTRmMDllMjZhN2U5MDJlY2JkMDYwMDY5MSIKIAorUFNBIEFFQUQgZW5jcnlwdDogQ2hhQ2hhMjAtUG9seTEzMDUgKHplcm8tbGVuZ3RoIGlucHV0KQorZGVwZW5kc19vbjpNQkVEVExTX0NIQUNIQVBPTFlfQworYWVhZF9lbmNyeXB0OlBTQV9LRVlfVFlQRV9DSEFDSEEyMDoiODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZiI6UFNBX0FMR19DSEFDSEEyMF9QT0xZMTMwNToiMDcwMDAwMDA0MDQxNDI0MzQ0NDU0NjQ3IjoiIjoiIjoiYTA3ODRkN2E0NzE2ZjNmZWI0ZjY0ZTdmNGIzOWJmMDQiCisKIFBTQSBBRUFEIGRlY3J5cHQ6IENoYUNoYTIwLVBvbHkxMzA1IChSRkM3NTM5LCBnb29kIHRhZykKIGRlcGVuZHNfb246TUJFRFRMU19DSEFDSEFQT0xZX0MKIGFlYWRfZGVjcnlwdDpQU0FfS0VZX1RZUEVfQ0hBQ0hBMjA6IjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWYiOlBTQV9BTEdfQ0hBQ0hBMjBfUE9MWTEzMDU6IjA3MDAwMDAwNDA0MTQyNDM0NDQ1NDY0NyI6IjUwNTE1MjUzYzBjMWMyYzNjNGM1YzZjNyI6ImQzMWE4ZDM0NjQ4ZTYwZGI3Yjg2YWZiYzUzZWY3ZWMyYTRhZGVkNTEyOTZlMDhmZWE5ZTJiNWE3MzZlZTYyZDYzZGJlYTQ1ZThjYTk2NzEyODJmYWZiNjlkYTkyNzI4YjFhNzFkZTBhOWUwNjBiMjkwNWQ2YTViNjdlY2QzYjM2OTJkZGJkN2YyZDc3OGI4Yzk4MDNhZWUzMjgwOTFiNThmYWIzMjRlNGZhZDY3NTk0NTU4NTgwOGI0ODMxZDdiYzNmZjRkZWYwOGU0YjdhOWRlNTc2ZDI2NTg2Y2VjNjRiNjExNjFhZTEwYjU5NGYwOWUyNmE3ZTkwMmVjYmQwNjAwNjkxIjoiNGM2MTY0Njk2NTczMjA2MTZlNjQyMDQ3NjU2ZTc0NmM2NTZkNjU2ZTIwNmY2NjIwNzQ2ODY1MjA2MzZjNjE3MzczMjA2ZjY2MjAyNzM5MzkzYTIwNDk2NjIwNDkyMDYzNmY3NTZjNjQyMDZmNjY2NjY1NzIyMDc5NmY3NTIwNmY2ZTZjNzkyMDZmNmU2NTIwNzQ2OTcwMjA2NjZmNzIyMDc0Njg2NTIwNjY3NTc0NzU3MjY1MmMyMDczNzU2ZTczNjM3MjY1NjU2ZTIwNzc2Zjc1NmM2NDIwNjI2NTIwNjk3NDJlIjpQU0FfU1VDQ0VTUwpAQCAtMTU4Miw2ICsxNjcwLDEwIEBACiBkZXBlbmRzX29uOk1CRURUTFNfQ0hBQ0hBUE9MWV9DCiBhZWFkX2RlY3J5cHQ6UFNBX0tFWV9UWVBFX0NIQUNIQTIwOiI4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmIjpQU0FfQUxHX0NIQUNIQTIwX1BPTFkxMzA1OiIwNzAwMDAwMDQwNDE0MjQzNDQ0NTQ2NDciOiI1MDUxNTI1M2MwYzFjMmMzYzRjNWM2YzciOiJkMzFhOGQzNDY0OGU2MGRiN2I4NmFmYmM1M2VmN2VjMmE0YWRlZDUxMjk2ZTA4ZmVhOWUyYjVhNzM2ZWU2MmQ2M2RiZWE0NWU4Y2E5NjcxMjgyZmFmYjY5ZGE5MjcyOGIxYTcxZGUwYTllMDYwYjI5MDVkNmE1YjY3ZWNkM2IzNjkyZGRiZDdmMmQ3NzhiOGM5ODAzYWVlMzI4MDkxYjU4ZmFiMzI0ZTRmYWQ2NzU5NDU1ODU4MDhiNDgzMWQ3YmMzZmY0ZGVmMDhlNGI3YTlkZTU3NmQyNjU4NmNlYzY0YjYxMTYxYWUxMGI1OTRmMDllMjZhN2U5MDJlY2JkMDYwMDY5MCI6IjRjNjE2NDY5NjU3MzIwNjE2ZTY0MjA0NzY1NmU3NDZjNjU2ZDY1NmUyMDZmNjYyMDc0Njg2NTIwNjM2YzYxNzM3MzIwNmY2NjIwMjczOTM5M2EyMDQ5NjYyMDQ5MjA2MzZmNzU2YzY0MjA2ZjY2NjY2NTcyMjA3OTZmNzUyMDZmNmU2Yzc5MjA2ZjZlNjUyMDc0Njk3MDIwNjY2ZjcyMjA3NDY4NjUyMDY2NzU3NDc1NzI2NTJjMjA3Mzc1NmU3MzYzNzI2NTY1NmUyMDc3NmY3NTZjNjQyMDYyNjUyMDY5NzQyZSI6UFNBX0VSUk9SX0lOVkFMSURfU0lHTkFUVVJFCiAKK1BTQSBBRUFEIGRlY3J5cHQ6IENoYUNoYTIwLVBvbHkxMzA1IChnb29kIHRhZywgemVyby1sZW5ndGggaW5wdXQpCitkZXBlbmRzX29uOk1CRURUTFNfQ0hBQ0hBUE9MWV9DCithZWFkX2RlY3J5cHQ6UFNBX0tFWV9UWVBFX0NIQUNIQTIwOiI4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmIjpQU0FfQUxHX0NIQUNIQTIwX1BPTFkxMzA1OiIwNzAwMDAwMDQwNDE0MjQzNDQ0NTQ2NDciOiIiOiJhMDc4NGQ3YTQ3MTZmM2ZlYjRmNjRlN2Y0YjM5YmYwNCI6IiI6UFNBX1NVQ0NFU1MKKwogUFNBIEFFQUQgZW5jcnlwdC9kZWNyeXB0OiBpbnZhbGlkIGFsZ29yaXRobSAoQ1RSKQogZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfR0NNX0MKIGFlYWRfZW5jcnlwdF9kZWNyeXB0OlBTQV9LRVlfVFlQRV9BRVM6IkQ3ODI4RDEzQjJCMEJEQzMyNUE3NjIzNkRGOTNDQzZCIjpQU0FfQUxHX0NUUjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOiIiOiIiOlBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECkBAIC0yMTM3LDYgKzIyMjksMTQgQEAKIGRlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQwogZGVyaXZlX2lucHV0OlBTQV9BTEdfVExTMTJfUFNLX1RPX01TKFBTQV9BTEdfU0hBXzI1Nik6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NFRUQ6UFNBX0tFWV9UWVBFX05PTkU6IiI6UFNBX1NVQ0NFU1M6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NFQ1JFVDpQU0FfS0VZX1RZUEVfREVSSVZFOiIwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwODAxMDIwMzA0MDUwNjA3MDgwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwODAxMDIwMzA0MDUwNjA3MDgwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwODAxMDIwMzA0MDUwNjA3MDgwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwODAxMDIwMzA0MDUwNjA3MDgwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwODAxMDIwMzA0MDUwNjA3MDgwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwODAxMDIwMzA0MDUwNjA3MDgwMTAyMDMwNDA1MDYwNzA4MDEwMjAzMDQwNTA2MDcwOCI6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQ6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX0xBQkVMOlBTQV9LRVlfVFlQRV9OT05FOiIiOlBTQV9FUlJPUl9CQURfU1RBVEU6UFNBX0tFWV9UWVBFX05PTkU6UFNBX0VSUk9SX0JBRF9TVEFURQogCitQU0Ega2V5IGRlcml2YXRpb246IEVDREggb24gUDI1NiB3aXRoIEhLREYtU0hBMjU2LCByYXcgb3V0cHV0CitkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0MKK2Rlcml2ZV9pbnB1dDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NBTFQ6UFNBX0tFWV9UWVBFX05PTkU6IiI6UFNBX1NVQ0NFU1M6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NFQ1JFVDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjpQU0FfU1VDQ0VTUzpQU0FfS0VZX0RFUklWQVRJT05fSU5QVVRfSU5GTzpQU0FfS0VZX1RZUEVfTk9ORToiIjpQU0FfU1VDQ0VTUzpQU0FfS0VZX1RZUEVfTk9ORTpQU0FfU1VDQ0VTUworCitQU0Ega2V5IGRlcml2YXRpb246IEVDREggb24gUDI1NiB3aXRoIEhLREYtU0hBMjU2LCBrZXkgb3V0cHV0CitkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0MKK2Rlcml2ZV9pbnB1dDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NBTFQ6UFNBX0tFWV9UWVBFX05PTkU6IiI6UFNBX1NVQ0NFU1M6UFNBX0tFWV9ERVJJVkFUSU9OX0lOUFVUX1NFQ1JFVDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjpQU0FfU1VDQ0VTUzpQU0FfS0VZX0RFUklWQVRJT05fSU5QVVRfSU5GTzpQU0FfS0VZX1RZUEVfTk9ORToiIjpQU0FfU1VDQ0VTUzpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6UFNBX1NVQ0NFU1MKKwogUFNBIGtleSBkZXJpdmF0aW9uOiBIS0RGIGludmFsaWQgc3RhdGUgKGRvdWJsZSBnZW5lcmF0ZSArIHJlYWQgcGFzdCBjYXBhY2l0eSkKIGRlcGVuZHNfb246TUJFRFRMU19TSEEyNTZfQwogdGVzdF9kZXJpdmVfaW52YWxpZF9rZXlfZGVyaXZhdGlvbl9zdGF0ZTpQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KQpAQCAtMjQxOSwzMSArMjUxOSwzOSBAQAogCiBQU0Ega2V5IGFncmVlbWVudCBzZXR1cDogRUNESCArIEhLREYtU0hBLTI1NjogZ29vZAogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQzpNQkVEVExTX1NIQTI1Nl9DCi1rZXlfYWdyZWVtZW50X3NldHVwOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6UFNBX1NVQ0NFU1MKK2tleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6UFNBX1NVQ0NFU1MKKworUFNBIGtleSBhZ3JlZW1lbnQgc2V0dXA6IEVDREggKyBIS0RGLVNIQS0yNTY6IGdvb2QsIGtleSBhbGdvcml0aG0gYnJvYWRlciB0aGFuIHJlcXVpcmVkCitkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0MKK2tleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6UFNBX0FMR19FQ0RIOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6UFNBX1NVQ0NFU1MKKworUFNBIGtleSBhZ3JlZW1lbnQgc2V0dXA6IEVDREggKyBIS0RGLVNIQS0yNTY6IGtleSBhbGdvcml0aG0gS0RGIG1pc21hdGNoCitkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0MKK2tleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzUxMikpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6UFNBX0VSUk9SX05PVF9QRVJNSVRURUQKIAogUFNBIGtleSBhZ3JlZW1lbnQgc2V0dXA6IEVDREggKyBIS0RGLVNIQS0yNTY6IHB1YmxpYyBrZXkgbm90IG9uIGN1cnZlCiBkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0MKLWtleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6ImM4OGYwMWY1MTBkOWFjM2Y3MGEyOTJkYWEyMzE2ZGU1NDRlOWFhYjhhZmU4NDA0OWM2MmE5YzU3ODYyZDE0MzMiOiIwNGQxMmRmYjUyODljOGQ0ZjgxMjA4YjcwMjcwMzk4YzM0MjI5Njk3MGEwYmNjYjc0YzczNmZjNzU1NDQ5NGJmNjM1NmZiZjNjYTM2NmNjMjNlODE1Nzg1NGMxM2M1OGQ2YWFjMjNmMDQ2YWRhMzBmODM1M2U3NGYzMzAzOTg3MmZmIjpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAora2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKTpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6ImM4OGYwMWY1MTBkOWFjM2Y3MGEyOTJkYWEyMzE2ZGU1NDRlOWFhYjhhZmU4NDA0OWM2MmE5YzU3ODYyZDE0MzMiOiIwNGQxMmRmYjUyODljOGQ0ZjgxMjA4YjcwMjcwMzk4YzM0MjI5Njk3MGEwYmNjYjc0YzczNmZjNzU1NDQ5NGJmNjM1NmZiZjNjYTM2NmNjMjNlODE1Nzg1NGMxM2M1OGQ2YWFjMjNmMDQ2YWRhMzBmODM1M2U3NGYzMzAzOTg3MmZmIjpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAogCiBQU0Ega2V5IGFncmVlbWVudCBzZXR1cDogRUNESCArIEhLREYtU0hBLTI1NjogcHVibGljIGtleSBvbiBkaWZmZXJlbnQgY3VydmUKIGRlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ1BfRFBfU0VDUDM4NFIxX0VOQUJMRUQ6TUJFRFRMU19FQ0RIX0M6TUJFRFRMU19TSEEyNTZfQwota2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiYzg4ZjAxZjUxMGQ5YWMzZjcwYTI5MmRhYTIzMTZkZTU0NGU5YWFiOGFmZTg0MDQ5YzYyYTljNTc4NjJkMTQzMyI6IjA0ZTU1OGRiZWY1M2VlY2RlM2QzZmNjZmMxYWVhMDhhODlhOTg3NDc1ZDEyZmQ5NTBkODNjZmE0MTczMmJjNTA5ZDBkMWFjNDNhMDMzNmRlZjk2ZmRhNDFkMDc3NGEzNTcxZGNmYmVjN2FhY2YzMTk2NDcyMTY5ZTgzODQzMDM2N2Y2NmVlYmUzYzZlNzBjNDE2ZGQ1ZjBjNjg3NTlkZDFmZmY4M2ZhNDAxNDIyMDlkZmY1ZWFhZDk2ZGI5ZTYzODZjIjpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAora2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKTpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6ImM4OGYwMWY1MTBkOWFjM2Y3MGEyOTJkYWEyMzE2ZGU1NDRlOWFhYjhhZmU4NDA0OWM2MmE5YzU3ODYyZDE0MzMiOiIwNGU1NThkYmVmNTNlZWNkZTNkM2ZjY2ZjMWFlYTA4YTg5YTk4NzQ3NWQxMmZkOTUwZDgzY2ZhNDE3MzJiYzUwOWQwZDFhYzQzYTAzMzZkZWY5NmZkYTQxZDA3NzRhMzU3MWRjZmJlYzdhYWNmMzE5NjQ3MjE2OWU4Mzg0MzAzNjdmNjZlZWJlM2M2ZTcwYzQxNmRkNWYwYzY4NzU5ZGQxZmZmODNmYTQwMTQyMjA5ZGZmNWVhYWQ5NmRiOWU2Mzg2YyI6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKIAogUFNBIGtleSBhZ3JlZW1lbnQgc2V0dXA6IEVDREggKyBIS0RGLVNIQS0yNTY6IHB1YmxpYyBrZXkgaW5zdGVhZCBvZiBwcml2YXRlIGtleQogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQzpNQkVEVExTX1NIQTI1Nl9DCi1rZXlfYWdyZWVtZW50X3NldHVwOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjA0ZDEyZGZiNTI4OWM4ZDRmODEyMDhiNzAyNzAzOThjMzQyMjk2OTcwYTBiY2NiNzRjNzM2ZmM3NTU0NDk0YmY2MzU2ZmJmM2NhMzY2Y2MyM2U4MTU3ODU0YzEzYzU4ZDZhYWMyM2YwNDZhZGEzMGY4MzUzZTc0ZjMzMDM5ODcyYWIiOiIwNGQxMmRmYjUyODljOGQ0ZjgxMjA4YjcwMjcwMzk4YzM0MjI5Njk3MGEwYmNjYjc0YzczNmZjNzU1NDQ5NGJmNjM1NmZiZjNjYTM2NmNjMjNlODE1Nzg1NGMxM2M1OGQ2YWFjMjNmMDQ2YWRhMzBmODM1M2U3NGYzMzAzOTg3MmFiIjpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAora2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKToiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6IjA0ZDEyZGZiNTI4OWM4ZDRmODEyMDhiNzAyNzAzOThjMzQyMjk2OTcwYTBiY2NiNzRjNzM2ZmM3NTU0NDk0YmY2MzU2ZmJmM2NhMzY2Y2MyM2U4MTU3ODU0YzEzYzU4ZDZhYWMyM2YwNDZhZGEzMGY4MzUzZTc0ZjMzMDM5ODcyYWIiOlBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCiAKIFBTQSBrZXkgYWdyZWVtZW50IHNldHVwOiBFQ0RILCB1bmtub3duIEtERgogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQwota2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoMCkpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6ImM4OGYwMWY1MTBkOWFjM2Y3MGEyOTJkYWEyMzE2ZGU1NDRlOWFhYjhhZmU4NDA0OWM2MmE5YzU3ODYyZDE0MzMiOiIwNGQxMmRmYjUyODljOGQ0ZjgxMjA4YjcwMjcwMzk4YzM0MjI5Njk3MGEwYmNjYjc0YzczNmZjNzU1NDQ5NGJmNjM1NmZiZjNjYTM2NmNjMjNlODE1Nzg1NGMxM2M1OGQ2YWFjMjNmMDQ2YWRhMzBmODM1M2U3NGYzMzAzOTg3MmFiIjpQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAora2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoMCkpOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKDApKToiYzg4ZjAxZjUxMGQ5YWMzZjcwYTI5MmRhYTIzMTZkZTU0NGU5YWFiOGFmZTg0MDQ5YzYyYTljNTc4NjJkMTQzMyI6IjA0ZDEyZGZiNTI4OWM4ZDRmODEyMDhiNzAyNzAzOThjMzQyMjk2OTcwYTBiY2NiNzRjNzM2ZmM3NTU0NDk0YmY2MzU2ZmJmM2NhMzY2Y2MyM2U4MTU3ODU0YzEzYzU4ZDZhYWMyM2YwNDZhZGEzMGY4MzUzZTc0ZjMzMDM5ODcyYWIiOlBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECiAKIFBTQSBrZXkgYWdyZWVtZW50IHNldHVwOiBiYWQga2V5IGFncmVlbWVudCBhbGdvcml0aG0KIGRlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQ6TUJFRFRMU19FQ0RIX0MKLWtleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19LRVlfQUdSRUVNRU5UKDAsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK2tleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19LRVlfQUdSRUVNRU5UKDAsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOlBTQV9BTEdfS0VZX0FHUkVFTUVOVCgwLCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6ImM4OGYwMWY1MTBkOWFjM2Y3MGEyOTJkYWEyMzE2ZGU1NDRlOWFhYjhhZmU4NDA0OWM2MmE5YzU3ODYyZDE0MzMiOiIwNGQxMmRmYjUyODljOGQ0ZjgxMjA4YjcwMjcwMzk4YzM0MjI5Njk3MGEwYmNjYjc0YzczNmZjNzU1NDQ5NGJmNjM1NmZiZjNjYTM2NmNjMjNlODE1Nzg1NGMxM2M1OGQ2YWFjMjNmMDQ2YWRhMzBmODM1M2U3NGYzMzAzOTg3MmFiIjpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAogCiBQU0Ega2V5IGFncmVlbWVudCBzZXR1cDogS0RGIGluc3RlYWQgb2YgYSBrZXkgYWdyZWVtZW50IGFsZ29yaXRobQogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQwota2V5X2FncmVlbWVudF9zZXR1cDpQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK2tleV9hZ3JlZW1lbnRfc2V0dXA6UFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1Nik6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKTpQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KToiYzg4ZjAxZjUxMGQ5YWMzZjcwYTI5MmRhYTIzMTZkZTU0NGU5YWFiOGFmZTg0MDQ5YzYyYTljNTc4NjJkMTQzMyI6IjA0ZDEyZGZiNTI4OWM4ZDRmODEyMDhiNzAyNzAzOThjMzQyMjk2OTcwYTBiY2NiNzRjNzM2ZmM3NTU0NDk0YmY2MzU2ZmJmM2NhMzY2Y2MyM2U4MTU3ODU0YzEzYzU4ZDZhYWMyM2YwNDZhZGEzMGY4MzUzZTc0ZjMzMDM5ODcyYWIiOlBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCiAKIFBTQSByYXcga2V5IGFncmVlbWVudDogRUNESCBTRUNQMjU2UjEgKFJGQyA1OTAzKQogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQwpAQCAtMjQ2OSw2ICsyNTc3LDE0IEBACiBkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX0JQNTEyUjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQwogcmF3X2tleV9hZ3JlZW1lbnQ6UFNBX0FMR19FQ0RIOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfQlJBSU5QT09MX1BfUjEpOiIxNjMwMmZmMGRiYmI1YThkNzMzZGFiNzE0MWMxYjQ1YWNiYzg3MTU5Mzk2NzdmNmE1Njg1MGEzOGJkODdiZDU5YjA5ZTgwMjc5NjA5ZmYzMzNlYjlkNGMwNjEyMzFmYjI2ZjkyZWViMDQ5ODJhNWYxZDE3NjRjYWQ1NzY2NTQyMiI6IjA0OWQ0NWY2NmRlNWQ2N2UyZTZkYjZlOTNhNTljZTBiYjQ4MTA2MDk3ZmY3OGEwODFkZTc4MWNkYjMxZmNlOGNjYmFhZWE4ZGQ0MzIwYzQxMTlmMWU5Y2Q0MzdhMmVhYjM3MzFmYTk2NjhhYjI2OGQ4NzFkZWRhNTVhNTQ3MzE5OWYyZmRjMzEzMDk1YmNkZDVmYjNhOTE2MzZmMDdhOTU5YzhlODZiNTYzNmExZTkzMGU4Mzk2MDQ5Y2I0ODE5NjFkMzY1Y2MxMTQ1M2EwNmM3MTk4MzU0NzViMTJjYjUyZmMzYzM4M2JjZTM1ZTI3ZWYxOTQ1MTJiNzE4NzYyODVmYSI6ImE3OTI3MDk4NjU1ZjFmOTk3NmZhNTBhOWQ1NjY4NjVkYzUzMDMzMTg0NjM4MWM4NzI1NmJhZjMyMjYyNDRiNzZkMzY0MDNjMDI0ZDdiYmYwYWEwODAzZWFmZjQwNWQzZDI0ZjExYTliNWMwYmVmNjc5ZmUxNDU0YjIxYzRjZDFmIgogCitQU0EgcmF3IGtleSBhZ3JlZW1lbnQ6IFgyNTUxOSAoUkZDIDc3NDg6IEFsaWNlKQorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRDpNQkVEVExTX0VDREhfQworcmF3X2tleV9hZ3JlZW1lbnQ6UFNBX0FMR19FQ0RIOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfTU9OVEdPTUVSWSk6Ijc3MDc2ZDBhNzMxOGE1N2QzYzE2YzE3MjUxYjI2NjQ1ZGY0YzJmODdlYmMwOTkyYWIxNzdmYmE1MWRiOTJjMmEiOiJkZTllZGI3ZDdiN2RjMWI0ZDM1YjYxYzJlY2U0MzUzNzNmODM0M2M4NWI3ODY3NGRhZGZjN2UxNDZmODgyYjRmIjoiNGE1ZDlkNWJhNGNlMmRlMTcyOGUzYmY0ODAzNTBmMjVlMDdlMjFjOTQ3ZDE5ZTMzNzZmMDliM2MxZTE2MTc0MiIKKworUFNBIHJhdyBrZXkgYWdyZWVtZW50OiBYMjU1MTkgKFJGQyA3NzQ4OiBCb2IpCitkZXBlbmRzX29uOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfQ1VSVkUyNTUxOV9FTkFCTEVEOk1CRURUTFNfRUNESF9DCityYXdfa2V5X2FncmVlbWVudDpQU0FfQUxHX0VDREg6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9NT05UR09NRVJZKToiNWRhYjA4N2U2MjRhOGE0Yjc5ZTE3ZjhiODM4MDBlZTY2ZjNiYjEyOTI2MThiNmZkMWMyZjhiMjdmZjg4ZTBlYiI6Ijg1MjBmMDA5ODkzMGE3NTQ3NDhiN2RkY2I0M2VmNzVhMGRiZjNhMGQyNjM4MWFmNGViYTRhOThlYWE5YjRlNmEiOiI0YTVkOWQ1YmE0Y2UyZGUxNzI4ZTNiZjQ4MDM1MGYyNWUwN2UyMWM5NDdkMTllMzM3NmYwOWIzYzFlMTYxNzQyIgorCiBQU0Ega2V5IGFncmVlbWVudDogRUNESCBTRUNQMjU2UjEgKFJGQyA1OTAzKSArIEhLREYtU0hBLTI1NjogY2FwYWNpdHk9ODE2MAogZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX0VDREhfQzpNQkVEVExTX1NIQTI1Nl9DCiBrZXlfYWdyZWVtZW50X2NhcGFjaXR5OlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiJjODhmMDFmNTEwZDlhYzNmNzBhMjkyZGFhMjMxNmRlNTQ0ZTlhYWI4YWZlODQwNDljNjJhOWM1Nzg2MmQxNDMzIjoiMDRkMTJkZmI1Mjg5YzhkNGY4MTIwOGI3MDI3MDM5OGMzNDIyOTY5NzBhMGJjY2I3NGM3MzZmYzc1NTQ0OTRiZjYzNTZmYmYzY2EzNjZjYzIzZTgxNTc4NTRjMTNjNThkNmFhYzIzZjA0NmFkYTMwZjgzNTNlNzRmMzMwMzk4NzJhYiI6ODE2MApAQCAtMjYzMCw2ICsyNzQ2LDEwIEBACiAjIGRvZXNuJ3QgZnVsbHkgcmVsYXRlIHRoZSBjdXJ2ZSB3aXRoIGl0cyBzaXplLgogZ2VuZXJhdGVfa2V5OlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6MTI4OlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0ggfCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOlBTQV9BTEdfRUNEU0FfQU5ZOlBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECiAKK1BTQSBnZW5lcmF0ZSBrZXk6IEVDQywgQ3VydmUyNTUxOSwgZ29vZAorZGVwZW5kc19vbjpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX0NVUlZFMjU1MTlfRU5BQkxFRDpNQkVEVExTX0VDREhfQworZ2VuZXJhdGVfa2V5OlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfTU9OVEdPTUVSWSk6MjU1OlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9ERVJJVkU6UFNBX0FMR19FQ0RIOlBTQV9TVUNDRVNTCisKIFBTQSBnZW5lcmF0ZSBrZXk6IFJTQSwgZGVmYXVsdCBlCiBnZW5lcmF0ZV9rZXlfcnNhOjUxMjoiIjpQU0FfU1VDQ0VTUwogCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0by5mdW5jdGlvbgppbmRleCA2NjU1ODBiLi5mYzU2M2NiIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG8uZnVuY3Rpb24KQEAgLTIzMyw3ICsyMzMsNyBAQAogICAgIGludCBvayA9IDA7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZTsKLSAgICBwc2Ffa2V5X2lkX3QgaWQ7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQ7CiAgICAgcHNhX2tleV90eXBlX3QgdHlwZTsKICAgICBwc2Ffa2V5X3R5cGVfdCBiaXRzOwogCkBAIC0yNDUsMTIgKzI0NSwxMiBAQAogCiAgICAgLyogUGVyc2lzdGVuY2UgKi8KICAgICBpZiggbGlmZXRpbWUgPT0gUFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRSApCi0gICAgICAgIFRFU1RfQVNTRVJUKCBpZCA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBNQkVEVExTX1NWQ19LRVlfSURfR0VUX0tFWV9JRCggaWQgKSA9PSAwICk7CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgVEVTVF9BU1NFUlQoCi0gICAgICAgICAgICAoIFBTQV9LRVlfSURfVVNFUl9NSU4gPD0gaWQgJiYgaWQgPD0gUFNBX0tFWV9JRF9VU0VSX01BWCApIHx8Ci0gICAgICAgICAgICAoIFBTQV9LRVlfSURfVVNFUl9NSU4gPD0gaWQgJiYgaWQgPD0gUFNBX0tFWV9JRF9VU0VSX01BWCApICk7CisgICAgICAgICAgICAoIFBTQV9LRVlfSURfVVNFUl9NSU4gPD0gTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9LRVlfSUQoIGlkICkgKSAmJgorICAgICAgICAgICAgKCBNQkVEVExTX1NWQ19LRVlfSURfR0VUX0tFWV9JRCggaWQgKSA8PSBQU0FfS0VZX0lEX1VTRVJfTUFYICkgKTsKICAgICB9CiAjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fU0VfQykKICAgICAvKiByYW5kb21seS1nZW5lcmF0ZWQgNjQtYml0IGNvbnN0YW50LCBzaG91bGQgbmV2ZXIgYXBwZWFyIGluIHRlc3QgZGF0YSAqLwpAQCAtMTE3OCwxNyArMTE3OCwyMSBAQAogc3RhdGljIGludCB0ZXN0X29wZXJhdGlvbnNfb25faW52YWxpZF9oYW5kbGUoIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlICkKIHsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5X2lkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDEsIDB4Njk2NCApOwogICAgIHVpbnQ4X3QgYnVmZmVyWzFdOwogICAgIHNpemVfdCBsZW5ndGg7CiAgICAgaW50IG9rID0gMDsKIAotICAgIHBzYV9zZXRfa2V5X2lkKCAmYXR0cmlidXRlcywgMHg2OTY0ICk7CisgICAgcHNhX3NldF9rZXlfaWQoICZhdHRyaWJ1dGVzLCBrZXlfaWQgKTsKICAgICBwc2Ffc2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCApOwogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIFBTQV9BTEdfQ1RSICk7CiAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVFlQRV9BRVMgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICksCiAgICAgICAgICAgICAgICAgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICk7Ci0gICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICksIDAgKTsKKyAgICBURVNUX0VRVUFMKAorICAgICAgICBNQkVEVExTX1NWQ19LRVlfSURfR0VUX0tFWV9JRCggcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICkgKSwgMCApOworICAgIFRFU1RfRVFVQUwoCisgICAgICAgIE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfT1dORVJfSUQoIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlcyApICksIDAgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9saWZldGltZSggJmF0dHJpYnV0ZXMgKSwgMCApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcyApLCAwICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcyApLCAwICk7CkBAIC0xMzIxLDE5ICsxMzI1LDIyIEBACiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFICovCi12b2lkIGF0dHJpYnV0ZXNfc2V0X2dldCggaW50IGlkX2FyZywgaW50IGxpZmV0aW1lX2FyZywKK3ZvaWQgYXR0cmlidXRlc19zZXRfZ2V0KCBpbnQgb3duZXJfaWRfYXJnLCBpbnQgaWRfYXJnLCBpbnQgbGlmZXRpbWVfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1c2FnZV9mbGFnc19hcmcsIGludCBhbGdfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlX2FyZywgaW50IGJpdHNfYXJnICkKIHsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7Ci0gICAgcHNhX2tleV9pZF90IGlkID0gaWRfYXJnOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGlkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIG93bmVyX2lkX2FyZywgaWRfYXJnICk7CiAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lID0gbGlmZXRpbWVfYXJnOwogICAgIHBzYV9rZXlfdXNhZ2VfdCB1c2FnZV9mbGFncyA9IHVzYWdlX2ZsYWdzX2FyZzsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gYWxnX2FyZzsKICAgICBwc2Ffa2V5X3R5cGVfdCB0eXBlID0gdHlwZV9hcmc7CiAgICAgc2l6ZV90IGJpdHMgPSBiaXRzX2FyZzsKIAotICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlcyApLCAwICk7CisgICAgVEVTVF9FUVVBTCgKKyAgICAgICAgTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9LRVlfSUQoIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlcyApICksIDAgKTsKKyAgICBURVNUX0VRVUFMKAorICAgICAgICBNQkVEVExTX1NWQ19LRVlfSURfR0VUX09XTkVSX0lEKCBwc2FfZ2V0X2tleV9pZCggJmF0dHJpYnV0ZXMgKSApLCAwICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzICksIDAgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMgKSwgMCApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMgKSwgMCApOwpAQCAtMTM0Nyw3ICsxMzU0LDggQEAKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgdHlwZSApOwogICAgIHBzYV9zZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzLCBiaXRzICk7CiAKLSAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9pZCggJmF0dHJpYnV0ZXMgKSwgaWQgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKAorICAgICAgICAgICAgICAgICAgICAgcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICksIGlkICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9saWZldGltZSggJmF0dHJpYnV0ZXMgKSwgbGlmZXRpbWUgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMgKSwgdXNhZ2VfZmxhZ3MgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzICksIGFsZyApOwpAQCAtMTM1Niw3ICsxMzY0LDEwIEBACiAKICAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CiAKLSAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9pZCggJmF0dHJpYnV0ZXMgKSwgMCApOworICAgIFRFU1RfRVFVQUwoCisgICAgICAgIE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfS0VZX0lEKCBwc2FfZ2V0X2tleV9pZCggJmF0dHJpYnV0ZXMgKSApLCAwICk7CisgICAgVEVTVF9FUVVBTCgKKyAgICAgICAgTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9PV05FUl9JRCggcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICkgKSwgMCApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2xpZmV0aW1lKCAmYXR0cmlidXRlcyApLCAwICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdXNhZ2VfZmxhZ3MoICZhdHRyaWJ1dGVzICksIDAgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzICksIDAgKTsKQEAgLTEzNjYsMTQgKzEzNzcsMTkgQEAKIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgKi8KLXZvaWQgcGVyc2lzdGVuY2VfYXR0cmlidXRlcyggaW50IGlkMV9hcmcsIGludCBsaWZldGltZV9hcmcsIGludCBpZDJfYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfaWRfYXJnLCBpbnQgZXhwZWN0ZWRfbGlmZXRpbWVfYXJnICkKK3ZvaWQgcGVyc2lzdGVuY2VfYXR0cmlidXRlcyggaW50IGlkMV9hcmcsIGludCBvd25lcl9pZDFfYXJnLCBpbnQgbGlmZXRpbWVfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWQyX2FyZywgaW50IG93bmVyX2lkMl9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9pZF9hcmcsIGludCBleHBlY3RlZF9vd25lcl9pZF9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9saWZldGltZV9hcmcgKQogewogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKLSAgICBwc2Ffa2V5X2lkX3QgaWQxID0gaWQxX2FyZzsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBpZDEgPQorICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggb3duZXJfaWQxX2FyZywgaWQxX2FyZyApOwogICAgIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZSA9IGxpZmV0aW1lX2FyZzsKLSAgICBwc2Ffa2V5X2lkX3QgaWQyID0gaWQyX2FyZzsKLSAgICBwc2Ffa2V5X2lkX3QgZXhwZWN0ZWRfaWQgPSBleHBlY3RlZF9pZF9hcmc7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQyID0KKyAgICAgICAgbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIG93bmVyX2lkMl9hcmcsIGlkMl9hcmcgKTsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBleHBlY3RlZF9pZCA9CisgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCBleHBlY3RlZF9vd25lcl9pZF9hcmcsIGV4cGVjdGVkX2lkX2FyZyApOwogICAgIHBzYV9rZXlfbGlmZXRpbWVfdCBleHBlY3RlZF9saWZldGltZSA9IGV4cGVjdGVkX2xpZmV0aW1lX2FyZzsKIAogICAgIGlmKCBpZDFfYXJnICE9IC0xICkKQEAgLTEzODMsNyArMTM5OSw4IEBACiAgICAgaWYoIGlkMl9hcmcgIT0gLTEgKQogICAgICAgICBwc2Ffc2V0X2tleV9pZCggJmF0dHJpYnV0ZXMsIGlkMiApOwogCi0gICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICksIGV4cGVjdGVkX2lkICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3ZjX2tleV9pZF9lcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlcyApLCBleHBlY3RlZF9pZCApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzICksIGV4cGVjdGVkX2xpZmV0aW1lICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwpAQCAtMjE5MSwxMyArMjIwOCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvbGljeV9hbGcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X3R5cGVfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICprZXlfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleGVyY2lzZV9hbGcgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4ZXJjaXNlX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9zdGF0dXNfYXJnICkKIHsKICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOwogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9vcGVyYXRpb25fdCBvcGVyYXRpb24gPSBQU0FfS0VZX0RFUklWQVRJT05fT1BFUkFUSU9OX0lOSVQ7CiAgICAgcHNhX3N0YXR1c190IHN0YXR1czsKKyAgICBwc2Ffc3RhdHVzX3QgZXhwZWN0ZWRfc3RhdHVzID0gZXhwZWN0ZWRfc3RhdHVzX2FyZzsKIAogICAgIFBTQV9BU1NFUlQoIHBzYV9jcnlwdG9faW5pdCggKSApOwogCkBAIC0yMjExLDExICsyMjMwLDcgQEAKICAgICBQU0FfQVNTRVJUKCBwc2Ffa2V5X2Rlcml2YXRpb25fc2V0dXAoICZvcGVyYXRpb24sIGV4ZXJjaXNlX2FsZyApICk7CiAgICAgc3RhdHVzID0ga2V5X2FncmVlbWVudF93aXRoX3NlbGYoICZvcGVyYXRpb24sIGhhbmRsZSApOwogCi0gICAgaWYoIHBvbGljeV9hbGcgPT0gZXhlcmNpc2VfYWxnICYmCi0gICAgICAgICggcG9saWN5X3VzYWdlICYgUFNBX0tFWV9VU0FHRV9ERVJJVkUgKSAhPSAwICkKLSAgICAgICAgUFNBX0FTU0VSVCggc3RhdHVzICk7Ci0gICAgZWxzZQotICAgICAgICBURVNUX0VRVUFMKCBzdGF0dXMsIFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICk7CisgICAgVEVTVF9FUVVBTCggc3RhdHVzLCBleHBlY3RlZF9zdGF0dXMgKTsKIAogZXhpdDoKICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fYWJvcnQoICZvcGVyYXRpb24gKTsKQEAgLTIyNjYsMTMgKzIyODEsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9saWN5X2FsZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X3R5cGVfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4ZXJjaXNlX2FsZyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4ZXJjaXNlX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfc3RhdHVzX2FyZyApCiB7CiAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fb3BlcmF0aW9uX3Qgb3BlcmF0aW9uID0gUFNBX0tFWV9ERVJJVkFUSU9OX09QRVJBVElPTl9JTklUOwogICAgIHBzYV9zdGF0dXNfdCBzdGF0dXM7CisgICAgcHNhX3N0YXR1c190IGV4cGVjdGVkX3N0YXR1cyA9IGV4cGVjdGVkX3N0YXR1c19hcmc7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKIApAQCAtMjI4NSwxMSArMjMwMiw3IEBACiAKICAgICBzdGF0dXMgPSByYXdfa2V5X2FncmVlbWVudF93aXRoX3NlbGYoIGV4ZXJjaXNlX2FsZywgaGFuZGxlICk7CiAKLSAgICBpZiggcG9saWN5X2FsZyA9PSBleGVyY2lzZV9hbGcgJiYKLSAgICAgICAgKCBwb2xpY3lfdXNhZ2UgJiBQU0FfS0VZX1VTQUdFX0RFUklWRSApICE9IDAgKQotICAgICAgICBQU0FfQVNTRVJUKCBzdGF0dXMgKTsKLSAgICBlbHNlCi0gICAgICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgKTsKKyAgICBURVNUX0VRVUFMKCBzdGF0dXMsIGV4cGVjdGVkX3N0YXR1cyApOwogCiBleGl0OgogICAgIHBzYV9rZXlfZGVyaXZhdGlvbl9hYm9ydCggJm9wZXJhdGlvbiApOwpAQCAtMzQzMCw3ICszNDQzLDExIEBACiAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sIGl2LT54LCBpdi0+bGVuICkgKTsKKyAgICBpZiggaXYtPmxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sIGl2LT54LCBpdi0+bGVuICkgKTsKKyAgICB9CisKICAgICBvdXRwdXRfYnVmZmVyX3NpemUgPSAoIChzaXplX3QpIGlucHV0LT5sZW4gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0JMT0NLX0NJUEhFUl9CTE9DS19TSVpFKCBrZXlfdHlwZSApICk7CiAgICAgQVNTRVJUX0FMTE9DKCBvdXRwdXQsIG91dHB1dF9idWZmZXJfc2l6ZSApOwpAQCAtMzQ5NCw3ICszNTExLDExIEBACiAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sIGl2LT54LCBpdi0+bGVuICkgKTsKKyAgICBpZiggaXYtPmxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sIGl2LT54LCBpdi0+bGVuICkgKTsKKyAgICB9CisKICAgICBvdXRwdXRfYnVmZmVyX3NpemUgPSAoIChzaXplX3QpIGlucHV0LT5sZW4gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0JMT0NLX0NJUEhFUl9CTE9DS19TSVpFKCBrZXlfdHlwZSApICk7CiAgICAgQVNTRVJUX0FMTE9DKCBvdXRwdXQsIG91dHB1dF9idWZmZXJfc2l6ZSApOwpAQCAtMzU2NCw3ICszNTg1LDEwIEBACiAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sIGl2LT54LCBpdi0+bGVuICkgKTsKKyAgICBpZiggaXYtPmxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sIGl2LT54LCBpdi0+bGVuICkgKTsKKyAgICB9CiAKICAgICBvdXRwdXRfYnVmZmVyX3NpemUgPSAoIChzaXplX3QpIGlucHV0LT5sZW4gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0JMT0NLX0NJUEhFUl9CTE9DS19TSVpFKCBrZXlfdHlwZSApICk7CkBAIC0zNjMyLDcgKzM2NTYsMTAgQEAKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX3NldF9pdiggJm9wZXJhdGlvbiwgaXYtPngsIGl2LT5sZW4gKSApOworICAgIGlmKCBpdi0+bGVuID4gMCApCisgICAgeworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX3NldF9pdiggJm9wZXJhdGlvbiwgaXYtPngsIGl2LT5sZW4gKSApOworICAgIH0KIAogICAgIG91dHB1dF9idWZmZXJfc2l6ZSA9ICggKHNpemVfdCkgaW5wdXQtPmxlbiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQkxPQ0tfQ0lQSEVSX0JMT0NLX1NJWkUoIGtleV90eXBlICkgKTsKQEAgLTM3MDAsOSArMzcyNywxMiBAQAogICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCggJm9wZXJhdGlvbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2dlbmVyYXRlX2l2KCAmb3BlcmF0aW9uMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXZfbGVuZ3RoICkgKTsKKyAgICBpZiggYWxnICE9IFBTQV9BTEdfRUNCX05PX1BBRERJTkcgKQorICAgIHsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiggJm9wZXJhdGlvbjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LCBpdl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXZfbGVuZ3RoICkgKTsKKyAgICB9CiAgICAgb3V0cHV0MV9zaXplID0gKCAoc2l6ZV90KSBpbnB1dC0+bGVuICsKICAgICAgICAgICAgICAgICAgICAgIFBTQV9CTE9DS19DSVBIRVJfQkxPQ0tfU0laRSgga2V5X3R5cGUgKSApOwogICAgIEFTU0VSVF9BTExPQyggb3V0cHV0MSwgb3V0cHV0MV9zaXplICk7CkBAIC0zNzIyLDggKzM3NTIsMTIgQEAKICAgICBvdXRwdXQyX3NpemUgPSBvdXRwdXQxX2xlbmd0aDsKICAgICBBU1NFUlRfQUxMT0MoIG91dHB1dDIsIG91dHB1dDJfc2l6ZSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfbGVuZ3RoICkgKTsKKyAgICBpZiggaXZfbGVuZ3RoID4gMCApCisgICAgeworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX3NldF9pdiggJm9wZXJhdGlvbjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfbGVuZ3RoICkgKTsKKyAgICB9CisKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX3VwZGF0ZSggJm9wZXJhdGlvbjIsIG91dHB1dDEsIG91dHB1dDFfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQyLCBvdXRwdXQyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdXQyX2xlbmd0aCApICk7CkBAIC0zNzg3LDkgKzM4MjEsMTMgQEAKICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAoICZvcGVyYXRpb24yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOwogCi0gICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiggJm9wZXJhdGlvbjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXYsIGl2X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml2X2xlbmd0aCApICk7CisgICAgaWYoIGFsZyAhPSBQU0FfQUxHX0VDQl9OT19QQURESU5HICkKKyAgICB7CisgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZ2VuZXJhdGVfaXYoICZvcGVyYXRpb24xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml2X2xlbmd0aCApICk7CisgICAgfQorCiAgICAgb3V0cHV0MV9idWZmZXJfc2l6ZSA9ICggKHNpemVfdCkgaW5wdXQtPmxlbiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNBX0JMT0NLX0NJUEhFUl9CTE9DS19TSVpFKCBrZXlfdHlwZSApICk7CiAgICAgQVNTRVJUX0FMTE9DKCBvdXRwdXQxLCBvdXRwdXQxX2J1ZmZlcl9zaXplICk7CkBAIC0zODE5LDggKzM4NTcsMTEgQEAKICAgICBvdXRwdXQyX2J1ZmZlcl9zaXplID0gb3V0cHV0MV9sZW5ndGg7CiAgICAgQVNTRVJUX0FMTE9DKCBvdXRwdXQyLCBvdXRwdXQyX2J1ZmZlcl9zaXplICk7CiAKLSAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX3NldF9pdiggJm9wZXJhdGlvbjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LCBpdl9sZW5ndGggKSApOworICAgIGlmKCBpdl9sZW5ndGggPiAwICkKKyAgICB7CisgICAgICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfc2V0X2l2KCAmb3BlcmF0aW9uMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2LCBpdl9sZW5ndGggKSApOworICAgIH0KIAogICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfdXBkYXRlKCAmb3BlcmF0aW9uMiwgb3V0cHV0MSwgZmlyc3RfcGFydF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQyLCBvdXRwdXQyX2J1ZmZlcl9zaXplLApAQCAtNDY4OCw5ICs0NzI5LDIwIEBACiAgICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzW2ldLT54LCBpbnB1dHNbaV0tPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlc1tpXSApICk7Ci0gICAgICAgICAgICBURVNUX0VRVUFMKCBwc2Ffa2V5X2Rlcml2YXRpb25faW5wdXRfa2V5KCAmb3BlcmF0aW9uLCBzdGVwc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXNbaV0gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1c2VzW2ldICk7CisgICAgICAgICAgICBpZiggUFNBX0tFWV9UWVBFX0lTX0tFWV9QQUlSKCBrZXlfdHlwZXNbaV0gKSAmJgorICAgICAgICAgICAgICAgIHN0ZXBzW2ldID09IFBTQV9LRVlfREVSSVZBVElPTl9JTlBVVF9TRUNSRVQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGFraW5nIGEgcHJpdmF0ZSBrZXkgYXMgc2VjcmV0IGlucHV0LCB1c2Uga2V5IGFncmVlbWVudAorICAgICAgICAgICAgICAgIC8vIHRvIGFkZCB0aGUgc2hhcmVkIHNlY3JldCB0byB0aGUgZGVyaXZhdGlvbgorICAgICAgICAgICAgICAgIFRFU1RfRVFVQUwoIGtleV9hZ3JlZW1lbnRfd2l0aF9zZWxmKCAmb3BlcmF0aW9uLCBoYW5kbGVzW2ldICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzZXNbaV0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBURVNUX0VRVUFMKCBwc2Ffa2V5X2Rlcml2YXRpb25faW5wdXRfa2V5KCAmb3BlcmF0aW9uLCBzdGVwc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzW2ldICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3RhdHVzZXNbaV0gKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKQEAgLTUxNzUsMTIgKzUyMjcsMTMgQEAKIAogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBrZXlfYWdyZWVtZW50X3NldHVwKCBpbnQgYWxnX2FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG91cl9rZXlfdHlwZV9hcmcsIGRhdGFfdCAqb3VyX2tleV9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKnBlZXJfa2V5X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvdXJfa2V5X3R5cGVfYXJnLCBpbnQgb3VyX2tleV9hbGdfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKm91cl9rZXlfZGF0YSwgZGF0YV90ICpwZWVyX2tleV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfc3RhdHVzX2FyZyApCiB7CiAgICAgcHNhX2tleV9oYW5kbGVfdCBvdXJfa2V5ID0gMDsKICAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gYWxnX2FyZzsKKyAgICBwc2FfYWxnb3JpdGhtX3Qgb3VyX2tleV9hbGcgPSBvdXJfa2V5X2FsZ19hcmc7CiAgICAgcHNhX2tleV90eXBlX3Qgb3VyX2tleV90eXBlID0gb3VyX2tleV90eXBlX2FyZzsKICAgICBwc2Ffa2V5X2Rlcml2YXRpb25fb3BlcmF0aW9uX3Qgb3BlcmF0aW9uID0gUFNBX0tFWV9ERVJJVkFUSU9OX09QRVJBVElPTl9JTklUOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKQEAgLTUxOTAsNyArNTI0Myw3IEBACiAgICAgUFNBX0FTU0VSVCggcHNhX2NyeXB0b19pbml0KCApICk7CiAKICAgICBwc2Ffc2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVVNBR0VfREVSSVZFICk7Ci0gICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CisgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgb3VyX2tleV9hbGcgKTsKICAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywgb3VyX2tleV90eXBlICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXJfa2V5X2RhdGEtPngsIG91cl9rZXlfZGF0YS0+bGVuLApAQCAtNTU4NCw3ICs1NjM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNhZ2VfZmxhZ3NfYXJnLCBpbnQgYWxnX2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZ2VuZXJhdGlvbl9tZXRob2QgKQogewotICAgIHBzYV9rZXlfaWRfdCBrZXlfaWQgPSAxOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGtleV9pZCA9IG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCAxLCAxICk7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKICAgICBwc2Ffa2V5X2hhbmRsZV90IGJhc2Vfa2V5ID0gMDsKQEAgLTU2NzYsNyArNTcyOSw4IEBACiAgICAgLyogQ2hlY2sga2V5IHNsb3Qgc3RpbGwgY29udGFpbnMga2V5IGRhdGEgKi8KICAgICBQU0FfQVNTRVJUKCBwc2Ffb3Blbl9rZXkoIGtleV9pZCwgJmhhbmRsZSApICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggaGFuZGxlLCAmYXR0cmlidXRlcyApICk7Ci0gICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICksIGtleV9pZCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3N2Y19rZXlfaWRfZXF1YWwoCisgICAgICAgICAgICAgICAgICAgICBwc2FfZ2V0X2tleV9pZCggJmF0dHJpYnV0ZXMgKSwga2V5X2lkICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9saWZldGltZSggJmF0dHJpYnV0ZXMgKSwKICAgICAgICAgICAgICAgICBQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV90eXBlKCAmYXR0cmlidXRlcyApLCB0eXBlICk7CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX2RyaXZlcl93cmFwcGVycy5kYXRhIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19kcml2ZXJfd3JhcHBlcnMuZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjFlZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19kcml2ZXJfd3JhcHBlcnMuZGF0YQpAQCAtMCwwICsxLDE3MSBAQAorc2lnbl9oYXNoIHRocm91Z2ggdHJhbnNwYXJlbnQgZHJpdmVyOiBjYWxjdWxhdGUgaW4gZHJpdmVyCitlY2RzYV9zaWduOlBTQV9TVUNDRVNTOiJhYjQ1NDM1NzEyNjQ5Y2IzMGJiZGRhYzQ5MTk3ZWViZjI3NDBmZmM3Zjg3NGQ5MjQ0YzM0NjBmNTRmMzIyZDNhIjoiOWFjNDMzNWI0NjliYmQ3OTE0MzkyNDg1MDRkZDBkNDljNzEzNDlhMjk1ZmVlNWExYzY4NTA3ZjQ1YTllMWM3YiI6IjZhMzM5OWY2OTQyMWZmZTE0OTAzNzdhZGYyZWExZjExN2Q4MWE2M2NmNWJmMjJlOTE4ZDUxMTc1ZWIyNTkxNTFjZTk1ZDdjMjZjYzA0ZTI1NTAzZTJmN2ExZWMzNTczZTNjMjQxMjUzNGJiNGExOWIzYTc4MTE3NDJmNDlmNTBmIjowOlBTQV9TVUNDRVNTCisKK3NpZ25faGFzaCB0aHJvdWdoIHRyYW5zcGFyZW50IGRyaXZlcjogZmFsbGJhY2sKK2VjZHNhX3NpZ246UFNBX0VSUk9SX05PVF9TVVBQT1JURUQ6ImFiNDU0MzU3MTI2NDljYjMwYmJkZGFjNDkxOTdlZWJmMjc0MGZmYzdmODc0ZDkyNDRjMzQ2MGY1NGYzMjJkM2EiOiI5YWM0MzM1YjQ2OWJiZDc5MTQzOTI0ODUwNGRkMGQ0OWM3MTM0OWEyOTVmZWU1YTFjNjg1MDdmNDVhOWUxYzdiIjoiNmEzMzk5ZjY5NDIxZmZlMTQ5MDM3N2FkZjJlYTFmMTE3ZDgxYTYzY2Y1YmYyMmU5MThkNTExNzVlYjI1OTE1MWNlOTVkN2MyNmNjMDRlMjU1MDNlMmY3YTFlYzM1NzNlM2MyNDEyNTM0YmI0YTE5YjNhNzgxMTc0MmY0OWY1MGYiOjA6UFNBX1NVQ0NFU1MKKworc2lnbl9oYXNoIHRocm91Z2ggdHJhbnNwYXJlbnQgZHJpdmVyOiBlcnJvcgorZWNkc2Ffc2lnbjpQU0FfRVJST1JfR0VORVJJQ19FUlJPUjoiYWI0NTQzNTcxMjY0OWNiMzBiYmRkYWM0OTE5N2VlYmYyNzQwZmZjN2Y4NzRkOTI0NGMzNDYwZjU0ZjMyMmQzYSI6IjlhYzQzMzViNDY5YmJkNzkxNDM5MjQ4NTA0ZGQwZDQ5YzcxMzQ5YTI5NWZlZTVhMWM2ODUwN2Y0NWE5ZTFjN2IiOiI2YTMzOTlmNjk0MjFmZmUxNDkwMzc3YWRmMmVhMWYxMTdkODFhNjNjZjViZjIyZTkxOGQ1MTE3NWViMjU5MTUxY2U5NWQ3YzI2Y2MwNGUyNTUwM2UyZjdhMWVjMzU3M2UzYzI0MTI1MzRiYjRhMTliM2E3ODExNzQyZjQ5ZjUwZiI6MDpQU0FfRVJST1JfR0VORVJJQ19FUlJPUgorCitzaWduX2hhc2ggdGhyb3VnaCB0cmFuc3BhcmVudCBkcml2ZXI6IGZha2UKK2VjZHNhX3NpZ246UFNBX1NVQ0NFU1M6ImFiNDU0MzU3MTI2NDljYjMwYmJkZGFjNDkxOTdlZWJmMjc0MGZmYzdmODc0ZDkyNDRjMzQ2MGY1NGYzMjJkM2EiOiI5YWM0MzM1YjQ2OWJiZDc5MTQzOTI0ODUwNGRkMGQ0OWM3MTM0OWEyOTVmZWU1YTFjNjg1MDdmNDVhOWUxYzdiIjoiMDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYiOjE6UFNBX1NVQ0NFU1MKKwordmVyaWZ5X2hhc2ggdXNpbmcgcHJpdmF0ZSBrZXkgdGhyb3VnaCB0cmFuc3BhcmVudCBkcml2ZXI6IGNhbGN1bGF0ZSBpbiBkcml2ZXIKK2VjZHNhX3ZlcmlmeTpQU0FfU1VDQ0VTUzowOiJhYjQ1NDM1NzEyNjQ5Y2IzMGJiZGRhYzQ5MTk3ZWViZjI3NDBmZmM3Zjg3NGQ5MjQ0YzM0NjBmNTRmMzIyZDNhIjoiOWFjNDMzNWI0NjliYmQ3OTE0MzkyNDg1MDRkZDBkNDljNzEzNDlhMjk1ZmVlNWExYzY4NTA3ZjQ1YTllMWM3YiI6IjZhMzM5OWY2OTQyMWZmZTE0OTAzNzdhZGYyZWExZjExN2Q4MWE2M2NmNWJmMjJlOTE4ZDUxMTc1ZWIyNTkxNTFjZTk1ZDdjMjZjYzA0ZTI1NTAzZTJmN2ExZWMzNTczZTNjMjQxMjUzNGJiNGExOWIzYTc4MTE3NDJmNDlmNTBmIjpQU0FfU1VDQ0VTUworCit2ZXJpZnlfaGFzaCB1c2luZyBwcml2YXRlIGtleSB0aHJvdWdoIHRyYW5zcGFyZW50IGRyaXZlcjogZmFsbGJhY2sKK2VjZHNhX3ZlcmlmeTpQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDowOiJhYjQ1NDM1NzEyNjQ5Y2IzMGJiZGRhYzQ5MTk3ZWViZjI3NDBmZmM3Zjg3NGQ5MjQ0YzM0NjBmNTRmMzIyZDNhIjoiOWFjNDMzNWI0NjliYmQ3OTE0MzkyNDg1MDRkZDBkNDljNzEzNDlhMjk1ZmVlNWExYzY4NTA3ZjQ1YTllMWM3YiI6IjZhMzM5OWY2OTQyMWZmZTE0OTAzNzdhZGYyZWExZjExN2Q4MWE2M2NmNWJmMjJlOTE4ZDUxMTc1ZWIyNTkxNTFjZTk1ZDdjMjZjYzA0ZTI1NTAzZTJmN2ExZWMzNTczZTNjMjQxMjUzNGJiNGExOWIzYTc4MTE3NDJmNDlmNTBmIjpQU0FfU1VDQ0VTUworCit2ZXJpZnlfaGFzaCB1c2luZyBwcml2YXRlIGtleSB0aHJvdWdoIHRyYW5zcGFyZW50IGRyaXZlcjogZXJyb3IKK2VjZHNhX3ZlcmlmeTpQU0FfRVJST1JfR0VORVJJQ19FUlJPUjowOiJhYjQ1NDM1NzEyNjQ5Y2IzMGJiZGRhYzQ5MTk3ZWViZjI3NDBmZmM3Zjg3NGQ5MjQ0YzM0NjBmNTRmMzIyZDNhIjoiOWFjNDMzNWI0NjliYmQ3OTE0MzkyNDg1MDRkZDBkNDljNzEzNDlhMjk1ZmVlNWExYzY4NTA3ZjQ1YTllMWM3YiI6IjZhMzM5OWY2OTQyMWZmZTE0OTAzNzdhZGYyZWExZjExN2Q4MWE2M2NmNWJmMjJlOTE4ZDUxMTc1ZWIyNTkxNTFjZTk1ZDdjMjZjYzA0ZTI1NTAzZTJmN2ExZWMzNTczZTNjMjQxMjUzNGJiNGExOWIzYTc4MTE3NDJmNDlmNTBmIjpQU0FfRVJST1JfR0VORVJJQ19FUlJPUgorCit2ZXJpZnlfaGFzaCB1c2luZyBwdWJsaWMga2V5IHRocm91Z2ggdHJhbnNwYXJlbnQgZHJpdmVyOiBjYWxjdWxhdGUgaW4gZHJpdmVyCitlY2RzYV92ZXJpZnk6UFNBX1NVQ0NFU1M6MToiMDRkZWE1ZTQ1ZDBlYTM3ZmM1NjYyMzJhNTA4ZjRhZDIwZWExM2Q0N2U0YmY1ZmE0ZDU0YTU3YTBiYTAxMjA0MjA4NzA5NzQ5NmVmYzU4M2ZlZDhiMjRhNWI5YmU5YTUxZGUwNjNmNWEwMGE4YjY5OGExNmZkN2YyOWI1NDg1ZjMyMCI6IjlhYzQzMzViNDY5YmJkNzkxNDM5MjQ4NTA0ZGQwZDQ5YzcxMzQ5YTI5NWZlZTVhMWM2ODUwN2Y0NWE5ZTFjN2IiOiI2YTMzOTlmNjk0MjFmZmUxNDkwMzc3YWRmMmVhMWYxMTdkODFhNjNjZjViZjIyZTkxOGQ1MTE3NWViMjU5MTUxY2U5NWQ3YzI2Y2MwNGUyNTUwM2UyZjdhMWVjMzU3M2UzYzI0MTI1MzRiYjRhMTliM2E3ODExNzQyZjQ5ZjUwZiI6UFNBX1NVQ0NFU1MKKwordmVyaWZ5X2hhc2ggdXNpbmcgcHVibGljIGtleSB0aHJvdWdoIHRyYW5zcGFyZW50IGRyaXZlcjogZmFsbGJhY2sKK2VjZHNhX3ZlcmlmeTpQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDoxOiIwNGRlYTVlNDVkMGVhMzdmYzU2NjIzMmE1MDhmNGFkMjBlYTEzZDQ3ZTRiZjVmYTRkNTRhNTdhMGJhMDEyMDQyMDg3MDk3NDk2ZWZjNTgzZmVkOGIyNGE1YjliZTlhNTFkZTA2M2Y1YTAwYThiNjk4YTE2ZmQ3ZjI5YjU0ODVmMzIwIjoiOWFjNDMzNWI0NjliYmQ3OTE0MzkyNDg1MDRkZDBkNDljNzEzNDlhMjk1ZmVlNWExYzY4NTA3ZjQ1YTllMWM3YiI6IjZhMzM5OWY2OTQyMWZmZTE0OTAzNzdhZGYyZWExZjExN2Q4MWE2M2NmNWJmMjJlOTE4ZDUxMTc1ZWIyNTkxNTFjZTk1ZDdjMjZjYzA0ZTI1NTAzZTJmN2ExZWMzNTczZTNjMjQxMjUzNGJiNGExOWIzYTc4MTE3NDJmNDlmNTBmIjpQU0FfU1VDQ0VTUworCit2ZXJpZnlfaGFzaCB1c2luZyBwdWJsaWMga2V5IHRocm91Z2ggdHJhbnNwYXJlbnQgZHJpdmVyOiBlcnJvcgorZWNkc2FfdmVyaWZ5OlBTQV9FUlJPUl9HRU5FUklDX0VSUk9SOjE6IjA0ZGVhNWU0NWQwZWEzN2ZjNTY2MjMyYTUwOGY0YWQyMGVhMTNkNDdlNGJmNWZhNGQ1NGE1N2EwYmEwMTIwNDIwODcwOTc0OTZlZmM1ODNmZWQ4YjI0YTViOWJlOWE1MWRlMDYzZjVhMDBhOGI2OThhMTZmZDdmMjliNTQ4NWYzMjAiOiI5YWM0MzM1YjQ2OWJiZDc5MTQzOTI0ODUwNGRkMGQ0OWM3MTM0OWEyOTVmZWU1YTFjNjg1MDdmNDVhOWUxYzdiIjoiNmEzMzk5ZjY5NDIxZmZlMTQ5MDM3N2FkZjJlYTFmMTE3ZDgxYTYzY2Y1YmYyMmU5MThkNTExNzVlYjI1OTE1MWNlOTVkN2MyNmNjMDRlMjU1MDNlMmY3YTFlYzM1NzNlM2MyNDEyNTM0YmI0YTE5YjNhNzgxMTc0MmY0OWY1MGYiOlBTQV9FUlJPUl9HRU5FUklDX0VSUk9SCisKK2dlbmVyYXRlX2tleSB0aHJvdWdoIHRyYW5zcGFyZW50IGRyaXZlcjogZmFrZQorZ2VuZXJhdGVfa2V5OlBTQV9TVUNDRVNTOiJhYjQ1NDM1NzEyNjQ5Y2IzMGJiZGRhYzQ5MTk3ZWViZjI3NDBmZmM3Zjg3NGQ5MjQ0YzM0NjBmNTRmMzIyZDNhIjpQU0FfU1VDQ0VTUworCitnZW5lcmF0ZV9rZXkgdGhyb3VnaCB0cmFuc3BhcmVudCBkcml2ZXI6IGluLWRyaXZlcgorZ2VuZXJhdGVfa2V5OlBTQV9TVUNDRVNTOiIiOlBTQV9TVUNDRVNTCisKK2dlbmVyYXRlX2tleSB0aHJvdWdoIHRyYW5zcGFyZW50IGRyaXZlcjogZmFsbGJhY2sKK2dlbmVyYXRlX2tleTpQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDoiIjpQU0FfU1VDQ0VTUworCitnZW5lcmF0ZV9rZXkgdGhyb3VnaCB0cmFuc3BhcmVudCBkcml2ZXI6IGVycm9yCitnZW5lcmF0ZV9rZXk6UFNBX0VSUk9SX0dFTkVSSUNfRVJST1I6IiI6UFNBX0VSUk9SX0dFTkVSSUNfRVJST1IKKwordmFsaWRhdGUga2V5IHRocm91Z2ggdHJhbnNwYXJlbnQgZHJpdmVyOiBnb29kIHByaXZhdGUga2V5CitkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX1BLX1dSSVRFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAordmFsaWRhdGVfa2V5OlBTQV9TVUNDRVNTOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOlBTQV9TVUNDRVNTCisKK3ZhbGlkYXRlIGtleSB0aHJvdWdoIHRyYW5zcGFyZW50IGRyaXZlcjogZ29vZCBwdWJsaWMga2V5CitkZXBlbmRzX29uOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX1BLX1dSSVRFX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAordmFsaWRhdGVfa2V5OlBTQV9TVUNDRVNTOlBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWShQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiMDRkZWE1ZTQ1ZDBlYTM3ZmM1NjYyMzJhNTA4ZjRhZDIwZWExM2Q0N2U0YmY1ZmE0ZDU0YTU3YTBiYTAxMjA0MjA4NzA5NzQ5NmVmYzU4M2ZlZDhiMjRhNWI5YmU5YTUxZGUwNjNmNWEwMGE4YjY5OGExNmZkN2YyOWI1NDg1ZjMyMCI6UFNBX1NVQ0NFU1MKKwordmFsaWRhdGUga2V5IHRocm91Z2ggdHJhbnNwYXJlbnQgZHJpdmVyOiBmYWxsYmFjayBwcml2YXRlIGtleQorZGVwZW5kc19vbjpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19QS19XUklURV9DOk1CRURUTFNfRUNQX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQKK3ZhbGlkYXRlX2tleTpQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpQU0FfU1VDQ0VTUworCit2YWxpZGF0ZSBrZXkgdGhyb3VnaCB0cmFuc3BhcmVudCBkcml2ZXI6IGZhbGxiYWNrIHB1YmxpYyBrZXkKK2RlcGVuZHNfb246TUJFRFRMU19QS19QQVJTRV9DOk1CRURUTFNfUEtfV1JJVEVfQzpNQkVEVExTX0VDUF9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECit2YWxpZGF0ZV9rZXk6UFNBX0VSUk9SX05PVF9TVVBQT1JURUQ6UFNBX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiIwNGRlYTVlNDVkMGVhMzdmYzU2NjIzMmE1MDhmNGFkMjBlYTEzZDQ3ZTRiZjVmYTRkNTRhNTdhMGJhMDEyMDQyMDg3MDk3NDk2ZWZjNTgzZmVkOGIyNGE1YjliZTlhNTFkZTA2M2Y1YTAwYThiNjk4YTE2ZmQ3ZjI5YjU0ODVmMzIwIjpQU0FfU1VDQ0VTUworCit2YWxpZGF0ZSBrZXkgdGhyb3VnaCB0cmFuc3BhcmVudCBkcml2ZXI6IGVycm9yCit2YWxpZGF0ZV9rZXk6UFNBX0VSUk9SX0dFTkVSSUNfRVJST1I6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6UFNBX0VSUk9SX0dFTkVSSUNfRVJST1IKKworUFNBIHN5bW1ldHJpYyBlbmNyeXB0OiBBRVMtQ1RSLCAxNiBieXRlcywgZ29vZAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitjaXBoZXJfZW5jcnlwdDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmEiOiI4Zjk0MDhmZTgwYTgxZDNlODEzZGEzYzdiMGIyYmQzMiI6MDpQU0FfU1VDQ0VTUzpQU0FfU1VDQ0VTUworCitQU0Egc3ltbWV0cmljIGVuY3J5cHQ6IEFFUy1DVFIsIDE1IGJ5dGVzLCBnb29kCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2NpcGhlcl9lbmNyeXB0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTciOiI4Zjk0MDhmZTgwYTgxZDNlODEzZGEzYzdiMGIyYmQiOjA6UFNBX1NVQ0NFU1M6UFNBX1NVQ0NFU1MKKworUFNBIHN5bW1ldHJpYyBlbmNyeXB0OiBBRVMtQ1RSLCAxNiBieXRlcywgZmFsbGJhY2sKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorY2lwaGVyX2VuY3J5cHQ6UFNBX0FMR19DVFI6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhIjoiOGY5NDA4ZmU4MGE4MWQzZTgxM2RhM2M3YjBiMmJkMzIiOjA6UFNBX0VSUk9SX05PVF9TVVBQT1JURUQ6UFNBX1NVQ0NFU1MKKworUFNBIHN5bW1ldHJpYyBlbmNyeXB0OiBBRVMtQ1RSLCAxNSBieXRlcywgZmFsbGJhY2sKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorY2lwaGVyX2VuY3J5cHQ6UFNBX0FMR19DVFI6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNyI6IjhmOTQwOGZlODBhODFkM2U4MTNkYTNjN2IwYjJiZCI6MDpQU0FfRVJST1JfTk9UX1NVUFBPUlRFRDpQU0FfU1VDQ0VTUworCitQU0Egc3ltbWV0cmljIGVuY3J5cHQ6IEFFUy1DVFIsIDE2IGJ5dGVzLCBmYWtlCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2NpcGhlcl9lbmNyeXB0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYSI6ImQwN2E2YTZlMjY4N2ZlYjIiOjE6UFNBX1NVQ0NFU1M6UFNBX1NVQ0NFU1MKKworUFNBIHN5bW1ldHJpYyBlbmNyeXB0OiBBRVMtQ1RSLCAxNSBieXRlcywgZmFrZQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitjaXBoZXJfZW5jcnlwdDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3IjoiZDA3YTZhNmUyNjg3ZmViMiI6MTpQU0FfU1VDQ0VTUzpQU0FfU1VDQ0VTUworCitQU0Egc3ltbWV0cmljIGRlY3J5cHQ6IEFFUy1DVFIsIDE2IGJ5dGVzLCBnb29kCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2NpcGhlcl9kZWNyeXB0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiIzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYSI6ImRkM2I1ZTUzMTliNzU5MWRhYWIxZTFhOTI2ODdmZWIyIjowOlBTQV9TVUNDRVNTOlBTQV9TVUNDRVNTCisKK1BTQSBzeW1tZXRyaWMgZGVjcnlwdDogQUVTLUNUUiwgMTYgYnl0ZXMsIGZhbGxiYWNrCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2NpcGhlcl9kZWNyeXB0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiIzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYSI6ImRkM2I1ZTUzMTliNzU5MWRhYWIxZTFhOTI2ODdmZWIyIjowOlBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEOlBTQV9TVUNDRVNTCisKK1BTQSBzeW1tZXRyaWMgZGVjcnlwdDogQUVTLUNUUiwgMTYgYnl0ZXMsIGZha2UKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorY2lwaGVyX2RlY3J5cHQ6UFNBX0FMR19DVFI6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6IjM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhIjoiZDA3YTZhNmUyNjg3ZmViMiI6MTpQU0FfU1VDQ0VTUzpQU0FfU1VDQ0VTUworCitQU0Egc3ltbWV0cmljIGVuY3J5cHRpb24gbXVsdGlwYXJ0OiBBRVMtQ1RSLCAxMSs1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2NpcGhlcl9lbmNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmEiOjExOjExOjU6IjhmOTQwOGZlODBhODFkM2U4MTNkYTNjN2IwYjJiZDMyIgorCitQU0Egc3ltbWV0cmljIGVuY3J5cHRpb24gbXVsdGlwYXJ0OiBBRVMtQ1RSLCAxNisxNiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitjaXBoZXJfZW5jcnlwdF9tdWx0aXBhcnQ6UFNBX0FMR19DVFI6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhNTQzNGYzNzhhNTk3YmNlZjEzODkzMThjN2ZjODY1ZWYiOjE2OjE2OjE2OiI4Zjk0MDhmZTgwYTgxZDNlODEzZGEzYzdiMGIyYmQzMjFjOTY1YmIxZGU3YmFmNzEwMjVmNmVmNjM5M2NhNTg3IgorCitQU0Egc3ltbWV0cmljIGVuY3J5cHRpb24gbXVsdGlwYXJ0OiBBRVMtQ1RSLCAxMisyMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitjaXBoZXJfZW5jcnlwdF9tdWx0aXBhcnQ6UFNBX0FMR19DVFI6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhNTQzNGYzNzhhNTk3YmNlZjEzODkzMThjN2ZjODY1ZWYiOjEyOjEyOjIwOiI4Zjk0MDhmZTgwYTgxZDNlODEzZGEzYzdiMGIyYmQzMjFjOTY1YmIxZGU3YmFmNzEwMjVmNmVmNjM5M2NhNTg3IgorCitQU0Egc3ltbWV0cmljIGVuY3J5cHRpb24gbXVsdGlwYXJ0OiBBRVMtQ1RSLCAyMCsxMiBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitjaXBoZXJfZW5jcnlwdF9tdWx0aXBhcnQ6UFNBX0FMR19DVFI6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhNTQzNGYzNzhhNTk3YmNlZjEzODkzMThjN2ZjODY1ZWYiOjIwOjIwOjEyOiI4Zjk0MDhmZTgwYTgxZDNlODEzZGEzYzdiMGIyYmQzMjFjOTY1YmIxZGU3YmFmNzEwMjVmNmVmNjM5M2NhNTg3IgorCitQU0Egc3ltbWV0cmljIGVuY3J5cHRpb24gbXVsdGlwYXJ0OiBBRVMtQ1RSLCAxMisxMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitjaXBoZXJfZW5jcnlwdF9tdWx0aXBhcnQ6UFNBX0FMR19DVFI6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhNTQzNGYzNzhhNTk3IjoxMjoxMjoxMDoiOGY5NDA4ZmU4MGE4MWQzZTgxM2RhM2M3YjBiMmJkMzIxYzk2NWJiMWRlN2IiCisKK1BTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDArMTUgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorY2lwaGVyX2VuY3J5cHRfbXVsdGlwYXJ0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTciOjA6MDoxNToiOGY5NDA4ZmU4MGE4MWQzZTgxM2RhM2M3YjBiMmJkIgorCitQU0Egc3ltbWV0cmljIGVuY3J5cHRpb24gbXVsdGlwYXJ0OiBBRVMtQ1RSLCAxNSswIGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2NpcGhlcl9lbmNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3IjoxNToxNTowOiI4Zjk0MDhmZTgwYTgxZDNlODEzZGEzYzdiMGIyYmQiCisKK1BTQSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDArMTYgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorY2lwaGVyX2VuY3J5cHRfbXVsdGlwYXJ0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYSI6MDowOjE2OiI4Zjk0MDhmZTgwYTgxZDNlODEzZGEzYzdiMGIyYmQzMiIKKworUFNBIHN5bW1ldHJpYyBlbmNyeXB0aW9uIG11bHRpcGFydDogQUVTLUNUUiwgMTYrMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitjaXBoZXJfZW5jcnlwdF9tdWx0aXBhcnQ6UFNBX0FMR19DVFI6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhIjoxNjoxNjowOiI4Zjk0MDhmZTgwYTgxZDNlODEzZGEzYzdiMGIyYmQzMiIKKworUFNBIHN5bW1ldHJpYyBkZWNyeXB0aW9uIG11bHRpcGFydDogQUVTLUNUUiwgMTErNSBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitjaXBoZXJfZGVjcnlwdF9tdWx0aXBhcnQ6UFNBX0FMR19DVFI6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNzJhIjoxMToxMTo1OiI4Zjk0MDhmZTgwYTgxZDNlODEzZGEzYzdiMGIyYmQzMiIKKworUFNBIHN5bW1ldHJpYyBkZWNyeXB0aW9uIG11bHRpcGFydDogQUVTLUNUUiwgMTYrMTYgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorY2lwaGVyX2RlY3J5cHRfbXVsdGlwYXJ0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYTU0MzRmMzc4YTU5N2JjZWYxMzg5MzE4YzdmYzg2NWVmIjoxNjoxNjoxNjoiOGY5NDA4ZmU4MGE4MWQzZTgxM2RhM2M3YjBiMmJkMzIxYzk2NWJiMWRlN2JhZjcxMDI1ZjZlZjYzOTNjYTU4NyIKKworUFNBIHN5bW1ldHJpYyBkZWNyeXB0aW9uIG11bHRpcGFydDogQUVTLUNUUiwgMTIrMjAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorY2lwaGVyX2RlY3J5cHRfbXVsdGlwYXJ0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYTU0MzRmMzc4YTU5N2JjZWYxMzg5MzE4YzdmYzg2NWVmIjoxMjoxMjoyMDoiOGY5NDA4ZmU4MGE4MWQzZTgxM2RhM2M3YjBiMmJkMzIxYzk2NWJiMWRlN2JhZjcxMDI1ZjZlZjYzOTNjYTU4NyIKKworUFNBIHN5bW1ldHJpYyBkZWNyeXB0aW9uIG11bHRpcGFydDogQUVTLUNUUiwgMjArMTIgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorY2lwaGVyX2RlY3J5cHRfbXVsdGlwYXJ0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYTU0MzRmMzc4YTU5N2JjZWYxMzg5MzE4YzdmYzg2NWVmIjoyMDoyMDoxMjoiOGY5NDA4ZmU4MGE4MWQzZTgxM2RhM2M3YjBiMmJkMzIxYzk2NWJiMWRlN2JhZjcxMDI1ZjZlZjYzOTNjYTU4NyIKKworUFNBIHN5bW1ldHJpYyBkZWNyeXB0aW9uIG11bHRpcGFydDogQUVTLUNUUiwgMTIrMTAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorY2lwaGVyX2RlY3J5cHRfbXVsdGlwYXJ0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYTU0MzRmMzc4YTU5NyI6MTI6MTI6MTA6IjhmOTQwOGZlODBhODFkM2U4MTNkYTNjN2IwYjJiZDMyMWM5NjViYjFkZTdiIgorCitQU0Egc3ltbWV0cmljIGRlY3J5cHRpb24gbXVsdGlwYXJ0OiBBRVMtQ1RSLCAwKzE1IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2NpcGhlcl9kZWNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3IjowOjA6MTU6IjhmOTQwOGZlODBhODFkM2U4MTNkYTNjN2IwYjJiZCIKKworUFNBIHN5bW1ldHJpYyBkZWNyeXB0aW9uIG11bHRpcGFydDogQUVTLUNUUiwgMTUrMCBieXRlcworZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfQ0lQSEVSX01PREVfQ1RSCitjaXBoZXJfZGVjcnlwdF9tdWx0aXBhcnQ6UFNBX0FMR19DVFI6UFNBX0tFWV9UWVBFX0FFUzoiMmI3ZTE1MTYyOGFlZDJhNmFiZjcxNTg4MDljZjRmM2MiOiIyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYSI6IjZiYzFiZWUyMmU0MDlmOTZlOTNkN2UxMTczOTMxNyI6MTU6MTU6MDoiOGY5NDA4ZmU4MGE4MWQzZTgxM2RhM2M3YjBiMmJkIgorCitQU0Egc3ltbWV0cmljIGRlY3J5cHRpb24gbXVsdGlwYXJ0OiBBRVMtQ1RSLCAwKzE2IGJ5dGVzCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DVFIKK2NpcGhlcl9kZWNyeXB0X211bHRpcGFydDpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmEiOjA6MDoxNjoiOGY5NDA4ZmU4MGE4MWQzZTgxM2RhM2M3YjBiMmJkMzIiCisKK1BTQSBzeW1tZXRyaWMgZGVjcnlwdGlvbiBtdWx0aXBhcnQ6IEFFUy1DVFIsIDE2KzAgYnl0ZXMKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUgorY2lwaGVyX2RlY3J5cHRfbXVsdGlwYXJ0OlBTQV9BTEdfQ1RSOlBTQV9LRVlfVFlQRV9BRVM6IjJiN2UxNTE2MjhhZWQyYTZhYmY3MTU4ODA5Y2Y0ZjNjIjoiMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEiOiI2YmMxYmVlMjJlNDA5Zjk2ZTkzZDdlMTE3MzkzMTcyYSI6MTY6MTY6MDoiOGY5NDA4ZmU4MGE4MWQzZTgxM2RhM2M3YjBiMmJkMzIiCisKK0NpcGhlciBkcml2ZXI6IG5lZ2F0aXZlIHRlc3Rpbmcgb24gYWxsIGVudHJ5IHBvaW50cworY2lwaGVyX2VudHJ5X3BvaW50czpQU0FfQUxHX0NUUjpQU0FfS0VZX1RZUEVfQUVTOiIyYjdlMTUxNjI4YWVkMmE2YWJmNzE1ODgwOWNmNGYzYyI6IjJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhMmEyYTJhIjoiNmJjMWJlZTIyZTQwOWY5NmU5M2Q3ZTExNzM5MzE3MmEiCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX2RyaXZlcl93cmFwcGVycy5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fZHJpdmVyX3dyYXBwZXJzLmZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMTQwZDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX2RyaXZlcl93cmFwcGVycy5mdW5jdGlvbgpAQCAtMCwwICsxLDc1MiBAQAorLyogQkVHSU5fSEVBREVSICovCisjaW5jbHVkZSAidGVzdC9wc2FfY3J5cHRvX2hlbHBlcnMuaCIKKworI2luY2x1ZGUgInRlc3QvZHJpdmVycy90ZXN0X2RyaXZlci5oIgorLyogRU5EX0hFQURFUiAqLworCisvKiBCRUdJTl9ERVBFTkRFTkNJRVMKKyAqIGRlcGVuZHNfb246TUJFRFRMU19QU0FfQ1JZUFRPX0M6TUJFRFRMU19QU0FfQ1JZUFRPX0RSSVZFUlM6UFNBX0NSWVBUT19EUklWRVJfVEVTVAorICogRU5EX0RFUEVOREVOQ0lFUworICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ0RTQV9ERVRFUk1JTklTVElDOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVEOk1CRURUTFNfU0hBMjU2X0MgKi8KK3ZvaWQgZWNkc2Ffc2lnbiggaW50IGZvcmNlX3N0YXR1c19hcmcsCisgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5X2lucHV0LAorICAgICAgICAgICAgICAgICBkYXRhX3QgKmRhdGFfaW5wdXQsCisgICAgICAgICAgICAgICAgIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0LAorICAgICAgICAgICAgICAgICBpbnQgZmFrZV9vdXRwdXQsCisgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9zdGF0dXNfYXJnICkKK3sKKyAgICBwc2Ffc3RhdHVzX3QgZm9yY2Vfc3RhdHVzID0gZm9yY2Vfc3RhdHVzX2FyZzsKKyAgICBwc2Ffc3RhdHVzX3QgZXhwZWN0ZWRfc3RhdHVzID0gZXhwZWN0ZWRfc3RhdHVzX2FyZzsKKyAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOworICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBQU0FfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EoIFBTQV9BTEdfU0hBXzI1NiApOworICAgIHVpbnQ4X3Qgc2lnbmF0dXJlWzY0XTsKKyAgICBzaXplX3Qgc2lnbmF0dXJlX2xlbmd0aCA9IDB4ZGVhZGJlZWY7CisgICAgcHNhX3N0YXR1c190IGFjdHVhbF9zdGF0dXM7CisgICAgdGVzdF9kcml2ZXJfc2lnbmF0dXJlX3NpZ25faG9va3MgPSB0ZXN0X2RyaXZlcl9zaWduYXR1cmVfaG9va3NfaW5pdCgpOworCisgICAgUFNBX0FTU0VSVCggcHNhX2NyeXB0b19pbml0KCApICk7CisgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgUFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUiggUFNBX0VDQ19DVVJWRV9TRUNQX1IxICkgKTsKKyAgICBwc2Ffc2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIICk7CisgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CisgICAgcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICBrZXlfaW5wdXQtPngsIGtleV9pbnB1dC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICk7CisKKyAgICB0ZXN0X2RyaXZlcl9zaWduYXR1cmVfc2lnbl9ob29rcy5mb3JjZWRfc3RhdHVzID0gZm9yY2Vfc3RhdHVzOworICAgIGlmKCBmYWtlX291dHB1dCA9PSAxICkKKyAgICB7CisgICAgICAgIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV9zaWduX2hvb2tzLmZvcmNlZF9vdXRwdXQgPSBleHBlY3RlZF9vdXRwdXQtPng7CisgICAgICAgIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV9zaWduX2hvb2tzLmZvcmNlZF9vdXRwdXRfbGVuZ3RoID0gZXhwZWN0ZWRfb3V0cHV0LT5sZW47CisgICAgfQorCisgICAgYWN0dWFsX3N0YXR1cyA9IHBzYV9zaWduX2hhc2goIGhhbmRsZSwgYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2lucHV0LT54LCBkYXRhX2lucHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgc2l6ZW9mKCBzaWduYXR1cmUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpZ25hdHVyZV9sZW5ndGggKTsKKyAgICBURVNUX0VRVUFMKCBhY3R1YWxfc3RhdHVzLCBleHBlY3RlZF9zdGF0dXMgKTsKKyAgICBpZiggZXhwZWN0ZWRfc3RhdHVzID09IFBTQV9TVUNDRVNTICkKKyAgICB7CisgICAgICAgIEFTU0VSVF9DT01QQVJFKCBzaWduYXR1cmUsIHNpZ25hdHVyZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXQtPngsIGV4cGVjdGVkX291dHB1dC0+bGVuICk7CisgICAgfQorICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV9zaWduX2hvb2tzLmhpdHMsIDEgKTsKKworZXhpdDoKKyAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBQU0FfRE9ORSggKTsKKyAgICB0ZXN0X2RyaXZlcl9zaWduYXR1cmVfc2lnbl9ob29rcyA9IHRlc3RfZHJpdmVyX3NpZ25hdHVyZV9ob29rc19pbml0KCk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNEU0FfREVURVJNSU5JU1RJQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DICovCit2b2lkIGVjZHNhX3ZlcmlmeSggaW50IGZvcmNlX3N0YXR1c19hcmcsCisgICAgICAgICAgICAgICAgICAgaW50IHJlZ2lzdGVyX3B1YmxpY19rZXksCisgICAgICAgICAgICAgICAgICAgZGF0YV90ICprZXlfaW5wdXQsCisgICAgICAgICAgICAgICAgICAgZGF0YV90ICpkYXRhX2lucHV0LAorICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqc2lnbmF0dXJlX2lucHV0LAorICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9zdGF0dXNfYXJnICkKK3sKKyAgICBwc2Ffc3RhdHVzX3QgZm9yY2Vfc3RhdHVzID0gZm9yY2Vfc3RhdHVzX2FyZzsKKyAgICBwc2Ffc3RhdHVzX3QgZXhwZWN0ZWRfc3RhdHVzID0gZXhwZWN0ZWRfc3RhdHVzX2FyZzsKKyAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOworICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBQU0FfQUxHX0RFVEVSTUlOSVNUSUNfRUNEU0EoIFBTQV9BTEdfU0hBXzI1NiApOworICAgIHBzYV9zdGF0dXNfdCBhY3R1YWxfc3RhdHVzOworICAgIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV92ZXJpZnlfaG9va3MgPSB0ZXN0X2RyaXZlcl9zaWduYXR1cmVfaG9va3NfaW5pdCgpOworCisgICAgUFNBX0FTU0VSVCggcHNhX2NyeXB0b19pbml0KCApICk7CisgICAgaWYoIHJlZ2lzdGVyX3B1YmxpY19rZXkgKQorICAgIHsKKyAgICAgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgUFNBX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKCBQU0FfRUNDX0NVUlZFX1NFQ1BfUjEgKSApOworICAgICAgICBwc2Ffc2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVVNBR0VfVkVSSUZZX0hBU0ggKTsKKyAgICAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CisgICAgICAgIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleV9pbnB1dC0+eCwga2V5X2lucHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgIFBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoIFBTQV9FQ0NfQ1VSVkVfU0VDUF9SMSApICk7CisgICAgICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSCApOworICAgICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCBhbGcgKTsKKyAgICAgICAgcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAga2V5X2lucHV0LT54LCBrZXlfaW5wdXQtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUgKTsKKyAgICB9CisKKyAgICB0ZXN0X2RyaXZlcl9zaWduYXR1cmVfdmVyaWZ5X2hvb2tzLmZvcmNlZF9zdGF0dXMgPSBmb3JjZV9zdGF0dXM7CisKKyAgICBhY3R1YWxfc3RhdHVzID0gcHNhX3ZlcmlmeV9oYXNoKCBoYW5kbGUsIGFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2lucHV0LT54LCBkYXRhX2lucHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlX2lucHV0LT54LCBzaWduYXR1cmVfaW5wdXQtPmxlbiApOworICAgIFRFU1RfRVFVQUwoIGFjdHVhbF9zdGF0dXMsIGV4cGVjdGVkX3N0YXR1cyApOworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV92ZXJpZnlfaG9va3MuaGl0cywgMSApOworCitleGl0OgorICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIFBTQV9ET05FKCApOworICAgIHRlc3RfZHJpdmVyX3NpZ25hdHVyZV92ZXJpZnlfaG9va3MgPSB0ZXN0X2RyaXZlcl9zaWduYXR1cmVfaG9va3NfaW5pdCgpOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRCAqLwordm9pZCBnZW5lcmF0ZV9rZXkoIGludCBmb3JjZV9zdGF0dXNfYXJnLAorICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqZmFrZV9vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX3N0YXR1c19hcmcgKQoreworICAgIHBzYV9zdGF0dXNfdCBmb3JjZV9zdGF0dXMgPSBmb3JjZV9zdGF0dXNfYXJnOworICAgIHBzYV9zdGF0dXNfdCBleHBlY3RlZF9zdGF0dXMgPSBleHBlY3RlZF9zdGF0dXNfYXJnOworICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CisgICAgcHNhX2FsZ29yaXRobV90IGFsZyA9IFBTQV9BTEdfRUNEU0EoIFBTQV9BTEdfU0hBXzI1NiApOworICAgIGNvbnN0IHVpbnQ4X3QgKmV4cGVjdGVkX291dHB1dCA9IE5VTEw7CisgICAgc2l6ZV90IGV4cGVjdGVkX291dHB1dF9sZW5ndGggPSAwOworICAgIHBzYV9zdGF0dXNfdCBhY3R1YWxfc3RhdHVzOworICAgIHVpbnQ4X3QgYWN0dWFsX291dHB1dFtQU0FfS0VZX0VYUE9SVF9FQ0NfS0VZX1BBSVJfTUFYX1NJWkUoMjU2KV0gPSB7MH07CisgICAgc2l6ZV90IGFjdHVhbF9vdXRwdXRfbGVuZ3RoOworICAgIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzID0gdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3NfaW5pdCgpOworCisgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgUFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUiggUFNBX0VDQ19DVVJWRV9TRUNQX1IxICkgKTsKKyAgICBwc2Ffc2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcywgMjU2ICk7CisgICAgcHNhX3NldF9rZXlfdXNhZ2VfZmxhZ3MoICZhdHRyaWJ1dGVzLCBQU0FfS0VZX1VTQUdFX1NJR05fSEFTSCB8IFBTQV9LRVlfVVNBR0VfRVhQT1JUICk7CisgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CisKKyAgICBpZiggZmFrZV9vdXRwdXQtPmxlbiA+IDAgKQorICAgIHsKKyAgICAgICAgZXhwZWN0ZWRfb3V0cHV0ID0gdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX291dHB1dCA9IGZha2Vfb3V0cHV0LT54OworICAgICAgICBleHBlY3RlZF9vdXRwdXRfbGVuZ3RoID0gdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGggPQorICAgICAgICAgICAgZmFrZV9vdXRwdXQtPmxlbjsKKyAgICB9CisKKyAgICB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5oaXRzID0gMDsKKyAgICB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5mb3JjZWRfc3RhdHVzID0gZm9yY2Vfc3RhdHVzOworCisgICAgUFNBX0FTU0VSVCggcHNhX2NyeXB0b19pbml0KCApICk7CisKKyAgICBhY3R1YWxfc3RhdHVzID0gcHNhX2dlbmVyYXRlX2tleSggJmF0dHJpYnV0ZXMsICZoYW5kbGUgKTsKKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5oaXRzLCAxICk7CisgICAgVEVTVF9FUVVBTCggYWN0dWFsX3N0YXR1cywgZXhwZWN0ZWRfc3RhdHVzICk7CisKKyAgICBpZiggYWN0dWFsX3N0YXR1cyA9PSBQU0FfU1VDQ0VTUyApCisgICAgeworICAgICAgICBwc2FfZXhwb3J0X2tleSggaGFuZGxlLCBhY3R1YWxfb3V0cHV0LCBzaXplb2YoYWN0dWFsX291dHB1dCksICZhY3R1YWxfb3V0cHV0X2xlbmd0aCApOworCisgICAgICAgIGlmKCBmYWtlX291dHB1dC0+bGVuID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9DT01QQVJFKCBhY3R1YWxfb3V0cHV0LCBhY3R1YWxfb3V0cHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXQsIGV4cGVjdGVkX291dHB1dF9sZW5ndGggKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCB6ZXJvZXMgPSAwOworICAgICAgICAgICAgZm9yKCBzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoYWN0dWFsX291dHB1dCk7IGkrKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIGFjdHVhbF9vdXRwdXRbaV0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgemVyb2VzKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBURVNUX0FTU0VSVCggemVyb2VzICE9IHNpemVvZihhY3R1YWxfb3V0cHV0KSApOworICAgICAgICB9CisgICAgfQorZXhpdDoKKyAgICBwc2FfcmVzZXRfa2V5X2F0dHJpYnV0ZXMoICZhdHRyaWJ1dGVzICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBQU0FfRE9ORSggKTsKKyAgICB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcyA9IHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzX2luaXQoKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfRFBfU0VDUDI1NlIxX0VOQUJMRUQgKi8KK3ZvaWQgdmFsaWRhdGVfa2V5KCBpbnQgZm9yY2Vfc3RhdHVzX2FyZywKKyAgICAgICAgICAgICAgICAgICBpbnQga2V5X3R5cGVfYXJnLAorICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5X2lucHV0LAorICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9zdGF0dXNfYXJnICkKK3sKKyAgICBwc2Ffc3RhdHVzX3QgZm9yY2Vfc3RhdHVzID0gZm9yY2Vfc3RhdHVzX2FyZzsKKyAgICBwc2Ffc3RhdHVzX3QgZXhwZWN0ZWRfc3RhdHVzID0gZXhwZWN0ZWRfc3RhdHVzX2FyZzsKKyAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKKyAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOworICAgIHBzYV9zdGF0dXNfdCBhY3R1YWxfc3RhdHVzOworICAgIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzID0gdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3NfaW5pdCgpOworCisgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAga2V5X3R5cGUgKTsKKyAgICBwc2Ffc2V0X2tleV9iaXRzKCAmYXR0cmlidXRlcywgMCApOworICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywgUFNBX0tFWV9VU0FHRV9FWFBPUlQgKTsKKworICAgIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzLmZvcmNlZF9zdGF0dXMgPSBmb3JjZV9zdGF0dXM7CisKKyAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKKworICAgIGFjdHVhbF9zdGF0dXMgPSBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9pbnB1dC0+eCwga2V5X2lucHV0LT5sZW4sICZoYW5kbGUgKTsKKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9rZXlfbWFuYWdlbWVudF9ob29rcy5oaXRzLCAxICk7CisgICAgVEVTVF9FUVVBTCggYWN0dWFsX3N0YXR1cywgZXhwZWN0ZWRfc3RhdHVzICk7CitleGl0OgorICAgIHBzYV9yZXNldF9rZXlfYXR0cmlidXRlcyggJmF0dHJpYnV0ZXMgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIFBTQV9ET05FKCApOworICAgIHRlc3RfZHJpdmVyX2tleV9tYW5hZ2VtZW50X2hvb2tzID0gdGVzdF9kcml2ZXJfa2V5X21hbmFnZW1lbnRfaG9va3NfaW5pdCgpOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBjaXBoZXJfZW5jcnlwdCggaW50IGFsZ19hcmcsIGludCBrZXlfdHlwZV9hcmcsCisgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmtleSwgZGF0YV90ICppdiwKKyAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqaW5wdXQsIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgaW50IG1vY2tfb3V0cHV0X2FyZywKKyAgICAgICAgICAgICAgICAgICAgIGludCBmb3JjZV9zdGF0dXNfYXJnLAorICAgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX3N0YXR1c19hcmcgKQoreworICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKKyAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOworICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOworICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOworICAgIHBzYV9zdGF0dXNfdCBleHBlY3RlZF9zdGF0dXMgPSBleHBlY3RlZF9zdGF0dXNfYXJnOworICAgIHBzYV9zdGF0dXNfdCBmb3JjZV9zdGF0dXMgPSBmb3JjZV9zdGF0dXNfYXJnOworICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCA9IE5VTEw7CisgICAgc2l6ZV90IG91dHB1dF9idWZmZXJfc2l6ZSA9IDA7CisgICAgc2l6ZV90IGZ1bmN0aW9uX291dHB1dF9sZW5ndGggPSAwOworICAgIHNpemVfdCB0b3RhbF9vdXRwdXRfbGVuZ3RoID0gMDsKKyAgICBwc2FfY2lwaGVyX29wZXJhdGlvbl90IG9wZXJhdGlvbiA9IFBTQV9DSVBIRVJfT1BFUkFUSU9OX0lOSVQ7CisgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcyA9IHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rc19pbml0KCk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgPSBmb3JjZV9zdGF0dXM7CisKKyAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKKworICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywgUFNBX0tFWV9VU0FHRV9FTkNSWVBUICk7CisgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CisgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CisKKyAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleS0+eCwga2V5LT5sZW4sICZoYW5kbGUgKSApOworCisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAxICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOworCisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sIGl2LT54LCBpdi0+bGVuICkgKTsKKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgKCBmb3JjZV9zdGF0dXMgPT0gUFNBX1NVQ0NFU1MgPyAxIDogMCApICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOworCisgICAgb3V0cHV0X2J1ZmZlcl9zaXplID0gKCAoc2l6ZV90KSBpbnB1dC0+bGVuICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9CTE9DS19DSVBIRVJfQkxPQ0tfU0laRSgga2V5X3R5cGUgKSApOworICAgIEFTU0VSVF9BTExPQyggb3V0cHV0LCBvdXRwdXRfYnVmZmVyX3NpemUgKTsKKworICAgIGlmKCBtb2NrX291dHB1dF9hcmcgKQorICAgIHsKKyAgICAgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9vdXRwdXQgPSBleHBlY3RlZF9vdXRwdXQtPng7CisgICAgICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfb3V0cHV0X2xlbmd0aCA9IGV4cGVjdGVkX291dHB1dC0+bGVuOworICAgIH0KKworICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfdXBkYXRlKCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC0+eCwgaW5wdXQtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBvdXRwdXRfYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdW5jdGlvbl9vdXRwdXRfbGVuZ3RoICkgKTsKKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgKCBmb3JjZV9zdGF0dXMgPT0gUFNBX1NVQ0NFU1MgPyAxIDogMCApICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOworCisgICAgaWYoIG1vY2tfb3V0cHV0X2FyZyApCisgICAgeworICAgICAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX291dHB1dCA9IE5VTEw7CisgICAgICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfb3V0cHV0X2xlbmd0aCA9IDA7CisgICAgfQorCisgICAgdG90YWxfb3V0cHV0X2xlbmd0aCArPSBmdW5jdGlvbl9vdXRwdXRfbGVuZ3RoOworICAgIHN0YXR1cyA9IHBzYV9jaXBoZXJfZmluaXNoKCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKyB0b3RhbF9vdXRwdXRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmZmVyX3NpemUgLSB0b3RhbF9vdXRwdXRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnVuY3Rpb25fb3V0cHV0X2xlbmd0aCApOworICAgIC8qIEZpbmlzaCB3aWxsIGhhdmUgY2FsbGVkIGFib3J0IGFzIHdlbGwsIHNvIGV4cGVjdGluZyB0d28gaGl0cyBoZXJlICovCisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsICggZm9yY2Vfc3RhdHVzID09IFBTQV9TVUNDRVNTID8gMiA6IDAgKSApOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKKworICAgIHRvdGFsX291dHB1dF9sZW5ndGggKz0gZnVuY3Rpb25fb3V0cHV0X2xlbmd0aDsKKworICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgZXhwZWN0ZWRfc3RhdHVzICk7CisgICAgaWYoIGV4cGVjdGVkX3N0YXR1cyA9PSBQU0FfU1VDQ0VTUyApCisgICAgeworICAgICAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICkgKTsKKyAgICAgICAgLy8gZHJpdmVyIGZ1bmN0aW9uIHNob3VsZCd2ZSBiZWVuIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBmaW5pc2goKSBjb3JlIHJvdXRpbmUKKyAgICAgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDAgKTsKKyAgICAgICAgQVNTRVJUX0NPTVBBUkUoIGV4cGVjdGVkX291dHB1dC0+eCwgZXhwZWN0ZWRfb3V0cHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIHRvdGFsX291dHB1dF9sZW5ndGggKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcHNhX2NpcGhlcl9hYm9ydCggJm9wZXJhdGlvbiApOworICAgIG1iZWR0bHNfZnJlZSggb3V0cHV0ICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBoYW5kbGUgKTsKKyAgICBQU0FfRE9ORSggKTsKKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MgPSB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3NfaW5pdCgpOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSAqLwordm9pZCBjaXBoZXJfZW5jcnlwdF9tdWx0aXBhcnQoIGludCBhbGdfYXJnLCBpbnQga2V5X3R5cGVfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5LCBkYXRhX3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpcnN0X3BhcnRfc2l6ZV9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG91dHB1dDFfbGVuZ3RoX2FyZywgaW50IG91dHB1dDJfbGVuZ3RoX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmV4cGVjdGVkX291dHB1dCApCit7CisgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOworICAgIHBzYV9rZXlfdHlwZV90IGtleV90eXBlID0ga2V5X3R5cGVfYXJnOworICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOworICAgIHNpemVfdCBmaXJzdF9wYXJ0X3NpemUgPSBmaXJzdF9wYXJ0X3NpemVfYXJnOworICAgIHNpemVfdCBvdXRwdXQxX2xlbmd0aCA9IG91dHB1dDFfbGVuZ3RoX2FyZzsKKyAgICBzaXplX3Qgb3V0cHV0Ml9sZW5ndGggPSBvdXRwdXQyX2xlbmd0aF9hcmc7CisgICAgdW5zaWduZWQgY2hhciAqb3V0cHV0ID0gTlVMTDsKKyAgICBzaXplX3Qgb3V0cHV0X2J1ZmZlcl9zaXplID0gMDsKKyAgICBzaXplX3QgZnVuY3Rpb25fb3V0cHV0X2xlbmd0aCA9IDA7CisgICAgc2l6ZV90IHRvdGFsX291dHB1dF9sZW5ndGggPSAwOworICAgIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uID0gUFNBX0NJUEhFUl9PUEVSQVRJT05fSU5JVDsKKyAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzID0gdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzX2luaXQoKTsKKworICAgIFBTQV9BU1NFUlQoIHBzYV9jcnlwdG9faW5pdCggKSApOworCisgICAgcHNhX3NldF9rZXlfdXNhZ2VfZmxhZ3MoICZhdHRyaWJ1dGVzLCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQgKTsKKyAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzLCBhbGcgKTsKKyAgICBwc2Ffc2V0X2tleV90eXBlKCAmYXR0cmlidXRlcywga2V5X3R5cGUgKTsKKworICAgIFBTQV9BU1NFUlQoIHBzYV9pbXBvcnRfa2V5KCAmYXR0cmlidXRlcywga2V5LT54LCBrZXktPmxlbiwgJmhhbmRsZSApICk7CisKKyAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApICk7CisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDEgKTsKKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cyA9IDA7CisKKyAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX3NldF9pdiggJm9wZXJhdGlvbiwgaXYtPngsIGl2LT5sZW4gKSApOworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAxICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOworCisgICAgb3V0cHV0X2J1ZmZlcl9zaXplID0gKCAoc2l6ZV90KSBpbnB1dC0+bGVuICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9CTE9DS19DSVBIRVJfQkxPQ0tfU0laRSgga2V5X3R5cGUgKSApOworICAgIEFTU0VSVF9BTExPQyggb3V0cHV0LCBvdXRwdXRfYnVmZmVyX3NpemUgKTsKKworICAgIFRFU1RfQVNTRVJUKCBmaXJzdF9wYXJ0X3NpemUgPD0gaW5wdXQtPmxlbiApOworICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfdXBkYXRlKCAmb3BlcmF0aW9uLCBpbnB1dC0+eCwgZmlyc3RfcGFydF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIG91dHB1dF9idWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ1bmN0aW9uX291dHB1dF9sZW5ndGggKSApOworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAxICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOworCisgICAgVEVTVF9BU1NFUlQoIGZ1bmN0aW9uX291dHB1dF9sZW5ndGggPT0gb3V0cHV0MV9sZW5ndGggKTsKKyAgICB0b3RhbF9vdXRwdXRfbGVuZ3RoICs9IGZ1bmN0aW9uX291dHB1dF9sZW5ndGg7CisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl91cGRhdGUoICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LT54ICsgZmlyc3RfcGFydF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC0+bGVuIC0gZmlyc3RfcGFydF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKyB0b3RhbF9vdXRwdXRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmZmVyX3NpemUgLSB0b3RhbF9vdXRwdXRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnVuY3Rpb25fb3V0cHV0X2xlbmd0aCApICk7CisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDEgKTsKKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cyA9IDA7CisgICAgVEVTVF9BU1NFUlQoIGZ1bmN0aW9uX291dHB1dF9sZW5ndGggPT0gb3V0cHV0Ml9sZW5ndGggKTsKKyAgICB0b3RhbF9vdXRwdXRfbGVuZ3RoICs9IGZ1bmN0aW9uX291dHB1dF9sZW5ndGg7CisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9maW5pc2goICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArIHRvdGFsX291dHB1dF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWZmZXJfc2l6ZSAtIHRvdGFsX291dHB1dF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdW5jdGlvbl9vdXRwdXRfbGVuZ3RoICkgKTsKKyAgICAvKiBGaW5pc2ggd2lsbCBoYXZlIGNhbGxlZCBhYm9ydCBhcyB3ZWxsLCBzbyBleHBlY3RpbmcgdHdvIGhpdHMgaGVyZSAqLworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAyICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwIDsKKyAgICB0b3RhbF9vdXRwdXRfbGVuZ3RoICs9IGZ1bmN0aW9uX291dHB1dF9sZW5ndGg7CisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9hYm9ydCggJm9wZXJhdGlvbiApICk7CisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDAgKTsKKworICAgIEFTU0VSVF9DT01QQVJFKCBleHBlY3RlZF9vdXRwdXQtPngsIGV4cGVjdGVkX291dHB1dC0+bGVuLAorICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIHRvdGFsX291dHB1dF9sZW5ndGggKTsKKworZXhpdDoKKyAgICBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICk7CisgICAgbWJlZHRsc19mcmVlKCBvdXRwdXQgKTsKKyAgICBwc2FfZGVzdHJveV9rZXkoIGhhbmRsZSApOworICAgIFBTQV9ET05FKCApOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcyA9IHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rc19pbml0KCk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFICovCit2b2lkIGNpcGhlcl9kZWNyeXB0X211bHRpcGFydCggaW50IGFsZ19hcmcsIGludCBrZXlfdHlwZV9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICprZXksIGRhdGFfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlyc3RfcGFydF9zaXplX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3V0cHV0MV9sZW5ndGhfYXJnLCBpbnQgb3V0cHV0Ml9sZW5ndGhfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqZXhwZWN0ZWRfb3V0cHV0ICkKK3sKKyAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisKKyAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gYWxnX2FyZzsKKyAgICBzaXplX3QgZmlyc3RfcGFydF9zaXplID0gZmlyc3RfcGFydF9zaXplX2FyZzsKKyAgICBzaXplX3Qgb3V0cHV0MV9sZW5ndGggPSBvdXRwdXQxX2xlbmd0aF9hcmc7CisgICAgc2l6ZV90IG91dHB1dDJfbGVuZ3RoID0gb3V0cHV0Ml9sZW5ndGhfYXJnOworICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dCA9IE5VTEw7CisgICAgc2l6ZV90IG91dHB1dF9idWZmZXJfc2l6ZSA9IDA7CisgICAgc2l6ZV90IGZ1bmN0aW9uX291dHB1dF9sZW5ndGggPSAwOworICAgIHNpemVfdCB0b3RhbF9vdXRwdXRfbGVuZ3RoID0gMDsKKyAgICBwc2FfY2lwaGVyX29wZXJhdGlvbl90IG9wZXJhdGlvbiA9IFBTQV9DSVBIRVJfT1BFUkFUSU9OX0lOSVQ7CisgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcyA9IHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rc19pbml0KCk7CisKKyAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKKworICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywgUFNBX0tFWV9VU0FHRV9ERUNSWVBUICk7CisgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywgYWxnICk7CisgICAgcHNhX3NldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMsIGtleV90eXBlICk7CisKKyAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleS0+eCwga2V5LT5sZW4sICZoYW5kbGUgKSApOworCisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKSApOworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAxICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOworCisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sIGl2LT54LCBpdi0+bGVuICkgKTsKKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgMSApOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKKworICAgIG91dHB1dF9idWZmZXJfc2l6ZSA9ICggKHNpemVfdCkgaW5wdXQtPmxlbiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQkxPQ0tfQ0lQSEVSX0JMT0NLX1NJWkUoIGtleV90eXBlICkgKTsKKyAgICBBU1NFUlRfQUxMT0MoIG91dHB1dCwgb3V0cHV0X2J1ZmZlcl9zaXplICk7CisKKyAgICBURVNUX0FTU0VSVCggZmlyc3RfcGFydF9zaXplIDw9IGlucHV0LT5sZW4gKTsKKyAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX3VwZGF0ZSggJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtPngsIGZpcnN0X3BhcnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBvdXRwdXRfYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdW5jdGlvbl9vdXRwdXRfbGVuZ3RoICkgKTsKKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgMSApOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKKworICAgIFRFU1RfQVNTRVJUKCBmdW5jdGlvbl9vdXRwdXRfbGVuZ3RoID09IG91dHB1dDFfbGVuZ3RoICk7CisgICAgdG90YWxfb3V0cHV0X2xlbmd0aCArPSBmdW5jdGlvbl9vdXRwdXRfbGVuZ3RoOworICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfdXBkYXRlKCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC0+eCArIGZpcnN0X3BhcnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtPmxlbiAtIGZpcnN0X3BhcnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICsgdG90YWxfb3V0cHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1ZmZlcl9zaXplIC0gdG90YWxfb3V0cHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ1bmN0aW9uX291dHB1dF9sZW5ndGggKSApOworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAxICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOworCisgICAgVEVTVF9BU1NFUlQoIGZ1bmN0aW9uX291dHB1dF9sZW5ndGggPT0gb3V0cHV0Ml9sZW5ndGggKTsKKyAgICB0b3RhbF9vdXRwdXRfbGVuZ3RoICs9IGZ1bmN0aW9uX291dHB1dF9sZW5ndGg7CisgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9maW5pc2goICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArIHRvdGFsX291dHB1dF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWZmZXJfc2l6ZSAtIHRvdGFsX291dHB1dF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdW5jdGlvbl9vdXRwdXRfbGVuZ3RoICkgKTsKKyAgICAvKiBGaW5pc2ggd2lsbCBoYXZlIGNhbGxlZCBhYm9ydCBhcyB3ZWxsLCBzbyBleHBlY3RpbmcgdHdvIGhpdHMgaGVyZSAqLworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAyICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOworICAgIHRvdGFsX291dHB1dF9sZW5ndGggKz0gZnVuY3Rpb25fb3V0cHV0X2xlbmd0aDsKKyAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICkgKTsKKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgMCApOworCisgICAgQVNTRVJUX0NPTVBBUkUoIGV4cGVjdGVkX291dHB1dC0+eCwgZXhwZWN0ZWRfb3V0cHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgdG90YWxfb3V0cHV0X2xlbmd0aCApOworCitleGl0OgorICAgIHBzYV9jaXBoZXJfYWJvcnQoICZvcGVyYXRpb24gKTsKKyAgICBtYmVkdGxzX2ZyZWUoIG91dHB1dCApOworICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgUFNBX0RPTkUoICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzID0gdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzX2luaXQoKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgY2lwaGVyX2RlY3J5cHQoIGludCBhbGdfYXJnLCBpbnQga2V5X3R5cGVfYXJnLAorICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICprZXksIGRhdGFfdCAqaXYsCisgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmlucHV0LCBkYXRhX3QgKmV4cGVjdGVkX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBtb2NrX291dHB1dF9hcmcsCisgICAgICAgICAgICAgICAgICAgICBpbnQgZm9yY2Vfc3RhdHVzX2FyZywKKyAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9zdGF0dXNfYXJnICkKK3sKKyAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgcHNhX3N0YXR1c190IHN0YXR1czsKKyAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gYWxnX2FyZzsKKyAgICBwc2Ffc3RhdHVzX3QgZXhwZWN0ZWRfc3RhdHVzID0gZXhwZWN0ZWRfc3RhdHVzX2FyZzsKKyAgICBwc2Ffc3RhdHVzX3QgZm9yY2Vfc3RhdHVzID0gZm9yY2Vfc3RhdHVzX2FyZzsKKyAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgPSBOVUxMOworICAgIHNpemVfdCBvdXRwdXRfYnVmZmVyX3NpemUgPSAwOworICAgIHNpemVfdCBmdW5jdGlvbl9vdXRwdXRfbGVuZ3RoID0gMDsKKyAgICBzaXplX3QgdG90YWxfb3V0cHV0X2xlbmd0aCA9IDA7CisgICAgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCBvcGVyYXRpb24gPSBQU0FfQ0lQSEVSX09QRVJBVElPTl9JTklUOworICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MgPSB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3NfaW5pdCgpOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzID0gZm9yY2Vfc3RhdHVzOworCisgICAgUFNBX0FTU0VSVCggcHNhX2NyeXB0b19pbml0KCApICk7CisKKyAgICBwc2Ffc2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVVNBR0VfREVDUllQVCApOworICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIGFsZyApOworICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOworCisgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXktPngsIGtleS0+bGVuLCAmaGFuZGxlICkgKTsKKworICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICkgKTsKKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgMSApOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKKworICAgIFBTQV9BU1NFUlQoIHBzYV9jaXBoZXJfc2V0X2l2KCAmb3BlcmF0aW9uLCBpdi0+eCwgaXYtPmxlbiApICk7CisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsICggZm9yY2Vfc3RhdHVzID09IFBTQV9TVUNDRVNTID8gMSA6IDAgKSApOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKKworICAgIG91dHB1dF9idWZmZXJfc2l6ZSA9ICggKHNpemVfdCkgaW5wdXQtPmxlbiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQkxPQ0tfQ0lQSEVSX0JMT0NLX1NJWkUoIGtleV90eXBlICkgKTsKKyAgICBBU1NFUlRfQUxMT0MoIG91dHB1dCwgb3V0cHV0X2J1ZmZlcl9zaXplICk7CisKKyAgICBpZiggbW9ja19vdXRwdXRfYXJnICkKKyAgICB7CisgICAgICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfb3V0cHV0ID0gZXhwZWN0ZWRfb3V0cHV0LT54OworICAgICAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGggPSBleHBlY3RlZF9vdXRwdXQtPmxlbjsKKyAgICB9CisKKyAgICBQU0FfQVNTRVJUKCBwc2FfY2lwaGVyX3VwZGF0ZSggJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtPngsIGlucHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0X2J1ZmZlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnVuY3Rpb25fb3V0cHV0X2xlbmd0aCApICk7CisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsICggZm9yY2Vfc3RhdHVzID09IFBTQV9TVUNDRVNTID8gMSA6IDAgKSApOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKKworICAgIGlmKCBtb2NrX291dHB1dF9hcmcgKQorICAgIHsKKyAgICAgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9vdXRwdXQgPSBOVUxMOworICAgICAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX291dHB1dF9sZW5ndGggPSAwOworICAgIH0KKworICAgIHRvdGFsX291dHB1dF9sZW5ndGggKz0gZnVuY3Rpb25fb3V0cHV0X2xlbmd0aDsKKyAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2ZpbmlzaCggJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICsgdG90YWxfb3V0cHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1ZmZlcl9zaXplIC0gdG90YWxfb3V0cHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ1bmN0aW9uX291dHB1dF9sZW5ndGggKTsKKyAgICAvKiBGaW5pc2ggd2lsbCBoYXZlIGNhbGxlZCBhYm9ydCBhcyB3ZWxsLCBzbyBleHBlY3RpbmcgdHdvIGhpdHMgaGVyZSAqLworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAoIGZvcmNlX3N0YXR1cyA9PSBQU0FfU1VDQ0VTUyA/IDIgOiAwICkgKTsKKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cyA9IDA7CisKKyAgICB0b3RhbF9vdXRwdXRfbGVuZ3RoICs9IGZ1bmN0aW9uX291dHB1dF9sZW5ndGg7CisgICAgVEVTVF9FUVVBTCggc3RhdHVzLCBleHBlY3RlZF9zdGF0dXMgKTsKKworICAgIGlmKCBleHBlY3RlZF9zdGF0dXMgPT0gUFNBX1NVQ0NFU1MgKQorICAgIHsKKyAgICAgICAgUFNBX0FTU0VSVCggcHNhX2NpcGhlcl9hYm9ydCggJm9wZXJhdGlvbiApICk7CisgICAgICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAwICk7CisgICAgICAgIEFTU0VSVF9DT01QQVJFKCBleHBlY3RlZF9vdXRwdXQtPngsIGV4cGVjdGVkX291dHB1dC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCB0b3RhbF9vdXRwdXRfbGVuZ3RoICk7CisgICAgfQorCitleGl0OgorICAgIHBzYV9jaXBoZXJfYWJvcnQoICZvcGVyYXRpb24gKTsKKyAgICBtYmVkdGxzX2ZyZWUoIG91dHB1dCApOworICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgUFNBX0RPTkUoICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzID0gdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzX2luaXQoKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgKi8KK3ZvaWQgY2lwaGVyX2VudHJ5X3BvaW50cyggaW50IGFsZ19hcmcsIGludCBrZXlfdHlwZV9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqa2V5LCBkYXRhX3QgKml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmlucHV0ICkKK3sKKyAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CisgICAgcHNhX3N0YXR1c190IHN0YXR1czsKKyAgICBwc2Ffa2V5X3R5cGVfdCBrZXlfdHlwZSA9IGtleV90eXBlX2FyZzsKKyAgICBwc2FfYWxnb3JpdGhtX3QgYWxnID0gYWxnX2FyZzsKKyAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQgPSBOVUxMOworICAgIHNpemVfdCBvdXRwdXRfYnVmZmVyX3NpemUgPSAwOworICAgIHNpemVfdCBmdW5jdGlvbl9vdXRwdXRfbGVuZ3RoID0gMDsKKyAgICBwc2FfY2lwaGVyX29wZXJhdGlvbl90IG9wZXJhdGlvbiA9IFBTQV9DSVBIRVJfT1BFUkFUSU9OX0lOSVQ7CisgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcyA9IHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rc19pbml0KCk7CisKKyAgICBBU1NFUlRfQUxMT0MoIG91dHB1dCwgaW5wdXQtPmxlbiArIDE2ICk7CisgICAgb3V0cHV0X2J1ZmZlcl9zaXplID0gaW5wdXQtPmxlbiArIDE2OworCisgICAgUFNBX0FTU0VSVCggcHNhX2NyeXB0b19pbml0KCApICk7CisKKyAgICBwc2Ffc2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCB8IFBTQV9LRVlfVVNBR0VfREVDUllQVCApOworICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMsIGFsZyApOworICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOworCisgICAgUFNBX0FTU0VSVCggcHNhX2ltcG9ydF9rZXkoICZhdHRyaWJ1dGVzLCBrZXktPngsIGtleS0+bGVuLCAmaGFuZGxlICkgKTsKKworICAgIC8qIFRlc3Qgc2V0dXAgY2FsbCwgZW5jcnlwdCAqLworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzID0gUFNBX0VSUk9SX0dFTkVSSUNfRVJST1I7CisgICAgc3RhdHVzID0gcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKTsKKyAgICAvKiBXaGVuIHNldHVwIGZhaWxzLCBpdCBzaG91bGRuJ3QgY2FsbCBhbnkgZnVydGhlciBlbnRyeSBwb2ludHMgKi8KKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgMSApOworICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgKTsKKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cyA9IDA7CisgICAgc3RhdHVzID0gcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sIGl2LT54LCBpdi0+bGVuICk7CisgICAgVEVTVF9FUVVBTCggc3RhdHVzLCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDAgKTsKKworICAgIC8qIFRlc3Qgc2V0dXAgY2FsbCBmYWlsdXJlLCBkZWNyeXB0ICovCisgICAgc3RhdHVzID0gcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwKCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBhbGcgKTsKKyAgICAvKiBXaGVuIHNldHVwIGZhaWxzLCBpdCBzaG91bGRuJ3QgY2FsbCBhbnkgZnVydGhlciBlbnRyeSBwb2ludHMgKi8KKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgMSApOworICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgKTsKKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cyA9IDA7CisgICAgc3RhdHVzID0gcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sIGl2LT54LCBpdi0+bGVuICk7CisgICAgVEVTVF9FUVVBTCggc3RhdHVzLCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDAgKTsKKworICAgIC8qIFRlc3QgSVYgc2V0dGluZyBmYWlsdXJlICovCisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgPSBQU0FfU1VDQ0VTUzsKKyAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApOworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAxICk7CisgICAgVEVTVF9FUVVBTCggc3RhdHVzLCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyApOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKKworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzID0gUFNBX0VSUk9SX0dFTkVSSUNfRVJST1I7CisgICAgc3RhdHVzID0gcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sIGl2LT54LCBpdi0+bGVuICk7CisgICAgLyogV2hlbiBzZXR0aW5nIHRoZSBJViBmYWlscywgaXQgc2hvdWxkIGNhbGwgYWJvcnQgdG9vICovCisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDIgKTsKKyAgICBURVNUX0VRVUFMKCBzdGF0dXMsIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICk7CisgICAgLyogRmFpbHVyZSBzaG91bGQgcHJldmVudCBmdXJ0aGVyIG9wZXJhdGlvbnMgZnJvbSBleGVjdXRpbmcgb24gdGhlIGRyaXZlciAqLworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKKyAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX3VwZGF0ZSggJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtPngsIGlucHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0X2J1ZmZlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnVuY3Rpb25fb3V0cHV0X2xlbmd0aCApOworICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSApOworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAwICk7CisgICAgcHNhX2NpcGhlcl9hYm9ydCggJm9wZXJhdGlvbiApOworCisgICAgLyogVGVzdCBJViBnZW5lcmF0aW9uIGZhaWx1cmUgKi8KKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyA9IFBTQV9TVUNDRVNTOworICAgIHN0YXR1cyA9IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICk7CisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDEgKTsKKyAgICBURVNUX0VRVUFMKCBzdGF0dXMsIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOworCisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgPSBQU0FfRVJST1JfR0VORVJJQ19FUlJPUjsKKyAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2dlbmVyYXRlX2l2KCAmb3BlcmF0aW9uLCBvdXRwdXQsIDE2LCAmZnVuY3Rpb25fb3V0cHV0X2xlbmd0aCApOworICAgIC8qIFdoZW4gZ2VuZXJhdGluZyB0aGUgSVYgZmFpbHMsIGl0IHNob3VsZCBjYWxsIGFib3J0IHRvbyAqLworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAyICk7CisgICAgVEVTVF9FUVVBTCggc3RhdHVzLCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyApOworICAgIC8qIEZhaWx1cmUgc2hvdWxkIHByZXZlbnQgZnVydGhlciBvcGVyYXRpb25zIGZyb20gZXhlY3V0aW5nIG9uIHRoZSBkcml2ZXIgKi8KKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cyA9IDA7CisgICAgc3RhdHVzID0gcHNhX2NpcGhlcl91cGRhdGUoICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LT54LCBpbnB1dC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIG91dHB1dF9idWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ1bmN0aW9uX291dHB1dF9sZW5ndGggKTsKKyAgICBURVNUX0VRVUFMKCBzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUgKTsKKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgMCApOworICAgIHBzYV9jaXBoZXJfYWJvcnQoICZvcGVyYXRpb24gKTsKKworICAgIC8qIFRlc3QgdXBkYXRlIGZhaWx1cmUgKi8KKyAgICB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyA9IFBTQV9TVUNDRVNTOworICAgIHN0YXR1cyA9IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCggJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgYWxnICk7CisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDEgKTsKKyAgICBURVNUX0VRVUFMKCBzdGF0dXMsIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOworCisgICAgc3RhdHVzID0gcHNhX2NpcGhlcl9zZXRfaXYoICZvcGVyYXRpb24sIGl2LT54LCBpdi0+bGVuICk7CisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDEgKTsKKyAgICBURVNUX0VRVUFMKCBzdGF0dXMsIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOworCisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgPSBQU0FfRVJST1JfR0VORVJJQ19FUlJPUjsKKyAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX3VwZGF0ZSggJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtPngsIGlucHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0X2J1ZmZlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnVuY3Rpb25fb3V0cHV0X2xlbmd0aCApOworICAgIC8qIFdoZW4gdGhlIHVwZGF0ZSBjYWxsIGZhaWxzLCBpdCBzaG91bGQgY2FsbCBhYm9ydCB0b28gKi8KKyAgICBURVNUX0VRVUFMKCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuaGl0cywgMiApOworICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgKTsKKyAgICAvKiBGYWlsdXJlIHNob3VsZCBwcmV2ZW50IGZ1cnRoZXIgb3BlcmF0aW9ucyBmcm9tIGV4ZWN1dGluZyBvbiB0aGUgZHJpdmVyICovCisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOworICAgIHN0YXR1cyA9IHBzYV9jaXBoZXJfdXBkYXRlKCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC0+eCwgaW5wdXQtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBvdXRwdXRfYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdW5jdGlvbl9vdXRwdXRfbGVuZ3RoICk7CisgICAgVEVTVF9FUVVBTCggc3RhdHVzLCBQU0FfRVJST1JfQkFEX1NUQVRFICk7CisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDAgKTsKKyAgICBwc2FfY2lwaGVyX2Fib3J0KCAmb3BlcmF0aW9uICk7CisKKyAgICAvKiBUZXN0IGZpbmlzaCBmYWlsdXJlICovCisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgPSBQU0FfU1VDQ0VTUzsKKyAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAoICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGFsZyApOworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAxICk7CisgICAgVEVTVF9FUVVBTCggc3RhdHVzLCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyApOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKKworICAgIHN0YXR1cyA9IHBzYV9jaXBoZXJfc2V0X2l2KCAmb3BlcmF0aW9uLCBpdi0+eCwgaXYtPmxlbiApOworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAxICk7CisgICAgVEVTVF9FUVVBTCggc3RhdHVzLCB0ZXN0X2RyaXZlcl9jaXBoZXJfaG9va3MuZm9yY2VkX3N0YXR1cyApOworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKKworICAgIHN0YXR1cyA9IHBzYV9jaXBoZXJfdXBkYXRlKCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC0+eCwgaW5wdXQtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBvdXRwdXRfYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdW5jdGlvbl9vdXRwdXRfbGVuZ3RoICk7CisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDEgKTsKKyAgICBURVNUX0VRVUFMKCBzdGF0dXMsIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMgPSAwOworCisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmZvcmNlZF9zdGF0dXMgPSBQU0FfRVJST1JfR0VORVJJQ19FUlJPUjsKKyAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX2ZpbmlzaCggJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICsgZnVuY3Rpb25fb3V0cHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1ZmZlcl9zaXplIC0gZnVuY3Rpb25fb3V0cHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ1bmN0aW9uX291dHB1dF9sZW5ndGggKTsKKyAgICAvKiBXaGVuIHRoZSBmaW5pc2ggY2FsbCBmYWlscywgaXQgc2hvdWxkIGNhbGwgYWJvcnQgdG9vICovCisgICAgVEVTVF9FUVVBTCggdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzLmhpdHMsIDIgKTsKKyAgICBURVNUX0VRVUFMKCBzdGF0dXMsIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5mb3JjZWRfc3RhdHVzICk7CisgICAgLyogRmFpbHVyZSBzaG91bGQgcHJldmVudCBmdXJ0aGVyIG9wZXJhdGlvbnMgZnJvbSBleGVjdXRpbmcgb24gdGhlIGRyaXZlciAqLworICAgIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzID0gMDsKKyAgICBzdGF0dXMgPSBwc2FfY2lwaGVyX3VwZGF0ZSggJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtPngsIGlucHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0X2J1ZmZlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnVuY3Rpb25fb3V0cHV0X2xlbmd0aCApOworICAgIFRFU1RfRVFVQUwoIHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSApOworICAgIFRFU1RfRVFVQUwoIHRlc3RfZHJpdmVyX2NpcGhlcl9ob29rcy5oaXRzLCAwICk7CisgICAgcHNhX2NpcGhlcl9hYm9ydCggJm9wZXJhdGlvbiApOworCitleGl0OgorICAgIHBzYV9jaXBoZXJfYWJvcnQoICZvcGVyYXRpb24gKTsKKyAgICBtYmVkdGxzX2ZyZWUoIG91dHB1dCApOworICAgIHBzYV9kZXN0cm95X2tleSggaGFuZGxlICk7CisgICAgUFNBX0RPTkUoICk7CisgICAgdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzID0gdGVzdF9kcml2ZXJfY2lwaGVyX2hvb2tzX2luaXQoKTsKK30KKy8qIEVORF9DQVNFICovCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX21ldGFkYXRhLmRhdGEgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX21ldGFkYXRhLmRhdGEKaW5kZXggZjJiMTZlNC4uMTQ5NzlkMyAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19tZXRhZGF0YS5kYXRhCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fbWV0YWRhdGEuZGF0YQpAQCAtMTIyLDYgKzEyMiwxMCBAQAogZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9DOk1CRURUTFNfQ0lQSEVSX01PREVfT0ZCCiBjaXBoZXJfYWxnb3JpdGhtOlBTQV9BTEdfT0ZCOkFMR19JU19TVFJFQU1fQ0lQSEVSCiAKK0NpcGhlcjogRUNCLW5vcGFkCitkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX0MKK2NpcGhlcl9hbGdvcml0aG06UFNBX0FMR19FQ0JfTk9fUEFERElORzowCisKIENpcGhlcjogQ0JDLW5vcGFkCiBkZXBlbmRzX29uOk1CRURUTFNfQ0lQSEVSX0M6TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMKIGNpcGhlcl9hbGdvcml0aG06UFNBX0FMR19DQkNfTk9fUEFERElORzowCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3BlcnNpc3RlbnRfa2V5LmRhdGEgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3BlcnNpc3RlbnRfa2V5LmRhdGEKaW5kZXggZTBmYmEwMi4uOThkYjc0ZCAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19wZXJzaXN0ZW50X2tleS5kYXRhCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fcGVyc2lzdGVudF9rZXkuZGF0YQpAQCAtMSwyNiArMSwyNiBAQAogRm9ybWF0IGZvciBzdG9yYWdlOiBSU0EgcHJpdmF0ZSBrZXkKLWZvcm1hdF9zdG9yYWdlX2RhdGFfY2hlY2s6IjMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjoiNTA1MzQxMDA0YjQ1NTkwMDAwMDAwMDAwMDEwMDAwMDAwMTcwMDAwMDAxMDAwMDAwMDAwMDAwMTIwMDAwMDAxMDYyMDIwMDAwMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOlBTQV9LRVlfVVNBR0VfRVhQT1JUOlBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OOlBTQV9BTEdfQ0FURUdPUllfU0lHTgorZm9ybWF0X3N0b3JhZ2VfZGF0YV9jaGVjazoiMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOiI1MDUzNDEwMDRiNDU1OTAwMDAwMDAwMDAwMTAwMDAwMDAxNzAwMDA0MDEwMDAwMDAwMDAwMDAxMjAwMDAwMDEwNjIwMjAwMDAzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6MTAyNDpQU0FfS0VZX1VTQUdFX0VYUE9SVDpQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTjpQU0FfQUxHX0NBVEVHT1JZX1NJR04KKworRm9ybWF0IGZvciBzdG9yYWdlOiBBRVMtMTI4IGtleQorZm9ybWF0X3N0b3JhZ2VfZGF0YV9jaGVjazoiNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGYiOiI1MDUzNDEwMDRiNDU1OTAwMDAwMDAwMDAwMTAwMDAwMDAwMjQ4MDAwMDAwMzAwMDAwMjEwNDAwNjAwMDAwMDAwMTAwMDAwMDA0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZiI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfVFlQRV9BRVM6MTI4OlBTQV9LRVlfVVNBR0VfREVDUllQVCB8IFBTQV9LRVlfVVNBR0VfRU5DUllQVDpQU0FfQUxHX0dDTTowCiAKIFBhcnNlIHN0b3JhZ2U6IFJTQSBwcml2YXRlIGtleQotcGFyc2Vfc3RvcmFnZV9kYXRhX2NoZWNrOiI1MDUzNDEwMDRiNDU1OTAwMDAwMDAwMDAwMTAwMDAwMDAxNzAwMDAwMDEwMDAwMDAwMDAwMDAxMjAwMDAwMDEwNjIwMjAwMDAzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6IjMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUjpQU0FfS0VZX1VTQUdFX0VYUE9SVDpQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTjpQU0FfQUxHX0NBVEVHT1JZX1NJR046UFNBX1NVQ0NFU1MKK3BhcnNlX3N0b3JhZ2VfZGF0YV9jaGVjazoiNTA1MzQxMDA0YjQ1NTkwMDAwMDAwMDAwMDEwMDAwMDAwMTcwMDAwNDAxMDAwMDAwMDAwMDAwMTIwMDAwMDAxMDYyMDIwMDAwMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOiIzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6MTAyNDpQU0FfS0VZX1VTQUdFX0VYUE9SVDpQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTjpQU0FfQUxHX0NBVEVHT1JZX1NJR046UFNBX1NVQ0NFU1MKIAogUGFyc2Ugc3RvcmFnZTogQUVTLTEyOCBrZXkKLXBhcnNlX3N0b3JhZ2VfZGF0YV9jaGVjazoiNTA1MzQxMDA0YjQ1NTkwMDAwMDAwMDAwMDEwMDAwMDAwMDI0MDAwMDAwMDMwMDAwMDIxMDQwMDYwMDAwMDAwMDEwMDAwMDAwNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGYiOiI0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZiI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfVFlQRV9BRVM6UFNBX0tFWV9VU0FHRV9ERUNSWVBUIHwgUFNBX0tFWV9VU0FHRV9FTkNSWVBUOlBTQV9BTEdfR0NNOjA6UFNBX1NVQ0NFU1MKLQotUGFyc2Ugc3RvcmFnZTogdHlwZSBvdXQgb2YgcmFuZ2UKLXBhcnNlX3N0b3JhZ2VfZGF0YV9jaGVjazoiNTA1MzQxMDA0YjQ1NTkwMDAwMDAwMDAwMDEwMDAwMDAwMDI0MDEwMDAwMDMwMDAwMDIxMDQwMDYwMDAwMDAwMDEwMDAwMDAwNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGYiOiI0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZiI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjA6UFNBX0tFWV9VU0FHRV9ERUNSWVBUIHwgUFNBX0tFWV9VU0FHRV9FTkNSWVBUOlBTQV9BTEdfR0NNOjA6UFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQorcGFyc2Vfc3RvcmFnZV9kYXRhX2NoZWNrOiI1MDUzNDEwMDRiNDU1OTAwMDAwMDAwMDAwMTAwMDAwMDAwMjQ4MDAwMDAwMzAwMDAwMjEwNDAwNjAwMDAwMDAwMTAwMDAwMDA0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZiI6IjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmIjpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9UWVBFX0FFUzoxMjg6UFNBX0tFWV9VU0FHRV9ERUNSWVBUIHwgUFNBX0tFWV9VU0FHRV9FTkNSWVBUOlBTQV9BTEdfR0NNOjA6UFNBX1NVQ0NFU1MKIAogUGFyc2Ugc3RvcmFnZTogd3JvbmcgdmVyc2lvbgotcGFyc2Vfc3RvcmFnZV9kYXRhX2NoZWNrOiI1MDUzNDEwMDRiNDU1OTAwZmZmZmZmZmYwMTAwMDAwMDAxNzAwMDAwMDEwMDAwMDAwMDAwMDAxMjAwMDAwMDEwNjIwMjAwMDAzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6IjMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUjpQU0FfS0VZX1VTQUdFX0VYUE9SVDpQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTjpQU0FfQUxHX0NBVEVHT1JZX1NJR046UFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQorcGFyc2Vfc3RvcmFnZV9kYXRhX2NoZWNrOiI1MDUzNDEwMDRiNDU1OTAwZmZmZmZmZmYwMTAwMDAwMDAxNzAwMDA0MDEwMDAwMDAwMDAwMDAxMjAwMDAwMDEwNjIwMjAwMDAzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6IjMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUjoxMDI0OlBTQV9LRVlfVVNBR0VfRVhQT1JUOlBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OOlBTQV9BTEdfQ0FURUdPUllfU0lHTjpQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCiAKIFBhcnNlIHN0b3JhZ2U6IGRhdGEgdG9vIGJpZwotcGFyc2Vfc3RvcmFnZV9kYXRhX2NoZWNrOiI1MDUzNDEwMDRiNDU1OTAwMDAwMDAwMDAwMTAwMDAwMDAxNzAwMDAwMDEwMDAwMDAwMDAwMDAxMjAwMDAwMDEwZmZmZmZmZmYzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6IiI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6UFNBX0FMR19DQVRFR09SWV9BU1lNTUVUUklDX0VOQ1JZUFRJT046UFNBX0FMR19DQVRFR09SWV9TSUdOOlBTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkUKK3BhcnNlX3N0b3JhZ2VfZGF0YV9jaGVjazoiNTA1MzQxMDA0YjQ1NTkwMDAwMDAwMDAwMDEwMDAwMDAwMTcwMDAwMDAxMDAwMDAwMDAwMDAwMTIwMDAwMDAxMGZmZmZmZmZmMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOiIiOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOjA6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6UFNBX0FMR19DQVRFR09SWV9BU1lNTUVUUklDX0VOQ1JZUFRJT046UFNBX0FMR19DQVRFR09SWV9TSUdOOlBTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkUKIAogUGFyc2Ugc3RvcmFnZTogYmFkIG1hZ2ljCi1wYXJzZV9zdG9yYWdlX2RhdGFfY2hlY2s6IjY0NTM0MTAwNGI0NTU5MDAwMDAwMDAwMDAxMDAwMDAwMDE3MDAwMDAwMTAwMDAwMDAwMDAwMDEyMDAwMDAwMTA2MjAyMDAwMDMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjoiMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOlBTQV9LRVlfVVNBR0VfRVhQT1JUOlBTQV9BTEdfQ0FURUdPUllfQVNZTU1FVFJJQ19FTkNSWVBUSU9OOlBTQV9BTEdfQ0FURUdPUllfU0lHTjpQU0FfRVJST1JfU1RPUkFHRV9GQUlMVVJFCitwYXJzZV9zdG9yYWdlX2RhdGFfY2hlY2s6IjY0NTM0MTAwNGI0NTU5MDAwMDAwMDAwMDAxMDAwMDAwMDE3MDAwMDQwMTAwMDAwMDAwMDAwMDEyMDAwMDAwMTA2MjAyMDAwMDMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjoiMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOjEwMjQ6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6UFNBX0FMR19DQVRFR09SWV9BU1lNTUVUUklDX0VOQ1JZUFRJT046UFNBX0FMR19DQVRFR09SWV9TSUdOOlBTQV9FUlJPUl9TVE9SQUdFX0ZBSUxVUkUKIAogUGFyc2Ugc3RvcmFnZTogdHJ1bmNhdGVkIG1hZ2ljCi1wYXJzZV9zdG9yYWdlX2RhdGFfY2hlY2s6IjUwNTM0MTAwNGI0NTU5IjoiIjpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUjpQU0FfS0VZX1VTQUdFX0VYUE9SVDpQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTjpQU0FfQUxHX0NBVEVHT1JZX1NJR046UFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQorcGFyc2Vfc3RvcmFnZV9kYXRhX2NoZWNrOiI1MDUzNDEwMDRiNDU1OSI6IiI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6MDpQU0FfS0VZX1VTQUdFX0VYUE9SVDpQU0FfQUxHX0NBVEVHT1JZX0FTWU1NRVRSSUNfRU5DUllQVElPTjpQU0FfQUxHX0NBVEVHT1JZX1NJR046UFNBX0VSUk9SX1NUT1JBR0VfRkFJTFVSRQogCiAjIE5vdCBzcGVjaWZpYyB0byBmaWxlcywgYnV0IG9ubHkgcnVuIHRoaXMgdGVzdCBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgbWF4aW11bSBzaXplIGNvdWxkIGJlIHJlYWNoZWQuCiBTYXZlIG1heGltdW0tc2l6ZSBwZXJzaXN0ZW50IHJhdyBrZXkKQEAgLTMyLDIzICszMiwyMyBAQAogCiBQZXJzaXN0ZW50IGtleSBkZXN0cm95CiBkZXBlbmRzX29uOk1CRURUTFNfUEtfQzpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19SU0FfQwotcGVyc2lzdGVudF9rZXlfZGVzdHJveToxOjA6UFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUjoiMzA4MjAyNWUwMjAxMDAwMjgxODEwMGFmMDU3ZDM5NmVlODRmYjc1ZmRiYjVjMmIxM2M3ZmU1YTY1NGFhOGFhMjQ3MGI1NDFlZTFmZWIwYjEyZDI1Yzc5NzExNTMxMjQ5ZTExMjk2MjgwNDJkYmJiNmMxMjBkMTQ0MzUyNGVmNGMwZTZlMWQ4OTU2ZWViMjA3N2FmMTIzNDlkZGVlZTU0NDgzYmMwNmMyYzYxOTQ4Y2QwMmIyMDJlNzk2YWViZDk0ZDNhN2NiZjg1OWMyYzE4MTljMzI0Y2I4MmI5Y2QzNGVkZTI2M2EyYWJmZmU0NzMzZjA3Nzg2OWU4NjYwZjdkNjgzNGRhNTNkNjkwZWY3OTg1ZjZiYzMwMjAzMDEwMDAxMDI4MTgxMDA4NzRiZjBmZmMyZjJhNzFkMTQ2NzFkZGQwMTcxYzk1NGQ3ZmRiZjUwMjgxZTRmNmQ5OWVhMGUxZWJjZjgyZmFhNThlN2I1OTVmZmIyOTNkMWFiZTE3ZjExMGIzN2M0OGNjMGYzNmMzN2U4NGQ4NzY2MjFkMzI3ZjY0YmJlMDg0NTdkM2VjNDA5OGJhMmZhMGEzMTlmYmE0MTFjMjg0MWVkN2JlODMxOTZhOGNkZjlkYWE1ZDAwNjk0YmMzMzVmYzRjMzIyMTdmZTA0ODhiY2U5Y2I3MjAyZTU5NDY4YjFlYWQxMTkwMDA0NzdkYjJjYTc5N2ZhYzE5ZWRhM2Y1OGMxMDI0MTAwZTJhYjc2MDg0MWJiOWQzMGE4MWQyMjJkZTFlYjczODFkODIyMTQ0MDdmMWI5NzVjYmJmZTRlMWE5NDY3ZmQ5OGFkYmQ3OGY2MDc4MzZjYTViZTE5MjhiOWQxNjBkOTdmZDQ1YzEyZDZiNTJlMmM5ODcxYTE3NGM2NmI0ODgxMTMwMjQxMDBjNWFiMjc2MDIxNTlhZTdkNmYyMGMzYzJlZTg1MWU0NmRjMTEyZTY4OWUyOGQ1ZmNiYmY5OTBhOTllZjhhOTBiOGJiNDRmZDM2NDY3ZTdmYzE3ODljZWI2NjNhYmRhMzM4NjUyYzNjNzNmMTExNzc0OTAyZTg0MDU2NTkyNzA5MTAyNDEwMGI2Y2RiZDM1NGY3ZGY1NzlhNjNiNDhiMzY0M2UzNTNiODQ4OTg3NzdiNDhiMTVmOTRlMGJmYzA1NjdhNmFlNTkxMWQ1N2FkNjQwOWNmNzY0N2JmOTYyNjRlOWJkODdlYjk1ZTI2M2I3MTEwYjlhMWY5Zjk0YWNjZWQwZmFmYTRkMDI0MDcxMTk1ZWVjMzdlOGQyNTdkZWNmYzY3MmIwN2FlNjM5ZjEwY2JiOWIwYzczOWQwYzgwOTk2OGQ2NDRhOTRlM2ZkNmVkOTI4NzA3N2ExNDU4M2YzNzkwNThmNzZhOGFlY2Q0M2M2MmRjOGMwZjQxNzY2NjUwZDcyNTI3NWFjNGExMDI0MTAwYmIzMmQxMzNlZGMyZTA0OGQ0NjMzODhiN2JlOWNiNGJlMjlmNGI2MjUwYmU2MDNlNzBlMzY0NzUwMWM5N2RkZGUyMGE0ZTcxYmU5NWZkNWU3MTc4NGUyNWFjYTRiYWYyNWJlNTczOGFhZTU5YmJmZTFjOTk3NzgxNDQ3YTJiMjQiOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiZGVhZGJlZWYiCitwZXJzaXN0ZW50X2tleV9kZXN0cm95OjI6MTowOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6IjMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6ImRlYWRiZWVmIgogCiBQZXJzaXN0ZW50IGtleSBkZXN0cm95IGFmdGVyIHJlc3RhcnQKIGRlcGVuZHNfb246TUJFRFRMU19QS19DOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX1JTQV9DCi1wZXJzaXN0ZW50X2tleV9kZXN0cm95OjE6MTpQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOiIzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiJkZWFkYmVlZiIKK3BlcnNpc3RlbnRfa2V5X2Rlc3Ryb3k6MTc6MToxOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6IjMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6ImRlYWRiZWVmIgogCiBQZXJzaXN0ZW50IGtleSBpbXBvcnQgKFJTQSkKIGRlcGVuZHNfb246TUJFRFRMU19QS19DOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX1JTQV9DCi1wZXJzaXN0ZW50X2tleV9pbXBvcnQ6MTpQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOiIzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6MDpQU0FfU1VDQ0VTUworcGVyc2lzdGVudF9rZXlfaW1wb3J0OjI1NjoxOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6IjMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjowOlBTQV9TVUNDRVNTCiAKIFBlcnNpc3RlbnQga2V5IGltcG9ydCB3aXRoIHJlc3RhcnQgKFJTQSkKIGRlcGVuZHNfb246TUJFRFRMU19QS19DOk1CRURUTFNfUEtfUEFSU0VfQzpNQkVEVExTX1JTQV9DCi1wZXJzaXN0ZW50X2tleV9pbXBvcnQ6MTpQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOiIzMDgyMDI1ZTAyMDEwMDAyODE4MTAwYWYwNTdkMzk2ZWU4NGZiNzVmZGJiNWMyYjEzYzdmZTVhNjU0YWE4YWEyNDcwYjU0MWVlMWZlYjBiMTJkMjVjNzk3MTE1MzEyNDllMTEyOTYyODA0MmRiYmI2YzEyMGQxNDQzNTI0ZWY0YzBlNmUxZDg5NTZlZWIyMDc3YWYxMjM0OWRkZWVlNTQ0ODNiYzA2YzJjNjE5NDhjZDAyYjIwMmU3OTZhZWJkOTRkM2E3Y2JmODU5YzJjMTgxOWMzMjRjYjgyYjljZDM0ZWRlMjYzYTJhYmZmZTQ3MzNmMDc3ODY5ZTg2NjBmN2Q2ODM0ZGE1M2Q2OTBlZjc5ODVmNmJjMzAyMDMwMTAwMDEwMjgxODEwMDg3NGJmMGZmYzJmMmE3MWQxNDY3MWRkZDAxNzFjOTU0ZDdmZGJmNTAyODFlNGY2ZDk5ZWEwZTFlYmNmODJmYWE1OGU3YjU5NWZmYjI5M2QxYWJlMTdmMTEwYjM3YzQ4Y2MwZjM2YzM3ZTg0ZDg3NjYyMWQzMjdmNjRiYmUwODQ1N2QzZWM0MDk4YmEyZmEwYTMxOWZiYTQxMWMyODQxZWQ3YmU4MzE5NmE4Y2RmOWRhYTVkMDA2OTRiYzMzNWZjNGMzMjIxN2ZlMDQ4OGJjZTljYjcyMDJlNTk0NjhiMWVhZDExOTAwMDQ3N2RiMmNhNzk3ZmFjMTllZGEzZjU4YzEwMjQxMDBlMmFiNzYwODQxYmI5ZDMwYTgxZDIyMmRlMWViNzM4MWQ4MjIxNDQwN2YxYjk3NWNiYmZlNGUxYTk0NjdmZDk4YWRiZDc4ZjYwNzgzNmNhNWJlMTkyOGI5ZDE2MGQ5N2ZkNDVjMTJkNmI1MmUyYzk4NzFhMTc0YzY2YjQ4ODExMzAyNDEwMGM1YWIyNzYwMjE1OWFlN2Q2ZjIwYzNjMmVlODUxZTQ2ZGMxMTJlNjg5ZTI4ZDVmY2JiZjk5MGE5OWVmOGE5MGI4YmI0NGZkMzY0NjdlN2ZjMTc4OWNlYjY2M2FiZGEzMzg2NTJjM2M3M2YxMTE3NzQ5MDJlODQwNTY1OTI3MDkxMDI0MTAwYjZjZGJkMzU0ZjdkZjU3OWE2M2I0OGIzNjQzZTM1M2I4NDg5ODc3N2I0OGIxNWY5NGUwYmZjMDU2N2E2YWU1OTExZDU3YWQ2NDA5Y2Y3NjQ3YmY5NjI2NGU5YmQ4N2ViOTVlMjYzYjcxMTBiOWExZjlmOTRhY2NlZDBmYWZhNGQwMjQwNzExOTVlZWMzN2U4ZDI1N2RlY2ZjNjcyYjA3YWU2MzlmMTBjYmI5YjBjNzM5ZDBjODA5OTY4ZDY0NGE5NGUzZmQ2ZWQ5Mjg3MDc3YTE0NTgzZjM3OTA1OGY3NmE4YWVjZDQzYzYyZGM4YzBmNDE3NjY2NTBkNzI1Mjc1YWM0YTEwMjQxMDBiYjMyZDEzM2VkYzJlMDQ4ZDQ2MzM4OGI3YmU5Y2I0YmUyOWY0YjYyNTBiZTYwM2U3MGUzNjQ3NTAxYzk3ZGRkZTIwYTRlNzFiZTk1ZmQ1ZTcxNzg0ZTI1YWNhNGJhZjI1YmU1NzM4YWFlNTliYmZlMWM5OTc3ODE0NDdhMmIyNCI6MTpQU0FfU1VDQ0VTUworcGVyc2lzdGVudF9rZXlfaW1wb3J0OjI1NjoxOlBTQV9LRVlfVFlQRV9SU0FfS0VZX1BBSVI6IjMwODIwMjVlMDIwMTAwMDI4MTgxMDBhZjA1N2QzOTZlZTg0ZmI3NWZkYmI1YzJiMTNjN2ZlNWE2NTRhYThhYTI0NzBiNTQxZWUxZmViMGIxMmQyNWM3OTcxMTUzMTI0OWUxMTI5NjI4MDQyZGJiYjZjMTIwZDE0NDM1MjRlZjRjMGU2ZTFkODk1NmVlYjIwNzdhZjEyMzQ5ZGRlZWU1NDQ4M2JjMDZjMmM2MTk0OGNkMDJiMjAyZTc5NmFlYmQ5NGQzYTdjYmY4NTljMmMxODE5YzMyNGNiODJiOWNkMzRlZGUyNjNhMmFiZmZlNDczM2YwNzc4NjllODY2MGY3ZDY4MzRkYTUzZDY5MGVmNzk4NWY2YmMzMDIwMzAxMDAwMTAyODE4MTAwODc0YmYwZmZjMmYyYTcxZDE0NjcxZGRkMDE3MWM5NTRkN2ZkYmY1MDI4MWU0ZjZkOTllYTBlMWViY2Y4MmZhYTU4ZTdiNTk1ZmZiMjkzZDFhYmUxN2YxMTBiMzdjNDhjYzBmMzZjMzdlODRkODc2NjIxZDMyN2Y2NGJiZTA4NDU3ZDNlYzQwOThiYTJmYTBhMzE5ZmJhNDExYzI4NDFlZDdiZTgzMTk2YThjZGY5ZGFhNWQwMDY5NGJjMzM1ZmM0YzMyMjE3ZmUwNDg4YmNlOWNiNzIwMmU1OTQ2OGIxZWFkMTE5MDAwNDc3ZGIyY2E3OTdmYWMxOWVkYTNmNThjMTAyNDEwMGUyYWI3NjA4NDFiYjlkMzBhODFkMjIyZGUxZWI3MzgxZDgyMjE0NDA3ZjFiOTc1Y2JiZmU0ZTFhOTQ2N2ZkOThhZGJkNzhmNjA3ODM2Y2E1YmUxOTI4YjlkMTYwZDk3ZmQ0NWMxMmQ2YjUyZTJjOTg3MWExNzRjNjZiNDg4MTEzMDI0MTAwYzVhYjI3NjAyMTU5YWU3ZDZmMjBjM2MyZWU4NTFlNDZkYzExMmU2ODllMjhkNWZjYmJmOTkwYTk5ZWY4YTkwYjhiYjQ0ZmQzNjQ2N2U3ZmMxNzg5Y2ViNjYzYWJkYTMzODY1MmMzYzczZjExMTc3NDkwMmU4NDA1NjU5MjcwOTEwMjQxMDBiNmNkYmQzNTRmN2RmNTc5YTYzYjQ4YjM2NDNlMzUzYjg0ODk4Nzc3YjQ4YjE1Zjk0ZTBiZmMwNTY3YTZhZTU5MTFkNTdhZDY0MDljZjc2NDdiZjk2MjY0ZTliZDg3ZWI5NWUyNjNiNzExMGI5YTFmOWY5NGFjY2VkMGZhZmE0ZDAyNDA3MTE5NWVlYzM3ZThkMjU3ZGVjZmM2NzJiMDdhZTYzOWYxMGNiYjliMGM3MzlkMGM4MDk5NjhkNjQ0YTk0ZTNmZDZlZDkyODcwNzdhMTQ1ODNmMzc5MDU4Zjc2YThhZWNkNDNjNjJkYzhjMGY0MTc2NjY1MGQ3MjUyNzVhYzRhMTAyNDEwMGJiMzJkMTMzZWRjMmUwNDhkNDYzMzg4YjdiZTljYjRiZTI5ZjRiNjI1MGJlNjAzZTcwZTM2NDc1MDFjOTdkZGRlMjBhNGU3MWJlOTVmZDVlNzE3ODRlMjVhY2E0YmFmMjViZTU3MzhhYWU1OWJiZmUxYzk5Nzc4MTQ0N2EyYjI0IjoxOlBTQV9TVUNDRVNTCiAKIFBlcnNpc3RlbnQga2V5IGltcG9ydCBnYXJiYWdlIGRhdGEsIHNob3VsZCBmYWlsCiBkZXBlbmRzX29uOk1CRURUTFNfUEtfQzpNQkVEVExTX1BLX1BBUlNFX0M6TUJFRFRMU19SU0FfQwotcGVyc2lzdGVudF9rZXlfaW1wb3J0OjE6UFNBX0tFWV9UWVBFX1JTQV9LRVlfUEFJUjoiMTExMTExMTEiOjA6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK3BlcnNpc3RlbnRfa2V5X2ltcG9ydDoyNTY6MTpQU0FfS0VZX1RZUEVfUlNBX0tFWV9QQUlSOiIxMTExMTExMSI6MDpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAogCiBpbXBvcnQvZXhwb3J0IHBlcnNpc3RlbnQgcmF3IGtleTogMSBieXRlCiBpbXBvcnRfZXhwb3J0X3BlcnNpc3RlbnRfa2V5OiIyYSI6UFNBX0tFWV9UWVBFX1JBV19EQVRBOjg6MDowCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3BlcnNpc3RlbnRfa2V5LmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19wZXJzaXN0ZW50X2tleS5mdW5jdGlvbgppbmRleCA0OWNlOTY0Li43ZWUxN2Y5IDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3BlcnNpc3RlbnRfa2V5LmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fcGVyc2lzdGVudF9rZXkuZnVuY3Rpb24KQEAgLTQxLDcgKzQxLDcgQEAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgZm9ybWF0X3N0b3JhZ2VfZGF0YV9jaGVjayggZGF0YV90ICprZXlfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpleHBlY3RlZF9maWxlX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfbGlmZXRpbWUsIGludCBrZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleV9saWZldGltZSwgaW50IGtleV90eXBlLCBpbnQga2V5X2JpdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfdXNhZ2UsIGludCBrZXlfYWxnLCBpbnQga2V5X2FsZzIgKQogewogICAgIHVpbnQ4X3QgKmZpbGVfZGF0YSA9IE5VTEw7CkBAIC01MSw2ICs1MSw3IEBACiAKICAgICBwc2Ffc2V0X2tleV9saWZldGltZSggJmF0dHJpYnV0ZXMsIGtleV9saWZldGltZSApOwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzLCBrZXlfdHlwZSApOworICAgIHBzYV9zZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzLCBrZXlfYml0cyApOwogICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcywga2V5X3VzYWdlICk7CiAgICAgcHNhX3NldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywga2V5X2FsZyApOwogICAgIHBzYV9zZXRfa2V5X2Vucm9sbG1lbnRfYWxnb3JpdGhtKCAmYXR0cmlidXRlcywga2V5X2FsZzIgKTsKQEAgLTczLDYgKzc0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmV4cGVjdGVkX2tleV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9rZXlfbGlmZXRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX2tleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9rZXlfYml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfa2V5X3VzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9rZXlfYWxnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9rZXlfYWxnMiwKQEAgLTk1LDYgKzk3LDggQEAKICAgICAgICAgICAgICAgICAocHNhX2tleV90eXBlX3QpIGV4cGVjdGVkX2tleV9saWZldGltZSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzICksCiAgICAgICAgICAgICAgICAgKHBzYV9rZXlfdHlwZV90KSBleHBlY3RlZF9rZXlfdHlwZSApOworICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzICksCisgICAgICAgICAgICAgICAgKHBzYV9rZXlfYml0c190KSBleHBlY3RlZF9rZXlfYml0cyApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcyApLAogICAgICAgICAgICAgICAgICh1aW50MzJfdCkgZXhwZWN0ZWRfa2V5X3VzYWdlICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcyApLApAQCAtMTEyLDcgKzExNiw3IEBACiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIHNhdmVfbGFyZ2VfcGVyc2lzdGVudF9rZXkoIGludCBkYXRhX2xlbmd0aF9hcmcsIGludCBleHBlY3RlZF9zdGF0dXMgKQogewotICAgIHBzYV9rZXlfaWRfdCBrZXlfaWQgPSA0MjsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXlfaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgNDIgKTsKICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CiAgICAgdWludDhfdCAqZGF0YSA9IE5VTEw7CiAgICAgc2l6ZV90IGRhdGFfbGVuZ3RoID0gZGF0YV9sZW5ndGhfYXJnOwpAQCAtMTM5LDExICsxNDMsMTIgQEAKIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgKi8KLXZvaWQgcGVyc2lzdGVudF9rZXlfZGVzdHJveSggaW50IGtleV9pZF9hcmcsIGludCByZXN0YXJ0LAordm9pZCBwZXJzaXN0ZW50X2tleV9kZXN0cm95KCBpbnQgb3duZXJfaWRfYXJnLCBpbnQga2V5X2lkX2FyZywgaW50IHJlc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaXJzdF90eXBlX2FyZywgZGF0YV90ICpmaXJzdF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Vjb25kX3R5cGVfYXJnLCBkYXRhX3QgKnNlY29uZF9kYXRhICkKIHsKLSAgICBwc2Ffa2V5X2lkX3Qga2V5X2lkID0ga2V5X2lkX2FyZzsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXlfaWQgPQorICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggb3duZXJfaWRfYXJnLCBrZXlfaWRfYXJnICk7CiAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOwogICAgIHBzYV9rZXlfdHlwZV90IGZpcnN0X3R5cGUgPSAocHNhX2tleV90eXBlX3QpIGZpcnN0X3R5cGVfYXJnOwogICAgIHBzYV9rZXlfdHlwZV90IHNlY29uZF90eXBlID0gKHBzYV9rZXlfdHlwZV90KSBzZWNvbmRfdHlwZV9hcmc7CkBAIC0xOTMsMTAgKzE5OCwxMSBAQAogLyogRU5EX0NBU0UgKi8KIAogLyogQkVHSU5fQ0FTRSAqLwotdm9pZCBwZXJzaXN0ZW50X2tleV9pbXBvcnQoIGludCBrZXlfaWRfYXJnLCBpbnQgdHlwZV9hcmcsIGRhdGFfdCAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdGFydCwgaW50IGV4cGVjdGVkX3N0YXR1cyApCit2b2lkIHBlcnNpc3RlbnRfa2V5X2ltcG9ydCggaW50IG93bmVyX2lkX2FyZywgaW50IGtleV9pZF9hcmcsIGludCB0eXBlX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmRhdGEsIGludCByZXN0YXJ0LCBpbnQgZXhwZWN0ZWRfc3RhdHVzICkKIHsKLSAgICBwc2Ffa2V5X2lkX3Qga2V5X2lkID0gKHBzYV9rZXlfaWRfdCkga2V5X2lkX2FyZzsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXlfaWQgPQorICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggb3duZXJfaWRfYXJnLCBrZXlfaWRfYXJnICk7CiAgICAgcHNhX2tleV90eXBlX3QgdHlwZSA9IChwc2Ffa2V5X3R5cGVfdCkgdHlwZV9hcmc7CiAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKQEAgLTIyNCw3ICsyMzAsOCBAQAogCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSApOwotICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlcyApLCBrZXlfaWQgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKAorICAgICAgICAgICAgICAgICAgICAgcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICksIGtleV9pZCApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzICksCiAgICAgICAgICAgICAgICAgUFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMgKSwgdHlwZSApOwpAQCAtMjQ1LDcgKzI1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9iaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdGFydCwgaW50IGtleV9ub3RfZXhpc3QgKQogewotICAgIHBzYV9rZXlfaWRfdCBrZXlfaWQgPSA0MjsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXlfaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgNDIgKTsKICAgICBwc2Ffa2V5X3R5cGVfdCB0eXBlID0gKHBzYV9rZXlfdHlwZV90KSB0eXBlX2FyZzsKICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CiAgICAgdW5zaWduZWQgY2hhciAqZXhwb3J0ZWQgPSBOVUxMOwpAQCAtMjc2LDcgKzI4Myw4IEBACiAgICAgLyogVGVzdCB0aGUga2V5IGluZm9ybWF0aW9uICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZSwgJmF0dHJpYnV0ZXMgKSApOwotICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlcyApLCBrZXlfaWQgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKAorICAgICAgICAgICAgICAgICAgICAgcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICksIGtleV9pZCApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzICksCiAgICAgICAgICAgICAgICAgUFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdHlwZSggJmF0dHJpYnV0ZXMgKSwgdHlwZSApOwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zZV9kcml2ZXJfaGFsLmRhdGEgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3NlX2RyaXZlcl9oYWwuZGF0YQppbmRleCAzMmUyZWNiLi5lNWVlZTU4IDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3NlX2RyaXZlcl9oYWwuZGF0YQorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3NlX2RyaXZlcl9oYWwuZGF0YQpAQCAtMTMwLDI4ICsxMzAsMjggQEAKIGdlbmVyYXRlX2tleV9zbW9rZTpQU0FfS0VZX1RZUEVfSE1BQzoyNTY6UFNBX0FMR19ITUFDKCBQU0FfQUxHX1NIQV8yNTYgKQogCiBLZXkgcmVnaXN0cmF0aW9uOiBzbW9rZSB0ZXN0Ci1yZWdpc3Rlcl9rZXlfc21va2VfdGVzdDpURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU6MToxOlBTQV9TVUNDRVNTCityZWdpc3Rlcl9rZXlfc21va2VfdGVzdDpURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU6NzoxOjE6UFNBX1NVQ0NFU1MKIAogS2V5IHJlZ2lzdHJhdGlvbjogaW52YWxpZCBsaWZldGltZSAodm9sYXRpbGUgaW50ZXJuYWwgc3RvcmFnZSkKLXJlZ2lzdGVyX2tleV9zbW9rZV90ZXN0OlBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEU6MToxOlBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCityZWdpc3Rlcl9rZXlfc21va2VfdGVzdDpQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFOjc6MToxOlBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCiAKIEtleSByZWdpc3RyYXRpb246IGludmFsaWQgbGlmZXRpbWUgKGludGVybmFsIHN0b3JhZ2UpCi1yZWdpc3Rlcl9rZXlfc21va2VfdGVzdDpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MToxOlBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCityZWdpc3Rlcl9rZXlfc21va2VfdGVzdDpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6NzoxOjE6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKIAogS2V5IHJlZ2lzdHJhdGlvbjogaW52YWxpZCBsaWZldGltZSAobm8gcmVnaXN0ZXJlZCBkcml2ZXIpCi1yZWdpc3Rlcl9rZXlfc21va2VfdGVzdDpQU0FfS0VZX0xJRkVUSU1FX0ZST01fUEVSU0lTVEVOQ0VfQU5EX0xPQ0FUSU9OKCBQU0FfS0VZX1BFUlNJU1RFTkNFX0RFRkFVTFQsIFRFU1RfRFJJVkVSX0xPQ0FUSU9OICsgMSApOjE6MTpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorcmVnaXN0ZXJfa2V5X3Ntb2tlX3Rlc3Q6UFNBX0tFWV9MSUZFVElNRV9GUk9NX1BFUlNJU1RFTkNFX0FORF9MT0NBVElPTiggUFNBX0tFWV9QRVJTSVNURU5DRV9ERUZBVUxULCBURVNUX0RSSVZFUl9MT0NBVElPTiArIDEgKTo3OjE6MTpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAogCiBLZXkgcmVnaXN0cmF0aW9uOiByZWplY3RlZAotcmVnaXN0ZXJfa2V5X3Ntb2tlX3Rlc3Q6VEVTVF9TRV9QRVJTSVNURU5UX0xJRkVUSU1FOjE6MDpQU0FfRVJST1JfTk9UX1BFUk1JVFRFRAorcmVnaXN0ZXJfa2V5X3Ntb2tlX3Rlc3Q6VEVTVF9TRV9QRVJTSVNURU5UX0xJRkVUSU1FOjc6MTowOlBTQV9FUlJPUl9OT1RfUEVSTUlUVEVECiAKIEtleSByZWdpc3RyYXRpb246IG5vdCBzdXBwb3J0ZWQKLXJlZ2lzdGVyX2tleV9zbW9rZV90ZXN0OlRFU1RfU0VfUEVSU0lTVEVOVF9MSUZFVElNRToxOi0xOlBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECityZWdpc3Rlcl9rZXlfc21va2VfdGVzdDpURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU6NzoxOi0xOlBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECiAKIEtleSByZWdpc3RyYXRpb246IGtleSBpZCBvdXQgb2YgcmFuZ2UKLXJlZ2lzdGVyX2tleV9zbW9rZV90ZXN0OlRFU1RfU0VfUEVSU0lTVEVOVF9MSUZFVElNRTpQU0FfS0VZX0lEX1ZFTkRPUl9NQVgrMTotMTpQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAorcmVnaXN0ZXJfa2V5X3Ntb2tlX3Rlc3Q6VEVTVF9TRV9QRVJTSVNURU5UX0xJRkVUSU1FOjc6UFNBX0tFWV9JRF9WRU5ET1JfTUFYKzE6LTE6UFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKIAogS2V5IHJlZ2lzdHJhdGlvbjoga2V5IGlkIGluIHZlbmRvciByYW5nZQotcmVnaXN0ZXJfa2V5X3Ntb2tlX3Rlc3Q6VEVTVF9TRV9QRVJTSVNURU5UX0xJRkVUSU1FOlBTQV9LRVlfSURfVkVORE9SX01BWDoxOlBTQV9TVUNDRVNTCityZWdpc3Rlcl9rZXlfc21va2VfdGVzdDpURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU6NzpQU0FfS0VZX0lEX1ZFTkRPUl9NQVg6MTpQU0FfU1VDQ0VTUwogCiBJbXBvcnQtc2lnbi12ZXJpZnk6IHNpZ24gaW4gZHJpdmVyLCBFQ0RTQQogZGVwZW5kc19vbjpNQkVEVExTX0VDRFNBX0M6TUJFRFRMU19FQ1BfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRApkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zZV9kcml2ZXJfaGFsLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zZV9kcml2ZXJfaGFsLmZ1bmN0aW9uCmluZGV4IGM5Y2U4NjYuLjg1ODRlNWUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fc2VfZHJpdmVyX2hhbC5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3NlX2RyaXZlcl9oYWwuZnVuY3Rpb24KQEAgLTUzMiw4ICs1MzIsOSBAQAogCiAgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggaGFuZGxlLCAmYWN0dWFsX2F0dHJpYnV0ZXMgKSApOwogCi0gICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfaWQoICZhY3R1YWxfYXR0cmlidXRlcyApLAotICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCByZWZlcmVuY2VfYXR0cmlidXRlcyApICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3ZjX2tleV9pZF9lcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCAmYWN0dWFsX2F0dHJpYnV0ZXMgKSwKKyAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCByZWZlcmVuY2VfYXR0cmlidXRlcyApICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9saWZldGltZSggJmFjdHVhbF9hdHRyaWJ1dGVzICksCiAgICAgICAgICAgICAgICAgcHNhX2dldF9rZXlfbGlmZXRpbWUoIHJlZmVyZW5jZV9hdHRyaWJ1dGVzICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV90eXBlKCAmYWN0dWFsX2F0dHJpYnV0ZXMgKSwKQEAgLTc1NywxNiArNzU4LDQxIEBACiAgICAgcmV0dXJuKCBvayApOwogfQogCi0jZGVmaW5lIE1BWF9LRVlfSURfRk9SX1RFU1QgMTAKK3N0YXRpYyBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXlfaWRzX3VzZWRfaW5fdGVzdFsxMF07CitzdGF0aWMgc2l6ZV90IG51bV9rZXlfaWRzX3VzZWQ7CisKKy8qIFJlY29yZCBhIGtleSBpZCBhcyBwb3RlbnRpYWxseSB1c2VkIGluIGEgdGVzdCBjYXNlLiAqLworc3RhdGljIGludCB0ZXN0X3VzZXNfa2V5X2lkKCBtYmVkdGxzX3N2Y19rZXlfaWRfdCBrZXlfaWQgKQoreworICAgIHNpemVfdCBpOworCisgICAgZm9yKCBpID0gMDsgaSA8IG51bV9rZXlfaWRzX3VzZWQgOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYoIG1iZWR0bHNfc3ZjX2tleV9pZF9lcXVhbCgga2V5X2lkLCBrZXlfaWRzX3VzZWRfaW5fdGVzdFtpXSApICkKKyAgICAgICAgICAgIHJldHVybiggMSApOworICAgIH0KKworICAgIGlmKCBudW1fa2V5X2lkc191c2VkID49IEFSUkFZX0xFTkdUSCgga2V5X2lkc191c2VkX2luX3Rlc3QgKSApCisgICAgICAgIHJldHVybiggMCApOworCisgICAga2V5X2lkc191c2VkX2luX3Rlc3RbbnVtX2tleV9pZHNfdXNlZF0gPSBrZXlfaWQ7CisgICAgKytudW1fa2V5X2lkc191c2VkOworCisgICAgcmV0dXJuKCAxICk7Cit9CisKKyNkZWZpbmUgVEVTVF9VU0VTX0tFWV9JRCgga2V5X2lkICkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBURVNUX0FTU0VSVCggdGVzdF91c2VzX2tleV9pZCgga2V5X2lkICkgKQorCiBzdGF0aWMgdm9pZCBwc2FfcHVyZ2Vfc3RvcmFnZSggdm9pZCApCiB7Ci0gICAgcHNhX2tleV9pZF90IGlkOworICAgIHNpemVfdCBpOwogICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbjsKLSAgICAvKiBUaGUgdGVzdHMgbWF5IGhhdmUgcG90ZW50aWFsbHkgY3JlYXRlZCBrZXkgaWRzIGZyb20gMSB0bwotICAgICAqIE1BWF9LRVlfSURfRk9SX1RFU1QuIEluIGFkZGl0aW9uLCBydW4gdGhlIGRlc3Ryb3kgZnVuY3Rpb24gb24ga2V5IGlkCi0gICAgICogMCwgd2hpY2ggZmlsZS1iYXNlZCBzdG9yYWdlIHVzZXMgYXMgYSB0ZW1wb3JhcnkgZmlsZS4gKi8KLSAgICBmb3IoIGlkID0gMDsgaWQgPD0gTUFYX0tFWV9JRF9GT1JfVEVTVDsgaWQrKyApCi0gICAgICAgIHBzYV9kZXN0cm95X3BlcnNpc3RlbnRfa2V5KCBpZCApOworCisgICAgZm9yKCBpID0gMDsgaSA8IG51bV9rZXlfaWRzX3VzZWQ7IGkrKyApCisgICAgICAgIHBzYV9kZXN0cm95X3BlcnNpc3RlbnRfa2V5KCBrZXlfaWRzX3VzZWRfaW5fdGVzdFtpXSApOworICAgIG51bV9rZXlfaWRzX3VzZWQgPSAwOworCiAgICAgLyogUHVyZ2UgdGhlIHRyYW5zYWN0aW9uIGZpbGUuICovCiAgICAgcHNhX2NyeXB0b19zdG9wX3RyYW5zYWN0aW9uKCApOwogICAgIC8qIFB1cmdlIGRyaXZlciBwZXJzaXN0ZW50IGRhdGEuICovCkBAIC04NTMsMTMgKzg3OSwxNSBAQAogICAgIHBzYV9kcnZfc2Vfa2V5X21hbmFnZW1lbnRfdCBrZXlfbWFuYWdlbWVudDsKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgPSAocHNhX2tleV9saWZldGltZV90KSBsaWZldGltZV9hcmc7CiAgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oIGxpZmV0aW1lICk7Ci0gICAgcHNhX2tleV9pZF90IGlkID0gMTsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBpZCA9IG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCAxLCAxICk7CiAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBjb25zdCB1aW50OF90IGtleV9tYXRlcmlhbFszXSA9IHsweGZhLCAweGNhLCAweGRlfTsKICAgICB1aW50OF90IGV4cG9ydGVkW3NpemVvZigga2V5X21hdGVyaWFsICldOwogICAgIHNpemVfdCBleHBvcnRlZF9sZW5ndGg7CiAKKyAgICBURVNUX1VTRVNfS0VZX0lEKCBpZCApOworCiAgICAgbWVtc2V0KCAmZHJpdmVyLCAwLCBzaXplb2YoIGRyaXZlciApICk7CiAgICAgbWVtc2V0KCAma2V5X21hbmFnZW1lbnQsIDAsIHNpemVvZigga2V5X21hbmFnZW1lbnQgKSApOwogICAgIGRyaXZlci5oYWxfdmVyc2lvbiA9IFBTQV9EUlZfU0VfSEFMX1ZFUlNJT047CkBAIC05ODUsMTEgKzEwMTMsMTMgQEAKICAgICBwc2FfZHJ2X3NlX2tleV9tYW5hZ2VtZW50X3Qga2V5X21hbmFnZW1lbnQ7CiAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lID0gVEVTVF9TRV9QRVJTSVNURU5UX0xJRkVUSU1FOwogICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbiA9IFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKCBsaWZldGltZSApOwotICAgIHBzYV9rZXlfaWRfdCBpZCA9IDE7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgMSApOwogICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgY29uc3QgdWludDhfdCBrZXlfbWF0ZXJpYWxbM10gPSB7MHhmYSwgMHhjYSwgMHhkZX07CiAKKyAgICBURVNUX1VTRVNfS0VZX0lEKCBpZCApOworCiAgICAgbWVtc2V0KCAmZHJpdmVyLCAwLCBzaXplb2YoIGRyaXZlciApICk7CiAgICAgbWVtc2V0KCAma2V5X21hbmFnZW1lbnQsIDAsIHNpemVvZigga2V5X21hbmFnZW1lbnQgKSApOwogICAgIGRyaXZlci5oYWxfdmVyc2lvbiA9IFBTQV9EUlZfU0VfSEFMX1ZFUlNJT047CkBAIC0xMDY3LDEwICsxMDk3LDEyIEBACiAgICAgcHNhX2Rydl9zZV9rZXlfbWFuYWdlbWVudF90IGtleV9tYW5hZ2VtZW50OwogICAgIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZSA9IFRFU1RfU0VfUEVSU0lTVEVOVF9MSUZFVElNRTsKICAgICBwc2Ffa2V5X2xvY2F0aW9uX3QgbG9jYXRpb24gPSBQU0FfS0VZX0xJRkVUSU1FX0dFVF9MT0NBVElPTiggbGlmZXRpbWUgKTsKLSAgICBwc2Ffa2V5X2lkX3QgaWQgPSAxOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGlkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDEsIDEgKTsKICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogCisgICAgVEVTVF9VU0VTX0tFWV9JRCggaWQgKTsKKwogICAgIG1lbXNldCggJmRyaXZlciwgMCwgc2l6ZW9mKCBkcml2ZXIgKSApOwogICAgIG1lbXNldCggJmtleV9tYW5hZ2VtZW50LCAwLCBzaXplb2YoIGtleV9tYW5hZ2VtZW50ICkgKTsKICAgICBkcml2ZXIuaGFsX3ZlcnNpb24gPSBQU0FfRFJWX1NFX0hBTF9WRVJTSU9OOwpAQCAtMTEzOSwxMCArMTE3MSwxMiBAQAogICAgIHBzYV9kcnZfc2Vfa2V5X21hbmFnZW1lbnRfdCBrZXlfbWFuYWdlbWVudDsKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgPSBURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU7CiAgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oIGxpZmV0aW1lICk7Ci0gICAgcHNhX2tleV9pZF90IGlkID0gMTsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBpZCA9IG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCAxLCAxICk7CiAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKIAorICAgIFRFU1RfVVNFU19LRVlfSUQoIGlkICk7CisKICAgICBtZW1zZXQoICZkcml2ZXIsIDAsIHNpemVvZiggZHJpdmVyICkgKTsKICAgICBtZW1zZXQoICZrZXlfbWFuYWdlbWVudCwgMCwgc2l6ZW9mKCBrZXlfbWFuYWdlbWVudCApICk7CiAgICAgZHJpdmVyLmhhbF92ZXJzaW9uID0gUFNBX0RSVl9TRV9IQUxfVkVSU0lPTjsKQEAgLTExNzgsMTAgKzEyMTIsMTIgQEAKICAgICBwc2FfZHJ2X3NlX2tleV9tYW5hZ2VtZW50X3Qga2V5X21hbmFnZW1lbnQ7CiAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lID0gVEVTVF9TRV9QRVJTSVNURU5UX0xJRkVUSU1FOwogICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbiA9IFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKCBsaWZldGltZSApOwotICAgIHBzYV9rZXlfaWRfdCBpZCA9IDE7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgMSApOwogICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAKKyAgICBURVNUX1VTRVNfS0VZX0lEKCBpZCApOworCiAgICAgbWVtc2V0KCAmZHJpdmVyLCAwLCBzaXplb2YoIGRyaXZlciApICk7CiAgICAgbWVtc2V0KCAma2V5X21hbmFnZW1lbnQsIDAsIHNpemVvZigga2V5X21hbmFnZW1lbnQgKSApOwogICAgIGRyaXZlci5oYWxfdmVyc2lvbiA9IFBTQV9EUlZfU0VfSEFMX1ZFUlNJT047CkBAIC0xMjU4LDcgKzEyOTQsNyBAQAogCiAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lID0gVEVTVF9TRV9QRVJTSVNURU5UX0xJRkVUSU1FOwogICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbiA9IFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKCBsaWZldGltZSApOwotICAgIHBzYV9rZXlfaWRfdCBpZCA9IDE7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgMSApOwogICAgIHBzYV9rZXlfaGFuZGxlX3QgZHJ2X2hhbmRsZSA9IDA7IC8qIGtleSBtYW5hZ2VkIGJ5IHRoZSBkcml2ZXIgKi8KICAgICBwc2Ffa2V5X2hhbmRsZV90IHN3X2hhbmRsZSA9IDA7IC8qIHRyYW5zcGFyZW50IGtleSAqLwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IHN3X2F0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKQEAgLTEyNjYsNiArMTMwMiw4IEBACiAgICAgdWludDhfdCBzaWduYXR1cmVbUFNBX1NJR05BVFVSRV9NQVhfU0laRV07CiAgICAgc2l6ZV90IHNpZ25hdHVyZV9sZW5ndGg7CiAKKyAgICBURVNUX1VTRVNfS0VZX0lEKCBpZCApOworCiAgICAgbWVtc2V0KCAmZHJpdmVyLCAwLCBzaXplb2YoIGRyaXZlciApICk7CiAgICAgbWVtc2V0KCAma2V5X21hbmFnZW1lbnQsIDAsIHNpemVvZigga2V5X21hbmFnZW1lbnQgKSApOwogICAgIG1lbXNldCggJmFzeW1tZXRyaWMsIDAsIHNpemVvZiggYXN5bW1ldHJpYyApICk7CkBAIC0xNDEwLDYgKzE0NDgsNyBAQAogCiAvKiBCRUdJTl9DQVNFICovCiB2b2lkIHJlZ2lzdGVyX2tleV9zbW9rZV90ZXN0KCBpbnQgbGlmZXRpbWVfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG93bmVyX2lkX2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZF9hcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsaWRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfc3RhdHVzX2FyZyApCkBAIC0xNDIwLDEyICsxNDU5LDE0IEBACiAgICAgcHNhX2Rydl9zZV90IGRyaXZlcjsKICAgICBwc2FfZHJ2X3NlX2tleV9tYW5hZ2VtZW50X3Qga2V5X21hbmFnZW1lbnQ7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwotICAgIHBzYV9rZXlfaWRfdCBpZCA9IGlkX2FyZzsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBpZCA9IG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCBvd25lcl9pZF9hcmcsIGlkX2FyZyApOwogICAgIHNpemVfdCBiaXRfc2l6ZSA9IDQ4OwogICAgIHBzYV9rZXlfc2xvdF9udW1iZXJfdCB3YW50ZWRfc2xvdCA9IDB4MTIzNDU2Nzg5OwogICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKICAgICBwc2Ffc3RhdHVzX3Qgc3RhdHVzOwogCisgICAgVEVTVF9VU0VTX0tFWV9JRCggaWQgKTsKKwogICAgIG1lbXNldCggJmRyaXZlciwgMCwgc2l6ZW9mKCBkcml2ZXIgKSApOwogICAgIGRyaXZlci5oYWxfdmVyc2lvbiA9IFBTQV9EUlZfU0VfSEFMX1ZFUlNJT047CiAgICAgbWVtc2V0KCAma2V5X21hbmFnZW1lbnQsIDAsIHNpemVvZigga2V5X21hbmFnZW1lbnQgKSApOwpAQCAtMTQ2Miw2ICsxNTAzLDEyIEBACiAgICAgICAgIGdvdG8gZXhpdDsKICAgICBQU0FfQVNTRVJUKCBwc2FfY2xvc2Vfa2V5KCBoYW5kbGUgKSApOwogCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIpCisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaW52YWxpZF9pZCA9CisgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCBvd25lcl9pZF9hcmcgKyAxLCBpZF9hcmcgKTsKKyAgICBURVNUX0VRVUFMKCBwc2Ffb3Blbl9rZXkoIGludmFsaWRfaWQsICZoYW5kbGUgKSwgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICk7CisjZW5kaWYKKwogICAgIC8qIFJlc3RhcnQgYW5kIHRyeSBhZ2Fpbi4gKi8KICAgICBQU0FfRE9ORSggKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfcmVnaXN0ZXJfc2VfZHJpdmVyKCBsb2NhdGlvbiwgJmRyaXZlciApICk7CmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3NlX2RyaXZlcl9oYWxfbW9ja3MuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3NlX2RyaXZlcl9oYWxfbW9ja3MuZnVuY3Rpb24KaW5kZXggZWY1MGE2OC4uN2Q0YTU5MSAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zZV9kcml2ZXJfaGFsX21vY2tzLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fc2VfZHJpdmVyX2hhbF9tb2Nrcy5mdW5jdGlvbgpAQCAtOTEsMTEgKzkxLDEzIEBACiB7CiAgICAgcHNhX2tleV9pZF90IGlkOwogICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbjsKKwogICAgIC8qIFRoZSB0ZXN0cyBtYXkgaGF2ZSBwb3RlbnRpYWxseSBjcmVhdGVkIGtleSBpZHMgZnJvbSAxIHRvCiAgICAgICogTUFYX0tFWV9JRF9GT1JfVEVTVC4gSW4gYWRkaXRpb24sIHJ1biB0aGUgZGVzdHJveSBmdW5jdGlvbiBvbiBrZXkgaWQKICAgICAgKiAwLCB3aGljaCBmaWxlLWJhc2VkIHN0b3JhZ2UgdXNlcyBhcyBhIHRlbXBvcmFyeSBmaWxlLiAqLwogICAgIGZvciggaWQgPSAwOyBpZCA8PSBNQVhfS0VZX0lEX0ZPUl9URVNUOyBpZCsrICkKLSAgICAgICAgcHNhX2Rlc3Ryb3lfcGVyc2lzdGVudF9rZXkoIGlkICk7CisgICAgICAgIHBzYV9kZXN0cm95X3BlcnNpc3RlbnRfa2V5KCBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgaWQgKSApOworCiAgICAgLyogUHVyZ2UgdGhlIHRyYW5zYWN0aW9uIGZpbGUuICovCiAgICAgcHNhX2NyeXB0b19zdG9wX3RyYW5zYWN0aW9uKCApOwogICAgIC8qIFB1cmdlIGRyaXZlciBwZXJzaXN0ZW50IGRhdGEuICovCkBAIC0zMzAsNyArMzMyLDcgQEAKICAgICBwc2FfZHJ2X3NlX2tleV9tYW5hZ2VtZW50X3Qga2V5X21hbmFnZW1lbnQ7CiAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lID0gVEVTVF9TRV9QRVJTSVNURU5UX0xJRkVUSU1FOwogICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbiA9IFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKCBsaWZldGltZSApOwotICAgIHBzYV9rZXlfaWRfdCBpZCA9IDE7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgMSApOwogICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgY29uc3QgdWludDhfdCBrZXlfbWF0ZXJpYWxbM10gPSB7MHhmYSwgMHhjYSwgMHhkZX07CkBAIC0zNjAsOCArMzYyLDIwIEBACiAgICAgVEVTVF9BU1NFUlQoIG1vY2tfYWxsb2NhdGVfZGF0YS5jYWxsZWQgPT0gMSApOwogICAgIFRFU1RfQVNTRVJUKCBtb2NrX2ltcG9ydF9kYXRhLmNhbGxlZCA9PQogICAgICAgICAoIG1vY2tfYWxsb2NfcmV0dXJuX3ZhbHVlID09IFBTQV9TVUNDRVNTPyAxIDogMCApICk7Ci0gICAgVEVTVF9BU1NFUlQoIG1vY2tfaW1wb3J0X2RhdGEuYXR0cmlidXRlcy5jb3JlLmlkID09Ci0gICAgICAgICggbW9ja19hbGxvY19yZXR1cm5fdmFsdWUgPT0gUFNBX1NVQ0NFU1M/IGlkIDogMCApICk7CisKKyAgICBpZiggbW9ja19hbGxvY19yZXR1cm5fdmFsdWUgPT0gUFNBX1NVQ0NFU1MgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3ZjX2tleV9pZF9lcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrX2ltcG9ydF9kYXRhLmF0dHJpYnV0ZXMuY29yZS5pZCwgaWQgKSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9LRVlfSUQoCisgICAgICAgICAgICAgICAgICAgICAgICAgbW9ja19pbXBvcnRfZGF0YS5hdHRyaWJ1dGVzLmNvcmUuaWQgKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBNQkVEVExTX1NWQ19LRVlfSURfR0VUX09XTkVSX0lEKAorICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2tfaW1wb3J0X2RhdGEuYXR0cmlidXRlcy5jb3JlLmlkICkgPT0gMCApOworICAgIH0KKwogICAgIFRFU1RfQVNTRVJUKCBtb2NrX2ltcG9ydF9kYXRhLmF0dHJpYnV0ZXMuY29yZS5saWZldGltZSA9PQogICAgICAgICAoIG1vY2tfYWxsb2NfcmV0dXJuX3ZhbHVlID09IFBTQV9TVUNDRVNTPyBsaWZldGltZSA6IDAgKSApOwogICAgIFRFU1RfQVNTRVJUKCBtb2NrX2ltcG9ydF9kYXRhLmF0dHJpYnV0ZXMuY29yZS5wb2xpY3kudXNhZ2UgPT0KQEAgLTM4Nyw3ICs0MDEsNyBAQAogICAgIHBzYV9kcnZfc2Vfa2V5X21hbmFnZW1lbnRfdCBrZXlfbWFuYWdlbWVudDsKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgPSBURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU7CiAgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oIGxpZmV0aW1lICk7Ci0gICAgcHNhX2tleV9pZF90IGlkID0gMTsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBpZCA9IG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCAxLCAxICk7CiAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBjb25zdCB1aW50OF90IGtleV9tYXRlcmlhbFszXSA9IHsweGZhLCAweGNhLCAweGRlfTsKQEAgLTQ0MSw3ICs0NTUsNyBAQAogICAgIHBzYV9kcnZfc2Vfa2V5X21hbmFnZW1lbnRfdCBrZXlfbWFuYWdlbWVudDsKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgPSBURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU7CiAgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oIGxpZmV0aW1lICk7Ci0gICAgcHNhX2tleV9pZF90IGlkID0gMTsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBpZCA9IG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCAxLCAxICk7CiAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKIApAQCAtNDY3LDggKzQ4MSwyMCBAQAogICAgIFRFU1RfQVNTRVJUKCBtb2NrX2FsbG9jYXRlX2RhdGEuY2FsbGVkID09IDEgKTsKICAgICBURVNUX0FTU0VSVCggbW9ja19nZW5lcmF0ZV9kYXRhLmNhbGxlZCA9PQogICAgICAgICAoIG1vY2tfYWxsb2NfcmV0dXJuX3ZhbHVlID09IFBTQV9TVUNDRVNTPyAxIDogMCApICk7Ci0gICAgVEVTVF9BU1NFUlQoIG1vY2tfZ2VuZXJhdGVfZGF0YS5hdHRyaWJ1dGVzLmNvcmUuaWQgPT0KLSAgICAgICAgKCBtb2NrX2FsbG9jX3JldHVybl92YWx1ZSA9PSBQU0FfU1VDQ0VTUz8gaWQgOiAwICkgKTsKKworICAgIGlmKCBtb2NrX2FsbG9jX3JldHVybl92YWx1ZSA9PSBQU0FfU1VDQ0VTUyApCisgICAgeworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2tfZ2VuZXJhdGVfZGF0YS5hdHRyaWJ1dGVzLmNvcmUuaWQsIGlkICkgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfS0VZX0lEKAorICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2tfZ2VuZXJhdGVfZGF0YS5hdHRyaWJ1dGVzLmNvcmUuaWQgKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBNQkVEVExTX1NWQ19LRVlfSURfR0VUX09XTkVSX0lEKAorICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2tfZ2VuZXJhdGVfZGF0YS5hdHRyaWJ1dGVzLmNvcmUuaWQgKSA9PSAwICk7CisgICAgfQorCiAgICAgVEVTVF9BU1NFUlQoIG1vY2tfZ2VuZXJhdGVfZGF0YS5hdHRyaWJ1dGVzLmNvcmUubGlmZXRpbWUgPT0KICAgICAgICAgKCBtb2NrX2FsbG9jX3JldHVybl92YWx1ZSA9PSBQU0FfU1VDQ0VTUz8gbGlmZXRpbWUgOiAwICkgKTsKICAgICBURVNUX0FTU0VSVCggbW9ja19nZW5lcmF0ZV9kYXRhLmF0dHJpYnV0ZXMuY29yZS5wb2xpY3kudXNhZ2UgPT0KQEAgLTQ5Niw3ICs1MjIsNyBAQAogICAgIHBzYV9kcnZfc2Vfa2V5X21hbmFnZW1lbnRfdCBrZXlfbWFuYWdlbWVudDsKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgbGlmZXRpbWUgPSBURVNUX1NFX1BFUlNJU1RFTlRfTElGRVRJTUU7CiAgICAgcHNhX2tleV9sb2NhdGlvbl90IGxvY2F0aW9uID0gUFNBX0tFWV9MSUZFVElNRV9HRVRfTE9DQVRJT04oIGxpZmV0aW1lICk7Ci0gICAgcHNhX2tleV9pZF90IGlkID0gMTsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBpZCA9IG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCAxLCAxICk7CiAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAwOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IGF0dHJpYnV0ZXMgPSBQU0FfS0VZX0FUVFJJQlVURVNfSU5JVDsKICAgICBjb25zdCB1aW50OF90IGtleV9tYXRlcmlhbFszXSA9IHsweGZhLCAweGNhLCAweGRlfTsKQEAgLTU0Niw3ICs1NzIsNyBAQAogICAgIHBzYV9kcnZfc2VfYXN5bW1ldHJpY190IGFzeW1tZXRyaWM7CiAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lID0gVEVTVF9TRV9QRVJTSVNURU5UX0xJRkVUSU1FOwogICAgIHBzYV9rZXlfbG9jYXRpb25fdCBsb2NhdGlvbiA9IFBTQV9LRVlfTElGRVRJTUVfR0VUX0xPQ0FUSU9OKCBsaWZldGltZSApOwotICAgIHBzYV9rZXlfaWRfdCBpZCA9IDE7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgMSApOwogICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgY29uc3QgdWludDhfdCBrZXlfbWF0ZXJpYWxbM10gPSB7MHhmYSwgMHhjYSwgMHhkZX07CkBAIC02MDcsNyArNjMzLDcgQEAKICAgICBwc2FfZHJ2X3NlX2FzeW1tZXRyaWNfdCBhc3ltbWV0cmljOwogICAgIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZSA9IFRFU1RfU0VfUEVSU0lTVEVOVF9MSUZFVElNRTsKICAgICBwc2Ffa2V5X2xvY2F0aW9uX3QgbG9jYXRpb24gPSBQU0FfS0VZX0xJRkVUSU1FX0dFVF9MT0NBVElPTiggbGlmZXRpbWUgKTsKLSAgICBwc2Ffa2V5X2lkX3QgaWQgPSAxOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IGlkID0gbWJlZHRsc19zdmNfa2V5X2lkX21ha2UoIDEsIDEgKTsKICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZSA9IDA7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIGNvbnN0IHVpbnQ4X3Qga2V5X21hdGVyaWFsWzNdID0gezB4ZmEsIDB4Y2EsIDB4ZGV9OwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuZGF0YSBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fc2xvdF9tYW5hZ2VtZW50LmRhdGEKaW5kZXggODRjYWVmOS4uZTE2MDg5ZCAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuZGF0YQorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9wc2FfY3J5cHRvX3Nsb3RfbWFuYWdlbWVudC5kYXRhCkBAIC0xNCw2MSArMTQsNjEgQEAKIHRyYW5zaWVudF9zbG90X2xpZmVjeWNsZTowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6Q0xPU0VfQllfU0hVVERPV04KIAogUGVyc2lzdGVudCBzbG90LCBjaGVjayBhZnRlciBjbG9zaW5nLCBpZD1taW4KLXBlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfSURfVVNFUl9NSU46MDowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6Q0xPU0VfQllfQ0xPU0UKK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEyNDpQU0FfS0VZX0lEX1VTRVJfTUlOOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX0NMT1NFCiAKIFBlcnNpc3RlbnQgc2xvdCwgY2hlY2sgYWZ0ZXIgY2xvc2luZyBhbmQgcmVzdGFydGluZywgaWQ9bWluCi1wZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX0lEX1VTRVJfTUlOOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX0NMT1NFCitwZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMjU6UFNBX0tFWV9JRF9VU0VSX01JTjowOjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIjpDTE9TRV9CWV9DTE9TRQogCiBQZXJzaXN0ZW50IHNsb3QsIGNoZWNrIGFmdGVyIGRlc3Ryb3lpbmcsIGlkPW1pbgotcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9JRF9VU0VSX01JTjowOjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIjpDTE9TRV9CWV9ERVNUUk9ZCitwZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMjY6UFNBX0tFWV9JRF9VU0VSX01JTjowOjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIjpDTE9TRV9CWV9ERVNUUk9ZCiAKIFBlcnNpc3RlbnQgc2xvdCwgY2hlY2sgYWZ0ZXIgZGVzdHJveWluZyBhbmQgcmVzdGFydGluZywgaWQ9bWluCi1wZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX0lEX1VTRVJfTUlOOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX0RFU1RST1kKK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEyNzpQU0FfS0VZX0lEX1VTRVJfTUlOOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX0RFU1RST1kKIAogUGVyc2lzdGVudCBzbG90LCBjaGVjayBhZnRlciByZXN0YXJ0IHdpdGggbGl2ZSBoYW5kbGUsIGlkPW1pbgotcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6UFNBX0tFWV9JRF9VU0VSX01JTjowOjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIjpDTE9TRV9CWV9TSFVURE9XTgorcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTI4OlBTQV9LRVlfSURfVVNFUl9NSU46MDowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6Q0xPU0VfQllfU0hVVERPV04KIAogUGVyc2lzdGVudCBzbG90LCBjaGVjayBhZnRlciBjbG9zaW5nLCBpZD1tYXgKLXBlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfSURfVVNFUl9NQVg6MDowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6Q0xPU0VfQllfQ0xPU0UKK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEyOTpQU0FfS0VZX0lEX1VTRVJfTUFYOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX0NMT1NFCiAKIFBlcnNpc3RlbnQgc2xvdCwgY2hlY2sgYWZ0ZXIgZGVzdHJveWluZywgaWQ9bWF4Ci1wZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDpQU0FfS0VZX0lEX1VTRVJfTUFYOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX0RFU1RST1kKK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEzMDpQU0FfS0VZX0lEX1VTRVJfTUFYOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX0RFU1RST1kKIAogUGVyc2lzdGVudCBzbG90LCBjaGVjayBhZnRlciByZXN0YXJ0LCBpZD1tYXgKLXBlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOlBTQV9LRVlfSURfVVNFUl9NQVg6MDowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiI6Q0xPU0VfQllfU0hVVERPV04KK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEzMTpQU0FfS0VZX0lEX1VTRVJfTUFYOjA6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiOkNMT1NFX0JZX1NIVVRET1dOCiAKIFBlcnNpc3RlbnQgc2xvdDogRUNQIGtleXBhaXIgKEVDRFNBLCBleHBvcnRhYmxlKSwgY2xvc2UKIGRlcGVuZHNfb246TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECi1wZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0ggfCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOlBTQV9BTEdfRUNEU0FfQU5ZOjA6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6Q0xPU0VfQllfQ0xPU0UKK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEzMjoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0ggfCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOlBTQV9BTEdfRUNEU0FfQU5ZOjA6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6Q0xPU0VfQllfQ0xPU0UKIAogUGVyc2lzdGVudCBzbG90OiBFQ1Aga2V5cGFpciAoRUNEU0EsIGV4cG9ydGFibGUpLCBjbG9zZStyZXN0YXJ0CiBkZXBlbmRzX29uOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAotcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTpQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIIHwgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSDpQU0FfQUxHX0VDRFNBX0FOWTowOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOkNMT1NFX0JZX0NMT1NFX1dJVEhfU0hVVERPV04KK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEzMzoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0ggfCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOlBTQV9BTEdfRUNEU0FfQU5ZOjA6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6Q0xPU0VfQllfQ0xPU0VfV0lUSF9TSFVURE9XTgogCiBQZXJzaXN0ZW50IHNsb3Q6IEVDUCBrZXlwYWlyIChFQ0RTQSwgZXhwb3J0YWJsZSksIHJlc3RhcnQKIGRlcGVuZHNfb246TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECi1wZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0ggfCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOlBTQV9BTEdfRUNEU0FfQU5ZOjA6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6Q0xPU0VfQllfU0hVVERPV04KK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEzNDoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0ggfCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOlBTQV9BTEdfRUNEU0FfQU5ZOjA6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6Q0xPU0VfQllfU0hVVERPV04KIAogUGVyc2lzdGVudCBzbG90OiBFQ1Aga2V5cGFpciAoRUNESCtFQ0RTQSwgZXhwb3J0YWJsZSksIGNsb3NlCiBkZXBlbmRzX29uOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECi1wZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0ggfCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfQUxHX0VDRFNBX0FOWTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpDTE9TRV9CWV9DTE9TRQorcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTM1OjE6UFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX1NJR05fSEFTSCB8IFBTQV9LRVlfVVNBR0VfVkVSSUZZX0hBU0g6UFNBX0FMR19LRVlfQUdSRUVNRU5UKFBTQV9BTEdfRUNESCwgUFNBX0FMR19IS0RGKFBTQV9BTEdfU0hBXzI1NikpOlBTQV9BTEdfRUNEU0FfQU5ZOlBTQV9LRVlfVFlQRV9FQ0NfS0VZX1BBSVIoUFNBX0VDQ19GQU1JTFlfU0VDUF9SMSk6IjQ5YzlhOGMxOGM0Yjg4NTYzOGM0MzFjZjFkZjFjOTk0MTMxNjA5YjU4MGQ0ZmQ0M2EwY2FiMTdkYjJmMTNlZWUiOkNMT1NFX0JZX0NMT1NFCiAKIFBlcnNpc3RlbnQgc2xvdDogRUNQIGtleXBhaXIgKEVDREgrRUNEU0EsIGV4cG9ydGFibGUpLCBjbG9zZStyZXN0YXJ0CiBkZXBlbmRzX29uOk1CRURUTFNfRUNESF9DOk1CRURUTFNfU0hBMjU2X0M6TUJFRFRMU19FQ0RTQV9DOk1CRURUTFNfRUNQX0RQX1NFQ1AyNTZSMV9FTkFCTEVECi1wZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0ggfCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfQUxHX0VDRFNBX0FOWTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpDTE9TRV9CWV9DTE9TRV9XSVRIX1NIVVRET1dOCitwZXJzaXN0ZW50X3Nsb3RfbGlmZWN5Y2xlOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxMzY6MTpQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIIHwgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0FMR19FQ0RTQV9BTlk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6Q0xPU0VfQllfQ0xPU0VfV0lUSF9TSFVURE9XTgogCiBQZXJzaXN0ZW50IHNsb3Q6IEVDUCBrZXlwYWlyIChFQ0RIK0VDRFNBLCBleHBvcnRhYmxlKSwgcmVzdGFydAogZGVwZW5kc19vbjpNQkVEVExTX0VDREhfQzpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRAotcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZTpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTpQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfU0lHTl9IQVNIIHwgUFNBX0tFWV9VU0FHRV9WRVJJRllfSEFTSDpQU0FfQUxHX0tFWV9BR1JFRU1FTlQoUFNBX0FMR19FQ0RILCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMjU2KSk6UFNBX0FMR19FQ0RTQV9BTlk6UFNBX0tFWV9UWVBFX0VDQ19LRVlfUEFJUihQU0FfRUNDX0ZBTUlMWV9TRUNQX1IxKToiNDljOWE4YzE4YzRiODg1NjM4YzQzMWNmMWRmMWM5OTQxMzE2MDliNTgwZDRmZDQzYTBjYWIxN2RiMmYxM2VlZSI6Q0xPU0VfQllfU0hVVERPV04KK3BlcnNpc3RlbnRfc2xvdF9saWZlY3ljbGU6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjEzNzoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOX0hBU0ggfCBQU0FfS0VZX1VTQUdFX1ZFUklGWV9IQVNIOlBTQV9BTEdfS0VZX0FHUkVFTUVOVChQU0FfQUxHX0VDREgsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8yNTYpKTpQU0FfQUxHX0VDRFNBX0FOWTpQU0FfS0VZX1RZUEVfRUNDX0tFWV9QQUlSKFBTQV9FQ0NfRkFNSUxZX1NFQ1BfUjEpOiI0OWM5YThjMThjNGI4ODU2MzhjNDMxY2YxZGYxYzk5NDEzMTYwOWI1ODBkNGZkNDNhMGNhYjE3ZGIyZjEzZWVlIjpDTE9TRV9CWV9TSFVURE9XTgogCiBBdHRlbXB0IHRvIG92ZXJ3cml0ZTogY2xvc2UgYmVmb3JlCi1jcmVhdGVfZXhpc3RlbnQ6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjE6Q0xPU0VfQkVGT1JFCitjcmVhdGVfZXhpc3RlbnQ6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjB4MTczNjoxOkNMT1NFX0JFRk9SRQogCiBBdHRlbXB0IHRvIG92ZXJ3cml0ZTogY2xvc2UgYWZ0ZXIKLWNyZWF0ZV9leGlzdGVudDpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MTpDTE9TRV9BRlRFUgorY3JlYXRlX2V4aXN0ZW50OlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoweDczNjE6MTpDTE9TRV9BRlRFUgogCiBBdHRlbXB0IHRvIG92ZXJ3cml0ZToga2VlcCBvcGVuCi1jcmVhdGVfZXhpc3RlbnQ6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjE6S0VFUF9PUEVOCitjcmVhdGVfZXhpc3RlbnQ6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjB4MzYxNzoxOktFRVBfT1BFTgogCiBPcGVuIGZhaWx1cmU6IGludmFsaWQgaWRlbnRpZmllciAoMCkKIGRlcGVuZHNfb246TUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQwpAQCAtMTE4LDIzICsxMTgsMjcgQEAKIGNyZWF0ZV9mYWlsOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxOlBTQV9FUlJPUl9OT1RfU1VQUE9SVEVECiAKIENvcHkgdm9sYXRpbGUgdG8gdm9sYXRpbGUKLWNvcHlfYWNyb3NzX2xpZmV0aW1lczpQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFOjA6UFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX0NPUFk6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiNDE0MjQzNDQ0NSI6UFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRTowOlBTQV9LRVlfVVNBR0VfRVhQT1JUOjA6MDpQU0FfS0VZX1VTQUdFX0VYUE9SVDowOjAKK2NvcHlfYWNyb3NzX2xpZmV0aW1lczpQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFOjB4MTA6MDpQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfQ09QWTowOjA6UFNBX0tFWV9UWVBFX1JBV19EQVRBOiI0MTQyNDM0NDQ1IjpQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFOjB4MTA6MDpQU0FfS0VZX1VTQUdFX0VYUE9SVDowOjA6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6MDowCiAKIENvcHkgdm9sYXRpbGUgdG8gcGVyc2lzdGVudAogZGVwZW5kc19vbjpNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DCi1jb3B5X2Fjcm9zc19saWZldGltZXM6UFNBX0tFWV9MSUZFVElNRV9WT0xBVElMRTowOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9DT1BZOjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjQxNDI0MzQ0NDUiOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUOjA6MDpQU0FfS0VZX1VTQUdFX0VYUE9SVDowOjAKK2NvcHlfYWNyb3NzX2xpZmV0aW1lczpQU0FfS0VZX0xJRkVUSU1FX1ZPTEFUSUxFOjB4MTAwOjA6UFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX0NPUFk6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiNDE0MjQzNDQ0NSI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjB4MTAwOjE6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6MDowOlBTQV9LRVlfVVNBR0VfRVhQT1JUOjA6MAogCiBDb3B5IHBlcnNpc3RlbnQgdG8gdm9sYXRpbGUKIGRlcGVuZHNfb246TUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQwotY29weV9hY3Jvc3NfbGlmZXRpbWVzOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9DT1BZOjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjQxNDI0MzQ0NDUiOlBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEU6MDpQU0FfS0VZX1VTQUdFX0VYUE9SVDowOjA6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6MDowCitjb3B5X2Fjcm9zc19saWZldGltZXM6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjB4MTAwMDoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9DT1BZOjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjQxNDI0MzQ0NDUiOlBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEU6MHgxMDAwOjA6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6MDowOlBTQV9LRVlfVVNBR0VfRVhQT1JUOjA6MAogCiBDb3B5IHBlcnNpc3RlbnQgdG8gcGVyc2lzdGVudAogZGVwZW5kc19vbjpNQkVEVExTX1BTQV9DUllQVE9fU1RPUkFHRV9DCi1jb3B5X2Fjcm9zc19saWZldGltZXM6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjE6UFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX0NPUFk6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiNDE0MjQzNDQ0NSI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjI6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6MDowOlBTQV9LRVlfVVNBR0VfRVhQT1JUOjA6MAorY29weV9hY3Jvc3NfbGlmZXRpbWVzOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoweDEwMDAwOjE6UFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX0NPUFk6MDowOlBTQV9LRVlfVFlQRV9SQVdfREFUQToiNDE0MjQzNDQ0NSI6UFNBX0tFWV9MSUZFVElNRV9QRVJTSVNURU5UOjB4MTAwMDA6MjpQU0FfS0VZX1VTQUdFX0VYUE9SVDowOjA6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6MDowCisKK0NvcHkgcGVyc2lzdGVudCB0byBwZXJzaXN0ZW50LCBzYW1lIGlkIGJ1dCBkaWZmZXJlbnQgb3duZXIKK2RlcGVuZHNfb246TUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQzpNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIKK2NvcHlfYWNyb3NzX2xpZmV0aW1lczpQU0FfS0VZX0xJRkVUSU1FX1BFUlNJU1RFTlQ6MHgxMDAwMDoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9DT1BZOjA6MDpQU0FfS0VZX1RZUEVfUkFXX0RBVEE6IjQxNDI0MzQ0NDUiOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoweDEwMDAxOjE6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6MDowOlBTQV9LRVlfVVNBR0VfRVhQT1JUOjA6MAogCiBDb3B5IHBlcnNpc3RlbnQgdG8gcGVyc2lzdGVudCB3aXRoIGVucm9sbG1lbnQgYWxnb3JpdGhtCiBkZXBlbmRzX29uOk1CRURUTFNfUFNBX0NSWVBUT19TVE9SQUdFX0M6TUJFRFRMU19BRVNfQzpNQkVEVExTX0NJUEhFUl9NT0RFX0NUUjpNQkVEVExTX0NJUEhFUl9NT0RFX0NCQwotY29weV9hY3Jvc3NfbGlmZXRpbWVzOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9DT1BZOlBTQV9BTEdfQ1RSOlBTQV9BTEdfQ0JDX05PX1BBRERJTkc6UFNBX0tFWV9UWVBFX0FFUzoiNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGYiOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoyOlBTQV9LRVlfVVNBR0VfRVhQT1JUOlBTQV9BTEdfQ1RSOlBTQV9BTEdfQ0JDX05PX1BBRERJTkc6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6UFNBX0FMR19DVFI6UFNBX0FMR19DQkNfTk9fUEFERElORworY29weV9hY3Jvc3NfbGlmZXRpbWVzOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoweDEwMDAwMDoxOlBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9DT1BZOlBTQV9BTEdfQ1RSOlBTQV9BTEdfQ0JDX05PX1BBRERJTkc6UFNBX0tFWV9UWVBFX0FFUzoiNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGYiOlBTQV9LRVlfTElGRVRJTUVfUEVSU0lTVEVOVDoweDEwMDAwMDoyOlBTQV9LRVlfVVNBR0VfRVhQT1JUOlBTQV9BTEdfQ1RSOlBTQV9BTEdfQ0JDX05PX1BBRERJTkc6UFNBX0tFWV9VU0FHRV9FWFBPUlQ6UFNBX0FMR19DVFI6UFNBX0FMR19DQkNfTk9fUEFERElORwogCiBDb3B5IHZvbGF0aWxlIHRvIG9jY3VwaWVkCiBkZXBlbmRzX29uOk1CRURUTFNfUFNBX0NSWVBUT19TVE9SQUdFX0MKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3BzYV9jcnlwdG9fc2xvdF9tYW5hZ2VtZW50LmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuZnVuY3Rpb24KaW5kZXggM2ExNGIxMi4uZmEzZGQ2ZSAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuZnVuY3Rpb24KKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcHNhX2NyeXB0b19zbG90X21hbmFnZW1lbnQuZnVuY3Rpb24KQEAgLTM0LDIxICszNCwyMiBAQAogICogY29kZS4gKi8KIAogI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQykKLXN0YXRpYyBwc2Ffa2V5X2lkX3Qga2V5X2lkc191c2VkX2luX3Rlc3RbOV07CitzdGF0aWMgbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5X2lkc191c2VkX2luX3Rlc3RbOV07CiBzdGF0aWMgc2l6ZV90IG51bV9rZXlfaWRzX3VzZWQ7CiAKIC8qIFJlY29yZCBhIGtleSBpZCBhcyBwb3RlbnRpYWxseSB1c2VkIGluIGEgdGVzdCBjYXNlLiAqLwotc3RhdGljIGludCB0ZXN0X3VzZXNfa2V5X2lkKCBwc2Ffa2V5X2lkX3Qga2V5X2lkICkKK3N0YXRpYyBpbnQgdGVzdF91c2VzX2tleV9pZCggbWJlZHRsc19zdmNfa2V5X2lkX3Qga2V5X2lkICkKIHsKICAgICBzaXplX3QgaTsKLSAgICBpZigga2V5X2lkID4gUFNBX01BWF9QRVJTSVNURU5UX0tFWV9JREVOVElGSUVSICkKKyAgICBpZiggTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9LRVlfSUQoIGtleV9pZCApID4KKyAgICAgICAgUFNBX01BWF9QRVJTSVNURU5UX0tFWV9JREVOVElGSUVSICkKICAgICB7CiAgICAgICAgIC8qIERvbid0IHRvdWNoIGtleSBpZCB2YWx1ZXMgdGhhdCBkZXNpZ25hdGUgbm9uLWtleSBmaWxlcy4gKi8KICAgICAgICAgcmV0dXJuKCAxICk7CiAgICAgfQogICAgIGZvciggaSA9IDA7IGkgPCBudW1fa2V5X2lkc191c2VkIDsgaSsrICkKICAgICB7Ci0gICAgICAgIGlmKCBrZXlfaWQgPT0ga2V5X2lkc191c2VkX2luX3Rlc3RbaV0gKQorICAgICAgICBpZiggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKCBrZXlfaWQsIGtleV9pZHNfdXNlZF9pbl90ZXN0W2ldICkgKQogICAgICAgICAgICAgcmV0dXJuKCAxICk7CiAgICAgfQogICAgIGlmKCBudW1fa2V5X2lkc191c2VkID09IEFSUkFZX0xFTkdUSCgga2V5X2lkc191c2VkX2luX3Rlc3QgKSApCkBAIC0xNzIsMTMgKzE3MywxMyBAQAogLyogRU5EX0NBU0UgKi8KIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfUFNBX0NSWVBUT19TVE9SQUdFX0MgKi8KLXZvaWQgcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZSggaW50IGxpZmV0aW1lX2FyZywgaW50IGlkX2FyZywKK3ZvaWQgcGVyc2lzdGVudF9zbG90X2xpZmVjeWNsZSggaW50IGxpZmV0aW1lX2FyZywgaW50IG93bmVyX2lkX2FyZywgaW50IGlkX2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVzYWdlX2FyZywgaW50IGFsZ19hcmcsIGludCBhbGcyX2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGVfYXJnLCBkYXRhX3QgKmtleV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xvc2VfbWV0aG9kX2FyZyApCiB7CiAgICAgcHNhX2tleV9saWZldGltZV90IGxpZmV0aW1lID0gbGlmZXRpbWVfYXJnOwotICAgIHBzYV9rZXlfaWRfdCBpZCA9IGlkX2FyZzsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBpZCA9IG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCBvd25lcl9pZF9hcmcsIGlkX2FyZyApOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcgPSBhbGdfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBhbGcyID0gYWxnMl9hcmc7CiAgICAgcHNhX2tleV91c2FnZV90IHVzYWdlX2ZsYWdzID0gdXNhZ2VfYXJnOwpAQCAtMTkwLDYgKzE5MSwxMiBAQAogICAgIHVpbnQ4X3QgKnJlZXhwb3J0ZWQgPSBOVUxMOwogICAgIHNpemVfdCByZWV4cG9ydGVkX2xlbmd0aCA9IC0xOwogCisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIpCisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3Qgd3Jvbmdfb3duZXJfaWQgPQorICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggb3duZXJfaWRfYXJnICsgMSwgaWRfYXJnICk7CisgICAgcHNhX2tleV9oYW5kbGVfdCBpbnZhbGlkX2hhbmRsZSA9IDA7CisjZW5kaWYKKwogICAgIFRFU1RfVVNFU19LRVlfSUQoIGlkICk7CiAKICAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKQEAgLTIwNCw5ICsyMTEsMTYgQEAKICAgICBQU0FfQVNTRVJUKCBwc2FfaW1wb3J0X2tleSggJmF0dHJpYnV0ZXMsIGtleV9kYXRhLT54LCBrZXlfZGF0YS0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlICkgKTsKICAgICBURVNUX0FTU0VSVCggaGFuZGxlICE9IDAgKTsKKworI2lmIGRlZmluZWQoTUJFRFRMU19QU0FfQ1JZUFRPX0tFWV9JRF9FTkNPREVTX09XTkVSKQorICAgIFRFU1RfRVFVQUwoIHBzYV9vcGVuX2tleSggd3Jvbmdfb3duZXJfaWQsICZpbnZhbGlkX2hhbmRsZSApLAorICAgICAgICAgICAgICAgIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCApOworI2VuZGlmCisKICAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZhdHRyaWJ1dGVzICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9saWZldGltZSggJmF0dHJpYnV0ZXMgKSwgbGlmZXRpbWUgKTsKLSAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9pZCggJmF0dHJpYnV0ZXMgKSwgaWQgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKAorICAgICAgICAgICAgICAgICAgICAgcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICksIGlkICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV91c2FnZV9mbGFncyggJmF0dHJpYnV0ZXMgKSwgdXNhZ2VfZmxhZ3MgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9hbGdvcml0aG0oICZhdHRyaWJ1dGVzICksIGFsZyApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2Vucm9sbG1lbnRfYWxnb3JpdGhtKCAmYXR0cmlidXRlcyApLCBhbGcyICk7CkBAIC0yMTQsMTAgKzIyOCwxNyBAQAogCiAgICAgLyogQ2xvc2UgdGhlIGtleSBhbmQgcmVvcGVuIGl0LiAqLwogICAgIFBTQV9BU1NFUlQoIHBzYV9jbG9zZV9rZXkoIGhhbmRsZSApICk7CisKKyNpZiBkZWZpbmVkKE1CRURUTFNfUFNBX0NSWVBUT19LRVlfSURfRU5DT0RFU19PV05FUikKKyAgICBURVNUX0VRVUFMKCBwc2Ffb3Blbl9rZXkoIHdyb25nX293bmVyX2lkLCAmaW52YWxpZF9oYW5kbGUgKSwKKyAgICAgICAgICAgICAgICBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgKTsKKyNlbmRpZgorCiAgICAgUFNBX0FTU0VSVCggcHNhX29wZW5fa2V5KCBpZCwgJmhhbmRsZSApICk7CiAgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggaGFuZGxlLCAmYXR0cmlidXRlcyApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzICksIGxpZmV0aW1lICk7Ci0gICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICksIGlkICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3ZjX2tleV9pZF9lcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlcyApLCBpZCApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfdXNhZ2VfZmxhZ3MoICZhdHRyaWJ1dGVzICksIHVzYWdlX2ZsYWdzICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcyApLCBhbGcgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9lbnJvbGxtZW50X2FsZ29yaXRobSggJmF0dHJpYnV0ZXMgKSwgYWxnMiApOwpAQCAtMjQ3LDggKzI2OCw5IEBACiAgICAgICAgICAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCBoYW5kbGUsICZyZWFkX2F0dHJpYnV0ZXMgKSApOwogICAgICAgICAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzICksCiAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfZ2V0X2tleV9saWZldGltZSggJnJlYWRfYXR0cmlidXRlcyApICk7Ci0gICAgICAgICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9pZCggJmF0dHJpYnV0ZXMgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCAmcmVhZF9hdHRyaWJ1dGVzICkgKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3N2Y19rZXlfaWRfZXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlcyApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfZ2V0X2tleV9pZCggJnJlYWRfYXR0cmlidXRlcyApICkgKTsKICAgICAgICAgICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X3VzYWdlX2ZsYWdzKCAmYXR0cmlidXRlcyApLCB1c2FnZV9mbGFncyApOwogICAgICAgICAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfYWxnb3JpdGhtKCAmYXR0cmlidXRlcyApLAogICAgICAgICAgICAgICAgICAgICAgICAgcHNhX2dldF9rZXlfYWxnb3JpdGhtKCAmcmVhZF9hdHRyaWJ1dGVzICkgKTsKQEAgLTI5MiwxMSArMzE0LDExIEBACiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19QU0FfQ1JZUFRPX1NUT1JBR0VfQyAqLwotdm9pZCBjcmVhdGVfZXhpc3RlbnQoIGludCBsaWZldGltZV9hcmcsIGludCBpZF9hcmcsCit2b2lkIGNyZWF0ZV9leGlzdGVudCggaW50IGxpZmV0aW1lX2FyZywgaW50IG93bmVyX2lkX2FyZywgaW50IGlkX2FyZywKICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVvcGVuX3BvbGljeV9hcmcgKQogewogICAgIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZSA9IGxpZmV0aW1lX2FyZzsKLSAgICBwc2Ffa2V5X2lkX3QgaWQgPSBpZF9hcmc7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggb3duZXJfaWRfYXJnLCBpZF9hcmcgKTsKICAgICBwc2Ffa2V5X2hhbmRsZV90IGhhbmRsZTEgPSAwLCBoYW5kbGUyID0gMDsKICAgICBwc2Ffa2V5X2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgcHNhX2tleV90eXBlX3QgdHlwZTEgPSBQU0FfS0VZX1RZUEVfUkFXX0RBVEE7CkBAIC0zMzgsNyArMzYwLDggQEAKICAgICAvKiBDaGVjayB0aGF0IHRoZSBvcmlnaW5hbCBrZXkgaGFzbid0IGNoYW5nZWQuICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmYXR0cmlidXRlcyApOwogICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIGhhbmRsZTEsICZhdHRyaWJ1dGVzICkgKTsKLSAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9pZCggJmF0dHJpYnV0ZXMgKSwgaWQgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zdmNfa2V5X2lkX2VxdWFsKAorICAgICAgICAgICAgICAgICAgICAgcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzICksIGlkICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9saWZldGltZSggJmF0dHJpYnV0ZXMgKSwgbGlmZXRpbWUgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV90eXBlKCAmYXR0cmlidXRlcyApLCB0eXBlMSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X2JpdHMoICZhdHRyaWJ1dGVzICksIGJpdHMxICk7CkBAIC0zNjMsNyArMzg2LDcgQEAKIHZvaWQgb3Blbl9mYWlsKCBpbnQgaWRfYXJnLAogICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9zdGF0dXNfYXJnICkKIHsKLSAgICBwc2Ffa2V5X2lkX3QgaWQgPSBpZF9hcmc7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgaWRfYXJnICk7CiAgICAgcHNhX3N0YXR1c190IGV4cGVjdGVkX3N0YXR1cyA9IGV4cGVjdGVkX3N0YXR1c19hcmc7CiAgICAgcHNhX2tleV9oYW5kbGVfdCBoYW5kbGUgPSAweGRlYWQ7CiAKQEAgLTM4Miw3ICs0MDUsNyBAQAogICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX3N0YXR1c19hcmcgKQogewogICAgIHBzYV9rZXlfbGlmZXRpbWVfdCBsaWZldGltZSA9IGxpZmV0aW1lX2FyZzsKLSAgICBwc2Ffa2V5X2lkX3QgaWQgPSBpZF9hcmc7CisgICAgbWJlZHRsc19zdmNfa2V5X2lkX3QgaWQgPSBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgaWRfYXJnICk7CiAgICAgcHNhX2tleV9hdHRyaWJ1dGVzX3QgYXR0cmlidXRlcyA9IFBTQV9LRVlfQVRUUklCVVRFU19JTklUOwogICAgIHBzYV9zdGF0dXNfdCBleHBlY3RlZF9zdGF0dXMgPSBleHBlY3RlZF9zdGF0dXNfYXJnOwogICAgIHBzYV9rZXlfaGFuZGxlX3QgaGFuZGxlID0gMHhkZWFkOwpAQCAtNDA5LDI1ICs0MzIsMjcgQEAKIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgKi8KLXZvaWQgY29weV9hY3Jvc3NfbGlmZXRpbWVzKCBpbnQgc291cmNlX2xpZmV0aW1lX2FyZywgaW50IHNvdXJjZV9pZF9hcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvdXJjZV91c2FnZV9hcmcsCit2b2lkIGNvcHlfYWNyb3NzX2xpZmV0aW1lcyggaW50IHNvdXJjZV9saWZldGltZV9hcmcsIGludCBzb3VyY2Vfb3duZXJfaWRfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3VyY2VfaWRfYXJnLCBpbnQgc291cmNlX3VzYWdlX2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc291cmNlX2FsZ19hcmcsIGludCBzb3VyY2VfYWxnMl9hcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGVfYXJnLCBkYXRhX3QgKm1hdGVyaWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXJnZXRfbGlmZXRpbWVfYXJnLCBpbnQgdGFyZ2V0X2lkX2FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0X3VzYWdlX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0X2xpZmV0aW1lX2FyZywgaW50IHRhcmdldF9vd25lcl9pZF9hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhcmdldF9pZF9hcmcsIGludCB0YXJnZXRfdXNhZ2VfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXJnZXRfYWxnX2FyZywgaW50IHRhcmdldF9hbGcyX2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRfdXNhZ2VfYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9hbGdfYXJnLCBpbnQgZXhwZWN0ZWRfYWxnMl9hcmcgKQogewogICAgIHBzYV9rZXlfbGlmZXRpbWVfdCBzb3VyY2VfbGlmZXRpbWUgPSBzb3VyY2VfbGlmZXRpbWVfYXJnOwotICAgIHBzYV9rZXlfaWRfdCBzb3VyY2VfaWQgPSBzb3VyY2VfaWRfYXJnOworICAgIG1iZWR0bHNfc3ZjX2tleV9pZF90IHNvdXJjZV9pZCA9CisgICAgICAgIG1iZWR0bHNfc3ZjX2tleV9pZF9tYWtlKCBzb3VyY2Vfb3duZXJfaWRfYXJnLCBzb3VyY2VfaWRfYXJnICk7CiAgICAgcHNhX2tleV91c2FnZV90IHNvdXJjZV91c2FnZSA9IHNvdXJjZV91c2FnZV9hcmc7CiAgICAgcHNhX2FsZ29yaXRobV90IHNvdXJjZV9hbGcgPSBzb3VyY2VfYWxnX2FyZzsKICAgICBwc2Ffa2V5X2hhbmRsZV90IHNvdXJjZV9oYW5kbGUgPSAwOwogICAgIHBzYV9rZXlfYXR0cmlidXRlc190IHNvdXJjZV9hdHRyaWJ1dGVzID0gUFNBX0tFWV9BVFRSSUJVVEVTX0lOSVQ7CiAgICAgcHNhX2tleV90eXBlX3Qgc291cmNlX3R5cGUgPSB0eXBlX2FyZzsKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgdGFyZ2V0X2xpZmV0aW1lID0gdGFyZ2V0X2xpZmV0aW1lX2FyZzsKLSAgICBwc2Ffa2V5X2lkX3QgdGFyZ2V0X2lkID0gdGFyZ2V0X2lkX2FyZzsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCB0YXJnZXRfaWQgPQorICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggdGFyZ2V0X293bmVyX2lkX2FyZywgdGFyZ2V0X2lkX2FyZyApOwogICAgIHBzYV9rZXlfdXNhZ2VfdCB0YXJnZXRfdXNhZ2UgPSB0YXJnZXRfdXNhZ2VfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCB0YXJnZXRfYWxnID0gdGFyZ2V0X2FsZ19hcmc7CiAgICAgcHNhX2tleV9oYW5kbGVfdCB0YXJnZXRfaGFuZGxlID0gMDsKQEAgLTQ0MywxMSArNDY4LDkgQEAKICAgICBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKTsKIAogICAgIC8qIFBvcHVsYXRlIHRoZSBzb3VyY2Ugc2xvdC4gKi8KLSAgICBpZiggc291cmNlX2xpZmV0aW1lICE9IFBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUgKQotICAgIHsKLSAgICAgICAgcHNhX3NldF9rZXlfaWQoICZzb3VyY2VfYXR0cmlidXRlcywgc291cmNlX2lkICk7Ci0gICAgICAgIHBzYV9zZXRfa2V5X2xpZmV0aW1lKCAmc291cmNlX2F0dHJpYnV0ZXMsIHNvdXJjZV9saWZldGltZSApOwotICAgIH0KKyAgICBwc2Ffc2V0X2tleV9pZCggJnNvdXJjZV9hdHRyaWJ1dGVzLCBzb3VyY2VfaWQgKTsKKyAgICBwc2Ffc2V0X2tleV9saWZldGltZSggJnNvdXJjZV9hdHRyaWJ1dGVzLCBzb3VyY2VfbGlmZXRpbWUgKTsKKwogICAgIHBzYV9zZXRfa2V5X3R5cGUoICZzb3VyY2VfYXR0cmlidXRlcywgc291cmNlX3R5cGUgKTsKICAgICBwc2Ffc2V0X2tleV91c2FnZV9mbGFncyggJnNvdXJjZV9hdHRyaWJ1dGVzLCBzb3VyY2VfdXNhZ2UgKTsKICAgICBwc2Ffc2V0X2tleV9hbGdvcml0aG0oICZzb3VyY2VfYXR0cmlidXRlcywgc291cmNlX2FsZyApOwpAQCAtNDU5LDExICs0ODIsOSBAQAogICAgIFBTQV9BU1NFUlQoIHBzYV9nZXRfa2V5X2F0dHJpYnV0ZXMoIHNvdXJjZV9oYW5kbGUsICZzb3VyY2VfYXR0cmlidXRlcyApICk7CiAKICAgICAvKiBQcmVwYXJlIHRoZSB0YXJnZXQgc2xvdC4gKi8KLSAgICBpZiggdGFyZ2V0X2xpZmV0aW1lICE9IFBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUgKQotICAgIHsKLSAgICAgICAgcHNhX3NldF9rZXlfaWQoICZ0YXJnZXRfYXR0cmlidXRlcywgdGFyZ2V0X2lkICk7Ci0gICAgICAgIHBzYV9zZXRfa2V5X2xpZmV0aW1lKCAmdGFyZ2V0X2F0dHJpYnV0ZXMsIHRhcmdldF9saWZldGltZSApOwotICAgIH0KKyAgICBwc2Ffc2V0X2tleV9pZCggJnRhcmdldF9hdHRyaWJ1dGVzLCB0YXJnZXRfaWQgKTsKKyAgICBwc2Ffc2V0X2tleV9saWZldGltZSggJnRhcmdldF9hdHRyaWJ1dGVzLCB0YXJnZXRfbGlmZXRpbWUgKTsKKwogICAgIHBzYV9zZXRfa2V5X3VzYWdlX2ZsYWdzKCAmdGFyZ2V0X2F0dHJpYnV0ZXMsIHRhcmdldF91c2FnZSApOwogICAgIHBzYV9zZXRfa2V5X2FsZ29yaXRobSggJnRhcmdldF9hdHRyaWJ1dGVzLCB0YXJnZXRfYWxnICk7CiAgICAgcHNhX3NldF9rZXlfZW5yb2xsbWVudF9hbGdvcml0aG0oICZ0YXJnZXRfYXR0cmlidXRlcywgdGFyZ2V0X2FsZzJfYXJnICk7CkBAIC00ODcsNyArNTA4LDIxIEBACiAgICAgLyogVGVzdCB0aGF0IHRoZSB0YXJnZXQgc2xvdCBoYXMgdGhlIGV4cGVjdGVkIGNvbnRlbnQuICovCiAgICAgcHNhX3Jlc2V0X2tleV9hdHRyaWJ1dGVzKCAmdGFyZ2V0X2F0dHJpYnV0ZXMgKTsKICAgICBQU0FfQVNTRVJUKCBwc2FfZ2V0X2tleV9hdHRyaWJ1dGVzKCB0YXJnZXRfaGFuZGxlLCAmdGFyZ2V0X2F0dHJpYnV0ZXMgKSApOwotICAgIFRFU1RfRVFVQUwoIHRhcmdldF9pZCwgcHNhX2dldF9rZXlfaWQoICZ0YXJnZXRfYXR0cmlidXRlcyApICk7CisKKyAgICBpZiggdGFyZ2V0X2xpZmV0aW1lICE9IFBTQV9LRVlfTElGRVRJTUVfVk9MQVRJTEUgKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3ZjX2tleV9pZF9lcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfaWQsIHBzYV9nZXRfa2V5X2lkKCAmdGFyZ2V0X2F0dHJpYnV0ZXMgKSApICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWYgZGVmaW5lZChNQkVEVExTX1BTQV9DUllQVE9fS0VZX0lEX0VOQ09ERVNfT1dORVIpCisgICAgICAgIFRFU1RfRVFVQUwoIE1CRURUTFNfU1ZDX0tFWV9JRF9HRVRfT1dORVJfSUQoIHRhcmdldF9pZCApLAorICAgICAgICAgICAgICAgICAgICB0YXJnZXRfb3duZXJfaWRfYXJnICk7CisjZW5kaWYKKyAgICAgICAgVEVTVF9FUVVBTCggTUJFRFRMU19TVkNfS0VZX0lEX0dFVF9LRVlfSUQoIHRhcmdldF9pZCApLCAwICk7CisgICAgfQorCiAgICAgVEVTVF9FUVVBTCggdGFyZ2V0X2xpZmV0aW1lLCBwc2FfZ2V0X2tleV9saWZldGltZSggJnRhcmdldF9hdHRyaWJ1dGVzICkgKTsKICAgICBURVNUX0VRVUFMKCBzb3VyY2VfdHlwZSwgcHNhX2dldF9rZXlfdHlwZSggJnRhcmdldF9hdHRyaWJ1dGVzICkgKTsKICAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9iaXRzKCAmc291cmNlX2F0dHJpYnV0ZXMgKSwKQEAgLTUzNCwxMyArNTY5LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXJnZXRfdHlwZV9hcmcsIGRhdGFfdCAqdGFyZ2V0X21hdGVyaWFsICkKIHsKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3Qgc291cmNlX2xpZmV0aW1lID0gc291cmNlX2xpZmV0aW1lX2FyZzsKLSAgICBwc2Ffa2V5X2lkX3Qgc291cmNlX2lkID0gc291cmNlX2lkX2FyZzsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCBzb3VyY2VfaWQgPQorICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgc291cmNlX2lkX2FyZyApOwogICAgIHBzYV9rZXlfdXNhZ2VfdCBzb3VyY2VfdXNhZ2UgPSBzb3VyY2VfdXNhZ2VfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCBzb3VyY2VfYWxnID0gc291cmNlX2FsZ19hcmc7CiAgICAgcHNhX2tleV9oYW5kbGVfdCBzb3VyY2VfaGFuZGxlID0gMDsKICAgICBwc2Ffa2V5X3R5cGVfdCBzb3VyY2VfdHlwZSA9IHNvdXJjZV90eXBlX2FyZzsKICAgICBwc2Ffa2V5X2xpZmV0aW1lX3QgdGFyZ2V0X2xpZmV0aW1lID0gdGFyZ2V0X2xpZmV0aW1lX2FyZzsKLSAgICBwc2Ffa2V5X2lkX3QgdGFyZ2V0X2lkID0gdGFyZ2V0X2lkX2FyZzsKKyAgICBtYmVkdGxzX3N2Y19rZXlfaWRfdCB0YXJnZXRfaWQgPQorICAgICAgICBtYmVkdGxzX3N2Y19rZXlfaWRfbWFrZSggMSwgdGFyZ2V0X2lkX2FyZyApOwogICAgIHBzYV9rZXlfdXNhZ2VfdCB0YXJnZXRfdXNhZ2UgPSB0YXJnZXRfdXNhZ2VfYXJnOwogICAgIHBzYV9hbGdvcml0aG1fdCB0YXJnZXRfYWxnID0gdGFyZ2V0X2FsZ19hcmc7CiAgICAgcHNhX2tleV9oYW5kbGVfdCB0YXJnZXRfaGFuZGxlID0gMDsKQEAgLTU3MCw3ICs2MDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc291cmNlX2hhbmRsZSApICk7CiAKICAgICAvKiBQb3B1bGF0ZSB0aGUgdGFyZ2V0IHNsb3QuICovCi0gICAgaWYoIHRhcmdldF9pZCA9PSBzb3VyY2VfaWQgKQorICAgIGlmKCBtYmVkdGxzX3N2Y19rZXlfaWRfZXF1YWwoIHRhcmdldF9pZCwgc291cmNlX2lkICkgKQogICAgIHsKICAgICAgICAgdGFyZ2V0X2hhbmRsZSA9IHNvdXJjZV9oYW5kbGU7CiAgICAgfQpAQCAtNTk3LDggKzYzNCw5IEBACiAKICAgICAvKiBUZXN0IHRoYXQgdGhlIHRhcmdldCBzbG90IGlzIHVuYWZmZWN0ZWQuICovCiAgICAgUFNBX0FTU0VSVCggcHNhX2dldF9rZXlfYXR0cmlidXRlcyggdGFyZ2V0X2hhbmRsZSwgJmF0dHJpYnV0ZXMyICkgKTsKLSAgICBURVNUX0VRVUFMKCBwc2FfZ2V0X2tleV9pZCggJmF0dHJpYnV0ZXMxICksCi0gICAgICAgICAgICAgICAgcHNhX2dldF9rZXlfaWQoICZhdHRyaWJ1dGVzMiApICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3ZjX2tleV9pZF9lcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlczEgKSwKKyAgICAgICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2lkKCAmYXR0cmlidXRlczIgKSApICk7CiAgICAgVEVTVF9FUVVBTCggcHNhX2dldF9rZXlfbGlmZXRpbWUoICZhdHRyaWJ1dGVzMSApLAogICAgICAgICAgICAgICAgIHBzYV9nZXRfa2V5X2xpZmV0aW1lKCAmYXR0cmlidXRlczIgKSApOwogICAgIFRFU1RfRVFVQUwoIHBzYV9nZXRfa2V5X3R5cGUoICZhdHRyaWJ1dGVzMSApLApkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcnNhLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfcnNhLmZ1bmN0aW9uCmluZGV4IDkwMzM1ZGIuLjZjNzNlMzkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3JzYS5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9yc2EuZnVuY3Rpb24KQEAgLTQ3MSw3ICs0NzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlnZXN0LCBpbnQgbW9kLCBpbnQgcmFkaXhfUCwgY2hhciAqIGlucHV0X1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9RLCBjaGFyICogaW5wdXRfUSwgaW50IHJhZGl4X04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBpbnB1dF9OLCBpbnQgcmFkaXhfRSwgY2hhciAqIGlucHV0X0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogcmVzdWx0X3N0ciwgaW50IHJlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBoYXNoX3Jlc3VsdFtNQkVEVExTX01EX01BWF9TSVpFXTsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsyNTZdOwpAQCAtNTA3LDggKzUwNyw4IEBACiAgICAgaWYoIHJlc3VsdCA9PSAwICkKICAgICB7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X2hleF9zdHItPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLCByZXN1bHRfaGV4X3N0ci0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfc3RyLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwgcmVzdWx0X3N0ci0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTU1Nyw3ICs1NTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYWRkaW5nX21vZGUsIGludCBtb2QsIGludCByYWRpeF9QLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBpbnB1dF9QLCBpbnQgcmFkaXhfUSwgY2hhciAqIGlucHV0X1EsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X04sIGNoYXIgKiBpbnB1dF9OLCBpbnQgcmFkaXhfRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogaW5wdXRfRSwgZGF0YV90ICogcmVzdWx0X2hleF9zdHIgKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBpbnB1dF9FLCBkYXRhX3QgKiByZXN1bHRfc3RyICkKIHsKICAgICB1bnNpZ25lZCBjaGFyIG91dHB1dFsyNTZdOwogICAgIG1iZWR0bHNfcnNhX2NvbnRleHQgY3R4OwpAQCAtNTg4LDggKzU4OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfcmVzdWx0LT54LCBvdXRwdXQgKSA9PSAwICk7CiAKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9oZXhfc3RyLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLCByZXN1bHRfaGV4X3N0ci0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9zdHItPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9zdHItPmxlbiApID09IDAgKTsKIAogI2lmIGRlZmluZWQoTUJFRFRMU19QS0NTMV9WMTUpCiAgICAgLyogRm9yIFBLQ1MjMSB2MS41LCB0aGVyZSBpcyBhbiBhbHRlcm5hdGl2ZSB3YXkgdG8gZ2VuZXJhdGUgc2lnbmF0dXJlcyAqLwpAQCAtNjEyLDkgKzYxMiw5IEBACiAKICAgICAgICAgaWYoIHJlcyA9PSAwICkKICAgICAgICAgewotICAgICAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X2hleF9zdHItPngsCisgICAgICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfc3RyLT54LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2hleF9zdHItPmxlbiApID09IDAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3RyLT5sZW4gKSA9PSAwICk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYgLyogTUJFRFRMU19QS0NTMV9WMTUgKi8KQEAgLTY5Miw3ICs2OTIsNyBAQAogdm9pZCBtYmVkdGxzX3JzYV9wa2NzMV9lbmNyeXB0KCBkYXRhX3QgKiBtZXNzYWdlX3N0ciwgaW50IHBhZGRpbmdfbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZCwgaW50IHJhZGl4X04sIGNoYXIgKiBpbnB1dF9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFkaXhfRSwgY2hhciAqIGlucHV0X0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHJlc3VsdF9oZXhfc3RyLCBpbnQgcmVzdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogcmVzdWx0X3N0ciwgaW50IHJlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjU2XTsKICAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eDsKQEAgLTcyMiw4ICs3MjIsOCBAQAogICAgIGlmKCByZXN1bHQgPT0gMCApCiAgICAgewogCi0gICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9oZXhfc3RyLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwgcmVzdWx0X2hleF9zdHItPmxlbiApID09IDAgKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X3N0ci0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9zdHItPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC03MzYsNyArNzM2LDcgQEAKIHZvaWQgcnNhX3BrY3MxX2VuY3J5cHRfYmFkX3JuZyggZGF0YV90ICogbWVzc2FnZV9zdHIsIGludCBwYWRkaW5nX21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2QsIGludCByYWRpeF9OLCBjaGFyICogaW5wdXRfTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X0UsIGNoYXIgKiBpbnB1dF9FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiByZXN1bHRfaGV4X3N0ciwgaW50IHJlc3VsdCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHJlc3VsdF9zdHIsIGludCByZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzI1Nl07CiAgICAgbWJlZHRsc19yc2FfY29udGV4dCBjdHg7CkBAIC03NjIsOCArNzYyLDggQEAKICAgICBpZiggcmVzdWx0ID09IDAgKQogICAgIHsKIAotICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfaGV4X3N0ci0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5sZW4sIHJlc3VsdF9oZXhfc3RyLT5sZW4gKSA9PSAwICk7CisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9zdHItPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLCByZXN1bHRfc3RyLT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpAQCAtNzc3LDcgKzc3Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2QsIGludCByYWRpeF9QLCBjaGFyICogaW5wdXRfUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhZGl4X1EsIGNoYXIgKiBpbnB1dF9RLCBpbnQgcmFkaXhfTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGlucHV0X04sIGludCByYWRpeF9FLCBjaGFyICogaW5wdXRfRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF9vdXRwdXQsIGRhdGFfdCAqIHJlc3VsdF9oZXhfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X291dHB1dCwgZGF0YV90ICogcmVzdWx0X3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMzJdOwpAQCAtODE0LDkgKzgxNCw5IEBACiAgICAgaWYoIHJlc3VsdCA9PSAwICkKICAgICB7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X2hleF9zdHItPngsCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9zdHItPngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2hleF9zdHItPmxlbiApID09IDAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdHItPmxlbiApID09IDAgKTsKICAgICB9CiAKIGV4aXQ6CkBAIC04MjksNyArODI5LDcgQEAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgbWJlZHRsc19yc2FfcHVibGljKCBkYXRhX3QgKiBtZXNzYWdlX3N0ciwgaW50IG1vZCwgaW50IHJhZGl4X04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGlucHV0X04sIGludCByYWRpeF9FLCBjaGFyICogaW5wdXRfRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiByZXN1bHRfaGV4X3N0ciwgaW50IHJlc3VsdCApCisgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogcmVzdWx0X3N0ciwgaW50IHJlc3VsdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMjU2XTsKICAgICBtYmVkdGxzX3JzYV9jb250ZXh0IGN0eCwgY3R4MjsgLyogQWxzbyB0ZXN0IG1iZWR0bHNfcnNhX2NvcHkoKSB3aGlsZSBhdCBpdCAqLwpAQCAtODUzLDggKzg1Myw4IEBACiAgICAgaWYoIHJlc3VsdCA9PSAwICkKICAgICB7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X2hleF9zdHItPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLCByZXN1bHRfaGV4X3N0ci0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfc3RyLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwgcmVzdWx0X3N0ci0+bGVuICkgPT0gMCApOwogICAgIH0KIAogICAgIC8qIEFuZCBub3cgd2l0aCB0aGUgY29weSAqLwpAQCAtODY5LDggKzg2OSw4IEBACiAgICAgaWYoIHJlc3VsdCA9PSAwICkKICAgICB7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X2hleF9zdHItPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGVuLCByZXN1bHRfaGV4X3N0ci0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfc3RyLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwgcmVzdWx0X3N0ci0+bGVuICkgPT0gMCApOwogICAgIH0KIAogZXhpdDoKQEAgLTg4NCw3ICs4ODQsNyBAQAogdm9pZCBtYmVkdGxzX3JzYV9wcml2YXRlKCBkYXRhX3QgKiBtZXNzYWdlX3N0ciwgaW50IG1vZCwgaW50IHJhZGl4X1AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBpbnB1dF9QLCBpbnQgcmFkaXhfUSwgY2hhciAqIGlucHV0X1EsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYWRpeF9OLCBjaGFyICogaW5wdXRfTiwgaW50IHJhZGl4X0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBpbnB1dF9FLCBkYXRhX3QgKiByZXN1bHRfaGV4X3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIGlucHV0X0UsIGRhdGFfdCAqIHJlc3VsdF9zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzI1Nl07CkBAIC05MjEsOSArOTIxLDkgQEAKICAgICAgICAgaWYoIHJlc3VsdCA9PSAwICkKICAgICAgICAgewogCi0gICAgICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfaGV4X3N0ci0+eCwKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9zdHItPngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfaGV4X3N0ci0+bGVuICkgPT0gMCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdHItPmxlbiApID09IDAgKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtOTQxLDkgKzk0MSw5IEBACiAgICAgaWYoIHJlc3VsdCA9PSAwICkKICAgICB7CiAKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X2hleF9zdHItPngsCisgICAgICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIHJlc3VsdF9zdHItPngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgyLmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9oZXhfc3RyLT5sZW4gKSA9PSAwICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3RyLT5sZW4gKSA9PSAwICk7CiAgICAgfQogCiBleGl0OgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc2hheC5mdW5jdGlvbiBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NoYXguZnVuY3Rpb24KaW5kZXggNjQyODAwOS4uZjM0NzdlYyAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc2hheC5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zaGF4LmZ1bmN0aW9uCkBAIC01Miw3ICs1Miw3IEBACiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TSEExX0MgKi8KLXZvaWQgbWJlZHRsc19zaGExKCBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfaGFzaF9zdHJpbmcgKQordm9pZCBtYmVkdGxzX3NoYTEoIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhhc2ggKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzQxXTsKIApAQCAtNjEsOCArNjEsNyBAQAogCiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc2hhMV9yZXQoIHNyY19zdHItPngsIHNyY19zdHItPmxlbiwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCwgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwgMjAsIGhhc2gtPmxlbiApID09IDAgKTsKIH0KIC8qIEVORF9DQVNFICovCiAKQEAgLTEyMyw3ICsxMjIsNyBAQAogLyogRU5EX0NBU0UgKi8KIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MgKi8KLXZvaWQgc2hhMjI0KCBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfaGFzaF9zdHJpbmcgKQordm9pZCBzaGEyMjQoIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhhc2ggKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzU3XTsKIApAQCAtMTMyLDEzICsxMzEsMTIgQEAKIAogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3NoYTI1Nl9yZXQoIHNyY19zdHItPngsIHNyY19zdHItPmxlbiwgb3V0cHV0LCAxICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOCwgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwgMjgsIGhhc2gtPmxlbiApID09IDAgKTsKIH0KIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NIQTI1Nl9DICovCi12b2lkIG1iZWR0bHNfc2hhMjU2KCBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfaGFzaF9zdHJpbmcgKQordm9pZCBtYmVkdGxzX3NoYTI1NiggZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGFzaCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbNjVdOwogCkBAIC0xNDcsOCArMTQ1LDcgQEAKIAogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3NoYTI1Nl9yZXQoIHNyY19zdHItPngsIHNyY19zdHItPmxlbiwgb3V0cHV0LCAwICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwgMzIsIGhhc2gtPmxlbiApID09IDAgKTsKIH0KIC8qIEVORF9DQVNFICovCiAKQEAgLTIwOSw3ICsyMDYsNyBAQAogLyogRU5EX0NBU0UgKi8KIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0MgKi8KLXZvaWQgc2hhMzg0KCBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfaGFzaF9zdHJpbmcgKQordm9pZCBzaGEzODQoIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGhhc2ggKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0Wzk3XTsKIApAQCAtMjE4LDEzICsyMTUsMTIgQEAKIAogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3NoYTUxMl9yZXQoIHNyY19zdHItPngsIHNyY19zdHItPmxlbiwgb3V0cHV0LCAxICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2hhc2hfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OCwgaGV4X2hhc2hfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGFzaC0+eCwgNDgsIGhhc2gtPmxlbiApID09IDAgKTsKIH0KIC8qIEVORF9DQVNFICovCiAKIC8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NIQTUxMl9DICovCi12b2lkIG1iZWR0bHNfc2hhNTEyKCBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfaGFzaF9zdHJpbmcgKQordm9pZCBtYmVkdGxzX3NoYTUxMiggZGF0YV90ICogc3JjX3N0ciwgZGF0YV90ICogaGFzaCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTI5XTsKIApAQCAtMjMzLDggKzIyOSw3IEBACiAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zaGE1MTJfcmV0KCBzcmNfc3RyLT54LCBzcmNfc3RyLT5sZW4sIG91dHB1dCwgMCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9oYXNoX3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQsIGhleF9oYXNoX3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhhc2gtPngsIDY0LCBoYXNoLT5sZW4gKSA9PSAwICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zc2wuZGF0YSBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NzbC5kYXRhCmluZGV4IGQzMTU4ZmQuLjZlNjUzZmYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NzbC5kYXRhCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NzbC5kYXRhCkBAIC05Mzc0LDYgKzkzNzQsMTE1NyBAQAogZGVwZW5kc19vbjpNQkVEVExTX0NJUEhFUl9OVUxMX0NJUEhFUjpNQkVEVExTX1NTTF9QUk9UT19TU0wzOk1CRURUTFNfTUQ1X0M6TUJFRFRMU19TU0xfRU5DUllQVF9USEVOX01BQwogc3NsX2NyeXB0X3JlY29yZF9zbWFsbDpNQkVEVExTX0NJUEhFUl9OVUxMOk1CRURUTFNfTURfTUQ1OjE6MTpNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzA6MDowCiAKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBNRDUgIXRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1pbnBhZAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjA6LTEKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIE1ENSAhdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWF4cGFkCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9NRDU6MDotMgorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgTUQ1IHRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1pbnBhZAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjE6LTEKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIE1ENSB0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtYXhwYWQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX01ENToxOi0yCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBNRDUgIXRydW5jLCBwYWRsZW49MAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjA6MAorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgTUQ1ICF0cnVuYywgcGFkbGVuPTI0MAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjA6MjQwCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBNRDUgdHJ1bmMsIHBhZGxlbj0wCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9NRDU6MTowCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBNRDUgdHJ1bmMsIHBhZGxlbj0yNDAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX01ENToxOjI0MAorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgTUQ1ICF0cnVuYywgcGFkbGVuPTEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX01ENTowOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIE1ENSAhdHJ1bmMsIHBhZGxlbj0yNDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX01ENTowOjI0MQorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgTUQ1IHRydW5jLCBwYWRsZW49MQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjE6MQorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgTUQ1IHRydW5jLCBwYWRsZW49MjQxCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9NRDU6MToyNDEKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIE1ENSAhdHJ1bmMsIHBhZGxlbj0xNQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjA6MTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIE1ENSAhdHJ1bmMsIHBhZGxlbj0yNTUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX01ENTowOjI1NQorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgTUQ1IHRydW5jLCBwYWRsZW49MTUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX01ENToxOjE1CisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBNRDUgdHJ1bmMsIHBhZGxlbj0yNTUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX01ENToxOjI1NQorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgU0hBMSAhdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWlucGFkCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMTowOi0xCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEExICF0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtYXhwYWQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEExOjA6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTEgdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWlucGFkCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMToxOi0xCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEExIHRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1heHBhZAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MTotMgorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgU0hBMSAhdHJ1bmMsIHBhZGxlbj0wCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMTowOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTEgIXRydW5jLCBwYWRsZW49MjQwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMTowOjI0MAorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgU0hBMSB0cnVuYywgcGFkbGVuPTAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEExOjE6MAorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgU0hBMSB0cnVuYywgcGFkbGVuPTI0MAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MToyNDAKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTEgIXRydW5jLCBwYWRsZW49MQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MDoxCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEExICF0cnVuYywgcGFkbGVuPTI0MQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MDoyNDEKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTEgdHJ1bmMsIHBhZGxlbj0xCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMToxOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTEgdHJ1bmMsIHBhZGxlbj0yNDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEExOjE6MjQxCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEExICF0cnVuYywgcGFkbGVuPTE1CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMTowOjE1CisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEExICF0cnVuYywgcGFkbGVuPTI1NQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MDoyNTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTEgdHJ1bmMsIHBhZGxlbj0xNQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MToxNQorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgU0hBMSB0cnVuYywgcGFkbGVuPTI1NQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MToyNTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTI1NiAhdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWlucGFkCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDotMQorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgU0hBMjU2ICF0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtYXhwYWQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTI1NjowOi0yCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEEyNTYgdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWlucGFkCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MTotMQorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgU0hBMjU2IHRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1heHBhZAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTI1NiAhdHJ1bmMsIHBhZGxlbj0wCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDowCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEEyNTYgIXRydW5jLCBwYWRsZW49MjQwCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDoyNDAKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTI1NiB0cnVuYywgcGFkbGVuPTAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTI1NjoxOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTI1NiB0cnVuYywgcGFkbGVuPTI0MAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6MjQwCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEEyNTYgIXRydW5jLCBwYWRsZW49MQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjA6MQorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgU0hBMjU2ICF0cnVuYywgcGFkbGVuPTI0MQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjA6MjQxCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEEyNTYgdHJ1bmMsIHBhZGxlbj0xCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MToxCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEEyNTYgdHJ1bmMsIHBhZGxlbj0yNDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTI1NjoxOjI0MQorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgU0hBMjU2ICF0cnVuYywgcGFkbGVuPTE1CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDoxNQorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgU0hBMjU2ICF0cnVuYywgcGFkbGVuPTI1NQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjA6MjU1CisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEEyNTYgdHJ1bmMsIHBhZGxlbj0xNQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6MTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTI1NiB0cnVuYywgcGFkbGVuPTI1NQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6MjU1CisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEEzODQgIXRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1pbnBhZAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MDotMQorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgU0hBMzg0ICF0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtYXhwYWQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjA6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTM4NCB0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtaW5wYWQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjE6LTEKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTM4NCB0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtYXhwYWQKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjE6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTM4NCAhdHJ1bmMsIHBhZGxlbj0wCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDowOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTM4NCAhdHJ1bmMsIHBhZGxlbj0yNDAKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjA6MjQwCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEEzODQgdHJ1bmMsIHBhZGxlbj0wCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDoxOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTM4NCB0cnVuYywgcGFkbGVuPTI0MAorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MToyNDAKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTM4NCAhdHJ1bmMsIHBhZGxlbj0xCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDowOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTM4NCAhdHJ1bmMsIHBhZGxlbj0yNDEKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjA6MjQxCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEEzODQgdHJ1bmMsIHBhZGxlbj0xCitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDoxOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTM4NCB0cnVuYywgcGFkbGVuPTI0MQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MToyNDEKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTM4NCAhdHJ1bmMsIHBhZGxlbj0xNQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MDoxNQorCitEZWNyeXB0IENCQyAhRXRNLCBBRVMgU0hBMzg0ICF0cnVuYywgcGFkbGVuPTI1NQorZGVwZW5kc19vbjpNQkVEVExTX0FFU19DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQUVTXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MDoyNTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQUVTIFNIQTM4NCB0cnVuYywgcGFkbGVuPTE1CitkZXBlbmRzX29uOk1CRURUTFNfQUVTX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BRVNfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDoxOjE1CisKK0RlY3J5cHQgQ0JDICFFdE0sIEFFUyBTSEEzODQgdHJ1bmMsIHBhZGxlbj0yNTUKK2RlcGVuZHNfb246TUJFRFRMU19BRVNfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FFU18xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjE6MjU1CisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgTUQ1ICF0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtaW5wYWQKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjA6LTEKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBNRDUgIXRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1heHBhZAorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9NRDU6MDotMgorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIE1ENSB0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtaW5wYWQKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjE6LTEKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBNRDUgdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWF4cGFkCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENToxOi0yCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgTUQ1ICF0cnVuYywgcGFkbGVuPTAKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjA6MAorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIE1ENSAhdHJ1bmMsIHBhZGxlbj0yNDAKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjA6MjQwCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgTUQ1IHRydW5jLCBwYWRsZW49MAorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9NRDU6MTowCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgTUQ1IHRydW5jLCBwYWRsZW49MjQwCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENToxOjI0MAorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIE1ENSAhdHJ1bmMsIHBhZGxlbj0xCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENTowOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBNRDUgIXRydW5jLCBwYWRsZW49MjQxCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENTowOjI0MQorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIE1ENSB0cnVuYywgcGFkbGVuPTEKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjE6MQorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIE1ENSB0cnVuYywgcGFkbGVuPTI0MQorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9NRDU6MToyNDEKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBNRDUgIXRydW5jLCBwYWRsZW49MTUKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjA6MTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBNRDUgIXRydW5jLCBwYWRsZW49MjU1CitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENTowOjI1NQorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIE1ENSB0cnVuYywgcGFkbGVuPTE1CitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENToxOjE1CisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgTUQ1IHRydW5jLCBwYWRsZW49MjU1CitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENToxOjI1NQorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIFNIQTEgIXRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1pbnBhZAorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMTowOi0xCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMSAhdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWF4cGFkCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEExOjA6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEExIHRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1pbnBhZAorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMToxOi0xCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMSB0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtYXhwYWQKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MTotMgorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIFNIQTEgIXRydW5jLCBwYWRsZW49MAorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMTowOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEExICF0cnVuYywgcGFkbGVuPTI0MAorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMTowOjI0MAorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIFNIQTEgdHJ1bmMsIHBhZGxlbj0wCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEExOjE6MAorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIFNIQTEgdHJ1bmMsIHBhZGxlbj0yNDAKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MToyNDAKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEExICF0cnVuYywgcGFkbGVuPTEKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MDoxCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMSAhdHJ1bmMsIHBhZGxlbj0yNDEKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MDoyNDEKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEExIHRydW5jLCBwYWRsZW49MQorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMToxOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEExIHRydW5jLCBwYWRsZW49MjQxCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEExOjE6MjQxCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMSAhdHJ1bmMsIHBhZGxlbj0xNQorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMTowOjE1CisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMSAhdHJ1bmMsIHBhZGxlbj0yNTUKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MDoyNTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEExIHRydW5jLCBwYWRsZW49MTUKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MToxNQorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIFNIQTEgdHJ1bmMsIHBhZGxlbj0yNTUKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MToyNTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEyNTYgIXRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1pbnBhZAorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDotMQorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIFNIQTI1NiAhdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWF4cGFkCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTI1NjowOi0yCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMjU2IHRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1pbnBhZAorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MTotMQorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIFNIQTI1NiB0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtYXhwYWQKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEyNTYgIXRydW5jLCBwYWRsZW49MAorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDowCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMjU2ICF0cnVuYywgcGFkbGVuPTI0MAorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDoyNDAKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEyNTYgdHJ1bmMsIHBhZGxlbj0wCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTI1NjoxOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEyNTYgdHJ1bmMsIHBhZGxlbj0yNDAKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6MjQwCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMjU2ICF0cnVuYywgcGFkbGVuPTEKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjA6MQorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIFNIQTI1NiAhdHJ1bmMsIHBhZGxlbj0yNDEKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjA6MjQxCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMjU2IHRydW5jLCBwYWRsZW49MQorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MToxCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMjU2IHRydW5jLCBwYWRsZW49MjQxCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTI1NjoxOjI0MQorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIFNIQTI1NiAhdHJ1bmMsIHBhZGxlbj0xNQorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDoxNQorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIFNIQTI1NiAhdHJ1bmMsIHBhZGxlbj0yNTUKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjA6MjU1CisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMjU2IHRydW5jLCBwYWRsZW49MTUKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6MTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEyNTYgdHJ1bmMsIHBhZGxlbj0yNTUKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6MjU1CisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMzg0ICF0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtaW5wYWQKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MDotMQorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIFNIQTM4NCAhdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWF4cGFkCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjA6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEzODQgdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWlucGFkCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjE6LTEKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEzODQgdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWF4cGFkCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjE6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEzODQgIXRydW5jLCBwYWRsZW49MAorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDowOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEzODQgIXRydW5jLCBwYWRsZW49MjQwCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjA6MjQwCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMzg0IHRydW5jLCBwYWRsZW49MAorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDoxOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEzODQgdHJ1bmMsIHBhZGxlbj0yNDAKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MToyNDAKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEzODQgIXRydW5jLCBwYWRsZW49MQorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDowOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEzODQgIXRydW5jLCBwYWRsZW49MjQxCitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjA6MjQxCisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMzg0IHRydW5jLCBwYWRsZW49MQorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDoxOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEzODQgdHJ1bmMsIHBhZGxlbj0yNDEKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MToyNDEKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEzODQgIXRydW5jLCBwYWRsZW49MTUKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MDoxNQorCitEZWNyeXB0IENCQyAhRXRNLCBBUklBIFNIQTM4NCAhdHJ1bmMsIHBhZGxlbj0yNTUKK2RlcGVuZHNfb246TUJFRFRMU19BUklBX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9BUklBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MDoyNTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQVJJQSBTSEEzODQgdHJ1bmMsIHBhZGxlbj0xNQorZGVwZW5kc19vbjpNQkVEVExTX0FSSUFfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0FSSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDoxOjE1CisKK0RlY3J5cHQgQ0JDICFFdE0sIEFSSUEgU0hBMzg0IHRydW5jLCBwYWRsZW49MjU1CitkZXBlbmRzX29uOk1CRURUTFNfQVJJQV9DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQVJJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjE6MjU1CisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIE1ENSAhdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWlucGFkCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjA6LTEKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgTUQ1ICF0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtYXhwYWQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9NRDU6MDotMgorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBNRDUgdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWlucGFkCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjE6LTEKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgTUQ1IHRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1heHBhZAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENToxOi0yCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIE1ENSAhdHJ1bmMsIHBhZGxlbj0wCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjA6MAorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBNRDUgIXRydW5jLCBwYWRsZW49MjQwCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjA6MjQwCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIE1ENSB0cnVuYywgcGFkbGVuPTAKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9NRDU6MTowCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIE1ENSB0cnVuYywgcGFkbGVuPTI0MAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENToxOjI0MAorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBNRDUgIXRydW5jLCBwYWRsZW49MQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENTowOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgTUQ1ICF0cnVuYywgcGFkbGVuPTI0MQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENTowOjI0MQorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBNRDUgdHJ1bmMsIHBhZGxlbj0xCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjE6MQorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBNRDUgdHJ1bmMsIHBhZGxlbj0yNDEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9NRDU6MToyNDEKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgTUQ1ICF0cnVuYywgcGFkbGVuPTE1CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfTUQ1OjA6MTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgTUQ1ICF0cnVuYywgcGFkbGVuPTI1NQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENTowOjI1NQorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBNRDUgdHJ1bmMsIHBhZGxlbj0xNQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENToxOjE1CisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIE1ENSB0cnVuYywgcGFkbGVuPTI1NQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX01ENToxOjI1NQorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBTSEExICF0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtaW5wYWQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMTowOi0xCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTEgIXRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1heHBhZAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEExOjA6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMSB0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtaW5wYWQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMToxOi0xCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTEgdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWF4cGFkCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MTotMgorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBTSEExICF0cnVuYywgcGFkbGVuPTAKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMTowOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMSAhdHJ1bmMsIHBhZGxlbj0yNDAKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMTowOjI0MAorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBTSEExIHRydW5jLCBwYWRsZW49MAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEExOjE6MAorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBTSEExIHRydW5jLCBwYWRsZW49MjQwCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MToyNDAKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMSAhdHJ1bmMsIHBhZGxlbj0xCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MDoxCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTEgIXRydW5jLCBwYWRsZW49MjQxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MDoyNDEKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMSB0cnVuYywgcGFkbGVuPTEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMToxOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMSB0cnVuYywgcGFkbGVuPTI0MQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEExOjE6MjQxCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTEgIXRydW5jLCBwYWRsZW49MTUKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMTowOjE1CisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTEgIXRydW5jLCBwYWRsZW49MjU1CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MDoyNTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMSB0cnVuYywgcGFkbGVuPTE1CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MToxNQorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBTSEExIHRydW5jLCBwYWRsZW49MjU1CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTE6MToyNTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMjU2ICF0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtaW5wYWQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDotMQorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBTSEEyNTYgIXRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1heHBhZAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTI1NjowOi0yCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTI1NiB0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtaW5wYWQKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MTotMQorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBTSEEyNTYgdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWF4cGFkCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMjU2ICF0cnVuYywgcGFkbGVuPTAKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDowCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTI1NiAhdHJ1bmMsIHBhZGxlbj0yNDAKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDoyNDAKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMjU2IHRydW5jLCBwYWRsZW49MAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTI1NjoxOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMjU2IHRydW5jLCBwYWRsZW49MjQwCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6MjQwCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTI1NiAhdHJ1bmMsIHBhZGxlbj0xCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjA6MQorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBTSEEyNTYgIXRydW5jLCBwYWRsZW49MjQxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjA6MjQxCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTI1NiB0cnVuYywgcGFkbGVuPTEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MToxCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTI1NiB0cnVuYywgcGFkbGVuPTI0MQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTI1NjoxOjI0MQorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBTSEEyNTYgIXRydW5jLCBwYWRsZW49MTUKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDoxNQorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBTSEEyNTYgIXRydW5jLCBwYWRsZW49MjU1CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjA6MjU1CisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTI1NiB0cnVuYywgcGFkbGVuPTE1CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6MTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMjU2IHRydW5jLCBwYWRsZW49MjU1CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6MjU1CisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTM4NCAhdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWlucGFkCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MDotMQorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBTSEEzODQgIXRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1heHBhZAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjA6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMzg0IHRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1pbnBhZAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjE6LTEKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMzg0IHRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1heHBhZAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjE6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMzg0ICF0cnVuYywgcGFkbGVuPTAKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDowOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMzg0ICF0cnVuYywgcGFkbGVuPTI0MAorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjA6MjQwCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTM4NCB0cnVuYywgcGFkbGVuPTAKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDoxOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMzg0IHRydW5jLCBwYWRsZW49MjQwCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MToyNDAKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMzg0ICF0cnVuYywgcGFkbGVuPTEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDowOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMzg0ICF0cnVuYywgcGFkbGVuPTI0MQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjA6MjQxCisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTM4NCB0cnVuYywgcGFkbGVuPTEKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDoxOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMzg0IHRydW5jLCBwYWRsZW49MjQxCitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MToyNDEKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMzg0ICF0cnVuYywgcGFkbGVuPTE1CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MDoxNQorCitEZWNyeXB0IENCQyAhRXRNLCBDQU1FTExJQSBTSEEzODQgIXRydW5jLCBwYWRsZW49MjU1CitkZXBlbmRzX29uOk1CRURUTFNfQ0FNRUxMSUFfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0NBTUVMTElBXzEyOF9DQkM6TUJFRFRMU19NRF9TSEEzODQ6MDoyNTUKKworRGVjcnlwdCBDQkMgIUV0TSwgQ0FNRUxMSUEgU0hBMzg0IHRydW5jLCBwYWRsZW49MTUKK2RlcGVuZHNfb246TUJFRFRMU19DQU1FTExJQV9DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfQ0FNRUxMSUFfMTI4X0NCQzpNQkVEVExTX01EX1NIQTM4NDoxOjE1CisKK0RlY3J5cHQgQ0JDICFFdE0sIENBTUVMTElBIFNIQTM4NCB0cnVuYywgcGFkbGVuPTI1NQorZGVwZW5kc19vbjpNQkVEVExTX0NBTUVMTElBX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9DQU1FTExJQV8xMjhfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjE6MjU1CisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgTUQ1ICF0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtaW5wYWQKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9NRDU6MDotMQorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIE1ENSAhdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWF4cGFkCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfTUQ1OjA6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBNRDUgdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWlucGFkCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfTUQ1OjE6LTEKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBNRDUgdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWF4cGFkCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfTUQ1OjE6LTIKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBNRDUgIXRydW5jLCBwYWRsZW49MAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX01ENTowOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBNRDUgIXRydW5jLCBwYWRsZW49MjQ4CitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfTUQ1OjA6MjQ4CisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgTUQ1IHRydW5jLCBwYWRsZW49MAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX01ENToxOjAKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBNRDUgdHJ1bmMsIHBhZGxlbj0yNDgKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9NRDU6MToyNDgKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBNRDUgIXRydW5jLCBwYWRsZW49MQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX01ENTowOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBNRDUgIXRydW5jLCBwYWRsZW49MjQ5CitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfTUQ1OjA6MjQ5CisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgTUQ1IHRydW5jLCBwYWRsZW49MQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX01ENToxOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBNRDUgdHJ1bmMsIHBhZGxlbj0yNDkKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9NRDU6MToyNDkKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBNRDUgIXRydW5jLCBwYWRsZW49NworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX01ENTowOjcKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBNRDUgIXRydW5jLCBwYWRsZW49MjU1CitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19NRDVfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfTUQ1OjA6MjU1CisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgTUQ1IHRydW5jLCBwYWRsZW49NworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfTUQ1X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX01ENToxOjcKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBNRDUgdHJ1bmMsIHBhZGxlbj0yNTUKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX01ENV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9NRDU6MToyNTUKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBTSEExICF0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtaW5wYWQKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfU0hBMTowOi0xCisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMSAhdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWF4cGFkCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTE6MDotMgorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTEgdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWlucGFkCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTE6MTotMQorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTEgdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWF4cGFkCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTE6MTotMgorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTEgIXRydW5jLCBwYWRsZW49MAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEExOjA6MAorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTEgIXRydW5jLCBwYWRsZW49MjQ4CitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTE6MDoyNDgKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBTSEExIHRydW5jLCBwYWRsZW49MAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEExOjE6MAorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTEgdHJ1bmMsIHBhZGxlbj0yNDgKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfU0hBMToxOjI0OAorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTEgIXRydW5jLCBwYWRsZW49MQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEExOjA6MQorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTEgIXRydW5jLCBwYWRsZW49MjQ5CitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTE6MDoyNDkKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBTSEExIHRydW5jLCBwYWRsZW49MQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEExOjE6MQorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTEgdHJ1bmMsIHBhZGxlbj0yNDkKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfU0hBMToxOjI0OQorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTEgIXRydW5jLCBwYWRsZW49NworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEExOjA6NworCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTEgIXRydW5jLCBwYWRsZW49MjU1CitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEExX0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTE6MDoyNTUKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBTSEExIHRydW5jLCBwYWRsZW49NworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMV9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEExOjE6NworCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTEgdHJ1bmMsIHBhZGxlbj0yNTUKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTFfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfU0hBMToxOjI1NQorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTI1NiAhdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWlucGFkCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjA6LTEKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBTSEEyNTYgIXRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1heHBhZAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTI1NjowOi0yCisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMjU2IHRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1pbnBhZAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTI1NjoxOi0xCisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMjU2IHRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1heHBhZAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTI1NjoxOi0yCisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMjU2ICF0cnVuYywgcGFkbGVuPTAKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDowCisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMjU2ICF0cnVuYywgcGFkbGVuPTI0OAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTI1NjowOjI0OAorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTI1NiB0cnVuYywgcGFkbGVuPTAKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEEyNTY6MTowCisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMjU2IHRydW5jLCBwYWRsZW49MjQ4CitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6MjQ4CisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMjU2ICF0cnVuYywgcGFkbGVuPTEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDoxCisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMjU2ICF0cnVuYywgcGFkbGVuPTI0OQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTI1NjowOjI0OQorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTI1NiB0cnVuYywgcGFkbGVuPTEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEEyNTY6MToxCisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMjU2IHRydW5jLCBwYWRsZW49MjQ5CitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6MjQ5CisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMjU2ICF0cnVuYywgcGFkbGVuPTcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEEyNTY6MDo3CisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMjU2ICF0cnVuYywgcGFkbGVuPTI1NQorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTI1NjowOjI1NQorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTI1NiB0cnVuYywgcGFkbGVuPTcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTI1Nl9DCitzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEEyNTY6MTo3CisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMjU2IHRydW5jLCBwYWRsZW49MjU1CitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEEyNTZfQworc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfU0hBMjU2OjE6MjU1CisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMzg0ICF0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtaW5wYWQKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTM4NDowOi0xCisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMzg0ICF0cnVuYywgZW1wdHkgcGxhaW50ZXh0LCBtYXhwYWQKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTM4NDowOi0yCisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMzg0IHRydW5jLCBlbXB0eSBwbGFpbnRleHQsIG1pbnBhZAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjE6LTEKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBTSEEzODQgdHJ1bmMsIGVtcHR5IHBsYWludGV4dCwgbWF4cGFkCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEEzODQ6MTotMgorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTM4NCAhdHJ1bmMsIHBhZGxlbj0wCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEEzODQ6MDowCisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMzg0ICF0cnVuYywgcGFkbGVuPTI0OAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjA6MjQ4CisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMzg0IHRydW5jLCBwYWRsZW49MAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjE6MAorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTM4NCB0cnVuYywgcGFkbGVuPTI0OAorZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjE6MjQ4CisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMzg0ICF0cnVuYywgcGFkbGVuPTEKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTM4NDowOjEKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBTSEEzODQgIXRydW5jLCBwYWRsZW49MjQ5CitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEEzODQ6MDoyNDkKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBTSEEzODQgdHJ1bmMsIHBhZGxlbj0xCitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEEzODQ6MToxCisKK0RlY3J5cHQgQ0JDICFFdE0sIDNERVMgU0hBMzg0IHRydW5jLCBwYWRsZW49MjQ5CitkZXBlbmRzX29uOk1CRURUTFNfREVTX0M6TUJFRFRMU19TSEE1MTJfQzohTUJFRFRMU19TSEE1MTJfTk9fU0hBMzg0Citzc2xfZGVjcnlwdF9ub25fZXRtX2NiYzpNQkVEVExTX0NJUEhFUl9ERVNfRURFM19DQkM6TUJFRFRMU19NRF9TSEEzODQ6MToyNDkKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBTSEEzODQgIXRydW5jLCBwYWRsZW49NworZGVwZW5kc19vbjpNQkVEVExTX0RFU19DOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmM6TUJFRFRMU19DSVBIRVJfREVTX0VERTNfQ0JDOk1CRURUTFNfTURfU0hBMzg0OjA6NworCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTM4NCAhdHJ1bmMsIHBhZGxlbj0yNTUKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTM4NDowOjI1NQorCitEZWNyeXB0IENCQyAhRXRNLCAzREVTIFNIQTM4NCB0cnVuYywgcGFkbGVuPTcKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTM4NDoxOjcKKworRGVjcnlwdCBDQkMgIUV0TSwgM0RFUyBTSEEzODQgdHJ1bmMsIHBhZGxlbj0yNTUKK2RlcGVuZHNfb246TUJFRFRMU19ERVNfQzpNQkVEVExTX1NIQTUxMl9DOiFNQkVEVExTX1NIQTUxMl9OT19TSEEzODQKK3NzbF9kZWNyeXB0X25vbl9ldG1fY2JjOk1CRURUTFNfQ0lQSEVSX0RFU19FREUzX0NCQzpNQkVEVExTX01EX1NIQTM4NDoxOjI1NQorCitTU0wgVExTIDEuMyBLZXkgc2NoZWR1bGU6IFNlY3JldCBldm9sdXRpb24gIzEKKyMgVmVjdG9yIGZyb20gVExTIDEuMyBCeXRlIGJ5IEJ5dGUgKGh0dHBzOi8vdGxzMTMudWxmaGVpbS5uZXQvKQorIyBJbml0aWFsIHNlY3JldCB0byBFYXJseSBTZWNyZXQKK2RlcGVuZHNfb246TUJFRFRMU19TU0xfUFJPVE9fVExTMV8zX0VYUEVSSU1FTlRBTAorc3NsX3RsczFfM19rZXlfZXZvbHV0aW9uOk1CRURUTFNfTURfU0hBMjU2OiIiOiIiOiIzM2FkMGExYzYwN2VjMDNiMDllNmNkOTg5MzY4MGNlMjEwYWRmMzAwYWExZjI2NjBlMWIyMmUxMGYxNzBmOTJhIgorCitTU0wgVExTIDEuMyBLZXkgc2NoZWR1bGU6IFNlY3JldCBldm9sdXRpb24gIzIKKyMgVmVjdG9yIGZyb20gVExTIDEuMyBCeXRlIGJ5IEJ5dGUgKGh0dHBzOi8vdGxzMTMudWxmaGVpbS5uZXQvKQorIyBFYXJseSBzZWNyZXQgdG8gSGFuZHNoYWtlIFNlY3JldAorc3NsX3RsczFfM19rZXlfZXZvbHV0aW9uOk1CRURUTFNfTURfU0hBMjU2OiIzM2FkMGExYzYwN2VjMDNiMDllNmNkOTg5MzY4MGNlMjEwYWRmMzAwYWExZjI2NjBlMWIyMmUxMGYxNzBmOTJhIjoiZGY0YTI5MWJhYTFlYjdjZmE2OTM0YjI5YjQ3NGJhYWQyNjk3ZTI5ZjFmOTIwZGNjNzdjOGEwYTA4ODQ0NzYyNCI6ImZiOWZjODA2ODliM2E1ZDAyYzMzMjQzYmY2OWExYjFiMjA3MDU1ODhhNzk0MzA0YTZlNzEyMDE1NWVkZjE0OWEiCisKK1NTTCBUTFMgMS4zIEtleSBzY2hlZHVsZTogU2VjcmV0IGV2b2x1dGlvbiAjMworIyBWZWN0b3IgZnJvbSBUTFMgMS4zIEJ5dGUgYnkgQnl0ZSAoaHR0cHM6Ly90bHMxMy51bGZoZWltLm5ldC8pCisjIEhhbmRzaGFrZSBzZWNyZXQgdG8gTWFzdGVyIFNlY3JldAorc3NsX3RsczFfM19rZXlfZXZvbHV0aW9uOk1CRURUTFNfTURfU0hBMjU2OiJmYjlmYzgwNjg5YjNhNWQwMmMzMzI0M2JmNjlhMWIxYjIwNzA1NTg4YTc5NDMwNGE2ZTcxMjAxNTVlZGYxNDlhIjoiIjoiN2YyODgyYmI5YjlhNDYyNjU5NDE2NTNlOWMyZjE5MDY3MTE4MTUxZTIxZDEyZTU3YTdiNmFjYTFmODE1MGM4ZCIKKworU1NMIFRMUyAxLjMgS2V5IHNjaGVkdWxlOiBIS0RGIEV4cGFuZCBMYWJlbCAjMQorIyBWZWN0b3IgZnJvbSBUTFMgMS4zIEJ5dGUgYnkgQnl0ZSAoaHR0cHM6Ly90bHMxMy51bGZoZWltLm5ldC8pCisjIFNlcnZlciBoYW5kc2hha2UgdHJhZmZpYyBzZWNyZXQgLT4gU2VydmVyIHRyYWZmaWMga2V5CisjIEhLREYtRXhwYW5kLUxhYmVsKHNlcnZlcl9oYW5kc2hha2Vfc2VjcmV0LCAia2V5IiwgIiIsIDE2KQorc3NsX3RsczFfM19oa2RmX2V4cGFuZF9sYWJlbDpNQkVEVExTX01EX1NIQTI1NjoiYTIwNjcyNjVlN2YwNjUyYTkyM2Q1ZDcyYWIwNDY3YzQ2MTMyZWViOTY4YjZhMzJkMzExYzgwNTg2ODU0ODgxNCI6dGxzMV8zX2xhYmVsX2tleToiIjoxNjoiODQ0NzgwYTdhY2FkOWY5ODBmYTI1YzExNGU0MzQwMmEiCisKK1NTTCBUTFMgMS4zIEtleSBzY2hlZHVsZTogSEtERiBFeHBhbmQgTGFiZWwgIzIKKyMgVmVjdG9yIGZyb20gVExTIDEuMyBCeXRlIGJ5IEJ5dGUgKGh0dHBzOi8vdGxzMTMudWxmaGVpbS5uZXQvKQorIyBTZXJ2ZXIgaGFuZHNoYWtlIHRyYWZmaWMgc2VjcmV0IC0+IFNlcnZlciB0cmFmZmljIElWCisjIEhLREYtRXhwYW5kLUxhYmVsKHNlcnZlcl9oYW5kc2hha2Vfc2VjcmV0LCAiaXYiLCAiIiwgMTIpCitzc2xfdGxzMV8zX2hrZGZfZXhwYW5kX2xhYmVsOk1CRURUTFNfTURfU0hBMjU2OiJhMjA2NzI2NWU3ZjA2NTJhOTIzZDVkNzJhYjA0NjdjNDYxMzJlZWI5NjhiNmEzMmQzMTFjODA1ODY4NTQ4ODE0Ijp0bHMxXzNfbGFiZWxfaXY6IiI6MTI6IjRjMDQyZGRjMTIwYTM4ZDE0MTdmYzgxNSIKKworU1NMIFRMUyAxLjMgS2V5IHNjaGVkdWxlOiBIS0RGIEV4cGFuZCBMYWJlbCAjMworIyBWZWN0b3IgZnJvbSBUTFMgMS4zIEJ5dGUgYnkgQnl0ZSAoaHR0cHM6Ly90bHMxMy51bGZoZWltLm5ldC8pCisjIENsaWVudCBoYW5kc2hha2UgdHJhZmZpYyBzZWNyZXQgLT4gQ2xpZW50IHRyYWZmaWMga2V5CisjIEhLREYtRXhwYW5kLUxhYmVsKGNsaWVudF9oYW5kc2hha2Vfc2VjcmV0LCAia2V5IiwgIiIsIDE2KQorc3NsX3RsczFfM19oa2RmX2V4cGFuZF9sYWJlbDpNQkVEVExTX01EX1NIQTI1NjoiZmYwZTViOTY1MjkxYzYwOGMxZThjZDI2N2VlZmMwYWZjYzVlOThhMjc4NjM3M2YwZGI0N2IwNDc4NmQ3MmFlYSI6dGxzMV8zX2xhYmVsX2tleToiIjoxNjoiNzE1NGYzMTRlNmJlN2RjMDA4ZGYyYzgzMmJhYTFkMzkiCisKK1NTTCBUTFMgMS4zIEtleSBzY2hlZHVsZTogSEtERiBFeHBhbmQgTGFiZWwgIzQKKyMgVmVjdG9yIGZyb20gVExTIDEuMyBCeXRlIGJ5IEJ5dGUgKGh0dHBzOi8vdGxzMTMudWxmaGVpbS5uZXQvKQorIyBDbGllbnQgaGFuZHNoYWtlIHRyYWZmaWMgc2VjcmV0IC0+IENsaWVudCB0cmFmZmljIElWCisjIEhLREYtRXhwYW5kLUxhYmVsKGNsaWVudF9oYW5kc2hha2Vfc2VjcmV0LCAiaXYiLCAiIiwgMTIpCitzc2xfdGxzMV8zX2hrZGZfZXhwYW5kX2xhYmVsOk1CRURUTFNfTURfU0hBMjU2OiJmZjBlNWI5NjUyOTFjNjA4YzFlOGNkMjY3ZWVmYzBhZmNjNWU5OGEyNzg2MzczZjBkYjQ3YjA0Nzg2ZDcyYWVhIjp0bHMxXzNfbGFiZWxfaXY6IiI6MTI6IjcxYWJjMmNhZTRjNjk5ZDQ3YzYwMDI2OCIKKworU1NMIFRMUyAxLjMgS2V5IHNjaGVkdWxlOiBIS0RGIEV4cGFuZCBMYWJlbCAjNSAoUkZDIDg0NDgpCisjIFZlY3RvciBmcm9tIFJGQyA4NDQ4CisjIFNlcnZlciBoYW5kc2hha2UgdHJhZmZpYyBzZWNyZXQgLT4gU2VydmVyIHRyYWZmaWMgSVYKKyMgSEtERi1FeHBhbmQtTGFiZWwoc2VydmVyX2hhbmRzaGFrZV9zZWNyZXQsICJpdiIsICIiLCAxMikKK3NzbF90bHMxXzNfaGtkZl9leHBhbmRfbGFiZWw6TUJFRFRMU19NRF9TSEEyNTY6ImI2N2I3ZDY5MGNjMTZjNGU3NWU1NDIxM2NiMmQzN2I0ZTljOTEyYmNkZWQ5MTA1ZDQyYmVmZDU5ZDM5MWFkMzgiOnRsczFfM19sYWJlbF9pdjoiIjoxMjoiNWQzMTNlYjI2NzEyNzZlZTEzMDAwYjMwIgorCitTU0wgVExTIDEuMyBLZXkgc2NoZWR1bGU6IEhLREYgRXhwYW5kIExhYmVsICM2IChSRkMgODQ0OCkKKyMgVmVjdG9yIGZyb20gUkZDIDg0NDgKKyMgU2VydmVyIGhhbmRzaGFrZSB0cmFmZmljIHNlY3JldCAtPiBTZXJ2ZXIgdHJhZmZpYyBLZXkKKyMgSEtERi1FeHBhbmQtTGFiZWwoc2VydmVyX2hhbmRzaGFrZV9zZWNyZXQsICJrZXkiLCAiIiwgMTYpCitzc2xfdGxzMV8zX2hrZGZfZXhwYW5kX2xhYmVsOk1CRURUTFNfTURfU0hBMjU2OiJiNjdiN2Q2OTBjYzE2YzRlNzVlNTQyMTNjYjJkMzdiNGU5YzkxMmJjZGVkOTEwNWQ0MmJlZmQ1OWQzOTFhZDM4Ijp0bHMxXzNfbGFiZWxfa2V5OiIiOjE2OiIzZmNlNTE2MDA5YzIxNzI3ZDBmMmU0ZTg2ZWU0MDNiYyIKKworU1NMIFRMUyAxLjMgS2V5IHNjaGVkdWxlOiBIS0RGIEV4cGFuZCBMYWJlbCAjNyAoUkZDIDg0NDgpCisjIFZlY3RvciBmcm9tIFJGQyA4NDQ4CisjIENsaWVudCBoYW5kc2hha2UgdHJhZmZpYyBzZWNyZXQgLT4gQ2xpZW50IHRyYWZmaWMgSVYKKyMgSEtERi1FeHBhbmQtTGFiZWwoY2xpZW50X2hhbmRzaGFrZV9zZWNyZXQsICJpdiIsICIiLCAxMikKK3NzbF90bHMxXzNfaGtkZl9leHBhbmRfbGFiZWw6TUJFRFRMU19NRF9TSEEyNTY6ImIzZWRkYjEyNmUwNjdmMzVhNzgwYjNhYmY0NWUyZDhmM2IxYTk1MDczOGY1MmU5NjAwNzQ2YTBlMjdhNTVhMjEiOnRsczFfM19sYWJlbF9pdjoiIjoxMjoiNWJkM2M3MWI4MzZlMGI3NmJiNzMyNjVmIgorCitTU0wgVExTIDEuMyBLZXkgc2NoZWR1bGU6IEhLREYgRXhwYW5kIExhYmVsICM4IChSRkMgODQ0OCkKKyMgVmVjdG9yIGZyb20gUkZDIDg0NDgKKyMgQ2xpZW50IGhhbmRzaGFrZSB0cmFmZmljIHNlY3JldCAtPiBDbGllbnQgdHJhZmZpYyBLZXkKKyMgSEtERi1FeHBhbmQtTGFiZWwoY2xpZW50X2hhbmRzaGFrZV9zZWNyZXQsICJrZXkiLCAiIiwgMTYpCitzc2xfdGxzMV8zX2hrZGZfZXhwYW5kX2xhYmVsOk1CRURUTFNfTURfU0hBMjU2OiJiM2VkZGIxMjZlMDY3ZjM1YTc4MGIzYWJmNDVlMmQ4ZjNiMWE5NTA3MzhmNTJlOTYwMDc0NmEwZTI3YTU1YTIxIjp0bHMxXzNfbGFiZWxfa2V5OiIiOjE2OiJkYmZhYTY5M2QxNzYyYzViNjY2YWY1ZDk1MDI1OGQwMSIKKworU1NMIFRMUyAxLjMgS2V5IHNjaGVkdWxlOiBIS0RGIEV4cGFuZCBMYWJlbCAjOSAoUkZDIDg0NDgpCisjIENhbGN1bGF0aW9uIG9mIGZpbmlzaGVkX2tleQorc3NsX3RsczFfM19oa2RmX2V4cGFuZF9sYWJlbDpNQkVEVExTX01EX1NIQTI1NjoiMmZhYWMwOGY4NTFkMzVmZWEzNjA0ZmNiNGRlODJkYzYyYzliMTY0YTcwOTc0ZDA0NjJlMjdmMWFiMjc4NzAwZiI6dGxzMV8zX2xhYmVsX2ZpbmlzaGVkOiIiOjMyOiI1YWNlMzk0YzI2OTgwZDU4MTI0M2Y2MjdkMTE1MGFlMjdlMzdmYTUyMzY0ZTBhN2YyMGFjNjg2ZDA5Y2QwZThlIgorCitTU0wgVExTIDEuMyBLZXkgc2NoZWR1bGU6IEhLREYgRXhwYW5kIExhYmVsICMxMCAoUkZDIDg0NDgpCisjIENhbGN1bGF0aW9uIG9mIHJlc3VtcHRpb24ga2V5Citzc2xfdGxzMV8zX2hrZGZfZXhwYW5kX2xhYmVsOk1CRURUTFNfTURfU0hBMjU2OiI3ZGYyMzVmMjAzMWQyYTA1MTI4N2QwMmIwMjQxYjBiZmRhZjg2Y2M4NTYyMzFmMmQ1YWJhNDZjNDM0ZWMxOTZjIjp0bHMxXzNfbGFiZWxfcmVzdW1wdGlvbjoiMDAwMCI6MzI6IjRlY2QwZWI2ZWMzYjRkODdmNWQ2MDI4ZjkyMmNhNGM1ODUxYTI3N2ZkNDEzMTFjOWU2MmQyYzk0OTJlMWM0ZjMiCisKK1NTTCBUTFMgMS4zIEtleSBzY2hlZHVsZTogVHJhZmZpYyBrZXkgZ2VuZXJhdGlvbiAjMQorIyBWZWN0b3IgZnJvbSBUTFMgMS4zIEJ5dGUgYnkgQnl0ZSAoaHR0cHM6Ly90bHMxMy51bGZoZWltLm5ldC8pCisjIENsaWVudC9TZXJ2ZXIgaGFuZHNoYWtlIHRyYWZmaWMgc2VjcmV0cyAtPiBDbGllbnQvU2VydmVyIHRyYWZmaWMge0tleSxJVn0KK3NzbF90bHMxXzNfdHJhZmZpY19rZXlfZ2VuZXJhdGlvbjpNQkVEVExTX01EX1NIQTI1NjoiYTIwNjcyNjVlN2YwNjUyYTkyM2Q1ZDcyYWIwNDY3YzQ2MTMyZWViOTY4YjZhMzJkMzExYzgwNTg2ODU0ODgxNCI6ImZmMGU1Yjk2NTI5MWM2MDhjMWU4Y2QyNjdlZWZjMGFmY2M1ZTk4YTI3ODYzNzNmMGRiNDdiMDQ3ODZkNzJhZWEiOjEyOjE2OiI4NDQ3ODBhN2FjYWQ5Zjk4MGZhMjVjMTE0ZTQzNDAyYSI6IjRjMDQyZGRjMTIwYTM4ZDE0MTdmYzgxNSI6IjcxNTRmMzE0ZTZiZTdkYzAwOGRmMmM4MzJiYWExZDM5IjoiNzFhYmMyY2FlNGM2OTlkNDdjNjAwMjY4IgorCitTU0wgVExTIDEuMyBLZXkgc2NoZWR1bGU6IFRyYWZmaWMga2V5IGdlbmVyYXRpb24gIzIgKFJGQyA4NDQ4KQorIyBWZWN0b3IgUkZDIDg0NDgKKyMgQ2xpZW50L1NlcnZlciBoYW5kc2hha2UgdHJhZmZpYyBzZWNyZXRzIC0+IENsaWVudC9TZXJ2ZXIgdHJhZmZpYyB7S2V5LElWfQorc3NsX3RsczFfM190cmFmZmljX2tleV9nZW5lcmF0aW9uOk1CRURUTFNfTURfU0hBMjU2OiJhMjA2NzI2NWU3ZjA2NTJhOTIzZDVkNzJhYjA0NjdjNDYxMzJlZWI5NjhiNmEzMmQzMTFjODA1ODY4NTQ4ODE0IjoiZmYwZTViOTY1MjkxYzYwOGMxZThjZDI2N2VlZmMwYWZjYzVlOThhMjc4NjM3M2YwZGI0N2IwNDc4NmQ3MmFlYSI6MTI6MTY6Ijg0NDc4MGE3YWNhZDlmOTgwZmEyNWMxMTRlNDM0MDJhIjoiNGMwNDJkZGMxMjBhMzhkMTQxN2ZjODE1IjoiNzE1NGYzMTRlNmJlN2RjMDA4ZGYyYzgzMmJhYTFkMzkiOiI3MWFiYzJjYWU0YzY5OWQ0N2M2MDAyNjgiCisKK1NTTCBUTFMgMS4zIEtleSBzY2hlZHVsZTogRGVyaXZlLVNlY3JldCggLiwgImRlcml2ZWQiLCAiIikKKyMgVmVjdG9yIGZyb20gVExTIDEuMyBCeXRlIGJ5IEJ5dGUgKGh0dHBzOi8vdGxzMTMudWxmaGVpbS5uZXQvKQorIyBEZXJpdmUtU2VjcmV0KCBFYXJseS1TZWNyZXQsICJkZXJpdmVkIiwgIiIpCisjIFRlc3RzIHRoZSBjYXNlIHdoZXJlIGNvbnRleHQgaXNuJ3QgeWV0IGhhc2hlZCAoZW1wdHkgc3RyaW5nIGhlcmUsCisjIGJ1dCBzdGlsbCBuZWVkcyB0byBiZSBoYXNoZWQpCitzc2xfdGxzMV8zX2Rlcml2ZV9zZWNyZXQ6TUJFRFRMU19NRF9TSEEyNTY6IjMzYWQwYTFjNjA3ZWMwM2IwOWU2Y2Q5ODkzNjgwY2UyMTBhZGYzMDBhYTFmMjY2MGUxYjIyZTEwZjE3MGY5MmEiOnRsczFfM19sYWJlbF9kZXJpdmVkOiIiOjMyOk1CRURUTFNfU1NMX1RMUzFfM19DT05URVhUX1VOSEFTSEVEOiI2ZjI2MTVhMTA4YzcwMmM1Njc4ZjU0ZmM5ZGJhYjY5NzE2YzA3NjE4OWM0ODI1MGNlYmVhYzM1NzZjMzYxMWJhIgorCitTU0wgVExTIDEuMyBLZXkgc2NoZWR1bGU6IERlcml2ZS1TZWNyZXQoIC4sICJzIGFwIHRyYWZmaWMiLCBoYXNoKSAjMQorIyBWZWN0b3IgZnJvbSBUTFMgMS4zIEJ5dGUgYnkgQnl0ZSAoaHR0cHM6Ly90bHMxMy51bGZoZWltLm5ldC8pCisjIERlcml2ZS1TZWNyZXQoIE1hc3RlclNlY3JldCwgInMgYXAgdHJhZmZpYyIsIGhhc2gpCisjIFRlc3RzIHRoZSBjYXNlIHdoZXJlIGNvbnRleHQgaXMgYWxyZWFkeSBoYXNoZWQKK3NzbF90bHMxXzNfZGVyaXZlX3NlY3JldDpNQkVEVExTX01EX1NIQTI1NjoiN2YyODgyYmI5YjlhNDYyNjU5NDE2NTNlOWMyZjE5MDY3MTE4MTUxZTIxZDEyZTU3YTdiNmFjYTFmODE1MGM4ZCI6dGxzMV8zX2xhYmVsX3NfYXBfdHJhZmZpYzoiMjI4NDRiOTMwZTVlMGE1OWEwOWQ1YWMzNWZjMDMyZmM5MTE2M2IxOTM4NzRhMjY1MjM2ZTU2ODA3NzM3OGQ4YiI6MzI6TUJFRFRMU19TU0xfVExTMV8zX0NPTlRFWFRfSEFTSEVEOiIzZmMzNWVhNzA2OTMwNjlhMjc3OTU2YWZhMjNiOGY0NTQzY2U2OGFjNTk1ZjJhYWNlMDVjZDdhMWM5MjAyM2Q1IgorCitTU0wgVExTIDEuMyBLZXkgc2NoZWR1bGU6IERlcml2ZS1TZWNyZXQoIC4sICJjIGUgdHJhZmZpYyIsIGhhc2gpCisjIFZlY3RvciBmcm9tIFJGQyA4NDQ4Citzc2xfdGxzMV8zX2Rlcml2ZV9zZWNyZXQ6TUJFRFRMU19NRF9TSEEyNTY6IjliMjE4OGU5YjJmYzZkNjRkNzFkYzMyOTkwMGUyMGJiNDE5MTUwMDBmNjc4YWE4MzljYmI3OTdjYjdkODMzMmMiOnRsczFfM19sYWJlbF9jX2VfdHJhZmZpYzoiMDhhZDBmYTA1ZDdjNzIzM2IxNzc1YmEyZmY5ZjRjNWI4YjU5Mjc2YjdmMjI3ZjEzYTk3NjI0NWY1ZDk2MDkxMyI6MzI6TUJFRFRMU19TU0xfVExTMV8zX0NPTlRFWFRfSEFTSEVEOiIzZmJiZTZhNjBkZWI2NmMzMGEzMjc5NWFiYTBlZmY3ZWFhMTAxMDU1ODZlN2JlNWMwOTY3OGQ2M2I2Y2FhYjYyIgorCitTU0wgVExTIDEuMyBLZXkgc2NoZWR1bGU6IERlcml2ZS1TZWNyZXQoIC4sICJlIGV4cCBtYXN0ZXIiLCBoYXNoKQorIyBWZWN0b3IgZnJvbSBSRkMgODQ0OAorc3NsX3RsczFfM19kZXJpdmVfc2VjcmV0Ok1CRURUTFNfTURfU0hBMjU2OiI5YjIxODhlOWIyZmM2ZDY0ZDcxZGMzMjk5MDBlMjBiYjQxOTE1MDAwZjY3OGFhODM5Y2JiNzk3Y2I3ZDgzMzJjIjp0bHMxXzNfbGFiZWxfZV9leHBfbWFzdGVyOiIwOGFkMGZhMDVkN2M3MjMzYjE3NzViYTJmZjlmNGM1YjhiNTkyNzZiN2YyMjdmMTNhOTc2MjQ1ZjVkOTYwOTEzIjozMjpNQkVEVExTX1NTTF9UTFMxXzNfQ09OVEVYVF9IQVNIRUQ6ImIyMDI2ODY2NjEwOTM3ZDc0MjNlNWJlOTA4NjJjY2YyNGMwZTYwOTExODZkMzRmODEyMDg5ZmY1YmUyZWY3ZGYiCisKK1NTTCBUTFMgMS4zIEtleSBzY2hlZHVsZTogRGVyaXZlLVNlY3JldCggLiwgImMgaHMgdHJhZmZpYyIsIGhhc2gpCisjIFZlY3RvciBmcm9tIFJGQyA4NDQ4Citzc2xfdGxzMV8zX2Rlcml2ZV9zZWNyZXQ6TUJFRFRMU19NRF9TSEEyNTY6IjAwNWNiMTEyZmQ4ZWI0Y2NjNjIzYmI4OGEwN2M2NGIzZWRlMTYwNTM2M2ZjN2QwZGY4YzdjZTRmZjBmYjRhZTYiOnRsczFfM19sYWJlbF9jX2hzX3RyYWZmaWM6ImY3MzZjYjM0ZmUyNWU3MDE1NTFiZWU2ZmQyNGMxY2M3MTAyYTdkYWY5NDA1Y2IxNWQ5N2FhZmUxNmY3NTdkMDMiOjozMjpNQkVEVExTX1NTTF9UTFMxXzNfQ09OVEVYVF9IQVNIRUQ6IjJmYWFjMDhmODUxZDM1ZmVhMzYwNGZjYjRkZTgyZGM2MmM5YjE2NGE3MDk3NGQwNDYyZTI3ZjFhYjI3ODcwMGYiCisKK1NTTCBUTFMgMS4zIEtleSBzY2hlZHVsZTogRGVyaXZlLVNlY3JldCggLiwgInMgaHMgdHJhZmZpYyIsIGhhc2gpCisjIFZlY3RvciBmcm9tIFJGQyA4NDQ4Citzc2xfdGxzMV8zX2Rlcml2ZV9zZWNyZXQ6TUJFRFRMU19NRF9TSEEyNTY6IjAwNWNiMTEyZmQ4ZWI0Y2NjNjIzYmI4OGEwN2M2NGIzZWRlMTYwNTM2M2ZjN2QwZGY4YzdjZTRmZjBmYjRhZTYiOnRsczFfM19sYWJlbF9zX2hzX3RyYWZmaWM6ImY3MzZjYjM0ZmUyNWU3MDE1NTFiZWU2ZmQyNGMxY2M3MTAyYTdkYWY5NDA1Y2IxNWQ5N2FhZmUxNmY3NTdkMDMiOjMyOk1CRURUTFNfU1NMX1RMUzFfM19DT05URVhUX0hBU0hFRDoiZmU5MjdhZTI3MTMxMmU4YmYwMjc1YjU4MWM1NGVlZjAyMDQ1MGRjNGVjZmZhYTA1YTFhMzVkMjc1MThlNzgwMyIKKworU1NMIFRMUyAxLjMgS2V5IHNjaGVkdWxlOiBEZXJpdmUtU2VjcmV0KCAuLCAiYyBhcCB0cmFmZmljIiwgaGFzaCkKKyMgVmVjdG9yIGZyb20gUkZDIDg0NDgKK3NzbF90bHMxXzNfZGVyaXZlX3NlY3JldDpNQkVEVExTX01EX1NIQTI1NjoiZTJkMzJkNGVkNjZkZDM3ODk3YTBlODBjODQxMDc1MDNjZTU4YmY4YWFkNGNiNTVhNTAwMmQ3N2VjYjg5MGVjZSI6dGxzMV8zX2xhYmVsX2NfYXBfdHJhZmZpYzoiYjBhZWZmYzQ2YTJjZmUzMzExNGU2ZmQ3ZDUxZjlmMDRiMWNhM2M0OTdkYWIwODkzNGE3NzRhOWQ5YWQ3ZGJmMyI6MzI6TUJFRFRMU19TU0xfVExTMV8zX0NPTlRFWFRfSEFTSEVEOiIyYWJiZjJiOGUzODFkMjNkYmViZTFkZDJhN2QxNmE4YmY0ODRjYjQ5NTBkMjNmYjdmYjdmYTg1NDcwNjJkOWExIgorCitTU0wgVExTIDEuMyBLZXkgc2NoZWR1bGU6IERlcml2ZS1TZWNyZXQoIC4sICJzIGFwIHRyYWZmaWMiLCBoYXNoKSAjMgorIyBWZWN0b3IgZnJvbSBSRkMgODQ0OAorc3NsX3RsczFfM19kZXJpdmVfc2VjcmV0Ok1CRURUTFNfTURfU0hBMjU2OiJlMmQzMmQ0ZWQ2NmRkMzc4OTdhMGU4MGM4NDEwNzUwM2NlNThiZjhhYWQ0Y2I1NWE1MDAyZDc3ZWNiODkwZWNlIjp0bHMxXzNfbGFiZWxfc19hcF90cmFmZmljOiJiMGFlZmZjNDZhMmNmZTMzMTE0ZTZmZDdkNTFmOWYwNGIxY2EzYzQ5N2RhYjA4OTM0YTc3NGE5ZDlhZDdkYmYzIjozMjpNQkVEVExTX1NTTF9UTFMxXzNfQ09OVEVYVF9IQVNIRUQ6ImNjMjFmMWJmOGZlYjdkZDVmYTUwNWJkOWM0YjQ2OGE5OTg0ZDU1NGE5OTNkYzQ5ZTZkMjg1NTk4ZmI2NzI2OTEiCisKK1NTTCBUTFMgMS4zIEtleSBzY2hlZHVsZTogRGVyaXZlLVNlY3JldCggLiwgImV4cCBtYXN0ZXIiLCBoYXNoKQorIyBWZWN0b3IgZnJvbSBSRkMgODQ0OAorc3NsX3RsczFfM19kZXJpdmVfc2VjcmV0Ok1CRURUTFNfTURfU0hBMjU2OiJlMmQzMmQ0ZWQ2NmRkMzc4OTdhMGU4MGM4NDEwNzUwM2NlNThiZjhhYWQ0Y2I1NWE1MDAyZDc3ZWNiODkwZWNlIjp0bHMxXzNfbGFiZWxfZXhwX21hc3RlcjoiYjBhZWZmYzQ2YTJjZmUzMzExNGU2ZmQ3ZDUxZjlmMDRiMWNhM2M0OTdkYWIwODkzNGE3NzRhOWQ5YWQ3ZGJmMyI6MzI6TUJFRFRMU19TU0xfVExTMV8zX0NPTlRFWFRfSEFTSEVEOiIzZmQ5M2Q0ZmZkZGM5OGU2NGIxNGRkMTA3YWVkZjhlZTRhZGQyM2Y0NTEwZjU4YTQ1OTJkMGIyMDFiZWU1NmI0IgorCitTU0wgVExTIDEuMyBLZXkgc2NoZWR1bGU6IERlcml2ZS1TZWNyZXQoIC4sICJyZXMgbWFzdGVyIiwgaGFzaCkKKyMgVmVjdG9yIGZyb20gUkZDIDg0NDgKK3NzbF90bHMxXzNfZGVyaXZlX3NlY3JldDpNQkVEVExTX01EX1NIQTI1NjoiZTJkMzJkNGVkNjZkZDM3ODk3YTBlODBjODQxMDc1MDNjZTU4YmY4YWFkNGNiNTVhNTAwMmQ3N2VjYjg5MGVjZSI6dGxzMV8zX2xhYmVsX3Jlc19tYXN0ZXI6ImMzYzEyMmUwYmQ5MDdhNGEzZmY2MTEyZDhmZDUzZGJmODljNzczZDk1NTJlOGI2YjlkNTZkMzYxYjNhOTdiZjYiOjMyOk1CRURUTFNfU1NMX1RMUzFfM19DT05URVhUX0hBU0hFRDoiNWU5NWJkZjFmODkwMDVlYTJlOWFhMGJhODVlNzI4ZTNjMTljNWZlMGM2OTllM2Y1YmVlNTlmYWViZDBiNTQwNiIKKwogU1NMIFRMU19QUkYgTUJFRFRMU19TU0xfVExTX1BSRl9OT05FCiBzc2xfdGxzX3ByZjpNQkVEVExTX1NTTF9UTFNfUFJGX05PTkU6IiI6IiI6InRlc3QgdGxzX3ByZiBsYWJlbCI6IiI6TUJFRFRMU19FUlJfU1NMX0ZFQVRVUkVfVU5BVkFJTEFCTEUKIApAQCAtOTUwNCwzICsxMDY1NSwzMSBAQAogU2Vzc2lvbiBzZXJpYWxpemF0aW9uLCBsb2FkIGJ1ZmZlciBzaXplOiBsYXJnZSB0aWNrZXQsIGNlcnQKIGRlcGVuZHNfb246TUJFRFRMU19TU0xfU0VTU0lPTl9USUNLRVRTOk1CRURUTFNfU1NMX0NMSV9DOk1CRURUTFNfWDUwOV9VU0VfQzpNQkVEVExTX1BFTV9QQVJTRV9DOk1CRURUTFNfRUNEU0FfQzpNQkVEVExTX0VDUF9EUF9TRUNQMjU2UjFfRU5BQkxFRDpNQkVEVExTX1NIQTI1Nl9DOk1CRURUTFNfRlNfSU8KIHNzbF9zZXJpYWxpemVfc2Vzc2lvbl9sb2FkX2J1Zl9zaXplOjEwMjM6ImRhdGFfZmlsZXMvc2VydmVyNS5jcnQiCisKK0NvbnN0YW50LWZsb3cgSE1BQzogTUQ1CitkZXBlbmRzX29uOk1CRURUTFNfTUQ1X0MKK3NzbF9jZl9obWFjOk1CRURUTFNfTURfTUQ1CisKK0NvbnN0YW50LWZsb3cgSE1BQzogU0hBMQorZGVwZW5kc19vbjpNQkVEVExTX1NIQTFfQworc3NsX2NmX2htYWM6TUJFRFRMU19NRF9TSEExCisKK0NvbnN0YW50LWZsb3cgSE1BQzogU0hBMjU2CitkZXBlbmRzX29uOk1CRURUTFNfU0hBMjU2X0MKK3NzbF9jZl9obWFjOk1CRURUTFNfTURfU0hBMjU2CisKK0NvbnN0YW50LWZsb3cgSE1BQzogU0hBMzg0CitkZXBlbmRzX29uOk1CRURUTFNfU0hBNTEyX0M6IU1CRURUTFNfU0hBNTEyX05PX1NIQTM4NAorc3NsX2NmX2htYWM6TUJFRFRMU19NRF9TSEEzODQKKworIyB0aGVzZSBhcmUgdGhlIG51bWJlcnMgd2UnZCBnZXQgd2l0aCBhbiBlbXB0eSBwbGFpbnRleHQgYW5kIHRydW5jYXRlZCBITUFDCitDb25zdGFudC1mbG93IG1lbWNweSBmcm9tIG9mZnNldDogc21hbGwKK3NzbF9jZl9tZW1jcHlfb2Zmc2V0OjA6NToxMAorCisjIHdlIGNvdWxkIGdldCB0aGlzIHdpdGggMjU1LWJ5dGVzIHBsYWludGV4dCBhbmQgdW50cnVuY2F0ZWQgU0hBLTI1NgorQ29uc3RhbnQtZmxvdyBtZW1jcHkgZnJvbSBvZmZzZXQ6IG1lZGl1bQorc3NsX2NmX21lbWNweV9vZmZzZXQ6MDoyNTU6MzIKKworIyB3ZSBjb3VsZCBnZXQgdGhpcyB3aXRoIDI1NS1ieXRlcyBwbGFpbnRleHQgYW5kIHVudHJ1bmNhdGVkIFNIQS0zODQKK0NvbnN0YW50LWZsb3cgbWVtY3B5IGZyb20gb2Zmc2V0OiBsYXJnZQorc3NsX2NmX21lbWNweV9vZmZzZXQ6MTAwOjMzOTo0OApkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc3NsLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfc3NsLmZ1bmN0aW9uCmluZGV4IDVjZjZlOGIuLmYzNzdmZmEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3NzbC5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV9zc2wuZnVuY3Rpb24KQEAgLTYsNiArNiwxOSBAQAogI2luY2x1ZGUgPG1iZWR0bHMvY2VydHMuaD4KICNpbmNsdWRlIDxtYmVkdGxzL3RpbWluZy5oPgogI2luY2x1ZGUgPG1iZWR0bHMvZGVidWcuaD4KKyNpbmNsdWRlIDxzc2xfdGxzMTNfa2V5cy5oPgorCisjaW5jbHVkZSA8c3NsX2ludmFzaXZlLmg+CisKKyNpbmNsdWRlIDx0ZXN0L2NvbnN0YW50X2Zsb3cuaD4KKworZW51bQoreworI2RlZmluZSBNQkVEVExTX1NTTF9UTFMxXzNfTEFCRUwoIG5hbWUsIHN0cmluZyApICAgXAorICAgICB0bHMxXzNfbGFiZWxfICMjIG5hbWUsCitNQkVEVExTX1NTTF9UTFMxXzNfTEFCRUxfTElTVAorI3VuZGVmIE1CRURUTFNfU1NMX1RMUzFfM19MQUJFTAorfTsKIAogdHlwZWRlZiBzdHJ1Y3QgbG9nX3BhdHRlcm4KIHsKQEAgLTM0NTIsMTMgKzM0NjUsMzcwIEBACiB9CiAvKiBFTkRfQ0FTRSAqLwogCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkM6TUJFRFRMU19BRVNfQzpNQkVEVExTX1NTTF9QUk9UT19UTFMxXzIgKi8KK3ZvaWQgc3NsX2RlY3J5cHRfbm9uX2V0bV9jYmMoIGludCBjaXBoZXJfdHlwZSwgaW50IGhhc2hfaWQsIGludCB0cnVuY19obWFjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aF9zZWxlY3RvciApCit7CisgICAgLyoKKyAgICAgKiBUZXN0IHJlY29yZCBkZWNyeXB0aW9uIGZvciBDQkMgd2l0aG91dCBFdE0sIGZvY3VzZWQgb24gdGhlIHZlcmlmaWNhdGlvbgorICAgICAqIG9mIHBhZGRpbmcgYW5kIE1BQy4KKyAgICAgKgorICAgICAqIEFjdHVhbGx5IGRlcGVuZHMgb24gVExTID49IDEuMCAoU1NMIDMuMCBjb21wdXRlcyB0aGUgTUFDIGRpZmZlcmVudGx5KSwKKyAgICAgKiBhbmQgZWl0aGVyIEFFUywgQVJJQSwgQ2FtZWxsaWEgb3IgREVTLCBidXQgc2luY2UgdGhlIHRlc3QgZnJhbWV3b3JrCisgICAgICogZG9lc24ndCBzdXBwb3J0IGFsdGVybmF0aW9uIGluIGRlcGVuZGVuY3kgc3RhdGVtZW50cywganVzdCBkZXBlbmQgb24KKyAgICAgKiBUTFMgMS4yIGFuZCBBRVMuCisgICAgICoKKyAgICAgKiBUaGUgbGVuZ3RoX3NlbGVjdG9yIGFyZ3VtZW50IGlzIGludGVycHJldGVkIGFzIGZvbGxvd3M6CisgICAgICogLSBpZiBpdCdzIC0xLCB0aGUgcGxhaW50ZXh0IGxlbmd0aCBpcyAwIGFuZCBtaW5pbWFsIHBhZGRpbmcgaXMgYXBwbGllZAorICAgICAqIC0gaWYgaXQncyAtMiwgdGhlIHBsYWludGV4dCBsZW5ndGggaXMgMCBhbmQgbWF4aW1hbCBwYWRkaW5nIGlzIGFwcGxpZWQKKyAgICAgKiAtIG90aGVyd2lzZSBpdCBtdXN0IGJlIGluIFswLCAyNTVdIGFuZCBpcyBwYWRkaW5nX2xlbmd0aCBmcm9tIFJGQyA1MjQ2OgorICAgICAqICAgaXQncyB0aGUgbGVuZ3RoIG9mIHRoZSByZXN0IG9mIHRoZSBwYWRkaW5nLCB0aGF0IGlzLCBleGNsdWRpbmcgdGhlCisgICAgICogICBieXRlIHRoYXQgZW5jb2RlcyB0aGUgbGVuZ3RoLiBUaGUgbWluaW1hbCBub24temVybyBwbGFpbnRleHQgbGVuZ3RoCisgICAgICogICB0aGF0IGdpdmVzIHRoaXMgcGFkZGluZ19sZW5ndGggaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZC4KKyAgICAgKi8KKyAgICBtYmVkdGxzX3NzbF9jb250ZXh0IHNzbDsgLyogT05MWSBmb3IgZGVidWdnaW5nICovCisgICAgbWJlZHRsc19zc2xfdHJhbnNmb3JtIHQwLCB0MTsKKyAgICBtYmVkdGxzX3JlY29yZCByZWMsIHJlY19zYXZlOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEwsICpidWZfc2F2ZSA9IE5VTEw7CisgICAgc2l6ZV90IGJ1Zmxlbiwgb2xlbiA9IDA7CisgICAgc2l6ZV90IHBsYWludGV4dF9sZW4sIGJsb2NrX3NpemUsIGk7CisgICAgdW5zaWduZWQgY2hhciBwYWRsZW47IC8qIGV4Y2x1ZGluZyB0aGUgcGFkZGluZ19sZW5ndGggYnl0ZSAqLworICAgIHVuc2lnbmVkIGNoYXIgYWRkX2RhdGFbMTNdOworICAgIHVuc2lnbmVkIGNoYXIgbWFjW01CRURUTFNfTURfTUFYX1NJWkVdOworICAgIGludCBleHBfcmV0OworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGFkX21heF9sZW4gPSAyNTU7IC8qIFBlciB0aGUgc3RhbmRhcmQgKi8KKworICAgIG1iZWR0bHNfc3NsX2luaXQoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF90cmFuc2Zvcm1faW5pdCggJnQwICk7CisgICAgbWJlZHRsc19zc2xfdHJhbnNmb3JtX2luaXQoICZ0MSApOworCisgICAgLyogU2V0IHVwIHRyYW5zZm9ybXMgd2l0aCBkdW1teSBrZXlzICovCisgICAgVEVTVF9BU1NFUlQoIGJ1aWxkX3RyYW5zZm9ybXMoICZ0MCwgJnQxLCBjaXBoZXJfdHlwZSwgaGFzaF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgdHJ1bmNfaG1hYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJFRFRMU19TU0xfTUlOT1JfVkVSU0lPTl8zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICwgMCApID09IDAgKTsKKworICAgIC8qIERldGVybWluZSBwYWRkaW5nL3BsYWludGV4dCBsZW5ndGggKi8KKyAgICBURVNUX0FTU0VSVCggbGVuZ3RoX3NlbGVjdG9yID49IC0yICYmIGxlbmd0aF9zZWxlY3RvciA8PSAyNTUgKTsKKyAgICBibG9ja19zaXplID0gdDAuaXZsZW47CisgICAgaWYoIGxlbmd0aF9zZWxlY3RvciA8IDAgKQorICAgIHsKKyAgICAgICAgcGxhaW50ZXh0X2xlbiA9IDA7CisKKyAgICAgICAgLyogTWluaW1hbCBwYWRkaW5nCisgICAgICAgICAqIFRoZSArMSBpcyBmb3IgdGhlIHBhZGRpbmdfbGVuZ3RoIGJ5dGUsIG5vdCBjb3VudGVkIGluIHBhZGxlbi4gKi8KKyAgICAgICAgcGFkbGVuID0gYmxvY2tfc2l6ZSAtICggdDAubWFjbGVuICsgMSApICUgYmxvY2tfc2l6ZTsKKworICAgICAgICAvKiBNYXhpbWFsIHBhZGRpbmc/ICovCisgICAgICAgIGlmKCBsZW5ndGhfc2VsZWN0b3IgPT0gLTIgKQorICAgICAgICAgICAgcGFkbGVuICs9IGJsb2NrX3NpemUgKiAoICggcGFkX21heF9sZW4gLSBwYWRsZW4gKSAvIGJsb2NrX3NpemUgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcGFkbGVuID0gbGVuZ3RoX3NlbGVjdG9yOworCisgICAgICAgIC8qIE1pbmltYWwgbm9uLXplcm8gcGxhaW50ZXh0X2xlbmd0aCBnaXZpbmcgZGVzaXJlZCBwYWRkaW5nLgorICAgICAgICAgKiBUaGUgKzEgaXMgZm9yIHRoZSBwYWRkaW5nX2xlbmd0aCBieXRlLCBub3QgY291bnRlZCBpbiBwYWRsZW4uICovCisgICAgICAgIHBsYWludGV4dF9sZW4gPSBibG9ja19zaXplIC0gKCBwYWRsZW4gKyB0MC5tYWNsZW4gKyAxICkgJSBibG9ja19zaXplOworICAgIH0KKworICAgIC8qIFByZXBhcmUgYSBidWZmZXIgZm9yIHJlY29yZCBkYXRhICovCisgICAgYnVmbGVuID0gYmxvY2tfc2l6ZQorICAgICAgICAgICArIHBsYWludGV4dF9sZW4KKyAgICAgICAgICAgKyB0MC5tYWNsZW4KKyAgICAgICAgICAgKyBwYWRsZW4gKyAxOworICAgIEFTU0VSVF9BTExPQyggYnVmLCBidWZsZW4gKTsKKyAgICBBU1NFUlRfQUxMT0MoIGJ1Zl9zYXZlLCBidWZsZW4gKTsKKworICAgIC8qIFByZXBhcmUgYSBkdW1teSByZWNvcmQgaGVhZGVyICovCisgICAgbWVtc2V0KCByZWMuY3RyLCAwLCBzaXplb2YoIHJlYy5jdHIgKSApOworICAgIHJlYy50eXBlICAgID0gTUJFRFRMU19TU0xfTVNHX0FQUExJQ0FUSU9OX0RBVEE7CisgICAgcmVjLnZlclswXSAgPSBNQkVEVExTX1NTTF9NQUpPUl9WRVJTSU9OXzM7CisgICAgcmVjLnZlclsxXSAgPSBNQkVEVExTX1NTTF9NSU5PUl9WRVJTSU9OXzM7CisjaWYgZGVmaW5lZChNQkVEVExTX1NTTF9EVExTX0NPTk5FQ1RJT05fSUQpCisgICAgcmVjLmNpZF9sZW4gPSAwOworI2VuZGlmIC8qIE1CRURUTFNfU1NMX0RUTFNfQ09OTkVDVElPTl9JRCAqLworCisgICAgLyogUHJlcGFyZSBkdW1teSByZWNvcmQgY29udGVudCAqLworICAgIHJlYy5idWYgICAgID0gYnVmOworICAgIHJlYy5idWZfbGVuID0gYnVmbGVuOworICAgIHJlYy5kYXRhX29mZnNldCA9IGJsb2NrX3NpemU7CisgICAgcmVjLmRhdGFfbGVuID0gcGxhaW50ZXh0X2xlbjsKKyAgICBtZW1zZXQoIHJlYy5idWYgKyByZWMuZGF0YV9vZmZzZXQsIDQyLCByZWMuZGF0YV9sZW4gKTsKKworICAgIC8qIFNlcmlhbGl6ZWQgdmVyc2lvbiBvZiByZWNvcmQgaGVhZGVyIGZvciBNQUMgcHVycG9zZXMgKi8KKyAgICBtZW1jcHkoIGFkZF9kYXRhLCByZWMuY3RyLCA4ICk7CisgICAgYWRkX2RhdGFbOF0gPSByZWMudHlwZTsKKyAgICBhZGRfZGF0YVs5XSA9IHJlYy52ZXJbMF07CisgICAgYWRkX2RhdGFbMTBdID0gcmVjLnZlclsxXTsKKyAgICBhZGRfZGF0YVsxMV0gPSAoIHJlYy5kYXRhX2xlbiA+PiA4ICkgJiAweGZmOworICAgIGFkZF9kYXRhWzEyXSA9ICggcmVjLmRhdGFfbGVuID4+IDAgKSAmIDB4ZmY7CisKKyAgICAvKiBTZXQgZHVtbXkgSVYgKi8KKyAgICBtZW1zZXQoIHQwLml2X2VuYywgMHg1NSwgdDAuaXZsZW4gKTsKKyAgICBtZW1jcHkoIHJlYy5idWYsIHQwLml2X2VuYywgdDAuaXZsZW4gKTsKKworICAgIC8qCisgICAgICogUHJlcGFyZSBhIHByZS1lbmNyeXB0aW9uIHJlY29yZCAod2l0aCBNQUMgYW5kIHBhZGRpbmcpLCBhbmQgc2F2ZSBpdC4KKyAgICAgKi8KKworICAgIC8qIE1BQyB3aXRoIGFkZGl0aW9uYWwgZGF0YSAqLworICAgIFRFU1RfRVFVQUwoIDAsIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZ0MC5tZF9jdHhfZW5jLCBhZGRfZGF0YSwgMTMgKSApOworICAgIFRFU1RfRVFVQUwoIDAsIG1iZWR0bHNfbWRfaG1hY191cGRhdGUoICZ0MC5tZF9jdHhfZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYy5idWYgKyByZWMuZGF0YV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjLmRhdGFfbGVuICkgKTsKKyAgICBURVNUX0VRVUFMKCAwLCBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmdDAubWRfY3R4X2VuYywgbWFjICkgKTsKKworICAgIG1lbWNweSggcmVjLmJ1ZiArIHJlYy5kYXRhX29mZnNldCArIHJlYy5kYXRhX2xlbiwgbWFjLCB0MC5tYWNsZW4gKTsKKyAgICByZWMuZGF0YV9sZW4gKz0gdDAubWFjbGVuOworCisgICAgLyogUGFkICovCisgICAgbWVtc2V0KCByZWMuYnVmICsgcmVjLmRhdGFfb2Zmc2V0ICsgcmVjLmRhdGFfbGVuLCBwYWRsZW4sIHBhZGxlbiArIDEgKTsKKyAgICByZWMuZGF0YV9sZW4gKz0gcGFkbGVuICsgMTsKKworICAgIC8qIFNhdmUgY29ycmVjdCBwcmUtZW5jcnlwdGlvbiByZWNvcmQgKi8KKyAgICByZWNfc2F2ZSA9IHJlYzsKKyAgICByZWNfc2F2ZS5idWYgPSBidWZfc2F2ZTsKKyAgICBtZW1jcHkoIGJ1Zl9zYXZlLCBidWYsIGJ1ZmxlbiApOworCisgICAgLyoKKyAgICAgKiBFbmNyeXB0IGFuZCBkZWNyeXB0IHRoZSBjb3JyZWN0IHJlY29yZCwgZXhwZWN0aW5nIHN1Y2Nlc3MKKyAgICAgKi8KKyAgICBURVNUX0VRVUFMKCAwLCBtYmVkdGxzX2NpcGhlcl9jcnlwdCggJnQwLmNpcGhlcl9jdHhfZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQwLml2X2VuYywgdDAuaXZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjLmJ1ZiArIHJlYy5kYXRhX29mZnNldCwgcmVjLmRhdGFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYy5idWYgKyByZWMuZGF0YV9vZmZzZXQsICZvbGVuICkgKTsKKyAgICByZWMuZGF0YV9vZmZzZXQgLT0gdDAuaXZsZW47CisgICAgcmVjLmRhdGFfbGVuICAgICs9IHQwLml2bGVuOworCisgICAgVEVTVF9FUVVBTCggMCwgbWJlZHRsc19zc2xfZGVjcnlwdF9idWYoICZzc2wsICZ0MSwgJnJlYyApICk7CisKKyAgICAvKgorICAgICAqIE1vZGlmeSBlYWNoIGJ5dGUgb2YgdGhlIHByZS1lbmNyeXB0aW9uIHJlY29yZCBiZWZvcmUgZW5jcnlwdGluZyBhbmQKKyAgICAgKiBkZWNyeXB0aW5nIGl0LCBleHBlY3RpbmcgZmFpbHVyZSBldmVyeSB0aW1lLgorICAgICAqLworICAgIGZvciggaSA9IGJsb2NrX3NpemU7IGkgPCBidWZsZW47IGkrKyApCisgICAgeworICAgICAgICB0ZXN0X3NldF9zdGVwKCBpICk7CisKKyAgICAgICAgLyogUmVzdG9yZSBjb3JyZWN0IHByZS1lbmNyeXB0aW9uIHJlY29yZCAqLworICAgICAgICByZWMgPSByZWNfc2F2ZTsKKyAgICAgICAgcmVjLmJ1ZiA9IGJ1ZjsKKyAgICAgICAgbWVtY3B5KCBidWYsIGJ1Zl9zYXZlLCBidWZsZW4gKTsKKworICAgICAgICAvKiBDb3JydXB0IG9uZSBieXRlIG9mIHRoZSBkYXRhIChjb3VsZCBiZSBwbGFpbnRleHQsIE1BQyBvciBwYWRkaW5nKSAqLworICAgICAgICByZWMuYnVmW2ldIF49IDB4MDE7CisKKyAgICAgICAgLyogRW5jcnlwdCAqLworICAgICAgICBURVNUX0VRVUFMKCAwLCBtYmVkdGxzX2NpcGhlcl9jcnlwdCggJnQwLmNpcGhlcl9jdHhfZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MC5pdl9lbmMsIHQwLml2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWMuYnVmICsgcmVjLmRhdGFfb2Zmc2V0LCByZWMuZGF0YV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYy5idWYgKyByZWMuZGF0YV9vZmZzZXQsICZvbGVuICkgKTsKKyAgICAgICAgcmVjLmRhdGFfb2Zmc2V0IC09IHQwLml2bGVuOworICAgICAgICByZWMuZGF0YV9sZW4gICAgKz0gdDAuaXZsZW47CisKKyAgICAgICAgLyogRGVjcnlwdCBhbmQgZXhwZWN0IGZhaWx1cmUgKi8KKyAgICAgICAgVEVTVF9FUVVBTCggTUJFRFRMU19FUlJfU1NMX0lOVkFMSURfTUFDLAorICAgICAgICAgICAgICAgICAgICBtYmVkdGxzX3NzbF9kZWNyeXB0X2J1ZiggJnNzbCwgJnQxLCAmcmVjICkgKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFVzZSBsYXJnZXIgdmFsdWVzIG9mIHRoZSBwYWRkaW5nIGJ5dGVzIC0gd2l0aCBzbWFsbCBidWZmZXJzLCB0aGlzIHRlc3RzCisgICAgICogdGhlIGNhc2Ugd2hlcmUgdGhlIGFubm91bmNlZCBwYWRsZW4gd291bGQgYmUgbGFyZ2VyIHRoYW4gdGhlIGJ1ZmZlcgorICAgICAqIChhbmQgYmVmb3JlIHRoYXQsIHRoYW4gdGhlIGJ1ZmZlciBtaW51cyB0aGUgc2l6ZSBvZiB0aGUgTUFDKSwgdG8gbWFrZQorICAgICAqIHN1cmUgb3VyIHBhZGRpbmcgY2hlY2tpbmcgY29kZSBkb2VzIG5vdCBwZXJmb3JtIGFueSBvdXQtb2YtYm91bmRzIHJlYWRzCisgICAgICogaW4gdGhpcyBjYXNlLiAoV2l0aCBsYXJnZXIgYnVmZmVycywgaWUgd2hlbiB0aGUgcGxhaW50ZXh0IGlzIGxvbmcgb3IKKyAgICAgKiBtYXhpbWFsIGxlbmd0aCBwYWRkaW5nIGlzIHVzZWQsIHRoaXMgaXMgbGVzcyByZWxldmFudCBidXQgc3RpbGwgZG9lc24ndAorICAgICAqIGh1cnQgdG8gdGVzdC4pCisgICAgICoKKyAgICAgKiAoU3RhcnQgdGhlIGxvb3Agd2l0aCBjb3JyZWN0IHBhZGRpbmcsIGp1c3QgdG8gZG91YmxlLWNoZWNrIHRoYXQgcmVjb3JkCisgICAgICogc2F2aW5nIGRpZCB3b3JrLCBhbmQgdGhhdCB3ZSdyZSBvdmVyd3JpdGluZyB0aGUgY29ycmVjdCBieXRlcy4pCisgICAgICovCisgICAgZm9yKCBpID0gcGFkbGVuOyBpIDw9IHBhZF9tYXhfbGVuOyBpKysgKQorICAgIHsKKyAgICAgICAgdGVzdF9zZXRfc3RlcCggaSApOworCisgICAgICAgIC8qIFJlc3RvcmUgY29ycmVjdCBwcmUtZW5jcnlwdGlvbiByZWNvcmQgKi8KKyAgICAgICAgcmVjID0gcmVjX3NhdmU7CisgICAgICAgIHJlYy5idWYgPSBidWY7CisgICAgICAgIG1lbWNweSggYnVmLCBidWZfc2F2ZSwgYnVmbGVuICk7CisKKyAgICAgICAgLyogU2V0IHBhZGRpbmcgYnl0ZXMgdG8gbmV3IHZhbHVlICovCisgICAgICAgIG1lbXNldCggYnVmICsgYnVmbGVuIC0gcGFkbGVuIC0gMSwgaSwgcGFkbGVuICsgMSApOworCisgICAgICAgIC8qIEVuY3J5cHQgKi8KKyAgICAgICAgVEVTVF9FUVVBTCggMCwgbWJlZHRsc19jaXBoZXJfY3J5cHQoICZ0MC5jaXBoZXJfY3R4X2VuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDAuaXZfZW5jLCB0MC5pdmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjLmJ1ZiArIHJlYy5kYXRhX29mZnNldCwgcmVjLmRhdGFfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWMuYnVmICsgcmVjLmRhdGFfb2Zmc2V0LCAmb2xlbiApICk7CisgICAgICAgIHJlYy5kYXRhX29mZnNldCAtPSB0MC5pdmxlbjsKKyAgICAgICAgcmVjLmRhdGFfbGVuICAgICs9IHQwLml2bGVuOworCisgICAgICAgIC8qIERlY3J5cHQgYW5kIGV4cGVjdCBmYWlsdXJlIGV4Y2VwdCB0aGUgZmlyc3QgdGltZSAqLworICAgICAgICBleHBfcmV0ID0gKCBpID09IHBhZGxlbiApID8gMCA6IE1CRURUTFNfRVJSX1NTTF9JTlZBTElEX01BQzsKKyAgICAgICAgVEVTVF9FUVVBTCggZXhwX3JldCwgbWJlZHRsc19zc2xfZGVjcnlwdF9idWYoICZzc2wsICZ0MSwgJnJlYyApICk7CisgICAgfQorCitleGl0OgorICAgIG1iZWR0bHNfc3NsX2ZyZWUoICZzc2wgKTsKKyAgICBtYmVkdGxzX3NzbF90cmFuc2Zvcm1fZnJlZSggJnQwICk7CisgICAgbWJlZHRsc19zc2xfdHJhbnNmb3JtX2ZyZWUoICZ0MSApOworICAgIG1iZWR0bHNfZnJlZSggYnVmICk7CisgICAgbWJlZHRsc19mcmVlKCBidWZfc2F2ZSApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU1NMX1BST1RPX1RMUzFfM19FWFBFUklNRU5UQUwgKi8KK3ZvaWQgc3NsX3RsczFfM19oa2RmX2V4cGFuZF9sYWJlbCggaW50IGhhc2hfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKnNlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhYmVsX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXNpcmVkX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpleHBlY3RlZCApCit7CisgICAgdW5zaWduZWQgY2hhciBkc3RbIDEwMCBdOworCisgICAgdW5zaWduZWQgY2hhciBjb25zdCAqbGJsID0gTlVMTDsKKyAgICBzaXplX3QgbGJsX2xlbjsKKyNkZWZpbmUgTUJFRFRMU19TU0xfVExTMV8zX0xBQkVMKCBuYW1lLCBzdHJpbmcgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiggbGFiZWxfaWR4ID09IChpbnQpIHRsczFfM19sYWJlbF8gIyMgbmFtZSApICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGJsID0gbWJlZHRsc19zc2xfdGxzMV8zX2xhYmVscy5uYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGJsX2xlbiA9IHNpemVvZiggbWJlZHRsc19zc2xfdGxzMV8zX2xhYmVscy5uYW1lICk7ICAgICAgICAgICAgIFwKKyAgICB9CitNQkVEVExTX1NTTF9UTFMxXzNfTEFCRUxfTElTVAorI3VuZGVmIE1CRURUTFNfU1NMX1RMUzFfM19MQUJFTAorICAgIFRFU1RfQVNTRVJUKCBsYmwgIT0gTlVMTCApOworCisgICAgLyogQ2hlY2sgc2FuaXR5IG9mIHRlc3QgcGFyYW1ldGVycy4gKi8KKyAgICBURVNUX0FTU0VSVCggKHNpemVfdCkgZGVzaXJlZF9sZW5ndGggPD0gc2l6ZW9mKGRzdCkgKTsKKyAgICBURVNUX0FTU0VSVCggKHNpemVfdCkgZGVzaXJlZF9sZW5ndGggPT0gZXhwZWN0ZWQtPmxlbiApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3NsX3RsczFfM19oa2RmX2V4cGFuZF9sYWJlbCgKKyAgICAgICAgICAgICAgICAgICAgICAobWJlZHRsc19tZF90eXBlX3QpIGhhc2hfYWxnLAorICAgICAgICAgICAgICAgICAgICAgIHNlY3JldC0+eCwgc2VjcmV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgbGJsLCBsYmxfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGN0eC0+eCwgY3R4LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgZHN0LCBkZXNpcmVkX2xlbmd0aCApID09IDAgKTsKKworICAgIEFTU0VSVF9DT01QQVJFKCBkc3QsIChzaXplX3QpIGRlc2lyZWRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC0+eCwgKHNpemVfdCkgZXhwZWN0ZWQtPmxlbiApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU1NMX1BST1RPX1RMUzFfM19FWFBFUklNRU5UQUwgKi8KK3ZvaWQgc3NsX3RsczFfM190cmFmZmljX2tleV9nZW5lcmF0aW9uKCBpbnQgaGFzaF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpzZXJ2ZXJfc2VjcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqY2xpZW50X3NlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzaXJlZF9pdl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc2lyZWRfa2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmV4cGVjdGVkX3NlcnZlcl93cml0ZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpleHBlY3RlZF9zZXJ2ZXJfd3JpdGVfaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpleHBlY3RlZF9jbGllbnRfd3JpdGVfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqZXhwZWN0ZWRfY2xpZW50X3dyaXRlX2l2ICkKK3sKKyAgICBtYmVkdGxzX3NzbF9rZXlfc2V0IGtleXM7CisKKyAgICAvKiBDaGVjayBzYW5pdHkgb2YgdGVzdCBwYXJhbWV0ZXJzLiAqLworICAgIFRFU1RfQVNTRVJUKCBjbGllbnRfc2VjcmV0LT5sZW4gPT0gc2VydmVyX3NlY3JldC0+bGVuICk7CisgICAgVEVTVF9BU1NFUlQoIGV4cGVjdGVkX2NsaWVudF93cml0ZV9pdi0+bGVuID09IGV4cGVjdGVkX3NlcnZlcl93cml0ZV9pdi0+bGVuICYmCisgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2NsaWVudF93cml0ZV9pdi0+bGVuID09IChzaXplX3QpIGRlc2lyZWRfaXZfbGVuICk7CisgICAgVEVTVF9BU1NFUlQoIGV4cGVjdGVkX2NsaWVudF93cml0ZV9rZXktPmxlbiA9PSBleHBlY3RlZF9zZXJ2ZXJfd3JpdGVfa2V5LT5sZW4gJiYKKyAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfY2xpZW50X3dyaXRlX2tleS0+bGVuID09IChzaXplX3QpIGRlc2lyZWRfa2V5X2xlbiApOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3NsX3RsczFfM19tYWtlX3RyYWZmaWNfa2V5cygKKyAgICAgICAgICAgICAgICAgICAgIChtYmVkdGxzX21kX3R5cGVfdCkgaGFzaF9hbGcsCisgICAgICAgICAgICAgICAgICAgICBjbGllbnRfc2VjcmV0LT54LAorICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NlY3JldC0+eCwKKyAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9zZWNyZXQtPmxlbiAvKiA9PSBzZXJ2ZXJfc2VjcmV0LT5sZW4gKi8sCisgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkX2tleV9sZW4sIGRlc2lyZWRfaXZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgJmtleXMgKSA9PSAwICk7CisKKyAgICBBU1NFUlRfQ09NUEFSRSgga2V5cy5jbGllbnRfd3JpdGVfa2V5LAorICAgICAgICAgICAgICAgICAgICBrZXlzLmtleV9sZW4sCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2NsaWVudF93cml0ZV9rZXktPngsCisgICAgICAgICAgICAgICAgICAgIChzaXplX3QpIGRlc2lyZWRfa2V5X2xlbiApOworICAgIEFTU0VSVF9DT01QQVJFKCBrZXlzLnNlcnZlcl93cml0ZV9rZXksCisgICAgICAgICAgICAgICAgICAgIGtleXMua2V5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc2VydmVyX3dyaXRlX2tleS0+eCwKKyAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkgZGVzaXJlZF9rZXlfbGVuICk7CisgICAgQVNTRVJUX0NPTVBBUkUoIGtleXMuY2xpZW50X3dyaXRlX2l2LAorICAgICAgICAgICAgICAgICAgICBrZXlzLml2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfY2xpZW50X3dyaXRlX2l2LT54LAorICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSBkZXNpcmVkX2l2X2xlbiApOworICAgIEFTU0VSVF9DT01QQVJFKCBrZXlzLnNlcnZlcl93cml0ZV9pdiwKKyAgICAgICAgICAgICAgICAgICAga2V5cy5pdl9sZW4sCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3NlcnZlcl93cml0ZV9pdi0+eCwKKyAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkgZGVzaXJlZF9pdl9sZW4gKTsKK30KKy8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NTTF9QUk9UT19UTFMxXzNfRVhQRVJJTUVOVEFMICovCit2b2lkIHNzbF90bHMxXzNfZGVyaXZlX3NlY3JldCggaW50IGhhc2hfYWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqc2VjcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYWJlbF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc2lyZWRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHJlYWR5X2hhc2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmV4cGVjdGVkICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGRzdFsgMTAwIF07CisKKyAgICB1bnNpZ25lZCBjaGFyIGNvbnN0ICpsYmwgPSBOVUxMOworICAgIHNpemVfdCBsYmxfbGVuOworI2RlZmluZSBNQkVEVExTX1NTTF9UTFMxXzNfTEFCRUwoIG5hbWUsIHN0cmluZyApICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmKCBsYWJlbF9pZHggPT0gKGludCkgdGxzMV8zX2xhYmVsXyAjIyBuYW1lICkgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsYmwgPSBtYmVkdGxzX3NzbF90bHMxXzNfbGFiZWxzLm5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsYmxfbGVuID0gc2l6ZW9mKCBtYmVkdGxzX3NzbF90bHMxXzNfbGFiZWxzLm5hbWUgKTsgICAgICAgICAgICAgXAorICAgIH0KK01CRURUTFNfU1NMX1RMUzFfM19MQUJFTF9MSVNUCisjdW5kZWYgTUJFRFRMU19TU0xfVExTMV8zX0xBQkVMCisgICAgVEVTVF9BU1NFUlQoIGxibCAhPSBOVUxMICk7CisKKyAgICAvKiBDaGVjayBzYW5pdHkgb2YgdGVzdCBwYXJhbWV0ZXJzLiAqLworICAgIFRFU1RfQVNTRVJUKCAoc2l6ZV90KSBkZXNpcmVkX2xlbmd0aCA8PSBzaXplb2YoZHN0KSApOworICAgIFRFU1RfQVNTRVJUKCAoc2l6ZV90KSBkZXNpcmVkX2xlbmd0aCA9PSBleHBlY3RlZC0+bGVuICk7CisKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc19zc2xfdGxzMV8zX2Rlcml2ZV9zZWNyZXQoCisgICAgICAgICAgICAgICAgICAgICAgKG1iZWR0bHNfbWRfdHlwZV90KSBoYXNoX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICBzZWNyZXQtPngsIHNlY3JldC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgIGxibCwgbGJsX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjdHgtPngsIGN0eC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlfaGFzaGVkLAorICAgICAgICAgICAgICAgICAgICAgIGRzdCwgZGVzaXJlZF9sZW5ndGggKSA9PSAwICk7CisKKyAgICBBU1NFUlRfQ09NUEFSRSggZHN0LCBkZXNpcmVkX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQtPngsIGRlc2lyZWRfbGVuZ3RoICk7Cit9CisvKiBFTkRfQ0FTRSAqLworCisvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19TU0xfUFJPVE9fVExTMV8zX0VYUEVSSU1FTlRBTCAqLwordm9pZCBzc2xfdGxzMV8zX2tleV9ldm9sdXRpb24oIGludCBoYXNoX2FsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKnNlY3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqZXhwZWN0ZWQgKQoreworICAgIHVuc2lnbmVkIGNoYXIgc2VjcmV0X25ld1sgTUJFRFRMU19NRF9NQVhfU0laRSBdOworCisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfc3NsX3RsczFfM19ldm9sdmVfc2VjcmV0KAorICAgICAgICAgICAgICAgICAgICAgIChtYmVkdGxzX21kX3R5cGVfdCkgaGFzaF9hbGcsCisgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0LT5sZW4gPyBzZWNyZXQtPnggOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgIGlucHV0LT5sZW4gPyBpbnB1dC0+eCA6IE5VTEwsIGlucHV0LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0X25ldyApID09IDAgKTsKKworICAgIEFTU0VSVF9DT01QQVJFKCBzZWNyZXRfbmV3LCAoc2l6ZV90KSBleHBlY3RlZC0+bGVuLAorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC0+eCwgKHNpemVfdCkgZXhwZWN0ZWQtPmxlbiApOworfQorLyogRU5EX0NBU0UgKi8KKwogLyogQkVHSU5fQ0FTRSAqLwogdm9pZCBzc2xfdGxzX3ByZiggaW50IHR5cGUsIGRhdGFfdCAqIHNlY3JldCwgZGF0YV90ICogcmFuZG9tLAotICAgICAgICAgICAgICAgICAgY2hhciAqbGFiZWwsIGRhdGFfdCAqcmVzdWx0X2hleF9zdHIsIGludCBleHBfcmV0ICkKKyAgICAgICAgICAgICAgICAgIGNoYXIgKmxhYmVsLCBkYXRhX3QgKnJlc3VsdF9zdHIsIGludCBleHBfcmV0ICkKIHsKICAgICB1bnNpZ25lZCBjaGFyICpvdXRwdXQ7CiAKLSAgICBvdXRwdXQgPSBtYmVkdGxzX2NhbGxvYyggMSwgcmVzdWx0X2hleF9zdHItPmxlbiApOworICAgIG91dHB1dCA9IG1iZWR0bHNfY2FsbG9jKCAxLCByZXN1bHRfc3RyLT5sZW4gKTsKICAgICBpZiggb3V0cHV0ID09IE5VTEwgKQogICAgICAgICBnb3RvIGV4aXQ7CiAKQEAgLTM0NjgsMTIgKzM4MzgsMTIgQEAKIAogICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3NzbF90bHNfcHJmKCB0eXBlLCBzZWNyZXQtPngsIHNlY3JldC0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCwgcmFuZG9tLT54LCByYW5kb20tPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCByZXN1bHRfaGV4X3N0ci0+bGVuICkgPT0gZXhwX3JldCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIHJlc3VsdF9zdHItPmxlbiApID09IGV4cF9yZXQgKTsKIAogICAgIGlmKCBleHBfcmV0ID09IDAgKQogICAgIHsKLSAgICAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgcmVzdWx0X2hleF9zdHItPngsCi0gICAgICAgICAgICAgICAgICAgICByZXN1bHRfaGV4X3N0ci0+bGVuLCByZXN1bHRfaGV4X3N0ci0+bGVuICkgPT0gMCApOworICAgICAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCByZXN1bHRfc3RyLT54LAorICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N0ci0+bGVuLCByZXN1bHRfc3RyLT5sZW4gKSA9PSAwICk7CiAgICAgfQogZXhpdDoKIApAQCAtNDA1MCwzICs0NDIwLDEzMCBAQAogICAgIGdvdG8gZXhpdDsKIH0KIC8qIEVORF9DQVNFICovCisKKy8qIEJFR0lOX0NBU0UgZGVwZW5kc19vbjpNQkVEVExTX1NTTF9TT01FX1NVSVRFU19VU0VfVExTX0NCQzpNQkVEVExTX1RFU1RfSE9PS1MgKi8KK3ZvaWQgc3NsX2NmX2htYWMoIGludCBoYXNoICkKK3sKKyAgICAvKgorICAgICAqIFRlc3QgdGhlIGZ1bmN0aW9uIG1iZWR0bHNfc3NsX2NmX2htYWMoKSBhZ2FpbnN0IGEgcmVmZXJlbmNlCisgICAgICogaW1wbGVtZW50YXRpb24uCisgICAgICovCisgICAgbWJlZHRsc19tZF9jb250ZXh0X3QgY3R4LCByZWZfY3R4OworICAgIGNvbnN0IG1iZWR0bHNfbWRfaW5mb190ICptZF9pbmZvOworICAgIHNpemVfdCBvdXRfbGVuLCBibG9ja19zaXplOworICAgIHNpemVfdCBtaW5faW5fbGVuLCBpbl9sZW4sIG1heF9pbl9sZW4sIGk7CisgICAgLyogVExTIGFkZGl0aW9uYWwgZGF0YSBpcyAxMyBieXRlcyAoaGVuY2UgdGhlICJsdWNreSAxMyIgbmFtZSkgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGFkZF9kYXRhWzEzXTsKKyAgICB1bnNpZ25lZCBjaGFyIHJlZl9vdXRbTUJFRFRMU19NRF9NQVhfU0laRV07CisgICAgdW5zaWduZWQgY2hhciAqZGF0YSA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqb3V0ID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyIHJlY19udW0gPSAwOworCisgICAgbWJlZHRsc19tZF9pbml0KCAmY3R4ICk7CisgICAgbWJlZHRsc19tZF9pbml0KCAmcmVmX2N0eCApOworCisgICAgbWRfaW5mbyA9IG1iZWR0bHNfbWRfaW5mb19mcm9tX3R5cGUoIGhhc2ggKTsKKyAgICBURVNUX0FTU0VSVCggbWRfaW5mbyAhPSBOVUxMICk7CisgICAgb3V0X2xlbiA9IG1iZWR0bHNfbWRfZ2V0X3NpemUoIG1kX2luZm8gKTsKKyAgICBURVNUX0FTU0VSVCggb3V0X2xlbiAhPSAwICk7CisgICAgYmxvY2tfc2l6ZSA9IGhhc2ggPT0gTUJFRFRMU19NRF9TSEEzODQgPyAxMjggOiA2NDsKKworICAgIC8qIFVzZSBhbGxvY2F0ZWQgb3V0IGJ1ZmZlciB0byBjYXRjaCBvdmVyd3JpdGVzICovCisgICAgQVNTRVJUX0FMTE9DKCBvdXQsIG91dF9sZW4gKTsKKworICAgIC8qIFNldCB1cCBjb250ZXh0cyB3aXRoIHRoZSBnaXZlbiBoYXNoIGFuZCBhIGR1bW15IGtleSAqLworICAgIFRFU1RfRVFVQUwoIDAsIG1iZWR0bHNfbWRfc2V0dXAoICZjdHgsIG1kX2luZm8sIDEgKSApOworICAgIFRFU1RfRVFVQUwoIDAsIG1iZWR0bHNfbWRfc2V0dXAoICZyZWZfY3R4LCBtZF9pbmZvLCAxICkgKTsKKyAgICBtZW1zZXQoIHJlZl9vdXQsIDQyLCBzaXplb2YoIHJlZl9vdXQgKSApOworICAgIFRFU1RfRVFVQUwoIDAsIG1iZWR0bHNfbWRfaG1hY19zdGFydHMoICZjdHgsIHJlZl9vdXQsIG91dF9sZW4gKSApOworICAgIFRFU1RfRVFVQUwoIDAsIG1iZWR0bHNfbWRfaG1hY19zdGFydHMoICZyZWZfY3R4LCByZWZfb3V0LCBvdXRfbGVuICkgKTsKKyAgICBtZW1zZXQoIHJlZl9vdXQsIDAsIHNpemVvZiggcmVmX291dCApICk7CisKKyAgICAvKgorICAgICAqIFRlc3QgYWxsIHBvc3NpYmxlIGxlbmd0aHMgdXAgdG8gYSBwb2ludC4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbgorICAgICAqIG1heF9pbl9sZW4gYW5kIG1pbl9pbl9sZW4gaXMgYXQgbW9zdCAyNTUsIGFuZCBtYWtlIHN1cmUgdGhleSBib3RoIHZhcnkKKyAgICAgKiBieSBhdCBsZWFzdCBvbmUgYmxvY2sgc2l6ZS4KKyAgICAgKi8KKyAgICBmb3IoIG1heF9pbl9sZW4gPSAwOyBtYXhfaW5fbGVuIDw9IDI1NSArIGJsb2NrX3NpemU7IG1heF9pbl9sZW4rKyApCisgICAgeworICAgICAgICB0ZXN0X3NldF9zdGVwKCBtYXhfaW5fbGVuICogMTAwMDAgKTsKKworICAgICAgICAvKiBVc2UgYWxsb2NhdGVkIGluIGJ1ZmZlciB0byBjYXRjaCBvdmVycmVhZHMgKi8KKyAgICAgICAgQVNTRVJUX0FMTE9DKCBkYXRhLCBtYXhfaW5fbGVuICk7CisKKyAgICAgICAgbWluX2luX2xlbiA9IG1heF9pbl9sZW4gPiAyNTUgPyBtYXhfaW5fbGVuIC0gMjU1IDogMDsKKyAgICAgICAgZm9yKCBpbl9sZW4gPSBtaW5faW5fbGVuOyBpbl9sZW4gPD0gbWF4X2luX2xlbjsgaW5fbGVuKysgKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0X3NldF9zdGVwKCBtYXhfaW5fbGVuICogMTAwMDAgKyBpbl9sZW4gKTsKKworICAgICAgICAgICAgLyogU2V0IHVwIGR1bW15IGRhdGEgYW5kIGFkZF9kYXRhICovCisgICAgICAgICAgICByZWNfbnVtKys7CisgICAgICAgICAgICBtZW1zZXQoIGFkZF9kYXRhLCByZWNfbnVtLCBzaXplb2YoIGFkZF9kYXRhICkgKTsKKyAgICAgICAgICAgIGZvciggaSA9IDA7IGkgPCBpbl9sZW47IGkrKyApCisgICAgICAgICAgICAgICAgZGF0YVtpXSA9ICggaSAmIDB4ZmYgKSBeIHJlY19udW07CisKKyAgICAgICAgICAgIC8qIEdldCB0aGUgZnVuY3Rpb24ncyByZXN1bHQgKi8KKyAgICAgICAgICAgIFRFU1RfQ0ZfU0VDUkVUKCAmaW5fbGVuLCBzaXplb2YoIGluX2xlbiApICk7CisgICAgICAgICAgICBURVNUX0VRVUFMKCAwLCBtYmVkdGxzX3NzbF9jZl9obWFjKCAmY3R4LCBhZGRfZGF0YSwgc2l6ZW9mKCBhZGRfZGF0YSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX2luX2xlbiwgbWF4X2luX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCApICk7CisgICAgICAgICAgICBURVNUX0NGX1BVQkxJQyggJmluX2xlbiwgc2l6ZW9mKCBpbl9sZW4gKSApOworICAgICAgICAgICAgVEVTVF9DRl9QVUJMSUMoIG91dCwgb3V0X2xlbiApOworCisgICAgICAgICAgICAvKiBDb21wdXRlIHRoZSByZWZlcmVuY2UgcmVzdWx0ICovCisgICAgICAgICAgICBURVNUX0VRVUFMKCAwLCBtYmVkdGxzX21kX2htYWNfdXBkYXRlKCAmcmVmX2N0eCwgYWRkX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIGFkZF9kYXRhICkgKSApOworICAgICAgICAgICAgVEVTVF9FUVVBTCggMCwgbWJlZHRsc19tZF9obWFjX3VwZGF0ZSggJnJlZl9jdHgsIGRhdGEsIGluX2xlbiApICk7CisgICAgICAgICAgICBURVNUX0VRVUFMKCAwLCBtYmVkdGxzX21kX2htYWNfZmluaXNoKCAmcmVmX2N0eCwgcmVmX291dCApICk7CisgICAgICAgICAgICBURVNUX0VRVUFMKCAwLCBtYmVkdGxzX21kX2htYWNfcmVzZXQoICZyZWZfY3R4ICkgKTsKKworICAgICAgICAgICAgLyogQ29tcGFyZSAqLworICAgICAgICAgICAgQVNTRVJUX0NPTVBBUkUoIG91dCwgb3V0X2xlbiwgcmVmX291dCwgb3V0X2xlbiApOworICAgICAgICB9CisKKyAgICAgICAgbWJlZHRsc19mcmVlKCBkYXRhICk7CisgICAgICAgIGRhdGEgPSBOVUxMOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX21kX2ZyZWUoICZyZWZfY3R4ICk7CisgICAgbWJlZHRsc19tZF9mcmVlKCAmY3R4ICk7CisKKyAgICBtYmVkdGxzX2ZyZWUoIGRhdGEgKTsKKyAgICBtYmVkdGxzX2ZyZWUoIG91dCApOworfQorLyogRU5EX0NBU0UgKi8KKworLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfU1NMX1NPTUVfU1VJVEVTX1VTRV9UTFNfQ0JDOk1CRURUTFNfVEVTVF9IT09LUyAqLwordm9pZCBzc2xfY2ZfbWVtY3B5X29mZnNldCggaW50IG9mZnNldF9taW4sIGludCBvZmZzZXRfbWF4LCBpbnQgbGVuICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpkc3QgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKnNyYyA9IE5VTEw7CisgICAgc2l6ZV90IHNyY19sZW4gPSBvZmZzZXRfbWF4ICsgbGVuOworICAgIHNpemVfdCBzZWNyZXQ7CisKKyAgICBBU1NFUlRfQUxMT0MoIGRzdCwgbGVuICk7CisgICAgQVNTRVJUX0FMTE9DKCBzcmMsIHNyY19sZW4gKTsKKworICAgIC8qIEZpbGwgc3JjIGluIGEgd2F5IHRoYXQgd2UgY2FuIGRldGVjdCBpZiB3ZSBjb3BpZWQgdGhlIHJpZ2h0IGJ5dGVzICovCisgICAgbWJlZHRsc190ZXN0X3JuZF9zdGRfcmFuZCggTlVMTCwgc3JjLCBzcmNfbGVuICk7CisKKyAgICBmb3IoIHNlY3JldCA9IG9mZnNldF9taW47IHNlY3JldCA8PSAoc2l6ZV90KSBvZmZzZXRfbWF4OyBzZWNyZXQrKyApCisgICAgeworICAgICAgICB0ZXN0X3NldF9zdGVwKCAoaW50KSBzZWNyZXQgKTsKKworICAgICAgICBURVNUX0NGX1NFQ1JFVCggJnNlY3JldCwgc2l6ZW9mKCBzZWNyZXQgKSApOworICAgICAgICBtYmVkdGxzX3NzbF9jZl9tZW1jcHlfb2Zmc2V0KCBkc3QsIHNyYywgc2VjcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRfbWluLCBvZmZzZXRfbWF4LCBsZW4gKTsKKyAgICAgICAgVEVTVF9DRl9QVUJMSUMoICZzZWNyZXQsIHNpemVvZiggc2VjcmV0ICkgKTsKKyAgICAgICAgVEVTVF9DRl9QVUJMSUMoIGRzdCwgbGVuICk7CisKKyAgICAgICAgQVNTRVJUX0NPTVBBUkUoIGRzdCwgbGVuLCBzcmMgKyBzZWNyZXQsIGxlbiApOworICAgIH0KKworZXhpdDoKKyAgICBtYmVkdGxzX2ZyZWUoIGRzdCApOworICAgIG1iZWR0bHNfZnJlZSggc3JjICk7Cit9CisvKiBFTkRfQ0FTRSAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfdmVyc2lvbi5kYXRhIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfdmVyc2lvbi5kYXRhCmluZGV4IDg0NmViYjcuLmJiMjYyNDYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3ZlcnNpb24uZGF0YQorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV92ZXJzaW9uLmRhdGEKQEAgLTEsOCArMSw4IEBACiBDaGVjayBjb21waWxldGltZSBsaWJyYXJ5IHZlcnNpb24KLWNoZWNrX2NvbXBpbGV0aW1lX3ZlcnNpb246IjIuMjMuMCIKK2NoZWNrX2NvbXBpbGV0aW1lX3ZlcnNpb246IjIuMjQuMCIKIAogQ2hlY2sgcnVudGltZSBsaWJyYXJ5IHZlcnNpb24KLWNoZWNrX3J1bnRpbWVfdmVyc2lvbjoiMi4yMy4wIgorY2hlY2tfcnVudGltZV92ZXJzaW9uOiIyLjI0LjAiCiAKIENoZWNrIGZvciBNQkVEVExTX1ZFUlNJT05fQwogY2hlY2tfZmVhdHVyZToiTUJFRFRMU19WRVJTSU9OX0MiOjAKZGlmZiAtLWdpdCBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDlwYXJzZS5kYXRhIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXBhcnNlLmRhdGEKaW5kZXggMjc1YWZiNy4uYmZkYmFiMiAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXBhcnNlLmRhdGEKKysrIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXBhcnNlLmRhdGEKQEAgLTIxMjAsMTAgKzIxMjAsNjAgQEAKIGRlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCiB4NTA5cGFyc2VfY3JsOiIzMDVkMzA0NzAyMDEwMDMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTBlMDUwMDMwMGYzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NDE0MjQzNDQxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMzAxNDMwMTI4MjAyYWJjZDE3MGMzMDM4MzEzMjMzMzEzMjMzMzUzOTM1MzkzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAwMzAyMDAwMTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfRk9STUFUICsgTUJFRFRMU19FUlJfQVNOMV9MRU5HVEhfTUlTTUFUQ0gKIAorIyAzMDVjCisjICAzMDQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YnNDZXJ0TGlzdCBUQlNDZXJ0TGlzdAorIyAgIDAyMDEwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiBJTlRFR0VSIE9QVElPTkFMCisjICAgMzAwZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVBbGdvcml0aG0gQWxnb3JpdGhtSWRlbnRpZmkKKyMgICAgMDYwOTJhODY0ODg2ZjcwZDAxMDEwZQorIyAgICAwNTAwCisjICAgMzAwZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXIgTmFtZQorIyAgICAzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NDE0MjQzNDQKKyMgICAxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwICAgICAgICAgIHRoaXNVcGRhdGUgVGltZQorIyAgIDMwMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2b2tlZENlcnRpZmljYXRlcworIyAgICAzMDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkgMQorIyAgICAgODIwMmFiY2QgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckNlcnRpZmljYXRlIENlcnRpZmljYXRlU2VyaWFsTnVtCisjICAgICAxNzBjMzAzODMxMzIzMzMxMzIzMzM1MzkzNTM5ICAgICAgICByZXZvY2F0aW9uRGF0ZSBUaW1lCisjICAzMDBkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVBbGdvcml0aG0gQWxnb3JpdGhtSWRlbnRpZmkKKyMgICAwNjA5MmE4NjQ4ODZmNzBkMDEwMTBlCisjICAgMDUwMAorIyAgMDMwMjAwMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlVmFsdWUgQklUIFNUUklORworIyBUaGUgc3Vic2VxdWVudCBUQlNDZXJ0TGlzdCBuZWdhdGl2ZSB0ZXN0cyByZW1vdmUgb3IgbW9kaWZ5IHNvbWUgZWxlbWVudHMuCiBYNTA5IENSTCBBU04xIChUQlNDZXJ0TGlzdCwgc2lnIHByZXNlbnQpCiBkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQwogeDUwOXBhcnNlX2NybDoiMzA1YzMwNDcwMjAxMDAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDQxNDI0MzQ0MTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDMwMTQzMDEyODIwMmFiY2QxNzBjMzAzODMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMDMwMjAwMDEiOiJDUkwgdmVyc2lvbiAgIFw6IDFcbmlzc3VlciBuYW1lICAgXDogQ049QUJDRFxudGhpcyB1cGRhdGUgICBcOiAyMDA5LTAxLTAxIDAwXDowMFw6MDBcbm5leHQgdXBkYXRlICAgXDogMDAwMC0wMC0wMCAwMFw6MDBcOjAwXG5SZXZva2VkIGNlcnRpZmljYXRlc1w6XG5zZXJpYWwgbnVtYmVyXDogQUJcOkNEIHJldm9jYXRpb24gZGF0ZVw6IDIwMDgtMTItMzEgMjNcOjU5XDo1OVxuc2lnbmVkIHVzaW5nICBcOiBSU0Egd2l0aCBTSEEtMjI0XG4iOjAKIAorWDUwOSBDUkwgQVNOMSAoVEJTQ2VydExpc3QsIHNpZ25hdHVyZVZhbHVlIG1pc3NpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NybDoiMzA1ODMwNDcwMjAxMDAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDQxNDI0MzQ0MTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDMwMTQzMDEyODIwMmFiY2QxNzBjMzAzODMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfU0lHTkFUVVJFICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENSTCBBU04xIChUQlNDZXJ0TGlzdCwgc2lnbmF0dXJlQWxnb3JpdGhtIG1pc3NpbmcpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NybDoiMzA0OTMwNDcwMjAxMDAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDQxNDI0MzQ0MTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDMwMTQzMDEyODIwMmFiY2QxNzBjMzAzODMxMzIzMzMxMzIzMzM1MzkzNTM5IjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfQUxHICsgTUJFRFRMU19FUlJfQVNOMV9PVVRfT0ZfREFUQQorCitYNTA5IENSTCBBU04xIChUQlNDZXJ0TGlzdCwgc2luZ2xlIGVtcHR5IGVudHJ5IGF0IGVuZCkKK2RlcGVuZHNfb246TUJFRFRMU19SU0FfQzpNQkVEVExTX1NIQTI1Nl9DCit4NTA5cGFyc2VfY3JsOiIzMDM3MzAzNTAyMDEwMDMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTBlMDUwMDMwMGYzMTBkMzAwYjA2MDM1NTA0MDMxMzA0NDE0MjQzNDQxNzBjMzAzOTMwMzEzMDMxMzAzMDMwMzAzMDMwMzAwMjMwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCBnb29kIGVudHJ5IHRoZW4gZW1wdHkgZW50cnkgYXQgZW5kKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlwYXJzZV9jcmw6IjMwNGIzMDQ5MDIwMTAwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ0MTQyNDM0NDE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAzMDE2MzAxMjgyMDJhYmNkMTcwYzMwMzgzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMDAiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCBtaXNzaW5nIHRpbWUgaW4gZW50cnkpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NybDoiMzA0ZTMwMzkwMjAxMDAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDQxNDI0MzQ0MTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDMwMDYzMDA0ODIwMmFiY2QzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAwMzAyMDAwMSI6IiI6TUJFRFRMU19FUlJfWDUwOV9JTlZBTElEX0RBVEUgKyBNQkVEVExTX0VSUl9BU04xX09VVF9PRl9EQVRBCisKK1g1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCBtaXNzaW5nIHRpbWUgaW4gZW50cnkgYXQgZW5kKQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlwYXJzZV9jcmw6IjMwM2IzMDM5MDIwMTAwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ0MTQyNDM0NDE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAzMDA2MzAwNDgyMDJhYmNkIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURSArIE1CRURUTFNfRVJSX0FTTjFfT1VUX09GX0RBVEEKKworWDUwOSBDUkwgQVNOMSAoVEJTQ2VydExpc3QsIGludmFsaWQgdGFnIGZvciB0aW1lIGluIGVudHJ5KQorZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKK3g1MDlwYXJzZV9jcmw6IjMwNWMzMDQ3MDIwMTAwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ0MTQyNDM0NDE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAzMDE0MzAxMjgyMDJhYmNkMTkwYzMwMzgzMTMyMzMzMTMyMzMzNTM5MzUzOTMwMGQwNjA5MmE4NjQ4ODZmNzBkMDEwMTBlMDUwMDAzMDIwMDAxIjoiIjpNQkVEVExTX0VSUl9YNTA5X0lOVkFMSURfREFURSArIE1CRURUTFNfRVJSX0FTTjFfVU5FWFBFQ1RFRF9UQUcKKworWDUwOSBDUkwgQVNOMSAoVEJTQ2VydExpc3QsIGludmFsaWQgdGFnIGZvciBzZXJpYWwpCitkZXBlbmRzX29uOk1CRURUTFNfUlNBX0M6TUJFRFRMU19TSEEyNTZfQworeDUwOXBhcnNlX2NybDoiMzA1YzMwNDcwMjAxMDAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAzMDBmMzEwZDMwMGIwNjAzNTUwNDAzMTMwNDQxNDI0MzQ0MTcwYzMwMzkzMDMxMzAzMTMwMzAzMDMwMzAzMDMwMTQzMDEyODQwMmFiY2QxNzBjMzAzODMxMzIzMzMxMzIzMzM1MzkzNTM5MzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMDMwMjAwMDEiOiIiOk1CRURUTFNfRVJSX1g1MDlfSU5WQUxJRF9TRVJJQUwgKyBNQkVEVExTX0VSUl9BU04xX1VORVhQRUNURURfVEFHCisKIFg1MDkgQ1JMIEFTTjEgKFRCU0NlcnRMaXN0LCBubyBlbnRyaWVzKQogZGVwZW5kc19vbjpNQkVEVExTX1JTQV9DOk1CRURUTFNfU0hBMjU2X0MKIHg1MDlwYXJzZV9jcmw6IjMwNDYzMDMxMDIwMTAwMzAwZDA2MDkyYTg2NDg4NmY3MGQwMTAxMGUwNTAwMzAwZjMxMGQzMDBiMDYwMzU1MDQwMzEzMDQ0MTQyNDM0NDE3MGMzMDM5MzAzMTMwMzEzMDMwMzAzMDMwMzAzMDBkMDYwOTJhODY0ODg2ZjcwZDAxMDEwZTA1MDAwMzAyMDAwMSI6IkNSTCB2ZXJzaW9uICAgXDogMVxuaXNzdWVyIG5hbWUgICBcOiBDTj1BQkNEXG50aGlzIHVwZGF0ZSAgIFw6IDIwMDktMDEtMDEgMDBcOjAwXDowMFxubmV4dCB1cGRhdGUgICBcOiAwMDAwLTAwLTAwIDAwXDowMFw6MDBcblJldm9rZWQgY2VydGlmaWNhdGVzXDpcbnNpZ25lZCB1c2luZyAgXDogUlNBIHdpdGggU0hBLTIyNFxuIjowCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5cGFyc2UuZnVuY3Rpb24gYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5cGFyc2UuZnVuY3Rpb24KaW5kZXggOWNhYzJlYy4uMmJiYTRlMiAxMDA2NDQKLS0tIGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXBhcnNlLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDlwYXJzZS5mdW5jdGlvbgpAQCAtMTIyMCwyMSArMTIyMCwyMSBAQAogLyogRU5EX0NBU0UgKi8KIAogLyogQkVHSU5fQ0FTRSBkZXBlbmRzX29uOk1CRURUTFNfWDUwOV9DUlRfUEFSU0VfQzpNQkVEVExTX1g1MDlfUlNBU1NBX1BTU19TVVBQT1JUICovCi12b2lkIHg1MDlfcGFyc2VfcnNhc3NhX3Bzc19wYXJhbXMoIGRhdGFfdCAqIGhleF9wYXJhbXMsIGludCBwYXJhbXNfdGFnLAordm9pZCB4NTA5X3BhcnNlX3JzYXNzYV9wc3NfcGFyYW1zKCBkYXRhX3QgKiBwYXJhbXMsIGludCBwYXJhbXNfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVmX21zZ19tZCwgaW50IHJlZl9tZ2ZfbWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWZfc2FsdF9sZW4sIGludCByZWZfcmV0ICkKIHsKICAgICBpbnQgbXlfcmV0OwotICAgIG1iZWR0bHNfeDUwOV9idWYgcGFyYW1zOworICAgIG1iZWR0bHNfeDUwOV9idWYgYnVmOwogICAgIG1iZWR0bHNfbWRfdHlwZV90IG15X21zZ19tZCwgbXlfbWdmX21kOwogICAgIGludCBteV9zYWx0X2xlbjsKIAotICAgIHBhcmFtcy5wID0gaGV4X3BhcmFtcy0+eDsKLSAgICBwYXJhbXMubGVuID0gaGV4X3BhcmFtcy0+bGVuOwotICAgIHBhcmFtcy50YWcgPSBwYXJhbXNfdGFnOworICAgIGJ1Zi5wID0gcGFyYW1zLT54OworICAgIGJ1Zi5sZW4gPSBwYXJhbXMtPmxlbjsKKyAgICBidWYudGFnID0gcGFyYW1zX3RhZzsKIAotICAgIG15X3JldCA9IG1iZWR0bHNfeDUwOV9nZXRfcnNhc3NhX3Bzc19wYXJhbXMoICZwYXJhbXMsICZteV9tc2dfbWQsICZteV9tZ2ZfbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZteV9zYWx0X2xlbiApOworICAgIG15X3JldCA9IG1iZWR0bHNfeDUwOV9nZXRfcnNhc3NhX3Bzc19wYXJhbXMoICZidWYsICZteV9tc2dfbWQsICZteV9tZ2ZfbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm15X3NhbHRfbGVuICk7CiAKICAgICBURVNUX0FTU0VSVCggbXlfcmV0ID09IHJlZl9yZXQgKTsKIApkaWZmIC0tZ2l0IGEvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXdyaXRlLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeDUwOXdyaXRlLmZ1bmN0aW9uCmluZGV4IGJlOWUwYWUuLjMxZDYwMDAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3g1MDl3cml0ZS5mdW5jdGlvbgorKysgYi90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94NTA5d3JpdGUuZnVuY3Rpb24KQEAgLTUsMTEgKzUsMjUgQEAKICNpbmNsdWRlICJtYmVkdGxzL3BlbS5oIgogI2luY2x1ZGUgIm1iZWR0bHMvb2lkLmgiCiAjaW5jbHVkZSAibWJlZHRscy9yc2EuaCIKLSNpZiBkZWZpbmVkKE1CRURUTFNfVVNFX1BTQV9DUllQVE8pCisKKy8qIFRoZXNlIGFyZSB0aGUgc2FtZSBkZXBlbmRzIGFzIHRoZSB0ZXN0IGZ1bmN0aW9uIHg1MDlfY3JzX2NoZWNrX29wYXF1ZSgpLAorICogdGhlIG9ubHkgZnVuY3Rpb24gdXNpbmcgUFNBIGhlcmUuIFVzaW5nIGEgd2Vha2VyIGNvbmRpdGlvbiB3b3VsZCByZXN1bHQgaW4KKyAqIHdhcm5pbmdzIGFib3V0IHRoZSBzdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgaW4gcHNhX2NyeXB0b19oZWxwZXJzLmggYmVpbmcKKyAqIHVudXNlZC4gKi8KKyNpZiBkZWZpbmVkKE1CRURUTFNfVVNFX1BTQV9DUllQVE8pICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfUEVNX1dSSVRFX0MpICYmIFwKKyAgICBkZWZpbmVkKE1CRURUTFNfWDUwOV9DU1JfV1JJVEVfQykKICNpbmNsdWRlICJwc2EvY3J5cHRvLmgiCiAjaW5jbHVkZSAibWJlZHRscy9wc2FfdXRpbC5oIgotI2VuZGlmCi0KKyNpbmNsdWRlICJ0ZXN0L3BzYV9jcnlwdG9faGVscGVycy5oIgorI2RlZmluZSBQU0FfSU5JVCggKSBQU0FfQVNTRVJUKCBwc2FfY3J5cHRvX2luaXQoICkgKQorI2Vsc2UKKy8qIERlZmluZSBlbXB0eSBtYWNyb3Mgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZW0gaW4gdGhlIHByZWFtYmxlIGFuZCB0ZWFyZG93bgorICogb2YgZXZlcnkgdGVzdCBmdW5jdGlvbiB0aGF0IHVzZXMgUFNBIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24KKyAqIE1CRURUTFNfVVNFX1BTQV9DUllQVE8uICovCisjZGVmaW5lIFBTQV9JTklUKCApICggKHZvaWQpIDAgKQorI2RlZmluZSBQU0FfRE9ORSggKSAoICh2b2lkKSAwICkKKyNlbmRpZiAvKiBNQkVEVExTX1VTRV9QU0FfQ1JZUFRPICYmIE1CRURUTFNfUEVNX1dSSVRFX0MgJiYgTUJFRFRMU19YNTA5X0NTUl9XUklURV9DICovCiAKICNpZiBkZWZpbmVkKE1CRURUTFNfUlNBX0MpCiBpbnQgbWJlZHRsc19yc2FfZGVjcnlwdF9mdW5jKCB2b2lkICpjdHgsIGludCBtb2RlLCBzaXplX3QgKm9sZW4sCkBAIC0xNDcsNyArMTYxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjZXJ0X3R5cGUgKQogewogICAgIG1iZWR0bHNfcGtfY29udGV4dCBrZXk7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCBzbG90OworICAgIHBzYV9rZXlfaGFuZGxlX3Qgc2xvdCA9IDA7CiAgICAgcHNhX2FsZ29yaXRobV90IG1kX2FsZ19wc2E7CiAgICAgbWJlZHRsc194NTA5d3JpdGVfY3NyIHJlcTsKICAgICB1bnNpZ25lZCBjaGFyIGJ1Zls0MDk2XTsKQEAgLTE1Niw3ICsxNzAsNyBAQAogICAgIGNvbnN0IGNoYXIgKnN1YmplY3RfbmFtZSA9ICJDPU5MLE89UG9sYXJTU0wsQ049UG9sYXJTU0wgU2VydmVyIDEiOwogICAgIG1iZWR0bHNfdGVzdF9ybmRfcHNldWRvX2luZm8gcm5kX2luZm87CiAKLSAgICBwc2FfY3J5cHRvX2luaXQoKTsKKyAgICBQU0FfSU5JVCggKTsKICAgICBtZW1zZXQoICZybmRfaW5mbywgMHgyYSwgc2l6ZW9mKCBtYmVkdGxzX3Rlc3Rfcm5kX3BzZXVkb19pbmZvICkgKTsKIAogICAgIG1kX2FsZ19wc2EgPSBtYmVkdGxzX3BzYV90cmFuc2xhdGVfbWQoIChtYmVkdGxzX21kX3R5cGVfdCkgbWRfdHlwZSApOwpAQCAtMTg0LDkgKzE5OCwxMiBAQAogICAgIGJ1ZltwZW1fbGVuXSA9ICdcMCc7CiAgICAgVEVTVF9BU1NFUlQoIHg1MDlfY3J0X3ZlcmlmeWNzciggYnVmLCBwZW1fbGVuICsgMSApID09IDAgKTsKIAorCiBleGl0OgogICAgIG1iZWR0bHNfeDUwOXdyaXRlX2Nzcl9mcmVlKCAmcmVxICk7CiAgICAgbWJlZHRsc19wa19mcmVlKCAma2V5ICk7CisgICAgcHNhX2Rlc3Ryb3lfa2V5KCBzbG90ICk7CisgICAgUFNBX0RPTkUoICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCmRpZmYgLS1naXQgYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94dGVhLmZ1bmN0aW9uIGIvdGVzdHMvc3VpdGVzL3Rlc3Rfc3VpdGVfeHRlYS5mdW5jdGlvbgppbmRleCBmMjg2ZTY3Li4xZDViMjliIDEwMDY0NAotLS0gYS90ZXN0cy9zdWl0ZXMvdGVzdF9zdWl0ZV94dGVhLmZ1bmN0aW9uCisrKyBiL3Rlc3RzL3N1aXRlcy90ZXN0X3N1aXRlX3h0ZWEuZnVuY3Rpb24KQEAgLTksNyArOSw3IEBACiAKIC8qIEJFR0lOX0NBU0UgKi8KIHZvaWQgeHRlYV9lbmNyeXB0X2VjYiggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogc3JjX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90ICogaGV4X2RzdF9zdHJpbmcgKQorICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBkc3QgKQogewogICAgIHVuc2lnbmVkIGNoYXIgb3V0cHV0WzEwMF07CiAgICAgbWJlZHRsc194dGVhX2NvbnRleHQgY3R4OwpAQCAtMjAsMTQgKzIwLDEyIEBACiAgICAgbWJlZHRsc194dGVhX3NldHVwKCAmY3R4LCBrZXlfc3RyLT54ICk7CiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeHRlYV9jcnlwdF9lY2IoICZjdHgsIE1CRURUTFNfWFRFQV9FTkNSWVBULCBzcmNfc3RyLT54LCBvdXRwdXQgKSA9PSAwICk7CiAKLSAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBoZXhfZHN0X3N0cmluZy0+eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsIDgsIGRzdC0+bGVuICkgPT0gMCApOwogfQogLyogRU5EX0NBU0UgKi8KIAogLyogQkVHSU5fQ0FTRSAqLwotdm9pZCB4dGVhX2RlY3J5cHRfZWNiKCBkYXRhX3QgKiBrZXlfc3RyLCBkYXRhX3QgKiBzcmNfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZyApCit2b2lkIHh0ZWFfZGVjcnlwdF9lY2IoIGRhdGFfdCAqIGtleV9zdHIsIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX3h0ZWFfY29udGV4dCBjdHg7CkBAIC0zOCwxNCArMzYsMTMgQEAKICAgICBtYmVkdGxzX3h0ZWFfc2V0dXAoICZjdHgsIGtleV9zdHItPnggKTsKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc194dGVhX2NyeXB0X2VjYiggJmN0eCwgTUJFRFRMU19YVEVBX0RFQ1JZUFQsIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCBoZXhfZHN0X3N0cmluZy0+bGVuICkgPT0gMCApOworICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGRzdC0+eCwgOCwgZHN0LT5sZW4gKSA9PSAwICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KIHZvaWQgeHRlYV9lbmNyeXB0X2NiYyggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZyApCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX3h0ZWFfY29udGV4dCBjdHg7CkBAIC01NywxNSArNTQsMTQgQEAKICAgICBURVNUX0FTU0VSVCggbWJlZHRsc194dGVhX2NyeXB0X2NiYyggJmN0eCwgTUJFRFRMU19YVEVBX0VOQ1JZUFQsIHNyY19zdHItPmxlbiwgaXZfc3RyLT54LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0ci0+eCwgb3V0cHV0ICkgPT0gMCApOwogCi0gICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgaGV4X2RzdF9zdHJpbmctPngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X2RzdF9zdHJpbmctPmxlbiApID09IDAgKTsKKyAgICBURVNUX0FTU0VSVCggbWJlZHRsc190ZXN0X2hleGNtcCggb3V0cHV0LCBkc3QtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPmxlbiwgZHN0LT5sZW4gKSA9PSAwICk7CiB9CiAvKiBFTkRfQ0FTRSAqLwogCiAvKiBCRUdJTl9DQVNFIGRlcGVuZHNfb246TUJFRFRMU19DSVBIRVJfTU9ERV9DQkMgKi8KIHZvaWQgeHRlYV9kZWNyeXB0X2NiYyggZGF0YV90ICoga2V5X3N0ciwgZGF0YV90ICogaXZfc3RyLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3QgKiBzcmNfc3RyLCBkYXRhX3QgKiBoZXhfZHN0X3N0cmluZyApCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdCAqIHNyY19zdHIsIGRhdGFfdCAqIGRzdCApCiB7CiAgICAgdW5zaWduZWQgY2hhciBvdXRwdXRbMTAwXTsKICAgICBtYmVkdGxzX3h0ZWFfY29udGV4dCBjdHg7CkBAIC03Nyw5ICs3Myw4IEBACiAgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfeHRlYV9jcnlwdF9jYmMoICZjdHgsIE1CRURUTFNfWFRFQV9ERUNSWVBULCBzcmNfc3RyLT5sZW4sIGl2X3N0ci0+eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHItPngsIG91dHB1dCApID09IDAgKTsKIAotICAgIFRFU1RfQVNTRVJUKCBtYmVkdGxzX3Rlc3RfaGV4Y21wKCBvdXRwdXQsIGhleF9kc3Rfc3RyaW5nLT54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9kc3Rfc3RyaW5nLT5sZW4gKSA9PSAwICk7CisgICAgVEVTVF9BU1NFUlQoIG1iZWR0bHNfdGVzdF9oZXhjbXAoIG91dHB1dCwgZHN0LT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc3RyLT5sZW4sIGRzdC0+bGVuICkgPT0gMCApOwogfQogLyogRU5EX0NBU0UgKi8KIApkaWZmIC0tZ2l0IGEvdmlzdWFsYy9WUzIwMTAvbWJlZFRMUy52Y3hwcm9qIGIvdmlzdWFsYy9WUzIwMTAvbWJlZFRMUy52Y3hwcm9qCmluZGV4IDQ0MjJiN2EuLjgwMWYxN2MgMTAwNjQ0Ci0tLSBhL3Zpc3VhbGMvVlMyMDEwL21iZWRUTFMudmN4cHJvagorKysgYi92aXN1YWxjL1ZTMjAxMC9tYmVkVExTLnZjeHByb2oKQEAgLTE2Miw2ICsxNjIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxtYmVkdGxzXGNtYWMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcY29tcGF0LTEuMy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xjb25maWcuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXG1iZWR0bHNcY29uZmlnX3BzYS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xjdHJfZHJiZy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xkZWJ1Zy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVcbWJlZHRsc1xkZXMuaCIgLz4NCkBAIC0yMjMsNiArMjI0LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVccHNhXGNyeXB0by5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVccHNhXGNyeXB0b19hY2NlbF9kcml2ZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXHBzYVxjcnlwdG9fY29tcGF0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxwc2FcY3J5cHRvX2NvbmZpZy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVccHNhXGNyeXB0b19kcml2ZXJfY29tbW9uLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxwc2FcY3J5cHRvX2VudHJvcHlfZHJpdmVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5caW5jbHVkZVxwc2FcY3J5cHRvX2V4dHJhLmgiIC8+DQpAQCAtMjMyLDE5ICsyMzQsMjggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGluY2x1ZGVccHNhXGNyeXB0b19zdHJ1Y3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXHBzYVxjcnlwdG9fdHlwZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxpbmNsdWRlXHBzYVxjcnlwdG9fdmFsdWVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcaW5jbHVkZVx0ZXN0XGNvbnN0YW50X2Zsb3cuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1xpbmNsdWRlXHRlc3RcaGVscGVycy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXGluY2x1ZGVcdGVzdFxtYWNyb3MuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx0ZXN0c1xpbmNsdWRlXHRlc3RccHNhX2NyeXB0b19oZWxwZXJzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcaW5jbHVkZVx0ZXN0XHBzYV9oZWxwZXJzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcaW5jbHVkZVx0ZXN0XHJhbmRvbS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXGluY2x1ZGVcdGVzdFxkcml2ZXJzXGNpcGhlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXGluY2x1ZGVcdGVzdFxkcml2ZXJzXGtleV9tYW5hZ2VtZW50LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcaW5jbHVkZVx0ZXN0XGRyaXZlcnNcc2lnbmF0dXJlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cdGVzdHNcaW5jbHVkZVx0ZXN0XGRyaXZlcnNcc2l6ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHRlc3RzXGluY2x1ZGVcdGVzdFxkcml2ZXJzXHRlc3RfZHJpdmVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxjb21tb24uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBzYV9jcnlwdG9fY29yZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlccHNhX2NyeXB0b19kcml2ZXJfd3JhcHBlcnMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBzYV9jcnlwdG9faW52YXNpdmUuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBzYV9jcnlwdG9faXRzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxwc2FfY3J5cHRvX3NlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxwc2FfY3J5cHRvX3NlcnZpY2VfaW50ZWdyYXRpb24uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBzYV9jcnlwdG9fc2xvdF9tYW5hZ2VtZW50LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxwc2FfY3J5cHRvX3N0b3JhZ2UuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHNzbF9pbnZhc2l2ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcc3NsX3RsczEzX2tleXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwzcmRwYXJ0eVxldmVyZXN0XGluY2x1ZGVcZXZlcmVzdFxldmVyZXN0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cM3JkcGFydHlcZXZlcmVzdFxpbmNsdWRlXGV2ZXJlc3RcSGFjbF9DdXJ2ZTI1NTE5LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cM3JkcGFydHlcZXZlcmVzdFxpbmNsdWRlXGV2ZXJlc3Rca3JlbWxpYi5oIiAvPg0KQEAgLTMwNSw2ICszMTYsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxwbGF0Zm9ybV91dGlsLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxwb2x5MTMwNS5jIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlccHNhX2NyeXB0by5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlccHNhX2NyeXB0b19kcml2ZXJfd3JhcHBlcnMuYyIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBzYV9jcnlwdG9fc2UuYyIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHBzYV9jcnlwdG9fc2xvdF9tYW5hZ2VtZW50LmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVxwc2FfY3J5cHRvX3N0b3JhZ2UuYyIgLz4NCkBAIC0zMjMsNiArMzM1LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcc3NsX3Nydi5jIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcc3NsX3RpY2tldC5jIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcc3NsX3Rscy5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcc3NsX3RsczEzX2tleXMuYyIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxsaWJyYXJ5XHRocmVhZGluZy5jIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGxpYnJhcnlcdGltaW5nLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cbGlicmFyeVx2ZXJzaW9uLmMiIC8+DQo=